Софтуерно Инженерство
Loading...
+ Нов въпрос
polinausheva123 avatar polinausheva123 2 Точки

C++ Задача

Да се състави компютърна програма за обслужване на национално състезание по
лека атлетика за мъже и жени, в което участват до 100 състезатели от различни отбори.
Всички състезатели са родени преди 2000 г. За целта:

  1. За всеки участник да се въведе следната информация:
    • ЕГН (десетцифрен единен граждански номер);
    • име (знаков низ до 40 знака, състоящ се от две или повече подимена, разделени с точно един интервал);
    • име на отбор (знаков низ до 20 знака);
    • дисциплина (знаков низ до 25 знака);
    • място в класирането по съответната дисциплина (цяло число).
  2. Да се изведе списък на всички състезатели, съдържащ последно име на участник, име на отбор, дисциплина и място в класирането. Списъкът трябва да бъде подреден по име на отбор (в азбучен ред), а за един и същи отбор по място в класирането(възходящо). Полетата да бъдат разделени със запетая и един интервал. Например:
    Николов, Спартак-Плевен, хвърляне на копие, 1

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Здравейте, това е условието, ако някой може да ми го реши, за да видя как става. Мога да направя само това до този момент.

https://pastebin.com/Zh1xa1sr

0
Programming Basics
kolioi avatar kolioi 612 Точки

В main() правиш един цикъл, в който въвеждаш данните за всеки атлет и ги добавяш в някакъв контейнер, след това сортираш и извеждаш на екрана. Ако използваш C++ може да имаш вектор, или set още по-добре, защото в set се сортират още при въвеждането. Ако искаш на C, става и с масив, след това сортираш с qsort и извеждаш. Функцията за сравнение при сортирането е нещо такова

bool operator () (const Athlete& lhs, const Athlete& rhs) const
{
	int cmp = strcmp(lhs.team, rhs.team);
	if (!cmp)
		return lhs.place < rhs.place;
	return cmp < 0;
}

и я слагаш в структурата struct Athlete. За C  тази функция е малко по-различна.

1
21/06/2018 10:17:07
kolioi avatar kolioi 612 Точки

Така изглежда функцията main(). Използването на set  с функция за сортиране дефинирана от потребителя е малко tricky. Няма ограничение за броя на въведените атлети, но може да се добави.

int main()
{
	set<Athlete, Athlete::Comparator> athlete_list;

	do
	{
		Athlete athlete;
		cin >> athlete;
		athlete_list.insert(athlete);
		cout << "Press Enter for next athlete or Ctrl+z, Enter to finish ";
		cin.ignore();
	} while (cin.get() != EOF);

	for (const auto& athlete : athlete_list)
		cout << athlete;

	return 0;
}

Целия код https://pastebin.com/6ktg1byc

П.П. И една "олекотена" версия, в която се използва qsort() https://pastebin.com/ZxFbmm7M

0
22/06/2018 15:42:30