Informatyka Wykład Turbo pascal 7

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

i

a cuchy znaków

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

3.3.3.1 Znaki

sterujCce ( kontrolne )

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

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

3.3.3.2

Znaki podstawowego i rozszerzonego kodu ASCII

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

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

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

1

AND koniunkcja

2

OR alternatywa

2

XOR róznica

symetyczna

2

Wyniki operacji logicznych

A1

A2

not

x

not

y

and

y x

or

y x

xor

y

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

5.4.1 Priorytet

operatorów

Priorytet Operatory

0 (najwy4szy )

wyra4enia w nawiasach

1

NOT

2

* / DIV MOD AND

3

+ - OR XOR

4

< <= >= = <>

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, m - wyra4enia ca kowite


Program Wypisz ;
var l : Byte;

i

: Integer;

r

: Real;

begin

i:=2;

l:=7;

r:= l / i ;

write (1:4 );

write (l : 4 );

write(r:5:2);

end.

Jaki b dzie wynik wykonania programu ?

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 i Instrukcja2 muszC byS pojedynczymi
instrukcjami.

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

przez 0 ');

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


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

pominCS zmieniajCc warunek na przeciwny czyli

(b`)

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

y:= 1/x;

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 I ;
gdzie
zm - Zmienna sterujCca p tlC
wp - warto8S poczCtkowa
wk - warto8S ko.cowa

I

- pojedyncza instrukcja


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

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

- pojedyncza instrukcja

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

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

for k:=1 to 8 do

write(zn:k);

end.

False

I

True

Zm <= wk

Zm:=wp

Zm:=succ(zm)

False

I

True

Zm >= wk

Zm:=wp

Zm:=pred(zm)

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 I ;
gdzie
wl - wyra4enie logiczne
I

- pojedyncza instrukcja

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

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

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

begin

i:=i+1;

writeln(i);

end;
end.

xxx

False

I

True

WL

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 n jest
wyra4eniem typu LongInt. Pierwszy sk adnik pliku ma numer 0. Seek
mo4e byS u4yte do rozszerzenia pliku, poprzez ustawienie sk adnika
pliku na pierwszy za ko.cem pliku, tzn. Seek(Plik, FileSize(Plik)).

FileSize(Plik)

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

FilePos(Plik)

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

Erase(Plik)

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

Rename(Plik, Nowa_nazwa)

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

Truncate(Plik)

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

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


Wyszukiwarka

Podobne podstrony:
Podstawy Informatyki Wykład X Object Pascal Jezyki programowania, Proste typy danych
Tp w 10 Programowanie modularne w Turbo Pascalu, INFORMATYKA, PROGRAMOWANIE, wykłady
Sem II Transport, Podstawy Informatyki Wykład XXI Object Pascal Komponenty
Sem II Transport, Podstawy Informatyki Wykład XIV i XV Object Pascal Funkcje i procedury
Podstawy Informatyki Wykład XI Object Pascal Podstawy programowania w Object Pascalu
Na czym polega programowanie w TURBO Pascalu, INFORMATYKA
Podstawy Informatyki Wykład XVI Object Pascal Obiekty
Sem II Transport, Podstawy Informatyki Wykład XII Object Pascal Instrukcje sterujące
Podstawy Informatyki Wykład XIII Object Pascal Funkcje i procedury
Informatyka, TURBO PASCAL, TURBO PASCAL
Podstawy Informatyki Wykład XVII Object Pascal Komponenty
Turbo Pascal kurs, Technik Informatyk, Programowanie strukturalne i obiektowe Turbo Pascal
Podstawy Informatyki Wykład XV Object Pascal Grafika
Grafika w Turbo Pascalu, Informatyka -all, INFORMATYKA-all
Sem II Transport, Podstawy Informatyki Wykład XIX i XX Object Pascal Obiekty
Podstawy Informatyki Wykład XII Object Pascal Instrukcje sterujące
Kurs-jezyka-Turbo-Pascal, ♪ DOKUMENTY(Arkusze-matura-inne), ♥ Edukacja i Technika, Informatyka

więcej podobnych podstron