Transcript CALOSC

Spis treści
1. Podstawowe wiadomości na temat języka programowania
2. Polecenia w języku Turbo Pascal
3. Symbole stosowane w sieciach działań
4. Klawisze funkcyje
5. Struktura programu w języku TURBO PASCAL
6. Zapowiedzi definicji procedury lub funkcji
7. Deklaracja typów zmiennych w języku TURBO Pascal
8. Pliki tekstowe w języku TURBO Pascal
9. Typy zmiennych
10. Procedury
11. Edycja, kompilacja i uruchamianie programów w języku
TURBO PASCAL
12. 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
Restore Line
Odtworzenie ostatniego wiersza, który był poddany edyji
Cut
<Shift><Del>
Usunięcie wyróżnionego bloku tekstu i umieszczenie go w
notatniku (buforze powielania)
Copy
Skopiowanie wyróżnionego bloku tekstu do notatnika
Copy Example
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)
Show
Clipboard
Wyświetlenie okienka zawierającego teksty umieszczone w
notatniku
Clear
Usunięcie zaznaczonego bloku tekstu bez umieszczania go w
notatniku
Paste
Wstawienie przed pozycją kursora tekstu ostatnio
umieszczonego w notatniku
Find…
Wyświetlenie okienka dialogowego umożliwiającego
odszukanie podanego tekstu
Replice…
Wyświetlenie okienka dialogowego umożliwiającego
odszukanie i zamianę podanego tekstu na inny
Serach Again…
Powtórzenie ostatnio wykonywanego polecenia Find lub
Replice
Go to line
numer…
Przeniesienie kursora do wiersza o podanym numerze
Find procedure…
Wyświetlenie tekstu procedury o podanej nazwie
(polecenie może być wykonane tylko podczas
uruchamiania programu)
Find terror…
Zlokalizowanie błędu wykonania programu
Run
<Ctrl>[F9]
Skomplikowanie programu w trybie make, a następnie
wykonanie go. Przerwanie wykonania <Ctrl>-Break
Program reset
<Ctrl>[F2]
Zakończenie uruchomienia programu, zwolnienie
przydzielonej mu pamięci i zamknięcie aktywnych
plików
Go to kursor [F4]
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
Trace [F7]
Wykonanie najbliższej instrukcji programu lub
wykonanie procedury
Steo oper [F8]
Wykonanie najbliższej instrukcji programu. Jeśli
instrukcja ta jest wywołaniem procedury, to
zostanie ona wykonana w jednym kroku
Parameters
Umożliwienie podania argumentów wykonywania
programów takich jakie podaje się gdy jest on
aktywny w systemie DOS
Compile
<Alt>-[F9]
Przeprowadzenie komplikacji tekstu zawartego w
aktywnym okienku edycyjnym
Make [F9]
Przeprowadzenie komplikacji w trybie Make
Build
Przeprowadzenie komplikacji w trybie Build
Destination
Określenie miejsca umieszczenia kodu wynikowego (z
rozszerzeniem nazwy . EXE) Menory/Dysk
(pamięć/dysk)
Primary File
Określenie nazwy pliku pierwotnego
Evalute/Modify
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)
Watches
Wyświetlanie menu umożliwiającego zarządzanie
obserwacją wyrażeń i zmiennych
Add Watch
Deleten Watch
Edit Watch
Remove All Watches
Ustawienia obserwacji <Ctrl>-[F7]
Usunięcie obserwacji
Modyfikacja obserwacji
Usunięcie wszystkich obserwacji
Toggle Breakpoint
Zastawienie (program będzie bezwarunkowo przerwany w
wierszu w którym znajduje się kursor) lub usunięcie
pułapki
Breakpoints
Wyświetlenie okienka dialogowego umożliwiającego
zastawienie i usuwanie pułapek warunkowych i
bezwarunkowych
Compiler
Umożliwienie ustawienia opcji komplikatora
Menory Size
Określenie rozmiarów stosu oraz minimalnego
maksymalnego rozmiaru sterty
Linker
Określenie sposobu wykonywania konsolidacji
Debugger
Określenie warunków uruchmiania programów w tym
włączania do programu wykonywanego
symbolicznych informacji uruchomieniowych
Directories
Określenie nazw katalogów,w których znajdują się pliki
wynikowe , dołączane i biblioteczne. Nazwy są
oddzielane średnikami
Environment
Określenie parameró pracy zintegrowanej systemu
TURBO Pascal
Save Options
Zapamiętanie ustalonej konfiguracji w pliku o podanej
nazwie (standardowa konfiguracja zapisana jest w
pliku TURBO.TP)
Retrieve Options
Odtworzenie uprzednio zapamiętanej konfiguracji
Size/More
Zmiana pozycji i rozmiaru aktywnego okienka
Zoom
Powiększanie/zmniejszenie aktywnego okienka
Title
Wyświetlenie okienek w układzie kartotekowym
Cascade
Wyświetlenie okienek w układzie kaskadowy,
Next
Uaktywnienie następnego otwartego okienka
Previons
Uaktywnienie poprzedniego okienka
Close
Zamknięcie aktualnego okienka i usunięcie go z ekranu
Watch
Otwarcie i uaktywnienie okienka obserwacyjnego
Register
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.
Output
Otwarcie i uaktywnienie okienka wyjściowego do którego są
kierowane wyniki dziania programów (nie dotyczy to
programów graficznych)
Call Stack
Otwarcie specjalnego okienka zawierającego liste odwołań
do procedur i funkcji
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.
Nazwa operacji
Symbol
Wyjaśnienie
Początek, koniec
lub przerwa.
Oznaczenie miejsca rozpoczęcia
lub przerwania działania
programu.
Wprowadzenie,
wyprowadzenie.
Wprowadzenie lub
wyprowadzenie danych.
Przetwarzanie.
Operacja, lub grupa operacji w
wyniku której ulegną zmianie
wartości postaci lub miejsca
zapisu informacji.
Decyzja.
Operacja określająca wybór
jednej z alternatywnych dróg
działania.
Przygotowanie.
Modyfikacja rozkazu lub grupy
rozkazów powodująca zmianę w
przebiegu procesu
przetwarzania.
Podprogram, proces
zdefiniowany.
Wywołanie programu lub procesu
zdefiniowanego jako program.
Droga przepływu
informacji.
Wiążąca operacja pomiędzy
poszczególnymi procesami
przetwarzania.
Nazwa operacji
Wyjaśnienie
Symbol
Droga przepływu
informacji ze
wskazaniem
kierunku.
Skrzyżowanie dróg
przepływu informacji
bez powiązania
między nimi.
Łączenie przepływu
dróg informacji
Komentarz
Komentarz.
Oznaczenie miejsca na komentarz.
Łącznik stronicowy.
Wejście lub wyjście z
wyodrębnionych fragmentów
schematów znajdujących się na tej
samej stronie.
Łącznik
międzystronicowy.
Wejście lub wyjście z
wyodrębnionych fragmentów
schematów znajdujących się na
różnych stronach.
K
Decyzja.
1 2
3
…
N
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}
Przykład 1.
Napisać algorytm komputerowy umożliwiający rozwiązywanie trójmianów kwadratowych w postaci:
2
Ax
Bx
C
0
Rozwiązanie:
I.
Analiza matematyczna problemu:
2
B
4A
C
1)  0
II. Algorytm komputerowy:
Algorytm programu
rozwiązującego
trójmian kwadratowy
START
Pisz: „Podaj współczynniki
równania A, B, C”
Równanie ma dwa pierwiastki w zbiorze
Czytaj: A, B, C
liczb rzeczywistych:
B 
x1 
DELTA=B*B-4*A*C
2A
B 
x2 
2A
2)  0
Równanie ma
B..jeden pierwiastek podwójny:
x1,2 
2 A
3)  0
Równanie nie ma pierwiastków w zbiorze
liczb rzeczywistych.
DELTA < 0
Pisz: „Trójmian nie ma
pierwiastków w zbiorze
liczb rzeczywistych
DELTA = 0
1
2
STOP
X1=(-B-SQRT(DELTA))/2/A
X2=(-B+SQRT(DELTA))/2/A
Pisz: „Trójmian nie ma
pierwiastków w zbiorze
liczb rzeczywistych
STOP
2
Klawisze Funkcyjne
wyświetlenie informacji pomocniczych
F1
F2
zapisanie na dysku zbioru znajdującego się w okienku edycyjnym
F3
wyświetlenie okienka dialogowego służącego do wczytania zbioru
F4
wykonanie programu do miejsca aktualnego położenia kursora
F5
powiększenie/pomniejszenie aktualnego okna
F6
przejście do następnego otwartego okienka
F7
wykonanie bieżącej instrukcji programu
F8
wykonanie bieżącej instrukcji programu. Jeśli tą instrukcją będzie
wywoływanie procedury, to będzie ona wykonana w jednym kroku
F9
kompilacja programu znajdującego się w bieżącym okienku
F10
uaktywnienie górnego menu
Ctrl F1
wyświetlenie informacji o identyfikatorze wyróżnionym przez
kursor (uruchamianie pomocy kontekstowej)
Ctrl F2
zakończenie sesji debuggera (usunięcie punktów kontrolnych)
Ctrl F3
wyświetlenie okienka zawierającego historię wywołań procedur i
funkcji
Ctrl F4
obliczenie wartości podanych zmiennych i wyrażeń
Ctrl F5
zmiana położenia lub rozmiaru aktywnego okienka
Ctrl F7
dodawanie zmiennej lub wyrażenia do okienka obserwacyjnego
Ctrl F8
ustalenie/usunięcie bieżącego wiersza jako punktu przeważania
programu (pułapki programowej).
Ctrl F9
kompilacja i wykonanie programu
Ctrl Del
usunięcie wyróżnionego tekstu
Ctrl Ins
skopiowanie wyróżnionego tekstu do notatnika
Ctrl L
powtórzenie ostatniej operacji wyszukiwania lub wyszukiwania i
zmiany ciągu znaków
Alt F1
wyświetlanie poprzedniego okienka zawierającego wyjaśnienia
Alt F3
zamknięcie aktywnego okienka
Alt F5
wyświetlenie okienka, na które wyprowadzane są wyniki
programów
Alt F8
zlokalizowanie błędu wykonania programu
Alt F9
kompilacja programu znajdującego się w aktywnym okienku
Alt O
wyświetlenie listy otwartych okienek
Alt nr
wyświetlenie okienka o podanym numerze
Alt litera
uaktywnienie odpowiedzi
Shift Del
usunięcie zaznaczonego bloku tekstu i umieszczenie go w buforze
powielania
Shift Ins
powielenie zawartości bufora powielania w miejscu aktualnego
położenia kursora w aktywnym okienku
Shift F1
wyświetlenie skorowidza informacji pomocniczych
Shift F9
przejście do poprzednio otwartego okna
Struktura programu w języku TURBO PASCAL
Każ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;
USES crt;
(*nagłówek ; przykład jest nazwą programu*)
(dołączenie modułów standardowych *)
(*deklaracja stałych*)
C=’C’;
L=’L’;
R=500;
{w tym przypadku zadeklarowano stałe C,L,R,PI}
PI=3,14
TYPE
(*deklaracja typów zmiennych
Adres=record
Nazwisko :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}
CONST
R
:Real
Odp
:Char;
PROCEDURE przykładowa;
(*deklaracja procedur*)
VAR Zn : char;
{deklaracja zmiennych lokalnych obowiązujących }
BEGIN
…
…
END.
{tylko wewnątrz procedury }
BEGIN
…
…
END;
{początek programu głównego}
…
{tu należy umieścić
instrukcje stanowiące}
{program główny}
{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ą FORWARD
PROCEDURE 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;
VI Przykłady definicji procedur i funkcji:
Przykłady definicji procedur.
PROCEDURE Kreska;
BEGIN
WRITELN(‘***************’)
END;
Procedura bezparametrowa kreska spowoduje wyrysowanie
w miejscu aktualnego położenia kursora linii składającej się z ‘’ *
‘’.
PROCEDURE SuperKreska(x,y,dl: BYTE;znak:CHAR);
VAR
k:BYTE
BEGIN
FOR K:=1 to dl DO
BEGIN
GOTOXY(x+k-l,y);
WRITELN(znak)
END;
END;
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 ‘’=’’
X
08
0”0
===========
25
Y
Rys. Wygląd ekranu monitora po wywołaniu PROCEDURY SuperKreska
PROCEDURE stop;
BEGIN
WRITELN(‘wciśnij dowolny klawisz’);
REPEAT UNTIL KEYPRESSED;
END;
PROCEDURE stoj;
BEGIN
WRITELN (‘wciśnij ENTER’);
READLN;
END;
Powyższe procedury mają podobne działanie i służą do zatrzymania
wykonywania programu do czasu wciśnięcia odpowiedniego klawisza.
Przykłady definicji funkcji:
FUNCTION DELTA (A,B,C:REAL):REAL;
BEGIN
DELTA:=B*B-4*A*C;
END;
Funkcja DELTA wyznacza wyróżnik równania kwadratowego.
FUNCTION POTEGA(X,Y:REAL):REAL;
BEGIN
POTEGA:=EXP(Y*LN(X));
END;
Y
Funkcja POTEGA oblicza X .
Funkcja Lg oblicza logarytm dziesiętny liczby X
FUNCTION
Lg(X:REAL):REAL;
BEGIN
Lg:=Ln(X)/Ln(10)
END;
FUNCTION
Log(a,b:REAL):REAL;
BEGIN
Log:=Ln(b)/Ln(a)
END;
Funkcja Log oblicza logarytm o podstawie a z liczby b
VII. Definicjie funkcji i procedur rekurencyjne i iteracyjne.
a)
obliczanie silni metodą iteracyjną:
FUNCTION SILNIA(n:BYTE):LongInt;
VAR
i:BYTE
Iloczyn : Longint;
BEGIN
iloczyn:=1;
IF n>1 THEN
BEGIN
FOR i:=2 TO n DO
iloczyn:=iloczyn*i;
END;
SILNIA:=iloczyn
END;
b) obliczanie silni metodą rekurencyjną;
W procedurach i funkcjach zdefiniowanych rekurencyjnie występuje bezpośrednie
lub pośrednie wywoływanie tego samego podprogramu
FUNCTION SILNIA(n:BYTE):LongInt;
BEGIN
IF ( n=0) OR (n=1) THEN
SILNIA:=1
ELSE
SILNIA:=n*SILNIA(n-1);
END;
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;
BEGIN
FOR k:=N DOWNTO 1 DO
WRITELN;
END;
2) Definicja rekurencyjna PROCEDURY ODSTĘP.
PROCEDURE ODSTEP(n);
BEGIN
IF n>1 THEN
ODSTEP(n-1);
WRITELN;
END;
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 tekstowe
Plikami 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:
TYPE
Plik=TEXT;
VAR
ZBIÓR, DANE : Plik;
Lub
VAR
ZBIÓR, DANE : TEXT;
\Wewnętrzna definicja typu tekstowego jest następująca:
TYPE
TEXT=FILE OF CHAR;
VAR
INPUT,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.
Procedury dotyczące operacji na
plikach
-
Opis procedury
-
Skojarzenie pliku tekstowego dane z fizycznym zbiorem (plikiem wynik.TXT
który znajduje się na dysku B:)
-
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
-
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.
-
Otwarcie pliku o podanej nazwie. Jeśli plik nie był pusty, to jego zawartość
będzie skasowana. Wcześniej należy wykonać procedurę Assign()
ASSIGN(dane,’B:\wynik.TXT’)
ASSIGN(dane,’nazwa_urządz’)
RESET(dane)
REWRITE(nazwa_pliku)
READ(dane,x1[,x2,x3,….xn])
-
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.
READLN(nazwa_pliku)
-
Wprowadzenie jednego wiersza z pliku o podanej nazwie. Jeśli nie
wyspespecyfikowano nazwy pliku to operacja dotyczyczy pliku standardowego
INPUT.
READLN(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.
-
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.
-
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(nazwa_pliku)
-
Dopisanie do pliku tekstowego o podanej nazwie jednego wiersza. Jeśli nie
wyspecyfikowano nazwy pliku to operacja dotyczy pliku standardowego
OUTPUT.
CLOSE(nazwa_pliku)
-
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.
WRITE(dane,x1[,x2,x3,…xn])
WRITELN(dane,x1[,x2,x3,…xn])
RENAME(dane,’A:\zbior.txt’)
-
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.
ERASE(dane)
-
Skasowanie zbioru danych skojarzonego z plikiem dane. Zaleca się aby przed
wywołaniem procedury Erase plik dane nie był otwarty.
Eof(nazwa_pliku)
-
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
-
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT
Eoln(nazwa_pliku)
-
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
Eof
-
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego INPUT
SeekEof(nazwa_pliku)
-
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.
(ang. End of line)
SeekEof
-
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego
INPUT
SeekEoln(nazwa_pliku)
-
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
-
działa jak wyżej, z tym że dotyczyczy standardowego pliku wejściowego
INPUT
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 programu
na drukarkę (podłączoną do portu równoległego LTPI).
ASSIGN(INPUT,’nazwa_pliku’)
- pobranie danych z pliku o podanej
nazwie (nazwę pliku można poprzedzić pełną ścieżką dostępu).
Po zakończeni powyższych operacji należy przywrócić pierwotne przypisania
plikó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
Nazwa typu
Zawartość
Wielkość
BYTE
liczby całkowite
0 do 255
1 bajt
WORD
liczby całkowite
od 0 do 65535
2 bajty
SHORTINT
liczby całkowite
od -128 do 127
1 bajt
INTEGER
liczby całkowite
-32762 do 32767
2 bajty
LongINT
liczby całkowite
-2147483648 do 214783647
4 bajty
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:
div
Część całkowita z dzielenia
+
Dodawanie
-
Odejmowanie
*
Mnożenie
shl
Przesunięcie w lewo
/
Dzielenie
shr
Przesunięcie w prawo
NOT
Negacja
OR
Alternatywa
AND
koniunkcja
mod
XOR
Reszta z dzielenia całkowitego
Różnica symetryczna
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
Przykład
Funkcja
Opis
abs(i)
wartość bezwzględna
|i|
abs(-4)=4
sqr(i)
kwadrat
i2
sqr(4)=16
succ(i)
następnik
i+1
succ(13)=14
pred(i)
poprzednik
i-1
pred(12)=11
b) o argumencie typu rzeczywistego
Funkacje
Opis
Przykład
Round(r)
Zaokrąglenie liczby rzeczywistej r
do najbliższej liczby całkowitej
Round(4.8)=5
Round(4.4)=4
Trunc(r)
Zaokrąglenie lczby rzeczywistej r do
najbliższej liczby całkowitej w
kierunku zera
Trunc(9.6)=9
Trunc(-9.6)=-9
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:
NOT
negacja
NOT p
AND
koniunkcja
p AND q
OR
alternatywa
p OR q
XOR
różnica symetryczna
p OXR q
p
q
NOT p
p AND q
p OR q
p XOR q
1
1
0
1
1
1
1
0
0
0
1
1
0
1
1
0
1
1
0
0
1
0
0
0
Funkcje standardowe o wartościach typu logicznego
Funkcja
Opis
Przykład
odd(i)
Funkcja badająca nieparzystość argumentu,
który musi być typu całkowitego
Odd(17)=true
Odd(24)=false
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
VAR odp: Char
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:
Wyrażenie
Wynik
‘THM’=‘THM’
true
prawda
‘THM’=‘thm’
false
fałsz
‘THM’<>’Thm’
true
Prawda
‘THM’,’Thm’
true
prawda
‘Ostrowiec w’,’Ostrowiec’
false
fałsz
‘187’<‘1328’
false
fałsz
‘Thm’>=‘THm’
true
prawda
Funkcje łańcuchowe (moduł systemu):
CONCAT(Ł1,Ł2,Ł3,…ŁN)
Wynikiem działaniafunkcji jest łańcuch
Ł1+Ł2+Ł3+…Łn
COPY(Ł,n,k)
Wartość funkcji jest łańcuch o k
elementach pobrany z łańcucha Ł
począwszy od n znaku
LENGHT(Łańcuch)
Wartością funkcji jest liczba znaków
łańcucha
POS(Ł1,Ł2)
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.
Procedury łańcuchowe
DELETE(Ł,n,k)
Usuniecie k znaków z łańcucha Ł począwszy
od znaku znajdującego się na pozycji n
INSERT(Ł1,Ł2,n)
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
STR(wyrL,Ł1)
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ów
N (typy INTEGER) określa liczbę cyfr
ułamkowych
SRT(wyrL:m,Ł)
STR(wyrL:m:n,Ł)
Val(Ł,x,k)
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.
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 nwymiarowego 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:
BEGIN
FOR i:=l TO m DO
FORi:=lTOnDO
BEGIN
WRIĘLNCPodaj dane'); READLN(A[ij]>; WRITELN(A[ij]>; END
END
Przkład tablicy dwuwymiarowej zawierającej dane typu całkowitego.
1
2
3
4
5
6
7
8
21
34
89
90
89
99
76
32
1
21
11
45
65
78
89
122
9
2
211
56
865
786
78
3
21
90
3
43
23
876
321
6
90
87
43
4
2
1
54
677
2
1
89
90
5
6
0
0
5
1
2
67
0
6
A(x,y)=
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
TYPE
baza=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
VAR
dane :RECORD
imie
: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;
imie
nazwisko
Miejsce_ur
Dzień
urodzenia
Dzien_ur
Rok_ur
Czy_łobuz
Klaudyna
Zawada
Paryż
Francja
28
1975
N
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
BEGIN
WHIT DANE DO
BEGIN
READ(imie);
READ(nazwisko);
WRITE(czy_lobuz);
miejsce_ur.miasto: ^'Ostrowiec1;
miejsce _ur . państwo :=' Polska‘
END:
END.
Instrukcje wiążącą WITH można zagnieżdżać :
BEGIN
WITH 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.:
TYPE
BAZA=ARRAY[10] of dane;
VAR
KATALOG :BAZA BEGIN
READ(katalog[5].dzien_ur);
katalog[8]. czyjobuz:=true;
katalog[10].miejsce_ur.panstwo:-Polska'; WRITE(katalog[10].miejsce_ur.panstwo);
END.
1
2
3
4
5
6
7
8
PROCEDURY
Nazwa
procedury
Opis działania
Moduł
ClrScr
-
Wyczyszczenie aktualnego okna tekstowego gdy kolorem tła nie jest kolor
czarny ,to kolor tła będzie określony za pomocą TextBacground
CRT
ClrEol
-
Wyczyszczenie 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
CRT
Delay(ms)
-
Wstrzymanie wykonywania programu na okres ms milisekund
CRT
DelLine
-
Usunięcie wiersza w którym znajduje się aktualnie kursor i przesunięcie
wierszy znajdujących się poniżej o jeden wiersz do góry
CRT
InsLine
-
Wstawianie wiersza pod wierszem, w którym znajduje się aktualnie kursor i
przesuniecie wierszy znajdujących się poniżej o jeden wiersz w dół.
CRT
TextMode(tryb)
-
Zmiana trybu tekstowego na tryb wyspecyfikowany przez predefiniowaną
stałą tryb
CRT
HighVideo
-
Zwiększenie jasności znaków (przez ustawienie bitu jasność zmiennej
TextAttr)
CRT
LowVideo
-
Rezygnacja z podwyższonej jasności znaków
CRT
NormVideo
-
Przywrócenie takiego sposobu wyświetlania jaki obowiązywał w chwili
rozpoczynania wykonywania programu.
CRT
Sound(n)
-
Włączenie głośnika i wygenerowanie ciągłego dźwięku o częstotliwości n
[Hz]
-
Wyłączenie głośnika
CRT
TextColor(kolor)
-
Przypisanie zmiennej textalert atrybutu koloru znaku.
Zmienna koloru może być nazwą koloru lub jego
numerem od 0 do 15 lub {i} 128
CRT
TextBackgrund(kol
or)
-
Przypisanie zmiennej TextAttr atrybutu koloru tła. Zmienna
koloru może być nazwą koloru lub jego numerem
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.
CRT
-
Przemieszczenie kursora do punktu o podanych
współrzędnych X,Y. Współrzędne dotyczą aktualnego
okienka
NoSound
Window(X1,Y1,X2,
Y2)
GotoXY(XY)
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=0
Program 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 prawej
stronie}
IF Delta >0 THEN
WRITELN(‘Trójmian nie ma rozwiązania w R’)
ELSE
IF Delta >0 THEN
BEGIN
WRITELN(‘ 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)
END
ELSE
BEGIN
END
{Koniec programu}
{pierwiastki będą zapisane w
postaci wykładniczej}
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;
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)
Dyrektywa
{SR+}
Parametr pracy
Range
checking
Stan
ON
Opis
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.
Range
{SR-}
{$S+}
checking
Stack checking
OFF
ON
Przyjmowane standardowo – sprawdzanie w/w błędów nie
jest wykonywane.
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.
{$S-}
{$I+}
Stack checking
I/O Checking
OFF
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.
ON
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.
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
{$I-}
I/O Checking
OFF
{$F+}
Force for calls
ON
Umożliwia wykonywanie dalekich wywołań procedur i funkcji (
procedury i funkcje mogą być parametrami innych procedur i
funkcji)
{$V+}
Var-string checking
Stricte
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.
{$V-}
Var-string checking
Relaxed
Ścisłe sprawdzanie długości łańcuchów nie jest wykonane
{$N+}
Numeric processing
Umożliwia stosowanie typów liczb wymagających uzycia
koprocesora arytmetycznego lub jego emulatora
{$N-}
8087/80287
Umożliwia użycie tylko typu REAL
{$E+}
Emulation
ON
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
{$E-}
Emulation
{$D+}
Debug
Information
OFF
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)
ON
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
DYREKTYWY PARAMETRYCZNE
{$I nazwa_pliku}
Umozliwia dołączenie w trakcie kompilacji pliku o podanej nawie.
{$L nazwa_pliku}
Umozliwia dołączenie w trakcie kompilacji pliku .OBJ o podanej nazwie.
{$M
wielkość_stosu,
Mini_wielkość_seg
mętu,
Max_wielkość_seg
mętu
Memory
SIze
Ustalenie wielkości stosu oraz segmentów na zmienne dynamiczne.
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łu
Lub 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 graficzne
GRAPH3- umożliwia zgodność z TP ver 3,0
TURBO3- 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;
BEGIN
Część inicjująca;
END
Część 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.