Zhrnutie poznatkov o jednoduchých typoch:    Integer, Real, Char.

Úvod do procedúr.  Príkaz vetvenia – case.

 

 


 

Integer

·         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

 


Real

·         čí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

 


 

Typ CHAR

·         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


 

Procedúry - podprogramy

·         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

  • procedure meno;
    ... // lokálne deklarácie pre procedúru
    begin
    ... // telo procedúry
    end;

 

  • procedure meno(formálne parametre);
    ... // lokálne deklarácie pre procedúru
    begin
    ... // telo procedúry
    end;

 

 

 

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í

 

Formálne parametre

·         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

  • všeobecný tvar príkazu case je

case výraz of
  
konštanta1: príkaz1;
  
konštanta2: príkaz2;
  ...
  
else
príkazy
end;

  • pričom vetva else (podobne ako pri if) môže chýbať

 

  • výraz aj konštanty môžu byť len celočíselného typu (mohli by byť aj logického typu, ale toto zrejme veľký význam nemá; neskôr uvidíme aj iné prípustné typy

 

 

Príklad:

 

 

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;