Spis treści
description
Transcript of Spis treści
Spis treści1. Podstawowe wiadomości na temat języka programowania2. Polecenia w języku Turbo Pascal3. Symbole stosowane w sieciach działań4. Klawisze funkcyje5. Struktura programu w języku TURBO PASCAL6. Zapowiedzi definicji procedury lub funkcji7. Deklaracja typów zmiennych w języku TURBO Pascal8. Pliki tekstowe w języku TURBO Pascal 9. Typy zmiennych10. Procedury11. Edycja, kompilacja i uruchamianie programów w języku TURBO PASCAL12. Moduły w języku TURBO Pascal
Podstawowe wiadomości na temat języka programowania
Język programowana Pascal (nazwa na cześć francuskiego matematyka, fizyka i filozofa Blaise Pascala) należy aktualnie do najpopularniejszych
języków programowania komputerów. Powstał w 1971 roku, kiedy to NIKLOUS WIRTH zgłosił pierwszy raport tego języka. Z czasem język Pascal i wzorowana na nim notacja zaczął pełnić role języka uniwersalnego
służącego nie tylko do nauki programowania, samego programowania, ale tak że do zapisywania na nim
algorytmów i porozumiewania się pomiędzy specjalistami z zakresu inżynierii programowania.
Wraz z powstaniem i rozwojem techniki mikrokomputerowej powstały liczne wersje języka
Pascal przeznaczone specjalnie do mikrokomputerów.
Najpopularniejszą implementacją języka PASCAL la
mikrokomputerów klasy IBM PC jest TURBO PASCAL
wprowadzony na rynek w 1983 roku przez amerykańską firmę BORLAND INC. Obecnie ukazała
się wersja TURBO PASCAL ver. 7,0
System TURBO PASCAL firmy BORLAND składa się
z :
• komplikatora języka TURBO PASCAL• zintegrowanego, systemowego,
pełnoekranowego edytora tekstu,• zintegrowanego programu
uruchomieniowego DEBAGER
Profesjonalna wersja programu systemu TURBO PASCAL
( od ver. 7,0 wprowadzona na rynek jako BORLAND PASCAL) zawiera dodatkowo uniwersalne systemy wspomagające
programowanie w dowolnym języku firmy Borland (TURBO Pascal, Turbo C++, TURBO
Asembler):• TURBO DEBAGER- do śledzenia przebiegu wykonywania programów oraz lokalizacji i poprawiania błędów programowych.
• TURBO PROFILER- do optymalizacji (analizy efektywności) programów
System BORLAND PASCAL umożliwia programowanie w
trzech trybach:
• w systemie operacyjnym DOS w trybie adresowania rzeczywistego,
• w systemie operacyjnym DOS w trybie adresowania wirtualnego z ochroną,
• w środowisku graficznym WINDOWS
PASCAL
POLECENIA
Wstawienie przed pozycją kursora tekstu ostatnio umieszczonego w notatniku
Paste
Usunięcie zaznaczonego bloku tekstu bez umieszczania go w notatniku
Clear
Wyświetlenie okienka zawierającego teksty umieszczone w notatniku
Show Clipboard
Skopiowanie przykład z okienka wyjaśniającego do notatnika (przykład może być zmodyfikowany i umieszczany w tekście źródłowym programu)
Copy Example
Skopiowanie wyróżnionego bloku tekstu do notatnikaCopy
Usunięcie wyróżnionego bloku tekstu i umieszczenie go w notatniku (buforze powielania)
Cut <Shift><Del>
Odtworzenie ostatniego wiersza, który był poddany edyji
Restore Line
Zlokalizowanie błędu wykonania programuFind terror…
Wyświetlenie tekstu procedury o podanej nazwie (polecenie może być wykonane tylko podczas uruchamiania programu)
Find procedure…
Przeniesienie kursora do wiersza o podanym numerze
Go to line numer…
Powtórzenie ostatnio wykonywanego polecenia Find lub Replice
Serach Again…
Wyświetlenie okienka dialogowego umożliwiającego odszukanie i zamianę podanego tekstu na inny
Replice…
Wyświetlenie okienka dialogowego umożliwiającego odszukanie podanego tekstu
Find…
Umożliwienie podania argumentów wykonywania programów takich jakie podaje się gdy jest on aktywny w systemie DOS
Parameters
Wykonanie najbliższej instrukcji programu. Jeśli instrukcja ta jest wywołaniem procedury, to zostanie ona wykonana w jednym kroku
Steo oper [F8]
Wykonanie najbliższej instrukcji programu lub wykonanie procedury
Trace [F7]
Zastawienie tymczasowej pułapki w wierszu wyróżnionym przez kursor, a następnie podjęcie wykonywania programu aż do wpadnięcia w pułapkę lub zakończenia
Go to kursor [F4]
Zakończenie uruchomienia programu, zwolnienie przydzielonej mu pamięci i zamknięcie aktywnych plików
Program reset<Ctrl>[F2]
Skomplikowanie programu w trybie make, a następnie wykonanie go. Przerwanie wykonania <Ctrl>-Break
Run<Ctrl>[F9]
Określenie nazwy pliku pierwotnegoPrimary File
Określenie miejsca umieszczenia kodu wynikowego (z rozszerzeniem nazwy . EXE) Menory/Dysk (pamięć/dysk)
Destination
Przeprowadzenie komplikacji w trybie BuildBuild
Przeprowadzenie komplikacji w trybie MakeMake [F9]
Przeprowadzenie komplikacji tekstu zawartego w aktywnym okienku edycyjnym
Compile<Alt>-[F9]
Wyświetlenie okienka dialogowego umożliwiającego zastawienie i usuwanie pułapek warunkowych i bezwarunkowych
Breakpoints
Zastawienie (program będzie bezwarunkowo przerwany w wierszu w którym znajduje się kursor) lub usunięcie pułapki
Toggle Breakpoint
Ustawienia obserwacji <Ctrl>-[F7]Usunięcie obserwacjiModyfikacja obserwacjiUsunięcie wszystkich obserwacji
Add WatchDeleten WatchEdit WatchRemove All
Watches
Wyświetlanie menu umożliwiającego zarządzanie obserwacją wyrażeń i zmiennych
Watches
Wyświetlenie okienka dialogowego umożliwiającego określenie aktualnej wartości zmiennej lub wyrażenia z możliwością przypisania zmiennej nowej wartości (okienko dialogowe może być także wykorzystane jako kalkulator)
Evalute/Modify
Odtworzenie uprzednio zapamiętanej konfiguracjiRetrieve
Options
Zapamiętanie ustalonej konfiguracji w pliku o podanej nazwie (standardowa konfiguracja zapisana jest w pliku TURBO.TP)
Save Options
Określenie parameró pracy zintegrowanej systemu TURBO Pascal
Environment
Określenie nazw katalogów,w których znajdują się pliki wynikowe , dołączane i biblioteczne. Nazwy są oddzielane średnikami
Directories
Określenie warunków uruchmiania programów w tym włączania do programu wykonywanego symbolicznych informacji uruchomieniowych
Debugger
Określenie sposobu wykonywania konsolidacjiLinker
Określenie rozmiarów stosu oraz minimalnego maksymalnego rozmiaru sterty
Menory Size
Umożliwienie ustawienia opcji komplikatoraCompiler
Otwarcie specjalnego okienka zawierającego liste odwołań do procedur i funkcji
Call Stack
Otwarcie i uaktywnienie okienka wyjściowego do którego są kierowane wyniki dziania programów (nie dotyczy to programów graficznych)
Output
Otwarcie i uaktywnienie okienka rejestrów. W okienku ty, podawany jest stan rejestrów procesora istotny podczas wykonywania rozkazów maszynowych wstawianych do programu za pomocą instrukcjiasemblerowych.
Register
Otwarcie i uaktywnienie okienka obserwacyjnegoWatch
Zamknięcie aktualnego okienka i usunięcie go z ekranu
Close
Uaktywnienie poprzedniego okienkaPrevions
Uaktywnienie następnego otwartego okienkaNext
Wyświetlenie okienek w układzie kaskadowy,Cascade
Wyświetlenie okienek w układzie kartotekowymTitle
Powiększanie/zmniejszenie aktywnego okienkaZoom
Zmiana pozycji i rozmiaru aktywnego okienkaSize/More
Programowanie systemu komputerowego.Symbole stosowane w sieciach działań.
Algorytmem – nazywamy zbiór reguł postępowania, mający na celu w skończonej liczbie kroków przetwarzania informacji wejściowych (danych) w informacje wyjściowe (wyniki).
Raz opracowany algorytm dla danego problemu powinien służyć do rozwiązywania wszystkich problemów tej klasy, dla której został opracowany. Algorytm powinien uwzględniać wszystkie możliwe teoretyczne warianty przebiegu obliczeń zaistniałych z powodu różnego doboru danych wejściowych. Rozwiązywanie algorytmu powinno być poprzedzone analizą matematyczną zadania w oparciu o metody numeryczne. Na podstawie algorytmu układa się programy.
Programem – nazywamy algorytm przetwarzania informacji zapisany w języku programowania.
W praktyce programistycznej stosowane są zasadniczo dwie metody projektowania algorytmów:- metoda analityczna (zstępująca) (ang. top-down programming) – stosowana jest głównie przy projektowaniu nowych algorytmów i polega na podziale postawionego zadania na podzadania, które następnie dekomponuje się na mniejsze podzadania, aż do momentu gdy zadania cząstkowe będą na tyle małe, że ich rozwiązanie nie będzie sprawiało trudności.
- metoda syntetyczna (wstępująca) (ang. bottom-up-programming) – stosowana jest głównie przy projektowaniu istniejących algorytmów i polega na zaprojektowaniu wszystkich potrzebnych podprogramów w celu ich późniejszej syntezy.
Po zaprojektowaniu algorytmu należy udowodnić, że jest on poprawny. Przeprowadzenie dowodu poprawności algorytmu często może sprawić wiele trudności i w takim przypadku poprzestajemy na testowaniu algorytmu dla różnych danych wejściowych. Należy pamiętać, że przetestowanie algorytmu nie jest dowodem na jego poprawność za pomocą testowania można natomiast wykazać niepoprawność algorytmu.
WyjaśnienieSymbolNazwa operacji
Wiążąca operacja pomiędzy poszczególnymi procesami
przetwarzania.
Droga przepływu informacji.
Wywołanie programu lub procesu zdefiniowanego jako program.
Podprogram, proces zdefiniowany.
Modyfikacja rozkazu lub grupy rozkazów powodująca zmianę w
przebiegu procesu przetwarzania.
Przygotowanie.
Operacja określająca wybór jednej z alternatywnych dróg
działania.Decyzja.
Operacja, lub grupa operacji w wyniku której ulegną zmianie wartości postaci lub miejsca
zapisu informacji.
Przetwarzanie.
Wprowadzenie lub wyprowadzenie danych.
Wprowadzenie, wyprowadzenie.
Oznaczenie miejsca rozpoczęcia lub przerwania działania
programu.
Początek, koniec lub przerwa.
WyjaśnienieSymbolNazwa operacji
Operacja określająca wybór jednej z alternatywnych dróg (1..n) działania w zależności od wartości k={1..n}
Decyzja.
Wejście lub wyjście z wyodrębnionych fragmentów
schematów znajdujących się na różnych stronach.
Łącznik międzystronicowy.
Wejście lub wyjście z wyodrębnionych fragmentów
schematów znajdujących się na tej samej stronie.
Łącznik stronicowy.
Oznaczenie miejsca na komentarz.Komentarz.
Łączenie przepływu dróg informacji
Skrzyżowanie dróg przepływu informacji
bez powiązania między nimi.
Droga przepływu informacji ze wskazaniem
kierunku.
Komentarz
K
1 2 3 … N
Przykład 1.
Napisać algorytm komputerowy umożliwiający rozwiązywanie trójmianów kwadratowych w postaci:
Rozwiązanie:
I. Analiza matematyczna problemu:
Równanie ma dwa pierwiastki w zbiorze
liczb rzeczywistych:
Równanie ma jeden pierwiastek podwójny:
Równanie nie ma pierwiastków w zbiorze
liczb rzeczywistych.
CAB 42
0 C Bx Ax2
0)1
A
Bx
21
A
Bx
22
0)2
A
Bx
2
..2,1
0)3
II. Algorytm komputerowy:START
Pisz: „Podaj współczynnikirównania A, B, C”
Algorytm programu rozwiązującego trójmian kwadratowy
Czytaj: A, B, C
DELTA=B*B-4*A*C
DELTA < 0
Pisz: „Trójmian nie mapierwiastków w zbiorze
liczb rzeczywistych
STOP
DELTA = 0
1 22
X1=(-B-SQRT(DELTA))/2/A
X2=(-B+SQRT(DELTA))/2/A
Pisz: „Trójmian nie mapierwiastków w zbiorze
liczb rzeczywistych
STOP
Klawisze Funkcyjne
zakończenie sesji debuggera (usunięcie punktów kontrolnych)Ctrl F2
wyświetlenie informacji o identyfikatorze wyróżnionym przez kursor (uruchamianie pomocy kontekstowej)
Ctrl F1
uaktywnienie górnego menuF10
kompilacja programu znajdującego się w bieżącym okienkuF9
wykonanie bieżącej instrukcji programu. Jeśli tą instrukcją będzie wywoływanie procedury, to będzie ona wykonana w jednym kroku
F8
wykonanie bieżącej instrukcji programuF7
przejście do następnego otwartego okienkaF6
powiększenie/pomniejszenie aktualnego oknaF5
wykonanie programu do miejsca aktualnego położenia kursoraF4
wyświetlenie okienka dialogowego służącego do wczytania zbioruF3
zapisanie na dysku zbioru znajdującego się w okienku edycyjnymF2
wyświetlenie informacji pomocniczychF1
obliczenie wartości podanych zmiennych i wyrażeńCtrl F4
wyświetlenie okienka zawierającego historię wywołań procedur i funkcji
Ctrl F3
zlokalizowanie błędu wykonania programuAlt F8
wyświetlenie okienka, na które wyprowadzane są wyniki programów
Alt F5
zamknięcie aktywnego okienkaAlt F3
wyświetlanie poprzedniego okienka zawierającego wyjaśnieniaAlt F1
powtórzenie ostatniej operacji wyszukiwania lub wyszukiwania i zmiany ciągu znaków
Ctrl L
skopiowanie wyróżnionego tekstu do notatnikaCtrl Ins
usunięcie wyróżnionego tekstuCtrl Del
kompilacja i wykonanie programuCtrl F9
ustalenie/usunięcie bieżącego wiersza jako punktu przeważania programu (pułapki programowej).
Ctrl F8
dodawanie zmiennej lub wyrażenia do okienka obserwacyjnegoCtrl F7
zmiana położenia lub rozmiaru aktywnego okienkaCtrl F5
przejście do poprzednio otwartego oknaShift F9
wyświetlenie skorowidza informacji pomocniczychShift F1
powielenie zawartości bufora powielania w miejscu aktualnego położenia kursora w aktywnym okienku
Shift Ins
usunięcie zaznaczonego bloku tekstu i umieszczenie go w buforze powielania
Shift Del
uaktywnienie odpowiedziAlt litera
wyświetlenie okienka o podanym numerzeAlt nr
wyświetlenie listy otwartych okienekAlt O
kompilacja programu znajdującego się w aktywnym okienkuAlt F9
Struktura programu w języku TURBO PASCALKażdy program w języku TURBO Pascal ma następującą strukturę :
(Nie wszystkie podane poniżej elementy składowe muszą wystąpić w każdym programie.)
Tekst umieszczony w znakach (* *) lub { } oznacza komentarz i nie jest brany pod uwagę poprzez kompilator
PROGRAM przykład; (*nagłówek ; przykład jest nazwą programu*) USES crt; (dołączenie modułów standardowych *)
CONST (*deklaracja stałych*)
C=’C’;L=’L’;
R=500; {w tym przypadku zadeklarowano stałe C,L,R,PI}
PI=3,14TYPE (*deklaracja typów zmiennych
Adres=recordNazwisko :string[16];
Imię :string[12];Ulica :string[20];
Kod :string[6]; Miejscowość:string[20];
End; {zadeklarowano typ adres}VAR (*deklaracja zmiennych globalnych*)
Plik :file of adres;L,k :Integer; {zadeklarowano zmienne plik,l,k,r,odp}
R :RealOdp :Char;
PROCEDURE przykładowa; (*deklaracja procedur*)VAR Zn : char; {deklaracja zmiennych lokalnych obowiązujących }
{tylko wewnątrz procedury }BEGIN
… …
END;BEGIN {początek programu głównego}
… … {tu należy umieścić
instrukcje stanowiące} … {program główny}
END. {koniec programu głównego }
V Zapowiedzi definicji procedury lub funkcji.
Z poziomu procedury lub funkcji można wywołać inne procedury i funkcie. Definicje wywołanych podprogramów powinny się znajdować przed procedurą
lub funkcjią ich wywołującą. Jeśli z różnych powodów jest to niemożliwe lub podprogramy wywołują sie nawzajem,
należy zastosować deklaracje z dyrektywą standardową FORWARD. Podprogram z FORWARD uważa się za zadeklarowany,
choć jego treść zostanie podana póżniej. Definicja procedury lub funkcji zadekladrowanej wcześniej jako FORWARD
nie wymaga powtórnego wyszczegółowania paramatrów foramlnych
ani typu wyniku funkcji (choć powtórne wyszczególnienie nie jest błędem).
Przykład deklaracji funkcji z dyrektywą FORWARDPROCEDURE Nic(a,b,c:INTEGER) FORWARD;
PROCEDURE SuperNic(a,b,c:INTEGER);Begin
.. {tu należy umieścić treść procedury}..
END;PROCEDURE Nic;
BEGIN.. {tu należy umieścić treść procedury}
..END;
PROCEDURE Kreska;BEGINWRITELN(‘***************’)END;
PROCEDURE Kreska;BEGINWRITELN(‘***************’)END;
PROCEDURE SuperKreska(x,y,dl: BYTE;znak:CHAR);VAR k:BYTEBEGIN FOR K:=1 to dl DO BEGIN
GOTOXY(x+k-l,y); WRITELN(znak)END;
END;
PROCEDURE SuperKreska(x,y,dl: BYTE;znak:CHAR);VAR k:BYTEBEGIN FOR K:=1 to dl DO BEGIN
GOTOXY(x+k-l,y); WRITELN(znak)END;
END;
VI Przykłady definicji procedur i funkcji:Przykłady definicji procedur.
Procedura bezparametrowa kreska spowoduje wyrysowanie
w miejscu aktualnego położenia kursora linii składającej się z ‘’ * ‘’.
Procedura SuprerKreska spowoduje w rysowanie w miejscu wskazanym przez współrzędne X,Y dwoch rzędów znaków o długości dl,
np. wywołanie procedury SuperKreska z parametrami : BEGIN {początek programu głównego}
SuperKreska(10,12,55,’=’); END. {koniec programu głównego}
spowoduje wrysowanie na ekranie monitora w punkcie początkowym o współrzędnych 10,12 lini skłądającej się z 55 znaków ‘’=’’
PROCEDURE stop;BEGIN WRITELN(‘wciśnij dowolny klawisz’); REPEAT UNTIL KEYPRESSED;END;
PROCEDURE stop;BEGIN WRITELN(‘wciśnij dowolny klawisz’); REPEAT UNTIL KEYPRESSED;END;
PROCEDURE stoj;BEGIN WRITELN (‘wciśnij ENTER’); READLN;END;
PROCEDURE stoj;BEGIN WRITELN (‘wciśnij ENTER’); READLN;END;
= = = = = = = = = = =
X 08 0”0
Rys. Wygląd ekranu monitora po wywołaniu PROCEDURY SuperKreska
Powyższe procedury mają podobne działanie i służą do zatrzymania wykonywania programu do czasu wciśnięcia odpowiedniego klawisza.
25
Y
Przykłady definicji funkcji:
FUNCTION DELTA (A,B,C:REAL):REAL;BEGINDELTA:=B*B-4*A*C;END;
Funkcja DELTA wyznacza wyróżnik równania kwadratowego.
FUNCTION POTEGA(X,Y:REAL):REAL;BEGINPOTEGA:=EXP(Y*LN(X));END;
Funkcja POTEGA oblicza X .Y
Funkcja Lg oblicza logarytm dziesiętny liczby X
FUNCTIONLg(X:REAL):REAL;BEGINLg:=Ln(X)/Ln(10)END;
FUNCTIONLog(a,b:REAL):REAL;BEGINLog:=Ln(b)/Ln(a)END;
Funkcja Log oblicza logarytm o podstawie a z liczby b
FUNCTION SILNIA(n:BYTE):LongInt;VARi:BYTEIloczyn : Longint;BEGINiloczyn:=1;IF n>1 THEN BEGIN FOR i:=2 TO n DO iloczyn:=iloczyn*i; END; SILNIA:=iloczynEND;
FUNCTION SILNIA(n:BYTE):LongInt;VARi:BYTEIloczyn : Longint;BEGINiloczyn:=1;IF n>1 THEN BEGIN FOR i:=2 TO n DO iloczyn:=iloczyn*i; END; SILNIA:=iloczynEND;
FUNCTION SILNIA(n:BYTE):LongInt;BEGINIF ( n=0) OR (n=1) THEN SILNIA:=1 ELSE SILNIA:=n*SILNIA(n-1);END;
FUNCTION SILNIA(n:BYTE):LongInt;BEGINIF ( n=0) OR (n=1) THEN SILNIA:=1 ELSE SILNIA:=n*SILNIA(n-1);END;
VII. Definicjie funkcji i procedur rekurencyjne i iteracyjne.
a) obliczanie silni metodą iteracyjną:
b) obliczanie silni metodą rekurencyjną;
W procedurach i funkcjach zdefiniowanych rekurencyjnie występuje bezpośrednie lub pośrednie wywoływanie tego samego podprogramu
Poniżej przedstawiona zostanie prosta procedura służąca do wyświetlania n pustych wierszy zrealizowana w postaci iteracyjnej i rekurencyjnej.
1)Definicja iteracyjna PROCEDURY odstęp.
PROCEDURE ODSTEP(n);VAR K :INTEGER; BEGINFOR k:=N DOWNTO 1 DO WRITELN;END;
PROCEDURE ODSTEP(n);VAR K :INTEGER; BEGINFOR k:=N DOWNTO 1 DO WRITELN;END;
PROCEDURE ODSTEP(n);BEGIN IF n>1 THEN ODSTEP(n-1); WRITELN;END;
PROCEDURE ODSTEP(n);BEGIN IF n>1 THEN ODSTEP(n-1); WRITELN;END;
2) Definicja rekurencyjna PROCEDURY ODSTĘP.
Deklaracja typów zmiennych w języku TURBO Pascal.
Każdą zmienną występującą w programie należy zadeklarować, tzn. określić jej identyfikator (nazwę) i zbiór wartości, do którego należy. Ten zbiór wartości nazywa się typem zmiennej.W języku TURBO PASCAL część typów zmiennej jest przedefiniowanych przez tworców kompilatora i wtedy ich deklaracje można umieszczać po słowie kluczowym VAR, a część musi być zdefiniowana przez użytkownika. Deklaracje typów zmiennych umieszcza się po słowie kluczowym TYPE (=>patrz struktura programu).W języku TURBO Pascal zmienne wszystkich typów z wyjątkiem typu wskaźnikowego są zmiennymi statycznymi. Dla zmiennych typu statycznego miejsce w pamięci komputera jest przydzielane podczas kompilacji deklaracji tych zmiennych.Dla zmiennych typu wskaźnikowego miejsce w pamięci komputera jest przydzielane i zwalniane w trakcie wykonywania programu, gdy jest to potrzebne. Tego typu zmienne nazywają się zmiennymi dynamicznymi.
Pliki tekstowePlikami tekstowymi nazywamy pliki o strukturze wierszowej. Pod pojęciem wiersza rozumie się dowolną sekwencje znaków zakończoną znacznikiem końca wiersza EOL(ang. End Of Line), któremu odpowiada sekwencja znaków CR/LF (ang.carriage return/line feed) (#13/#10). Plik tekstowy w języku TURBO Pascal typem standardowym o nazwie TEXT.Pliki tekstowe można przeglądać za pomocą dowolnego edytora standardowego. Dostęp do pliku tekstowego jest wyłącznie dostępem sekwencyjnym. Aby odczytać określony fragment tekstu należy odczytać wszystko co się przed nim znajduje. Dla plików tekstowych można stosować procedury WRITELN i READLN. Możliwe jest otwarcie pliku tekstowego do dopisywania za pomocą procedury APPEND(plik).Przykład deklaracji pliku tekstowego:
TYPEPlik=TEXT;VARZBIÓR, DANE : Plik;LubVARZBIÓR, DANE : TEXT;\Wewnętrzna definicja typu tekstowego jest następująca:TYPETEXT=FILE OF CHAR;VARINPUT,OUTPUT :TEXT;
INPUT – jest standardowym plikiem wejścia skojarzonym standardowo z klawiaturą ( plik ten jest automatycznie otwierany przed wykonaniem każdego programu w języku Turbo Pascal ).OUTPUT – jest standardowym plikiem wyjścia skojarzonym standardowo z monitorem ( plik jest automatycznie otwierany przed wykonaniem każdego programu w języku Turbo Pascal)Dowolny plik tekstowy można kojarzyć z fizycznym zbiorem danych (plikiem) lub urządzeniem zewnętrznym ( klawiaturą, konsolą, terminalem, drukarką, portami we/wy).Wcześniej opisane procedury i funkcje dotyczące operacji na plikach można stosować także dla plików tekstowych.
Otwarcie pliku o podanej nazwie. Jeśli plik nie był pusty, to jego zawartość będzie skasowana. Wcześniej należy wykonać procedurę Assign()
-REWRITE(nazwa_pliku)
Otwarcie pliku dane (dane nie może być plikiem standardowym input
lub output) i ustawienie wskaźnika na pierwszym elemencie pliku.
Wcześniej musi być wywołana procedura Assign().
Jeśli plik tekstowy skojarzony został z urządzeniem zewnętrznym, to
jest automatycznie otwierany i wywołane procedury nie powoduje
żadnego skutku.
-RESET(dane)
Skojarzenie pliku tekstowego dane z urządzeniem zewnętrznym.
Dozwolone są następujące nazwy urządzeń:
CON - konsola
TRM – terminal
KBD – klawiatura
LST – drukarka
PRN – drukarka (LPT1)
LTP1 – port równoległy
LTP2 – port równoległy
AUX – port szeregowy
COM1 – port szeregowy we/wy
COM2 – port szeregowy we/wy
NUL – urządzenie puste
-ASSIGN(dane,’nazwa_urządz’)
Skojarzenie pliku tekstowego dane z fizycznym zbiorem (plikiem wynik.TXT który znajduje się na dysku B:)
-ASSIGN(dane,’B:\wynik.TXT’)
Opis procedury -Procedury dotyczące operacji na plikach
Zamknięcie wcześniej otwartego pliku. Jeśli plik nie był otwarty, to po wywołaniu procedury Clone(nazwa_pliku) jego stan nie ulega zmianie.
-CLOSE(nazwa_pliku)
Dopisanie do pliku tekstowego o podanej nazwie jednego wiersza. Jeśli nie wyspecyfikowano nazwy pliku to operacja dotyczy pliku standardowego OUTPUT.
-WRITELN(nazwa_pliku)
Dopisanie do pliku tekstowego dane jednego wiersza zawierającego wartość zmiennych x1,x2,..xn. Zmienne x1..xn mogą być typu INTEGER, REAL, CHAR, lub STRING. Składnia wprowadzanych znaków musi być zgodna z typem zmiennych x1..xn. Jeśli nie podano nazwy pliku to procedura dotyczy pliku
standardowego OUTPUT.
-WRITELN(dane,x1[,x2,x3,…xn])
Dopisanie do pliku tekstowego dane wartości zmiennych x1,x2,..xn. Zmienne x1..xn mogą być typu INTEGER, REAL, CHAR, lub STRING. Składnia wprowadzonych znaków musi być zgodna z typem zmiennych x1..xn. Jeśli nie podano nazwy pliku to procedura dotyczy pliku standardowego OUTPUT.
-WRITE(dane,x1[,x2,x3,…xn])
Odczytanie z pliku tekstowego dane jednego wiersza przypisanie wartości kolejnych elementów zmiennym x1,x2,..xn. Zmienne x1..xn mogą byćtypu INTEGER, REAL, CHER, lub
STRING.
-READLN(dane,x1[,x2,x3,…xn])
Wprowadzenie jednego wiersza z pliku o podanej nazwie. Jeśli nie wyspespecyfikowano nazwy pliku to operacja dotyczyczy pliku standardowego INPUT.
-READLN(nazwa_pliku)
Odczytanie z pliku dane kolejnych
elementów i przypisanie ich wartości
zmiennym x1,x2,…xn. Zmienne x1…xn
mogą być typu INTEGER, REAL,
CHAR, lub STRING.
Składnia wprowadzanych znaków musi
być zgodna z typem zmiennej x1..xn.
-READ(dane,x1[,x2,x3,….xn])
Funkcja logiczna przyjmująca wartości:
-True jeśli zmienna wskazująca wskazuje na koniec pliku (znajduje się przed znakiem Ctr-Z (^Z) lub zbiór jest pusty,
- False w przeciwnym przypadku
Funkcia SeekEof pomiia znaki spacji, tabulacji i znaczniki końca wiersza ieśli znaiduia sie w pozycji bieżącej otwartego pliku. Wywołanie funkcji SeekEof zamiast Eof może być użyteczne przy odczytywaniu z pliku wartości numerycznych.
-SeekEof(nazwa_pliku)
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT -Eof
funkcja logiczna przyjmująca wartości:
-True jeśli zmienna wskazujcfca wskazuje na koniec wiersza (znajduje się przed znakiem końca wiersza LF/CR) ,lub koniec pliku (znajduje się przed znakiem Ctr-Z (^Z), lub plik jest pusty,
- False w przeciwnym przypadku
-Eoln(nazwa_pliku)
(ang. End of line)
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT -Eof
Funkcja logiczna przyjmująca wartości:
-True jeśli zmienna wskazująca wskazuje na koniec pliku (znajduje się przed znakiem Ctr-Z (^Z) lub zbiór jest pusty
-False w przeciwnym wypadku
-Eof(nazwa_pliku)
Skasowanie zbioru danych skojarzonego z plikiem dane. Zaleca się aby przed wywołaniem procedury Erase plik dane nie był otwarty.
-ERASE(dane)
Zmiana nazwy zbioru skojarzonego z plikiem dane na zbior.txt znajdujący się na dysku A:. W chwili wywołania procedury renami() plik dane musi być zamknięty. Nowa nazwa nie może być nazwą zbioru już istniejącego.
-RENAME(dane,’A:\zbior.txt’)
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT
-SeekEoln
funkcja logiczna przyjmująca wartości:
-True jeśli zmienna wskazująca wskazuje na koniec wiersza (znajduje się przed znakiem końca wiersza LF/CR) ,lub koniec pliku (znajduje się przed znakiem Ctr-Z (^Z)), lub plik jest pusty,
-False w przeciwnym przypadku
Funkcja SeekEoln pomija znaki spacii. tabulacji i znaczniki końca wiersza jeśli znajdują się w pozycji bieżącej otwartego pliku. Wywołanie funkcji SeekEoln zamiast Eoln może być użyteczne przy odczytywaniu z pliku wartości numerycznych.
-SeekEoln(nazwa_pliku)
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT
-SeekEof
Standardowe zmienne plikowe INPUT i OUTPUT można wykorzystać do wysłania wyników działania programu do pliku lub na urządzenie zewnętrzne i pobrania danych z pliku lub urządzenia zewnętrznego. W tym celu należy w odpowiednim miejscu programu umieścić procedurę ASSIGN() np.:
ASSIGN(OUTPUT,'nazwapliku') - skierowanie wyników działania programu do pliku o podanej nazwie (nazwę pliku można poprzedzić pełną ścieżką dostępu )
ASSIGN(OUTPUT,’PRN') - skierowanie wyników działania programuna drukarkę (podłączoną do portu równoległego LTPI).
ASSIGN(INPUT,’nazwa_pliku’) - pobranie danych z pliku o podanejnazwie (nazwę pliku można poprzedzić pełną ścieżką dostępu).
Po zakończeni powyższych operacji należy przywrócić pierwotne przypisaniaplików standardowych 1NPUT OUTPUT za pomocą procedur:ASSIGN(INPUT,’ ‘) lub ASSIGN(INPUT,'CON')ASSIGN(OUTPUT,’ ‘) lub ASSIGN(OUTPUT,'CON ')
TYPY ZMIENNYCH
W języku TURBO PASCAL zdefiniowane są następujące typy zmiennych:
wyliczeniowy
okrojony
całkowity
prosty porządkowy logiczny
łańcuchowy rzeczywisty znakowy
Typ
tablicowy
strukturalny rekordowy
obiektowy zbiorowy
wskaźnikowy plikowy
1) Typy porządkowe
a) typ wyliczeniowy
Typ wyliczeniowy definiujemy wyliczając jego elementy składowe, które muszą być unikalnymi nazwami. Każdy element składowy ma nadawany numer porządkowy. Typ wyliczeniowy stosuje się zwykle dla zbiorów o niewielkiej liczbie elementów, na których nie wykonuje się operacji arytmetycznych.
UWAGA!
1) Dwa różne typy wyliczeniowe nie mogą mieć wspólnych elementów składowych.
2) Identyfikatory elementów w obrębie jednego typu muszą być różne.
3) Na elementach typu wyliczeniowego nie można wykonywać żadnych operacji arytmetycznych.
4) Wartości typu wyliczeniowego nie można wczytywać, wprowadzać na ekran i drukarkę
Przykład deklaracji typu wyliczeniowego.
TYPE identyfikator_typu=(lista_identyfikatorów);
Przykłady deklaracji typu wyliczeniowego.
TYPE
tydzień = (pn, wt, śr, czw, pt, sob, niedz );
pora_roku = (zima, wiosna, lato, jesień );
kolor = (czerwony, zielony, niebieski)
VAR
dzień : tydzień;
pora :pora_roku;
barwa :kolor;
b) typ okrojony;
Typ okrojony jest niepustym podzbiorem dowolnego typu porządkowego (całkowitego, logicznego, znakowego, wyliczeniowego).
Ogólna deklaracja typu okrojonego:
TYPE identyfikator_typu=stała..stała;
Obie stałe muszą być tego samego typu bazowego.
Przykłady deklaracji typu okrojonego:
TYPE
liczba=97..113; {typ okrojony typu całkowitego}
pozytywna=3..6;
litera=‘G’..’R’ {typ okrojony typu znakowego}
wolne=pt..niedz {typ okrojony typu wyliczeniowego}
VAR
licznik :liczba;
ocena :pozytywna;
znak, hasło :litera;
weekend :wolne;
c) całkowity;
Typ całkowity zawiera liczby całkowite z określonego przedziału.
TYPE
liczba=Integer;
VAR
wynik: liczba
4 bajtyliczby całkowite
-2147483648 do 214783647LongINT
2 bajtyliczby całkowite
-32762 do 32767INTEGER
1 bajtliczby całkowite
od -128 do 127SHORTINT
2 bajtyliczby całkowite
od 0 do 65535WORD
1 bajtliczby całkowite
0 do 255BYTE
WielkośćZawartośćNazwa typu
Typ całkowity jest predefiniowany i nie wymaga deklaracji. Deklaracja zmiennych typu całkowitego może mieć postać:
VAR
liczba :INTEGER;
a,b,c :WORD;
Dla zmiennych typu całkowitego określone są następujące operacje:
AlternatywaORNegacjaNOT
Różnica symetrycznaXORkoniunkcjaAND
Przesunięcie w prawoshrDzielenie/
Przesunięcie w lewoshlMnożenie*
Reszta z dzielenia całkowitegomodOdejmowanie-
Część całkowita z dzieleniadivDodawanie+
Liczby typu całkowitego można zapisywać w kodzie hexadecymalnym. Wtedy tak zapisaną liczbę należy poprzedzić znakiem ‘$’, np $E12A
Funkcje standardowe o wartościach typu całkowitego
a) o argumencie typu całkowitego
poprzednik
następnik
kwadrat
wartość bezwzględna
Opis
pred(12)=11i-1pred(i)
succ(13)=14i+1succ(i)
sqr(4)=16sqr(i)
abs(-4)=4|i|abs(i)
PrzykładFunkcja
2i
b) o argumencie typu rzeczywistego
Trunc(9.6)=9
Trunc(-9.6)=-9
Zaokrąglenie lczby rzeczywistej r do najbliższej liczby całkowitej w kierunku zera
Trunc(r)
Round(4.8)=5
Round(4.4)=4
Zaokrąglenie liczby rzeczywistej r do najbliższej liczby całkowitej
Round(r)
PrzykładOpisFunkacje
d) typ logiczny;
Typ logiczny (Boolean) jest określony tylk przez dwie wartości:
False- fałsz (wartośćporządkowa 0)
true- prawda (wartość porządkowa 1)
TYPE znak=BOOLEAN;
VAR odp:znak
Lub
Var odp: BOOLEAN;
Dla zmiennych typu logicznego określone są następujące operatory logiczne:
p OXR qróżnica symetrycznaXOR
p OR qalternatywaOR
p AND qkoniunkcjaAND
NOT pnegacjaNOT
000100
110110
110001
111011
p XOR qp OR qp AND qNOT pqp
Funkcje standardowe o wartościach typu logicznego
Odd(17)=true
Odd(24)=false
Funkcja badająca nieparzystość argumentu, który musi być typu całkowitego
odd(i)
PrzykładOpisFunkcja
e) Typ znakowy;
Typ znakowy obejmuje zbiór znaków alfanumerycznych: cyfr od 1…9, liter a…z A…Z, znaków specjalnych np. (+.-,=,|,*,&,^,@,#.%...)
Wartości typu znakowego zapisujemy w apostrofach, np. ‘A’, ‘a’, ‘$’. Każda dam typu znakowego zapamiętywana jest w 1 bajcie pamięci.
TYPE znak=Char;
lub VAR odp: Char
VAR odp: znak;
Dla wartości typu znakowego są określone następujące funkcje standardowe:
PROGRAM wizytówka;USES Printer;VAR imie,nazwisko :string[20] kod_miejscowosc :string[30] ulica_nr :string[25] telefon :string[8]Begin WRITE(‘imie : ’); READLN(imie) WRITE(‘nazwisko’) REALDLN(nazwisko) WRITELN(‘telefon :’); READLN(telefon); WRITE(‘podaj kod i miejscowość’); READLN(kod_miejscowości) WRITE(‘podaj ulice i numer mieszkania’); READLN(ulica_nr); WRITELN(Lst,imie,’ ‘,nazwisko); WRITELN(Lst,’ ‘.’ulica ‘,ulica_nr); WRITELN(Lst,kod_miejscowość); WRITELN(Lst,’telefon ‘,telefon); WRITELN(Lst) {przesunięcie papieru o jedne wiersz}END.
Na zmiennych typu łańcuchowego można wykonywać operacje konkatynacji (dodawania), porównanie, kopiowanie, usuwania.
Przykłady konkatenacji łańcuchów
napis1 :=‘Technikum ’;
napis2 :=‘Hutniczo’
napis3 :=‘Mechaniczne’;
Napis4 :=napis1+napis2+’-’+napis3 { napis4=‘Techniikum Hutniczo Mechaniczne’ }
Łańcuchy można porównywać za pomocą operatorów relacji (porównywane są kody ASCII poszczególnych znaków łańcucha) :
>,<,=,<>,<=,>=
Przykłady użycia operatorów realcji:
prawda
Prawda
fałsz
prawda
true‘THM’,’Thm’
true‘THM’<>’Thm’
false‘THM’=‘thm’
true‘THM’=‘THM’
WynikWyrażenie
prawdatrue‘Thm’>=‘THm’
fałszfalse‘187’<‘1328’
fałszfalse‘Ostrowiec w’,’Ostrowiec’
Funkcje łańcuchowe (moduł systemu):
Wynikiem funkcji najmniejszy numer pozycji w łańcuchu Ł2, od której rozpoczyna się podciąg identyczny z łańcuchem Ł1. Jeśli łańcuch Ł2 nie zawiera podciągu określonego łańcuchem Ł1, to funkcja zwraca wartość 0.
POS(Ł1,Ł2)
Wartością funkcji jest liczba znaków łańcucha
LENGHT(Łańcuch)
Wartość funkcji jest łańcuch o k elementach pobrany z łańcucha Ł począwszy od n znaku
COPY(Ł,n,k)
Wynikiem działaniafunkcji jest łańcuch Ł1+Ł2+Ł3+…Łn
CONCAT(Ł1,Ł2,Ł3,…ŁN)
Procedury łańcuchowe
STR(wyrL:m:n,Ł)
SRT(wyrL:m,Ł)
Znaki łańcucha Ł są traktowane jako zapis liczby, która zostaje przypisana znanej x typu INTEGER lub REAL. Jeśli przypisanie, zostało zrealizowane prawidłowo to k=0, jeśli nie to k określa numer znaku w łańcuchu Ł, który umożliwił wykonanie przepisania.
Val(Ł,x,k)
Przekształcenie danej reprezentowanej przez wyrażenie liczbowe wtrL w ciągu znaków, który będzie przypisany zmiennej łańcuchowej Ł.M (typy INTEGER) określa długość cg znakówN (typy INTEGER) określa liczbę cyfr ułamkowych
STR(wyrL,Ł1)
Wstawienie do łańcucha Ł2 przed znak znajdujący się na pozycji n znaków łańcucha Ł1.Uwaga!-n musi należeć do przedziału [1,255]-Jeśli n>LENGHT(Ł2), to n:=LENGTH(Ł2)+1-Jeśli wartość wyrażenia LENGHT(Ł1)+LENGHT(Ł2) jest większe od zadeklarowanej max. Długość łańcucha Ł2, to przypisuje się znaki od lewej do prawej odrzucając znaki nadmiarowe
INSERT(Ł1,Ł2,n)
Usuniecie k znaków z łańcucha Ł począwszy od znaku znajdującego się na pozycji n
DELETE(Ł,n,k)
4. Typy strukturalne.
a) Tablicowy
Typ tablicowy służy do opisu obiektów złożonych, których składowe są tego samego typu. Typ tablicowy w języku programowania wywodzi się z pojęć matematycznych i odpowiada pojęciu wektora n-wymiarowego lub macierzy n-wymiarowej.
Przykłady deklaracji typu tablicoweg:
Deklaracja tablicy jednowymiarowej Tablica i tablicy dwuwymiarowej Duża_Tablica.
TYPE
Tablica=ARRAY[1..10] OFBYTE; Duza_TabŁica=ARRAY[1..8] OF ARRAY[1..12] OF CHAR;
(* lub Duza_Tablica=ARRAY[1..8,L.12] OF CHAR; *)
VAR
A: Tablica;
B:Duża_Tablica;
Dostęp do poszczególnych elementów tablicy uzyskuje się przez użycie indeksów, np. A[23J ,A[kl, B[23,2], B[lt+ik].
Czas dostępu do każdego elementu tablicy jest taki sam. Typ tablicowy jest typem strukturalnym o dostępie bezpośrednim.
Przykład odwołania do zmiennej tablicowej:BEGINFOR i:=l TO m DOFORi:=lTOnDOBEGINWRIĘLNCPodaj dane'); READLN(A[ij]>; WRITELN(A[ij]>; ENDEND
Przkład tablicy dwuwymiarowej zawierającej dane typu całkowitego.
A(x,y)=
0
90
43
90
9
32
8
2122897865451121
667215006
589126775412
4879063218762343
32137878686556211
176998990893421
7654321
kolumny 1,2,3…8
wiersze 1,2,3…6
b) rekordowy
Typ rekordowy służy do opisywania obiektów złożonych, których elementy składowe są różnych typów.
Przykłady deklaracji typu rekordowego
TYPEbaza=RECORD
imie :STRING[12];nazwisko :STRING[18]miej_ur :STRING[20];dzień_u :1,31;rok_ur :1962..1978;czy_łobuz :Boolean;
END;VAR
dane:baza;
Lub
VARdane :RECORDimie :string[12]nazwisko :strong[18]miejsce_ur :REKORD
miasto :STRING[20] panstwo :STRING[15]END;
Dzień_ur :1,31;Rok_ur :1962..1978;Czy_łobuz :Boolean;END;
Rys. Graficzna prezentacja zmiennej rekordowej zawierającej przykładowe dane.
Do zmiennych typu rekordowego odwołujemy się następująco:BEGIN READ(dane.imie); READ(dane.nazwisko): WRITE(dane.czyJobuz); dane. miejsce_ur.miasto :=‘Ostrowiec‘ END.
W celu odwołania się do zmiennej typu rekordowego można użyć instrukcji wiążącej WITH
BEGINWHIT DANE DO
BEGIN READ(imie); READ(nazwisko); WRITE(czy_lobuz); miejsce_ur.miasto: ^'Ostrowiec1; miejsce _ur . państwo :=' Polska‘ END:
END.
1975
Rok_ur
N28FrancjaParyżZawadaKlaudyna
Czy_łobuzDzien_urDzień urodzenia
Miejsce_urnazwiskoimie
Instrukcje wiążącą WITH można zagnieżdżać : BEGINWITH DANE DO
WITH miejsce_ur DO BEGIN READ(imie); READ(nazwisko); WRITE(czyJobuz); miasto:-Ostrowiec'; państwo :=ToIska' END:
END.
dopuszczalny jest także zapis:BEGIN WITH DANE, mieisce ar DO
BEGIN
READ(imie}; READ(nazwisko); WRITE(czyJobuz);miasto :='0strowiec';
panstwo:-'Polska‘ END:
END.Mając zdefiniowany typ rekordowy można zdefiniowć typ tablicowy zawierający dane typu rekordowego, np.:
TYPEBAZA=ARRAY[10] of dane;
VARKATALOG :BAZA BEGIN
READ(katalog[5].dzien_ur); katalog[8]. czyjobuz:=true; katalog[10].miejsce_ur.panstwo:-Polska'; WRITE(katalog[10].miejsce_ur.panstwo); END.
8
7
6
5
4
3
2
1
PROCEDURY
Włączenie głośnika i wygenerowanie ciągłego dźwięku o częstotliwości n [Hz] -Sound(n)
CRTPrzywrócenie takiego sposobu wyświetlania jaki obowiązywał w chwili rozpoczynania wykonywania programu. -NormVideo
CRTRezygnacja z podwyższonej jasności znaków-LowVideo
CRTZwiększenie jasności znaków (przez ustawienie bitu jasność zmiennej TextAttr)-HighVideo
CRTZmiana trybu tekstowego na tryb wyspecyfikowany przez predefiniowaną stałą tryb-TextMode(tryb)
CRTWstawianie wiersza pod wierszem, w którym znajduje się aktualnie kursor i przesuniecie wierszy znajdujących się poniżej o jeden wiersz w dół.-InsLine
CRTUsunięcie wiersza w którym znajduje się aktualnie kursor i przesunięcie wierszy znajdujących się poniżej o jeden wiersz do góry-DelLine
CRTWstrzymanie wykonywania programu na okres ms milisekund-Delay(ms)
CRTWyczyszczenie linii okna tekstowego od miejsca wskazywanego przez kursor do końca wiersza. Gdy kolorem tła nie jest kolor czarny ,to kolor tła będzie określony za pomocą procedury TextBacgrund
-ClrEol
CRTWyczyszczenie aktualnego okna tekstowego gdy kolorem tła nie jest kolor czarny ,to kolor tła będzie określony za pomocą TextBacground-ClrScr
ModułOpis działaniaNazwa procedury
Przemieszczenie kursora do punktu o podanych współrzędnych X,Y. Współrzędne dotyczą aktualnego okienka
-GotoXY(XY)
CRT
Zdefiniowanie prostokątnego okna tekstowego o współrzędnych przeciwległych narożników (X1,Y1),(x2,y2)Największe okno można zdefiniować:Window(WindMin,WindMax) , co w trybie 80 kolumnowym oznacza Window(1,1,80,25).Jeśli podano błędne argumenty funkcja jest ignorowana. Jeśli nie zdefiniowano okienka to oknem domyślnym jest cały ekran.
-Window(X1,Y1,X2,Y2)
CRTPrzypisanie zmiennej TextAttr atrybutu koloru tła. Zmienna koloru może być nazwą koloru lub jego numerem
-TextBackgrund(kolor)
CRTPrzypisanie zmiennej textalert atrybutu koloru znaku. Zmienna koloru może być nazwą koloru lub jego numerem od 0 do 15 lub {i} 128
-TextColor(kolor)
CRTWyłączenie głośnika-NoSound
Edycja, kompilacja i uruchamianie programów w języku TURBO PASCAL.
1. Na podstawie algorytmu blokowego napisać program rozwiązujący trójmiany kwadratowe
Ax2+bx+c=0Program Trójmian;(*Program rozwiązywania trójmianów kwadratowych*)
VAR A, B, C, Delta, X1, X2, X12 : Real; {deklaracja zmiennych}
BEGIN { początek programu głównego}WRITE(‘Podaj współczynnik A=‘); {wyprowadzenie info. Na ekran}READLN(A); {wprowadzenie danych z klawiatury}WRITE(‘Podaj współczynnik B=‘);READLN(B) {LN na końcu READ lub WRITE powoduje dodatkowo
przesunięcie kursora do początku następnego wiersza}WRITE(‘Podaj współczynnik B=‘)READLN(C);DELTA:=B*B-4*A*C; {:= instrukcja przypisana. Pod zmienną Delta będzie przypisana
wartość wynikająca z obliczenia wyrażenia stojacego po prawejstronie}
IF Delta >0 THENWRITELN(‘Trójmian nie ma rozwiązania w R’)
ELSEIF Delta >0 THEN
BEGINWRITELN(‘ Trójmian ma dwa pierwiastki ‘);X1:=(-B-SQRT(DELTA))/(2*A);
X2:=(-B+SQRT(DELTA))/(2*A);WRITELN(‘X1=X1) {wprowadzenie wyniku}
WRITELN(X2=X2) {pierwiastki będą zapisane w postaci wykładniczej}
ENDELSEBEGIN
WRITELN(‘Trójmian ma jedne pierwiastek podwójny)
X12:=-B/(2*A)WRITELN(‘X12=X12:7:3); {Pierwiastek
będzie zapisany za pomocą 7 cyfr z dokładnością do 3 cyfr po przecinku}
END;END {Koniec programu}
Kompilacja programu zapisanego w języku TURBO PASCAL. Dyrektywy kompilatora.Po napisaniu programu przy pomocy edytora ( najczęściej w tym celu wykorzystujemy edytor zintegrowany systemu TURBO PASCAL ) należy dokonać jego translacji na język wewnętrzny mikroprocesora. W tym celu wykorzystywany jest kompilator zintegrowany z edytorem TP lub kompilator zewnętrzny. Kompilator zewnętrzny wykorzystujemy zwykle do kompilacji dużych programów ,które nie mieszczą się w pamięci przy kompilacji translatorem wbudowanym. W trakcie kompilacji badana jest poprawność skłądnikowa programu i w przypadku niezgodności składni z wymogami odpowiedniej wersji TP sygnalizowany jest błą kompilacji wraz ze wskazaniem miejsca jego występowania w programie. W wyniku pomyślnie przebiegającej kompilacji programu ostrzymujemy w pamięci komputera kod gotowy do wykonania lub plik dyskowy o takiej samej nazwie jak nazwa programu .PAS i rozszerzeniu .EXE przeznaczony do późniejszego uruchamiania z poziomu systemu operacyjnego.Podobnie należy skompilować moduły. Podczas kompilacji modułu, zostanie utworzony plik dyskowy o takiej samej nazwie jak program źródłowy modułu i rozszerzeniu .TPU .Aby uruchomić kompilację programu lub modułu należy górnego menu wybrać opcje Compile, a w niej podopcje Compile lub wcisnąć ALT F9. W przypadku kompilacji programu korzystającego z modułu, którego tekst źródłowy wygodnie jest wybrać z menu z górnego menu opcje Compile, a w niej podopcje Make lub wcisnąć klawisz F9. Wtedy zostanie wykonana kompilacja programu i wszystkich modułów z których on korzysta, a były one modyfikowane od czasu ostatniej kompilacji. Podopcja Build opcji Compile spowoduje kompilacje programu głównego i wszystkich potrzebnych modułów niezależnie od tego czy były one wcześniej kompilowane, czy nie.UWAGA!!W systemie TURBO Pascal podczas kompilacji programu następuje automatycznie jego konsolidacja.Kompilator systemu TURBO Pascal ma możliwość zmiany parametrów jego pracy. Do ustalenia parametrów pracy kompilatora służy podopcja Compiler, który znajduje się w opcji Options górnego menu. Dyrektywy kompilatora można także umieścić w kodzie źródłowym programu. Dyrektywy kompilatora umieszczone w programie mają postać {$ nazwa} i mają one wyższy priorytet niż parametry ustalone w opcji Compiler.Najważniejsze dyrektywy i parametry pracy kompilatora systemu TURBO Pascal.(dyrektywy standardowe zacieniowało)
Kompilator dokonuje sprawdzenia poprawności operacji wejścia/wyjścia (np. nie drukarka nie gotowy do pracy…).
W przypadku błędu wykonywanie programu jest przerywane z odpowiednim komunikatem.
ON I/O Checking {$I+}
Kontrola miejsca na stosie nie jest dokonywana , co możne doprowadzić do niekontrolowanego zawieszenia
się systemu. Ustalenie takiego parametru jest zalecane po bardzo dobrym przetestowaniu programu.
OFF Stack checking {$S-}
Kompilator generuje kod sprawdzający przed każdym wywołaniem procedury lub funkcji czy na stosie jest
wystarczająco duża ilość miejsca na zmianę tej procedury lub funkcji. W przypadku braku generowany jest odpowiedni komunikat i działanie programu jest
przerywane. ON Stack checking {$S+}
Przyjmowane standardowo – sprawdzanie w/w błędów nie jest wykonywane. OFF
Range
checking {SR-}
Kompilator wygeneruje kod sprawdzający, czy indeksy tablicy, łańcuchów i zakresy liczb są zgodne z
deklaracjami. W przypadku niezgodności w trakcie wykonywania programu generowany jest komunikat o
błędzie. Dyrektywa ta powoduje wygenerowanie dłuższego kodu wynikowego, dlatego zalecane jest jej użycie tylko
podczas testowania programu.
ON Range checking {SR+}
Opis Stan Parametr pracy Dyrektywa
Umożliwia dołączenie do programu użytkownika biblioteki emulującej koprocesora arytmetyczny, co umożliwia uruchomienie programu wynikowego(*.EXE) wymagającego użycia koprocesora na komputerach nie wyposażonych w koprocesor
ONEmulation{$E+}
Umożliwia użycie tylko typu REAL8087/80287{$N-}
Umożliwia stosowanie typów liczb wymagających uzycia koprocesora arytmetycznego lub jego emulatora
Numeric processing{$N+}
Ścisłe sprawdzanie długości łańcuchów nie jest wykonaneRelaxedVar-string checking{$V-}
Powoduje ścisłe sprawdzanie długości łańcuchów. W przypadku gdy długość łańcucha jest większa od zadeklarowanej następuje przerwanie wykonywania programu.
Stricte Var-string checking{$V+}
Umożliwia wykonywanie dalekich wywołań procedur i funkcji ( procedury i funkcje mogą być parametrami innych procedur i funkcji)
ON Force for calls {$F+}
Kontrola operacji we/wy nie jest przeprowadzana. W praktyce zaleca się wybranie tej opcji i sprawdzanie poprawności wykonywania operacji we/wy za pomocą standardowej funkcji IOResult
OFF I/O Checking {$I-}
Ustalenie wielkości stosu oraz segmentów na zmienne dynamiczne. Memory SIze
{$M wielkość_stosu,Mini_wielkość_segmętu,Max_wielkość_segmętu
Umozliwia dołączenie w trakcie kompilacji pliku .OBJ o podanej nazwie.{$L nazwa_pliku}
Umozliwia dołączenie w trakcie kompilacji pliku o podanej nawie.{$I nazwa_pliku}
DYREKTYWY PARAMETRYCZNE
Uruchamia tworzenie informacji dla debuggera umożliwiających śledzenie wartości zmiennych podczas wykonywania programu, co ułatwia lokalizację błędów podczas testowania programu
ONDebug Information{$D+}
Programy winikowe wymagające użycia koprocesora będą mogły być uruchamiane na komputerach wyposażonych w koprocesor arytmetyczny (zewnętrzny lub zintegrowany z procesorem głównym)
OFFEmulation{$E-}
Moduły w języku Turbo Pascal
Moduły w języku Turbo Pascal są podstawą programowania modularnego i służą przede wszystkim do grupowania procedur i funkcji biblioteki, a także do dzielenia dużych programów na powiązane logicznie części. Po zadeklarowaniu modułu w danym programie dostępne są wszystkie procedury i funkcje zdefiniowane w danym module, jak również zadeklarowane w nim stałe, zmienne, procedury i typy zmiennych. Zasoby modułu sądostępne po zadeklarowaniu go w programie przed wszystkimi innymi deklaracjami za pomocą klauzuli:USES nazwa_modułuLub USES nazwa_modułu_1[,nazwa_modułu2,…,nazwa_modułu_n]
Użytkownik może posługiwać się , modułami zaoferowanymi przez firmę Borland, inne firmy lub napisanymi przeez siebie. Moduły po skomplikowaniu otrzymują rozszerzenie *.TPU (ang. Turbo Pascal Unit). Wszystkie moduły standardowe z wyjątkiem modułu Graph, tworzą plik biblioteczny TURBO.TPL. Moduły napisane prze użytkownika można dołączyć do tej biblioteki za pomocą programu TPUMOVER>EXE.
Język Turbo Pascal wyposażony jest w następujące moduły standardowe:
SYSTEM –dołączany jest do programu standardowo i nie wymaga deklaracji.DOS- umożliwia wykonanie wybranych operacji systemu operacyjnego, własną obsługę przerwań i wywołanie funkcji systemowych.CRT- organizuje współprace z klawiaturą i ekranem w trybie tekstowym,OVERLAY- zapewnia zarządzanie programami nakładkowymi,PRINTER- kojarzy plik z drukarkąGRAPH- obsługuje operacje graficzneGRAPH3- umożliwia zgodność z TP ver 3,0TURBO3- umożliwia zgodność z TP ver 3,0
Wszystkie zadeklarowane moduły, z wyjątkiem modułu GRAPH są ładowane do pamięci z chwilą uruchomienia programu. Moduł GRAPH jest ładowany do pamięci z chwilą jego inicjalizacji i zwalniany z pamięci po zamknięciu jego trybu.
Ogólna postać modułu jest następująca:
UNIT nazwa_modułu;INTERFACE { część opisowa modułu}deklaracje_modułów;deklaracje_literałów; {typy public}deklaracje_typów { deklaracje części opisowej modułu}deklaracje_zmiennych; { mogą występować opcjonalnie}deklaracje_nagłóków_funkcji;deklaracje_nagłówków_procedur
IMPLEMENTATION {część implementacyjna}Deklaracje_typu_private:Treści procedur_zadeklarowanych_w_części_opisowej;Treści_funkcji_ zadeklarowanych_w_części_opisowej;
BEGINCzęść inicjująca;ENDCzęść implementacyjna składa się z definicji procedur, funkcji, których nagłówki podano w części opisowej modułu oraz deklaracje etykiety, literałów, zmiennych, typów, funkcji i procedur wewnętrznych.Część inicjująca składa się albo ze słowa kluczowego END, albo instrukcji, która będzie w wykonywana w celu zadeklarowania modułu.