Премини към съдържанието
hellkiller

RQ: Програма на C++

Препоръчан отговор


Да се състави програма за обслужване на ски-състезание. За всеки състезател се въвежда следната информация: номер, име и фамилия, постижение, държава. Програмата да дава възможност за получаване на следните резултати:

1.Извеждане на списък на всички състезатели с въведените данни за тях;

2.Извеждане на списък на всички състезатели, подредени в низходящ ред на постиженията им. Ако има състезатели с едно и също постижение, по-напред в списъка да се изведе този, чието име започва с по-предна буква от азбуката.

3.Пресмятане и извеждане на средното постижение на състезателите;

4.Извеждане на списък на всички състезатели от дадена държава, които имат постижение по-ниско от средното за състезанието.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ами някакъв по-конкретен въпрос по реализацията имаш ли?

Засега мисля, че има нужда от уточняване/потвърдаване на някои неща от условието:

1) Каква азбука се използва за имената на състезателите, държавите, номерата и т.н. Т.е. може ли да са от китайски йероглифи, латиница, кирилица...?

2) И как точно е дефинирана подредбата на символите от тази азбука? Например дори ако приемем елементарния случай ASCII за азбука - тогава "Z" преди "a" ли е или не?

3) Има ли някакви други ограничения за номерата/имената/постиженията/държавите - или се въвеждат в свободен текст с "произволна" дължина.

4) За извеждането на поредения списък:

2.Извеждане на списък на всички състезатели, подредени в низходящ ред на постиженията им. Ако има състезатели с едно и също постижение, по-напред в списъка да се изведе този, чието име започва с по-предна буква от азбуката.

Какво се прави ако освен постиженията съвпадат и първите букви от имената (като предполагам, че имаш предвид първото име)? Така както си го написал - тогава са равнопоставени и веднъж единият може да е преди другия, друг път може да е обратното (т.е. не се гледат останалите букви от имената). Така ли е наистина?

5) Колко голям се очаква да бъде броят на участниците - т.е. предполага ли се че може списъкът да се събере в паметта на компюътъра или ще трябва някоя голяма база данни? (В реалния свят броят обикновено е достатъчно малък). Няма да е зле да се определи такова ограничение предварително.

6) Необходимо ли е да има защита при аварии като спре тока или нещо подобно. В нормалния случай би трябвало данните да се запомнят в някаква транзакционна база данни. Другият вариант е да ги карат състезателите да се пускат отново при подобни аварии :whist:

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

1.Използва се латиница.

2.A е преди Z.

3.няма ограничения

4.Ако съвпада първата буква се гледа втората и т.н. а ако съвпада цялото първп име се гледа фамилията.

5.не трябва отделна база данни.

6.няма нийда от защита.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Айде е хора, никой ли няма да помогне за тази задача :shake_puter:

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
публикувано (редактирано)

Ето някои идеи, за които само остава да имплементираш подробностите:

За моделиране на обектите от състезанието може да направиш следните класове:

1) Competitor - всеки обект от този клас описва един състезател и включва:

1.1. Различните атрибути за имена, резултат, държава...

1.2. Операции за

1.2.1. създаване и инициализация на състезател (конструктор)

1.2.2. сравнение с други състезатели (във връзка с изискване [2]);

1.2.3. за извеждане на екрана (или файл и т.н....) ([1],[2],[4])

1.2.4. за взимане на резултата на състезателя; и за проверяване дали състезателят е от дадена държава (това е нуждно за [4])

1.2.5. създаване на обекти с четене от файл, клавиатура и т.н. - за целите на тестове и демонстрации

2) Competition - за описание на цялото състезание, което включва:

2.1. Списък от състезатели (обекти от класа Competitor)

2.2. Операции за:

2.2.1. създаване и инициализация (конструктор)

2.2.2. извеждане на списъка от състезатели според изискване [2]. Ако направиш [2] би трябвало това да удовлетворява и [1], т.ч. не виждам смисъл [1] да се прави отделно, освен ако няма допълнителни изисквания за него.

2.2.3. За пресмятане на средното постижение (това ще трябва за [3] и [4])

2.2.4. За извеждане на списъка съгласно изискване [4]

Ето примерен интерфейс на въпросните класове:

class Competitor

{

private:

		// (1.1)

		string _number;

		string _firstName;

		string _familyName;

		double _result;

		string _country;


		string _nameKey; // uppercase на first name + second name (помага за сортирането съгласно [2])

public:

		// конструктор (1.2.1)

		Competitor(

						const string& number,

						const string& firstName,

						const string& familyName,

						double result, const string& country );


		// връжа резултата на състезателя (1.2.4)

		double getResult() const;


		// сравнение на състезатели (1.2.2)

		// връща true, ако този обект има по-малък _nameKey от c2

		bool operator < ( const Competitor& c2 ) const;


		// За (1.2.4) - връща true, ако състезателят е от дадената държава

		bool isFromCountry( const string& country ) const;


		// Извежда състезателя на съответния изходен поток (1.2.3).

		// pos е позицията на състезателя в списъка

		ostream& printForResult( ostream& out, int pos ) const;


		// (1.2.5) Създаване на състезател от ред от текстов входен поток в

		// следния формат:

		// <number> <first name> <second name> <result> <country>

		static Competitor readCompetitorEntry( istream & in );

};
class Competition

{

private:

		// (2.1) - списък от състезатели

		multiset<Competitor> _competitors;


public:

		// добавяне на състезател

		void addCompetitor( const Competitor& c );


		// За извеждане в подреден вид (2.2.2)

		// връща като резултат out

		ostream& printSorted( ostream& out );


		// Връща средния резултат (2.2.3)

		double getAverageResult() const;


		// Извежда списък от състезатели според (2.2.4)

		void printFromCountryWorseThanAvg( const string& country, ostream& out ) const;


		// за зареждане и инициализация със списък от състезатели от входен поток с формат:

		// <number> <first name> <second name> <result> <country>

		void loadCompetitorsList( istream& in );

};

Толкоз засега - ако имаш конкретни затруднения по реализацията, ще питаш пак :)

Редактирано от divak (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.