Lista2
Transkrypt
Lista2
Kurs języka Pascal Grupa HKR Lista 2 W rozwiązaniach należy uwzględnić: pliki tekstowe, pliki jednorodne (file of element), kontrolę otwierania pliku do czytania, grafikę w języku Pascal. Do co najmniej jednego z zadań z listy 1 lub listy 2 należy przygotować graficzny interfejs w Delhi. 2.1. Rysunek przedstawia trójkąt zbudowany z liczb. 7 1 8 8 1 0 2 7 4 4 4 5 2 6 5 Napisz program obliczający największą sumę liczb, przez jakie można przejść po drodze, która zaczyna się w wierzchołku i kończy w pewnym punkcie podstawy. • Każdy krok można wykonać albo skośnie w lewo w dół, albo skośnie w prawo w dół. • Liczba wierszy w trójkącie jest większa od 1, ale nie przekracza 100. • Wszystkie liczby zapisane w trójkącie są całkowite i mieszczą się pomiędzy 0 i 99. Dane wejściowe W pierwszej kolejności czyta się z pliku INPUT.TXT liczbę wierszy w trójkącie. W naszym przykładzie wygląda to tak: 5 7 38 810 2744 45265 Wyniki Największą sumę należy zapisać, jako liczbę całkowitą, w pliku OUTPUT.TXT. Przygotuj odpowiednie pliki testowe. 2.2. Histogram długości słów Napisz program, który dla pliku tekstowego o danej nazwie, zawierającego słowa, zapisze w wynikowym pliku tekstowym o danej nazwie histogram długości tych słów. Dodatkowe ustalenia: • Nazwa pliku z danymi jest czytana tak długo aż a) istnieje plik z danymi o takiej nazwie lub b) nazwa jest napisem pustym, co powoduje zakończenie działania programu. • Słowem jest dowolny ciąg znaków ograniczony: spacjami, końcami wierszy, początkiem lub końcem pliku. • Słowa mogą mieć dowolną długość (w tym większą niż 255 znaków), ale w histogramie słowa o długości większej od 100 należą do tej samej kategorii. • Histogram ma postać ciągu wierszy; każdy wiersz zawiera dwie liczby: długość słów i liczba słów o tej długości; wiersze mają być posortowane rosnąco względem długości słów. • W histogramie nie występują wiersze z długościami słów, których nie było w danych; długości słów w histogramie i odpowiadające im liczby wystąpień są umieszczone odpowiednio w dwóch kolumnach. 2.3. Magazyn W pliku jednorodnym Magazyn.jnd są przechowywane informacje o artykułach znajdujących się w magazynie. Każdy artykuł jest scharakteryzowany przez nazwę, jednostkę miary (np. sztuka, kg, litr), ilość i cenę, zatem typ danych i plik, skojarzony z powyższym plikiem fizycznym, można opisać następująco: type artykul=record nazwa:string[15]; miara:string[6]; ilość,cena:real; end; magazyn=file of artykul; Napisz program z ofertą (menu), realizujący następujące operacje na pliku fizycznym, skojarzonym z plikiem magazyn: • utworzenie od nowa pliku z danymi wprowadzanymi z klawiatury (nazwa, miara, ilosc, • • • • • cena); dopisanie nowego artykułu do istniejącego pliku (dane wprowadzane z klawiatury); wyświetlenie na ekranie informacji o stanie wybranego – za pomocą nazwy – artykułu z pliku; aktualizacja zawartości pliku po realizacji zamówienia podanego z klawiatury, zawierającego nazwy artykułów i ich ilości, z podaniem jednostki miary; poinformowanie o przyjęciu zamówienia lub o braku w magazynie dostatecznej ilości zamawianego artykułu (dane z klawiatury, wyniki w pliku); zapisanie do pliku tekstowego Rachunek.txt rachunku za zrealizowane zamówienie, np. w następującej postaci RACHUNEK --------------------------------------------------------Nazwa artykulu! Ilosc!Jed. miary! Cena! Wartosc Ziemniaki! 2! kg! 1.20! 2.40 Kapusta! 0.5! sztuka! 2.20! 1.10 Miod! 0.25! litr! 21.00! 5.25 --------------------------------------------------------Kwota do zaplaty 8.75 zapisanie do pliku tekstowego Stan.txt informacji o stanie pliku, czyli o wszystkich artykułach. 2.4. Okręgi Napisz program, który rysuje na ekranie n nie przecinających się okręgów o losowych środkach i losowych długościach promieniach. Przyjmij, że najmniejsza długość promienia rysowanego okręgu wynosi 5 i każdy rysowany okrąg mieści się w całości na ekranie. Oto przykłady takich okręgów. 2.5. Scalanie plików Napisz moduł złożony z następujących procedur: • tworzącej plik losowych liczb całkowitych, • wyświetlającej plik liczb całkowitych, • scalającej dwa niemalejąco posortowane pliki liczb całkowitych w jeden niemalejąco posortowany plik i wykorzystującą w tym do pomocy łączoną listę liniową. 2.6. Baza danych z indeksami Napisz program umożliwiający tworzenie bazy danych o osobach i wyszukiwanie w niej informacji. Dla każdej osoby w bazie będą przechowywane następujące informacje: - imię (napis, max. 15 znakow), - nazwisko (napis, max. 40 znakow), - płeć (wartość typu wyliczeniowego ze stałymi "kobieta" i "mezczyzna") - rok urodzenia (liczba calkowita) Program powinien umożliwiać wykonywanie następujących operacji: 1. Otworzenie bazy danych o podanej nazwie lub stworzenie nowej (początkowo pustej) bazy. 2. Dodanie do bazy danych nowego rekordu. 3. Wyszukanie wszystkich osób, których nazwiska rozpoczynają się od wskazanego napisu (np. dla 'Kow' powinniśmy odnaleźć osoby o nazwiskach 'Kowalski' i 'Kowalik'). 4. Wyszukanie wszystkich osób urodzonych w podanym roku. 5. Zamknięcie bazy danych i zakończenie pracy. Baza danych powinna być przechowywana w postaci pliku (nazwa z rozszerzeniem .DAT) rekordów opisujących poszczególne osoby. Dodatkowo, by usprawnić wyszukiwanie rekordów, należy utworzyć tzw. indeksy, które będą przechowywane w plikach o nazwie takiej, jak nazwa bazy danych i rozszerzeniu .IXN (w przypadku indeksu ułatwiającego wyszukiwanie wg nazwiska) lub .IXU (w przypadku indeksu ułatwiającego wyszukiwanie wg roku urodzenia). Indeks nazwisk będzie plikiem numerów rekordów uporządkowanym wg nazwisk (leksykograficznie), indeks lat urodzenia będzie przechowywał numery rekordów w kolejności wyznaczonej przez lata urodzenia. Na przykład dla bazy zawierającej dane o następujących osobach: Michal Zalewski, mezczyzna, 1963 Jan Kowalski, mezczyzna, 1974 Stanislaw Nowak, mezczyzna, 1973 Piotr Nowak, mezczyzna, 1974 indeks nazwisk powinien mieć postać: 1, 2, 3, 0 lub 1, 3, 2, 0 a indeks lat urodzenia: 0, 2, 1, 3 lub 0, 2, 3, 1 Kiedy użytkownik poprosi o odnalezienie osób urodzonych w danym roku, wyszukujemy w indeksie numery odpowiednich rekordów stosując wyszukiwanie binarne a następnie wypisujemy zawartość tych rekordów. Analogicznie postępujemy w przypadku pytania o nazwiska. Operacja dodania rekordu do bazy danych wymaga oczywiście także modyfikacji indeksów. Rekord jest dopisywany na koniec a jego numer we właściwe miejsca wszystkich (obu) plików indeksowych. Zakładamy, ze operacja ta będzie wykonywana bardzo rzadko, wiec jej nieefektywność (w przypadku pesymistycznym - gdy numer indeksu mamy wstawić na początek – musimy przepisać cały indeks) nie ma dla nas znaczenia.