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.