![]() |
Turbo Pascal.
|
![]() |
Struktura programu
Wiemy już, w jakiej formie będziemy przechowywać informację; kolejnym krokiem jest ustalenie sposobu jej przetwarzania odpowiedniego do używanych w programie struktur danych. Przede wszystkim musimy zatem ustalić, jakie operacje na danych program powinien wykonywać, a następnie zaprojektować odpowiadające im procedury lub funkcje (jako że programujemy porządnie, czyli strukturalnie - wykorzystując procedury i funkcje). Po skonsultowaniu się z listą życzeń (zobacz strona 75) stwierdzamy, że nasz program powinien umożliwiać:
- wprowadzenie zawartości wybranego rekordu z klawiatury;
- wyprowadzenie zawartości wybranego rekordu na ekran;
- zbadanie i zmianę zawartości pola Wypozyczajacy wybranego rekordu;
- wyszukanie rekordu zawierającego zadany ciąg znaków w polu Tytul;
- posortowanie tablicy rekordów według zadanego kryterium (tytuł lub nazwisko autora);
- wyszukanie rekordu o najmniejszej i największej zawartości pola Licznik.
Powyższa lista może zostać bezpośrednio przetłumaczona na zestaw podstawowych procedur tworzących program (rzecz jasna, trzeba będzie jeszcze dorzucić kilka procedur pomocniczych, no i oczywiście część operacyjną). Z formalnego punktu widzenia wymagany jest jeszcze schemat blokowy lub przynajmniej słowny zapis algorytmu, aby jednak uniknąć przerostu formy nad treścią, ograniczymy się do ogólnego schematu działania programu:
- wyświetl menu dostępnych operacji
- w zależności od wybranej opcji:
wprowadź nowy rekord (dodanie książki do katalogu), lub
zmień zawartość pola Wypozyczajacy (wypożyczenie książki), lub
wyszukaj rekord zawierający dany tytuł (wyszukiwanie książki), lub
wyświetl wszystkie rekordy uporządkowane według tytułów lub nazwisk autorów, lub
zakończ pracę programu
- wróć do punktu (1)
Jak widać, część operacyjna sprowadza się w zasadzie do wywoływania odpowiednich procedur stosownie do wybranej przez użytkownika funkcji (doskonałe miejsce dla instrukcji case). Ponieważ przedstawianie schematów poszczególnych procedur zajęłoby zbyt dużo miejsca, poprzestaniemy na zaprezentowaniu ich zapisu w Pascalu. Metoda, którą wykorzystamy do tworzenia naszego programu, jest typowym przykładem projektowania wstępującego: najpierw utworzymy zestaw odpowiednich procedur (realizujących poszczególne zadania podrzędne), a następnie powiążemy je w całość, czyli działający program.
Zanim jednak do tego dojdzie, zastanówmy się przez chwilę nad przekazywaniem danych do i z odpowiednich procedur i funkcji. W myśl dobrej praktyki nie będziemy do tego celu wykorzystywać efektów ubocznych, lecz stosownie zaprojektowane listy parametrów. Rozważmy jako przykład procedurę wprowadzania zawartości rekordu z klawiatury. Powinna ona przyjmować jako argument "pusty" rekord i zwracać tenże rekord wypełniony wpisanymi przez użytkownika danymi. Musimy więc wykorzystać mechanizm przekazywania parametru przez nazwę. Ale jak zadeklarować sam parametr? Nagłówek w postaci:
procedure Wprowadz(var r : record Tytul : string[30]; Autor : string[25]; Wypozyczajacy : string[25]; Licznik : word); wygląda co najmniej podejrzanie. Istotnie: próba skompilowania podobnej konstrukcji skończy się wyświetleniem komunikatu Type identifier expected (spodziewany identyfikator typu).
Rozwiązaniem tego problemu zajmiemy się w następnym rozdziale. Znajdzie się w nim również kilka słów o tak zwanych stałych symbolicznych.
Poprzedni | Spis treści | Następny | Wersja spakowana |