background image

Wyk ady z Podstaw 

Programowania 

 

J zyk Turbo Pascal 7.0 

 

Politechnika Bia ostocka  
Wydzia Informatyki 

Jaros aw S. Walijewski

background image

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 Wyra4enia

 

4.1

 

Wyra4enia arytmetyczne

 

5 Operatory

 

5.1.1

 

Operatory arytmetyczne

 

5.1.2

 

Priorytet operatorów

 

5.1.3

 

Przyk ady

 

5.2

 

Wyra4enia logiczne

 

5.3

 

Operatory relacji

 

5.4

 

Operatory logiczne

 

5.4.1

 

Priorytet operatorów

 

6 Instrukcje

 

6.1

 

Instrukcje wej8cia /wyj8cia  (Input/ Output )

 

6.1.1

 

Wyj8cie - procedury Write , Writeln

 

6.1.2

 

Wej8cie - procedury Read , ReadLn

 

6.2

 

Instrukcje strukturalne

 

6.2.1

 

Instrukcje z o4one

 

6.2.2

 

Instrukcja warunkowa

 

6.2.3

 

Instrukcja wyboru  CASE

 

6.3

 

Instrukcje iteracyjne

 

6.3.1

 

Instrukcja FOR

 

background image

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 wcze8ciej

 

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 8ciC sta C

 

9.2.1

 

Instrukcja wiC4Cca WITH

 

9.2.2

 

Rekord z wariantami

 

10

 

Operacje wej8cia – wyj8cia

 

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 operujCce na plikach

 

11

 

Biblioteki Turbo Pascala

 

background image

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 u4ytkownika

 

12

 

Dynamiczne struktury danych

 

12.1.1

 

Poj cie wskaInika

 

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 li8cie

 

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 li8cia i w z a

12.5.5

 

Równowa4enie 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

 

background image

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 
 

background image

J zyki programowania -Pascal                                   Strona 6

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

2 Historia 

 

1971 

 

Niklaus Wirth, profesor informatyki Politechniki w 

Zurychu, opublikowa pierwszy artyku o Pascalu "The programming 
language Pascal"

 

o

W zamierzeniu Wirth’a Pascal mia s u4yS przede wszystkim 
do nauki programowania strukturalnego, tj. programowania 
du4ych systemów tzw. "z góry - na dó ", czyli okre8lania 
du4ych elementów poprzez elementy ni4szego rz du, a4 do 
ko.cowych elementów programowych realizujCcych okre8lone 
funkcje.

 

1973 Kathlen Jensen "Pascal, User Manual and Report" - pierwszy 
podr cznik  j zyka

 

1983 Turbo Pascal 1.0 ameryka.skiej firmy Borland International 
(obecnie Inprise)

 

Turbo Pascal 3.0 – zapoczCtkowa a sukces TP

 

Turbo Pascal 4.0 – nowe zintegrowane 8rodowisko, 

implementacja modu ów.

 

1988 Turbo Pascal 5.0

 

1989 

Turbo Pascal 5.5 

Pierwsza implementacje 

Programowania obiektowego w TP 

Turbo Pascal 6.0 – Zawiera a nowC bibliotek Turbo Vision

 

1992 Borland Pascal 7.0 i Turbo Pascal 7.0 
Pakiety te zawierajC m.in. zintegrowane, interakcyjne systemy 
programowania, które sk adajC si z kompilatorów j zyka, 
z Cczonych z nimi ekranowych, wielookienkowych edytorów 
tekstów i wbudowanych w systemy programów lokalizacji i 
usuwania usterek (ang. debugger) oraz przeglCdania powiCzanych 
elementów programów (ang. browser).  

background image

J zyki programowania -Pascal                                   Strona 7

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

2.1

2.1

2.1

2.1   J zyki Programowania. 

J zyki Programowania. 

J zyki Programowania. 

J zyki Programowania.   

W pami ci program jest zapisany jako Kod Maszynowy, czyli instrukcje 
dla konkretnego procesora. SC one pami tane jako liczby w systemie 
binarnym (zerojedynkowym).  
 
Powsta wi c Asembler - j zyk pierwszej generacji. Jego rozkazy 
odpowiadajC bezpo8rednio instrukcjom procesora, jednak zapisywane sC w
bardziej zrozumia ej formie. 
 
Druga generacja to j zyki nie majCce ju4 tak bliskiego zwiCzku z 
procesorem, ale nadal podobnie jak asembler stanowiCce jeden ciCg
instrukcji. SC to tak zwane j zyki interpretowane. Przyk adem takiego 
j zyka mo4e byS ogólnie znany Basic. Jedna instrukcja j zyka drugiej 
generacji, mo4e byS t umaczona na kilka, kilkadziesiCt a czasem wi cej 
instrukcji procesora. 
 
J zyki kolejnej generacji, np. Pascal, rozwijajC koncepcj programowania 
o mo4liwo8S podzielenia programu na modu y wykonujCce ró4ne operacje 
wchodzCce w jego sk ad. Ka4da taka cz 8S stanowi pod pewnym 
wzgl dem zamkni tC ca o8S i jej "wn trze" nie jest dost pne. 
Wykorzystanie jej polega na przekazaniu parametrów (i ewentualnym 
odebraniu wyniku). Typowymi modu ami sC funkcje i procedury. 
 
Kolejny to j zyki Zorientowane Obiektowo (OO). Przyk ad to C++, 
Delphi. Chocia4 w Pascalu te4 mo4na pisaS programy OO. 
 
Powsta y równie4 j zyki czwartej generacji. SC to j zyki umo4liwiajCce 
pisanie programów tzw. bardzo wysokiego poziomu, niezale4ne od 
sprz tu, a nawet systemu operacyjnego. Przyk ad to j zyki dost pu do baz 
danych. 

background image

J zyki programowania -Pascal                                   Strona 8

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

3 Podstawowe poj cia 

3.1

3.1

3.1

3.1   Budowa programu

Budowa programu

Budowa programu

Budowa programu  

Program pascalowy buduje si z elementarnych jednostek j zyka zwanych 
symbolami. Symbol sk ada si ze znaku  lub ciCgu znaków alfabetu . 
Alfabet zawiera : 

du4e i ma e litery alfabetu  aci.skiego i znak  _ 
cyfry od 0 do 9 
symbole specjalne ( jednoznakowe) 

+ - * / = < > { }[ ] ( ) .  :  ;  ^  

Ze znaków tworzy si symbole  specjalne ( wieloznakowe) 
<>  <=   >=   :=   ..  
spacja 

i s owa kluczowe ( zastrze4one) 

W taki sam sposób tworzymy identyfikatory sta ych, zmiennych, typów, 
podprogramów etc. Symbole specjalne, podobnie jak znak spacji sC

separatorami jednostek leksykalnych. 

3.2

3.2

3.2

3.2   S owa kluczowe

S owa kluczowe

S owa kluczowe

S owa kluczowe  

S owa kluczowe sC to spójne ciCgi liter tworzCce zarezerwowane s owa 
angielskie o ustalonym znaczeniu. U4ywa si ich w z góry okre8lony 
sposób. SC zastrze4one, tzn. nie mogC byS zmieniane przez programist .
Ich nazw nie mo4na w programie u4yS jako identyfikatora do jakiego8
elementu. Poni4ej ich lista: 

And Array  Asm 

Begin Case 

Const Constructor 

Destructor 

Div 

Do 

Downto Else  End 

File  For 

Function Goto 

If  Implementation 

In 

Inherited Inline  Interface 

Label  Mod 

Nil Not Object  Of  Or 

Packed Procedure Program 

Record  Repeat

Set Shl  Shr  String 

Then 

To Type Unit  Until Uses 

Var While With 

Xor 

 

background image

J zyki programowania -Pascal                                   Strona 9

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Oprócz s ów kluczowych w Turbo Pascalu wyst pujC Dyrektywy j zyka. 
W odró4nieniu od s ów kluczowych, nie sC one zastrze4one - podane 
wyrazy mogC wi c byS identyfikatorami zdefiniowanymi przez 
programist , co jednak nie jest zalecane. Pewnym wyjCtkiem sC dyrektywy 
private i public, które w obiektach, ale tylko w nich, sC s owami 
zastrze4onymi. DyrektywC jest ka4dy z nast pujCcych wyrazów : 
 

Absolute Far  Near 

Public 

Assembler

Forward Private Virtual

External Interrupt 

 

 

Przyk ady identyfikatorów 
Ala  

ala 

Do 

Ola1_1  

Ola-1 

Koniec  

Pocz%tek 

Liczba Integer 

String 

Pascal Far 

Typ 

danych 

_For Private 

23cia 

3.3

3.3

3.3

3.3   Podstawowe typy danych

Podstawowe typy danych

Podstawowe typy danych

Podstawowe typy danych  

J zyk Pascal pozwala na abstrahowanie od reprezentacji danych w pami ci 
komputera. 
OsiCgni to to poprzez wprowadzenie poj cia typu. Przyj to za o4enie, 4e
ka4da zmienna, wyra4enie lub funkcja jest pewnego typu. 
Typ ten okre8la  

zbiór warto8ci sta ej, zmiennej etc. 
zbiór operacji jakie mo4na wykonaS na obiektach 

3.3.1 Typy 

ca kowite 

TYPY CAUKOWITE - sC to warto8ci liczbowe, które mieszczC si w
podanych zakresach, im wi kszy zakres to automatycznie zwi ksza si
zapotrzebowanie liczby na pami S:

SHORTINT  (-128..127) 1 

bajt 

INTEGER   (-32768..32767) 2 

bajty 

LONGINT   (-2147483648..2147483647) 4 

bajty 

BYTE      

(0..255) 

1 bajt 

WORD       (0..65535) 

2 bajty 

background image

J zyki programowania -Pascal                                   Strona 10

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

3.3.2 Typy 

rzeczywiste 

Nazwa

 

Zakres

 

D ugo

 

Dok adno  (cyfr)

 

real

 

2.9e-39 ÷ 1.7e38

 

6 bajtów

 

11 ÷ 12

 

single

 

1.5e-45 ÷ 4.0e38

 

4 bajty

 

7÷ 8

 

double

 

5.0e-324 ÷ 1.7e308

 

8 bajtów

 

15 ÷ 16

 

extended

 

3.4e-4932 ÷ 1.1e4932

 

10 bajtów

 

19 ÷ 20

 

comp

 

-9.2e18÷ 9.2e18

 

8 bajtów

 

19 ÷ 20

 

U4ycie typów Comp lub Extended wymaga deklaracji wykorzystywania 

w przez program koprocesora( "Must be in 8087 mode to compile this." 
{$N+} ) W menu OPTIONS/COMPILER w dziale Numeric processing 
nale4y wybraS opcj 8087/80287 
Opcja {$E+} umo4liwia uruchomienie programowC emulacj koprocesora, 
w przypadku braku jednostki sprz towej. 

3.3.3 Znaki 

a cuchy znaków 

 Zbiór znaków (typ char) zosta zdefiniowany przez tablic kodów ASCII. 

3.3.3.1 Znaki 

sterujCce ( kontrolne )

Znaki o kodach 0 - 31 , 127  noszC nazw znaków sterujCcych . Ich 
graficzna reprezentacja nie zawsze b dzie wy8wietlana . SC to znaki 
u4yteczne przy sterowaniu komputerem . 
Np 
program bell; 
begin 
 write(#7);             write(char(7)); 
end. 

Wykonanie programu powoduje wydanie dIwi ku dzwonka (ang. Bell ). 

3.3.3.2 

Znaki podstawowego i rozszerzonego kodu ASCII 

SC to znaki odpowiadajCce kodom 32 ( spacja) - 126 ( ~). MieszczC si tu 

znaki alfabetu Pascala ( ma e i wielkie litery  aci.skie , liczby ,znaki 
operatorów itp. ). 
Znaki o kodach 128- 225 sC to znaki tzw. rozszerzonego kodu ASCII . 
Znaki te mogC byS zmieniane , w celu uzyskania symboli specyficznych 
dla danego j zyka np. Y
Standardowo znajdujC si tam znaki do kre8lenia ramek , kilka znaków 
u4ywanych w transkrypcji i inne . 
Dost p do tych znaków mo4e byS zrealizowany na trzy sposoby 

background image

J zyki programowania -Pascal                                   Strona 11

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

1.  #Nr_Znaku      np. #65   
2. wykorzystanie funkcji char 
 char ( Nr_Znaku ) ;

np. char (65)    

3.  wypisanie symbolu znaku w apostrofach    np. 'A' 
 

3.3.3.3 Typ 

a.cuchowy -String

Umieszczenie pomi dzy apostrofami ciCgu znaków ( a.cucha) jest 

równie4 dopuszczalne np.  
Program string1; 
begin 
  write('PASCAL); 
end . 

CiCg znaków jest zwiCzany z typem  string; Oczywiste jest , 4e typ char 

jest w nim zawarty jako ciCgi d ugo8ci 1. 
Program string_char; 
begin 
write('P','A','S','C','A','L'); 
end . 
Inny specjalny napis to tzw. string pusty  '' (apostrof apostrof) 

3.3.4 Deklaracja 

sta ych i zmiennych typów 

znakowych 

Sta e

const  Litera = 'A'; 

 const  Imie = ' Anna'; 

Zmienne 
 var  c   : char; 
 var  S   : String; 
 var  s10: String[10]; 

Zmienne z warto8ciC poczCtkowC

(dotyczy TURBO PASCAL i BORLAND PASCAL ) 

  const c 

: char = 'A' ;   

{1} 

 

s1  : String[1] = 'Q';  

 

 

{2} 

 

S

: String= 

'A'; 

    {3}    

 

s10  : String[10]= 'Kot';   

 

{4} 

 

St  : String = 'To jest napis !'; {5} 

Jakie sC podobie.stwa i ró4nice pomi dzy deklaracjami {1},{2}i{3}? 

background image

J zyki programowania -Pascal                                   Strona 12

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

3.4

3.4

3.4

3.4   Elementy programu

Elementy programu

Elementy programu

Elementy programu  

3.4.1 Struktura 

programu  

 
Program
 Nazwa; {nag ówek programu}
Uses ...; {deklaracje u ycia modu ów}

Const  ... {deklaracje sta ych globalnych}

Type  ... {deklaracje typów}

Var  ... {deklaracje zmiennych globalnych}

Procedure Nazwa(paramerty); {nag ówek      

 

 

podprogramu - procedury}

Var  ... {deklaracja zmiennych lokalnych}

Begin 

 

... {instrukcje podprogramu} 

  End; 
Function Nazwa(paramerty):Typ_wyniku;   

{nag ówek funkcji} 

Var  ... {deklaracja zmiennych lokalnych  }

Begin   

  ... {instrukcje podprogramu} 

  End; 

BEGIN 

... {instrukcje bloku gIównego programu} 

 

END. { zakoKczenie bloku gIównego kropk%}
Najkrótszy poprawny program  w TP to: 
Program Nazwa; 
Begin  
End. 
 

background image

J zyki programowania -Pascal                                   Strona 13

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

3.4.2 Komentarze 

 Ka4dy program po pewnym czasie mo4e staS si nawet trudy do 
zrozumienia nawet dla autora . Mo4na jednak ten proces os abiS poprzez 
odpowiednie pisanie programów. 
W tym celu nale4y opisywaS wszystkie bardziej z o4one fragmenty 
programów, a tak4e u4ywaS identyfikatorów, których nazwy przybli4ajC
ich zastosowanie. 
 
Przyk ad 1: 
(* komentarz *) 
var  n,m,k : integer;   

 

begin  
  n:=2;  
  m:=6; 
  k:=n*m; 
  writeln(iloczyn {   komentarz   } ); 
 { to  
 

takLe
jest 

 

komentarz } 

end.  
Wprawdzie to nie jest komentarz, ale kompilator 
potraktuje ten takst jako komentarz. 

 
Przyk ad  2 : 
Program iloczyn; 
var czynnik1,czynnik2, { czynniki } 
 

iloczyn :  

(*wynik mnoLenia *) 

 

integer;   

 

{ typ  zniennych } 

BEGIN 
czynnik1:=2 ;     {przypisanie wartoOci do} 
czynnik2:=2 ;   

{   czynników     } 

iloczyn:=czynnik1 * czynnik1;  

 

{wyliczenie  wyniku mnoLenia} 

writeln('Wynik mnoLenia ' , czynnik1,' przez 
',czynnik2,' wynosi : ',iloczyn ) ;       
END. 

background image

J zyki programowania -Pascal                                   Strona 14

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

3.4.3 

Instrukcja przypisania   

Nadawanie warto8ci nast puje bardzo cz sto za po8rednictwem instrukcji 
przypisania, która ma ogólnC postaS :

zmienna := wyraLenie ; 

 
Operator „ :=  ” nazywa si operatorem przypisania , symbol zmienna 
oznacza tu identyfikator; wyra4enie musi byS typu konwertowanego do 
typu zmiennej. W wersji najprostszej: 
zmienna := staIa ;

liczba  := 10 ; 

czytamy : zmiennej liczba przypisz warto8S 10 ;  
Program Instr_przypisania_1 ; 
var liczba :integer ;  
BEGIN 
liczba :=1; 
writeln(liczba); 
liczba :=100; 
writeln(liczba); 
liczba := -237; 
writeln(liczba); 
END. 

{wynik wykonania programu  
1
100 
-237 } 
Istnieje równie4 inny schemat instrukcji przypisania mianowicie 
 
zmienna1 := zmienna2 ; 
 

Jednak4e ta postaS dopuszczalna jest gdy zajdzie jedno z: 

typy zmiennych sC zgodne 
zmienna zmienna2 jest typu konwertowanego typu zmiennej 

zmienna1 

o typ real (zmienna1) i typ Integer (zmienna1)  

background image

J zyki programowania -Pascal                                   Strona 15

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Przyk ad 

var a,b :integer; 
begin 
 a:=1; 
 b:=a; 
 writeln(c); 
 writeln(b); 
end . 

Zmienne by y tego samego typu . 
Przyk ad 
 
var     s : string ; 
const  c : char = 'Z'; 
bagin 
 s := c ; 
 writeln(c); 
 writeln(s); 
end . 

zmienne mia y ró4ne typy  
 
Program Instr_przypisania_2 ; 
var liczba  : integer , 
 

litera   :  char; 

 
BEGIN 
liczba := 33;   

 

 

{wynik wykonania 

programu } 
litera := char (liczba) 

 

 

{ ! } 

writeln(litera); 
END. 

 

background image

J zyki programowania -Pascal                                   Strona 16

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Program const_var; 
const 
 

c

: char='A'; 

 

s1 : string[1]='Q'; 

 

s

: string='A'; 

 

s10: string[10]='kot'; 

 

st : string='To jest napis'; 

begin 
 

writeln('******************'); 

 

writeln('s1 :',s1); 

 

writeln('c :',c); 

 

s1:='kkk'; 

 

writeln('s1 :',s1); 

 

c:='u'; 

 

writeln('s10 :',s10); 

 

s10:=st; 

 

writeln('s10 :',s10); 

 

writeln('c :',c) 

end. 

 

3.4.3.1 Ró4nice pomi dzy identyfikatorami sta ych i 

zmiennych

1. warto8ci sta ych sC okre8lone przed rozpocz ciem programu natomiast 

zmienne otrzymujC warto8S w trakcie wykonywania programu ; 

2.  ( TP ) tylko zmienne deklarowane w sekcji CONST majC nadanC

warto8S przed rozpocz ciem programu ; 

3. warto8S identyfikatora sta ej nie mo4e ulec zmianie podczas 

wykonywania programu , podczas gdy zmienna mo4e przyjmowaS
ró4ne warto8ci  

 
W instrukcji przypisania        zmienna := staIa ;

warto8S sta ej musi byS tego samego typu , co typ zmiennej . Jedynym 
wyjCtkiem jest instrukcja  przypisania zmiennej typu rzeczywistego sta ej 
typu ca kowitego np. 

background image

J zyki programowania -Pascal                                   Strona 17

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

program Real_int; 
var r :real; 
begin 
r := 100 ; 
end.  

Które z definicji sC poprawnymi definicjami sta ych : 
(a)  CONST Licza  

= 250 ; 

(b)  CONST Liczba  

= 1,2 ; 

(c)  CONST Znak  

= 'A' ; 

(d)  CONST Max  = 250 ;min= -150.7; 
(e)  CONST zakres  

= 250 ..500; 

(f)  CONST L : integer   = 250 ; 
(g)  CONST L : real    

= 250 ; 

(h)  CONST L : string  

= 250 ; 

(i)  CONST L : char    

= 250 ; 

 
Które ze zmiennych sC zadeklarowane poprawnie : 
(a) VAR  1a,2a,3a 

:  Real; 

(b) VAR  a1,a2,a3  : Real;  

 

b1  : char;  

 

a3 : Integer 

(c) VAR  a :Char ; b Integer ; c : real;  
(d) VAR  a1;a2;a3  : Real ,  
 

c

: char ;  

 
Zadanie  
Napiszmy program , który wydrukuje tekst : S = 1+2 + 3+4+5 , a w 
nast pnym wierszu warto8S zmiennej S . 
 Program Komentarz_1; 
var    S    : Integer; 
 

ST   : String; 

begin 
 

St := ' S = 1+2+3+4+5 ' ; 

 

S :=  1+2+3+4+5  ; 

 writeln(st); 
 writeln(s); 
end. 

background image

J zyki programowania -Pascal                                   Strona 18

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

4 Wyra enia 

4.1

4.1

4.1

4.1   Wyra#enia arytmetyczne

Wyra#enia arytmetyczne

Wyra#enia arytmetyczne

Wyra#enia arytmetyczne  

Wyra4enia arytmetyczne sk adajC si z elementów typów ca kowitych lub 
rzeczywistych.  
Proste wyra4enia arytmetyczne okre8lajC operacj arytmetycznC
np. 25 + 130, gdzie „ 25 ” i „130” to argumenty wyra4enia, a znak „+” 
operatorem wyra4enia. Po wykonaniu operacji okre8lonej przez operator 
otrzymujemy wynik wyra4enia; W naszym przyk adzie „155 ”. 
Warto8S tego wyniku mo4emy wydrukowaS:
np. 
 

writeln(25+130) ; 

Wynik ten mo4emy zapisaS do pewnej(odpowiedniej) zmiennej: 
np.  
  var I :Integer; 
.... 
  I := 25+130 ;  

Ta w asno8S prowadzi nas do nast pnego schematu instrukcji przypisania: 

zmienna := wyraLenie ; 

!!!Warto8S wyra4enia musi byS typu konwertowanego do danej zmiennej! 
 
Niepoprawna b dzie wi c instrukcja  
Var s   : string; 
 

I

: Byte; 

... 
s := 10+11; 
I := 3.5; 
... 
I := 257;   

Byte  0..255  

 

257 = 256+1 

background image

J zyki programowania -Pascal                                   Strona 19

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

5 Operatory 

 

5.1.1 Operatory 

arytmetyczne 

Operatory sC to symbole wiC4Cce argumenty wyra4enia. Je8li wyra4enie 
zawiera ró4ne operatory to wyliczanie warto8ci przebiega zgodnie z 
kolejno8ciC priorytetów. 

5.1.1.1 Operatory 

jednoargumentowe

+

(znak dodatni argumentu) 

 

-

(znak ujemny argumentu) 

5.1.1.2 Operatory 

dwuargumentowe

Op Znaczenie 

Typ 

argumentów

Typ wyniku 

+

Dodawanie 

-

Odejmowanie 

*

Mno4enie 

Integer  je8li ka4dy

argument jest typu 

Integer , wpp  Real

/

Dzielenie 

Integer 

lub  

Real 

Real 

MOD Reszta z dzielenia 

DIV Cz 8S ca kowita z 

dzielenia 

 

Integer 

Integer 

5.1.2 Priorytet 

operatorów 

Operatory    +  - majC niski priorytet , pozosta e wysoki . 
Wyra4enie wykonywane jest od prawej do lewej strony najpierw 
wykonywane sC operacje o wysokim priorytecie , a nast pnie o niskim . 

5.1.3 Przyk ady 

ObliczyS warto8S i okre8liS typ wyra4enia :  
 
38 + 39 div 6 * 6 - 66 mod 8 = 
38 +      6  *  6 - 66 mod 8 = 
38 +       36     - 66 mod 8 = 
38 +       36     -       2  = 
 

74           -       2  = 

 

72 

Wszystkie argumenty by y typu Integer, wi c wynik te4 b dzie typu 

Integer 

background image

J zyki programowania -Pascal                                   Strona 20

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

W sytuacji gdy nie wystarczy  poprzestanie na kolejno8ci operacji 

wynikajCce z priorytetów dzia a. mo4na kolejno8S wymusiS stosujCc
nawiasy.  
3.5 *(16 div 5 ) + 4.5 = 15.0  

( Real ) 

 
Argumentami wyra4enia mogC byS tak4e zmienne  np 
var a,b :integer ; 
 
a* 19+ b / 3   ( Real)  

5.2

5.2

5.2

5.2   Wyra#enia logiczne 

Wyra#enia logiczne 

Wyra#enia logiczne 

Wyra#enia logiczne   

Wyra4eniem logicznym nazywamy wyra4enie dajCce w wyniku warto8S 
typu BOOLEAN , czyli jednC z dwóch sta ych : True , False 

W wyra4eniach logicznych mogC wyst powaS operatory relacji i 
operatory logiczne 

5.3

5.3

5.3

5.3   Operatory relacji

Operatory relacji

Operatory relacji

Operatory relacji  

Operat
or 

Znaczenie 

=

Równo8S 

<

Mniejszo8S 

>

Wi kszo8S 

<> Ró4no8S 
<= mniejszo8S lub równo8S 
>= wi kszo8S lub równo8S 

in przynale4no8S do zbioru 

NP 
Wyra4enie  

 

         Warto8S 

65.6 > 65 

True 

65.6 < 65 

False 

10 <> 11 

True 

6 in [0..9] 

True 

Uwaga:  
 Argumenty operacji relacji muszC byS tego samego typu bCdI typów 
konwertowanych . 

background image

J zyki programowania -Pascal                                   Strona 21

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

5.4

5.4

5.4

5.4   Operatory logiczne

Operatory logiczne

Operatory logiczne

Operatory logiczne  

Argumenty muszC byS typu BOOLEAN 

Operator Znaczenie Ilo8S argumentów 

NOT negacja 

AND koniunkcja 

OR alternatywa 

XOR róznica 

symetyczna 

Wyniki operacji logicznych

 

A1

 

A2

 

not 

x

not 

y

and 

y x

or 

y x

xor

y

True  True  False  False  True  True  False 
True  False False  True  False  True  True 
False True  True  False  False  True  True 
False False True  True  False  False  False 

5.4.1 Priorytet 

operatorów 

Priorytet Operatory 

0 (najwy4szy ) 

wyra4enia w nawiasach  

1

NOT 

2

* / DIV  MOD  AND   

3

+ - OR   XOR 

4

< <=   >=   =  <> 

background image

J zyki programowania -Pascal                                   Strona 22

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

6 Instrukcje  

Instrukcja pusta. 
Instrukcja przypisania . 
zmienna := wyra enie ; 

Instrukcja procedury . 
Nazwa; lub Nazwa(parametry); 

6.1

6.1

6.1

6.1   Instrukcje wej)cia /wyj)cia 

Instrukcje wej)cia /wyj)cia 

Instrukcje wej)cia /wyj)cia 

Instrukcje wej)cia /wyj)cia   
(Input/ Output )

(Input/ Output )

(Input/ Output )

(Input/ Output )  

6.1.1 Wyj*cie - procedury Write , Writeln  

Instrukcja procedury write (writeln ) ma ogólnC postaS :

write    (f , p

1

, p

2

,..,p

n

); 

 

writeln  (f , p

1

, p

2

,..,p

n

); 

gdzie f -oznacza plik dyskowy ( parametr ten mo4e byS pomini ty wtedy 
dane wypisywane sC na konsol , czyli ekran monitora)  
natomiast ka4dy z p

i

mo4e wyst powaS w postaci  

  p

p:m  

p:m:n 

p

jest typu prostego  lub string  ;

m

okre8la szeroko8S pola w jakim dane b dC wypisywane ; 

n

okre8la ilo8S miejsc po przecinku (tylko typy rzeczywiste) 

 

n- wyra4enia  ca kowite 

 
Program Wypisz ; 
var l  : Byte; 
 

i

: Integer; 

 

r

: Real; 

begin 
 

i:=2; 

 

l:=7; 

 

r:= l / i ; 

 

write (1:4 ); 

 

write (l : 4 ); 

 

write(r:5:2); 

end. 

Jaki b dzie wynik wykonania programu ? 

background image

J zyki programowania -Pascal                                   Strona 23

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Co si stanie gdy zmienimy instrukcj na : 
 

write(r:1:2); 

 

write(r:4:1); 

Procedury write i writeln  mogC byS wywo ywane ze zmiennC ilo8ciC

parametrów . Ponadto parametry mogC mieS ró4ne typy . 

6.1.2 Wej*cie - procedury Read , ReadLn  

Instrukcja procedury read (readln ) ma ogólnC postaS :

read    (f , p

1

, p

2

,..,p

n

); 

 

readln (f , p

1

, p

2

,..,p

n

); 

gdzie f  majC takie same znaczenie jak w przypadku procedury Write , 

natomiast ka4de p

i

jest typu ca kowitego , rzeczywistego , char lub string  ; 

Przyk ad 1: 
Program Czytaj_1; 
var i : Integer; 
begin 
 

Read (i); 

 

writeln; 

 

writeln(i); 

end. 

Efektem wykonania powy4szego programu b dzie  
1.  wczytanie z konsoli ( klawiatura ) liczby ca kowitej  
2. nast pnie liczba ta zostanie ponownie wy8wietlona  
  - wypisana b dzie warto8S zmiennej „ i ” 
Przyk ad 2: 
Program Czytaj_2; 
var s1,s2 :string; 
 
begin 
 

Readln(s1); 

 

writeln; 

 

writeln(s1); 

 

Readln(s2); 

 

writeln; 

 

writeln(s1,s2); 

end. 

Program Czytaj_2_b; 
var s1,s2 :string; 
 
begin 
 

Read(s1); 

 

writeln; 

 

writeln(s1); 

 

Read(s2); 

 

writeln; 

 

writeln(s1,s2); 

end.

background image

J zyki programowania -Pascal                                   Strona 24

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Jako Swiczenie na laboratorium pozostawiam sprawdzenie czy istniejC
ró4nice w wykonaniu tych dwóch wersji programów . Je8li tak , to co 
mo4e t umaczyS takie ró4nice . 
Procedura Readln mo4e rówine4 zawieraS wi kszC ilo8S parametrów - 
mo4e te4 ich wogóle nie byS. Taki przypadek b dzie bardzo u4yteczny w 
celu zatrzymania wykonywania programu . 
Program Stoped; 
 begin 
 ... 
 readln; 
end. 
 

6.2

6.2

6.2

6.2   Instrukcje strukturalne

 Instrukcje strukturalne

 Instrukcje strukturalne

 Instrukcje strukturalne  

Poznane  jak dotCd instrukcje by y instrukcjami prostymi  - nie zawiera y
w swej sk adni  innych  instrukcji . Natomiast instrukcje strukturalne sC
konstrukcjami j zykowymi zbudowanymi z ciCgów instrukcji na 
podstawie okre8lonych schematów strukturyzacji .  

6.2.1 

 Instrukcje z o/one 

Instrukcja z o4ona ma nast pujCcC budow :

BEGIN 
  I1; I2 ; ...In 
END 
gdzie  I1; I2 ; ...In sC instrukcjami a s owa kluczowe BEGIN i 
END  reprezentujC tzw. nawiasy instrukcyjne . 

Instrukcja z o4ona zast puj wi c ciCg instrukcji , a w a8ciwie to zamienia 
ciCg instrukcji w jednC instrukcj .Takie podej8cie jest bardzo u4yteczne  , 
gdy musimy u4yS wielu instrukcji natomiast sk adnia dopuszcza tylko 
jednC .
Separatorem instrukcji jest 8rednik  „ ; ” . wyst puje on pomi dzy 
ka4dymi dwoma instrukcjami . Mo4emy go równie4 postawiS po ostatniej 
instrukcji , wtedy oddzieli on tC instrukcj od nast pnej -  tym przypadku 
b dzie to instrukcja pusta .  
 

background image

J zyki programowania -Pascal                                   Strona 25

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

6.2.2 Instrukcja 

warunkowa 

 

Instrukcja wyboru  warunkowego : 
 
IF warunek THEN instrukcja_1 
  ELSE instrukcja_2  
 

Test

Instrukcja 1

Instrukcja 2

Instrukcja 3

Tak

Nie

 

Instrukcja ta jest równowa4na schematowi . W schemacie mo4e byS
opuszczona instrukcja 2 , a w sk adni mo4ebyS opuszczona fraza ELSE . 

 

IF warunek THEN instrukcja_1 

 
Warunek 
 musi byS wyra4eniem logicznym(Boolean), czyli dajCcym w 
wyniku warto8S boolowskC: True lub FALSE.

Natomiast Instrukcja1 Instrukcja2 muszC byS pojedynczymi 
instrukcjami.

Przyk ady : 
(a) IF X<>0 THEN y := 1/x ELSE write('Dzilenie 

przez 0 '); 

(b) IF (X>0) AND(X=1) THEN  ELSE y:= 1/x; 
(c) IF B < 0 THEN y:= B - 3 ELSE ; 

 
ELSE w przyk adzie (c) mo4e byS pomini te , w przyk adzie (b) mo4na go 

pominCS zmieniajCc warunek na przeciwny czyli  

(b`) 

IF NOT( (X>0) AND(X=1) ) THEN  

 

y:= 1/x; 

background image

J zyki programowania -Pascal                                   Strona 26

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

(d) IF delta > 0 then  
 

begin 

 

x1:= (-b - Sqrt(delta))/(2*a); 

 

x2:= (-b - Sqrt(delta))/(2*a); 

 

end 

 ELSE 
 

begin 

 

x1:= -b /(2*a); 

 

x2:=x1; 

 

end; 

 
Poniewa4 w sk adni instrukcji warunkowej wyst pujC pojedyncze 
instrukcje , a my musieli8my u4yS ich ciCgi zastosowali8my instrukcje 
z o4one , które zamieni o nam ciCgi instrukcji w pojedyncze instrukcje . 
 
Instrukcja wyst pujCca po THEN czy te4 po ELSE mo4e byS równie4
instrukcjC warunkowC IF 

Np 
IF test1 THEN 
 

IF test2 THEN 

 

IF test3 THEN 

 

Instrukcja1 

 

ELSE  

 

ELSE  

ELSE 
 

co uwidacznia nast pujCcy schemat blokowy  
 

Test 2

Test 3

Instrukcja 1

Test 1

True

True

True

False

False

False

background image

J zyki programowania -Pascal                                   Strona 27

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

(e) IF delta > 0 then  
 

begin 

 

x1:= (-b - Sqrt(delta))/(2*a); 

 

x2:= (-b - Sqrt(delta))/(2*a); 

 

end 

  ELSE IF delta = 0 
 

begin 

 

x1:= -b /(2*a); 

 

x2:=x1; 

 

end 

 ELSE  
 

Write('Nie ma pierwiastków rzeczywistych'); 

Przyk ad: 
program oceny; 
var ocena:real; 
 

wynik:integer; 

Begin 
wynik:=90; 
IF wynik >=30 then 
 IF wynik >=35 then 
  IF wynik >=40 then 
 

IF wynik >=50 then 

 

IF wynik >=60 then 

 

IF wynik >=70 then 

 

IF wynik >=80 then 

 

IF wynik >=90 then 

 

Ocena:=5.0 

 

ELSE Ocena:=4.5 

 

ELSE Ocena:=4.0 

 

ELSE Ocena:=3.5 

 

ELSE Ocena:=3.0 

 

ELSE Ocena:=2.5 

 

ELSE Ocena:=2.0 

 

ELSE Ocena:=1.5 

  ELSE Ocena:=1.0; 
  writeln(ocena:4:1); 
End. 

Program ten 
przyporzCdkuje 
wynikowi  
z zakresu 1 - 100 
punktów 
odpowiedniC
ocen . Punkty 
okre8lajC procent 
odpowiedzi 
poprawnych. 
Uk ad 
konstrukcji 
IF...THEN 
...ELSE  

pokazuje nam , 
4e program ten 
sk ada si z
wielu 
zagnie4d4onych 
instrukcji warun-
kowych.  
 

background image

J zyki programowania -Pascal                                   Strona 28

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

program ifelse; 
var test,test2:boolean; 
 

l1,l2:integer; 

Begin 
 

test:=25*26<27*24; 

 IF test then 
 

IF l2<>0 then 

 

writeln(l1/l2) 

 ELSE writeln('Test 
False'); 
End. 

 

Poddajmy dog bnej analizie 
przytoczony przyk ad programu. 
Wyra4enie widzimy tu dwie 
instrukcje warunkowe . Jednak 
odnajdujemy tylko jedno s owo 
ELSE , co oznacza , ze jedna 
instrukcja jest postaci  
IF...THEN...ELSE 
natomiast druga 
IF...THEN... 
Nale4y postawiS sobie pytanie , do 
którego IF odnosi si to ELSE ?  

My8l , 4e bardzo pomocne by oby tu stworzenie schematu blokowego 

 

Test

l2<>0

True

True

False 

L1/L2

Test False

False 

 

Na jego podstawie widzimy wyraInie , sposób wykonywania naszej 

instrukcji warunkowej . 

 

6.2.3 

Instrukcja wyboru  CASE 

 
Sk adnia instrukcji CASE jest nast pujCca  
 
CASE
 selektor OF 

pierwsza lista sta ych wyboru : I1; 

  druga lista sta ych wyboru  : I2; 
 

n-ta  lista sta ych wyboru  : In 

 ELSE Ie; 
END ;  

background image

J zyki programowania -Pascal                                   Strona 29

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

gdzie I1..In,Ie sC instrukcjami prostymi lub z o4onymi  ,  selektor jest 
wyra4eniem typu porzCdkowego ( Integer,Char,Boolean ale NIE 
Real ). 

Listy sta ych sC albo wymienionymi warto8ciami  
 

np   1,2,57 

albo przedzia ami np 

1..9 

albo po Cczeniem np 

 

0..9,11,12,17..35 

 

Przyk ad 1: 
Case wynik DIV 10 of 
 10,9 : 

Ocena:=5.0 

 8 

Ocena:=4.5 

 7 

Ocena:=4.0 

 6 

Ocena:=3.5 

 5 

Ocena:=3.0 

 4 

Ocena:=2.5 

 3 

Ocena:=2.0 

 0,1,2 

Ocena:=1.0 

End; 

 

Przyk ad 2 
program Wybor; 
var droga : char; 
 

czas : real; 

begin 
Read(Droga); 
 Case droga of  
 ''A','a' : czas:=3.0; 
 

'B','b' : 

czas 

:=4.0; 

 ''C','c' : czas 

:=4.5; 

 ELSE czas :=0; 
 end; 
end. 

Instrukcja CASE w wielu przypadkach jest bardziej czytelna ni4
po Cczenie wielu  zagnie4dzonych  instrukcji IF .Dobrym przyk adem 

mo4e tu byS wyliczanie ocen . 
Zarówno w ka4dej z instrukcji IF jak i w instrukcji CASE mogC byS

opuszczone fragmentu zawierajCce instrukcje wykonywane w przypadku 
niespe nienia warunku (w CASE 4adnego z warunków). 
W instrukcji CASE ELSE mo4e nie wyst powaS w niektórych 

implementacjach Pascala , standard Pascala jej nie zawiera - jest to jednak 
poprawna konstrukcja Turbo Pascala 
Program realCase; 
var x:real;  a:integer;s:string; 
begin 

background image

J zyki programowania -Pascal                                   Strona 30

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

read(a); 
x:=sqrt(a)/a; 
CASE x OF 
 

1: s:='Liczba dodatnia'; 

 

-1: s:='Liczba ujemna'; 

 

0:  s:='Liczba 0' 

end; 
writeln(s); 
end.   

Czy ten program jest poprawnie zbudowany . Widzimy tu b dne u4ycie 
instrukcji CASE . Nie jest dozwolone , aby selektor by wyra4eniem 

(zmienna czy te4 sta C ) rzeczywistym . 
Nale4y w instrukcji CASE wyra4enie x zastCpiS Trunc(x). Wynikiem tej 

funkcji jest cz 8S ca kowita z liczby x . 
Program nie b dzie dzia a poprawnie , gdy podamy liczb 0. 
 

6.3

6.3

6.3

6.3   Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje iteracyjne  

Iteracje ( p tle) pozwalajC na opisani w prosty sposób czynno8ci które sC
wykonywane wielokrotnie . W j zyku Pascal istniejC dwa rodzaje p tli  
 

Czy

spe nione sC

warunki 

wyj8cia ? 

Nie

Tre8S p tli 

Czy

spe nione sC

warunki 

wej8cia ? 

Nie

Tre8S p tli 

Tak

Tak

background image

J zyki programowania -Pascal                                   Strona 31

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

6.3.1 Instrukcja 

FOR 

 

Sk adnia instrukcji : 
 
FOR zm:=wp TO wk  DO  ;
gdzie  
zm - Zmienna sterujCca p tlC
wp - warto8S poczCtkowa 
wk - warto8S ko.cowa 
 
I

- pojedyncza instrukcja 

 
Instrukcja OR jest realizacjC p tli z warunkiem wej8cia . Jest ona pewnym 
wariantem p tli WHILE.  

 

Sk adnia instrukcji : 
FOR zm:=wp DOWNTO wk  DO  
;
gdzie  
zm - Zmienna sterujCca p tlC
wp - warto8S poczCtkowa 
wk - warto8S ko.cowa 
I

- pojedyncza instrukcja 

 

P tla FOR to przyk ad iteracji ograniczonej – z góry wiadomo ile razy 
wykona si dana p tla. 
UWAGA!
W tre8ci p tli nie wolno zmieniaS warto8ci zmiennej sterujCcej p tlC.

Przyk ad: 
var zn:char;k:Integer; 
begin 
  zn:='*'; 
 

for k:=1 to 8 do 

 

write(zn:k); 

end. 

False

I

True

Zm <= wk 

Zm:=wp 

Zm:=succ(zm) 

False

I

True

Zm >= wk 

Zm:=wp 

Zm:=pred(zm) 

background image

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. 

background image

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. 

background image

J zyki programowania -Pascal                                   Strona 34

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

6.3.2 Instrukcja 

WHILE 

 

Sk adnia 
instrukcji : 
 

WHILE   wl DO  ;
gdzie  
wl - wyra4enie logiczne 
I

- pojedyncza instrukcja 

 

Instrukcja WHILE jest realizacjC p tli z warunkiem wej8cia .Instrukcja 
oznacza: Dopóki prawdziwe jest wyra enie WL wykonuj instrukcj I .

Przyk ady : 
Program Gwazdka; 
var zn:char;k:Integer; 
begin 
zn:='*'; 
k:=1; 
while k<=8 do 
 begin 
 write(zn:k); 
 k:=k+1; 
 end; 

Program Liczby; 
uses crt; 
begin 
 i:byte; 
  i:=0; 
  while i<10  
 do 

 

 

begin 

 

i:=i+1; 

 

writeln(i);  

 end; 
end. 

xxx 

False

I

True

WL

background image

J zyki programowania -Pascal                                   Strona 35

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

PROGRAM Petla2; 
USES Crt; 
VAR i, x, y, Nwd : Integer; 
  BEGIN 
  ClrScr; 
  Write('Podaj 1-sza liczbe : ');  
  ReadLn(x); 
  Write('Podaj 2-ga liczbe  : ');  
  ReadLn(y); 
  i:=1; 
  WHILE (x>i) Or (y>i) DO 
 

Begin 

 

If (x Mod i=0) And (y Mod i=0) Then Nwd:=i; 

 

i:=i+1; 

 

End; 

  Write('Najwiekszy wspolny dzielnik = ', Nwd); 
  ReadKey; 
END. 

6.3.3 Instrukcja 

Repeat 

 

False

True

WL

In;

I1;

...

 

Sk adnia instrukcji : 
 
REPEAT  I1; ... In UNTIL wl ; 
gdzie  
wl - 

wyra4enie logiczne 

I1, ..,In 

- instrukcje 

 
Instrukcja REPEAT jest realizacjC p tli z warunkiem wyj8cia. Instrukcja 

oznacza:  Wykonuj instrukcj I1,..,!n  a prawdziwe b dzie wyra enie WL .
Dowolna p tla zrealizowana za pomocC instrukcji WHILE mo4e byS
zbudowana za pomocC instrukcji REPEAT. Twierdzenie odwrotne nie jest 

prawdziwe . 
 

background image

J zyki programowania -Pascal                                   Strona 36

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Przyk ad : 
Read(zn); 
WHILE zn <>'*' do 
 begin 
 

write(zn); 

 

read(zn); 

 end; 
writeln; 
 REPEAT zn <>'*'  
 

read(zn); 

 

if  zn <> '*'  then  

 

write(zn); 

 UNTIL zn =*'  
writeln 
 

Uses CRT; 
Var 
 licz:byte; 
 
Begin 
 ClrScr; 
 REPEAT 
 

Write('Wpisz jak%O 

liczb[ (0-wyjscie) : 
'); 
 

ReadLn(licz); 

 

WriteLn('Potega 

liczby ',licz,' to 
',licz*licz); 
 

WriteLn; 

 UNTIL licz=0; 
End.

background image

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. 

background image

J zyki programowania -Pascal                                   Strona 38

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

6.4

6.4

6.4

6.4   Inne instrukcje

Inne instrukcje

Inne instrukcje

Inne instrukcje  

6.4.1 Instrukcja 

kodu 

Posiada nast pujCcC sk adni :

INLINE (lista_elementów); 

 
Wszystkie elementy lis ta_elementów oddzielone sC od siebie 

uko8nikami i mogC byS:

sta ymi okre8lajCcymi warto8ci liczbowe  
identyfikatorami zmiennych  
identyfikatorami zmiennych ze sta C poprzedzonC + lub -  
operatorami rozmiaru kody <i>  
Przyk adowe u4ycie tej procedury: 
 
INLINE($EA/$F0/$FF/$00/$F0); {spowoduje 
zresetowanie si[ komputera} 

6.4.2 Instrukcja 

asemblerowa 

 
Sk adnia jej jest nast pujCca:
ASM 
  Instrukcja; 
  ... 
  Instrukcja; 
END; 

 

Przyk ad 
asm 
 mov al,0edh 
 out 60h,al 
 in al,64h 
 mov al,x 
 end; 

6.4.3 Instrukcja 

skoku 

Label etykieta  
Begin 
... 
Goto etykieta 
... 
etykieta: 

Instrukcja ta mo4e byS przyczynC zaciemniania kodu programu i nale4y jej 
unikaS.

background image

J zyki programowania -Pascal                                   Strona 39

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

Praogam dane; 
Label Wyjscie: 
... 
Bebin 
For I:=1 to 1000 do  
  For j:=2 to 2000 do 
 

For k:=3 to 3000 do 

 

Begin 

... 

 

If t[I,j,k]=0 then goto wyjscie 

 

else 

 

... 

 

End; 

 Write('Brak zera'); exit; 
Wyjscie: 
 Write('Zero na pozycji’ i,' ',j,' ',k) 
End; 
 

6.4.4  Instrukcje Break i Continue 

Break   

– 

 przerwanie tre8ci bloku p tli 

Continue   – 

Opuszczenie reszty tre8ci bloku p tli 

 
Program BC; 
var i,x,y:Integer; 
 
begin 
 

Write ('podaj dwie liczby caIkowite'); 

 

for i:=1 to 32000 do 

 

begin 

 

Read(x,y); 

 

if (x=0) and (y=0) then break; 

 

if (x=0)  or (y=0) then continue; 

 

writeln(x/y:5:2, ' ' , y/x :5:2); 

 

end 

end. 

background image

J zyki programowania -Pascal                                   Strona 40

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

7 Typy danych c.d. 

7.1

7.1

7.1

7.1   Typy wprowadzone wcze)ciej

Typy wprowadzone wcze)ciej

Typy wprowadzone wcze)ciej

Typy wprowadzone wcze)ciej  

Typy ca kowite   
  Byte, Short, Integer,  Word, Longint 

Typy rzeczywiste 
 Real, single, double, extended 

Typ Logiczny  Boolean 

Typ Znakowy  Char 

Typ Napisowy  String 

Typ String jest równowa4ny String[255] co oznacza 

tablic 255 znaków. 

 

7.2

7.2

7.2

7.2   Typ wyliczeniowy

Typ wyliczeniowy

Typ wyliczeniowy

Typ wyliczeniowy  

Typ definiowany przez u4ytkownika. 
Type Dni=(Poniedzialek, Wtorek, Sroda, Czwartek, 

Piatek, Sobota, Niedziela); 

var d:dni; 
 
begin 
 for d:= Poniedzialek to piatek do 
  writeln ('DziO do pracy '); 
end. 

7.3

7.3

7.3

7.3   Typ okrojony

Typ okrojony

Typ okrojony

Typ okrojony  

Typ okrojony mo4e byS utworzony z dowolnego typu prostego (ca kowite, 
logiczny, znakowy, wyliczeniowy) poprzez zaw 4enie jego zakresu do 
jawnie podanego. 
Type LiteraMaIa

=

‘a’ ..’z’; 

 

Cyfra 

  = 

0..9; 

 

Dzienroboczy = 

Poniedzailek..Pi%tek; 

 

Wielko8S zaj tej pami ci przez typ okrojony jest taka sama jak przez typ 
bazowy. 

background image

J zyki programowania -Pascal                                   Strona 41

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

7.4

7.4

7.4

7.4   Typ zbiorowy 

Typ zbiorowy 

Typ zbiorowy 

Typ zbiorowy   

Type Nazwa = Set of Typ_ Elmenetowy 
 

Typ zbiorowy umo4liwia na operowanie podzbiorach typu 
Typ_Elementowy. Typ_Elementowy musi byS typem porzCdkowym 

o co najwy4ej 256 ró4nych warto8ciach. MoEe to byS typ okrojony bCdI
wyliczeniowy.  
Nie moEe to byS typ Integer – bo zawiera za du4o mo4liwych  

warto8ci. 
 
Type 
Dni=(Poniedzialek,Wtorek,Sroda,Czwartek,Piatek, 

Sobota,Niedziela); 

Robocze =set of Dni; 
 
var d : dni; 
 

r : Robocze; 

 
begin 
 

r:=[]; 

 

r :=r+ [poniedzialek..Piatek]; 

 

randomize; 

 

d:=dni(random(7)+1); 

 

if d in r then  

writeln (' DzieK roboczy',byte(d)) 

 

else  

writeln('DzieK wolny', byte(d)); 

 
end. 

background image

J zyki programowania -Pascal                                   Strona 42

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

7.5

7.5

7.5

7.5   Typ tablicowy

Typ tablicowy

Typ tablicowy

Typ tablicowy  

Jest to typ z o4ony. 
 

Array[typ_indeksowy]of typ_danych; 

 
Przyk ad: 
Type Liczby= Array[1..10] of byte; 
 

Nazwiska=  Array[100..1000] of String; 

 Dane=Array[Boolean]of 

Real; 

 Zadania=Array[Poniedzialek..Piatek]of 

String; 

 

Typ danych mo4e byS dowolnym wcze8niej okre8lonym typem. 
 
Program T1; 
Var 
  a:array[1..5] of 
Integer; 
 
Begin 
  ReadLn(a[1]); 
  ReadLn(a[2]); 
  ReadLn(a[3]); 
  ReadLn(a[4]); 
  ReadLn(a[5]); 
  WriteLn(a[5]); 
  WriteLn(a[4]); 
  WriteLn(a[3]); 
  WriteLn(a[2]); 
  WriteLn(a[1]); 
End. 

Program T1a; 
Var 
  a:array[1..5] of 
Integer; 
  i:byte; 
  Begin 
  for i :=1 to 5 do 
 

ReadLn(a[i]); 

  for i :=5 downto 1 do 
 

WriteLn(a[i]); 

 
End.

 

Zmienna typu tablicowego w pami ci zajmie  
Wielko8S jednego elementy *  Ilo8S Elementów 
W powy4szym przypadku SizeOf(Integer)* 5 czyli 2*5 = 10. 

background image

J zyki programowania -Pascal                                   Strona 43

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

7.5.1 String 

Typ String jest równowa4ny String[255] co oznacza 

tablic 255 znaków. Jest to maksymalna d ugo8S pojedynczego 

a.cuch. Mo4na ograniczyS go poprzez konstrukcj :

String[B] 
 gdzie B jest typu Byte  0..255 
var   Imie    

: String[15]; 

 

Nazwisko : 

String[25]; 

Typ String jest specyficznym typem tablicowym. 

Dopuszczalne sC oracje na zmiennej  
Operatory: 

+

=

<>    <    >    <=    >= 

var S: String; 
Read(s); 
Write(s); 
S:=’ Ala ma kota’ 
S:=’CoO innego’ + ’ moLe jeszcze coO’; 
If s => ’tekst’then Delete(s,2,10); 
Funkcje i procedury operujCce na elementach typu String: 

f.Length(S: String): Integer; 
f.Copy(S: String; Index: Integer; Count: 
 

Integer): String;   

f.Concat(s1 [, s2,..., sn]: String): String; 
f.Pos(Substr: String; S: String): Byte; 
p.Insert(Source: String; var S: String; 
 

Index: Integer); 

p.Delete(var S: String; Index: Integer; 
 

Count:Integer); 

Pos(Substr: String; S: String): Byte;   
var 
  s: string; 
begin 
  s := 'Ala ma kota'; 
  Delete(s,5,3);  Writeln(s); { 'Ala kota' } 
 Insert('znalazIa',s,5); 
  Writeln(s); { 'Ala ZnalazIa kota' } 
end. 

background image

J zyki programowania -Pascal                                   Strona 44

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

7.5.2 Tablice 

wielowymiarowe 

W konstrukcji 
Array[typ_indeksowy]of typ_danych; 
nic nie powiedziano o typ_danych. Mo4e to byS dowolny okre8lony 

wcze8niej, lub w tym momencie, typ danych. W szczególno8ci mo4e to byS
typ tablicowy. 
 

7.5.2.1 Tablice 

dwu-wymiarowe

Array[zakres1] of array [zakres2] of typ_danych 
Array[zakres1,zakres2] of typ_danych 
 
T2a=Array [1..10,1..20] of Real; 
T2b=Array [ char,1..3] of Char; 
T2c=Array [32..255,Boolean] of Byte; 

Ilo8S elementów tablicy równa si iloczynowi mnogo8ci typów 
indeksujCcych. Np. T2a posiada 10*20 czyli 200 elementów * 4B(typ 
Real),  czyli  Ccznie 800B. 
 
Ca a tablica musi zmie8ciS si w jednym segmencie danych 64KB.
Przyk ad: 
Var T: array['a'..'z',1..3] of  byte; 
 

C:char;I:byte; 

 

Begin 

 

Randomize; 

 

For c:= 'a' to 'z' do 

 

For I:=1 to 3 do 

 

T[c,I]:=Random(2); 

 

For I:=1 to 3 do 

 

begin 

 

For c:= 'a' to 'p' do 

 

If T[c,I]>0 then  Write('*') 

 

Else write(' '); 

 

Writeln; 

 

End; 

 

END. 

Co oznaczajC symbole T, T[c] , T[c,i].

background image

J zyki programowania -Pascal                                   Strona 45

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

Przyk ad: 

Program Przekatne; 
const N=6; M=7; 
Type Tablica2= Array[1..N,1..M] of char; 
var 
 T : Tablica2; 
 i,j,k,p:Integer; 
BEGIN 
 

Randomize; k:=1; 

 

For i:=1 to N do 

 

for j:=1 to M do 

 

T[i,j]:= chr(random(255-32)+32); 

 

for i:=1 to N do  begin 

 

for j:=1 to M do 

 

write(ord(t[i,j]):4); 

 

writeln 

 

end; 

 

if N<M then k:=N else k:=M; 

 

for i:=1 to K do 

 

writeln(ord(t[i,i]):i*4); 

 

for i:=1 to K do 

 

writeln(ord(t[i,M-i+1]):(M-i+1)*4); 

 

p:=K div 2; 

 

for i:=1 to p do 

 

writeln(ord(T[i,i]):i*4, 

ord(T[i,M-i+1]):(M-2*i+1)*4); 

 

if  odd(m) then 

 

begin 

 

inc(p);   writeln(ord(T[p,p]):p*4) 

 

end; 

  for i:=p+1 to K do 
 

writeln(ord(t[i,M-i+1]):(M-i+1)*4, 

ord(T[i,i]):(2*i-M-1)*4); 

END. 

background image

J zyki programowania -Pascal                                   Strona 46

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

7.5.2.2 Algorytmy dotyczCce tablic 

PROGRAM SortowanieBabel ; 
CONST   N = 10 ; 
VAR     A : ARRAY[1..N] OF Integer ; 

 
I,ZAM: Integer ; 
B : Integer ; 

BEGIN 
 

Randomize; 

FOR I := 1  TO N DO  

A[I]:=Random(199)-100; 

Writeln('Wylosowany wektor:') ; 
Writeln ; 
FOR I := 1 TO N DO  
 Write(A[I]:5) ; 
 
REPEAT 
ZAM := 0 ; 
 

FOR I := 1 TO N - 1 

DO BEGIN 
IF A[I]> A[I+1] 
THEN BEGIN 

B

:= A[I]; 

A[I]   := A[I+1]; 

A[I+1] := B; 

ZAM    := ZAM + 1 

END 

END 
UNTIL ZAM = 0 ; 
 
Writeln('Wektor po sortowaniu:') ; 
Writeln ; 
FOR I := 1 TO N DO  
 Write(A[I]:5) ; 

END. 

background image

J zyki programowania -Pascal                                   Strona 47

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

7.5.2.3 Tablice 

n-wymiarowe

Type 
Pozycja =[-10..10,-10..10,-10..10] of real; 
Tab3= Array [1..3,1..10,1,5] of  Boolean; 
Tab4= Array[Boolean,1..3,6..10,2..4]of Real; 
Tab5= Array[1..2,1.10,1..5,1..4,0..9] of 
Integer; 
Type 
 

Punkt   = Array[1..3]  of Real; 

 

Odcinek = Array[1..2]  of Punkt; 

 

Figura  = Array[1..4] of Punkt; 

 

Bryla   = Array[1..6] of Figura; 

 

Ruch    = Array[1..100] of Bryla; 

 

Nie istnieje ograniczenie, poza zaj to8ciC pami ci, na ilo8S wymiarów 
tablicy. Jednak4e niezmiernie rzadko stosuje si tablice o wi kszej 
ilo8ci ni4 3. Najcz 8ciej pojawiajC si tablice jedno i dwu wymiarowe. 
 
Wi ksza ilo8S wymiarów utrudnia okre8lenie adresu elementu, a tak4e
zale4no8ci pomi dzy sCsiadami. 
 
Czasami lepszym rozwiCzaniem jest skonstruowanie prostszego typu 
danych. 
 
Za ó4my za var B:BryIa; 

Co oznaczajC zmienne i czy poprawne sC odwo ani: 
B, B[1], B[1,2], B[1,2,3], B[1,2,3,4], 
B[1,2,3,4,5] 

7.5.2.4 Zgodno8S typów tablicowych

Type T1=Array[1..N] 

of 

integer; 

T2=Array[1..N] of integer; 
Var a1:T1;    a2:T2; 
 
a1:=a2;           a1:=T1(a2); 

background image

J zyki programowania -Pascal                                   Strona 48

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

8 Podprogramy 

8.1

8.1

8.1

8.1   Istota programowania proceduralnego

Istota programowania proceduralnego

Istota programowania proceduralnego

Istota programowania proceduralnego  

Historycznie ujmujCc pierwsze programy korzysta y z programowania 

liniowego. Nie wspominam tu z oczywistych wzgl dów j zyków 
maszynowych, czy te4 „j zyków” programowania pierwszych komputerów. 
Programowanie proceduralne umo4liwia podzia jednego wielkiego projektu 
na kilka mniejszych zada..

8.1.1 Poj9cie procedury  

 

Procedure NazwaProcedury var argument   : Typ_argumentu   ) ;

Deklaracje sta$ych i zmiennych lokalnych; 
Begin 

Cia$o procedury 

End;

8.1.2 Pojecie 

funkcji 

 

Function NazwaFunkcji  var  argument   :  Typ_argumentu    )

Typ_wyniku ; 

Deklaracje sta$ych i zmiennych lokalnych; 
Begin 

... 
 NazwaFunkcji:=wyra4enie typu Typ_wyniku;
... 
End;

,

;

,

;

background image

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 

background image

J zyki programowania -Pascal                                   Strona 50

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

a:= 2.0; b:= 3; 

 Writeln(b,’!=’silnia(b)); 
 w:= pot(a,b); 
 Writeln(a,’^’,b,’=’,w); 
End. 

8.1.4 Parametry 

podprogramów 

8.1.4.1 

Parametry formalne i aktualne, zmienne lokalne

Parametry podprogramów umo4liwiajC komunikacj procedury ze „8wiatem 
zewn tyrznym”, czyli programem g ównym bCdI innym podprogramem, 
który go wywo a . Dzi ki parametrom podprogramy dzia ajCc na 
sparametryzowanych danych mogC byS wielokrotnie u4ywane do 
wykonywania zada. na ró4nych danych. Parametry procedur i funkcji stajC
si ich zmiennymi lokalnymi. Je8li jaka8 zmienna globalna ma nazw
to4samC z nazwC parametru to w podprogramie b dzie widoczna tylko 
zmienna lokalna zwiCzana z parametrem. 

8.1.4.2 

Przekazywanie parametru poprzez wskaInik i warto8S 

Program Parametr_var; 
Procedure Dordaj( var x:Integer; y : Integer);
Begin

x :=  x + 2;
y :=  y + 3;

writeln('x =', x ,'y=',y );

End;

BEGIN 
 x := 5; 
 y := 6; 
 writeln('x =', x ,'y=',y );

dodaj( x, y); 

 writeln('x =', x ,'y=',y );
END. 

8.1.5 Inne 

przyk adowe funkcje 

Zamiana dwóch zmiennych liczbowych 

Maximum i minimum 

Podprogramy operujCce na elementach tablicy 

background image

J zyki programowania -Pascal                                   Strona 51

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

8.1.6 

Zalety programowanie z wykorzystaniem 

podprogramów 

Podzia programu na mniejsze segmenty 

Wielokrotne wykorzystanie tego samego kodu 

Realizacja podobnych problemów za pomocC tego samego podprogramu – 
wykorzystanie parametrów 

 

8.1.7 Rekurencja 
8.1.7.1 Cechy 

rekurencji

8.1.7.2 Wywo ywanie samej siebie
8.1.7.3 

W pewnych warunkach nast puje koniec wywo ywania 

rekurencyjnego

8.1.7.4 

Rekurencja a iteracja

Program  Rekurencja; 
Function Silnia(N:byte):longint; 
Begin 
 If N>0 then silnia:= n*silnia(N-1) 
 Else silnia:=1;   
End; 
 
Function Potega(x:real;N:byte):Real; 
Begin 
 If N>0 then potega:= x*potega(x,N-1) 
 Else potega:=1;   
End; 
Procedure Hanoi(zlodlo,pomoc,cel,ilosc:byte); 
Begin  
 If ilosc>0 then 
 begin 
 

Hanoi(zrodlo,cel,pomoc,ilesc-1); 

 

Przenies(zrodlo,cel);  

 

Hanoi(pomoc,zrodlo,cel,ilesc-1); 

 End; 
End; 
Gdzie procedura przenies mo4e mieS w najprostszym przepadku postaS:

background image

J zyki programowania -Pascal                                   Strona 52

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

Procedure przenies(zrodlo,cel:byte);  
Begin  
 Write(zrodlo,’->’,cel,’ ’);  
End; 

Ciekawszym rozwiCzaniem, by oby wykorzystanie tablic do 
przechowywania krC4ków (liczb) i wy8wietlania ich zawarto8ci. To 
umo4liwi o by zasymulowanie animacji. 
Mo4na te4 by zauwa4yS, 4e skoro zmienne zlodlo,pomoc,cel sC

liczbami powiedzmy 1, 2, 3 to  atwo zauwa4yS, i4
1 + 2 +3 = 6 . 
zlodlo+pomoc+cel = 6 czyli 
cel =6-zlodlo-pomoc 

a procedur mo zemy zamieniS na: 
 
Procedure Hanoi(zlodlo,pomoc,ilosc:byte); 

 

8.1.7.5 

Zalety i wady rekurencji

Zast puje iteracj
Prostota krótkiego kodu 

 

Uatwe przepe nienie stosu 
K opoty z rekurencyjnC definicjC problemu 

 

background image

J zyki programowania -Pascal                                   Strona 53

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

9 Rekordy i tablice rekordów 

9.1

9.1

9.1

9.1   Istota typu rekordowego

Istota typu rekordowego

Istota typu rekordowego

Istota typu rekordowego  

Typ rekordowy jest u4ywany do opisu obiektów o strukturze niejednorodnej, 
czyli takich, w których elementy sk adowe zawierajC dane ró4nych typów. W 
ten sposób mo4emy po CczyS w jednC ca o8S wiele ró4nych informacji. Jako 
przyk ad mo4e pos u4yS zbiór informacji o studencie. 

9.2

9.2

9.2

9.2   Rekordy z cz )ci3 s

Rekordy z cz )ci3 s

Rekordy z cz )ci3 s

Rekordy z cz )ci3 sta 3

ta 3

ta 3

ta 3 

Deklaracja typu rekordowego b dzie mia o nast pujCcy schemat. 
Type  Nazwa_typu =  

RECORD 

Pierwsza_lista_pól:T1; 
Druga_lista_pól :T2; 

 

n-ta lista_pól:TN; 

 

END; 

Gdzie ka4da lista pól to lista identyfikatorów oddzielonych on siebie 
przecinkami, a ka4de Ti to identyfikator dowolnego wcze8niej 
zdefiniowanego, przez u4ytkownika bCdI systemowego, typu. 
DataT=Record 
 

d,m,r:byte; 

 

end; 

 

AdresT=Record 

 

ulica :string[20]; 

 

miasto:string[15]; 
kod   :string[5]; 

 

end; 

 

Dane=record 

 

imie:String[15]; 

 

nazwisko:string[25]; 

 

data_ur:DataT; 

 

rok:0..6; 

 

adres:AdresT; 

 

wydzial,kierunek:byte; 

 

end; 

var D:Dane; 

background image

J zyki programowania -Pascal                                   Strona 54

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

Dost p do pól rekordu mamy za pomocC znaku „.”(kropka) oddzielajCcej 
nazw zmiennej od nazwy pola. 
 D.imie 
 D.Data_ur.d 

9.2.1 Instrukcja 

wi</<ca WITH 

Instrukcja postaci: 
With  zmienna_recordowa do 
 Instrukcja; 
powoduje, 4e w obr bie instrukcji Instrukcja mamy dost p do pól 
zmiennej zmienna_recordowa bez konieczno8ci pisania desygnatora w 

pe nej postaci. 
With D do 
Begin 
 

Write(’Podaj imi[ ’); 

Readln(imie); 
Write(’Podaj nazwisko ’); 

 

Readln(nazwisko); 

 

Write(’Podaj dat[ urodzenia (rr mm dd) ’); 

 

With data_ur do 

 

Readln(r,m.,d); 

 ... 
End; 

9.2.2  Rekord z wariantami  

Pola opisane w poprzednim rekordzie sC dost pne we wszystkich zmiennych 
tego typu. Mo4liwa jest równie4 struktura, w której w zmiennych 
rekordowych tego samego typu istniejC ró4ne pola. Pojawienie si kilku 
wariantów zmiennej rekordowej umo4liwia konstrukcja: 
Type  Nazwa_typu =  

RECORD 

 

Definicje pól staIych; 

CASE 

pole znacznikowe : Tc OF 

 

Pierwsza lista staIych wyboru:(Pierwsza 

lista pól); 
 

Druga lista staIych wyboru:(Druga lista 

pól); 

 ... 

 

M-ta lista staIych wyboru:(M-ta lista pól); 

 

background image

J zyki programowania -Pascal                                   Strona 55

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

END; 

Gdzie pole znacznikowe oznacza pole typu Tc (pole to mo4e byS

opuszczone, ale typ musi byS okre8lony). Pola w wariantach mogC ró4niS si
zarówno typem jak i ilo8ciC. Przy przydzielaniu pami ci kompilator dla 
ca ego wariantu przydzieli tyle pami ci ile zajmuje sumarycznie najwi ksza 
z list pól wariantowych. W poni4szym przyk adzie b dzie to 26 bajtów 
/sizeof(string[25])/. 
 
Wa4ne jest, 4e END ko.czy zarówno wariant jak i ca y opis typu 
rekordowego – powoduje to, 4e nie istnieje mo4liwo8S zdefiniowania 
wi kszej ni4 1 ilo8ci wariantów. 
Type  
 Tplec=(K,M); 
 Dane=record 
 

imie:String[15]; 

 

nazwisko:string[25]; 

 

data_ur:DataT; 

 

rok:0..6; 

 

adres:AdresT; 

 

wydzial,kierunek:byte; 

 

case  plec:Tplec of 

 

M:( Nazwajw:string[15]; 

 

Nrjw:word;    ); 

 

K:(NRodowe:string[25]) 

 

end; 

Dost p do pól wariantowych jak i pola znacznikowego jest taki sam jak w 
przy padku innych pól. 

background image

J zyki programowania -Pascal                                   Strona 56

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

10 Operacje wej.cia – wyj.cia 

10.1

10.1

10.1

10.1   Podstawowe operacje na plikach

Podstawowe operacje na plikach

Podstawowe operacje na plikach

Podstawowe operacje na plikach  

Wi kszo8S programów w trakcie pracy 
wykorzystuje pliki do przechowywania danych. Dotychczas przechowywa e8
dane w pami ci operacyjnej, tzn., 4e po zako.czeniu programu twoje 
dane ulega y zniszczeniu, po przeczytaniu tego rozdzia u to si zmieni. 
Ze wzgl du na typ danych przechowywanych w plikach mo4emy wyró4niS:

pliki tekstowe - zawierajCce tekst ; 

pliki elementowe (zdefiniowane) - elementami tych plików sC:
tablice, rekordy; 

pliki amorficzne - o nieokre8lonej strukturze. 

PierwszC rzeczC w momencie rozpocz cia pracy na plikach jest stworzenie 
zmiennej plikowej, 
robimy to tak: 
var 
nazwa_zmiennej : text; plik tekstowy 
nazwa_zmiennej : file of typ: plik zdefiniowany; 
nazwa_zmiennej : file plik o nieokreOlonej 
strukturze; 

Zanim zaczniemy wykonywaS jakiekolwiek operacje na pliku musimy 
zadeklarowanej zmiennej przypisaS "fizycznC" nazw pod jakC plik 
b dzie widoczny na dysku, robimy to tak: 
Assign(zmienna_plikowa,sciezka); 
zmienna_plikowa – wykonujCc operacje na pliku do niej b dziemy       

si odwo ywaS,

sciezka - 8cie4ka do pliku np.: 'C:\TEMP\PLIK.DAT' 

 
Uwaga: 
Procedura Assign nie sprawdza istnienia, a nawet mo4liwo8ci dost pu do 

pliku opisanego 8cie4kC.

background image

J zyki programowania -Pascal                                   Strona 57

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

Po skojarzeniu nale4y plik otworzyS. Mamy do wyboru kilka procedur 
otwierajCcych: 

Reset(zmienna_plikowa) - otwiera tylko plik ju4 istniejFcy,
brak pliku powoduje wystCpienie b du fatalnego wejscia-wyj8cia. Plik 
otwarty do czytania lub czytania i pisania. 

Rewrite(zmienna_plikowa) - tworzy plik, je8li ju4 istnieje to 
otwiera plik skojarzony ze zm_plikowC. Je8li plik ju4 istnieje to dane w 
nim zapisane zostanC nadpisane. Plik otwarty do pisania. 

Append(zmienna_plikowa) - Procedura ta dotyczy tylko plików 
tekstowych. Otwiera do pisania istniejCcy plik, (skojarzony ze 
zmiennC_plikowC). Dane b dC dopisywane na koniec pliku. 

Close(zmienna_plikowa) - zamyka plik skojarzony ze zmiennC
plikowC.

Function Eof(zm_Plik):Boolean; Zwraca TRUE gdy 
osiCgni ty zosta koniec pliku FALSE w przeciwnym przypadku. 

 
Zapisywanie i odczytywanie danych z pliku odbywa si za pomocC
procedur: 
Read, Readln, Write, Writeln: 
Read
(zmienna_plikowa,lista_argumentów); 
Write(zmienna_plikowa,lista_argumentów); 
Procedury te by y ju4 u4ywane wcze8niej, pierwszy parametr by wtedy 
opuszczany. Oznacza o to operacje na specjalnym pliku tekstowym – 
konsoli.  Pliku tego mo4na u4ywaS jawnie: 

  var plikwe,plikwy; 

... 

  Assign(plikwe,’’); 
  Assign(plikwy,’’); 
  Reset(plikwe); 
  Rewrite(plikwy); 
... 
read(plikwe,n); 
for i:=1 to 10 do 
writeln(plikwy,'Tekst na ekran(',n,')razy'); 

 
Sk adnia procedur czytania i pisania z plików powinna wi c byS znana . 

background image

J zyki programowania -Pascal                                   Strona 58

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

10.2

10.2

10.2

10.2   Pliki tekstowe

Pliki tekstowe

Pliki tekstowe

Pliki tekstowe  

Konsola – plik tekstowy standardowo otwarty do czytania i pisania. 
Metody otwarcia: 
Reset – tylko do czytania  
Rewrite – tylko do pisania 
Append –do aktualizacji, czyli pisania na ko.cu pliku. 

 

10.2.1  Plik tekstowy a plik file of char 

 
Program pliki_tekstowe; 
var 
plik_wejsciowy : text; 
plik_wyjsciowy : file of char; 
znak : char; 
begin 
Assign(plik_wejsciowy, 'plik.in'); 
Assign(plik_wyjsciowy, 'plik.out'); 

{$I-} Reset(plik_wejsciowy); {$I+} 
if IOResult <> 0 then exit; 
ReWrite(plik_wyjsciowy); 
while not EoF(plik_wejsciowy) do begin 
Read(plik_wejsciowy, znak); 
Write(plik_wyjsciowy, znak); 
Write(znak); 
end; 
Close(plik_wejsciowy); 
Close(plik_wyjsciowy); 
end. 

 

background image

J zyki programowania -Pascal                                   Strona 59

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

10.3

10.3

10.3

10.3   Pliki elementowe 

Pliki elementowe 

Pliki elementowe 

Pliki elementowe   

Metody otwarcia: 
Reset –  do czytania i pisania 
Rewrite – tylko do pisania 
Append –NIE JEST DOSThPNA, ale w zamian mamy: 
Seek, FilePos, FileSize. 

PROGRAM Pliki; 
USES Crt; 
Const ESC_Key =#27; 
TYPE Osoba = RECORD 
 

Imie, Nazw : String[15]; 

 

Adres      : String[50]; 

 

Tel        : String[10]; 

 

END; 

 

PlikOsob = FILE OF Osoba; 

 
Function Tworz(Var Plik : PlikOsob):Boolean; 
VAR Nazwa : String; 
Begin 
  Twórz:=False; ClrScr; 
  Write('Podaj nazwe pliku i sciezke : '); 
  ReadLn(Nazwa);  Assign(Plik, Nazwa); 
  {$I-} Rewrite(Plik); {$I+} 
  if IOResult <> 0 then exit; 
  Twórz:=True 
 End; 
Function Otworz(Var Plik : PlikOsob):Boolean; 
VAR Nazwa : String; 
Begin 
  Otwórz:=False;  ClrScr; 
  Write('Podaj nazwe pliku i sciezke : '); 
  ReadLn(Nazwa);  Assign(Plik, Nazwa); 
  {$I-} Reset(plik); {$I+} 
  if IOResult <> 0 then exit; 
  Otwórz:=True 
End; 

background image

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; 
 

background image

J zyki programowania -Pascal                                   Strona 61

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

10.4

10.4

10.4

10.4   Pliki amorficzne

Pliki amorficzne

Pliki amorficzne

Pliki amorficzne  

SC to pliki binarne o nieokre8lonej strukturze. Procedury otwarcia  
Reset(pilk,wielkosc_jednostki) 
Rewrite(pilk,wielkosc_jednostki) 
 
wielkosc_jednostki (Word) – oznacza wielko8S pojedynczego 

elementu jaki b dzie czytane z pliku; domy8lnie 128. 
procedure BlockRead(var F: File; var Buf; Count:  

Word [; var Result:Word]); 

procedure BlockWrite(var f: File; var Buf; Count:   

Word [; var Result:Word]); 

gdzie: 
 

F

zmienna plikowa 

 

Buf      zmienna buforujCca dane (Tablica, WskaInik) 
Count    ilo8S elementów do odczytania(zapisania) 
Result   ilo8S elementów odczytanych (zapisanych);  

wynik czytania(pisania)  

Nie poprawne jest równie4 sprawdzanie ko.ca pliku poprzez EOF- trzeba 
zamiast sprawdzaS warto8S zmiennej Result 
var 
  FromF, ToF: file; 
  NumRead, NumWritten: Word; 
  Buf: array[1..2048] of Char; 
begin 
  Assign(FromF, ParamStr(1)); 
  Reset(FromF, 1); 
  Assign(ToF, ParamStr(2)); 
  Rewrite(ToF, 1); 
  Writeln('Copying ', FileSize(FromF), 

 

' bytes...'); 

  repeat 
 

BlockRead(FromF, Buf, SizeOf(Buf), NumRead); 

 

BlockWrite(ToF, Buf, NumRead, NumWritten); 

  until (NumRead = 0) or (NumWritten <> NumRead); 
  Close(FromF);  Close(ToF); 
end. 

background image

J zyki programowania -Pascal                                   Strona 62

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

10.5

10.5

10.5

10.5   Funkcje i procedur operuj

Funkcje i procedur operuj

Funkcje i procedur operuj

Funkcje i procedur operuj3ce na plikach

3ce na plikach

3ce na plikach

3ce na plikach  

Seek(Plik, n) 

Procedura Seek ustawia wskaInik pliku przed sk adowC o numerze n. 
Plik jest plikiem dowolnego typu z wyjCtkiem typu Text, a jest 
wyra4eniem typu LongInt. Pierwszy sk adnik pliku ma numer 0. Seek 
mo4e byS u4yte do rozszerzenia pliku, poprzez ustawienie sk adnika 
pliku na pierwszy za ko.cem pliku, tzn. Seek(Plik, FileSize(Plik)).

FileSize(Plik) 

Funkcja ta zwraca aktualny wymiar pliku. Rezultat jest typu LongInt.
Je4eli Plik jest plikiem pustym, to FileSize(Plik)=0.

FilePos(Plik) 

Funkcja ta podaje aktualnC pozycj wskaInika pliku. Je4eli wskaInik 
pliku znajduje si na poczCtku pliku, to FilePos(Plik)=0. Je4eli 
wskaInik pliku znajduje si na ko.cu pliku, 
FilePos(Plik)=FileSize(Plik). Funkcja FilePos mo4e byS u4yta tylko 
wtedy, gdy plik jest otwarty. 

Erase(Plik) 

Procedura ta wymazuje (usuwa) plik zwiCzany ze zmiennC plikowC
Plik. Nie jest dopuszczalne stosowanie Erase w stosunku do otwartego 
pliku. Plik musi byS zamkni ty przed u4yciem procedury Erase. 

Rename(Plik, Nowa_nazwa) 

Procedura ta zmienia nazw pliku zewn trznego zwiCzanego ze 
zmiennC plikowC Plik.

Truncate(Plik) 

Procedura obcina wszystkie sk adowe pliku poza aktualnym 
po o4eniem wskaInika pliku. Aktualne po o4enie wskaInika pliku staje 
si ko.cem pliku. 

 

background image

J zyki programowania -Pascal                                   Strona 63

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11  Biblioteki Turbo Pascala 

11.1

11.1

11.1

11.1   Modu Crt

Modu Crt

Modu Crt

Modu Crt  

Modu CRT zawiera procedury i funkcje obs ugi ekranu, dIwi ku i 
klawiatury. 
Pozwala na definiowanie okien, wybór koloru tekstu i jego t a w przypadku 
kolorowych kart graficznych, generowanie dIwi ku o wybranej 
cz stotliwo8ci i d ugo8ci oraz odczytywanie znaków z klawiatury , w Ccznie 
z jej rozszerzeniami. 

11.1.1       STALE 

- sta e trybów tekstowych. 
 

BW40 = 0;  

czarno-bia y karty kolorowej, 40 kolumn 

 

CO40 = C40 = 1; 

kolorowy karty kolorowej, 40 kolumn 

 

BW80 = 2; czarno-bia y karty kolorowej, 80 kolumn 

 

CO80 = C80 = 3; 

kolorowy karty kolorowej, 80 kolumn 

 

Mono = 7; czarno-bia y karty monochromatycznej, 80 kolumn 
Font8*8 = 256;  kolorowy karty EGA lub VGA, 43 lub 50 wierszy- 
sta e kolorów.  

 Black  = 

 

0; 

 czarny 

 Blue 

  = 

 

1; 

 niebieski 

 Green  = 

 

2; 

 zielony 

 Cyan 

  = 

 

3; 

 turkusowy 

 Red 

  = 

 

4; 

 czerwony 

 Magenta 

 = 

 

5; 

 karmazynowy 

 Brown  = 

 

6; 

 brCzowy 

 

LightGray   

=  7;   

jasnoszary 

 DarkGray 

 = 

 

8; 

 

 ciemnoszary 

 

LightBlue      

=  9;   

jasnoniebieski 

 LightGreen = 

10; 

 jasnozielony 

 

LightCyan       = 11;  

jasnoturkusowy 

 

LightRed        = 12;  

jasnoczerwony 

 LightMagenta 

13; 

 jasnokarmazynowy 

 

 Yellow 

 = 

14; 

 4ó ty 

 White  = 

15; 

 bia y

Blink  

 

= 128; 

suma (Blink+kolor) wywo uje miganie 

 

wyró4nionego koloru. 

background image

J zyki programowania -Pascal                                   Strona 64

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.1.2       ZMIENNE  

CheckBreak  

: Boolean - standardowo: True; warto8S ta oznacza, 4e

polecenie   Ctrl-Break dzia a tak, jak w DOSie. 

CheckEof   : Boolean - standardowo: False; warto8S funkcji Eof(plik) jest 

równa CheckEof dla danego pliku tekstowego plik zwiCzanego z 
CRT (po odczytaniu znaku generowanego przez Ctrl-Z) 

CheckSnow  

: Boolean - standardowo: True; warto8S ta zabezpiecza 

ekran przed 8nie4eniem (wa4ne dla CGA) 

DirectVideo    :Boolean - standardowo: TRUE 
Sposób wy8wietlania znaków na ekranie monitora. 

True, bezpo8rednie dzia ania procedurCRT; 
False wykorzystanie procedur z ROM BIOS 

LastMode   

: Word - warto8S b dCca ostatnim numerem sterownika 

ekranu, tzn. przed uruchomieniem programu 

TextAttr   : Byte - warto8S oznaczajCca atrybut wy8wietlanych znaków 
WinMin    : Word - zmienna przechowujCca wspó rz dne lewego górnego 

rogu bie4Ccego okna tekstowego (pierwszy bajt(-y), drugi-x) 

WinMin    : Word - jw. dla prawego dolnego rogu okna 

11.1.3       FUNKCJE I PROCEDURY  
11.1.3.1 

AssignCrt (var plik: Text)     procedura

Wynik : Skojarzenie pliku tekstowego z urzCdzeniem CRT (do realizacji 

operacji wej/wyj zwiCzanych z konsola). 

11.1.3.2 

KeyPressed: Boolean     funkcja

Wynik : Warto8S True, gdy w buforze klawiatury znajduje si nie odczytany 

jeszcze znak. 

Uses crt;  
begin  
repeat until keypressed;  
end.   

11.1.3.3 

ReadKey: Char     funkcja

Wynik : Czytanie kolejnego znaku znajdujCcego si w buforze klawiatury. 
Uses crt;  
var kl:char;  
begin  
 repeat  kl:=readkey;  unitl kl = chr(27);  
end.   

background image

J zyki programowania -Pascal                                   Strona 65

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.1.3.4 

TextMode (tryb: Byte)     procedura

tryb - sta a typu tekstowego 
Wynik : Zmiana bie4Ccego trybu tekstowego na nowy tryb 
 

11.1.3.5 

Window (x1, y1, x2, y2: Byte)     procedura

x1, y2 - wspó rz dne lewego górnego rogu okna 
x2, y2 - wspó rz dne prawego dolnego rogu okna 
Wynik : Zdefiniowanie okna tekstowego o podanych wspolrzadnych lewego 

górnego i prawego dolnego rogu okna. Kursor znajdzie si w
lewym górnym rogu okna. 

11.1.3.6 

GotoXY (x, y: Byte)     procedura

x, y - wspó rz dne znaku w oknie 

Wynik : Umieszczenie kursora w kolumnie x i wierszu y bie4Ccego okna  

tekstowego. Punkt (1,1) znajduje si w lewym górnym rogu okna. 

11.1.3.7 

Funkcja WhereX: Byte { WhereY}

Wynik : Wspó rz dne x(Y)znaku wskazywanego przez kursor  

(bie4Cca kolumna). 

Uses crt;  
Var pozX,pozY:Byte; 
begin  
poz_x:=wherex; 
poz_y:=wherey);  
gotoxy(10,10);  
write('JAREK');  
end. 

11.1.3.8 

ClrScr     procedura

Wynik : Wype nienie bie4Ccego okna tekstowego znakami spacji i 

umieszczenie kursora w lewym górnym rogu okna. 

Uses crt;  
begin  
clrscr;  
write('PrzykIad');  
end.   

11.1.3.9 

ClrEol     procedura

Wynik : Wype nienie znakami spacji obszaru miedzy pozycja kursora a 

ko.cem wiersza, w którym si kursor znajduje. 

background image

J zyki programowania -Pascal                                   Strona 66

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.1.3.10  InsLine     procedura

Wynik : Ws awienie wiersza wype nionymi spacjami bezpo8rednio pod 

wierszem,  w którym znajduje si kursor. Wiersz ostatni bie4Ccego 
okna tekstowego zostanie usuni ty, a wiersze, przed którymi 
postawiono ten nowy, przesuni te w dol. 

 

11.1.3.11  DelLine     procedura

Wynik : Usuniecie wiersza , w którym w danej chwili znajduje si kursor. 

Wiersze po o4one poni4ej zostanC przesuni te w gore, a ostatni 
wiersz okna zostanie wype niony znakami spacji. 

 

11.1.3.12  TextColor (kolor: Byte)     procedura

kolor - sta a koloru 
Wynik : Zmiana kolorów wyprowadzanych znaków (patrz: Stale koloru). 
Uses crt;  
begin  
textcolor(1);  
writeln('przykIad');  
end.   

 

11.1.3.13  TextBackground (kolor: Byte)     procedura

kolor - sta a koloru 
Wynik : Zmiana koloru t a. Mo4liwy jest wybór jednego z o8miu kolorów 

okre8lonych warto8ciami od 0 do 7. 

Uses crt;  
begin  
textbackground(2);  
textcolor(0);  
writeln('Komputer');  
end.   

 

11.1.3.14  LowVideo     procedura

Wynik : Wyprowadzenie tekstu w kolorze ciemnym, odpowiadajCcym 

wcze8niejszemu kolorowi jasnemu(numer koloru wi kszy niz. 7). 
Dzieje si tak na skutek wyzerowania bitu jasno8ci zmiennej 
TextAttr. 

background image

J zyki programowania -Pascal                                   Strona 67

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.1.3.15  HighVideo     procedura

Wynik : Zmiana koloru wyprowadzanego tekstu z ciemnego na odpowiedni 

jasny. Jest to wynikiem ustawienia bitu jasno8ci zmiennej  TextAttr 
w stan 1. 

 

11.1.3.16  NormVideo     procedura

Wynik : Nadanie bitowi jasno8ci zmiennej TextAttr stanu sprzed  pierwszego 

wywo ania procedury HighVideo lub LowVideo. 

 

11.1.3.17  Delay (ms: Word)     procedura

ms - liczba milisekund 
Wynik : Wstrzymanie wykonywania programu na czas okre8lony 

parametrem   ms. 

Uses crt;  
begin  
delay(5000);  
write('CD');  
{wypisanie napisu "CD" po pewnym czasie}  
end.   
 

11.1.3.18  Sound (Hz: Word)     procedura

Hz - cz stotliwo8S dIwi ku w hercach 
Wynik : Rozpocz cie generowania dIwi ku o cz stotliwo8ci zadanej przez 

parametr Hz. 

Uses crt;  
begin  
sound(100);  
delay(300);  
nosound;  
end.   

 

11.1.3.19  NoSound     procedura

Wynik : Wstrzymanie generowania dIwi ku. 
 

background image

J zyki programowania -Pascal                                   Strona 68

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.2

11.2

11.2

11.2   Modu System 

Modu System 

Modu System 

Modu System   

Funkcje arytmetyczne: 

function Abs(X): (Taki jak typ argumentu); 
function ArcTan(X: Real): Real; 
function Cos(X: Real): Real; 
function Exp(X: Real): Real; 
function Frac(X: Real): Real; 
function Int(X: Real): Real; 
function Ln(X: Real): Real; 
function Pi: Real;{.1415926535897932385.} 
function Sin(X: Real): Real; 
function Sqr(X): (Taki jak typ argumentu); 
function Sqrt(X: Real): Real; 

Funkcje dynamicznej alokacji pami ci 

procedure Dispose(var P: Pointer [ , Destructor ]); 
procedure FreeMem(var P: Pointer; Size: Word); 
procedure GetMem(var P: Pointer; Size: Word); 
procedure New(var P: Pointer[,Init: Constructor]); 
function MaxAvail: Longint; 
function MemAvail: Longint; 
Funkcje kontrolno-sterujCce:
procedure Exit; 
procedure Halt [ ( Exitcode: Word ) ]; 
procedure RunError [ ( Errorcode: Byte ) ]; 
 

Funkcje wejscia-wyj8cia 
procedure Assign(var f; String); 
procedure ChDir(S: String); 
procedure Close(var F); 
function Eof(var F): Boolean; 
procedure Erase(var F); 
function FilePos(var F): Longint; 
function FileSize(var F): Longint; 
 procedure GetDir(D: Byte; var S: String); 

where D is set to: 
0

Default 

1

Drive A 2     Drive B 3     Drive C … 

background image

J zyki programowania -Pascal                                   Strona 69

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

function IOResult: Integer; 
procedure MkDir(S: String); 
procedure Rename(var F; Newname); 
procedure Reset(var F [: File; Recsize: Word ] ); 
procedure Rewrite(var F: File [; Recsize: Word ] ); 
procedure RmDir(S: String); 
procedure Seek(var F; N: Longint); 
procedure Truncate(var F); 

Funkcje ró4ne: 
procedure Exclude(var S: set of T;I:T); 
procedure FillChar(var X; Count: Word; value); 
function Hi(X): Byte; 
function High(X) 
procedure Include(var S: set of T; I:T); 
function Lo(X): Byte; 
function Low(X); 
procedure Move(var Source, Dest; Count: Word); 
function ParamCount: Word; 
function ParamStr(Index): String; 
function Random [ ( Range: Word) ]:  

 

( Taki jak typ argumentu ); 

procedure Randomize; 
function SizeOf: Integer; 
function Swap(X): (Taki jak typ argumentu); 
function UpCase(Ch: Char): Char; 

Funkcje porzCdkowe: 
procedure Dec(var X[ ; N: Longint]); 
procedure Inc(var X [ ; N: Longint ] ); 
function Odd(X: Longint): Boolean; 
function Pred(X): (Taki jak typ argumentu); 
function Succ(X): (Taki jak typ argumentu); 

Funkcje zwiazane z adresami i wskaInikami: 
function Addr(X): pointer; 
function Assigned(var P): Boolean; 
function CSeg: Word; 
function DSeg: Word; 
function Ofs(X): Word; 

background image

J zyki programowania -Pascal                                   Strona 70

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

function Ptr(Seg, Ofs: Word): Pointer; 
function Seg(X): Word; 
function SPtr: Word; 
function SSeg: Word; 
Funkcje napisowe:
function Concat(s1 [, s2,..., sn]: String): String; 
function Copy(S: String; Index: Integer; Count: 

Integer): String; 

procedure Delete(var S: String; Index: Integer; 

Count:Integer); 

procedure Insert(Source: String; var S: String; 

Index: Integer); 

function Length(S: String): Integer; 
function Pos(Substr: String; S: String): Byte; 
procedure Str(X [: Width[:Decimals]];var S:string); 
procedure Val(S; var V; var Code: Integer); 
Funkcje zwiCzane z plikami tekstowymi:
procedure Append(var f: Text); 
function Eoln [(var F: Text) ]: Boolean; 
procedure Flush(var F: Text); 
procedure Read(F , V1 [, V2,...,Vn ] ); 
function SeekEof [ (var F: Text) ]: Boolean; 
function SeekEoln [ (var F: Text) ]: Boolean; 
procedure SetTextBuf(var F:Text;var Buf[;S:Word]); 
procedure Write(F, V1 [, V2,...,Vn ] ); 

Funkcje konwersji: 
function Chr(X: Byte): Char; 
function Ord(X): Longint; 
function Round(X: Real): Longint; 
function Trunc(X: Real): Longint; 
Funkcje operujCce na plikach amorficznych:
procedure BlockRead(var F: File; var Buf; Count: 

Word [; var Result: Word]); 

procedure BlockWrite(var f: File; var Buf; Count: 

Word [; var Result: Word]); 

background image

J zyki programowania -Pascal                                   Strona 71

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.3

11.3

11.3

11.3   Modu Dos

Modu Dos

Modu Dos

Modu Dos  

const 
  FCarry     = $0001; 
  FParity    = $0004; 
  FAuxiliary = $0010; 
  FZero      = $0040; 
  FSign      = $0080; 
  FOverflow  = $0800; 
 

fmClosed = $D7B0; 

  fmInput  = $D7B1; 
  fmOutput = $D7B2; 
  fmInOut  = $D7B3; 
 

ReadOnly  = $01; 

  Hidden    = $02; 
  SysFile   = $04; 
  VolumeID  = $08; 
  Directory = $10; 
  Archive   = $20; 
  AnyFile   = $3F; 

Type 
ComStr  = string[127]; 
PathStr = string[79]; 
DirStr  = string[67]; 
NameStr = string[8]; 
ExtStr  = string[4];  
Registers 
FileRec 
TextBuf 
TextRec 
SearchRec 
DateTime 

var 
DosError: Integer; 
 

background image

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; 

background image

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. 

background image

J zyki programowania -Pascal                                   Strona 74

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

11.4

11.4

11.4

11.4   Modu tworzone przez u#ytkownika

Modu tworzone przez u#ytkownika

Modu tworzone przez u#ytkownika

Modu tworzone przez u#ytkownika  

Unit Nazwa; 
Interface 
{ Deklaracje publiczne} 

Implementation 
{ Deklaracje prywatne I definicje podprogramów} 

Begin  { moLe byb pomini[ty gdy brak} 
 

{instrikcje inicjalizacyjne moduIu} 

End.

unit test; 
Interface 
 function Czekaj(znaki:string):Byte; 
Implementation 
 Uses crt; 
 const KlawiszESC=#27; 
 function czekaj; 
 var z:char; 
 

w:byte; 

Begin 
 {czyszczenie bufora klawiatury} 
 while keypressed do readkey; 
 repeat 
 

z:=readkey; 

 

if z=KlawiszESC then break; 

 

w:=pos(z,znaki); 

 until w>0; 
 Czekaj :=w; 
End; 
BEGIN 
END. 

Program Test_modulu; 
uses test; 
const s:string='TtNn'; 
Begin 
 

write('Twoj wybor :',s[czekaj(s)]); 

End. 

background image

J zyki programowania -Pascal                                   Strona 75

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12 Dynamiczne struktury danych 

12.1.1 Poj9cie wskaCnika 

WskaInik do danych to dynamiczny adres pownego obszaru pami ci. 
Po o4enie tego obszaru mo4e byS, i bardzo cz sto jest, ró4ne podczas 
kolejnych uruchomia. programu.  
Type 
 Pdane=^Dane; 
 Dane =Integer; 
Var p:PDane; 
 

d:Dane; 

Begin 
  d:=76; 
  p:=@d; 
 writeln(longint(p),' zawiera ',p^); 
 inc(p^); 
 writeln('d zawiera ',d); 
 new(p); 
 p^:=123; 
 writeln(longint(p),' zawiera ',p^); 
 writeln('d zawiera ',d); 
 Dispose(p);  
End. 
 

Var p:Pointer; 
Begin 
  d:=76; 
  p:=@d; 
 writeln(longint(p),' zawiera ',PDane( p)^); 
 new(PDane(p)); 
 PDane(p)^:=123; 
 writeln(longint(p),' zawiera ',PDane( p)^); 
 writeln('d zawiera ',d); 
End. 

background image

J zyki programowania -Pascal                                   Strona 76

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.2

12.2

12.2

12.2   Tablica wskazników

Tablica wskazników

Tablica wskazników

Tablica wskazników  

Pstring=^String[80]; 

PTablica=Array [1..N] of PString; 
PTab=^Ptrablica; 
Var t:PTab; 

J zyk  Turbo Pascal nie umo4liwia deklaracji tablic w pe ni dynamicznych. 
Powy4sze konstrukcje tyklo troch przyblizajC to rozwiCzanie.  
begin 
 new(t); 
  K:=N div 2; 
 For  i:=1 TO K  DO 
 begin 
  new(T^[i]); 
  str(i,T^[i]^); 
end; 
... 
For  i:=1 TO N  DO 
 begin 
  if T^[i]^ <>Nil then 
 

writeln(T^[i]^) 

  else writeln; 
 end; 
... 
end. 

Dostp do elementów w takiej tablicy jest zbli4ony do zwyk ej tablicy. 

dane tablicy i wskaIniki sC przechwywane na stercie – zwi ksza to 
ilo8S dost pnej pami ci dla programu 

Nie wszystkie wiersze muszC zawieraS dane – usuni cie wiersza to 
zwolnmienie  

Zakres nie oznacza deklaracji pe nej tablicy 2 wymiarowej 

 

Z góry ograniczona ilo8S wierszy 

Utrudniopne dodanie wiersza ( z wyjCtkiem ko.ca) 

Usuni cia mogC powodowaS powstanie „rzadkich” tablic 

background image

J zyki programowania -Pascal                                   Strona 77

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.3

12.3

12.3

12.3   Stos

Stos

Stos

Stos  

12.3.1 Struktura 

stosu 

 
Stos danych w pewnym uproszczeniu mo4na porównaS do stosu talerzy na 
stole. Dost p mamy tylko do jednego talerza znajdujCcego si na szczycie 
stosu. Aby si gnCS do kolejnych talerzy musimy zdjCS ze stosu te, które sC
po o4one wy4ej. Element stosu mo4e wyglCdaS nast pujCco: 
 
PElement=^Element; 
 Element=record 
 

Data : Dane; 

 

Next : PElement; 

 

end; 

 

12.3.2 Na 

stos 

 
Procedure na_stos(e:Dane;var top:PElement); 
 var Pom: Pelement; 
begin 
 

pom:=Top; 

 

New(Top); 

 

top^.next:=pom; 

 

Top^.Data:=e; 

end; 

background image

J zyki programowania -Pascal                                   Strona 78

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.3.3 Ze 

stosu 

function ze_stosu(var e:Dane;var 
top:PElement):boolean; 
 var Pom: Pelement; 
begin 
 

if (top<>nil)then 

 

begin 

 

ze_stosu:=True; 

 

e:=Top^.Data; 

 

Pom:=Top; 

 

Top:=Top^.next; 

 

Dispose(Pom); 

 

end 

 

else ze_stosu:=False; 

end; 
var i : Dane; 
 

s,x : PElement; 

BEGIN 
s:=nil; 
for i:=1 to 10 do 
 begin 
 

na_stos(i,s); 

 

write(s^.Data:4); 

 end; 
 writeln; 
 while (Ze_stosu(i,s)) do 
 

write(i:4) 

END. 

 

12.3.4 Zastosowanie 

stosu 

Odwracanie ciCgu elementów 

Zamiana wyra4enia na notacj polskC

Obliczenia warto8ci wyra4e. w notacji polskiej 

 

background image

J zyki programowania -Pascal                                   Strona 79

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.4

12.4

12.4

12.4   Listy 1 i 2 kierunkowe

Listy 1 i 2 kierunkowe

Listy 1 i 2 kierunkowe

Listy 1 i 2 kierunkowe  

12.4.1  Struktura listy 1 kierunkowej 

 

Struktura danych listy jednokierunkowej jest to4sama ze strukturC stosu. Tu 
tak4e mamy powiCzane za pomocC jednego wskaInika dane.  
Plista=^Lista; 
 

Lista= record 

 

d

: Dane; 

 

next : Plista; 

 

end; 

Lista od stosu b dzie odró4niaS sposobem dost pu do danych. Zamiast 
prostych procedur operujCcych na pierwszym elemencie, jak to by o we 
wcze8niejszym przypadku, b dziemy mieli pe na kontrol nad 
poszczególnymi cz 8ciami sk adowymi listy. Niestety te du4o wi ksze 
mo4liwo8ci stawiajC przed programistC du4o wi ksze wymagania. Trzeba 
pami taS, 4e operacje na li8cie wiC4C si z bezpo8rednim dost pem do 
pami ci komputera. Dobrze jest wi c i w tym przypadku ograniczyS si do 
operowania na elementach listy za po8rednictwem odpowiednich procedur. 
Uatwiej przecie4 dok adnie przeanalizowaS krótki kod Iród owy a nast pnie 
z niego umiej tnie korzystaS.

12.4.2  Podstawowe operacje na li*cie 
12.4.2.1 Dodanie 

elementu

procedure dolisty(var p,k:Plista;d:dane); 
var pom:Plista; 
Begin 
 

new(pom); 

 

pom^.d:=d; 

 

pom^.next:=nil; 

  if k<>nil  then 
 

k^.next:=pom 

  else    p:=pom; 
  k:=pom; 
end; 

background image

J zyki programowania -Pascal                                   Strona 80

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.4.2.2 

Wykonanie operacji na ka4dym elemancie listy

procedure PiszWszystko(p:Plista); 
Begin 
 

Writeln; 

 while(p<>Nil)do 
 begin 
 

write(p^.D:3); 

 

P:=P^.Next; 

 end; 

Bardziej uniwersalny sposób: 

Type ProcDane=Procedure(x:Dane); 
procedure piszDane(x:Dane);far; 
begin 
 write(x:4) 
end; 
 
procedure DlaKazdego(p:Plista;proc:ProcDane); 
Begin 
 

Writeln; 

 while(p<>Nil)do 
 begin 
 

proc(p^.D); 

 

P:=P^.Next; 

 end; 
End; 
 

Wywo anie procedury 

dlaKazdego(p,PiszDane); 
 

12.4.2.3 

Szukanie elementu na li8cie

Funkcja szukajCca elementu na li8cie powinna zwracaS jako wynik wskaInik 
na element, je8li istnieje, bCdI nil w przeciwnym przypadku. W przypadku 
listy 1 kierunkowej mo4na pokusiS si o zwracanie poprzedniego wskaInika 
na li8cie – u4yteczne zarówno przy dodawaniu jak i usuwaniu. 
 

background image

J zyki programowania -Pascal                                   Strona 81

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

function Find(el:Dane;pocz:Plista;var 
B:PLista):PLista; 
begin 
 

if pocz^.d=el then 

 

begin      B:=Nil;    find:=pocz;      end 

 

else 

 

begin 

 

while  

(pocz^.next<>nil)and(pocz^.Next^.d<>el) do 
 

pocz:=pocz^.Next; 

 

B:=pocz; 

 

Find:=pocz^.Next; 

 

end 

end; 

12.4.2.4 Usuni cie elementu

procedure usun(var p:PLista;el:dane); 
var b,Lpom:Plista; 
begin 
 if p<>nil then 
 

begin 

 

Lpom:=find(el,p,b); 

 

if B =nil then {usun%b pierwszy element} 

 

begin 

 

P:=P^.Next;  Dispose(Lpom); 

 

end 

 

else if Lpom <>nil then 

 

begin 

 

b^.next:=Lpom^.next; 

 

Dispose(Lpom); 

 

end 

 

else  

 

writeln('Element nie naleLy do listy'); 

 

end 

 else  writeln('Lista jest pusta'); 
end; 

background image

J zyki programowania -Pascal                                   Strona 82

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.4.2.5 Odwracanie 

listy 

function Odwroc(var pocz:Plista):Plista;   
var lPtr,Lpom:PLista; { Odwraca list[

}

begin          { bez tworzenia nowych elementów } 
 lPtr:=pocz; 
  pocz:=nil; 
  while lPtr <> nil do 
 

begin 

 

lPom:=lPtr^.Next; 

 

lPtr^.Next:=pocz; 

 

pocz:=lPtr; 

 

lPtr:=lPom; 

 

end; 

 

Odwroc:=pocz; 

end; 

12.4.2.6 Zmiana 

kolejno8ci danych, sortowanie listy

W powy4szym przyk adzie zastosowano dodawanie na koniec listy. Równie 

atwo mo4na napisaS procedur , która ju4 na etapie tworzenia listy jC

posortuje. Du4e podobie.stwo listy do tablicy umo4liwia implementacje 
niektórych algorytmów sortowania tablic równie4 dla listy. Zamian
elementów na li8cie mo4na zrealizowaS dwojako: poprzez zamian danych-
jak to by o w tablicach, bCdI du4o lepiej poprzez zamian wskaIników.  
procedure zamiana(var pocz, p1,p2:Plista); 
 

var pop1,pop2,pom:Plista; 

begin 
 pop1:=Nil; pop2:=Nil; 
 if p1 <>Nil then  Find(p1^.D,pocz,pop1) else exit; 
 if p2<>NIl then   Find(p2^.D,pocz,pop2) else exit; 
 

if pop1=Nil then   {czyli p1 = pocz} 

 

pocz:=p2    else     pop1^.Next:=p2; 

 

if p1 = Pocz then {p2 = pocz} 

 

pocz:=p2    else     pop2^.Next:=p1; 

 

pom:=p2^.Next; 

 

p2^.Next:=p1^.Next; 

 

p1^.Next:=pom; 

end; 

background image

J zyki programowania -Pascal                                   Strona 83

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.4.3  Struktura listy 2 kierunkowej 

Lista dwukierunkowa to tak jakby dwie listy jednokierunkowe, gdzie dane sC
wspólne. W poprzedniej li8cie  atwe by o poruszanie si po elementach listy 
tylko w jednym kierunku. Aby dostaS si do elementy poprzedzajCcego 
bie4Ccy trzeba przeglCdaS ca C list od poczCtku. Tej niedogodno8ci tu ju4
nie b dzie. 
 
lista2=^skladnik_listy2; 
skladnik_listy2 =record 
 

wsk1:lista2;{wiersz porzedni 

}

s:Wiersz; 

 

wsk2:lista2;{nast[pny} 

 

end; 

12.4.4 Dodawanie 

do 

listy 

procedure do_listy2(var element:Wiersz;var 
pocz,kon:lista2); 
var pop_skl,nas_skl:lista2; 
 

podstaw:boolean; 

begin 
if kon<>nil then 
begin  
podstaw:=false;pop_skl:=kon;nas_skl:=kon^.wsk2; end 
else 
begin podstaw:=true;pop_skl:=nil;nas_skl:=nil end; 
  new(kon); 
  with kon^ do 
  begin 
 

wsk1:=pop_skl; 

 

s:=element; 

 

wsk2:=nas_skl; 

  end; 
if pop_skl<>nil then  pop_skl^.wsk2:=kon; 
if nas_skl<>nil then  nas_skl^.wsk1:=kon; 
if podstaw then pocz:=kon; 
end; 

background image

J zyki programowania -Pascal                                   Strona 84

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.4.5 Zastosowanie 

list 

Listy majC podobne zastosowania, jak tablice. W odró4nieniu od tablic nie 
jeste8my tu ograniczeni jakC8 z góry narzuconC maksymalnC ilo8ciC
elementów. Tych elementów mo4e byS zarówno kilka jak i kilkaset. 
Oczywi8cie ograniczeniem jest tu dost pna pomi S operacyjna.  
 

background image

J zyki programowania -Pascal                                   Strona 85

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.5

12.5

12.5

12.5   Drzewa binarne

Drzewa binarne

Drzewa binarne

Drzewa binarne  

Inna strukturC rekurencyjnC sC drzewa. NajciekawszC wersjC jest drzewo 
binarne uporzCdkowane. MogC one byS bardzo u4yteczne przy tworzeniu 
struktur s ownikowych. Poszukiwanie danych mo4e byS tu du4o prostrze ni4
na zwyk ej li8cie. 
Terminologia zaczerpmi ta z biologi : Drzewo, Korze., ga CI, li8cie , 
poddrzewo. 
Ze wzgl du na wyró4nienie oddrzew najbardziej natyralnC metodC
postepowania z drzewami jest rekurencja. 
 

12.5.1 Strukrura 

danych 

Typ danych w a8ciwie ten sam co i w liscie 2 kierunkowej. 
PDrzewo=^Drzewo; 
 drzewo=record 
 

L,P : PDrzewo; 

 

D

: Dane; 

 

end; 

 

1

3

2

5

7

6

8

1

3

2

5

7

6

8

background image

J zyki programowania -Pascal                                   Strona 86

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.5.2  Tworzenie Drzewa  

Dowdanie nowego elementu do drzewa. 
 

procedure dodaj (var d:Pdrzewo;x:dane); 
begin 
 if d = Nil then { miejsce dodania} 
 

begin 

 

new(d); 

 

d^.L:=Nil; 

 

d^.P:=Nil; 

 

d^.D:=x; 

 

end 

 else 
  if d^.D > x then 
 

dodaj(d^.L,x) 

  else 
 

dodaj(d^.P,x); 

end; 

procedure pisz(d:PDrzewo;poz:byte); 
begin 
 if D<>Nil then 
 begin 
  pisz(d^.L,poz+1); 
 

writeln(d^.D:poz); 

  pisz(d^.P,poz+1) 
 end 
end; 

4

1

3

2

5

7

6

8

background image

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; 

background image

J zyki programowania -Pascal                                   Strona 88

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.5.4 Usuniecie 

li*cia i w9z a

procedure usun(var D:PDrzewo;x:Dane); 
var S,nk,pnk:PDrzewo; 
begin 
if d = Nil then exit; 
if d^.d < x then usun(d^.P,x) 
else if d^.d > x then usun(d^.L,x) 
else {d^.d = x} 
begin 
  s:=d; 
 if d^.P = nil then  d:=d^.L 
 else if d^.L = nil then  d:=d^.P 
 else{ obie gaI[zie s% niepuste} 
 begin 
 

nk:=D^.L;pnk:=D; 

 

while(nk^.P<>Nil) do 

 

begin pnk:=nk; nk:=nk^.P;  end; 

 

if pnk<>D then begin 

 

pnk^.P:=nk^.L;  nk^.L:=D^.L;    

 

end; 

 

nk^.P:=D^.P;    d:=nk; 

 end;  
 Dispose(s); 
 end; 
end; 

4

1

3

2

5

7

6

8

background image

J zyki programowania -Pascal                                   Strona 89

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

12.5.5 Równowa/enie Drzewa  

 

Procedure balance(var d:PDrzewo); 
var ileP,ileL:Integer; 
Begin 
if d = Nil then exit; 
 

ileP:=Ilosc(D^.P);IleL:=Ilosc(D^.L); 

 Repeat 
 

if ileP-ileL>1 then 

 

begin 

 

dec(ileP);inc(ileL); 

 

zPrawoNaLewo(d); 

 

end 

 

else 

 

if ileL-ileP>1 then 

 

begin 

 

dec(ileL);inc(ileP); 

 

ZlewoNaPrawo(d); 

 

end 

  else Break; 
Until False; 
Balance(D^.L);Balance(d^.P); 
End; 

4

1

3

2

5

7

6

8

background image

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; 

background image

J zyki programowania -Pascal                                   Strona 91

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

13 Grafika w Turbo Pascalu 

13.1

13.1

13.1

13.1   Programowanie w trybie graficznym 

Programowanie w trybie graficznym 

Programowanie w trybie graficznym 

Programowanie w trybie graficznym   

Tryb tekstowy a tryb graficzny 
Tryb tekstowy (znakowy): 
80 kolumn 25 wierszy  
(40x25, 80x40, 80x50, 160x50) 
Tryb graficzny (piksel) 

640x480(standard VGA) przy 16 Kolorach 
 320x200, 800x600, 1024x768,1200x1024, 1600x1200 

Ilo8S kolorów: 16(4 b), 256(8 b), 65 536(16Kb) , 

 16 777 216(24Mb), 42 949 672 96(32Mb) 

13.1.1  Wprowadzenie do pracy w trybie graficznym 

Program garficzny; 

Uses Graph,Crt; 
const PathToDriver:String='C:\Programy\TP7\BGI'; 

 

function TrybGraficzny:boolean; 
var dr,tryb:Integer; 
begin 
 dr:=Detect; 
 InitGraph(dr,tryb,PathToDriver); 
 TrybGraficzny:=GraphResult=GrOK; 
end; 
 
dr:=9; tryb:=2; {640x480x16} 
 

background image

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. 

background image

J zyki programowania -Pascal                                   Strona 93

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________  

 

13.2

13.2

13.2

13.2   Narz dzia graficzne w Turbo Pascalu

Narz dzia graficzne w Turbo Pascalu

Narz dzia graficzne w Turbo Pascalu

Narz dzia graficzne w Turbo Pascalu  

13.2.1 Modu Graph

Procedury i funkcje modu u GRAPH 

 

P. Arc (X,Y; Integer; StAngle, EndAngle, Radius; Word); 

*   

P. Bar(x1, y1, x2, y2: Integer); 

P. Bar3D(x1, y1, x2, y2: Integer; Depth: Word; Top: Boolean); 

P. Circle(X,Y: Integer; Radius: Word); 

P. ClearDevice; 

P. ClearViewPort; 

P. CloseGraph; 

P. DetectGraph(var GraphDriver, GraphMode: Integer); 

P. DrawPoly(NumPoints: Word; var PolyPoints); 

P. Ellipse(X, Y: Integer; StAngle, EndAngle: Word; XRadius, YRadius:Word); 

P. FillEllipse(X, Y: Integer; XRadius, YRadius: Word) 

P. FillPoly(NumPoints: Word; var PolyPoints); 

P. FloodFill(X, Y: Integer; Border: Word); 

P. GetArcCoords(var ArcCoords: _ArcCoordsType_); 
P. GetAspectRatio(var Xasp, Yasp: Word); 
F. GetBkColor: Word; 

F. GetColor: Word; 

F. GetDefaultPalette(var Palette: PaletteType); 
F. GetDriverName: string; 

P. GetFillPattern(var FillPattern: FillPatternType); 

P. GetFillSettings(var FillInfo: FillSettingsType); 

F. GetGraphMode: Integer; 

P. GetImage(x1, y1, x2, y2: Integer; var BitMap); 
P. GetLineSettings(var LineInfo: LineSettingsType); 

F. GetMaxColor: Word; 

F. GetMaxMode: Integer; 

F. GetMaxX: Integer; 

F. GetMaxY: Integer; 

F. GetModeName(ModeNumber: Integer): string; 

P. GetModeRange(GraphDriver:Integer; var LoMode, HiMode:Integer); 

 

P. GetPalette(var Palette: PaletteType); 
F. GetPaletteSize: Integer; 
F. GetPixel(X,Y: Integer): Word; 

P. GetTextSettings(var TextInfo: TextSettingsType); 

P. GetViewSettings(var ViewPort: ViewPortType); 

 

F. GetX: Integer; 

F. GetY: Integer; 

P. GraphDefaults; 
F. GraphErrorMsg(ErrorCode: Integer): string; 
F. GraphResult: Integer;  

F. ImageSize(x1, y1, x2, y2: Integer): Word; 
P. InitGraph(var GraphDriver:Integer; var GraphMode: Integer; PathToDriver: string); 

 

F. InstallUserDriver(Name: string; AutoDetectPtr: pointer): integer; 
F. InstallUserFont(FontFileName: string ): Integer; 

background image

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; 

 

background image

J zyki programowania -Pascal                                   Strona 95

 

________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 

 

13.2.1.1 Sta e i typy zdefiniowane w modu e GRAPH

Constants : 

 

Bar3D Constants: 

 

TopOn    True 

 TopOff   False 
 

Clipping Constants: 

 

ClipOn   True 

 

ClipOff  False 

 

BitBlt Operators: 

 

Constant   

| Value| Meaning 

 

--------------------------------------- 

 

NormalPut  

|   0    | MOV 

 

CopyPut    

|   0    | MOV 

 

XORPut     

|   1    | XOR 

 

OrPut      

|   2    | OR 

 

AndPut     

|   3    | AND 

 

NotPut     

|   4    | NOT 

 

Color Constants: 

Dark Colors:(Foreground & 

Background

)

Black         0 

 Blue          1 
 Green         2 
 Cyan          3 
 Red           4 
 Magenta       5 
 Brown         6 
 LightGray     7 
 Light Colors:(

Foreground

)

DarkGray       8 
 LightBlue      9 
 LightGreen    10 
 LightCyan     11 
 LightRed      12 
 LightMagenta  13 
 Yellow        14 
 White         15

 

For flashing (

blinking

) text  

foreground, Blink= 128. 

 
Colors for the 8514: 
 

Dark Colors: 

 EGABlack       0 
 EGABlue        1 
 EGAGreen       2 
 EGACyan        3 
 EGARed         4 
 EGAMagenta     5 
 EGABrown      20 
 EGALightgray   7 
 

Light 

Colors

 : 

 

EGADarkgray     56 

 EGALightblue    57 
 EGALightgreen   58 
 EGALightcyan    59 
 EGALightred     60 
 EGALightmagenta 61 
 EGAYellow       62 
 EGAWhite        63 

 

background image

Fill Pattern Constants 

  Constant        

| Value 

| Meaning 

  ------------------------------------------------- 
  EmptyFill       

|   0     | Uses background color 

  SolidFill       

|   1      | Uses draw color 

  LineFill        

|   2      | --- fill 

  LtSlashFill     

|   3      | /// fill 

  SlashFill       

|   4      | /// thick fill 

  BkSlashFill     

|   5      | \thick fill 

  LtBkSlashFill  

|   6      | \fill 

  HatchFill       

|   7      | Light hatch fill 

  XHatchFill      

|   8      | Heavy cross hatch 

  InterleaveFill  

|   9      | Interleaving line 

  WideDotFill    

|   10    | Widely spaced dot 

  CloseDotFill   

|   11    | Closely spaced dot 

  UserFill        

|   12    | User-defined fill 

 

Graphics Drivers 

 

Constant       

| Value/Comment 

 

--------------ì------------------------ 

 

CurrentDriver  

|   -128/For GetModeRange 

 

Detect         |   0/Requests autodetection 

 

CGA            |   1 

 

MCGA           

|   2 

 

EGA            |   3 

 

EGA64          

|   4 

 

EGAMono       

|   5 

 

IBM8514        

|   6 

 

HercMono       

|   7 

 

ATT400         

|   8 

 

VGA            |  9
PC3270         

|  10 

 

Graphics Modes for Each Driver 

 

Constant 

| Value | Meaning       Constant  | Value | Meaning 

-----------ì-------ì-----------   -----------ì-------ì------------ 
CGAC0  

|   0  |320 x 200       EGALo     |   0   | 640 x 200 

CGAC    

|   1   | 320 x 200     EGAHi     

|   1   | 640 x 350 

CGAC2   

|   2   | 320 x 200                      

|        | 

CGAC3   

|   3   | 320 x 200     EGA64Lo  |   0   | 640 x 200 

CGAHi    

|   4   | 640 x 200     EGA64Hi 

|   1   | 640 x 350 

 

|

|

|

|

MCGAC0    |   0   | 320 x 200   ATT400C0    |   0   | 320 x 200 
MCGAC1    |   1   | 320 x 200   ATT400C1    |   1   | 320 x 200 
MCGAC2    |   2   | 320 x 200   ATT400C2    |   2   | 320 x 200 
MCGAC3    |   3   | 320 x 200   ATT400C3    |   3   | 320 x 200 
MCGAMed  |   4   | 640 x 200 ATT400Med   |   4   | 640 x 200 
MCGAHi   

|   5   | 640 x 480   ATT400Hi    |   5   | 640 x 400 

 

|

|

|

|

EGAMonoHi  |   3   | 640 x 350  IBM8514Lo  |   0   | 640 x 480 
HercMonoHi   |   0   | 720 x 348  IBM8514Hi  |   1   |1024x768 
 

|

|

|

|

VGALo           |  0     | 640 x 200    PC3270Hi     |   0   | 720 x 350 
VGAMed        |   1    | 640 x 350     VGAHi   

|   2   | 640 x 480 

 

Justification Constants 

 
Horizontal Constant | Value 
-------------------------- 
 LeftText            

|   0 

 CenterText          

|   1 

 RightText           

|   2 

 
Vertical Constant   

| Value 

------------------------------- 
 BottomText          

|   0 

 CenterText          

|   1 

 TopText             

|   2 

 

Line-Style and Width Constants 

 
Line Styles: 
 SolidLn   0 
 DottedLn  1 
 CenterLn  2 
 DashedLn  3 
 UserBitLn 4 (User-defined line style) 
 
Line Widths: 
 NormWidth  1 
 ThickWidth 3 
 

Text-Style Constants 

 
Constant       

|Value| Meaning 

--------------ì-------ì------------------- 
DefaultFont  

|   0   | 8x8 bit mapped font 

TriplexFont  

|   1   | Stroked font 

SmallFont      

|   2   | Stroked font 

SansSerifFont 

|   3   | Stroked font 

GothicFont     

|   4   | Stroked font 

HorizDir       

|   0   | Orient left to right 

VertDir        

|   1   | Orient bottom to top 

UserCharSize 

|   0   | User-defined character size 

 

13.2.1.2 Types 

:

ArcCoordsType 
FillPatternType 
FillSettingsType 
Graphics Memory Pointers 
LineSettingsType 
PaletteType 
PointType 

 TextSettingsType 
 ViewPort 

 


Document Outline