zadanie nr 1 termin realizacji: 28 luty 2005

C++

miesiące w roku (typ wyliczeniowy, referencje) studia dzienne

Zdefiniuj typ wyliczeniowy Miesiac reprezentujący kolejne miesiące w roku kalendarzowym (styczeń jest pierwszym, a grudzień ostatnim, czyli dwunastym miesiącem).

Następnie napisz program, który wczyta ze standardowego wejścia liczbę całkowitą n > 0 (typ int) oznaczającą rozmiar danych, a potem n słów w_{1}, …, w_{n} (typ string) będących nazwami miesięcy. Program ma za zadanie zapamiętać wczytane dane w dynamicznie zaalokowanej tablicy miesięcy, posortować te dane metodą bąbelkową i wypisać miesiące w kolejności niemalejącej.

Potrzebną na tablicę pamięć przydziel operatorem new, a na końcu zwolnij operatorem delete. Do porównywania miesięcy zdefiniuj oddzielną funkcję czyMniejszyRowny, która będzie zwracała wartość true tylko wtedy, gdy argumenty tej funkcji będą podane w kolejności niemalejącej. W samej funkcji sortującej wykorzystaj też oddzielnie zdefiniowaną funkcję zamienMiesiace do zamiany miejscami dwóch elementów.

bool czyMniejszyRowny (const Miesiac &pierwszy, const Miesiac &drugi) ;
void zamienMiesiace (Miesiac &pierwszy, Miesiac &drugi) ;
void sortujBabelkowo (Miesiac tab[], int n) ;

Zdefiniuj i wykorzystaj w programie funkcje pomocnicze, zamieniające miesiąc na odpowiedni napis i nazwę miesiąca na odpowiedni miesiąc (gdy napis nie odpowiada żadnemu miesiącu, zwróć 0).

string nazwaMiesiaca (Miesiac miesiac) ;
Miesiac jakiMiesiac (string miesiac) ;

Wypisywane przez program miesiące w kolejności niemalejącej powinny wypisywane jako łańcuchy znakowe. Na końcu wypisz, jaki miesiąc występował najczęściej a jaki najrzadziej i ile razy (napisz i użyj do tych obliczeń odpowiednich funkcji).

int najczestszyMiesiac (const Miesiac tab[], int n) ;
int najrzadszyMiesiac (const Miesiac tab[], int n) ;

Przetestuj te programy na danych zapisanych w plikach tekstowych (przetwarzanie potokowe); wyniki takż przekieruj do pliku. Zadbaj o to, by w pliku wynikowym nie pojawiały się zbędne komentarze (odpowiednio używaj strumieni wyjściowych cout i cerr).

Uniwersytet Wrocławski Paweł Rzechonek Instytut Informatyki ul. Przesmyckiego 20 PL-51-151 Wrocław