Zadanie 1
Transkrypt
Zadanie 1
Programowanie strukturalne – 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. Pliki należy podpisać wewnątrz numerem indeksu. Oddajemy tylko źródła programów (pliki o rozszerzeniach .ads i .adb)!!! Zadanie 1 Zdefiniować typ rekordowy Pojazd o polach: Rodzaj (element typu wyliczeniowego RodzajPojazdu o wartościach osobowy, ciezarowy, autobus, inny), Marka (ciąg znaków), Cena (liczba rzeczywista nieujemna). Zdefiniować niezawężony typ tablicowy TabP przechowujący pojazdy. Napisać: • procedurę DoPliku dopisującą pojazdy z tablicy typu TabP podanej jako parametr na końcu pliku binarnego o dostępie swobodnym o nazwie podanej jako drugi parametr. Zapisywane pojazdy (czyli zapisany przez procedurę fragment pliku) mają być pogrupowane wg rodzaju; • Funkcję DoTablicy zwracająca tablicę typu TabP zawierającą te pojazdy odczytane z pliku binarnego o nazwie podanej jako parametr, których cena przekracza średnią cenę pojazdów w pliku. Wykorzystać powyższe elementy do pobrania tablicy pojazdów o długości podanej przez użytkownika, dopisanie jej do pliku o nazwie podanej przez użytkownika (procedura DoPliku) oraz przeczytania pojazdów o cenie przekraczającej średnią z pliku do tablicy (funkcja DoTablicy) i wypisania jej zawartości. Zadanie 2: Napisać pakiet rodzajowy implementujący strukturę dynamiczną Lista będącą listą sortowaną, przechowującą wartości dowolnego typu T. Pakiet ma zawierać: • • • • Procedurę Wypisz wypisującą listę będącą parametrem; Procedurę Wstaw wstawiającą do listy podanej jako parametr element typu T podany jako parametr; dodawanie ma być wykonane tak, aby lista była posortowana niemalejąco (zakładamy, że lista wejściowa jest posortowana w taki sposób); procedurę Sredni usuwającą z listy podanej jako parametr element który ma średnią wartość w tej liście, tzn. znajduje się w środku tej listy, z równoczesnym zwróceniem do programu wartości przechowywanej w tym elemencie (w przypadku listy o parzystej liczbie elementów zwracany jest element bliższy początku listy; jeżeli lista jest pusta generowany jest wyjątek Pusta_Lista); procedurę Kompresuj zastępującą równe sobie elementy listy sumą tych elementów (pamięć zajmowana przez usuwane elementy ma zostać zwolniona, procedura nie może korzystać z tablic ani list pomocniczych). Rozszerzyć program z zadania 1. o: • procedurę CzytajDoListy, zwracającą listę pojazdów przeczytanych z pliku binarnego o nazwie podanej jako parametr posortowanych wg marki; • procedurę UsunDuplikaty modyfikująca listę pojazdów podaną jako parametr poprzez usunięcie z niej wszystkich duplikatów elementów (tj. pozostawienie tylko jednego elementu przechowującego pojazd o danej marce, rodzaju i cenie, jeśli takich elementów było kilka); (w celu napisania obu procedur należy dokonać odpowiedniej konkretyzacji pakietu rodzajowego dla typu Pojazd i wykorzystać odpowiednie zasoby tego pakietu, podpowiedź: procedura UsunDuplikaty to kompresja z dodawaniem zaimplementowanym tak, że x+y=x). Utworzyć listę pojazdów zapisanych w pliku używanym w programie (procedura CzytajDoListy). Następnie, wykorzystując operacje udostępniane przez pakiet rodzajowy i procedurę UsunDuplikaty, wypisać zawartość listy, usunąć z niej duplikaty, a następnie wypisać pojazd „średni” (zwrócony za pomocą funkcji Sredni). Zadanie 3: Zdefiniować typ rekordowy Komis z wyróżnikiem logicznym CzyAktywny domyślnie fałszywym, o polach: Nazwa, Adres (ciągi znaków) oraz dla aktywnego komisu –– ListaPojazdow (typu uzyskanego przez konkretyzację pakietu rodzajowego z zadania 2) i WartoscPojazdow (liczba rzeczywista nieujemna, domyślnie zero). Rozszerzyć program z zadania 2 o: • procedurę PobierzKomis pobierającą dane komisu podanego jako parametr, przy czym pole WartoscPojazdow ma być wypełniane automatycznie poprzez wpisanie do niego sumy cen wszystkich pojazdów w komisie; • procedurę WypiszKomis, wypisującą wszystkie dane komisu podanego jako parametr, • procedurę ModyfikujKomis, modyfikującą komis podany jako parametr przez usunięcie duplikatów z listy pojazdów i obliczenie na jej podstawie nowej wartości pojazdów w komisie (w celu obliczenia wartości należy rozszerzyć pakiet rodzajowy o funkcję zliczającą liczbę elementów w liście i o funkcję zwracającą n-ty element lub wyjątek Brak_Danych gdy takiego elementu nie ma). Wykorzystać powyższe procedury w programie.