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
1 Literatura:
2 Historia
2.1 J zyki Programowania.
3 Podstawowe poj cia
3.1 Budowa programu
3.2 S owa kluczowe
3.3 Podstawowe typy danych
3.3.1 Typy ca kowite
3.3.2 Typy rzeczywiste
3.3.3 Znaki i a cuchy znaków
3.3.4 Deklaracja sta ych i zmiennych typów znakowych
3.4 Elementy programu
3.4.1 Struktura programu
3.4.2 Komentarze
3.4.3 Instrukcja przypisania
4 Wyra enia
4.1 Wyra enia arytmetyczne
5 Operatory
5.1.1 Operatory arytmetyczne
5.1.2 Priorytet operatorów
5.1.3 Przyk ady
5.2 Wyra enia logiczne
5.3 Operatory relacji
5.4 Operatory logiczne
5.4.1 Priorytet operatorów
6 Instrukcje
6.1 Instrukcje wej cia /wyj cia (Input/ Output )
6.1.1 Wyj cie - procedury Write , Writeln
6.1.2 Wej cie - procedury Read , ReadLn
6.2 Instrukcje strukturalne
6.2.1 Instrukcje z o one
6.2.2 Instrukcja warunkowa
6.2.3 Instrukcja wyboru CASE
6.3 Instrukcje iteracyjne
6.3.1 Instrukcja FOR
J zyki programowania -Pascal Strona 3
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6.3.2 Instrukcja WHILE
6.3.3 Instrukcja Repeat
6.4 Inne instrukcje
6.4.1 Instrukcja kodu
6.4.2 Instrukcja asemblerowa
6.4.3 Instrukcja skoku
6.4.4 Instrukcje Break i Continue
7 Typy danych c.d.
7.1 Typy wprowadzone wcze ciej
7.2 Typ wyliczeniowy
7.3 Typ okrojony
7.4 Typ zbiorowy
7.5 Typ tablicowy
7.5.1 String
7.5.2 Tablice wielowymiarowe
8 Podprogramy
8.1 Istota programowania proceduralnego
8.1.1 Poj cie procedury
8.1.2 Pojecie funkcji
8.1.3 Deklaracje, definicja i wywo anie podprogramów
8.1.4 Parametry podprogramów
8.1.5 Inne przyk adowe funkcje
8.1.6 Zalety programowanie z wykorzystaniem podprogramów
8.1.7 Rekurencja
9 Rekordy i tablice rekordów
9.1 Istota typu rekordowego
9.2 Rekordy z cz ci sta
9.2.1 Instrukcja wi ca WITH
9.2.2 Rekord z wariantami
10 Operacje wej cia wyj cia
10.1 Podstawowe operacje na plikach
10.2 Pliki tekstowe
10.2.1 Plik tekstowy a plik file of char
10.3 Pliki elementowe
10.4 Pliki amorficzne
10.5 Funkcje i procedur operuj ce na plikach
11 Biblioteki Turbo Pascala
J zyki programowania -Pascal Strona 4
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.1 Modu Crt
11.1.1 STALE
11.1.2 ZMIENNE
11.1.3 FUNKCJE I PROCEDURY
11.2 Modu System
11.3 Modu Dos
11.4 Modu tworzone przez u ytkownika
12 Dynamiczne struktury danych
12.1.1 Poj cie wska nika
12.2 Tablica wskazników
12.3 Stos
12.3.1 Struktura stosu
12.3.2 Na stos
12.3.3 Ze stosu
12.3.4 Zastosowanie stosu
12.4 Listy 1 i 2 kierunkowe
12.4.1 Struktura listy 1 kierunkowej
12.4.2 Podstawowe operacje na li cie
12.4.3 Struktura listy 2 kierunkowej
12.4.4 Dodawanie do listy
12.4.5 Zastosowanie list
12.5 Drzewa binarne
12.5.1 Strukrura danych
12.5.2 Tworzenie Drzewa
12.5.3 Szukanie elementu
12.5.4 Usuniecie li cia i w z a
12.5.5 Równowa enie Drzewa
13 Grafika w Turbo Pascalu
13.1 Programowanie w trybie graficznym
13.1.1 Wprowadzenie do pracy w trybie graficznym
13.2 Narz dzia graficzne w Turbo Pascalu
13.2.1 Modu Graph
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 u y przede wszystkim
do nauki programowania strukturalnego, tj. programowania
du ych systemów tzw. "z góry - na dó ", czyli okre lania
du ych elementów poprzez elementy ni szego rz du, a do
ko cowych elementów programowych realizuj cych okre lone
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 zapocz tkowa a sukces TP
Turbo Pascal 4.0 nowe zintegrowane rodowisko,
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 now bibliotek Turbo Vision
1992 Borland Pascal 7.0 i Turbo Pascal 7.0
Pakiety te zawieraj m.in. zintegrowane, interakcyjne systemy
programowania, które sk adaj si z kompilatorów j zyka,
z czonych z nimi ekranowych, wielookienkowych edytorów
tekstów i wbudowanych w systemy programów lokalizacji i
usuwania usterek (ang. debugger) oraz przegl dania powi zanych
elementów programów (ang. browser).
J zyki programowania -Pascal Strona 7
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
2.1 J zyki Programowania.
2.1 J zyki Programowania.
2.1 J zyki Programowania.
2.1 J zyki Programowania.
W pami ci program jest zapisany jako Kod Maszynowy, czyli instrukcje
dla konkretnego procesora. S one pami tane jako liczby w systemie
binarnym (zerojedynkowym).
Powsta wi c Asembler - j zyk pierwszej generacji. Jego rozkazy
odpowiadaj bezpo rednio instrukcjom procesora, jednak zapisywane s w
bardziej zrozumia ej formie.
Druga generacja to j zyki nie maj ce ju tak bliskiego zwi zku z
procesorem, ale nadal podobnie jak asembler stanowi ce jeden ci g
instrukcji. S to tak zwane j zyki interpretowane. Przyk adem takiego
j zyka mo e by ogólnie znany Basic. Jedna instrukcja j zyka drugiej
generacji, mo e by t umaczona na kilka, kilkadziesi t a czasem wi cej
instrukcji procesora.
J zyki kolejnej generacji, np. Pascal, rozwijaj koncepcj programowania
o mo liwo podzielenia programu na modu y wykonuj ce ró ne operacje
wchodz ce w jego sk ad. Ka da taka cz stanowi pod pewnym
wzgl dem zamkni t ca o i jej "wn trze" nie jest dost pne.
Wykorzystanie jej polega na przekazaniu parametrów (i ewentualnym
odebraniu wyniku). Typowymi modu ami s funkcje i procedury.
Kolejny to j zyki Zorientowane Obiektowo (OO). Przyk ad to C++,
Delphi. Chocia w Pascalu te mo na pisa programy OO.
Powsta y równie j zyki czwartej generacji. S to j zyki umo liwiaj ce
pisanie programów tzw. bardzo wysokiego poziomu, niezale ne 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 Budowa programu
3.1 Budowa programu
3.1 Budowa programu
3.1 Budowa programu
Program pascalowy buduje si z elementarnych jednostek j zyka zwanych
symbolami. Symbol sk ada si ze znaku lub ci gu znaków alfabetu .
Alfabet zawiera :
du e 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 ( zastrze one)
W taki sam sposób tworzymy identyfikatory sta ych, zmiennych, typów,
podprogramów etc. Symbole specjalne, podobnie jak znak spacji s
separatorami jednostek leksykalnych.
3.2 S owa kluczowe
3.2 S owa kluczowe
3.2 S owa kluczowe
3.2 S owa kluczowe
S owa kluczowe s to spójne ci gi liter tworz ce zarezerwowane s owa
angielskie o ustalonym znaczeniu. U ywa si ich w z góry okre lony
sposób. S zastrze one, tzn. nie mog by zmieniane przez programist .
Ich nazw nie mo na w programie u y jako identyfikatora do jakiego
elementu. Poni ej 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 puj Dyrektywy j zyka.
W odró nieniu od s ów kluczowych, nie s one zastrze one - podane
wyrazy mog wi c by identyfikatorami zdefiniowanymi przez
programist , co jednak nie jest zalecane. Pewnym wyj tkiem s dyrektywy
private i public, które w obiektach, ale tylko w nich, s s owami
zastrze onymi. Dyrektyw jest ka dy z nast puj cych 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 Podstawowe typy danych
3.3 Podstawowe typy danych
3.3 Podstawowe typy danych
3.3 Podstawowe typy danych
J zyk Pascal pozwala na abstrahowanie od reprezentacji danych w pami ci
komputera.
Osi gni to to poprzez wprowadzenie poj cia typu. Przyj to za o enie, e
ka da zmienna, wyra enie lub funkcja jest pewnego typu.
Typ ten okre la
zbiór warto ci sta ej, zmiennej etc.
zbiór operacji jakie mo na wykona na obiektach
3.3.1 Typy ca kowite
TYPY CA KOWITE - s to warto ci liczbowe, które mieszcz si w
podanych zakresach, im wi kszy zakres to automatycznie zwi ksza si
zapotrzebowanie liczby na pami :
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
U ycie 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
nale y wybra opcj 8087/80287
Opcja {$E+} umo liwia uruchomienie programow 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 steruj ce ( kontrolne )
Znaki o kodach 0 - 31 , 127 nosz nazw znaków steruj cych . Ich
graficzna reprezentacja nie zawsze b dzie wy wietlana . S to znaki
u yteczne przy sterowaniu komputerem .
Np
program bell;
begin
write(#7); write(char(7));
end.
Wykonanie programu powoduje wydanie d wi ku dzwonka (ang. Bell ).
3.3.3.2 Znaki podstawowego i rozszerzonego kodu ASCII
S to znaki odpowiadaj ce kodom 32 ( spacja) - 126 ( ~). Mieszcz si tu
znaki alfabetu Pascala ( ma e i wielkie litery aci skie , liczby ,znaki
operatorów itp. ).
Znaki o kodach 128- 225 s to znaki tzw. rozszerzonego kodu ASCII .
Znaki te mog by zmieniane , w celu uzyskania symboli specyficznych
dla danego j zyka np.
Standardowo znajduj si tam znaki do kre lenia ramek , kilka znaków
u ywanych w transkrypcji i inne .
Dost p do tych znaków mo e by 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 ci gu znaków ( a cucha) jest
równie dopuszczalne np.
Program string1;
begin
write('PASCAL);
end .
Ci g znaków jest zwi zany z typem string; Oczywiste jest , e typ char
jest w nim zawarty jako ci gi d ugo ci 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 warto ci pocz tkow
(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 s podobie stwa i ró nice pomi dzy deklaracjami {1},{2}i{3}?
J zyki programowania -Pascal Strona 12
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.4 Elementy programu
3.4 Elementy programu
3.4 Elementy programu
3.4 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 g ównego programu}
END. { zako czenie bloku g ównego kropk }
Najkrótszy poprawny program w TP to:
Program Nazwa;
Begin
End.
J zyki programowania -Pascal Strona 13
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.4.2 Komentarze
Ka dy program po pewnym czasie mo e sta si nawet trudy do
zrozumienia nawet dla autora . Mo na jednak ten proces os abi poprzez
odpowiednie pisanie programów.
W tym celu nale y opisywa wszystkie bardziej z o one fragmenty
programów, a tak e u ywa identyfikatorów, których nazwy przybli aj
ich zastosowanie.
Przyk ad 1:
(* komentarz *)
var n,m,k : integer;
begin
n:=2;
m:=6;
k:=n*m;
writeln(iloczyn { komentarz } );
{ to
tak e
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 mno enia *)
integer; { typ zniennych }
BEGIN
czynnik1:=2 ; {przypisanie warto ci do}
czynnik2:=2 ; { czynników }
iloczyn:=czynnik1 * czynnik1;
{wyliczenie wyniku mno enia}
writeln('Wynik mno enia ' , czynnik1,' przez
',czynnik2,' wynosi : ',iloczyn ) ;
END.
J zyki programowania -Pascal Strona 14
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3.4.3 Instrukcja przypisania
Nadawanie warto ci nast puje bardzo cz sto za po rednictwem instrukcji
przypisania, która ma ogóln posta :
zmienna := wyra enie ;
Operator := nazywa si operatorem przypisania , symbol zmienna
oznacza tu identyfikator; wyra enie musi by typu konwertowanego do
typu zmiennej. W wersji najprostszej:
zmienna := sta a ;
liczba := 10 ;
czytamy : zmiennej liczba przypisz warto 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ównie inny schemat instrukcji przypisania mianowicie
zmienna1 := zmienna2 ;
Jednak e ta posta dopuszczalna jest gdy zajdzie jedno z:
typy zmiennych s 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ó ne 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ó nice pomi dzy identyfikatorami sta ych i
zmiennych
1. warto ci sta ych s okre lone przed rozpocz ciem programu natomiast
zmienne otrzymuj warto w trakcie wykonywania programu ;
2. ( TP ) tylko zmienne deklarowane w sekcji CONST maj nadan
warto przed rozpocz ciem programu ;
3. warto identyfikatora sta ej nie mo e ulec zmianie podczas
wykonywania programu , podczas gdy zmienna mo e przyjmowa
ró ne warto ci
W instrukcji przypisania zmienna := sta a ;
warto sta ej musi by tego samego typu , co typ zmiennej . Jedynym
wyj tkiem 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 s 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 s 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 warto 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 Wyra enia arytmetyczne
4.1 Wyra enia arytmetyczne
4.1 Wyra enia arytmetyczne
4.1 Wyra enia arytmetyczne
Wyra enia arytmetyczne sk adaj si z elementów typów ca kowitych lub
rzeczywistych.
Proste wyra enia arytmetyczne okre laj operacj arytmetyczn
np. 25 + 130, gdzie 25 i 130 to argumenty wyra enia, a znak +
operatorem wyra enia. Po wykonaniu operacji okre lonej przez operator
otrzymujemy wynik wyra enia; W naszym przyk adzie 155 .
Warto tego wyniku mo emy wydrukowa :
np.
writeln(25+130) ;
Wynik ten mo emy zapisa do pewnej(odpowiedniej) zmiennej:
np.
var I :Integer;
....
I := 25+130 ;
Ta w asno prowadzi nas do nast pnego schematu instrukcji przypisania:
zmienna := wyra enie ;
!!!Warto wyra enia musi by 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 s to symbole wi ce argumenty wyra enia. Je li wyra enie
zawiera ró ne operatory to wyliczanie warto ci przebiega zgodnie z
kolejno ci 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 Integer je li ka dy
Integer
argument jest typu
- Odejmowanie lub
Integer , wpp Real
* Mno enie Real
/ Dzielenie Real
MOD Reszta z dzielenia
DIV Cz ca kowita z Integer Integer
dzielenia
5.1.2 Priorytet operatorów
Operatory + - maj niski priorytet , pozosta e wysoki .
Wyra enie wykonywane jest od prawej do lewej strony najpierw
wykonywane s operacje o wysokim priorytecie , a nast pnie o niskim .
5.1.3 Przyk ady
Obliczy warto i okre li typ wyra enia :
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 te b dzie typu
Integer
J zyki programowania -Pascal Strona 20
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
W sytuacji gdy nie wystarczy poprzestanie na kolejno ci operacji
wynikaj ce z priorytetów dzia a mo na kolejno wymusi stosuj c
nawiasy.
3.5 *(16 div 5 ) + 4.5 = 15.0 ( Real )
Argumentami wyra enia mog by tak e zmienne np
var a,b :integer ;
a* 19+ b / 3 ( Real)
5.2 Wyra enia logiczne
5.2 Wyra enia logiczne
5.2 Wyra enia logiczne
5.2 Wyra enia logiczne
Wyra eniem logicznym nazywamy wyra enie daj ce w wyniku warto
typu BOOLEAN , czyli jedn z dwóch sta ych : True , False
W wyra eniach logicznych mog wyst powa operatory relacji i
operatory logiczne
5.3 Operatory relacji
5.3 Operatory relacji
5.3 Operatory relacji
5.3 Operatory relacji
Operat Znaczenie
or
= Równo
< Mniejszo
> Wi kszo
<> Ró no
<= mniejszo lub równo
>= wi kszo lub równo
in przynale no do zbioru
NP
Wyra enie Warto
65.6 > 65 True
65.6 < 65 False
10 <> 11 True
6 in [0..9] True
Uwaga:
Argumenty operacji relacji musz by tego samego typu b d typów
konwertowanych .
J zyki programowania -Pascal Strona 21
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
5.4 Operatory logiczne
5.4 Operatory logiczne
5.4 Operatory logiczne
5.4 Operatory logiczne
Argumenty musz by typu BOOLEAN
Operator Znaczenie Ilo argumentów
NOT negacja 1
AND koniunkcja 2
OR alternatywa 2
XOR róznica symetyczna 2
Wyniki operacji logicznych
not x not y and y x or y x xory
A1 A2
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 (najwy szy ) wyra enia 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 Instrukcje wej cia /wyj cia
6.1 Instrukcje wej cia /wyj cia
6.1 Instrukcje wej cia /wyj cia
6.1 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óln posta :
write (f , p1 , p2 ,..,pn);
writeln (f , p1 , p2 ,..,pn);
gdzie f -oznacza plik dyskowy ( parametr ten mo e by pomini ty wtedy
dane wypisywane s na konsol , czyli ekran monitora)
natomiast ka dy z pi mo e wyst powa w postaci
p p:m p:m:n
p jest typu prostego lub string ;
m okre la szeroko pola w jakim dane b d wypisywane ;
n okre la ilo miejsc po przecinku (tylko typy rzeczywiste)
n, m - wyra enia 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 mog by wywo ywane ze zmienn ilo ci
parametrów . Ponadto parametry mog mie ró ne typy .
6.1.2 Wej cie - procedury Read , ReadLn
Instrukcja procedury read (readln ) ma ogóln posta :
read (f , p1 , p2 ,..,pn);
readln (f , p1 , p2 ,..,pn);
gdzie f maj takie same znaczenie jak w przypadku procedury Write ,
natomiast ka de pi 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 powy szego programu b dzie
1. wczytanie z konsoli ( klawiatura ) liczby ca kowitej
2. nast pnie liczba ta zostanie ponownie wy wietlona
- wypisana b dzie warto zmiennej i
Przyk ad 2:
Program Czytaj_2; Program Czytaj_2_b;
var s1,s2 :string; var s1,s2 :string;
begin begin
Readln(s1); Read(s1);
writeln; writeln;
writeln(s1); writeln(s1);
Readln(s2); Read(s2);
writeln; writeln;
writeln(s1,s2); writeln(s1,s2);
end. end.
J zyki programowania -Pascal Strona 24
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Jako wiczenie na laboratorium pozostawiam sprawdzenie czy istniej
ró nice w wykonaniu tych dwóch wersji programów . Je li tak , to co
mo e t umaczy takie ró nice .
Procedura Readln mo e rówine zawiera wi ksz ilo parametrów -
mo e te ich wogóle nie by . Taki przypadek b dzie bardzo u yteczny w
celu zatrzymania wykonywania programu .
Program Stoped;
begin
...
readln;
end.
6.2 Instrukcje strukturalne
6.2 Instrukcje strukturalne
6.2 Instrukcje strukturalne
6.2 Instrukcje strukturalne
Poznane jak dot d instrukcje by y instrukcjami prostymi - nie zawiera y
w swej sk adni innych instrukcji . Natomiast instrukcje strukturalne s
konstrukcjami j zykowymi zbudowanymi z ci gów instrukcji na
podstawie okre lonych schematów strukturyzacji .
6.2.1 Instrukcje z o one
Instrukcja z o ona ma nast puj c budow :
BEGIN
I1; I2 ; ...In
END
gdzie I1; I2 ; ...In s instrukcjami a s owa kluczowe BEGIN i
END reprezentuj tzw. nawiasy instrukcyjne .
Instrukcja z o ona zast puj wi c ci g instrukcji , a w a ciwie to zamienia
ci g instrukcji w jedn instrukcj .Takie podej cie jest bardzo u yteczne ,
gdy musimy u y wielu instrukcji natomiast sk adnia dopuszcza tylko
jedn .
Separatorem instrukcji jest rednik ; . wyst puje on pomi dzy
ka dymi dwoma instrukcjami . Mo emy go równie postawi po ostatniej
instrukcji , wtedy oddzieli on t 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
Nie
Tak
Test
Instrukcja 1 Instrukcja 2
Instrukcja 3
Instrukcja ta jest równowa na schematowi . W schemacie mo e by
opuszczona instrukcja 2 , a w sk adni mo eby opuszczona fraza ELSE .
IF warunek THEN instrukcja_1
Warunek musi by wyra eniem logicznym(Boolean), czyli daj cym w
wyniku warto boolowsk : True lub FALSE.
Natomiast Instrukcja1 i Instrukcja2 musz by 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) mo e by pomini te , w przyk adzie (b) mo na go
pomin zmieniaj c 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;
Poniewa w sk adni instrukcji warunkowej wyst puj pojedyncze
instrukcje , a my musieli my u y ich ci gi zastosowali my instrukcje
z o one , które zamieni o nam ci gi instrukcji w pojedyncze instrukcje .
Instrukcja wyst puj ca po THEN czy te po ELSE mo e by równie
instrukcj warunkow IF
Np
IF test1 THEN
IF test2 THEN
IF test3 THEN
Instrukcja1
ELSE
ELSE
ELSE
co uwidacznia nast puj cy schemat blokowy
True True
True
Test 3
Test 2 Instrukcja 1
Test 1
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 ten
program oceny;
przyporz dkuje
var ocena:real;
wynikowi
wynik:integer;
z zakresu 1 - 100
Begin
punktów
wynik:=90;
odpowiedni
IF wynik >=30 then
ocen . Punkty
IF wynik >=35 then
okre laj procent
IF wynik >=40 then
odpowiedzi
IF wynik >=50 then
poprawnych.
IF wynik >=60 then
Uk ad
IF wynik >=70 then
konstrukcji
IF wynik >=80 then
IF...THEN
IF wynik >=90 then
...ELSE
Ocena:=5.0
pokazuje nam ,
ELSE Ocena:=4.5
e program ten
ELSE Ocena:=4.0
sk ada si z
ELSE Ocena:=3.5
wielu
ELSE Ocena:=3.0
zagnie d onych
ELSE Ocena:=2.5
instrukcji warun-
ELSE Ocena:=2.0
kowych.
ELSE Ocena:=1.5
ELSE Ocena:=1.0;
writeln(ocena:4:1);
End.
J zyki programowania -Pascal Strona 28
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
program ifelse;
Poddajmy dog bnej analizie
var test,test2:boolean;
przytoczony przyk ad programu.
l1,l2:integer;
Wyra enie widzimy tu dwie
Begin
instrukcje warunkowe . Jednak
test:=25*26<27*24;
odnajdujemy tylko jedno s owo
IF test then
ELSE , co oznacza , ze jedna
IF l2<>0 then
instrukcja jest postaci
writeln(l1/l2)
IF...THEN...ELSE
ELSE writeln('Test
natomiast druga
False');
IF...THEN...
End.
Nale y postawi sobie pytanie , do
którego IF odnosi si to ELSE ?
My l , e bardzo pomocne by oby tu stworzenie schematu blokowego
True
True
L1/L2
Test l2<>0
False
False
Test False
Na jego podstawie widzimy wyra nie , sposób wykonywania naszej
instrukcji warunkowej .
6.2.3 Instrukcja wyboru CASE
Sk adnia instrukcji CASE jest nast puj ca
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 s instrukcjami prostymi lub z o onymi , selektor jest
wyra eniem typu porz dkowego ( Integer,Char,Boolean ale NIE
Real ).
Listy sta ych s albo wymienionymi warto ciami
np 1,2,57
albo przedzia ami np 1..9
albo po czeniem np 0..9,11,12,17..35
Przyk ad 2
program Wybor;
var droga : char;
Przyk ad 1:
czas : real;
Case wynik DIV 10 of
begin
10,9 : Ocena:=5.0
Read(Droga);
8 : Ocena:=4.5
Case droga of
7 : Ocena:=4.0
''A','a' : czas:=3.0;
6 : Ocena:=3.5
5 : Ocena:=3.0
'B','b' : czas
4 : Ocena:=2.5
:=4.0;
3 : Ocena:=2.0
''C','c' : czas
0,1,2 : Ocena:=1.0
End; :=4.5;
ELSE czas :=0;
end;
end.
Instrukcja CASE w wielu przypadkach jest bardziej czytelna ni
po czenie wielu zagnie dzonych instrukcji IF .Dobrym przyk adem
mo e tu by wyliczanie ocen .
Zarówno w ka dej z instrukcji IF jak i w instrukcji CASE mog by
opuszczone fragmentu zawieraj ce instrukcje wykonywane w przypadku
niespe nienia warunku (w CASE adnego z warunków).
W instrukcji CASE ELSE mo e nie wyst powa 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 u ycie
instrukcji CASE . Nie jest dozwolone , aby selektor by wyra eniem
(zmienna czy te sta ) rzeczywistym .
Nale y w instrukcji CASE wyra enie x zast pi Trunc(x). Wynikiem tej
funkcji jest cz ca kowita z liczby x .
Program nie b dzie dzia a poprawnie , gdy podamy liczb 0.
6.3 Instrukcje iteracyjne
6.3 Instrukcje iteracyjne
6.3 Instrukcje iteracyjne
6.3 Instrukcje iteracyjne
Iteracje ( p tle) pozwalaj na opisani w prosty sposób czynno ci które s
wykonywane wielokrotnie . W j zyku Pascal istniej dwa rodzaje p tli
Tre p tli
Czy
Nie
spe nione s
warunki
wej cia ?
Czy
Tak
spe nione s
Tak warunki
wyj cia ?
Tre p tli
Nie
J zyki programowania -Pascal Strona 31
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
6.3.1 Instrukcja FOR
Zm:=wp
Sk adnia instrukcji :
FOR zm:=wp TO wk DO I ;
False gdzie
Zm <= wk
zm - Zmienna steruj ca p tl
wp - warto pocz tkowa
Zm:=succ(zm)
True
wk - warto ko cowa
I
I - pojedyncza instrukcja
Instrukcja OR jest realizacj p tli z warunkiem wej cia . Jest ona pewnym
wariantem p tli WHILE.
Zm:=wp Sk adnia instrukcji :
FOR zm:=wp DOWNTO wk DO
I ;
gdzie
False
Zm >= wk
zm - Zmienna steruj ca p tl
wp - warto pocz tkowa
Zm:=pred(zm)
True
wk - warto ko cowa
I
I - pojedyncza instrukcja
P tla FOR to przyk ad iteracji ograniczonej z góry wiadomo ile razy
wykona si dana p tla.
UWAGA!
W tre ci p tli nie wolno zmienia warto ci zmiennej steruj cej p tl .
Przyk ad:
var zn:char;k:Integer;
begin
zn:='*';
for k:=1 to 8 do
write(zn:k);
end.
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
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
WHILE wl DO I ;
6.3.2 Instrukcja
gdzie
WHILE
wl - wyra enie logiczne
I - pojedyncza instrukcja
False
WL
Sk adnia
instrukcji :
True
I
Instrukcja WHILE jest realizacj p tli z warunkiem wej cia .Instrukcja
oznacza: Dopóki prawdziwe jest wyra enie WL wykonuj instrukcj I .
Przyk ady :
Program Gwazdka; Program Liczby;
var zn:char;k:Integer; uses crt;
begin begin
zn:='*'; i:byte;
k:=1; i:=0;
while k<=8 do while i<10
begin do
write(zn:k); begin
k:=k+1; i:=i+1;
end; writeln(i);
end;
end.
xxx
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
Sk adnia instrukcji :
REPEAT I1; ... In UNTIL wl ;
I1;
gdzie
...
wl - wyra enie logiczne
In;
I1, ..,In - instrukcje
True
WL
False
Instrukcja REPEAT jest realizacj p tli z warunkiem wyj cia. Instrukcja
oznacza: Wykonuj instrukcj I1,..,!n a prawdziwe b dzie wyra enie WL .
Dowolna p tla zrealizowana za pomoc instrukcji WHILE mo e by
zbudowana za pomoc instrukcji REPEAT. Twierdzenie odwrotne nie jest
prawdziwe .
J zyki programowania -Pascal Strona 36
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Przyk ad :
Read(zn); Uses CRT;
WHILE zn <>'*' do Var
begin licz:byte;
write(zn);
read(zn); Begin
end; ClrScr;
writeln; REPEAT
REPEAT zn <>'*' Write('Wpisz jak
read(zn); liczb (0-wyjscie) :
if zn <> '*' then ');
write(zn); ReadLn(licz);
UNTIL zn =*' WriteLn('Potega
writeln 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 Inne instrukcje
6.4 Inne instrukcje
6.4 Inne instrukcje
6.4 Inne instrukcje
6.4.1 Instrukcja kodu
Posiada nast puj c sk adni :
INLINE (lista_elementów);
Wszystkie elementy lis ta_elementów oddzielone s od siebie
uko nikami i mog by :
sta ymi okre laj cymi warto ci liczbowe
identyfikatorami zmiennych
identyfikatorami zmiennych ze sta poprzedzon + lub -
operatorami rozmiaru kody
Przyk adowe u ycie tej procedury:
INLINE($EA/$F0/$FF/$00/$F0); {spowoduje
zresetowanie si komputera}
6.4.2 Instrukcja asemblerowa
Sk adnia jej jest nast puj ca:
ASM
Przyk ad
Instrukcja; asm
... mov al,0edh
Instrukcja; out 60h,al
END; in al,64h
mov al,x
end;
6.4.3 Instrukcja skoku
Label etykieta
Begin
...
Goto etykieta
...
etykieta:
Instrukcja ta mo e by przyczyn zaciemniania kodu programu i nale y jej
unika .
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 tre ci bloku p tli
Continue Opuszczenie reszty tre ci bloku p tli
Program BC;
var i,x,y:Integer;
begin
Write ('podaj dwie liczby ca kowite');
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 Typy wprowadzone wcze ciej
7.1 Typy wprowadzone wcze ciej
7.1 Typy wprowadzone wcze ciej
7.1 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ównowa ny String[255] co oznacza
tablic 255 znaków.
7.2 Typ wyliczeniowy
7.2 Typ wyliczeniowy
7.2 Typ wyliczeniowy
7.2 Typ wyliczeniowy
Typ definiowany przez u ytkownika.
Type Dni=(Poniedzialek, Wtorek, Sroda, Czwartek,
Piatek, Sobota, Niedziela);
var d:dni;
begin
for d:= Poniedzialek to piatek do
writeln ('Dzi do pracy ');
end.
7.3 Typ okrojony
7.3 Typ okrojony
7.3 Typ okrojony
7.3 Typ okrojony
Typ okrojony mo e by utworzony z dowolnego typu prostego (ca kowite,
logiczny, znakowy, wyliczeniowy) poprzez zaw enie jego zakresu do
jawnie podanego.
Type LiteraMa a = a .. z ;
Cyfra = 0..9;
Dzienroboczy = Poniedzailek..Pi tek;
Wielko zaj tej pami ci przez typ okrojony jest taka sama jak przez typ
bazowy.
J zyki programowania -Pascal Strona 41
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.4 Typ zbiorowy
7.4 Typ zbiorowy
7.4 Typ zbiorowy
7.4 Typ zbiorowy
Type Nazwa = Set of Typ_ Elmenetowy
Typ zbiorowy umo liwia na operowanie podzbiorach typu
Typ_Elementowy. Typ_Elementowy musi by typem porz dkowym
o co najwy ej 256 ró nych warto ciach. Mo e to by typ okrojony b d
wyliczeniowy.
Nie mo e to by typ Integer bo zawiera za du o mo liwych
warto ci.
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 (' Dzie roboczy',byte(d))
else
writeln('Dzie wolny', byte(d));
end.
J zyki programowania -Pascal Strona 42
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5 Typ tablicowy
7.5 Typ tablicowy
7.5 Typ tablicowy
7.5 Typ tablicowy
Jest to typ z o ony.
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 mo e by dowolnym wcze niej okre lonym typem.
Program T1; Program T1a;
Var Var
a:array[1..5] of a:array[1..5] of
Integer; Integer;
i:byte;
Begin Begin
ReadLn(a[1]); for i :=1 to 5 do
ReadLn(a[2]); ReadLn(a[i]);
ReadLn(a[3]); for i :=5 downto 1 do
ReadLn(a[4]); WriteLn(a[i]);
ReadLn(a[5]);
WriteLn(a[5]); End.
WriteLn(a[4]);
WriteLn(a[3]);
WriteLn(a[2]);
WriteLn(a[1]);
End.
Zmienna typu tablicowego w pami ci zajmie
Wielko jednego elementy * Ilo Elementów
W powy szym przypadku SizeOf(Integer)* 5 czyli 2*5 = 10.
J zyki programowania -Pascal Strona 43
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
7.5.1 String
Typ String jest równowa ny String[255] co oznacza
tablic 255 znaków. Jest to maksymalna d ugo pojedynczego
a cuch. Mo na ograniczy 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 s oracje na zmiennej
Operatory:
+ = <> < > <= >=
var S: String;
Read(s);
Write(s);
S:= Ala ma kota
S:= Co innego + mo e jeszcze co ;
If s => tekst then Delete(s,2,10);
Funkcje i procedury operuj ce 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('znalaz a',s,5);
Writeln(s); { 'Ala Znalaz a 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. Mo e to by dowolny okre lony
wcze niej, lub w tym momencie, typ danych. W szczególno ci mo e to by
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;
Ilo elementów tablicy równa si iloczynowi mnogo ci typów
indeksuj cych. Np. T2a posiada 10*20 czyli 200 elementów * 4B(typ
Real), czyli cznie 800B.
Ca a tablica musi zmie ci 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 oznaczaj 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 Nfor 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 dotycz ce 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 to ci pami ci, na ilo wymiarów
tablicy. Jednak e niezmiernie rzadko stosuje si tablice o wi kszej
ilo ci ni 3. Najcz ciej pojawiaj si tablice jedno i dwu wymiarowe.
Wi ksza ilo wymiarów utrudnia okre lenie adresu elementu, a tak e
zale no ci pomi dzy s siadami.
Czasami lepszym rozwi zaniem jest skonstruowanie prostszego typu
danych.
Za ó my za var B:Bry a;
Co oznaczaj zmienne i czy poprawne s 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 Zgodno 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 Istota programowania proceduralnego
8.1 Istota programowania proceduralnego
8.1 Istota programowania proceduralnego
8.1 Istota programowania proceduralnego
Historycznie ujmuj c pierwsze programy korzysta y z programowania
liniowego. Nie wspominam tu z oczywistych wzgl dów j zyków
maszynowych, czy te j zyków programowania pierwszych komputerów.
Programowanie proceduralne umo liwia podzia jednego wielkiego projektu
na kilka mniejszych zada .
8.1.1 Poj cie 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:=wyra enie 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 umo liwiaj komunikacj procedury ze wiatem
zewn tyrznym , czyli programem g ównym b d innym podprogramem,
który go wywo a . Dzi ki parametrom podprogramy dzia aj c na
sparametryzowanych danych mog by wielokrotnie u ywane do
wykonywania zada na ró nych danych. Parametry procedur i funkcji staj
si ich zmiennymi lokalnymi. Je li jaka zmienna globalna ma nazw
to sam z nazw parametru to w podprogramie b dzie widoczna tylko
zmienna lokalna zwi zana z parametrem.
8.1.4.2 Przekazywanie parametru poprzez wska nik i warto
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 operuj ce 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 pomoc 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 mo e mie w najprostszym przepadku posta :
J zyki programowania -Pascal Strona 52
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Procedure przenies(zrodlo,cel:byte);
Begin
Write(zrodlo, -> ,cel, );
End;
Ciekawszym rozwi zaniem, by oby wykorzystanie tablic do
przechowywania kr ków (liczb) i wy wietlania ich zawarto ci. To
umo liwi o by zasymulowanie animacji.
Mo na te by zauwa y , e skoro zmienne zlodlo,pomoc,cel s
liczbami powiedzmy 1, 2, 3 to atwo zauwa y , i
1 + 2 +3 = 6 .
zlodlo+pomoc+cel = 6 czyli
cel =6-zlodlo-pomoc
a procedur mo zemy zamieni na:
Procedure Hanoi(zlodlo,pomoc,ilosc:byte);
8.1.7.5 Zalety i wady rekurencji
Zast puje iteracj
Prostota krótkiego kodu
atwe przepe nienie stosu
K opoty z rekurencyjn definicj problemu
J zyki programowania -Pascal Strona 53
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
9 Rekordy i tablice rekordów
9.1 Istota typu rekordowego
9.1 Istota typu rekordowego
9.1 Istota typu rekordowego
9.1 Istota typu rekordowego
Typ rekordowy jest u ywany do opisu obiektów o strukturze niejednorodnej,
czyli takich, w których elementy sk adowe zawieraj dane ró nych typów. W
ten sposób mo emy po czy w jedn ca o wiele ró nych informacji. Jako
przyk ad mo e pos u y zbiór informacji o studencie.
9.2 Rekordy z cz ci sta
9.2 Rekordy z cz ci sta
9.2 Rekordy z cz ci sta
9.2 Rekordy z cz ci sta
Deklaracja typu rekordowego b dzie mia o nast puj cy schemat.
Type Nazwa_typu = RECORD
Pierwsza_lista_pól:T1;
Druga_lista_pól :T2;
n-ta lista_pól:TN;
END;
Gdzie ka da lista pól to lista identyfikatorów oddzielonych on siebie
przecinkami, a ka de Ti to identyfikator dowolnego wcze niej
zdefiniowanego, przez u ytkownika b d 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 pomoc znaku . (kropka) oddzielaj cej
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, e w obr bie instrukcji Instrukcja mamy dost p do pól
zmiennej zmienna_recordowa bez konieczno ci 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 s dost pne we wszystkich zmiennych
tego typu. Mo liwa jest równie struktura, w której w zmiennych
rekordowych tego samego typu istniej ró ne pola. Pojawienie si kilku
wariantów zmiennej rekordowej umo liwia konstrukcja:
Type Nazwa_typu = RECORD
Definicje pól sta ych;
CASE pole znacznikowe : Tc OF
Pierwsza lista sta ych wyboru:(Pierwsza
lista pól);
Druga lista sta ych wyboru:(Druga lista
pól);
...
M-ta lista sta ych wyboru:(M-ta lista pól);
J zyki programowania -Pascal Strona 55
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
END;
Gdzie pole znacznikowe oznacza pole typu Tc (pole to mo e by
opuszczone, ale typ musi by okre lony). Pola w wariantach mog ró ni si
zarówno typem jak i ilo ci . Przy przydzielaniu pami ci kompilator dla
ca ego wariantu przydzieli tyle pami ci ile zajmuje sumarycznie najwi ksza
z list pól wariantowych. W poni szym przyk adzie b dzie to 26 bajtów
/sizeof(string[25])/.
Wa ne jest, e END ko czy zarówno wariant jak i ca y opis typu
rekordowego powoduje to, e nie istnieje mo liwo zdefiniowania
wi kszej ni 1 ilo ci 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 Podstawowe operacje na plikach
10.1 Podstawowe operacje na plikach
10.1 Podstawowe operacje na plikach
10.1 Podstawowe operacje na plikach
Wi kszo programów w trakcie pracy
wykorzystuje pliki do przechowywania danych. Dotychczas przechowywa e
dane w pami ci operacyjnej, tzn., e 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 mo emy wyró ni :
" pliki tekstowe - zawieraj ce tekst ;
" pliki elementowe (zdefiniowane) - elementami tych plików s :
tablice, rekordy;
" pliki amorficzne - o nieokre lonej strukturze.
Pierwsz rzecz 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 nieokre lonej
strukturze;
Zanim zaczniemy wykonywa jakiekolwiek operacje na pliku musimy
zadeklarowanej zmiennej przypisa "fizyczn " nazw pod jak plik
b dzie widoczny na dysku, robimy to tak:
Assign(zmienna_plikowa,sciezka);
zmienna_plikowa wykonuj c operacje na pliku do niej b dziemy
si odwo ywa ,
sciezka - cie ka do pliku np.: 'C:\TEMP\PLIK.DAT'
Uwaga:
Procedura Assign nie sprawdza istnienia, a nawet mo liwo ci dost pu do
pliku opisanego cie k .
J zyki programowania -Pascal Strona 57
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Po skojarzeniu nale y plik otworzy . Mamy do wyboru kilka procedur
otwieraj cych:
" Reset(zmienna_plikowa) - otwiera tylko plik ju istniej cy,
brak pliku powoduje wyst pienie b du fatalnego wejscia-wyj cia. Plik
otwarty do czytania lub czytania i pisania.
" Rewrite(zmienna_plikowa) - tworzy plik, je li ju istnieje to
otwiera plik skojarzony ze zm_plikow . Je li plik ju istnieje to dane w
nim zapisane zostan nadpisane. Plik otwarty do pisania.
" Append(zmienna_plikowa) - Procedura ta dotyczy tylko plików
tekstowych. Otwiera do pisania istniej cy plik, (skojarzony ze
zmienn _plikow ). Dane b d dopisywane na koniec pliku.
" Close(zmienna_plikowa) - zamyka plik skojarzony ze zmienn
plikow .
" Function Eof(zm_Plik):Boolean; Zwraca TRUE gdy
osi gni ty zosta koniec pliku FALSE w przeciwnym przypadku.
Zapisywanie i odczytywanie danych z pliku odbywa si za pomoc
procedur:
Read, Readln, Write, Writeln:
Read(zmienna_plikowa,lista_argumentów);
Write(zmienna_plikowa,lista_argumentów);
Procedury te by y ju u ywane wcze niej, pierwszy parametr by wtedy
opuszczany. Oznacza o to operacje na specjalnym pliku tekstowym
konsoli. Pliku tego mo na u ywa 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 by znana .
J zyki programowania -Pascal Strona 58
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10.2 Pliki tekstowe
10.2 Pliki tekstowe
10.2 Pliki tekstowe
10.2 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 Pliki elementowe
10.3 Pliki elementowe
10.3 Pliki elementowe
10.3 Pliki elementowe
Metody otwarcia:
Reset do czytania i pisania
Rewrite tylko do pisania
Append NIE JEST DOST PNA, 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 Pliki amorficzne
10.4 Pliki amorficzne
10.4 Pliki amorficzne
10.4 Pliki amorficzne
S to pliki binarne o nieokre lonej strukturze. Procedury otwarcia
Reset(pilk,wielkosc_jednostki)
Rewrite(pilk,wielkosc_jednostki)
wielkosc_jednostki (Word) oznacza wielko pojedynczego
elementu jaki b dzie czytane z pliku; domy lnie 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 buforuj ca dane (Tablica, Wska nik)
Count ilo elementów do odczytania(zapisania)
Result ilo elementów odczytanych (zapisanych);
wynik czytania(pisania)
Nie poprawne jest równie sprawdzanie ko ca pliku poprzez EOF- trzeba
zamiast sprawdza warto 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 Funkcje i procedur operuj ce na plikach
10.5 Funkcje i procedur operuj ce na plikach
10.5 Funkcje i procedur operuj ce na plikach
10.5 Funkcje i procedur operuj ce na plikach
" Seek(Plik, n)
Procedura Seek ustawia wska nik pliku przed sk adow o numerze n.
Plik jest plikiem dowolnego typu z wyj tkiem typu Text, a n jest
wyra eniem typu LongInt. Pierwszy sk adnik pliku ma numer 0. Seek
mo e by u yte 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.
Je eli Plik jest plikiem pustym, to FileSize(Plik)=0.
" FilePos(Plik)
Funkcja ta podaje aktualn pozycj wska nika pliku. Je eli wska nik
pliku znajduje si na pocz tku pliku, to FilePos(Plik)=0. Je eli
wska nik pliku znajduje si na ko cu pliku,
FilePos(Plik)=FileSize(Plik). Funkcja FilePos mo e by u yta tylko
wtedy, gdy plik jest otwarty.
" Erase(Plik)
Procedura ta wymazuje (usuwa) plik zwi zany ze zmienn plikow
Plik. Nie jest dopuszczalne stosowanie Erase w stosunku do otwartego
pliku. Plik musi by zamkni ty przed u yciem procedury Erase.
" Rename(Plik, Nowa_nazwa)
Procedura ta zmienia nazw pliku zewn trznego zwi zanego ze
zmienn plikow Plik.
" Truncate(Plik)
Procedura obcina wszystkie sk adowe pliku poza aktualnym
po o eniem wska nika pliku. Aktualne po o enie wska nika pliku staje
si ko cem pliku.
J zyki programowania -Pascal Strona 63
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11 Biblioteki Turbo Pascala
11.1 Modu Crt
11.1 Modu Crt
11.1 Modu Crt
11.1 Modu Crt
Modu CRT zawiera procedury i funkcje obs ugi ekranu, d wi ku i
klawiatury.
Pozwala na definiowanie okien, wybór koloru tekstu i jego t a w przypadku
kolorowych kart graficznych, generowanie d wi ku o wybranej
cz stotliwo ci i d ugo ci oraz odczytywanie znaków z klawiatury , w cznie
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; br zowy
LightGray = 7; jasnoszary
DarkGray = 8; ciemnoszary
LightBlue = 9; jasnoniebieski
LightGreen = 10; jasnozielony
LightCyan = 11; jasnoturkusowy
LightRed = 12; jasnoczerwony
LightMagenta = 13; jasnokarmazynowy
Yellow = 14; ó ty
White = 15; bia y
Blink = 128; suma (Blink+kolor) wywo uje miganie
wyró nionego koloru.
J zyki programowania -Pascal Strona 64
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.1.2 ZMIENNE
CheckBreak : Boolean - standardowo: True; warto ta oznacza, e
polecenie Ctrl-Break dzia a tak, jak w DOSie.
CheckEof : Boolean - standardowo: False; warto funkcji Eof(plik) jest
równa CheckEof dla danego pliku tekstowego plik zwi zanego z
CRT (po odczytaniu znaku generowanego przez Ctrl-Z)
CheckSnow : Boolean - standardowo: True; warto ta zabezpiecza
ekran przed nie eniem (wa ne dla CGA)
DirectVideo :Boolean - standardowo: TRUE
Sposób wy wietlania znaków na ekranie monitora.
True, bezpo rednie dzia ania procedurCRT;
False wykorzystanie procedur z ROM BIOS
LastMode : Word - warto b d ca ostatnim numerem sterownika
ekranu, tzn. przed uruchomieniem programu
TextAttr : Byte - warto oznaczaj ca atrybut wy wietlanych znaków
WinMin : Word - zmienna przechowuj ca wspó rz dne lewego górnego
rogu bie cego 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 urz dzeniem CRT (do realizacji
operacji wej/wyj zwi zanych z konsola).
11.1.3.2 KeyPressed: Boolean funkcja
Wynik : Warto 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 znajduj cego 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 bie cego 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 bie cego 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
(bie ca 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 bie cego okna tekstowego znakami spacji i
umieszczenie kursora w lewym górnym rogu okna.
Uses crt;
begin
clrscr;
write('Przyk ad');
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 bezpo rednio pod
wierszem, w którym znajduje si kursor. Wiersz ostatni bie cego
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 o one poni ej zostan 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('przyk ad');
end.
11.1.3.13 TextBackground (kolor: Byte) procedura
kolor - sta a koloru
Wynik : Zmiana koloru t a. Mo liwy jest wybór jednego z o miu kolorów
okre lonych warto ciami 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, odpowiadaj cym
wcze niejszemu kolorowi jasnemu(numer koloru wi kszy niz. 7).
Dzieje si tak na skutek wyzerowania bitu jasno ci 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 jasno ci zmiennej TextAttr
w stan 1.
11.1.3.16 NormVideo procedura
Wynik : Nadanie bitowi jasno ci 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 okre lony
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 stotliwo d wi ku w hercach
Wynik : Rozpocz cie generowania d wi ku o cz stotliwo ci zadanej przez
parametr Hz.
Uses crt;
begin
sound(100);
delay(300);
nosound;
end.
11.1.3.19 NoSound procedura
Wynik : Wstrzymanie generowania d wi ku.
J zyki programowania -Pascal Strona 68
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
11.2 Modu System
11.2 Modu System
11.2 Modu System
11.2 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-steruj ce:
procedure Exit;
procedure Halt [ ( Exitcode: Word ) ];
procedure RunError [ ( Errorcode: Byte ) ];
Funkcje wejscia-wyj cia
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ó ne:
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 porz dkowe:
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 wska nikami:
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 zwi zane 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 operuj ce 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 Modu Dos
11.3 Modu Dos
11.3 Modu Dos
11.3 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 Modu tworzone przez u ytkownika
11.4 Modu tworzone przez u ytkownika
11.4 Modu tworzone przez u ytkownika
11.4 Modu tworzone przez u ytkownika
Unit Nazwa;
Interface
{ Deklaracje publiczne}
Implementation
{ Deklaracje prywatne I definicje podprogramów}
Begin { mo e by pomini ty gdy brak}
{instrikcje inicjalizacyjne modu u}
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 Poj cie wska nika
Wska nik do danych to dynamiczny adres pownego obszaru pami ci.
Po o enie tego obszaru mo e by , i bardzo cz sto jest, ró ne 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 Tablica wskazników
12.2 Tablica wskazników
12.2 Tablica wskazników
12.2 Tablica wskazników
Pstring=^String[80];
PTablica=Array [1..N] of PString;
PTab=^Ptrablica;
Var t:PTab;
J zyk Turbo Pascal nie umo liwia deklaracji tablic w pe ni dynamicznych.
Powy sze konstrukcje tyklo troch przyblizaj to rozwi zanie.
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 zbli ony do zwyk ej tablicy.
" dane tablicy i wska niki s przechwywane na stercie zwi ksza to
ilo dost pnej pami ci dla programu
" Nie wszystkie wiersze musz zawiera dane usuni cie wiersza to
zwolnmienie
" Zakres nie oznacza deklaracji pe nej tablicy 2 wymiarowej
" Z góry ograniczona ilo wierszy
" Utrudniopne dodanie wiersza ( z wyj tkiem ko ca)
" Usuni cia mog powodowa powstanie rzadkich tablic
J zyki programowania -Pascal Strona 77
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.3 Stos
12.3 Stos
12.3 Stos
12.3 Stos
12.3.1 Struktura stosu
Stos danych w pewnym uproszczeniu mo na porówna do stosu talerzy na
stole. Dost p mamy tylko do jednego talerza znajduj cego si na szczycie
stosu. Aby si gn do kolejnych talerzy musimy zdj ze stosu te, które s
po o one wy ej. Element stosu mo e wygl da nast puj co:
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 ci gu elementów
" Zamiana wyra enia na notacj polsk
" Obliczenia warto ci wyra e w notacji polskiej
J zyki programowania -Pascal Strona 79
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.4 Listy 1 i 2 kierunkowe
12.4 Listy 1 i 2 kierunkowe
12.4 Listy 1 i 2 kierunkowe
12.4 Listy 1 i 2 kierunkowe
12.4.1 Struktura listy 1 kierunkowej
Struktura danych listy jednokierunkowej jest to sama ze struktur stosu. Tu
tak e mamy powi zane za pomoc jednego wska nika dane.
Plista=^Lista;
Lista= record
d : Dane;
next : Plista;
end;
Lista od stosu b dzie odró nia sposobem dost pu do danych. Zamiast
prostych procedur operuj cych na pierwszym elemencie, jak to by o we
wcze niejszym przypadku, b dziemy mieli pe na kontrol nad
poszczególnymi cz ciami sk adowymi listy. Niestety te du o wi ksze
mo liwo ci stawiaj przed programist du o wi ksze wymagania. Trzeba
pami ta , e operacje na li cie wi si z bezpo rednim dost pem do
pami ci komputera. Dobrze jest wi c i w tym przypadku ograniczy si do
operowania na elementach listy za po rednictwem odpowiednich procedur.
atwiej przecie dok adnie przeanalizowa krótki kod ród owy a nast pnie
z niego umiej tnie korzysta .
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 ka dym 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 li cie
Funkcja szukaj ca elementu na li cie powinna zwraca jako wynik wska nik
na element, je li istnieje, b d nil w przeciwnym przypadku. W przypadku
listy 1 kierunkowej mo na pokusi si o zwracanie poprzedniego wska nika
na li cie u yteczne 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 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 nale y 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 kolejno ci danych, sortowanie listy
W powy szym przyk adzie zastosowano dodawanie na koniec listy. Równie
atwo mo na napisa procedur , która ju na etapie tworzenia listy j
posortuje. Du e podobie stwo listy do tablicy umo liwia implementacje
niektórych algorytmów sortowania tablic równie dla listy. Zamian
elementów na li cie mo na zrealizowa dwojako: poprzez zamian danych-
jak to by o w tablicach, b d du o lepiej poprzez zamian wska nikó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 s
wspólne. W poprzedniej li cie atwe by o poruszanie si po elementach listy
tylko w jednym kierunku. Aby dosta si do elementy poprzedzaj cego
bie cy trzeba przegl da ca list od pocz tku. Tej niedogodno ci tu ju
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 maj podobne zastosowania, jak tablice. W odró nieniu od tablic nie
jeste my tu ograniczeni jak z góry narzucon maksymaln ilo ci
elementów. Tych elementów mo e by zarówno kilka jak i kilkaset.
Oczywi cie ograniczeniem jest tu dost pna pomi operacyjna.
J zyki programowania -Pascal Strona 85
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5 Drzewa binarne
12.5 Drzewa binarne
12.5 Drzewa binarne
12.5 Drzewa binarne
Inna struktur rekurencyjn s drzewa. Najciekawsz wersj jest drzewo
binarne uporz dkowane. Mog one by bardzo u yteczne przy tworzeniu
struktur s ownikowych. Poszukiwanie danych mo e by tu du o prostrze ni
na zwyk ej li cie.
Terminologia zaczerpmi ta z biologi : Drzewo, Korze , ga , li cie ,
poddrzewo.
Ze wzgl du na wyró nienie oddrzew najbardziej natyraln metod
postepowania z drzewami jest rekurencja.
5
2 7
1 3 6 8
1 2 3 5 6 7 8
12.5.1 Strukrura danych
Typ danych w a ciwie ten sam co i w liscie 2 kierunkowej.
PDrzewo=^Drzewo;
drzewo=record
L,P : PDrzewo;
D : Dane;
end;
J zyki programowania -Pascal Strona 86
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5.2 Tworzenie Drzewa
Dowdanie nowego elementu do drzewa.
5
2 7
1 3 6 8
4
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;
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 w z a
5
2 7
1 3 6 8
4
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 ga 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;
J zyki programowania -Pascal Strona 89
________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
12.5.5 Równowa enie Drzewa
5
2
7
8
1 3
4
6
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;
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 Programowanie w trybie graficznym
13.1 Programowanie w trybie graficznym
13.1 Programowanie w trybie graficznym
13.1 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
Ilo 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 Narz dzia graficzne w Turbo Pascalu
13.2 Narz dzia graficzne w Turbo Pascalu
13.2 Narz dzia graficzne w Turbo Pascalu
13.2 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 :
Colors for the 8514:
Bar3D Constants:
Dark Colors:
TopOn True
EGABlack 0
TopOff False
EGABlue 1
EGAGreen 2
Clipping Constants:
EGACyan 3
ClipOn True
EGARed 4
ClipOff False
EGAMagenta 5
EGABrown 20
EGALightgray 7
BitBlt Operators:
Light Colors :
Constant | Value| Meaning
---------------------------------------
EGADarkgray 56
NormalPut | 0 | MOV
EGALightblue 57
CopyPut | 0 | MOV
EGALightgreen 58
XORPut | 1 | XOR
EGALightcyan 59
OrPut | 2 | OR
AndPut | 3 | AND EGALightred 60
NotPut | 4 | NOT
EGALightmagenta 61
EGAYellow 62
Color Constants:
EGAWhite 63
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.
Fill Pattern Constants Justification Constants
Constant | Value | Meaning
------------------------------------------------- Horizontal Constant | Value
EmptyFill | 0 | Uses background color --------------------------
SolidFill | 1 | Uses draw color LeftText | 0
LineFill | 2 | --- fill CenterText | 1
LtSlashFill | 3 | /// fill RightText | 2
SlashFill | 4 | /// thick fill
BkSlashFill | 5 | \thick fill Vertical Constant | Value
LtBkSlashFill | 6 | \fill -------------------------------
HatchFill | 7 | Light hatch fill BottomText | 0
XHatchFill | 8 | Heavy cross hatch CenterText | 1
InterleaveFill | 9 | Interleaving line TopText | 2
WideDotFill | 10 | Widely spaced dot
CloseDotFill | 11 | Closely spaced dot
Line-Style and Width Constants
UserFill | 12 | User-defined fill
Line Styles:
Graphics Drivers
SolidLn 0
Constant | Value/Comment DottedLn 1
--------------ì------------------------ CenterLn 2
CurrentDriver | -128/For GetModeRange DashedLn 3
Detect | 0/Requests autodetection UserBitLn 4 (User-defined line style)
CGA | 1
MCGA | 2 Line Widths:
EGA | 3 NormWidth 1
EGA64 | 4 ThickWidth 3
EGAMono | 5
IBM8514 | 6
Text-Style Constants
HercMono | 7
ATT400 | 8
Constant |Value| Meaning
VGA | 9
--------------ì-------ì-------------------
PC3270 | 10
DefaultFont | 0 | 8x8 bit mapped font
TriplexFont | 1 | Stroked font
Graphics Modes for Each Driver
SmallFont | 2 | Stroked font
SansSerifFont | 3 | Stroked font
Constant | Value | Meaning Constant | Value | Meaning
GothicFont | 4 | Stroked font
-----------ì-------ì----------- -----------ì-------ì------------
HorizDir | 0 | Orient left to right
CGAC0 | 0 |320 x 200 EGALo | 0 | 640 x 200
VertDir | 1 | Orient bottom to top
CGAC | 1 | 320 x 200 EGAHi | 1 | 640 x 350
UserCharSize | 0 | User-defined character size
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
| | | |
13.2.1.2 Types :
MCGAC0 | 0 | 320 x 200 ATT400C0 | 0 | 320 x 200
ArcCoordsType
MCGAC1 | 1 | 320 x 200 ATT400C1 | 1 | 320 x 200
FillPatternType
MCGAC2 | 2 | 320 x 200 ATT400C2 | 2 | 320 x 200
MCGAC3 | 3 | 320 x 200 ATT400C3 | 3 | 320 x 200 FillSettingsType
MCGAMed | 4 | 640 x 200 ATT400Med | 4 | 640 x 200
Graphics Memory Pointers
MCGAHi | 5 | 640 x 480 ATT400Hi | 5 | 640 x 400
LineSettingsType
| | | |
PaletteType
EGAMonoHi | 3 | 640 x 350 IBM8514Lo | 0 | 640 x 480
PointType
HercMonoHi | 0 | 720 x 348 IBM8514Hi | 1 |1024x768
TextSettingsType
| | | |
ViewPort
VGALo | 0 | 640 x 200 PC3270Hi | 0 | 720 x 350
VGAMed | 1 | 640 x 350 VGAHi | 2 | 640 x 480
Wyszukiwarka
Podobne podstrony:
Turbo Pascal tipps
autoreferat z Turbo Pascala
9 TurboPascal Obsługa plików w turbo pascalu
Turbo Pascal Zadania z programowania z przykladowymi rozwiazaniami tpzada
Turbo Pascal cwiczenia praktyczne
Informatyka Wykłady Zwarte (wykłady 1 5)
Spis poleceń Turbo Pascal
Informatyka Wykład 07 B Teoria języków i automatów
Technologia Informacyjna Wykład 5
TURBO PASCAL inst
Praktyczny kurs Turbo Pascala Wydanie IV
Turbo Pascal 1,2 i czesc 3 semestru
Turbo Pascal cwiczenia praktyczne Wydanie II
więcej podobnych podstron