Zadanie:

1) Napisz prosta procedure, ktora wywoluje rekurencyjnie sama siebie na
   glebokosc poodana w parametrze. Przetestuj, jakiej glebokosci rekurencja
   jest juz zbyt duza w srodowisku Turbo Pascala.
2) Dodaj do tej procedury jakies zmienne lokalne, np. typu STRING. Czy
   dopuszczalna gebokosc rekursji ulegla zmianie? (ja nie wiem :) )

MODULY

Duze projekty programistyczne dzieli sie zwykle na moduly. Modul to wydzielony
wiekszy fragment kodu. Struktura modulow powinna odpowiadac strukturze
logicznej projektu. Na przyklad program moze sie skladac z modulow
odpowiedzialnych za:
- interfejs graficzny,
- interakcje z uzytkownikiem,
- dostep do plikow, bazy danych,
- obliczenia, przetwarzanie danych.

Moduly moga rowniez pelnic funkcje "biblioteki" uzywanej w wielu roznych
programach - na przyklad modul Stos moze zawierac implementacje stosu, i byc
uzywany w wielu programach.

Kod modulow jest zapisany w funkcjach i procedurach. Aby wykonywac ten kod,
nalezy wywolywac je z innego modulu / programu glownego. Moduly moga
definiowac takze typy i stale, wprowadzac wlasne zmienne.

Wiekszosc jezykow programowania umozliwia podzial modulu na interfejs i
implementacje. Interfejs to wszystko to, co o danym module musza wiedziec
inne moduly / programy, ktore go uzywaja. Implementacja to to, co mozna ukryc
przed swiatem zewnetrzym, to co moze byc widoczne tylko wewnatrz modulu.

Zalecam umieszczanie w interfejsie tych typow, stalych, funkcji i procedur,
ktorych bezposredno chcemy uzywac gdzies na zewnatrz, natomiast ukrywanie
wszystkich zmiennych (dostep do nich tylko poprzez funkcje i procedury)
i tych stalych, typow, funkcji i procedur, ktore stanowia czesc implementacji
i nie ma sesnu ich uzywanie na zewnatrz modulu.

W niektorych jezykach programowania w interfejsie nie trzeba podawac
definicji typu, ktory ma byc widoczny na zewnatrz, wystarczy zadeklarowac
nazwe, a definicje podaje sie w implementacji (tak jest w jezykach
funkcyjnych: SML, Ocaml i pewnie wielu innych tez). Ale w Pascalu i C
trzeba, po to by kompilator znal ilosc pamici zajmowanej przez zmienne danego
typu.

Zwykle podzial na moduly odpowiada podzialowi kodu zrodlowego na pliki, tak
jest rowniez w Pascalu.
W Pascalu caly modul jest zapisany w jednym pliku, podzielonym na dwie
zasadnicze czesci: INTERFACE i IMPLEMENTATION.
Na przyklad w C i C++ interfejs stanowia "pliki naglowkowe" .h,
a implementacja jest zapisywana w plikach .c (.cc, .cpp). W SML-u i Ocamlu
role modulow pelnia sygnatury, struktury i funktory.

W Turbo Pascalu kod modulow zapisywany jest w plikach .pas, skompilwane
moduly zapisywane sa w plikach .tpu. Polecenie menu "Compile" kompiluje
jeden plik, z aktywnego okna. Polecenie "Build" kompiluje program z aktywnego
okna i wszystkie zalezne moduly. Polecenie "Make" kompluje tylko te pliki,
ktore zmienily sie od ostatniej kompilacji (zalecane). Za pomoca
"Primary File" mozna ustalic plik z programem glownym (moze nie byc
w aktywnym oknie, a "Make" i "Build" zadzialaja poprawnie).

--------------------------------

Zadania:

3) Na poprzednich zajeciach tworzylismy typ rekordowy, nazwe go TSamochod.
   Utworz teraz modul zawierajacy definicje tego typu (w interfejsie),
   oraz procedury PobierzDane(VAR rek: TSamochod), WypiszDane(VAR rek: TSamochod),
   pobierajace od uzytkownika dane jednego rekordu i wypisujacy dane na ekran.
   Modul powinien zliczac wszystkie wczytania i wypisania danych i udostepniac
   funkcje do odczytania tych licznikow.
4) Napisz program uzywajacy tego modulu, ktory odczytuje od uzytkownika kolejne
   rekordy i zapisuje je do pliku (FILE OF TSamochod).
5) Napisz program, ktory z podanego pliku (FILE OF TSamochod) odczytuje
   wszystkie rekordy i wypisuje je na ekran.