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.