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.