• Nie Znaleziono Wyników

Programowanie i struktury danych – egzamin Organizacja plików:

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie i struktury danych – egzamin Organizacja plików:"

Copied!
2
0
0

Pełen tekst

(1)

Programowanie i struktury danych – egzamin

Organizacja plików: Wszystkie pliki oddawane do sprawdzenia należy zapisać we wspólnym folderze o nazwie będącej numerem indeksu, umieszczonym na pulpicie. Oddajemy tylko źródła programów (pliki o rozszerzeniach .cpp i .h)!!!

Napisać pomocnicze biblioteki oraz program główny dla następującego zadania:

Biuro Logistyki Emerytalno-Finansowej analizuje regularnie dane osobowe obywateli pod kątem osiągnięcia przez nich wieku emerytalnego. W tym celu przetwarza dwa pliki zawierające dane osobowe obywateli. Pierwszy z nich nazywa się "osoby.txt" i zawiera ich dane w przypadkowej kolejności w formacie (kolejne linie):

Nazwisko Imię (oddzielone odstępem)

Drugi plik nazywa się "pesele.txt" i zawiera liczbę linii zgodną z liczbą linii w pierwszym pliku.

Każda linia zawiera numer PESEL danej osoby – pierwsza linia to PESEL pierwszej osoby, druga - drugiej, itd.

Należy wydrukować do pliku "wyniki.txt" listę zawierającą dane obywateli wraz z datami urodzin.

Pierwsze 6 cyfr numeru PESEL koduje datę urodzenia w postaci rrmmdd, gdzie rr oznacza 2 ostatnie cyfry roku urodzenia, a do mm dodawane jest 20 jeśli osoba urodziła się w roku 2000 lub późniejszym (np. 022504 oznacza datę 04.05.2002). Lista ma być uporządkowana od osoby najstarszej do najmłodszej i ma zawierać dane osobowe w następującym formacie (kolejne linie):

Data urodzenia (w formacie dd.mm.rrrr, np. 04.05.2002) Imię

Nazwisko

<pusta linia>

Wymagania formalne:

Program powinien być zapisany w trzech plikach: kontener.h, dane.h i main.cpp (wolno rozbić kontener na kontener.h i kontener.cpp, podobnie z dane.h i dane.cpp).

W plikach dane.* należy umieścić strukturę implementującą dane przetwarzane w programie, przechowywane w kontenerze, wraz z odpowiednimi metodami. Tu powinny znaleźć się też wszystkie pomocnicze funkcje, sprawdzające poprawność danych (na przykład poprawność numeru PESEL). Nie należy umieszczać w tym pliku funkcji formatujących dane do wydruku, ani żadnych innych funkcji używających operacji wejścia-wyjścia.

W plikach kontener.* należy umieścić strukturę odpowiadającą użytemu abstrakcyjnemu typowi danych. Można użyć struktury z typem elementu odpowiadającym strukturze zbudowanej w plikach dane.*. Kontener powinien zapewniać możliwość przechowywania nieograniczonej liczby elementów. Należy umieścić w kontenerze i implementować tylko te metody, które będą używane w programie głównym. Implementacja nie może zależeć od typu elementu, powinna działać tak samo po zmianie tego typu na jakikolwiek inny. Nie może też być tu żadnych operacji wejścia-wyjścia ani formatowania wydruku kontenera.

W pliku main.cpp umieszczamy program główny korzystający z plików kontener.h i dane.h oraz funkcje formatujące wydruk i inne funkcje korzystające z operacji wejścia-wyjścia.

Niedozwolone jest korzystanie z kontenerów i algorytmów z biblioteki standardowej C++.

Zapisu do pliku wynikowego nie wolno rozpocząć przed odczytaniem całości plików wejściowych.

(2)

Dodatkowe punkty:

Za obsługę wejścia odporną na błędy użytkownika i za poprawne komentarze, w tym w bibliotekach pomocniczych: cel funkcji, warunki wstępne, warunki końcowe, sytuacje wyjątkowe i ewentualnie zwracany wynik, przyznawane będą dodatkowe punkty. Obsługa wejścia odporna na błędy użytkownika powinna wyglądać następująco:

• w przypadku gdy niepoprawne są dane osoby (czyli nieprawidłowość wystąpiła w pliku osoby.txt), osoba jest wpisywana do pliku wynikowego, przy czym zamiast jej imienia i nazwiska pojawia się adnotacja „DO WERYFIKACJI”,

• w przypadku gdy dane osoby są poprawne, a niepoprawny jest jej numer PESEL (czyli nieprawidłowość wystąpiła w pliku pesele.txt), osoba ta nie jest wpisywana do pliku wynikowego, a odpowiadająca jej linia w pliku osoby.txt jest pomijana.

Kolejne dodatkowe punkty można uzyskać zapewniając w programie obsługę wielu imion osób podanych w pliku osoby.txt z odstępami po nazwisku.

Dodatkowe punkty będą również przyznane za weryfikację poprawności numeru PESEL, który musi być ciągiem 11 cyfr, z których ostatnia to cyfra kontrolna. Weryfikację poprawności tej cyfry realizuje się poprzez wyznaczenie sumy kontrolnej wszystkich cyfr numeru PESEL i sprawdzenie jej podzielności przez 10 (wartość a+3b+7c+9d+e+3f+7g+9h+i+3j+k musi być podzielna przez 10, gdzie literom a-k odpowiadają kolejne cyfry numeru PESEL począwszy od pierwszej, np.

02250412345 nie jest poprawny, a stanie się poprawny gdy ostatnią cyfrę zmienimy na 3 uzyskując numer 02250412343).

Cytaty

Powiązane dokumenty

Napisz program, który czyta liczbę naturalną r (1600 &lt; r &lt; 10 000) i drukuje wszystkie piątki trzynastego w roku r. (W Polsce w tym czasie obowiązywał i zakładamy, że

Jednak język programowania wysokiego poziomu nie jest jasny dla komputera, który rozumie jedynie ciągi zer i jedynek. Dlatego musimy posłużyć się aplikacją,

Wartość wyrażenia arytmetycznego musi być możliwa do obliczenia podczas kompilacji.. Komentarze są ciągami znaków ignorowanymi podczas

● szablony pozwalają na wielokrotne wykorzystanie istniejącego kodu źródłowego struktury danych dla wielu wersji tej struktury z tym samym interfejsem, ale różnymi typami

● strumienie wejścia/wyjścia: iostream, fstream, sstream, iomanip. ●

(3) przestawiamy wskaźnik next w węźle wskazywanym przez pred (lub wskaźnik head gdy pred jest pusty) oraz wskaźnik prev w węźle wskazywanym przez succ (lub wskaźnik tail gdy

Każda linia w tych plikach zawiera dane pojedynczego studenta rozdzielone pojedynczymi spacjami w następującej kolejności: nazwisko, imię (imiona), numer indeksu

Oblicz, ile samochodów każdego rodzaju zostało sprzedanych, jeżeli Opli Corsa sprzedano 510 sztuk.