Úvod do procedúr.
Príkaz vetvenia – case.
·
hodnoty
sú z intervalu -2147483648 .. 2147483647
·
zaberá
4 bajty = 32 bitov, 1bit znamienko
·
definované
sú aritmetické operácie +, -, *, div, mod, obidva operandy sú celé čísla
·
priraďovací
príkaz, na oboch stranách celé čísla
·
relačné
operácie <, <=, ...
·
pred, succ - funkcie
·
inc, dec -
príkazy
·
štandardné
funkcie, napr. sqr,
abs
·
šestnástkové
konštanty - $, napr. $1e=30
·
čísla
vyjadrené desatinným zápisom aj s exponentom
·
obsahuje
des. bodku, exponent približne ±300
·
real
± (5.0 x 10^–324 .. 1.7 x 10^308 ) 15-16 číslic 8 bajtov
·
ukážky
reálnych čísel 1.23, -3.23989E+02, 9.89E-01
·
pre
každé číslo nevieme určiť nasledovné reálne číslo,
t.j. medzi 0 a 0.0001 možno existuje číslo, nemá zmysel nasledovník,
t.j. nefunguje pred ani succ
·
operácie
- vyzerajú rovnako, ale sú to iné operácie, robia s reálnymi číslami +, -, *, /
(oba operandy sú reálne)
·
automatická
konverzia - keď sa pri reálnej operácii vyskytne celočíslený operand konvertuje
sa na reálne číslo, napr. 1+1.5, 1/3 = 1.0/3.0
·
analogicky
s relačnými a s priradením, real:=integer, ale nie integer:=real !! !
·
nefunguje
ani inc, dec
·
reálne
operácie veľmi často majú chyby spôsobené realizáciou v počítači
·
štandardné
funkcie, napr. sqrt,
sqr, sin, cos, abs
·
ordinálny
typ, ktorý obsahuje sadu 256 znakov (tzv. ASCII), tieto sú usporiadané
·
vnútorne
sú reprezentované číselným kódom 0..255, t.j. zaberajú 1 bajt (8 bitov)
·
znakové
konštanty v apostrofoch alebo #kód
·
v
Pascale nie sú žiadne znakové operácie (iba relácie)
·
treba
si pamätať:
o
'
'<...<'0'<'1'<...<'9'<...<'A'<'B'<...<'Z'<...<'a'<'b'<...<'z'
·
znakové
funkcie: pred, succ, ord, chr (char)
·
treba
si pamätať:
ord(' ')=32; ord('0')=48;
ord('1')=49; ...
alebo #32=' '; #48='0'; #49='1'; ...
ord('A')=65;
ord('a')=ord('A')+32=97; ...
t.j. #65='A'; #97='a'; ...
·
ak
c obsahuje znak cifry ('0'..'9'), tak ord(c)-ord('0')=cifra (podobne pre písmená)
·
príkazy
inc, dec fungujú aj pre znaky (napr. c:='A';
inc(c,32);
)
·
typ
char využijeme najmä pri práci so súbormi
Tabuľka ASCII kódu
s r |
2 |
3 |
4 |
5 |
6 |
0 |
|
0 |
@ |
P |
|
1 |
! |
1 |
A |
Q |
a |
2 |
“ |
2 |
B |
R |
b |
3 |
# |
3 |
C |
S |
c |
4 |
$ |
4 |
D |
T |
d |
5 |
% |
5 |
E |
U |
e |
6 |
& |
6 |
F |
V |
f |
7 |
‘ |
7 |
G |
W |
g |
8 |
( |
8 |
H |
X |
h |
9 |
) |
9 |
I |
Y |
i |
10 |
* |
: |
J |
Z |
j |
11 |
- |
; |
K |
[ |
k |
12 |
, |
< |
L |
\ |
l |
13 |
- |
= |
M |
] |
m |
14 |
. |
> |
N |
^ |
n |
15 |
/ |
? |
O |
_ |
o |
16*s+r
Pre veľké A máme: 16*4 + 1 = 65
·
je
to pomenovanie nejakého algoritmu, nejakej časti programu s možnosťou vyvolať
túto časť pomocou príslušného mena
·
pomocou
podprogramov môžeme riešiť problém jeho rozdelením na podúlohy -> riešenie
zhora nadol
·
v
pascale môžu byť podprogramy
o
procedúry
o
funkcie
– vrátia nejakú hodnotu
·
majú
výhodu, že sú viacnásobne použiteľné
·
neskôr
uvidíme aj rekurziu
procedure hviezdicky;
var i: integer;
begin
for i:=1
to 30 do write('*');
writeln;
end;
procedure hviezdicky(n:
integer); var i: integer; begin for
i:=1 to n do write('*'); writeln; end; |
procedure nsd(A, B: integer; var X: integer);
var Y: integer;
begin
X:=A;
Y:=B;
while
X<>Y do
if
X>Y then X:=X-Y else Y:=Y-X;
end;
Deklarácie procedúr
|
program NSD2;
var A, B, X: integer;
{A, B - ulozenie cisel; X - najv. spolocny delitel}
procedure nsd(A, B: integer; var X: integer);
var Y: integer;
begin
X:=A; Y:=B;
while X<>Y do
if X>Y then X:=X-Y else Y:=Y-X;
end;
begin
writeln(‘Zadaj dve prirodzene cisla‘);
readln(A, B);
nsd(A, B, X);
writeln(‘Najvacsi spolocny delitel cisel’, A,
B,’ je’, X);
end.
Ako pracuje
počítač pri volaní procedúry:
·
keď
sa objaví v programe meno procedúry (musela byť definovaná v deklaráciách), ide
o volanie tejto procedúry, t.j.
1.
zapamätá
sa návratová adresa (kam sa bude treba vrátiť)
2.
vytvoria
sa lokálne premenné procedúry (s nedefinovanou hodnotou)
- neskôr uvidíme, že tu sa vytvoria aj formálne parametre
3.
prenesie
sa riadenie programu do tela podprogramu
4.
vykonajú
sa všetky príkazy podprogramu
5.
zrušia
sa lokálne premenné
6.
riadenie
sa vráti za miesto v programe, odkiaľ bol podprogram volaný
pre pascal platí
·
pri
volaní procedúry mu môžeme poslať nejaké hodnoty, aby sme nemuseli rôzne
špeciality nastavovať v globálnych premenných (napr. veľkosť kresleného
štvorca): v podprograme zadefinujeme špeciálne lokálne premenné, tzv. formálne
parametre, do ktorých sa pred samotným volaním priradia (inicializujú) hodnoty skutočných
parametrov:
Príkaz case
case výraz
of
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
2 |
|
|
|
|
|
|
|
3 |
|
© |
|
© |
|
|
|
4 |
© |
|
|
|
© |
|
|
5 |
|
|
® |
|
|
|
|
6 |
© |
|
|
|
© |
|
|
7 |
|
© |
|
© |
|
|
|
8 |
|
|
|
|
|
|
|
Nech jazdec je v
pozícii i -tý riadok a j - ty stĺpec. Jazdec by mohol skočiť na jednu z 8
uvedených pozícii. Určte novú potenciálnu pozíciu jazdca nech sa rozhodne
akokoľvek. Má 8 možnosti.
procedure
Nova_pozicia(i, j: integer; k: integer; var in, jn: integer);
{i, j je pozicia, v ktorej sa nachadza, k je typ
skoku, in, jn je nova pozicia}
begin
case k of
1: begin in:= i+1; jn:=
j+2; end;
2: begin in:= i-1;
jn:=j+2; end;
3: begin in:= i-2; jn:=
j+1;end;
4: begin in:= i-2; jn:=
j-1; end;
5: begin in:= i-1; jn:=
j-2; end;
6: begin in:= i+1; jn:= j-2;
end;
7: begin in:= i+2; jn:=
j-1; end;
8: begin in:= i+2; jn:=
j+1; end;
end;
end;