Wyk ady z Podstaw
Programowania
J zyk Turbo Pascal 7.0
Politechnika Bia ostocka
Wydzia Informatyki
Jaros aw S. Walijewski
J zyki programowania -Pascal Strona 2
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Wyk ady Podstaw Programowania
Deklaracja sta ych i zmiennych typów znakowych
Instrukcje wej8cia /wyj8cia (Input/ Output )
Wyj8cie - procedury Write , Writeln
J zyki programowania -Pascal Strona 3
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Istota programowania proceduralnego
Deklaracje, definicja i wywo anie podprogramów
Zalety programowanie z wykorzystaniem podprogramów
Podstawowe operacje na plikach
Plik tekstowy a plik file of char
J zyki programowania -Pascal Strona 4
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Modu tworzone przez u4ytkownika
Programowanie w trybie graficznym
Wprowadzenie do pracy w trybie graficznym
J zyki programowania -Pascal Strona 5
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
1 Literatura:
1. N. Wirth
„Algorytmy + struktury danych = Programy”, WNT
2. A. Marciniak
„Turbo Pascal 7.0” WNT
3. W. Por bski
„Pascal-Wprowadzenie do programowania”, Help
4. Sam Abolrous
„Pascal Podstawy programowania”, Mikom
5. B. Jankowski
„Programowanie w praktyce”, Mikom
6. B Kernighan, P. Plauger „Narz dzia programistyczne w Pascalu”,
WNT
7. Borland TP7
“User’s Guide”
8. Borland TP7
“Language Guide”
9. Borland TP7
“Programmer’s Reference”
10. Skrypt wyk adów http://aragorn.pb.bialystok.pl/~walijewski
J zyki programowania -Pascal Strona 6
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
2 Historia
1971
Niklaus Wirth, profesor informatyki Politechniki w
Zurychu, opublikowa pierwszy artyku o Pascalu "The programming
language Pascal"
o
W zamierzeniu Wirth’a Pascal mia s u4yS przede wszystkim
do nauki programowania strukturalnego, tj. programowania
du4ych systemów tzw. "z góry - na dó ", czyli okre8lania
du4ych elementów poprzez elementy ni4szego rz du, a4 do
ko.cowych elementów programowych realizujCcych okre8lone
funkcje.
1973 Kathlen Jensen "Pascal, User Manual and Report" - pierwszy
podr cznik j zyka
1983 Turbo Pascal 1.0 ameryka.skiej firmy Borland International
(obecnie Inprise)
Turbo Pascal 3.0 – zapoczCtkowa a sukces TP
Turbo Pascal 4.0 – nowe zintegrowane 8rodowisko,
implementacja modu ów.
1988 Turbo Pascal 5.0
1989
Turbo Pascal 5.5
- Pierwsza implementacje
Programowania obiektowego w TP
Turbo Pascal 6.0 – Zawiera a nowC bibliotek Turbo Vision
1992 Borland Pascal 7.0 i Turbo Pascal 7.0
Pakiety te zawierajC m.in. zintegrowane, interakcyjne systemy
programowania, które sk adajC si z kompilatorów j zyka,
z Cczonych z nimi ekranowych, wielookienkowych edytorów
tekstów i wbudowanych w systemy programów lokalizacji i
usuwania usterek (ang. debugger) oraz przeglCdania powiCzanych
elementów programów (ang. browser).
J zyki programowania -Pascal Strona 7
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
2.1
2.1
2.1
2.1 J zyki Programowania.
J zyki Programowania.
J zyki Programowania.
J zyki Programowania.
W pami ci program jest zapisany jako Kod Maszynowy, czyli instrukcje
dla konkretnego procesora. SC one pami tane jako liczby w systemie
binarnym (zerojedynkowym).
Powsta wi c Asembler - j zyk pierwszej generacji. Jego rozkazy
odpowiadajC bezpo8rednio instrukcjom procesora, jednak zapisywane sC w
bardziej zrozumia ej formie.
Druga generacja to j zyki nie majCce ju4 tak bliskiego zwiCzku z
procesorem, ale nadal podobnie jak asembler stanowiCce jeden ciCg
instrukcji. SC to tak zwane j zyki interpretowane. Przyk adem takiego
j zyka mo4e byS ogólnie znany Basic. Jedna instrukcja j zyka drugiej
generacji, mo4e byS t umaczona na kilka, kilkadziesiCt a czasem wi cej
instrukcji procesora.
J zyki kolejnej generacji, np. Pascal, rozwijajC koncepcj programowania
o mo4liwo8S podzielenia programu na modu y wykonujCce ró4ne operacje
wchodzCce w jego sk ad. Ka4da taka cz 8S stanowi pod pewnym
wzgl dem zamkni tC ca o8S i jej "wn trze" nie jest dost pne.
Wykorzystanie jej polega na przekazaniu parametrów (i ewentualnym
odebraniu wyniku). Typowymi modu ami sC funkcje i procedury.
Kolejny to j zyki Zorientowane Obiektowo (OO). Przyk ad to C++,
Delphi. Chocia4 w Pascalu te4 mo4na pisaS programy OO.
Powsta y równie4 j zyki czwartej generacji. SC to j zyki umo4liwiajCce
pisanie programów tzw. bardzo wysokiego poziomu, niezale4ne od
sprz tu, a nawet systemu operacyjnego. Przyk ad to j zyki dost pu do baz
danych.
J zyki programowania -Pascal Strona 8
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3 Podstawowe poj cia
3.1
3.1
3.1
3.1 Budowa programu
Budowa programu
Budowa programu
Budowa programu
Program pascalowy buduje si z elementarnych jednostek j zyka zwanych
symbolami. Symbol sk ada si ze znaku lub ciCgu znaków alfabetu .
Alfabet zawiera :
du4e i ma e litery alfabetu aci.skiego i znak _
cyfry od 0 do 9
symbole specjalne ( jednoznakowe)
+ - * / = < > { }[ ] ( ) . : ; ^
Ze znaków tworzy si symbole specjalne ( wieloznakowe)
<> <= >= := ..
spacja
i s owa kluczowe ( zastrze4one)
W taki sam sposób tworzymy identyfikatory sta ych, zmiennych, typów,
podprogramów etc. Symbole specjalne, podobnie jak znak spacji sC
separatorami jednostek leksykalnych.
3.2
3.2
3.2
3.2 S owa kluczowe
S owa kluczowe
S owa kluczowe
S owa kluczowe
S owa kluczowe sC to spójne ciCgi liter tworzCce zarezerwowane s owa
angielskie o ustalonym znaczeniu. U4ywa si ich w z góry okre8lony
sposób. SC zastrze4one, tzn. nie mogC byS zmieniane przez programist .
Ich nazw nie mo4na w programie u4yS jako identyfikatora do jakiego8
elementu. Poni4ej ich lista:
And Array Asm
Begin Case
Const Constructor
Destructor
Div
Do
Downto Else End
File For
Function Goto
If Implementation
In
Inherited Inline Interface
Label Mod
Nil Not Object Of Or
Packed Procedure Program
Record Repeat
Set Shl Shr String
Then
To Type Unit Until Uses
Var While With
Xor
J zyki programowania -Pascal Strona 9
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Oprócz s ów kluczowych w Turbo Pascalu wyst pujC Dyrektywy j zyka.
W odró4nieniu od s ów kluczowych, nie sC one zastrze4one - podane
wyrazy mogC wi c byS identyfikatorami zdefiniowanymi przez
programist , co jednak nie jest zalecane. Pewnym wyjCtkiem sC dyrektywy
private i public, które w obiektach, ale tylko w nich, sC s owami
zastrze4onymi. DyrektywC jest ka4dy z nast pujCcych wyrazów :
Absolute Far Near
Public
Assembler
Forward Private Virtual
External Interrupt
Przyk ady identyfikatorów
Ala
ala
Do
Ola1_1
Ola-1
Koniec
Pocz%tek
Liczba Integer
String
Pascal Far
Typ
danych
_For Private
23cia
3.3
3.3
3.3
3.3 Podstawowe typy danych
Podstawowe typy danych
Podstawowe typy danych
Podstawowe typy danych
J zyk Pascal pozwala na abstrahowanie od reprezentacji danych w pami ci
komputera.
OsiCgni to to poprzez wprowadzenie poj cia typu. Przyj to za o4enie, 4e
ka4da zmienna, wyra4enie lub funkcja jest pewnego typu.
Typ ten okre8la
zbiór warto8ci sta ej, zmiennej etc.
zbiór operacji jakie mo4na wykonaS na obiektach
3.3.1 Typy
ca kowite
TYPY CAUKOWITE - sC to warto8ci liczbowe, które mieszczC si w
podanych zakresach, im wi kszy zakres to automatycznie zwi ksza si
zapotrzebowanie liczby na pami S:
SHORTINT (-128..127) 1
bajt
INTEGER (-32768..32767) 2
bajty
LONGINT (-2147483648..2147483647) 4
bajty
BYTE
(0..255)
1 bajt
WORD (0..65535)
2 bajty
J zyki programowania -Pascal Strona 10
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.3.2 Typy
rzeczywiste
Nazwa
Zakres
D ugo
Dok adno (cyfr)
real
2.9e-39 ÷ 1.7e38
6 bajtów
11 ÷ 12
single
1.5e-45 ÷ 4.0e38
4 bajty
7÷ 8
double
5.0e-324 ÷ 1.7e308
8 bajtów
15 ÷ 16
extended
3.4e-4932 ÷ 1.1e4932
10 bajtów
19 ÷ 20
comp
-9.2e18÷ 9.2e18
8 bajtów
19 ÷ 20
U4ycie typów Comp lub Extended wymaga deklaracji wykorzystywania
w przez program koprocesora( "Must be in 8087 mode to compile this."
{$N+} ) W menu OPTIONS/COMPILER w dziale Numeric processing
nale4y wybraS opcj 8087/80287
Opcja {$E+} umo4liwia uruchomienie programowC emulacj koprocesora,
w przypadku braku jednostki sprz towej.
3.3.3 Znaki
i
a cuchy znaków
Zbiór znaków (typ char) zosta zdefiniowany przez tablic kodów ASCII.
3.3.3.1 Znaki
sterujCce ( kontrolne )
Znaki o kodach 0 - 31 , 127 noszC nazw znaków sterujCcych . Ich
graficzna reprezentacja nie zawsze b dzie wy8wietlana . SC to znaki
u4yteczne przy sterowaniu komputerem .
Np
program bell;
begin
write(#7); write(char(7));
end.
Wykonanie programu powoduje wydanie dIwi ku dzwonka (ang. Bell ).
3.3.3.2
Znaki podstawowego i rozszerzonego kodu ASCII
SC to znaki odpowiadajCce kodom 32 ( spacja) - 126 ( ~). MieszczC si tu
znaki alfabetu Pascala ( ma e i wielkie litery aci.skie , liczby ,znaki
operatorów itp. ).
Znaki o kodach 128- 225 sC to znaki tzw. rozszerzonego kodu ASCII .
Znaki te mogC byS zmieniane , w celu uzyskania symboli specyficznych
dla danego j zyka np. Y
Standardowo znajdujC si tam znaki do kre8lenia ramek , kilka znaków
u4ywanych w transkrypcji i inne .
Dost p do tych znaków mo4e byS zrealizowany na trzy sposoby
J zyki programowania -Pascal Strona 11
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
1. #Nr_Znaku np. #65
2. wykorzystanie funkcji char
char ( Nr_Znaku ) ;
np. char (65)
3. wypisanie symbolu znaku w apostrofach np. 'A'
3.3.3.3 Typ
a.cuchowy -String
Umieszczenie pomi dzy apostrofami ciCgu znaków ( a.cucha) jest
równie4 dopuszczalne np.
Program string1;
begin
write('PASCAL);
end .
CiCg znaków jest zwiCzany z typem string; Oczywiste jest , 4e typ char
jest w nim zawarty jako ciCgi d ugo8ci 1.
Program string_char;
begin
write('P','A','S','C','A','L');
end .
Inny specjalny napis to tzw. string pusty '' (apostrof apostrof)
3.3.4 Deklaracja
sta ych i zmiennych typów
znakowych
Sta e
const Litera = 'A';
const Imie = ' Anna';
Zmienne
var c : char;
var S : String;
var s10: String[10];
Zmienne z warto8ciC poczCtkowC
(dotyczy TURBO PASCAL i BORLAND PASCAL )
const c
: char = 'A' ;
{1}
s1 : String[1] = 'Q';
{2}
S
: String=
'A';
{3}
s10 : String[10]= 'Kot';
{4}
St : String = 'To jest napis !'; {5}
Jakie sC podobie.stwa i ró4nice pomi dzy deklaracjami {1},{2}i{3}?
J zyki programowania -Pascal Strona 12
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.4
3.4
3.4
3.4 Elementy programu
Elementy programu
Elementy programu
Elementy programu
3.4.1 Struktura
programu
Program Nazwa; {nag ówek programu}
Uses ...; {deklaracje u ycia modu ów}
Const ... {deklaracje sta ych globalnych}
Type ... {deklaracje typów}
Var ... {deklaracje zmiennych globalnych}
Procedure Nazwa(paramerty); {nag ówek
podprogramu - procedury}
Var ... {deklaracja zmiennych lokalnych}
Begin
... {instrukcje podprogramu}
End;
Function Nazwa(paramerty):Typ_wyniku;
{nag ówek funkcji}
Var ... {deklaracja zmiennych lokalnych }
Begin
... {instrukcje podprogramu}
End;
BEGIN
... {instrukcje bloku gIównego programu}
END. { zakoKczenie bloku gIównego kropk%}
Najkrótszy poprawny program w TP to:
Program Nazwa;
Begin
End.
J zyki programowania -Pascal Strona 13
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.4.2 Komentarze
Ka4dy program po pewnym czasie mo4e staS si nawet trudy do
zrozumienia nawet dla autora . Mo4na jednak ten proces os abiS poprzez
odpowiednie pisanie programów.
W tym celu nale4y opisywaS wszystkie bardziej z o4one fragmenty
programów, a tak4e u4ywaS identyfikatorów, których nazwy przybli4ajC
ich zastosowanie.
Przyk ad 1:
(* komentarz *)
var n,m,k : integer;
begin
n:=2;
m:=6;
k:=n*m;
writeln(iloczyn { komentarz } );
{ to
takLe
jest
komentarz }
end.
Wprawdzie to nie jest komentarz, ale kompilator
potraktuje ten takst jako komentarz.
Przyk ad 2 :
Program iloczyn;
var czynnik1,czynnik2, { czynniki }
iloczyn :
(*wynik mnoLenia *)
integer;
{ typ zniennych }
BEGIN
czynnik1:=2 ; {przypisanie wartoOci do}
czynnik2:=2 ;
{ czynników }
iloczyn:=czynnik1 * czynnik1;
{wyliczenie wyniku mnoLenia}
writeln('Wynik mnoLenia ' , czynnik1,' przez
',czynnik2,' wynosi : ',iloczyn ) ;
END.
J zyki programowania -Pascal Strona 14
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.4.3
Instrukcja przypisania
Nadawanie warto8ci nast puje bardzo cz sto za po8rednictwem instrukcji
przypisania, która ma ogólnC postaS :
zmienna := wyraLenie ;
Operator „ := ” nazywa si operatorem przypisania , symbol zmienna
oznacza tu identyfikator; wyra4enie musi byS typu konwertowanego do
typu zmiennej. W wersji najprostszej:
zmienna := staIa ;
liczba := 10 ;
czytamy : zmiennej liczba przypisz warto8S 10 ;
Program Instr_przypisania_1 ;
var liczba :integer ;
BEGIN
liczba :=1;
writeln(liczba);
liczba :=100;
writeln(liczba);
liczba := -237;
writeln(liczba);
END.
{wynik wykonania programu
1
100
-237 }
Istnieje równie4 inny schemat instrukcji przypisania mianowicie
zmienna1 := zmienna2 ;
Jednak4e ta postaS dopuszczalna jest gdy zajdzie jedno z:
typy zmiennych sC zgodne
zmienna zmienna2 jest typu konwertowanego typu zmiennej
zmienna1
o typ real (zmienna1) i typ Integer (zmienna1)
J zyki programowania -Pascal Strona 15
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Przyk ad
var a,b :integer;
begin
a:=1;
b:=a;
writeln(c);
writeln(b);
end .
Zmienne by y tego samego typu .
Przyk ad
var s : string ;
const c : char = 'Z';
bagin
s := c ;
writeln(c);
writeln(s);
end .
zmienne mia y ró4ne typy
Program Instr_przypisania_2 ;
var liczba : integer ,
litera : char;
BEGIN
liczba := 33;
{wynik wykonania
programu }
litera := char (liczba)
{ ! }
writeln(litera);
END.
J zyki programowania -Pascal Strona 16
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Program const_var;
const
c
: char='A';
s1 : string[1]='Q';
s
: string='A';
s10: string[10]='kot';
st : string='To jest napis';
begin
writeln('******************');
writeln('s1 :',s1);
writeln('c :',c);
s1:='kkk';
writeln('s1 :',s1);
c:='u';
writeln('s10 :',s10);
s10:=st;
writeln('s10 :',s10);
writeln('c :',c)
end.
3.4.3.1 Ró4nice pomi dzy identyfikatorami sta ych i
zmiennych
1. warto8ci sta ych sC okre8lone przed rozpocz ciem programu natomiast
zmienne otrzymujC warto8S w trakcie wykonywania programu ;
2. ( TP ) tylko zmienne deklarowane w sekcji CONST majC nadanC
warto8S przed rozpocz ciem programu ;
3. warto8S identyfikatora sta ej nie mo4e ulec zmianie podczas
wykonywania programu , podczas gdy zmienna mo4e przyjmowaS
ró4ne warto8ci
W instrukcji przypisania zmienna := staIa ;
warto8S sta ej musi byS tego samego typu , co typ zmiennej . Jedynym
wyjCtkiem jest instrukcja przypisania zmiennej typu rzeczywistego sta ej
typu ca kowitego np.
J zyki programowania -Pascal Strona 17
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
program Real_int;
var r :real;
begin
r := 100 ;
end.
Które z definicji sC poprawnymi definicjami sta ych :
(a) CONST Licza
= 250 ;
(b) CONST Liczba
= 1,2 ;
(c) CONST Znak
= 'A' ;
(d) CONST Max = 250 ;min= -150.7;
(e) CONST zakres
= 250 ..500;
(f) CONST L : integer = 250 ;
(g) CONST L : real
= 250 ;
(h) CONST L : string
= 250 ;
(i) CONST L : char
= 250 ;
Które ze zmiennych sC zadeklarowane poprawnie :
(a) VAR 1a,2a,3a
: Real;
(b) VAR a1,a2,a3 : Real;
b1 : char;
a3 : Integer
(c) VAR a :Char ; b Integer ; c : real;
(d) VAR a1;a2;a3 : Real ,
c
: char ;
Zadanie
Napiszmy program , który wydrukuje tekst : S = 1+2 + 3+4+5 , a w
nast pnym wierszu warto8S zmiennej S .
Program Komentarz_1;
var S : Integer;
ST : String;
begin
St := ' S = 1+2+3+4+5 ' ;
S := 1+2+3+4+5 ;
writeln(st);
writeln(s);
end.
J zyki programowania -Pascal Strona 18
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
4 Wyra enia
4.1
4.1
4.1
4.1 Wyra#enia arytmetyczne
Wyra#enia arytmetyczne
Wyra#enia arytmetyczne
Wyra#enia arytmetyczne
Wyra4enia arytmetyczne sk adajC si z elementów typów ca kowitych lub
rzeczywistych.
Proste wyra4enia arytmetyczne okre8lajC operacj arytmetycznC
np. 25 + 130, gdzie „ 25 ” i „130” to argumenty wyra4enia, a znak „+”
operatorem wyra4enia. Po wykonaniu operacji okre8lonej przez operator
otrzymujemy wynik wyra4enia; W naszym przyk adzie „155 ”.
Warto8S tego wyniku mo4emy wydrukowaS:
np.
writeln(25+130) ;
Wynik ten mo4emy zapisaS do pewnej(odpowiedniej) zmiennej:
np.
var I :Integer;
....
I := 25+130 ;
Ta w asno8S prowadzi nas do nast pnego schematu instrukcji przypisania:
zmienna := wyraLenie ;
!!!Warto8S wyra4enia musi byS typu konwertowanego do danej zmiennej!
Niepoprawna b dzie wi c instrukcja
Var s : string;
I
: Byte;
...
s := 10+11;
I := 3.5;
...
I := 257;
Byte 0..255
257 = 256+1
J zyki programowania -Pascal Strona 19
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
5 Operatory
5.1.1 Operatory
arytmetyczne
Operatory sC to symbole wiC4Cce argumenty wyra4enia. Je8li wyra4enie
zawiera ró4ne operatory to wyliczanie warto8ci przebiega zgodnie z
kolejno8ciC priorytetów.
5.1.1.1 Operatory
jednoargumentowe
+
(znak dodatni argumentu)
-
(znak ujemny argumentu)
5.1.1.2 Operatory
dwuargumentowe
Op Znaczenie
Typ
argumentów
Typ wyniku
+
Dodawanie
-
Odejmowanie
*
Mno4enie
Integer je8li ka4dy
argument jest typu
Integer , wpp Real
/
Dzielenie
Integer
lub
Real
Real
MOD Reszta z dzielenia
DIV Cz 8S ca kowita z
dzielenia
Integer
Integer
5.1.2 Priorytet
operatorów
Operatory + - majC niski priorytet , pozosta e wysoki .
Wyra4enie wykonywane jest od prawej do lewej strony najpierw
wykonywane sC operacje o wysokim priorytecie , a nast pnie o niskim .
5.1.3 Przyk ady
ObliczyS warto8S i okre8liS typ wyra4enia :
38 + 39 div 6 * 6 - 66 mod 8 =
38 + 6 * 6 - 66 mod 8 =
38 + 36 - 66 mod 8 =
38 + 36 - 2 =
74 - 2 =
72
Wszystkie argumenty by y typu Integer, wi c wynik te4 b dzie typu
Integer
J zyki programowania -Pascal Strona 20
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
W sytuacji gdy nie wystarczy poprzestanie na kolejno8ci operacji
wynikajCce z priorytetów dzia a. mo4na kolejno8S wymusiS stosujCc
nawiasy.
3.5 *(16 div 5 ) + 4.5 = 15.0
( Real )
Argumentami wyra4enia mogC byS tak4e zmienne np
var a,b :integer ;
a* 19+ b / 3 ( Real)
5.2
5.2
5.2
5.2 Wyra#enia logiczne
Wyra#enia logiczne
Wyra#enia logiczne
Wyra#enia logiczne
Wyra4eniem logicznym nazywamy wyra4enie dajCce w wyniku warto8S
typu BOOLEAN , czyli jednC z dwóch sta ych : True , False
W wyra4eniach logicznych mogC wyst powaS operatory relacji i
operatory logiczne
5.3
5.3
5.3
5.3 Operatory relacji
Operatory relacji
Operatory relacji
Operatory relacji
Operat
or
Znaczenie
=
Równo8S
<
Mniejszo8S
>
Wi kszo8S
<> Ró4no8S
<= mniejszo8S lub równo8S
>= wi kszo8S lub równo8S
in przynale4no8S do zbioru
NP
Wyra4enie
Warto8S
65.6 > 65
True
65.6 < 65
False
10 <> 11
True
6 in [0..9]
True
Uwaga:
Argumenty operacji relacji muszC byS tego samego typu bCdI typów
konwertowanych .
J zyki programowania -Pascal Strona 21
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
5.4
5.4
5.4
5.4 Operatory logiczne
Operatory logiczne
Operatory logiczne
Operatory logiczne
Argumenty muszC byS typu BOOLEAN
Operator Znaczenie Ilo8S argumentów
NOT negacja
1
AND koniunkcja
2
OR alternatywa
2
XOR róznica
symetyczna
2
Wyniki operacji logicznych
A1
A2
not
x
not
y
and
y x
or
y x
xor
y
True True False False True True False
True False False True False True True
False True True False False True True
False False True True False False False
5.4.1 Priorytet
operatorów
Priorytet Operatory
0 (najwy4szy )
wyra4enia w nawiasach
1
NOT
2
* / DIV MOD AND
3
+ - OR XOR
4
< <= >= = <>
J zyki programowania -Pascal Strona 22
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6 Instrukcje
Instrukcja pusta.
Instrukcja przypisania .
zmienna := wyra enie ;
Instrukcja procedury .
Nazwa; lub Nazwa(parametry);
6.1
6.1
6.1
6.1 Instrukcje wej)cia /wyj)cia
Instrukcje wej)cia /wyj)cia
Instrukcje wej)cia /wyj)cia
Instrukcje wej)cia /wyj)cia
(Input/ Output )
(Input/ Output )
(Input/ Output )
(Input/ Output )
6.1.1 Wyj*cie - procedury Write , Writeln
Instrukcja procedury write (writeln ) ma ogólnC postaS :
write (f , p
1
, p
2
,..,p
n
);
writeln (f , p
1
, p
2
,..,p
n
);
gdzie f -oznacza plik dyskowy ( parametr ten mo4e byS pomini ty wtedy
dane wypisywane sC na konsol , czyli ekran monitora)
natomiast ka4dy z p
i
mo4e wyst powaS w postaci
p
p:m
p:m:n
p
jest typu prostego lub string ;
m
okre8la szeroko8S pola w jakim dane b dC wypisywane ;
n
okre8la ilo8S miejsc po przecinku (tylko typy rzeczywiste)
n, m - wyra4enia ca kowite
Program Wypisz ;
var l : Byte;
i
: Integer;
r
: Real;
begin
i:=2;
l:=7;
r:= l / i ;
write (1:4 );
write (l : 4 );
write(r:5:2);
end.
Jaki b dzie wynik wykonania programu ?
J zyki programowania -Pascal Strona 23
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Co si stanie gdy zmienimy instrukcj na :
write(r:1:2);
write(r:4:1);
Procedury write i writeln mogC byS wywo ywane ze zmiennC ilo8ciC
parametrów . Ponadto parametry mogC mieS ró4ne typy .
6.1.2 Wej*cie - procedury Read , ReadLn
Instrukcja procedury read (readln ) ma ogólnC postaS :
read (f , p
1
, p
2
,..,p
n
);
readln (f , p
1
, p
2
,..,p
n
);
gdzie f majC takie same znaczenie jak w przypadku procedury Write ,
natomiast ka4de p
i
jest typu ca kowitego , rzeczywistego , char lub string ;
Przyk ad 1:
Program Czytaj_1;
var i : Integer;
begin
Read (i);
writeln;
writeln(i);
end.
Efektem wykonania powy4szego programu b dzie
1. wczytanie z konsoli ( klawiatura ) liczby ca kowitej
2. nast pnie liczba ta zostanie ponownie wy8wietlona
- wypisana b dzie warto8S zmiennej „ i ”
Przyk ad 2:
Program Czytaj_2;
var s1,s2 :string;
begin
Readln(s1);
writeln;
writeln(s1);
Readln(s2);
writeln;
writeln(s1,s2);
end.
Program Czytaj_2_b;
var s1,s2 :string;
begin
Read(s1);
writeln;
writeln(s1);
Read(s2);
writeln;
writeln(s1,s2);
end.
J zyki programowania -Pascal Strona 24
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Jako Swiczenie na laboratorium pozostawiam sprawdzenie czy istniejC
ró4nice w wykonaniu tych dwóch wersji programów . Je8li tak , to co
mo4e t umaczyS takie ró4nice .
Procedura Readln mo4e rówine4 zawieraS wi kszC ilo8S parametrów -
mo4e te4 ich wogóle nie byS. Taki przypadek b dzie bardzo u4yteczny w
celu zatrzymania wykonywania programu .
Program Stoped;
begin
...
readln;
end.
6.2
6.2
6.2
6.2 Instrukcje strukturalne
Instrukcje strukturalne
Instrukcje strukturalne
Instrukcje strukturalne
Poznane jak dotCd instrukcje by y instrukcjami prostymi - nie zawiera y
w swej sk adni innych instrukcji . Natomiast instrukcje strukturalne sC
konstrukcjami j zykowymi zbudowanymi z ciCgów instrukcji na
podstawie okre8lonych schematów strukturyzacji .
6.2.1
Instrukcje z o/one
Instrukcja z o4ona ma nast pujCcC budow :
BEGIN
I1; I2 ; ...In
END
gdzie I1; I2 ; ...In sC instrukcjami a s owa kluczowe BEGIN i
END reprezentujC tzw. nawiasy instrukcyjne .
Instrukcja z o4ona zast puj wi c ciCg instrukcji , a w a8ciwie to zamienia
ciCg instrukcji w jednC instrukcj .Takie podej8cie jest bardzo u4yteczne ,
gdy musimy u4yS wielu instrukcji natomiast sk adnia dopuszcza tylko
jednC .
Separatorem instrukcji jest 8rednik „ ; ” . wyst puje on pomi dzy
ka4dymi dwoma instrukcjami . Mo4emy go równie4 postawiS po ostatniej
instrukcji , wtedy oddzieli on tC instrukcj od nast pnej - tym przypadku
b dzie to instrukcja pusta .
J zyki programowania -Pascal Strona 25
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6.2.2 Instrukcja
warunkowa
Instrukcja wyboru warunkowego :
IF warunek THEN instrukcja_1
ELSE instrukcja_2
Test
Instrukcja 1
Instrukcja 2
Instrukcja 3
Tak
Nie
Instrukcja ta jest równowa4na schematowi . W schemacie mo4e byS
opuszczona instrukcja 2 , a w sk adni mo4ebyS opuszczona fraza ELSE .
IF warunek THEN instrukcja_1
Warunek musi byS wyra4eniem logicznym(Boolean), czyli dajCcym w
wyniku warto8S boolowskC: True lub FALSE.
Natomiast Instrukcja1 i Instrukcja2 muszC byS pojedynczymi
instrukcjami.
Przyk ady :
(a) IF X<>0 THEN y := 1/x ELSE write('Dzilenie
przez 0 ');
(b) IF (X>0) AND(X=1) THEN ELSE y:= 1/x;
(c) IF B < 0 THEN y:= B - 3 ELSE ;
ELSE w przyk adzie (c) mo4e byS pomini te , w przyk adzie (b) mo4na go
pominCS zmieniajCc warunek na przeciwny czyli
(b`)
IF NOT( (X>0) AND(X=1) ) THEN
y:= 1/x;
J zyki programowania -Pascal Strona 26
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
(d) IF delta > 0 then
begin
x1:= (-b - Sqrt(delta))/(2*a);
x2:= (-b - Sqrt(delta))/(2*a);
end
ELSE
begin
x1:= -b /(2*a);
x2:=x1;
end;
Poniewa4 w sk adni instrukcji warunkowej wyst pujC pojedyncze
instrukcje , a my musieli8my u4yS ich ciCgi zastosowali8my instrukcje
z o4one , które zamieni o nam ciCgi instrukcji w pojedyncze instrukcje .
Instrukcja wyst pujCca po THEN czy te4 po ELSE mo4e byS równie4
instrukcjC warunkowC IF
Np
IF test1 THEN
IF test2 THEN
IF test3 THEN
Instrukcja1
ELSE
ELSE
ELSE
co uwidacznia nast pujCcy schemat blokowy
Test 2
Test 3
Instrukcja 1
Test 1
True
True
True
False
False
False
J zyki programowania -Pascal Strona 27
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
(e) IF delta > 0 then
begin
x1:= (-b - Sqrt(delta))/(2*a);
x2:= (-b - Sqrt(delta))/(2*a);
end
ELSE IF delta = 0
begin
x1:= -b /(2*a);
x2:=x1;
end
ELSE
Write('Nie ma pierwiastków rzeczywistych');
Przyk ad:
program oceny;
var ocena:real;
wynik:integer;
Begin
wynik:=90;
IF wynik >=30 then
IF wynik >=35 then
IF wynik >=40 then
IF wynik >=50 then
IF wynik >=60 then
IF wynik >=70 then
IF wynik >=80 then
IF wynik >=90 then
Ocena:=5.0
ELSE Ocena:=4.5
ELSE Ocena:=4.0
ELSE Ocena:=3.5
ELSE Ocena:=3.0
ELSE Ocena:=2.5
ELSE Ocena:=2.0
ELSE Ocena:=1.5
ELSE Ocena:=1.0;
writeln(ocena:4:1);
End.
Program ten
przyporzCdkuje
wynikowi
z zakresu 1 - 100
punktów
odpowiedniC
ocen . Punkty
okre8lajC procent
odpowiedzi
poprawnych.
Uk ad
konstrukcji
IF...THEN
...ELSE
pokazuje nam ,
4e program ten
sk ada si z
wielu
zagnie4d4onych
instrukcji warun-
kowych.
J zyki programowania -Pascal Strona 28
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
program ifelse;
var test,test2:boolean;
l1,l2:integer;
Begin
test:=25*26<27*24;
IF test then
IF l2<>0 then
writeln(l1/l2)
ELSE writeln('Test
False');
End.
Poddajmy dog bnej analizie
przytoczony przyk ad programu.
Wyra4enie widzimy tu dwie
instrukcje warunkowe . Jednak
odnajdujemy tylko jedno s owo
ELSE , co oznacza , ze jedna
instrukcja jest postaci
IF...THEN...ELSE
natomiast druga
IF...THEN...
Nale4y postawiS sobie pytanie , do
którego IF odnosi si to ELSE ?
My8l , 4e bardzo pomocne by oby tu stworzenie schematu blokowego
Test
l2<>0
True
True
False
L1/L2
Test False
False
Na jego podstawie widzimy wyraInie , sposób wykonywania naszej
instrukcji warunkowej .
6.2.3
Instrukcja wyboru CASE
Sk adnia instrukcji CASE jest nast pujCca
CASE selektor OF
pierwsza lista sta ych wyboru : I1;
druga lista sta ych wyboru : I2;
n-ta lista sta ych wyboru : In
ELSE Ie;
END ;
J zyki programowania -Pascal Strona 29
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
gdzie I1..In,Ie sC instrukcjami prostymi lub z o4onymi , selektor jest
wyra4eniem typu porzCdkowego ( Integer,Char,Boolean ale NIE
Real ).
Listy sta ych sC albo wymienionymi warto8ciami
np 1,2,57
albo przedzia ami np
1..9
albo po Cczeniem np
0..9,11,12,17..35
Przyk ad 1:
Case wynik DIV 10 of
10,9 :
Ocena:=5.0
8
:
Ocena:=4.5
7
:
Ocena:=4.0
6
:
Ocena:=3.5
5
:
Ocena:=3.0
4
:
Ocena:=2.5
3
:
Ocena:=2.0
0,1,2
:
Ocena:=1.0
End;
Przyk ad 2
program Wybor;
var droga : char;
czas : real;
begin
Read(Droga);
Case droga of
''A','a' : czas:=3.0;
'B','b' :
czas
:=4.0;
''C','c' : czas
:=4.5;
ELSE czas :=0;
end;
end.
Instrukcja CASE w wielu przypadkach jest bardziej czytelna ni4
po Cczenie wielu zagnie4dzonych instrukcji IF .Dobrym przyk adem
mo4e tu byS wyliczanie ocen .
Zarówno w ka4dej z instrukcji IF jak i w instrukcji CASE mogC byS
opuszczone fragmentu zawierajCce instrukcje wykonywane w przypadku
niespe nienia warunku (w CASE 4adnego z warunków).
W instrukcji CASE ELSE mo4e nie wyst powaS w niektórych
implementacjach Pascala , standard Pascala jej nie zawiera - jest to jednak
poprawna konstrukcja Turbo Pascala
Program realCase;
var x:real; a:integer;s:string;
begin
J zyki programowania -Pascal Strona 30
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
read(a);
x:=sqrt(a)/a;
CASE x OF
1: s:='Liczba dodatnia';
-1: s:='Liczba ujemna';
0: s:='Liczba 0'
end;
writeln(s);
end.
Czy ten program jest poprawnie zbudowany . Widzimy tu b dne u4ycie
instrukcji CASE . Nie jest dozwolone , aby selektor by wyra4eniem
(zmienna czy te4 sta C ) rzeczywistym .
Nale4y w instrukcji CASE wyra4enie x zastCpiS Trunc(x). Wynikiem tej
funkcji jest cz 8S ca kowita z liczby x .
Program nie b dzie dzia a poprawnie , gdy podamy liczb 0.
6.3
6.3
6.3
6.3 Instrukcje iteracyjne
Instrukcje iteracyjne
Instrukcje iteracyjne
Instrukcje iteracyjne
Iteracje ( p tle) pozwalajC na opisani w prosty sposób czynno8ci które sC
wykonywane wielokrotnie . W j zyku Pascal istniejC dwa rodzaje p tli
Czy
spe nione sC
warunki
wyj8cia ?
Nie
Tre8S p tli
Czy
spe nione sC
warunki
wej8cia ?
Nie
Tre8S p tli
Tak
Tak
J zyki programowania -Pascal Strona 31
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6.3.1 Instrukcja
FOR
Sk adnia instrukcji :
FOR zm:=wp TO wk DO I ;
gdzie
zm - Zmienna sterujCca p tlC
wp - warto8S poczCtkowa
wk - warto8S ko.cowa
I
- pojedyncza instrukcja
Instrukcja OR jest realizacjC p tli z warunkiem wej8cia . Jest ona pewnym
wariantem p tli WHILE.
Sk adnia instrukcji :
FOR zm:=wp DOWNTO wk DO
I ;
gdzie
zm - Zmienna sterujCca p tlC
wp - warto8S poczCtkowa
wk - warto8S ko.cowa
I
- pojedyncza instrukcja
P tla FOR to przyk ad iteracji ograniczonej – z góry wiadomo ile razy
wykona si dana p tla.
UWAGA!
W tre8ci p tli nie wolno zmieniaS warto8ci zmiennej sterujCcej p tlC.
Przyk ad:
var zn:char;k:Integer;
begin
zn:='*';
for k:=1 to 8 do
write(zn:k);
end.
False
I
True
Zm <= wk
Zm:=wp
Zm:=succ(zm)
False
I
True
Zm >= wk
Zm:=wp
Zm:=pred(zm)
J zyki programowania -Pascal Strona 32
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
PROGRAM Reprezentacja;
Uses Crt;
VAR znak : Char;
BEGIN
Writeln('Program drukuje kody ASCII znakow');
FOR znak:='0' TO '9' DO
Writeln('cyfra ',znak,' ma kod ',Ord(znak));
FOR znak:='A' TO 'Z' DO
Writeln('litera ',znak,' ma kod ',Ord(znak));
REPEAT UNTIL Keypressed;
END.
program srednia;
uses crt;
var
i,ilosc,suma,a:integer;
wynik:real;
begin
clrscr;
writeln('Program oblicza srednia arytmetyczna');
write('Podaj ilosc liczb z ktorych oblicze
srednia: ');
suma:=0;{przypisanie wartosci poczatkowej sumie}
readln(ilosc);
for i:=1 to ilosc do
begin
write('Podaj liczbe ',i,' a',i,'= ');
readln(a);
suma:=suma+a;
end;
wynik:=suma/ilosc;
writeln('Srednia z podanych liczb wynosi ' ,
wynik:2:2);
writeln('Nacisnij klawisz ENTER');
readln;
end.
J zyki programowania -Pascal Strona 33
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
PROGRAM Suma_liczb_parzystych;
USES Crt;
CONST n=100 ;
VAR
suma,licznik : Integer;
BEGIN
ClrScr;
Writeln('Program sumuje liczby parzyste od 1
do ',n);
suma:=0;
FOR licznik:=1 to n DO
IF NOT Odd(licznik) THEN suma:=suma+licznik;
Writeln;
Writeln('Suma liczb przystych od 1 do ', n,'
wynosi ', suma);
ReadLn
END.
J zyki programowania -Pascal Strona 34
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6.3.2 Instrukcja
WHILE
Sk adnia
instrukcji :
WHILE wl DO I ;
gdzie
wl - wyra4enie logiczne
I
- pojedyncza instrukcja
Instrukcja WHILE jest realizacjC p tli z warunkiem wej8cia .Instrukcja
oznacza: Dopóki prawdziwe jest wyra enie WL wykonuj instrukcj I .
Przyk ady :
Program Gwazdka;
var zn:char;k:Integer;
begin
zn:='*';
k:=1;
while k<=8 do
begin
write(zn:k);
k:=k+1;
end;
Program Liczby;
uses crt;
begin
i:byte;
i:=0;
while i<10
do
begin
i:=i+1;
writeln(i);
end;
end.
xxx
False
I
True
WL
J zyki programowania -Pascal Strona 35
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
PROGRAM Petla2;
USES Crt;
VAR i, x, y, Nwd : Integer;
BEGIN
ClrScr;
Write('Podaj 1-sza liczbe : ');
ReadLn(x);
Write('Podaj 2-ga liczbe : ');
ReadLn(y);
i:=1;
WHILE (x>i) Or (y>i) DO
Begin
If (x Mod i=0) And (y Mod i=0) Then Nwd:=i;
i:=i+1;
End;
Write('Najwiekszy wspolny dzielnik = ', Nwd);
ReadKey;
END.
6.3.3 Instrukcja
Repeat
False
True
WL
In;
I1;
...
Sk adnia instrukcji :
REPEAT I1; ... In UNTIL wl ;
gdzie
wl -
wyra4enie logiczne
I1, ..,In
- instrukcje
Instrukcja REPEAT jest realizacjC p tli z warunkiem wyj8cia. Instrukcja
oznacza: Wykonuj instrukcj I1,..,!n a prawdziwe b dzie wyra enie WL .
Dowolna p tla zrealizowana za pomocC instrukcji WHILE mo4e byS
zbudowana za pomocC instrukcji REPEAT. Twierdzenie odwrotne nie jest
prawdziwe .
J zyki programowania -Pascal Strona 36
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Przyk ad :
Read(zn);
WHILE zn <>'*' do
begin
write(zn);
read(zn);
end;
writeln;
REPEAT zn <>'*'
read(zn);
if zn <> '*' then
write(zn);
UNTIL zn =*'
writeln
Uses CRT;
Var
licz:byte;
Begin
ClrScr;
REPEAT
Write('Wpisz jak%O
liczb[ (0-wyjscie) :
');
ReadLn(licz);
WriteLn('Potega
liczby ',licz,' to
',licz*licz);
WriteLn;
UNTIL licz=0;
End.
J zyki programowania -Pascal Strona 37
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Przyk ad:
PROGRAM Petla3;
USES Crt;
VAR n, x : Integer;
y
: Real;
Zn : Char;
BEGIN
ClrScr;
Write('Podaj X : ');
ReadLn(x);
y:=1;
n:=1;
REPEAT
Write('N = ', n:3);
y:=x/n;
WriteLn(' X/N = ', y:7:2);
n:=n+1;
UNTIL y<0.2;
Repeat Until KeyPressed
END.
J zyki programowania -Pascal Strona 38
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6.4
6.4
6.4
6.4 Inne instrukcje
Inne instrukcje
Inne instrukcje
Inne instrukcje
6.4.1 Instrukcja
kodu
Posiada nast pujCcC sk adni :
INLINE (lista_elementów);
Wszystkie elementy lis ta_elementów oddzielone sC od siebie
uko8nikami i mogC byS:
sta ymi okre8lajCcymi warto8ci liczbowe
identyfikatorami zmiennych
identyfikatorami zmiennych ze sta C poprzedzonC + lub -
operatorami rozmiaru kody <i>
Przyk adowe u4ycie tej procedury:
INLINE($EA/$F0/$FF/$00/$F0); {spowoduje
zresetowanie si[ komputera}
6.4.2 Instrukcja
asemblerowa
Sk adnia jej jest nast pujCca:
ASM
Instrukcja;
...
Instrukcja;
END;
Przyk ad
asm
mov al,0edh
out 60h,al
in al,64h
mov al,x
end;
6.4.3 Instrukcja
skoku
Label etykieta
Begin
...
Goto etykieta
...
etykieta:
Instrukcja ta mo4e byS przyczynC zaciemniania kodu programu i nale4y jej
unikaS.
J zyki programowania -Pascal Strona 39
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Praogam dane;
Label Wyjscie:
...
Bebin
For I:=1 to 1000 do
For j:=2 to 2000 do
For k:=3 to 3000 do
Begin
...
If t[I,j,k]=0 then goto wyjscie
else
...
End;
Write('Brak zera'); exit;
Wyjscie:
Write('Zero na pozycji’ i,' ',j,' ',k)
End;
6.4.4 Instrukcje Break i Continue
Break
–
przerwanie tre8ci bloku p tli
Continue –
Opuszczenie reszty tre8ci bloku p tli
Program BC;
var i,x,y:Integer;
begin
Write ('podaj dwie liczby caIkowite');
for i:=1 to 32000 do
begin
Read(x,y);
if (x=0) and (y=0) then break;
if (x=0) or (y=0) then continue;
writeln(x/y:5:2, ' ' , y/x :5:2);
end
end.
J zyki programowania -Pascal Strona 40
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7 Typy danych c.d.
7.1
7.1
7.1
7.1 Typy wprowadzone wcze)ciej
Typy wprowadzone wcze)ciej
Typy wprowadzone wcze)ciej
Typy wprowadzone wcze)ciej
•
Typy ca kowite
Byte, Short, Integer, Word, Longint
•
Typy rzeczywiste
Real, single, double, extended
•
Typ Logiczny Boolean
•
Typ Znakowy Char
•
Typ Napisowy String
Typ String jest równowa4ny String[255] co oznacza
tablic 255 znaków.
7.2
7.2
7.2
7.2 Typ wyliczeniowy
Typ wyliczeniowy
Typ wyliczeniowy
Typ wyliczeniowy
Typ definiowany przez u4ytkownika.
Type Dni=(Poniedzialek, Wtorek, Sroda, Czwartek,
Piatek, Sobota, Niedziela);
var d:dni;
begin
for d:= Poniedzialek to piatek do
writeln ('DziO do pracy ');
end.
7.3
7.3
7.3
7.3 Typ okrojony
Typ okrojony
Typ okrojony
Typ okrojony
Typ okrojony mo4e byS utworzony z dowolnego typu prostego (ca kowite,
logiczny, znakowy, wyliczeniowy) poprzez zaw 4enie jego zakresu do
jawnie podanego.
Type LiteraMaIa
=
‘a’ ..’z’;
Cyfra
=
0..9;
Dzienroboczy =
Poniedzailek..Pi%tek;
Wielko8S zaj tej pami ci przez typ okrojony jest taka sama jak przez typ
bazowy.
J zyki programowania -Pascal Strona 41
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.4
7.4
7.4
7.4 Typ zbiorowy
Typ zbiorowy
Typ zbiorowy
Typ zbiorowy
Type Nazwa = Set of Typ_ Elmenetowy
Typ zbiorowy umo4liwia na operowanie podzbiorach typu
Typ_Elementowy. Typ_Elementowy musi byS typem porzCdkowym
o co najwy4ej 256 ró4nych warto8ciach. MoEe to byS typ okrojony bCdI
wyliczeniowy.
Nie moEe to byS typ Integer – bo zawiera za du4o mo4liwych
warto8ci.
Type
Dni=(Poniedzialek,Wtorek,Sroda,Czwartek,Piatek,
Sobota,Niedziela);
Robocze =set of Dni;
var d : dni;
r : Robocze;
begin
r:=[];
r :=r+ [poniedzialek..Piatek];
randomize;
d:=dni(random(7)+1);
if d in r then
writeln (' DzieK roboczy',byte(d))
else
writeln('DzieK wolny', byte(d));
end.
J zyki programowania -Pascal Strona 42
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5
7.5
7.5
7.5 Typ tablicowy
Typ tablicowy
Typ tablicowy
Typ tablicowy
Jest to typ z o4ony.
Array[typ_indeksowy]of typ_danych;
Przyk ad:
Type Liczby= Array[1..10] of byte;
Nazwiska= Array[100..1000] of String;
Dane=Array[Boolean]of
Real;
Zadania=Array[Poniedzialek..Piatek]of
String;
Typ danych mo4e byS dowolnym wcze8niej okre8lonym typem.
Program T1;
Var
a:array[1..5] of
Integer;
Begin
ReadLn(a[1]);
ReadLn(a[2]);
ReadLn(a[3]);
ReadLn(a[4]);
ReadLn(a[5]);
WriteLn(a[5]);
WriteLn(a[4]);
WriteLn(a[3]);
WriteLn(a[2]);
WriteLn(a[1]);
End.
Program T1a;
Var
a:array[1..5] of
Integer;
i:byte;
Begin
for i :=1 to 5 do
ReadLn(a[i]);
for i :=5 downto 1 do
WriteLn(a[i]);
End.
Zmienna typu tablicowego w pami ci zajmie
Wielko8S jednego elementy * Ilo8S Elementów
W powy4szym przypadku SizeOf(Integer)* 5 czyli 2*5 = 10.
J zyki programowania -Pascal Strona 43
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5.1 String
Typ String jest równowa4ny String[255] co oznacza
tablic 255 znaków. Jest to maksymalna d ugo8S pojedynczego
a.cuch. Mo4na ograniczyS go poprzez konstrukcj :
String[B]
gdzie B jest typu Byte 0..255
var Imie
: String[15];
Nazwisko :
String[25];
Typ String jest specyficznym typem tablicowym.
Dopuszczalne sC oracje na zmiennej
Operatory:
+
=
<> < > <= >=
var S: String;
Read(s);
Write(s);
S:=’ Ala ma kota’
S:=’CoO innego’ + ’ moLe jeszcze coO’;
If s => ’tekst’then Delete(s,2,10);
Funkcje i procedury operujCce na elementach typu String:
f.Length(S: String): Integer;
f.Copy(S: String; Index: Integer; Count:
Integer): String;
f.Concat(s1 [, s2,..., sn]: String): String;
f.Pos(Substr: String; S: String): Byte;
p.Insert(Source: String; var S: String;
Index: Integer);
p.Delete(var S: String; Index: Integer;
Count:Integer);
Pos(Substr: String; S: String): Byte;
var
s: string;
begin
s := 'Ala ma kota';
Delete(s,5,3); Writeln(s); { 'Ala kota' }
Insert('znalazIa',s,5);
Writeln(s); { 'Ala ZnalazIa kota' }
end.
J zyki programowania -Pascal Strona 44
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5.2 Tablice
wielowymiarowe
W konstrukcji
Array[typ_indeksowy]of typ_danych;
nic nie powiedziano o typ_danych. Mo4e to byS dowolny okre8lony
wcze8niej, lub w tym momencie, typ danych. W szczególno8ci mo4e to byS
typ tablicowy.
7.5.2.1 Tablice
dwu-wymiarowe
Array[zakres1] of array [zakres2] of typ_danych
Array[zakres1,zakres2] of typ_danych
T2a=Array [1..10,1..20] of Real;
T2b=Array [ char,1..3] of Char;
T2c=Array [32..255,Boolean] of Byte;
Ilo8S elementów tablicy równa si iloczynowi mnogo8ci typów
indeksujCcych. Np. T2a posiada 10*20 czyli 200 elementów * 4B(typ
Real), czyli Ccznie 800B.
Ca a tablica musi zmie8ciS si w jednym segmencie danych 64KB.
Przyk ad:
Var T: array['a'..'z',1..3] of byte;
C:char;I:byte;
Begin
Randomize;
For c:= 'a' to 'z' do
For I:=1 to 3 do
T[c,I]:=Random(2);
For I:=1 to 3 do
begin
For c:= 'a' to 'p' do
If T[c,I]>0 then Write('*')
Else write(' ');
Writeln;
End;
END.
Co oznaczajC symbole T, T[c] , T[c,i].
J zyki programowania -Pascal Strona 45
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Przyk ad:
Program Przekatne;
const N=6; M=7;
Type Tablica2= Array[1..N,1..M] of char;
var
T : Tablica2;
i,j,k,p:Integer;
BEGIN
Randomize; k:=1;
For i:=1 to N do
for j:=1 to M do
T[i,j]:= chr(random(255-32)+32);
for i:=1 to N do begin
for j:=1 to M do
write(ord(t[i,j]):4);
writeln
end;
if N<M then k:=N else k:=M;
for i:=1 to K do
writeln(ord(t[i,i]):i*4);
for i:=1 to K do
writeln(ord(t[i,M-i+1]):(M-i+1)*4);
p:=K div 2;
for i:=1 to p do
writeln(ord(T[i,i]):i*4,
ord(T[i,M-i+1]):(M-2*i+1)*4);
if odd(m) then
begin
inc(p); writeln(ord(T[p,p]):p*4)
end;
for i:=p+1 to K do
writeln(ord(t[i,M-i+1]):(M-i+1)*4,
ord(T[i,i]):(2*i-M-1)*4);
END.
J zyki programowania -Pascal Strona 46
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5.2.2 Algorytmy dotyczCce tablic
PROGRAM SortowanieBabel ;
CONST N = 10 ;
VAR A : ARRAY[1..N] OF Integer ;
I,ZAM: Integer ;
B : Integer ;
BEGIN
Randomize;
FOR I := 1 TO N DO
A[I]:=Random(199)-100;
Writeln('Wylosowany wektor:') ;
Writeln ;
FOR I := 1 TO N DO
Write(A[I]:5) ;
REPEAT
ZAM := 0 ;
FOR I := 1 TO N - 1
DO BEGIN
IF A[I]> A[I+1]
THEN BEGIN
B
:= A[I];
A[I] := A[I+1];
A[I+1] := B;
ZAM := ZAM + 1
END
END
UNTIL ZAM = 0 ;
Writeln('Wektor po sortowaniu:') ;
Writeln ;
FOR I := 1 TO N DO
Write(A[I]:5) ;
END.
J zyki programowania -Pascal Strona 47
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5.2.3 Tablice
n-wymiarowe
Type
Pozycja =[-10..10,-10..10,-10..10] of real;
Tab3= Array [1..3,1..10,1,5] of Boolean;
Tab4= Array[Boolean,1..3,6..10,2..4]of Real;
Tab5= Array[1..2,1.10,1..5,1..4,0..9] of
Integer;
Type
Punkt = Array[1..3] of Real;
Odcinek = Array[1..2] of Punkt;
Figura = Array[1..4] of Punkt;
Bryla = Array[1..6] of Figura;
Ruch = Array[1..100] of Bryla;
Nie istnieje ograniczenie, poza zaj to8ciC pami ci, na ilo8S wymiarów
tablicy. Jednak4e niezmiernie rzadko stosuje si tablice o wi kszej
ilo8ci ni4 3. Najcz 8ciej pojawiajC si tablice jedno i dwu wymiarowe.
Wi ksza ilo8S wymiarów utrudnia okre8lenie adresu elementu, a tak4e
zale4no8ci pomi dzy sCsiadami.
Czasami lepszym rozwiCzaniem jest skonstruowanie prostszego typu
danych.
Za ó4my za var B:BryIa;
Co oznaczajC zmienne i czy poprawne sC odwo ani:
B, B[1], B[1,2], B[1,2,3], B[1,2,3,4],
B[1,2,3,4,5]
7.5.2.4 Zgodno8S typów tablicowych
Type T1=Array[1..N]
of
integer;
T2=Array[1..N] of integer;
Var a1:T1; a2:T2;
a1:=a2; a1:=T1(a2);
J zyki programowania -Pascal Strona 48
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
8 Podprogramy
8.1
8.1
8.1
8.1 Istota programowania proceduralnego
Istota programowania proceduralnego
Istota programowania proceduralnego
Istota programowania proceduralnego
Historycznie ujmujCc pierwsze programy korzysta y z programowania
liniowego. Nie wspominam tu z oczywistych wzgl dów j zyków
maszynowych, czy te4 „j zyków” programowania pierwszych komputerów.
Programowanie proceduralne umo4liwia podzia jednego wielkiego projektu
na kilka mniejszych zada..
8.1.1 Poj9cie procedury
Procedure NazwaProcedury ( var argument : Typ_argumentu ) ;
Deklaracje sta$ych i zmiennych lokalnych;
Begin
Cia$o procedury
End;
8.1.2 Pojecie
funkcji
Function NazwaFunkcji ( var argument : Typ_argumentu )
: Typ_wyniku ;
Deklaracje sta$ych i zmiennych lokalnych;
Begin
...
NazwaFunkcji:=wyra4enie typu Typ_wyniku;
...
End;
,
;
,
;
J zyki programowania -Pascal Strona 49
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
8.1.3
Deklaracje, definicja i wywo anie
podprogramów
8.1.3.1 Procedury
Program podprogramy;
Procedura powieksz(var x:real;y:real);
Begin
X:=x+y;
End;
Var x,y : real;
BEGIN
x:= 2.0; y:= 1.0;
Writeln(x,’ ’,y);
Powieksz(x,y)
Writeln(x,’ ’,y);
END.
8.1.3.2 Funkcji
Program Funkcje;
Function Silnia(N:byte):longint;
Var i:Byte;
S: longint;
Begin
S:=1;
For i:=1 to N do s:= s * i;
Silnia:=s;
End;
Function Potega(x:real;N:byte):Real;
Var i:Byte;
P: longint;
Begin
P:=1;
For i:=1 to N do p:= p * x;
Potega:=p;
End;
Var w,a:real; b:byte;
Begin
J zyki programowania -Pascal Strona 50
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
a:= 2.0; b:= 3;
Writeln(b,’!=’silnia(b));
w:= pot(a,b);
Writeln(a,’^’,b,’=’,w);
End.
8.1.4 Parametry
podprogramów
8.1.4.1
Parametry formalne i aktualne, zmienne lokalne
Parametry podprogramów umo4liwiajC komunikacj procedury ze „8wiatem
zewn tyrznym”, czyli programem g ównym bCdI innym podprogramem,
który go wywo a . Dzi ki parametrom podprogramy dzia ajCc na
sparametryzowanych danych mogC byS wielokrotnie u4ywane do
wykonywania zada. na ró4nych danych. Parametry procedur i funkcji stajC
si ich zmiennymi lokalnymi. Je8li jaka8 zmienna globalna ma nazw
to4samC z nazwC parametru to w podprogramie b dzie widoczna tylko
zmienna lokalna zwiCzana z parametrem.
8.1.4.2
Przekazywanie parametru poprzez wskaInik i warto8S
Program Parametr_var;
Procedure Dordaj( var x:Integer; y : Integer);
Begin
x := x + 2;
y := y + 3;
writeln('x =', x ,'y=',y );
End;
BEGIN
x := 5;
y := 6;
writeln('x =', x ,'y=',y );
dodaj( x, y);
writeln('x =', x ,'y=',y );
END.
8.1.5 Inne
przyk adowe funkcje
•
Zamiana dwóch zmiennych liczbowych
•
Maximum i minimum
•
Podprogramy operujCce na elementach tablicy
J zyki programowania -Pascal Strona 51
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
8.1.6
Zalety programowanie z wykorzystaniem
podprogramów
•
Podzia programu na mniejsze segmenty
•
Wielokrotne wykorzystanie tego samego kodu
•
Realizacja podobnych problemów za pomocC tego samego podprogramu –
wykorzystanie parametrów
8.1.7 Rekurencja
8.1.7.1 Cechy
rekurencji
8.1.7.2 Wywo ywanie samej siebie
8.1.7.3
W pewnych warunkach nast puje koniec wywo ywania
rekurencyjnego
8.1.7.4
Rekurencja a iteracja
Program Rekurencja;
Function Silnia(N:byte):longint;
Begin
If N>0 then silnia:= n*silnia(N-1)
Else silnia:=1;
End;
Function Potega(x:real;N:byte):Real;
Begin
If N>0 then potega:= x*potega(x,N-1)
Else potega:=1;
End;
Procedure Hanoi(zlodlo,pomoc,cel,ilosc:byte);
Begin
If ilosc>0 then
begin
Hanoi(zrodlo,cel,pomoc,ilesc-1);
Przenies(zrodlo,cel);
Hanoi(pomoc,zrodlo,cel,ilesc-1);
End;
End;
Gdzie procedura przenies mo4e mieS w najprostszym przepadku postaS:
J zyki programowania -Pascal Strona 52
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Procedure przenies(zrodlo,cel:byte);
Begin
Write(zrodlo,’->’,cel,’ ’);
End;
Ciekawszym rozwiCzaniem, by oby wykorzystanie tablic do
przechowywania krC4ków (liczb) i wy8wietlania ich zawarto8ci. To
umo4liwi o by zasymulowanie animacji.
Mo4na te4 by zauwa4yS, 4e skoro zmienne zlodlo,pomoc,cel sC
liczbami powiedzmy 1, 2, 3 to atwo zauwa4yS, i4
1 + 2 +3 = 6 .
zlodlo+pomoc+cel = 6 czyli
cel =6-zlodlo-pomoc
a procedur mo zemy zamieniS na:
Procedure Hanoi(zlodlo,pomoc,ilosc:byte);
8.1.7.5
Zalety i wady rekurencji
Zast puje iteracj
Prostota krótkiego kodu
Uatwe przepe nienie stosu
K opoty z rekurencyjnC definicjC problemu
J zyki programowania -Pascal Strona 53
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
9 Rekordy i tablice rekordów
9.1
9.1
9.1
9.1 Istota typu rekordowego
Istota typu rekordowego
Istota typu rekordowego
Istota typu rekordowego
Typ rekordowy jest u4ywany do opisu obiektów o strukturze niejednorodnej,
czyli takich, w których elementy sk adowe zawierajC dane ró4nych typów. W
ten sposób mo4emy po CczyS w jednC ca o8S wiele ró4nych informacji. Jako
przyk ad mo4e pos u4yS zbiór informacji o studencie.
9.2
9.2
9.2
9.2 Rekordy z cz )ci3 s
Rekordy z cz )ci3 s
Rekordy z cz )ci3 s
Rekordy z cz )ci3 sta 3
ta 3
ta 3
ta 3
Deklaracja typu rekordowego b dzie mia o nast pujCcy schemat.
Type Nazwa_typu =
RECORD
Pierwsza_lista_pól:T1;
Druga_lista_pól :T2;
n-ta lista_pól:TN;
END;
Gdzie ka4da lista pól to lista identyfikatorów oddzielonych on siebie
przecinkami, a ka4de Ti to identyfikator dowolnego wcze8niej
zdefiniowanego, przez u4ytkownika bCdI systemowego, typu.
DataT=Record
d,m,r:byte;
end;
AdresT=Record
ulica :string[20];
miasto:string[15];
kod :string[5];
end;
Dane=record
imie:String[15];
nazwisko:string[25];
data_ur:DataT;
rok:0..6;
adres:AdresT;
wydzial,kierunek:byte;
end;
var D:Dane;
J zyki programowania -Pascal Strona 54
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Dost p do pól rekordu mamy za pomocC znaku „.”(kropka) oddzielajCcej
nazw zmiennej od nazwy pola.
D.imie
D.Data_ur.d
9.2.1 Instrukcja
wi</<ca WITH
Instrukcja postaci:
With zmienna_recordowa do
Instrukcja;
powoduje, 4e w obr bie instrukcji Instrukcja mamy dost p do pól
zmiennej zmienna_recordowa bez konieczno8ci pisania desygnatora w
pe nej postaci.
With D do
Begin
Write(’Podaj imi[ ’);
Readln(imie);
Write(’Podaj nazwisko ’);
Readln(nazwisko);
Write(’Podaj dat[ urodzenia (rr mm dd) ’);
With data_ur do
Readln(r,m.,d);
...
End;
9.2.2 Rekord z wariantami
Pola opisane w poprzednim rekordzie sC dost pne we wszystkich zmiennych
tego typu. Mo4liwa jest równie4 struktura, w której w zmiennych
rekordowych tego samego typu istniejC ró4ne pola. Pojawienie si kilku
wariantów zmiennej rekordowej umo4liwia konstrukcja:
Type Nazwa_typu =
RECORD
Definicje pól staIych;
CASE
pole znacznikowe : Tc OF
Pierwsza lista staIych wyboru:(Pierwsza
lista pól);
Druga lista staIych wyboru:(Druga lista
pól);
...
M-ta lista staIych wyboru:(M-ta lista pól);
J zyki programowania -Pascal Strona 55
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
END;
Gdzie pole znacznikowe oznacza pole typu Tc (pole to mo4e byS
opuszczone, ale typ musi byS okre8lony). Pola w wariantach mogC ró4niS si
zarówno typem jak i ilo8ciC. Przy przydzielaniu pami ci kompilator dla
ca ego wariantu przydzieli tyle pami ci ile zajmuje sumarycznie najwi ksza
z list pól wariantowych. W poni4szym przyk adzie b dzie to 26 bajtów
/sizeof(string[25])/.
Wa4ne jest, 4e END ko.czy zarówno wariant jak i ca y opis typu
rekordowego – powoduje to, 4e nie istnieje mo4liwo8S zdefiniowania
wi kszej ni4 1 ilo8ci wariantów.
Type
Tplec=(K,M);
Dane=record
imie:String[15];
nazwisko:string[25];
data_ur:DataT;
rok:0..6;
adres:AdresT;
wydzial,kierunek:byte;
case plec:Tplec of
M:( Nazwajw:string[15];
Nrjw:word; );
K:(NRodowe:string[25])
end;
Dost p do pól wariantowych jak i pola znacznikowego jest taki sam jak w
przy padku innych pól.
J zyki programowania -Pascal Strona 56
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10 Operacje wej.cia – wyj.cia
10.1
10.1
10.1
10.1 Podstawowe operacje na plikach
Podstawowe operacje na plikach
Podstawowe operacje na plikach
Podstawowe operacje na plikach
Wi kszo8S programów w trakcie pracy
wykorzystuje pliki do przechowywania danych. Dotychczas przechowywa e8
dane w pami ci operacyjnej, tzn., 4e po zako.czeniu programu twoje
dane ulega y zniszczeniu, po przeczytaniu tego rozdzia u to si zmieni.
Ze wzgl du na typ danych przechowywanych w plikach mo4emy wyró4niS:
•
pliki tekstowe - zawierajCce tekst ;
•
pliki elementowe (zdefiniowane) - elementami tych plików sC:
tablice, rekordy;
•
pliki amorficzne - o nieokre8lonej strukturze.
PierwszC rzeczC w momencie rozpocz cia pracy na plikach jest stworzenie
zmiennej plikowej,
robimy to tak:
var
nazwa_zmiennej : text; plik tekstowy
nazwa_zmiennej : file of typ: plik zdefiniowany;
nazwa_zmiennej : file plik o nieokreOlonej
strukturze;
Zanim zaczniemy wykonywaS jakiekolwiek operacje na pliku musimy
zadeklarowanej zmiennej przypisaS "fizycznC" nazw pod jakC plik
b dzie widoczny na dysku, robimy to tak:
Assign(zmienna_plikowa,sciezka);
zmienna_plikowa – wykonujCc operacje na pliku do niej b dziemy
si odwo ywaS,
sciezka - 8cie4ka do pliku np.: 'C:\TEMP\PLIK.DAT'
Uwaga:
Procedura Assign nie sprawdza istnienia, a nawet mo4liwo8ci dost pu do
pliku opisanego 8cie4kC.
J zyki programowania -Pascal Strona 57
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Po skojarzeniu nale4y plik otworzyS. Mamy do wyboru kilka procedur
otwierajCcych:
•
Reset(zmienna_plikowa) - otwiera tylko plik ju4 istniejFcy,
brak pliku powoduje wystCpienie b du fatalnego wejscia-wyj8cia. Plik
otwarty do czytania lub czytania i pisania.
•
Rewrite(zmienna_plikowa) - tworzy plik, je8li ju4 istnieje to
otwiera plik skojarzony ze zm_plikowC. Je8li plik ju4 istnieje to dane w
nim zapisane zostanC nadpisane. Plik otwarty do pisania.
•
Append(zmienna_plikowa) - Procedura ta dotyczy tylko plików
tekstowych. Otwiera do pisania istniejCcy plik, (skojarzony ze
zmiennC_plikowC). Dane b dC dopisywane na koniec pliku.
•
Close(zmienna_plikowa) - zamyka plik skojarzony ze zmiennC
plikowC.
•
Function Eof(zm_Plik):Boolean; Zwraca TRUE gdy
osiCgni ty zosta koniec pliku FALSE w przeciwnym przypadku.
Zapisywanie i odczytywanie danych z pliku odbywa si za pomocC
procedur:
Read, Readln, Write, Writeln:
Read(zmienna_plikowa,lista_argumentów);
Write(zmienna_plikowa,lista_argumentów);
Procedury te by y ju4 u4ywane wcze8niej, pierwszy parametr by wtedy
opuszczany. Oznacza o to operacje na specjalnym pliku tekstowym –
konsoli. Pliku tego mo4na u4ywaS jawnie:
var plikwe,plikwy;
...
Assign(plikwe,’’);
Assign(plikwy,’’);
Reset(plikwe);
Rewrite(plikwy);
...
read(plikwe,n);
for i:=1 to 10 do
writeln(plikwy,'Tekst na ekran(',n,')razy');
Sk adnia procedur czytania i pisania z plików powinna wi c byS znana .
J zyki programowania -Pascal Strona 58
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10.2
10.2
10.2
10.2 Pliki tekstowe
Pliki tekstowe
Pliki tekstowe
Pliki tekstowe
Konsola – plik tekstowy standardowo otwarty do czytania i pisania.
Metody otwarcia:
Reset – tylko do czytania
Rewrite – tylko do pisania
Append –do aktualizacji, czyli pisania na ko.cu pliku.
10.2.1 Plik tekstowy a plik file of char
Program pliki_tekstowe;
var
plik_wejsciowy : text;
plik_wyjsciowy : file of char;
znak : char;
begin
Assign(plik_wejsciowy, 'plik.in');
Assign(plik_wyjsciowy, 'plik.out');
{$I-} Reset(plik_wejsciowy); {$I+}
if IOResult <> 0 then exit;
ReWrite(plik_wyjsciowy);
while not EoF(plik_wejsciowy) do begin
Read(plik_wejsciowy, znak);
Write(plik_wyjsciowy, znak);
Write(znak);
end;
Close(plik_wejsciowy);
Close(plik_wyjsciowy);
end.
J zyki programowania -Pascal Strona 59
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10.3
10.3
10.3
10.3 Pliki elementowe
Pliki elementowe
Pliki elementowe
Pliki elementowe
Metody otwarcia:
Reset – do czytania i pisania
Rewrite – tylko do pisania
Append –NIE JEST DOSThPNA, ale w zamian mamy:
Seek, FilePos, FileSize.
PROGRAM Pliki;
USES Crt;
Const ESC_Key =#27;
TYPE Osoba = RECORD
Imie, Nazw : String[15];
Adres : String[50];
Tel : String[10];
END;
PlikOsob = FILE OF Osoba;
Function Tworz(Var Plik : PlikOsob):Boolean;
VAR Nazwa : String;
Begin
Twórz:=False; ClrScr;
Write('Podaj nazwe pliku i sciezke : ');
ReadLn(Nazwa); Assign(Plik, Nazwa);
{$I-} Rewrite(Plik); {$I+}
if IOResult <> 0 then exit;
Twórz:=True
End;
Function Otworz(Var Plik : PlikOsob):Boolean;
VAR Nazwa : String;
Begin
Otwórz:=False; ClrScr;
Write('Podaj nazwe pliku i sciezke : ');
ReadLn(Nazwa); Assign(Plik, Nazwa);
{$I-} Reset(plik); {$I+}
if IOResult <> 0 then exit;
Otwórz:=True
End;
J zyki programowania -Pascal Strona 60
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
PROCEDURE CzytajRec(Var x:Osoba);
Begin
ClrScr;
Write('Podaj imie : ');
ReadLn(x.Imie);
Write('Podaj nazwisko : ');
ReadLn(x.Nazw);
Write('Podaj adres : ');
ReadLn(x.Adres);
Write('Podaj telefon : ');
ReadLn(x.Tel);
End;
PROCEDURE WypiszRec(Var x:Osoba);
Begin
Writeln('IMIE : ', x.Imie);
Writeln('NAZWISKO : ', x.Nazw);
Writeln('ADRES : ', x.Adres);
Writeln('TELEFON : ', x.Tel);
End;
PROCEDURE DopiszDoPliku(Var Plik : PlikOsob;
x:Osoba);
Begin
Seek(Plik, FileSize(Plik));
Write(Plik, x);
End;
PROCEDURE Wypisz(Var Plik : PlikOsob);
Var x:Osoba;
Begin
Reset(Plik);
While Not Eof(Plik) Do
Begin
ClrScr;
Read(Plik, x);
WypiszRec(x)
If ReadKey=ESC_Key then break;
End;
End;
J zyki programowania -Pascal Strona 61
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10.4
10.4
10.4
10.4 Pliki amorficzne
Pliki amorficzne
Pliki amorficzne
Pliki amorficzne
SC to pliki binarne o nieokre8lonej strukturze. Procedury otwarcia
Reset(pilk,wielkosc_jednostki)
Rewrite(pilk,wielkosc_jednostki)
wielkosc_jednostki (Word) – oznacza wielko8S pojedynczego
elementu jaki b dzie czytane z pliku; domy8lnie 128.
procedure BlockRead(var F: File; var Buf; Count:
Word [; var Result:Word]);
procedure BlockWrite(var f: File; var Buf; Count:
Word [; var Result:Word]);
gdzie:
F
zmienna plikowa
Buf zmienna buforujCca dane (Tablica, WskaInik)
Count ilo8S elementów do odczytania(zapisania)
Result ilo8S elementów odczytanych (zapisanych);
wynik czytania(pisania)
Nie poprawne jest równie4 sprawdzanie ko.ca pliku poprzez EOF- trzeba
zamiast sprawdzaS warto8S zmiennej Result
var
FromF, ToF: file;
NumRead, NumWritten: Word;
Buf: array[1..2048] of Char;
begin
Assign(FromF, ParamStr(1));
Reset(FromF, 1);
Assign(ToF, ParamStr(2));
Rewrite(ToF, 1);
Writeln('Copying ', FileSize(FromF),
' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
Close(FromF); Close(ToF);
end.
J zyki programowania -Pascal Strona 62
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10.5
10.5
10.5
10.5 Funkcje i procedur operuj
Funkcje i procedur operuj
Funkcje i procedur operuj
Funkcje i procedur operuj3ce na plikach
3ce na plikach
3ce na plikach
3ce na plikach
•
Seek(Plik, n)
Procedura Seek ustawia wskaInik pliku przed sk adowC o numerze n.
Plik jest plikiem dowolnego typu z wyjCtkiem typu Text, a n jest
wyra4eniem typu LongInt. Pierwszy sk adnik pliku ma numer 0. Seek
mo4e byS u4yte do rozszerzenia pliku, poprzez ustawienie sk adnika
pliku na pierwszy za ko.cem pliku, tzn. Seek(Plik, FileSize(Plik)).
•
FileSize(Plik)
Funkcja ta zwraca aktualny wymiar pliku. Rezultat jest typu LongInt.
Je4eli Plik jest plikiem pustym, to FileSize(Plik)=0.
•
FilePos(Plik)
Funkcja ta podaje aktualnC pozycj wskaInika pliku. Je4eli wskaInik
pliku znajduje si na poczCtku pliku, to FilePos(Plik)=0. Je4eli
wskaInik pliku znajduje si na ko.cu pliku,
FilePos(Plik)=FileSize(Plik). Funkcja FilePos mo4e byS u4yta tylko
wtedy, gdy plik jest otwarty.
•
Erase(Plik)
Procedura ta wymazuje (usuwa) plik zwiCzany ze zmiennC plikowC
Plik. Nie jest dopuszczalne stosowanie Erase w stosunku do otwartego
pliku. Plik musi byS zamkni ty przed u4yciem procedury Erase.
•
Rename(Plik, Nowa_nazwa)
Procedura ta zmienia nazw pliku zewn trznego zwiCzanego ze
zmiennC plikowC Plik.
•
Truncate(Plik)
Procedura obcina wszystkie sk adowe pliku poza aktualnym
po o4eniem wskaInika pliku. Aktualne po o4enie wskaInika pliku staje
si ko.cem pliku.
J zyki programowania -Pascal Strona 63
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11 Biblioteki Turbo Pascala
11.1
11.1
11.1
11.1 Modu Crt
Modu Crt
Modu Crt
Modu Crt
Modu CRT zawiera procedury i funkcje obs ugi ekranu, dIwi ku i
klawiatury.
Pozwala na definiowanie okien, wybór koloru tekstu i jego t a w przypadku
kolorowych kart graficznych, generowanie dIwi ku o wybranej
cz stotliwo8ci i d ugo8ci oraz odczytywanie znaków z klawiatury , w Ccznie
z jej rozszerzeniami.
11.1.1 STALE
- sta e trybów tekstowych.
BW40 = 0;
czarno-bia y karty kolorowej, 40 kolumn
CO40 = C40 = 1;
kolorowy karty kolorowej, 40 kolumn
BW80 = 2; czarno-bia y karty kolorowej, 80 kolumn
CO80 = C80 = 3;
kolorowy karty kolorowej, 80 kolumn
Mono = 7; czarno-bia y karty monochromatycznej, 80 kolumn
Font8*8 = 256; kolorowy karty EGA lub VGA, 43 lub 50 wierszy-
sta e kolorów.
Black =
0;
czarny
Blue
=
1;
niebieski
Green =
2;
zielony
Cyan
=
3;
turkusowy
Red
=
4;
czerwony
Magenta
=
5;
karmazynowy
Brown =
6;
brCzowy
LightGray
= 7;
jasnoszary
DarkGray
=
8;
ciemnoszary
LightBlue
= 9;
jasnoniebieski
LightGreen =
10;
jasnozielony
LightCyan = 11;
jasnoturkusowy
LightRed = 12;
jasnoczerwony
LightMagenta
=
13;
jasnokarmazynowy
Yellow
=
14;
4ó ty
White =
15;
bia y
Blink
= 128;
suma (Blink+kolor) wywo uje miganie
wyró4nionego koloru.
J zyki programowania -Pascal Strona 64
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.1.2 ZMIENNE
CheckBreak
: Boolean - standardowo: True; warto8S ta oznacza, 4e
polecenie Ctrl-Break dzia a tak, jak w DOSie.
CheckEof : Boolean - standardowo: False; warto8S funkcji Eof(plik) jest
równa CheckEof dla danego pliku tekstowego plik zwiCzanego z
CRT (po odczytaniu znaku generowanego przez Ctrl-Z)
CheckSnow
: Boolean - standardowo: True; warto8S ta zabezpiecza
ekran przed 8nie4eniem (wa4ne dla CGA)
DirectVideo :Boolean - standardowo: TRUE
Sposób wy8wietlania znaków na ekranie monitora.
True, bezpo8rednie dzia ania procedurCRT;
False wykorzystanie procedur z ROM BIOS
LastMode
: Word - warto8S b dCca ostatnim numerem sterownika
ekranu, tzn. przed uruchomieniem programu
TextAttr : Byte - warto8S oznaczajCca atrybut wy8wietlanych znaków
WinMin : Word - zmienna przechowujCca wspó rz dne lewego górnego
rogu bie4Ccego okna tekstowego (pierwszy bajt(-y), drugi-x)
WinMin : Word - jw. dla prawego dolnego rogu okna
11.1.3 FUNKCJE I PROCEDURY
11.1.3.1
AssignCrt (var plik: Text) procedura
Wynik : Skojarzenie pliku tekstowego z urzCdzeniem CRT (do realizacji
operacji wej/wyj zwiCzanych z konsola).
11.1.3.2
KeyPressed: Boolean funkcja
Wynik : Warto8S True, gdy w buforze klawiatury znajduje si nie odczytany
jeszcze znak.
Uses crt;
begin
repeat until keypressed;
end.
11.1.3.3
ReadKey: Char funkcja
Wynik : Czytanie kolejnego znaku znajdujCcego si w buforze klawiatury.
Uses crt;
var kl:char;
begin
repeat kl:=readkey; unitl kl = chr(27);
end.
J zyki programowania -Pascal Strona 65
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.1.3.4
TextMode (tryb: Byte) procedura
tryb - sta a typu tekstowego
Wynik : Zmiana bie4Ccego trybu tekstowego na nowy tryb
11.1.3.5
Window (x1, y1, x2, y2: Byte) procedura
x1, y2 - wspó rz dne lewego górnego rogu okna
x2, y2 - wspó rz dne prawego dolnego rogu okna
Wynik : Zdefiniowanie okna tekstowego o podanych wspolrzadnych lewego
górnego i prawego dolnego rogu okna. Kursor znajdzie si w
lewym górnym rogu okna.
11.1.3.6
GotoXY (x, y: Byte) procedura
x, y - wspó rz dne znaku w oknie
Wynik : Umieszczenie kursora w kolumnie x i wierszu y bie4Ccego okna
tekstowego. Punkt (1,1) znajduje si w lewym górnym rogu okna.
11.1.3.7
Funkcja WhereX: Byte { WhereY}
Wynik : Wspó rz dne x(Y)znaku wskazywanego przez kursor
(bie4Cca kolumna).
Uses crt;
Var pozX,pozY:Byte;
begin
poz_x:=wherex;
poz_y:=wherey);
gotoxy(10,10);
write('JAREK');
end.
11.1.3.8
ClrScr procedura
Wynik : Wype nienie bie4Ccego okna tekstowego znakami spacji i
umieszczenie kursora w lewym górnym rogu okna.
Uses crt;
begin
clrscr;
write('PrzykIad');
end.
11.1.3.9
ClrEol procedura
Wynik : Wype nienie znakami spacji obszaru miedzy pozycja kursora a
ko.cem wiersza, w którym si kursor znajduje.
J zyki programowania -Pascal Strona 66
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.1.3.10 InsLine procedura
Wynik : Ws awienie wiersza wype nionymi spacjami bezpo8rednio pod
wierszem, w którym znajduje si kursor. Wiersz ostatni bie4Ccego
okna tekstowego zostanie usuni ty, a wiersze, przed którymi
postawiono ten nowy, przesuni te w dol.
11.1.3.11 DelLine procedura
Wynik : Usuniecie wiersza , w którym w danej chwili znajduje si kursor.
Wiersze po o4one poni4ej zostanC przesuni te w gore, a ostatni
wiersz okna zostanie wype niony znakami spacji.
11.1.3.12 TextColor (kolor: Byte) procedura
kolor - sta a koloru
Wynik : Zmiana kolorów wyprowadzanych znaków (patrz: Stale koloru).
Uses crt;
begin
textcolor(1);
writeln('przykIad');
end.
11.1.3.13 TextBackground (kolor: Byte) procedura
kolor - sta a koloru
Wynik : Zmiana koloru t a. Mo4liwy jest wybór jednego z o8miu kolorów
okre8lonych warto8ciami od 0 do 7.
Uses crt;
begin
textbackground(2);
textcolor(0);
writeln('Komputer');
end.
11.1.3.14 LowVideo procedura
Wynik : Wyprowadzenie tekstu w kolorze ciemnym, odpowiadajCcym
wcze8niejszemu kolorowi jasnemu(numer koloru wi kszy niz. 7).
Dzieje si tak na skutek wyzerowania bitu jasno8ci zmiennej
TextAttr.
J zyki programowania -Pascal Strona 67
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.1.3.15 HighVideo procedura
Wynik : Zmiana koloru wyprowadzanego tekstu z ciemnego na odpowiedni
jasny. Jest to wynikiem ustawienia bitu jasno8ci zmiennej TextAttr
w stan 1.
11.1.3.16 NormVideo procedura
Wynik : Nadanie bitowi jasno8ci zmiennej TextAttr stanu sprzed pierwszego
wywo ania procedury HighVideo lub LowVideo.
11.1.3.17 Delay (ms: Word) procedura
ms - liczba milisekund
Wynik : Wstrzymanie wykonywania programu na czas okre8lony
parametrem ms.
Uses crt;
begin
delay(5000);
write('CD');
{wypisanie napisu "CD" po pewnym czasie}
end.
11.1.3.18 Sound (Hz: Word) procedura
Hz - cz stotliwo8S dIwi ku w hercach
Wynik : Rozpocz cie generowania dIwi ku o cz stotliwo8ci zadanej przez
parametr Hz.
Uses crt;
begin
sound(100);
delay(300);
nosound;
end.
11.1.3.19 NoSound procedura
Wynik : Wstrzymanie generowania dIwi ku.
J zyki programowania -Pascal Strona 68
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.2
11.2
11.2
11.2 Modu System
Modu System
Modu System
Modu System
Funkcje arytmetyczne:
function Abs(X): (Taki jak typ argumentu);
function ArcTan(X: Real): Real;
function Cos(X: Real): Real;
function Exp(X: Real): Real;
function Frac(X: Real): Real;
function Int(X: Real): Real;
function Ln(X: Real): Real;
function Pi: Real;{.1415926535897932385.}
function Sin(X: Real): Real;
function Sqr(X): (Taki jak typ argumentu);
function Sqrt(X: Real): Real;
Funkcje dynamicznej alokacji pami ci
procedure Dispose(var P: Pointer [ , Destructor ]);
procedure FreeMem(var P: Pointer; Size: Word);
procedure GetMem(var P: Pointer; Size: Word);
procedure New(var P: Pointer[,Init: Constructor]);
function MaxAvail: Longint;
function MemAvail: Longint;
Funkcje kontrolno-sterujCce:
procedure Exit;
procedure Halt [ ( Exitcode: Word ) ];
procedure RunError [ ( Errorcode: Byte ) ];
Funkcje wejscia-wyj8cia
procedure Assign(var f; String);
procedure ChDir(S: String);
procedure Close(var F);
function Eof(var F): Boolean;
procedure Erase(var F);
function FilePos(var F): Longint;
function FileSize(var F): Longint;
procedure GetDir(D: Byte; var S: String);
where D is set to:
0
Default
1
Drive A 2 Drive B 3 Drive C …
J zyki programowania -Pascal Strona 69
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
function IOResult: Integer;
procedure MkDir(S: String);
procedure Rename(var F; Newname);
procedure Reset(var F [: File; Recsize: Word ] );
procedure Rewrite(var F: File [; Recsize: Word ] );
procedure RmDir(S: String);
procedure Seek(var F; N: Longint);
procedure Truncate(var F);
Funkcje ró4ne:
procedure Exclude(var S: set of T;I:T);
procedure FillChar(var X; Count: Word; value);
function Hi(X): Byte;
function High(X)
procedure Include(var S: set of T; I:T);
function Lo(X): Byte;
function Low(X);
procedure Move(var Source, Dest; Count: Word);
function ParamCount: Word;
function ParamStr(Index): String;
function Random [ ( Range: Word) ]:
( Taki jak typ argumentu );
procedure Randomize;
function SizeOf: Integer;
function Swap(X): (Taki jak typ argumentu);
function UpCase(Ch: Char): Char;
Funkcje porzCdkowe:
procedure Dec(var X[ ; N: Longint]);
procedure Inc(var X [ ; N: Longint ] );
function Odd(X: Longint): Boolean;
function Pred(X): (Taki jak typ argumentu);
function Succ(X): (Taki jak typ argumentu);
Funkcje zwiazane z adresami i wskaInikami:
function Addr(X): pointer;
function Assigned(var P): Boolean;
function CSeg: Word;
function DSeg: Word;
function Ofs(X): Word;
J zyki programowania -Pascal Strona 70
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
function Ptr(Seg, Ofs: Word): Pointer;
function Seg(X): Word;
function SPtr: Word;
function SSeg: Word;
Funkcje napisowe:
function Concat(s1 [, s2,..., sn]: String): String;
function Copy(S: String; Index: Integer; Count:
Integer): String;
procedure Delete(var S: String; Index: Integer;
Count:Integer);
procedure Insert(Source: String; var S: String;
Index: Integer);
function Length(S: String): Integer;
function Pos(Substr: String; S: String): Byte;
procedure Str(X [: Width[:Decimals]];var S:string);
procedure Val(S; var V; var Code: Integer);
Funkcje zwiCzane z plikami tekstowymi:
procedure Append(var f: Text);
function Eoln [(var F: Text) ]: Boolean;
procedure Flush(var F: Text);
procedure Read(F , V1 [, V2,...,Vn ] );
function SeekEof [ (var F: Text) ]: Boolean;
function SeekEoln [ (var F: Text) ]: Boolean;
procedure SetTextBuf(var F:Text;var Buf[;S:Word]);
procedure Write(F, V1 [, V2,...,Vn ] );
Funkcje konwersji:
function Chr(X: Byte): Char;
function Ord(X): Longint;
function Round(X: Real): Longint;
function Trunc(X: Real): Longint;
Funkcje operujCce na plikach amorficznych:
procedure BlockRead(var F: File; var Buf; Count:
Word [; var Result: Word]);
procedure BlockWrite(var f: File; var Buf; Count:
Word [; var Result: Word]);
J zyki programowania -Pascal Strona 71
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.3
11.3
11.3
11.3 Modu Dos
Modu Dos
Modu Dos
Modu Dos
const
FCarry = $0001;
FParity = $0004;
FAuxiliary = $0010;
FZero = $0040;
FSign = $0080;
FOverflow = $0800;
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
ReadOnly = $01;
Hidden = $02;
SysFile = $04;
VolumeID = $08;
Directory = $10;
Archive = $20;
AnyFile = $3F;
Type
ComStr = string[127];
PathStr = string[79];
DirStr = string[67];
NameStr = string[8];
ExtStr = string[4];
Registers
FileRec
TextBuf
TextRec
SearchRec
DateTime
var
DosError: Integer;
J zyki programowania -Pascal Strona 72
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
function DosVersion: Word;
procedure Intr(IntNo: Byte; var Regs: Registers);
procedure MsDos(var Regs: Registers);
procedure GetDate(var Year,Month,Day,DayOfWeek:
Word);
procedure SetDate(Year,Month,Day: Word);
procedure GetTime(var Hour,Minute,Second,Sec100:
Word);
procedure SetTime(Hour,Minute,Second,Sec100: Word);
procedure GetCBreak(var Break: Boolean);
procedure SetCBreak(Break: Boolean);
procedure GetVerify(var Verify: Boolean);
procedure SetVerify(Verify: Boolean);
function DiskFree(Drive: Byte): Longint;
function DiskSize(Drive: Byte): Longint;
procedure GetFAttr(var F; var Attr: Word);
procedure SetFAttr(var F; Attr: Word);
procedure GetFTime(var F; var Time: Longint);
procedure SetFTime(var F; Time: Longint);
procedure FindFirst(Path: PathStr; Attr: Word;
var F: SearchRec);
procedure FindNext(var F: SearchRec);
procedure UnpackTime(P: Longint; var T: DateTime);
procedure PackTime(var T: DateTime;var P: Longint);
procedure GetIntVec(IntNo:Byte;var Vector:Pointer);
procedure SetIntVec(IntNo: Byte; Vector: Pointer);
function FSearch(Path: PathStr; DirList: String):
PathStr;
function FExpand(Path: PathStr): PathStr;
procedure FSplit(Path: PathStr; var Dir: DirStr;
var Name: NameStr; var Ext: ExtStr);
function EnvCount: Integer;
function EnvStr(Index: Integer): String;
function GetEnv(EnvVar: String): String;
procedure SwapVectors;
procedure Keep(ExitCode: Word);
procedure Exec(Path: PathStr; ComLine: ComStr);
function DosExitCode: Word;
J zyki programowania -Pascal Strona 73
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
uses Dos,crt;
var DirInfo
: SearchRec;
Ver
: Word;
S
: PathStr;
begin
FindFirst('*.pas', AnyFile, DirInfo);
while DosError = 0 do
begin
Writeln(DirInfo.Name); FindNext(DirInfo);
end;
Writeln(DiskSize(0) div 1024, ' Kbytes capacity');
Writeln(DiskFree(0) div 1024, ' Kbytes free ');
Ver := DosVersion;
Writeln('System DOS :', Lo(Ver), '.',Hi(Ver));
S := FSearch('TURBO.EXE',GetEnv('PATH'));
if S = '' then WriteLn('TURBO.EXE not found')
else WriteLn('Found as ',FExpand(S));
readkey;
end.
uses Dos,Crt;
function LeadingZero(w : Word) : String;
var s : String;
begin
Str(w:0,s);
if Length(s) = 1 then s := '0' + s;
LeadingZero := s;
end;
var h, m, s, hund : Word;
poz_x,poz_y:byte;
begin
poz_x:=WhereX; poz_y:=WhereY;
repeat
GetTime(h,m,s,hund); gotoxy(poz_x,poz_y);
Write(LeadingZero(h),':',LeadingZero(m),':',
LeadingZero(s));
until keypressed;
end.
J zyki programowania -Pascal Strona 74
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.4
11.4
11.4
11.4 Modu tworzone przez u#ytkownika
Modu tworzone przez u#ytkownika
Modu tworzone przez u#ytkownika
Modu tworzone przez u#ytkownika
Unit Nazwa;
Interface
{ Deklaracje publiczne}
Implementation
{ Deklaracje prywatne I definicje podprogramów}
Begin { moLe byb pomini[ty gdy brak}
{instrikcje inicjalizacyjne moduIu}
End.
unit test;
Interface
function Czekaj(znaki:string):Byte;
Implementation
Uses crt;
const KlawiszESC=#27;
function czekaj;
var z:char;
w:byte;
Begin
{czyszczenie bufora klawiatury}
while keypressed do readkey;
repeat
z:=readkey;
if z=KlawiszESC then break;
w:=pos(z,znaki);
until w>0;
Czekaj :=w;
End;
BEGIN
END.
Program Test_modulu;
uses test;
const s:string='TtNn';
Begin
write('Twoj wybor :',s[czekaj(s)]);
End.
J zyki programowania -Pascal Strona 75
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12 Dynamiczne struktury danych
12.1.1 Poj9cie wskaCnika
WskaInik do danych to dynamiczny adres pownego obszaru pami ci.
Po o4enie tego obszaru mo4e byS, i bardzo cz sto jest, ró4ne podczas
kolejnych uruchomia. programu.
Type
Pdane=^Dane;
Dane =Integer;
Var p:PDane;
d:Dane;
Begin
d:=76;
p:=@d;
writeln(longint(p),' zawiera ',p^);
inc(p^);
writeln('d zawiera ',d);
new(p);
p^:=123;
writeln(longint(p),' zawiera ',p^);
writeln('d zawiera ',d);
Dispose(p);
End.
Var p:Pointer;
Begin
d:=76;
p:=@d;
writeln(longint(p),' zawiera ',PDane( p)^);
new(PDane(p));
PDane(p)^:=123;
writeln(longint(p),' zawiera ',PDane( p)^);
writeln('d zawiera ',d);
End.
J zyki programowania -Pascal Strona 76
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.2
12.2
12.2
12.2 Tablica wskazników
Tablica wskazników
Tablica wskazników
Tablica wskazników
Pstring=^String[80];
PTablica=Array [1..N] of PString;
PTab=^Ptrablica;
Var t:PTab;
J zyk Turbo Pascal nie umo4liwia deklaracji tablic w pe ni dynamicznych.
Powy4sze konstrukcje tyklo troch przyblizajC to rozwiCzanie.
begin
new(t);
K:=N div 2;
For i:=1 TO K DO
begin
new(T^[i]);
str(i,T^[i]^);
end;
...
For i:=1 TO N DO
begin
if T^[i]^ <>Nil then
writeln(T^[i]^)
else writeln;
end;
...
end.
•
Dostp do elementów w takiej tablicy jest zbli4ony do zwyk ej tablicy.
•
dane tablicy i wskaIniki sC przechwywane na stercie – zwi ksza to
ilo8S dost pnej pami ci dla programu
•
Nie wszystkie wiersze muszC zawieraS dane – usuni cie wiersza to
zwolnmienie
•
Zakres nie oznacza deklaracji pe nej tablicy 2 wymiarowej
•
Z góry ograniczona ilo8S wierszy
•
Utrudniopne dodanie wiersza ( z wyjCtkiem ko.ca)
•
Usuni cia mogC powodowaS powstanie „rzadkich” tablic
J zyki programowania -Pascal Strona 77
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.3
12.3
12.3
12.3 Stos
Stos
Stos
Stos
12.3.1 Struktura
stosu
Stos danych w pewnym uproszczeniu mo4na porównaS do stosu talerzy na
stole. Dost p mamy tylko do jednego talerza znajdujCcego si na szczycie
stosu. Aby si gnCS do kolejnych talerzy musimy zdjCS ze stosu te, które sC
po o4one wy4ej. Element stosu mo4e wyglCdaS nast pujCco:
PElement=^Element;
Element=record
Data : Dane;
Next : PElement;
end;
12.3.2 Na
stos
Procedure na_stos(e:Dane;var top:PElement);
var Pom: Pelement;
begin
pom:=Top;
New(Top);
top^.next:=pom;
Top^.Data:=e;
end;
J zyki programowania -Pascal Strona 78
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.3.3 Ze
stosu
function ze_stosu(var e:Dane;var
top:PElement):boolean;
var Pom: Pelement;
begin
if (top<>nil)then
begin
ze_stosu:=True;
e:=Top^.Data;
Pom:=Top;
Top:=Top^.next;
Dispose(Pom);
end
else ze_stosu:=False;
end;
var i : Dane;
s,x : PElement;
BEGIN
s:=nil;
for i:=1 to 10 do
begin
na_stos(i,s);
write(s^.Data:4);
end;
writeln;
while (Ze_stosu(i,s)) do
write(i:4)
END.
12.3.4 Zastosowanie
stosu
•
Odwracanie ciCgu elementów
•
Zamiana wyra4enia na notacj polskC
•
Obliczenia warto8ci wyra4e. w notacji polskiej
J zyki programowania -Pascal Strona 79
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.4
12.4
12.4
12.4 Listy 1 i 2 kierunkowe
Listy 1 i 2 kierunkowe
Listy 1 i 2 kierunkowe
Listy 1 i 2 kierunkowe
12.4.1 Struktura listy 1 kierunkowej
Struktura danych listy jednokierunkowej jest to4sama ze strukturC stosu. Tu
tak4e mamy powiCzane za pomocC jednego wskaInika dane.
Plista=^Lista;
Lista= record
d
: Dane;
next : Plista;
end;
Lista od stosu b dzie odró4niaS sposobem dost pu do danych. Zamiast
prostych procedur operujCcych na pierwszym elemencie, jak to by o we
wcze8niejszym przypadku, b dziemy mieli pe na kontrol nad
poszczególnymi cz 8ciami sk adowymi listy. Niestety te du4o wi ksze
mo4liwo8ci stawiajC przed programistC du4o wi ksze wymagania. Trzeba
pami taS, 4e operacje na li8cie wiC4C si z bezpo8rednim dost pem do
pami ci komputera. Dobrze jest wi c i w tym przypadku ograniczyS si do
operowania na elementach listy za po8rednictwem odpowiednich procedur.
Uatwiej przecie4 dok adnie przeanalizowaS krótki kod Iród owy a nast pnie
z niego umiej tnie korzystaS.
12.4.2 Podstawowe operacje na li*cie
12.4.2.1 Dodanie
elementu
procedure dolisty(var p,k:Plista;d:dane);
var pom:Plista;
Begin
new(pom);
pom^.d:=d;
pom^.next:=nil;
if k<>nil then
k^.next:=pom
else p:=pom;
k:=pom;
end;
J zyki programowania -Pascal Strona 80
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.4.2.2
Wykonanie operacji na ka4dym elemancie listy
procedure PiszWszystko(p:Plista);
Begin
Writeln;
while(p<>Nil)do
begin
write(p^.D:3);
P:=P^.Next;
end;
Bardziej uniwersalny sposób:
Type ProcDane=Procedure(x:Dane);
procedure piszDane(x:Dane);far;
begin
write(x:4)
end;
procedure DlaKazdego(p:Plista;proc:ProcDane);
Begin
Writeln;
while(p<>Nil)do
begin
proc(p^.D);
P:=P^.Next;
end;
End;
Wywo anie procedury
dlaKazdego(p,PiszDane);
12.4.2.3
Szukanie elementu na li8cie
Funkcja szukajCca elementu na li8cie powinna zwracaS jako wynik wskaInik
na element, je8li istnieje, bCdI nil w przeciwnym przypadku. W przypadku
listy 1 kierunkowej mo4na pokusiS si o zwracanie poprzedniego wskaInika
na li8cie – u4yteczne zarówno przy dodawaniu jak i usuwaniu.
J zyki programowania -Pascal Strona 81
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
function Find(el:Dane;pocz:Plista;var
B:PLista):PLista;
begin
if pocz^.d=el then
begin B:=Nil; find:=pocz; end
else
begin
while
(pocz^.next<>nil)and(pocz^.Next^.d<>el) do
pocz:=pocz^.Next;
B:=pocz;
Find:=pocz^.Next;
end
end;
12.4.2.4 Usuni cie elementu
procedure usun(var p:PLista;el:dane);
var b,Lpom:Plista;
begin
if p<>nil then
begin
Lpom:=find(el,p,b);
if B =nil then {usun%b pierwszy element}
begin
P:=P^.Next; Dispose(Lpom);
end
else if Lpom <>nil then
begin
b^.next:=Lpom^.next;
Dispose(Lpom);
end
else
writeln('Element nie naleLy do listy');
end
else writeln('Lista jest pusta');
end;
J zyki programowania -Pascal Strona 82
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.4.2.5 Odwracanie
listy
function Odwroc(var pocz:Plista):Plista;
var lPtr,Lpom:PLista; { Odwraca list[
}
begin { bez tworzenia nowych elementów }
lPtr:=pocz;
pocz:=nil;
while lPtr <> nil do
begin
lPom:=lPtr^.Next;
lPtr^.Next:=pocz;
pocz:=lPtr;
lPtr:=lPom;
end;
Odwroc:=pocz;
end;
12.4.2.6 Zmiana
kolejno8ci danych, sortowanie listy
W powy4szym przyk adzie zastosowano dodawanie na koniec listy. Równie
atwo mo4na napisaS procedur , która ju4 na etapie tworzenia listy jC
posortuje. Du4e podobie.stwo listy do tablicy umo4liwia implementacje
niektórych algorytmów sortowania tablic równie4 dla listy. Zamian
elementów na li8cie mo4na zrealizowaS dwojako: poprzez zamian danych-
jak to by o w tablicach, bCdI du4o lepiej poprzez zamian wskaIników.
procedure zamiana(var pocz, p1,p2:Plista);
var pop1,pop2,pom:Plista;
begin
pop1:=Nil; pop2:=Nil;
if p1 <>Nil then Find(p1^.D,pocz,pop1) else exit;
if p2<>NIl then Find(p2^.D,pocz,pop2) else exit;
if pop1=Nil then {czyli p1 = pocz}
pocz:=p2 else pop1^.Next:=p2;
if p1 = Pocz then {p2 = pocz}
pocz:=p2 else pop2^.Next:=p1;
pom:=p2^.Next;
p2^.Next:=p1^.Next;
p1^.Next:=pom;
end;
J zyki programowania -Pascal Strona 83
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.4.3 Struktura listy 2 kierunkowej
Lista dwukierunkowa to tak jakby dwie listy jednokierunkowe, gdzie dane sC
wspólne. W poprzedniej li8cie atwe by o poruszanie si po elementach listy
tylko w jednym kierunku. Aby dostaS si do elementy poprzedzajCcego
bie4Ccy trzeba przeglCdaS ca C list od poczCtku. Tej niedogodno8ci tu ju4
nie b dzie.
lista2=^skladnik_listy2;
skladnik_listy2 =record
wsk1:lista2;{wiersz porzedni
}
s:Wiersz;
wsk2:lista2;{nast[pny}
end;
12.4.4 Dodawanie
do
listy
procedure do_listy2(var element:Wiersz;var
pocz,kon:lista2);
var pop_skl,nas_skl:lista2;
podstaw:boolean;
begin
if kon<>nil then
begin
podstaw:=false;pop_skl:=kon;nas_skl:=kon^.wsk2; end
else
begin podstaw:=true;pop_skl:=nil;nas_skl:=nil end;
new(kon);
with kon^ do
begin
wsk1:=pop_skl;
s:=element;
wsk2:=nas_skl;
end;
if pop_skl<>nil then pop_skl^.wsk2:=kon;
if nas_skl<>nil then nas_skl^.wsk1:=kon;
if podstaw then pocz:=kon;
end;
J zyki programowania -Pascal Strona 84
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.4.5 Zastosowanie
list
Listy majC podobne zastosowania, jak tablice. W odró4nieniu od tablic nie
jeste8my tu ograniczeni jakC8 z góry narzuconC maksymalnC ilo8ciC
elementów. Tych elementów mo4e byS zarówno kilka jak i kilkaset.
Oczywi8cie ograniczeniem jest tu dost pna pomi S operacyjna.
J zyki programowania -Pascal Strona 85
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5
12.5
12.5
12.5 Drzewa binarne
Drzewa binarne
Drzewa binarne
Drzewa binarne
Inna strukturC rekurencyjnC sC drzewa. NajciekawszC wersjC jest drzewo
binarne uporzCdkowane. MogC one byS bardzo u4yteczne przy tworzeniu
struktur s ownikowych. Poszukiwanie danych mo4e byS tu du4o prostrze ni4
na zwyk ej li8cie.
Terminologia zaczerpmi ta z biologi : Drzewo, Korze., ga CI, li8cie ,
poddrzewo.
Ze wzgl du na wyró4nienie oddrzew najbardziej natyralnC metodC
postepowania z drzewami jest rekurencja.
12.5.1 Strukrura
danych
Typ danych w a8ciwie ten sam co i w liscie 2 kierunkowej.
PDrzewo=^Drzewo;
drzewo=record
L,P : PDrzewo;
D
: Dane;
end;
1
3
2
5
7
6
8
1
3
2
5
7
6
8
J zyki programowania -Pascal Strona 86
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5.2 Tworzenie Drzewa
Dowdanie nowego elementu do drzewa.
procedure dodaj (var d:Pdrzewo;x:dane);
begin
if d = Nil then { miejsce dodania}
begin
new(d);
d^.L:=Nil;
d^.P:=Nil;
d^.D:=x;
end
else
if d^.D > x then
dodaj(d^.L,x)
else
dodaj(d^.P,x);
end;
procedure pisz(d:PDrzewo;poz:byte);
begin
if D<>Nil then
begin
pisz(d^.L,poz+1);
writeln(d^.D:poz);
pisz(d^.P,poz+1)
end
end;
4
1
3
2
5
7
6
8
J zyki programowania -Pascal Strona 87
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5.3 Szukanie elementu
function szukaj(d:PDrzewo;x:Dane):PDrzewo;
Begin
if d = nil then begin
write('(Brak) ',x);
Szukaj:=Nil
end
else
if d^.D = x then begin
write(d^.D,' (Znaleziony)');
szukaj:=D;
end
else if d^.D > x then begin
write(D^.D,'->');
szukaj:=szukaj(D^.L,x);
end
else{ d^.D < x } begin
write(D^.D,'->');
szukaj:=szukaj(D^.P,x);
end
end;
J zyki programowania -Pascal Strona 88
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5.4 Usuniecie
li*cia i w9z a
procedure usun(var D:PDrzewo;x:Dane);
var S,nk,pnk:PDrzewo;
begin
if d = Nil then exit;
if d^.d < x then usun(d^.P,x)
else if d^.d > x then usun(d^.L,x)
else {d^.d = x}
begin
s:=d;
if d^.P = nil then d:=d^.L
else if d^.L = nil then d:=d^.P
else{ obie gaI[zie s% niepuste}
begin
nk:=D^.L;pnk:=D;
while(nk^.P<>Nil) do
begin pnk:=nk; nk:=nk^.P; end;
if pnk<>D then begin
pnk^.P:=nk^.L; nk^.L:=D^.L;
end;
nk^.P:=D^.P; d:=nk;
end;
Dispose(s);
end;
end;
4
1
3
2
5
7
6
8
J zyki programowania -Pascal Strona 89
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5.5 Równowa/enie Drzewa
Procedure balance(var d:PDrzewo);
var ileP,ileL:Integer;
Begin
if d = Nil then exit;
ileP:=Ilosc(D^.P);IleL:=Ilosc(D^.L);
Repeat
if ileP-ileL>1 then
begin
dec(ileP);inc(ileL);
zPrawoNaLewo(d);
end
else
if ileL-ileP>1 then
begin
dec(ileL);inc(ileP);
ZlewoNaPrawo(d);
end
else Break;
Until False;
Balance(D^.L);Balance(d^.P);
End;
4
1
3
2
5
7
6
8
J zyki programowania -Pascal Strona 90
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Function Ilosc(d:PDrzewo):Word;
Begin
if d = nil then Ilosc:=0
else
Ilosc:=Ilosc(d^.L)+Ilosc(d^.P)+1;
end;
procedure ZlewoNaPrawo(var d:PDrzewo);
var L,pl:PDrzewo;
begin
if d=Nil then exit;
L:=D^.L;pl:=D;
while L^.P<>nil do begin
pl:=L;L:=L^.P;
end;
if pl<>D then
begin
pl^.P:=L^.L; L^.L:=D^.L;
end;
L^.P:=D; D^.L:=Nil;
D:=L;
end;
procedure ZPrawoNaLewo(var d:PDrzewo);
var P,pp:PDrzewo;
begin
if d=Nil then exit;
P:=D^.P;pp:=D;
while P^.L<>nil do begin
pp:=P;P:=P^.L;
end;
if pp<>D then
begin
pp^.L:=P^.P; P^.P:=D^.P;
end;
P^.L:=D; D^.P:=Nil;
D:=P;
end;
J zyki programowania -Pascal Strona 91
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
13 Grafika w Turbo Pascalu
13.1
13.1
13.1
13.1 Programowanie w trybie graficznym
Programowanie w trybie graficznym
Programowanie w trybie graficznym
Programowanie w trybie graficznym
Tryb tekstowy a tryb graficzny
Tryb tekstowy (znakowy):
80 kolumn 25 wierszy
(40x25, 80x40, 80x50, 160x50)
Tryb graficzny (piksel)
640x480(standard VGA) przy 16 Kolorach
320x200, 800x600, 1024x768,1200x1024, 1600x1200
Ilo8S kolorów: 16(4 b), 256(8 b), 65 536(16Kb) ,
16 777 216(24Mb), 42 949 672 96(32Mb)
13.1.1 Wprowadzenie do pracy w trybie graficznym
Program garficzny;
Uses Graph,Crt;
const PathToDriver:String='C:\Programy\TP7\BGI';
function TrybGraficzny:boolean;
var dr,tryb:Integer;
begin
dr:=Detect;
InitGraph(dr,tryb,PathToDriver);
TrybGraficzny:=GraphResult=GrOK;
end;
dr:=9; tryb:=2; {640x480x16}
J zyki programowania -Pascal Strona 92
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Function InitVesa:Boolean;
var VESA16 : Integer;
tryb:Integer;
begin
Tryb:=0;
VESA16 := InstallUserDriver('VESA16', Nil);
InitGraph(Vesa16,Tryb,PathToDriver);
InitVesa:=GraphResult=GrOK;
end;
function TrybGraficzny:boolean;
var dr,tryb:Integer;
begin
if initvesa then TrybGraficzny:=True
else
begin
dr:=Detect; { dr:=9; tryb:=2;}
InitGraph(dr,tryb,PathToDriver);
TrybGraficzny:=GraphResult=GrOK;
end;
end;
function Int2Str(x:Integer):String;
var s:string;
Begin
Str(x,s); Int2Str:=s;
end;
BEGIN
if not trybGraficzny then exit;
Rectangle(0,0,GetmaxX,GetMaxY);
moveto(getmaxx div 2,getmaxy div 2);
SetTextJustify(CenterText, CenterText);
OutText(Int2Str(getmaxX+1)+'x'+Int2Str(getmaxY+1)+
'x'+Int2Str(getmaxColor+1));
PutPixel(10,10,Yellow);
SetAspectRatio(getmaxy, getmaxx);
Circle(getmaxx div 2,getmaxy div 2,getmaxx div 2);
Readkey;
closeGraph;
END.
J zyki programowania -Pascal Strona 93
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
13.2
13.2
13.2
13.2 Narz dzia graficzne w Turbo Pascalu
Narz dzia graficzne w Turbo Pascalu
Narz dzia graficzne w Turbo Pascalu
Narz dzia graficzne w Turbo Pascalu
13.2.1 Modu Graph
Procedury i funkcje modu u GRAPH
P. Arc (X,Y; Integer; StAngle, EndAngle, Radius; Word);
*
P. Bar(x1, y1, x2, y2: Integer);
*
P. Bar3D(x1, y1, x2, y2: Integer; Depth: Word; Top: Boolean);
*
P. Circle(X,Y: Integer; Radius: Word);
*
P. ClearDevice;
*
P. ClearViewPort;
*
P. CloseGraph;
*
P. DetectGraph(var GraphDriver, GraphMode: Integer);
*
P. DrawPoly(NumPoints: Word; var PolyPoints);
*
P. Ellipse(X, Y: Integer; StAngle, EndAngle: Word; XRadius, YRadius:Word);
*
P. FillEllipse(X, Y: Integer; XRadius, YRadius: Word)
*
P. FillPoly(NumPoints: Word; var PolyPoints);
*
P. FloodFill(X, Y: Integer; Border: Word);
*
P. GetArcCoords(var ArcCoords: _ArcCoordsType_);
P. GetAspectRatio(var Xasp, Yasp: Word);
F. GetBkColor: Word;
*
F. GetColor: Word;
*
F. GetDefaultPalette(var Palette: PaletteType);
F. GetDriverName: string;
*
P. GetFillPattern(var FillPattern: FillPatternType);
*
P. GetFillSettings(var FillInfo: FillSettingsType);
*
F. GetGraphMode: Integer;
*
P. GetImage(x1, y1, x2, y2: Integer; var BitMap);
P. GetLineSettings(var LineInfo: LineSettingsType);
*
F. GetMaxColor: Word;
*
F. GetMaxMode: Integer;
*
F. GetMaxX: Integer;
*
F. GetMaxY: Integer;
*
F. GetModeName(ModeNumber: Integer): string;
*
P. GetModeRange(GraphDriver:Integer; var LoMode, HiMode:Integer);
P. GetPalette(var Palette: PaletteType);
F. GetPaletteSize: Integer;
F. GetPixel(X,Y: Integer): Word;
*
P. GetTextSettings(var TextInfo: TextSettingsType);
*
P. GetViewSettings(var ViewPort: ViewPortType);
F. GetX: Integer;
*
F. GetY: Integer;
*
P. GraphDefaults;
F. GraphErrorMsg(ErrorCode: Integer): string;
F. GraphResult: Integer;
*
F. ImageSize(x1, y1, x2, y2: Integer): Word;
P. InitGraph(var GraphDriver:Integer; var GraphMode: Integer; PathToDriver: string);
*
F. InstallUserDriver(Name: string; AutoDetectPtr: pointer): integer;
F. InstallUserFont(FontFileName: string ): Integer;
J zyki programowania -Pascal Strona 94
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
P. Line(x1, y1, x2, y2: Integer);
*
P. LineRel(Dx, Dy: Integer);
*
P. LineTo(X, Y: Integer);
*
P. MoveRel(Dx, Dy: Integer);
*
P. MoveTo(X, Y: Integer);
*
P. OutText(TextString: string);
*
P. OutTextXY(X,Y: Integer; TextString: string);
*
P. PieSlice(X, Y: Integer; StAngle, EndAngle, Radius: Word);
*
P. PutImage(X, Y: Integer; var BitMap; BitBlt: Word);
P. PutPixel(X, Y: Integer; Pixel: Word);
*
P. Rectangle(x1, y1, x2, y2: Integer);
*
F. RegisterBGIdriver(driver: pointer): Integer;
F. RegisterBGIfont(Font: pointer): Integer;
P. RestoreCrtMode;
*
P. Sector(x, y: Integer; StAngle,EndAngle, XRadius, YRadius: Word);
P. SetActivePage(Page: Word);
*
P. SetAllPalette(var Palette);
F. SetAspectRatio(Xasp, Yasp: Word): Word;
P. SetBkColor(ColorNum: Word);
*
P. SetColor(Color: Word);
*
P. SetFillPattern(Pattern: FillPatternType; Color: Word);
*
P. SetFillStyle(Pattern: Word; Color: Word);
*
P. SetGraphBufSize(BufSize: Word);
P. SetGraphMode(Mode: Integer);
P. SetLineStyle(LineStyle: Word; Pattern: Word; Thickness: Word);
*
P. SetPalette(ColorNum: Word; Color: Shortint);
P. SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue:Integer);
P. SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue:Integer);
P. SetTextJustify(Horiz, Vert: Word);
*
P. SetTextStyle(Font, Direction: Word; CharSize: Word);
*
P. SetUserCharSize(MultX, DivX, MultY, DivY: Word);
P. SetViewPort(x1, y1, x2, y2: Integer; Clip: Boolean);
*
P. SetVisualPage(Page: Word);
*
P. SetWriteMode(WriteMode: Integer);
*
F. TextHeight(TextString: string): Word;
*
F. TextWidth(TextString: string): Word;
*
J zyki programowania -Pascal Strona 95
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
13.2.1.1 Sta e i typy zdefiniowane w modu e GRAPH
Constants :
Bar3D Constants:
TopOn True
TopOff False
Clipping Constants:
ClipOn True
ClipOff False
BitBlt Operators:
Constant
| Value| Meaning
---------------------------------------
NormalPut
| 0 | MOV
CopyPut
| 0 | MOV
XORPut
| 1 | XOR
OrPut
| 2 | OR
AndPut
| 3 | AND
NotPut
| 4 | NOT
Color Constants:
Dark Colors:(Foreground &
Background
)
Black 0
Blue 1
Green 2
Cyan 3
Red 4
Magenta 5
Brown 6
LightGray 7
Light Colors:(
Foreground
)
DarkGray 8
LightBlue 9
LightGreen 10
LightCyan 11
LightRed 12
LightMagenta 13
Yellow 14
White 15
For flashing (
blinking
) text
foreground, Blink= 128.
Colors for the 8514:
Dark Colors:
EGABlack 0
EGABlue 1
EGAGreen 2
EGACyan 3
EGARed 4
EGAMagenta 5
EGABrown 20
EGALightgray 7
Light
Colors
:
EGADarkgray 56
EGALightblue 57
EGALightgreen 58
EGALightcyan 59
EGALightred 60
EGALightmagenta 61
EGAYellow 62
EGAWhite 63
Fill Pattern Constants
Constant
| Value
| Meaning
-------------------------------------------------
EmptyFill
| 0 | Uses background color
SolidFill
| 1 | Uses draw color
LineFill
| 2 | --- fill
LtSlashFill
| 3 | /// fill
SlashFill
| 4 | /// thick fill
BkSlashFill
| 5 | \thick fill
LtBkSlashFill
| 6 | \fill
HatchFill
| 7 | Light hatch fill
XHatchFill
| 8 | Heavy cross hatch
InterleaveFill
| 9 | Interleaving line
WideDotFill
| 10 | Widely spaced dot
CloseDotFill
| 11 | Closely spaced dot
UserFill
| 12 | User-defined fill
Graphics Drivers
Constant
| Value/Comment
--------------ì------------------------
CurrentDriver
| -128/For GetModeRange
Detect | 0/Requests autodetection
CGA | 1
MCGA
| 2
EGA | 3
EGA64
| 4
EGAMono
| 5
IBM8514
| 6
HercMono
| 7
ATT400
| 8
VGA | 9
PC3270
| 10
Graphics Modes for Each Driver
Constant
| Value | Meaning Constant | Value | Meaning
-----------ì-------ì----------- -----------ì-------ì------------
CGAC0
| 0 |320 x 200 EGALo | 0 | 640 x 200
CGAC
| 1 | 320 x 200 EGAHi
| 1 | 640 x 350
CGAC2
| 2 | 320 x 200
| |
CGAC3
| 3 | 320 x 200 EGA64Lo | 0 | 640 x 200
CGAHi
| 4 | 640 x 200 EGA64Hi
| 1 | 640 x 350
|
|
|
|
MCGAC0 | 0 | 320 x 200 ATT400C0 | 0 | 320 x 200
MCGAC1 | 1 | 320 x 200 ATT400C1 | 1 | 320 x 200
MCGAC2 | 2 | 320 x 200 ATT400C2 | 2 | 320 x 200
MCGAC3 | 3 | 320 x 200 ATT400C3 | 3 | 320 x 200
MCGAMed | 4 | 640 x 200 ATT400Med | 4 | 640 x 200
MCGAHi
| 5 | 640 x 480 ATT400Hi | 5 | 640 x 400
|
|
|
|
EGAMonoHi | 3 | 640 x 350 IBM8514Lo | 0 | 640 x 480
HercMonoHi | 0 | 720 x 348 IBM8514Hi | 1 |1024x768
|
|
|
|
VGALo | 0 | 640 x 200 PC3270Hi | 0 | 720 x 350
VGAMed | 1 | 640 x 350 VGAHi
| 2 | 640 x 480
Justification Constants
Horizontal Constant | Value
--------------------------
LeftText
| 0
CenterText
| 1
RightText
| 2
Vertical Constant
| Value
-------------------------------
BottomText
| 0
CenterText
| 1
TopText
| 2
Line-Style and Width Constants
Line Styles:
SolidLn 0
DottedLn 1
CenterLn 2
DashedLn 3
UserBitLn 4 (User-defined line style)
Line Widths:
NormWidth 1
ThickWidth 3
Text-Style Constants
Constant
|Value| Meaning
--------------ì-------ì-------------------
DefaultFont
| 0 | 8x8 bit mapped font
TriplexFont
| 1 | Stroked font
SmallFont
| 2 | Stroked font
SansSerifFont
| 3 | Stroked font
GothicFont
| 4 | Stroked font
HorizDir
| 0 | Orient left to right
VertDir
| 1 | Orient bottom to top
UserCharSize
| 0 | User-defined character size
13.2.1.2 Types
:
ArcCoordsType
FillPatternType
FillSettingsType
Graphics Memory Pointers
LineSettingsType
PaletteType
PointType
TextSettingsType
ViewPort