11. Programovanie

1. Programy a študijné materiály

Študijné materiály:

Študijné materiály pre Javu:

Vývojové nástroje:

2. Algoritmy

1. Algoritmus

Algoritmus je postup ako riešiť úlohu. Program je algoritmus zapísaný do matematickej formy, ktorú vie vykonávať počítač. Algoritmus zo vstupných údajov určí výstupné údaje. Pre jednu úlohu môže existovať viac vhodných algoritmov, podľa toho pre koho je určený, alebo čo berie do úvahy.

Príklad 1: Algoritmus pre ľudí: Príprava hrianok:

  • nakrájame chlieb
  • na panvicu dáme olej
  • zapneme ohrev a položíme chlieb
  • čakáme kým zhnedne a potom vyberieme

Príklad 2: Algritmus pre počítač: Súčet dvoch čísel.

  • načítaj 2 čísla A, B
  • C ← A + B
  • vypíš C

Algoritmizácia úlohy - je postup ako nájsť riešenie a zapísať ho do podoby vhodnej pre spracovanie údajov:

  1. definovanie vstupov
  2. definovanie výstupov
  3. hľadať riešenia, vybrať to najlepšie
  4. rozdeliť riešenie na menšie úlohy, ktoré možno zapísať matematicky

Príklad 3: Algoritmizácia úlohy: Určenie skutočnej spotreby auta po bežnej trase.

  1. vstupy: kilomtere, litre
  2. výstupy: litrov/km
  3. hľadanie riešení:
    1. až auto zastane, naliať liter benzínu a zmerať koľko kilometrov ešte prejdeme
    2. natankovať plnú nádrž, nejaký čas jazdiť a potom znova natankovať plnú nádrž
    3. počkať kým zasvieti signalizácia rezervy, niečo natankovať, a jazdiť kým znova nezasvieti rezerva ... tento riešenie som si vybral
  4. rozdelenie úlohy na menšie časti:
    • ak zasvieti rezerva, odčítať stav kilometrov KM1
    • po natankovaní poznačiť množstvo natankovaného benzínu LITRE
    • keď znova zasvieti rezerva, poznačiť stav kilometrov KM2
    • vypočítať prejdené kilentre KM = KM2 - KM1
    • vypočítať spotrebu na km SPOTREBA = LITRE : KM
    • poznačiť si údaj SPOTREBA na papier
PrílohaVeľkosť
AlgoritmyStruktury.svg55.46 KB
AlgoritmusProgram.odg10.03 KB
AlgoritmusProgram.svg13.24 KB

2. Vývojové diagramy

Značky

Lineárny algoritmus

- obsahuje sled príkazov.

Príklady 1: Súčet dvoch čísel:

Príklady 2: Priemer 2 čísel:

C <-- (A + B)/2

PrílohaVeľkosť
DiagramyVyvojoveZnacky.PNG29.32 KB
algoritmus1.PNG13.25 KB
algoritmus2.PNG17.64 KB
algoritmus4.PNG21.25 KB
algoritmus3.PNG17.19 KB
algoritmus5.PNG14.98 KB
VyvojoveDiagramy.svg40.31 KB
VyvojoveDiagramy.zip54.71 KB
VyvojoveDiagramy2.svg20.59 KB
VyvojoveDiagramy3.svg18.63 KB
VyvojoveDiagramy4.svg21.41 KB
VyvojoveDiagramy1.odg20.15 KB
VyvojoveDiagramy1v2.svg42.61 KB

3. Programovanie

Úrovne programovania

  1. Strojový kód - príkazy a dáta sa píšu v binárnom kóde (1 a 0), ktoré vykonáva procesor. Binárny je .exe súbor vo Windows.
  2. Vyššie programovacie jazyky - napríklad Basic, Pascal, Java, C - slovne popisujú problém. Program zapísaný vo vyššom jazyku sa nazýva zdrojový. Pre Pascal je to súbor .pas.
  3. Vývojové nástroje - sú program na programovanie, napríklad FreePascal, Delphi, Lazarus. Uľahčujú programovanie, napríklad hľadajú chyby, vytvárajú binárne programy, vkladajú časti zdrojového programu.

Požadované vlastnosti programu

  1. Konečnosť = po urrčitom čase alebo počte krokov muí skončiť.
  2. Jednoznačnosť = má robiť to čo po ňom chceme a nič iné.
  3. Efektivita = s najmenší úsilím dosiahnúť najlepšie výsledky.
  4. Všeobecnosť = rieši množinu problémov.
  5. Prehľadnosť = program nás informuje.

4. Číselné sústavy

Číselná sústava je spôsob, akým sú zapisované čísla pomocou znakov (nazývaných cifry).

Nepozičná číselná sústava

Nepozičná číselná sústava je spôsob reprezentácie čísel, v ktorom nie je hodnota číslice daná jej umiestnením v danej sekvencii číslic. Tieto spôsoby zápisu čísel sa dnes už takmer nepoužívajú a sú považované za zastarané.

V najjednoduchšom systéme stačí sčítať hodnoty jednotlivých číslic. Ak by napríklad boli hodnoty symbolov nasledovné: A = 1, B = 10, C = 100, D = 1000, potom by vyjadrením čísla 3542 mohol byť napríklad reťazec "AABBBBCCCCCDDD", ale rovnako dobre aj "ACDABBCCCCDDBB" a pod. (z hľadiska hodnoty, ale za cenu horšej zrozumiteľnosti).

Nevýhody

  • Často neobsahovali symbol pre nulu a záporné čísla
  • Dlhý zápis čísel, ktorá výrazne prevyšujú hodnotu najväčšieho symbolu sústavy

Výhody: Jednoduché sčítanie a odčítanie

Rímske číslice sú spôsob zápisu čísiel pomocou písmen abecedy. Ešte v 19. storočí bola veľmi rozšírená. Dnes sa používa zriedkavo, napríklad čísla kapitol v knihách.

Základné symboly:

  • I = 1
  • V = 5
  • X = 10
  • L = 50
  • C = 100
  • D = 500
  • M = 1 000

Spájaním a opakovaním sa zapisujú väčšie čísla, väčšie číslice predchádzajú menším. Napríklad VI je 6, CLXXIII je 173, MDCCCXXII je 1822. Rimania písali číslo 4 ako IIII, číslo 40 ako XXXX, číslo 999 ako DCCCCLXXXXVIIII. Ku skráteniu zápisu dlhých čísiel sa v stredoveku používalo pravidlo pre odčítanie, použilo sa šesť zložených symbolov, v ktorých menšia číslica predchádza väčšej:

  • IV = 4
  • IX = 9
  • XL = 40
  • XC = 90
  • CD = 400
  • CM = 900

Pri použití tohto pravidla možno číslo 999 napísať úspornejším spôsobom CMXCIX. Používanie iných symbolov nie je dovolené. Preto nemožno napísať 999 ako IM. Na druhej strane ale používanie tohto pravidla nie je povinné. Číslicu 4 možno napísať správne ako IV aj ako IIII.

Neskôr sa používajli aj malé písmená, napr. vi znamená 6 a cxiv 114. Niekedy sú miešané, napr. Cxl pre 140. Niekedy sa dokonca používa namiesto malého i písmeno j. Niekedy sa používa písmeno j iba ako posledný znak v slede jednotiek, napr. xxiij pre 23.

Pozičná číselná sústava

Pozičná číselná sústava je dnes prevládajúci spôsob písomnej reprezentácie čísel. Váha každej číslice je daná jej pozíciou v postupnosti symbolov. Základ je zvyčajne prirodzené číslo väčšie ako jedna. Váhy jednotlivých číslic sú potom mocninami tohto základu. Zároveň základ určuje počet symbolov pre číslice používané v danej sústave. V pozičných číselných sústavách má tiež zmysel hovoriť o rádoch čísel. Kde za rád číslice považujeme jej váhu a za rád čísla maximálnu váhu nenulovej číslice.

Desiatková sústava, nazvaná podľa svojho základu (10) má desať symbolov pre číslice: 0, 1, 2, 3, 4, 5, 6, 7, 8 a 9. Váhy jednotlivých číslic sú mocniny čísla 10: ...; 1000; 100; 10; 1; 0,1; 0,01; ... Pre sústavy o vyššom základe ako je tradičný počet číslic (teda desať) sa pre vyššie číslice používajú písmená bez akcentov. Napríklad šestnástková sústava má symboly: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Pričom A = 10, B = 11... F = 15.

V bežne používaných číselných sústavách sa jednotlivé číslice zapisujú za seba, nijako sa neoddeľujú. Čiarka odlišuje len celú a zlomkovú časť čísla. Niekedy sa pre prehľadnosť oddeľujú tiež významnejšie rády: tisíce, milióny, a pod. Číslo sa zapíše do zátvoriek za ktorou je dolný index so základom. V prípade desiatkovej sústavy sa číslo nemusí zapisovať do zátvoriek, ani nie je nutné k nemu písať jeho základ.

Hodnotu čísla zapísanáho v danej sústave získame ako súčet hodnôt jednotlivých číslic vynásobených ich váhou. Napríklad:

(10010)2 = 0 ⋅ 20 + 1 ⋅ 21 + 0 ⋅ 22 + 0 ⋅ 23 + 1 ⋅ 24 = 0 + 2 + 0 + 0 + 16 = 18

(152)8 = 2 ⋅ 80 + 5 ⋅ 81 + 2 ⋅ 83 = 2 + 40 + 64 = 105

(A3F)16 = 15 ⋅ 160 + 3 ⋅ 161 + 10 ⋅ 162 = 15 + 48 + 2560 = 2623

Postup pre zápis čísla v danej číselnej sústave sa líši pre jeho celú a zlomkovú časť.

Celá časť čísla (metóda delenia základom) možno vypočítať takto:

  1. Prepočítavané číslo celočíselne delíme základom cieľovej sústavy.
  2. Z podielu zapíšeme celé číslo a zvyšok po delení.
  3. Výsledok delenia použijeme v ďalšom cykle algoritmu.
  4. Predchádzajúce kroky opakujeme, kým nie je výsledkom delenia nula.
  5. Prepočítané číslo je zápis zvyškov po delení v opačnom poradí ako sa vypočítali.

Príklad: (152)10= (x)2:

152 : 2 = 76 zv. 0
79 : 2 = 38 zv. 0
38 : 2 = 19 zv. 0
19 : 2 = 9 zv. 1
9 : 2 = 4 zv. 1
4 : 2 = 2 zv. 0
2 : 2 = 1 zv. 0
1 : 2 = 0 zv. 1

Výsledok: (152)10= (10011000)2

Zlomková časť čísla (metóda násobenia základom) sa vyráta podobne, len namiesto delenia sa násobí. Postup je nasledujúci:

  1. Zlomkovú (desatinnú) časť násobíme základom cieľovej sústavy.
  2. Výsledok zapíšeme ako súčet celej a zlomkovej časti. Zlomkovú časť použijeme v ďalšom opakovaní tohto násobenia.
  3. Predchádzajúce kroky sa opakujú, až kým nie je dosiahnutý zvyšok 0 alebo požadovaná presnosť výsledku
  4. Cela časť získaného čísla je príslušnou číslicou požadovaného zápisu v inej číselnej sústave. Zapisuje sa od desatinnej čiarky doprava v poradí ako bola vypočítaná.
  5. Príklad. (0,6789)10= (x)2:

    0,678 9 ⋅ 2 = 1,357 8 = 1 + 0,357 8
    0,357 8 ⋅ 2 = 0,715 6 = 0 + 0,715 6
    0,715 6 ⋅ 2 = 1,431 2 = 1 + 0,431 2
    0,431 2 ⋅ 2 = 0,862 4 = 0 + 0,862 4
    0,862 4 ⋅ 2 = 1,724 8 = 1 + 0,724 8

    Výsledok je (0,6789)10= (0,10101)2.

    Priame prevody medzi sústavami sú možné, ak základ jednej sústavy je mocninou základu sústavy druhej. Obvykle sa tento postup používa pri prevode medzi dvojkovou a šestnástkovou. Pretože je 16=24, zodpovedá každým štyrom čísliciam dvojkového čísla práve jedna číslica šestnástková. Napríklad číslo (10010001)2obsahuje 2 štvorice znakov (1001)2 = (9)16 a (0001)2 = (1)16 a preto (10010001)2=(91)16. Pri priamom prevode zo 16-kovej do 2-kovej sústavy stačí nahradiť každý znak 16-kovej sústavy kombináciou dvojkových číslic:

    0 = 0000
    1 = 0001
    2 = 0010
    3 = 0011
    4 = 0100
    5 = 0101
    6 = 0110
    7 = 0111
    8 = 1000
    9 = 1001
    A = 1010
    B = 1011
    C = 1100
    D = 1101
    E = 1110
    F = 1111

    Napríklad (A2)16 = (1010 0010)2.

    Otázky na opakovanie

    1. Zapíšte rímskymi číslicami 2018.
    2. Zapíšte v desiatkovej sústave (1011)2
    3. Prepočítajte do dvojkovej sústavy 14,25
    4. Spravte priamy prevod medzi sústavami (10110011)2 = (x)16 ; (A2)16 = (x)2

5. Logické operácie

Logické hodnoty:

  • True = pravda = logická 1
  • False = nepravda = logická 0

Príklad 1: Výrok "v januári mrzne" má logickú hodnotu "pravda".

Základné logické funkcie:

  • AND = a zároveň - musia byť splnené všetky podmienky
  • OR = alebo - stačí aby bola splnená aspoň jedna podmienka
  • NOT = negácia = opak - opačná hodnota

Príklady:

  • AND - Pri horení je potrebné palivo a vzduch./li>
  • OR - Kúriť možno plynom alebo elektrinou.
  • NOT - Dnes je slnečné počasie a zajtra bude opak, zamračené.

Zápis logických operácií:

  • logický súčet: AND, "+", "∨"
  • logický súčin: OR, "." , "x" , "∧"
  • negácia: NOT, čiara nad premennou, apostrof, znak mínus "-"

Odvodené logické funkcie:

  • XOR - exkluzívna disjunkcia = nezhoda = buď alebo. Porovnáva unikátnosť hodnoty každého vstupu: a XOR b = a.b´ + a´.b
  • EQ - ekvivalencia = zhoda. a EQ b = ab + a´b´= (a + b´) . (a´+ b)

Príklady:

  • XOR - Na výlet pôjdeme buď na turisitiku do hôr, alebo k vodnej nádrži.
  • EQ - Na idúcom aute majú byť zapnuté obrysové aj stretávacie svetlá, alebo žiadne z nich.

Pravdivostné tabuľky funkcií obsahujú všetky kombinácie stavov premenných:

Úlohu: Napíšte logickú rovnicu pre stavbu snehuliaka. Snehuliak sa stavia (Q) ak je sneh (A), a je teplo (B) alebo svieti slnko (C).

Q = A AND (B OR C)

Q = A . (B + C)

Zápis logického výrazu z tabuľky hodnôt:

  1. Súčinova metóda: Z tabuľky zvolíme riadky s výslednou hodnotou 1. Premenné v riadku zapíšeme ako logický súčin, pričom premenné ktoré majú hodnotu 0 sa zapíšu ako negácia. Jednotlivé riadky zapíšeme ako logický súčet.
  2. Súčtová metóda: Z pravdivostní tabulky sa vyberú riadky, ktoré majú výsledek operácie rovný logickej nule. Z vybraných riadkov sa vytvoria logické súčty. Ak je premenná rovna 1, tak sa neguje. Ak je logická premenná rovná 0, neneguje sa.

Úloha: Napíšte logickú rovnicu z pravdivostnej tabuľky pre stavbu snehuliaka:

Použijeme metódu ktorá dáva jednoduchšiu rovnicu, v tomto prípade súčinovú:
Q = (´A . B . C) + (A . ´B . C)

Minimalizácia logického výrazu sa dá robiť pomocou

  1. Booleova algebra – vhodná pre jednoduché funkcie a učnú úpravu, https://is.muni.cz/th/322248/pedf_b/Booleova_algebra.pdf .
  2. Karnaughove mapy – pre ručnú úpravu, vhodné pre max. 3 premenné, https://sk.wikipedia.org/wiki/Karnaughova_mapa
  3. Quineova metóda - pre počítačové riešenie, pre max 4 premenné, https://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm
  4. Heuristické metódy - pre počítače a veľa premenných, program https://en.wikipedia.org/wiki/Espresso_heuristic_logic_minimizer

Booleova algebra zovšeobecňuje vlastnosti množinových a logických operácií, pre ktoré sú definované axiómy (základné vety):

  • komutativita: A + B = B + A
  • distributivita:
    A + (B x C) = (A + B) x (A + C)
    A x (B + C) = (A x B) + (A x C)
  • neutralita:
    A + 0 = A
    A x 1 = A
  • komplementarita
    A + -A = 1
    A x -A = 0

Platí:

  • asociativita:
    (A + B) + C = A + (B + C)
    (A x B) x C = A x (B x C)
  • absorpcia:
    A + (A x C) = A
    A x (A + B) = A
  • agresivita nuly: A x 0 = 0
  • agresivita jednotky: A + 1 = 1
  • idempotencia:
    A + A = A
    A x A = A
  • absorpcia negácie:
    A + (−A x B) = A + B
    A x (−A + B) = A x B
  • dvojitá negácia: −(−A) = A
  • De Morganove zákony:
    −A x −B = −(A + B)
    −A + −B = −(A x B)
  • 0 a 1 sú vzájomne komplementárne:
    −0 = 1
    −1 = 0

Príklady na zjednodušenie:

  1. a.(b+c) + ac = ab + ac + ac = ab + ac = a(b+c)
  2. ab + ac + ac´ = ab + a.(c + c´) = ab + a.(1) = ab + a = a(b + 1) = a
  3. stavba snehuliaka: Q = (-A x B x C) + (A x -B x C) = C x (-A x B + A x -B)

Karnaughova mapa - V tabuľke sú výsledky, v hlavičke sú úseky pre hodnoty 0 a 1 pre jednotlivé premenné. Pre stavbu snehuliaka môže vyzerať takto:

Z tejto tabuľky vyčítame minimálnu funkciu. Q = C x (-A x B + A x -B)

PrílohaVeľkosť
LogickaTabulkaFunkcia.PNG8.17 KB
LogickaTabulkaFunkcia.PNG6.92 KB
LogickaTabulkaFunkcia.PNG9.12 KB
LogickaTabulkaFunkcia.PNG9.24 KB
LogikaStaviameSnehuliaka.PNG4.78 KB
LogFunkcieTabulky.PNG4.7 KB
KarnaughSnehuliak.PNG1.59 KB

3. Pascal

1. Štruktúra programu

Časti programu

  1. HLAVIČKA - obsahuje názov programu a poznámky na čo je program a čo sa v ňom môže meniť. Začína slovom program.
  2. DEFINÍCIE, DEKLARÁCIE - definicía dátových typov (TYPE), premenných (VAR), použité programové jednotky (USES)
  3. TELO - obsahuje príkazy programu. Je ohraničené slovami begin a end.

Príklad: Program vymaže obrazovku a vypíše text: Ahoj svet.

{--------------------hlavička-------------------}

program NazovProgramu;

{----------------definície a deklarácie---------------}

uses CRT;

{----------------príkazová časť---------------}

begin
clrscr;
writeln('Ahoj svet.');
readln;
end.

{---------------------------------------------------}

Vyhradené slová:

begin - začiatok programu
end - koniec programu
uses - použité programové jednotky (nahranie knižnice príkazov)

Príkazy:

writeln - vypíše
readln - načíta
clrscr - zmaže obrazovku
{ } - komentár

Pomôcky:
' = Alt + 39
Názov súboru sa skladá z mena a prípony oddelených bodkou: meno.pripona , napríklad pokus.pas . Názov súboru a programu píšte len pomocou základných znakov a čísel, bez špeciálnych znakov ako sú mäkčene, dĺžne, medzery, lomtka, dvojbodka... Meno súboru môže mať maximálne 8 znakov. Inak program FreePascal zahlási chybu pri spustení vášho programu.

Vyhradené slová

Vyhradené slová slúžia na definovanie premenných, operácií, atď., preto sa nesmú používať na nič iné: and, array, asm, begin, case, const, constructor, destructor, div, do, downto, else, end, exports, file, for, function, goto, if, implementation, in, inherited, inline, interface, label, library, 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.

Úrovne programovania

  1. Strojový kód - príkazy a dáta zapísané v binárnom kóde (1 a 0), ktoré vykonáva procesor. Binárny súbor vo Windows je typu .exe .
  2. Vyššie programovacie jazyky - napríklad Basic, Pascal, Java, C - slovne popisujú problém. Program zapísaný vo vyššom jazyku sa nazýva zdrojový. Pre Pascal je to súbor typu .pas.
  3. Vývojové nástroje - sú programy uľahčujúce tvorbu zdrojového kódu, napríklad FreePascal, Delphi, Lazarus. Hľadajú chyby, vytvárajú binárne programy, vkladajú časti zdrojového programu.

Menu vo Free Pascal-e:

  • File = Súbor
    • New = Nový
    • Open = Otvor
    • Save = Ulož
    • Save as = Ulož ako (nepoužívajte špaciálne znaky - medzery, makčene, dĺžne, lomítka)
  • Run - spustiť program

2. Premenné

základné typy premenných

Definíciou premennej sa k nej priradí údajový typ. Používa sa kľúčové slovo var v časti pre definície a deklarácie.

Príklad typov:

  • integer - 2 Byty, -32 768 až 32 767
  • real - 6 Byteov, 2.9E-39 až 1.7E+38, 11 platných číslic
  • char - 1 znak
  • string - reťazec znakov

Operácie s premennými: priradenie (:=), matematické (+ - / *).

Príklad 1: Súčet dvoch celých čísel.

Program SucetCisel;
uses crt;
var a,b,c: integer;
begin
clrscr;
writeln('Zadaj dve cisla a, b ');
readln(a);
readln(b);
c:=a+b;
writeln('Sucet cisel je:', c);
readln;
end.

Príklad 2: Súčet dvoch reálnych čísel. Upravíme predchádzajúci program.

var a,b,c: real;

writeln('Sucet cisel je: ',c:0:2)

3. Grafika

Zoznam príkazov programovej jednotky Graph.

Knižnica Graph obsahuje príkazy pre prácu s grafikou. Vykresľujú sa farebné body pre obrazovku. Počiatok súradnicovej sústavy je v ľavom hornom rohu.

Štruktúra grafického programu

program Nazov;
uses Graph; {použitie programovej jednotky Graph}
var ovladac, grafmod: integer;
begin
DetectGraph(ovladac, grafmod); {zistí číslo ovládača sieťovej karty a grafický mód}
InitGraph(ovladac, grafmod, ' '); {inicializuje a nastavuje grafický režim}

{príkazy na nakreslenie obrázka}

CloseGraph; {ukončí grafický režimý}
end.

Niektoré príkazy na kreslenie obrázkov

ClearDevice - vymaže grafickú obrazovku

SetBkColor(farba) - nastaví farbu pozadia

SetColor(farba) - nastaví farbu textu a čiar

SetFillStyle(štýl,farba) - vyfarbí uzatvorený tvar zvoleným ľtýlom výpne a farbou

SetLineStyle(štýl, výplň, hrúbka) - nastavenie štýlu čiary, štýl: 0-3, výplň: 0-8, hrúbka: 1 alebo 3

Line(x1, y1, x2, y2) - vykreslenie čiary

Circle(x, y, r) - kružnica

Rectangle(x1, y1, x2, y2) - obdĺžnik

FillEllipse(x, y, a, b) - vyfarbená elipsa

OutTextXY(x, y, text) - výpis textu od pozície [x, y]

SetTextStyle(font, smer, veľkosť) - nastavenie štýlu textu, font: 0-4, smer: 0-horizontálny, 1-vertikálny

Príklady

Riešený príklad: Nakreslenie čiary.

Z programovej jednotky Graph použijeme príkazy:

SetBkColor(black); {Nastaví farbu pozadia: čierna}
SetColor(3); {Nastaví farbu čiary}
ClearDevice; {Vymaže grafickú obrazovku}
Line(50,100,300,200); {Nakreslí čiaru z bodu [50,100] do bodu [300,200]}

Príklady na precvičenie:

Domček + zväčšenie podľa čísla zadaného z klávesnice:

Robot + zväčšenie podľa čísla zadaného z klávesnice:

Auto + zväčšenie podľa čísla zadaného z klávesnice:

Oblak + posunie sa vodorovne podľa čísla zadaného z klávesnice:

PrílohaVeľkosť
DomcekNafukovaci.odg14.9 KB
DomcekNafukovaci.svg22.34 KB
DomcekNafukovaci2.odg13.51 KB
DomcekNafukovaci2.svg18.33 KB
robot.odg11.57 KB
robot.svg16.21 KB
Oblak.odg15.6 KB
Oblak.svg14.36 KB
oblak.pas393 bajtov
ciara.odg13.82 KB
ciara.svg19.48 KB
domcek.odg12 KB
domcek.svg12.76 KB
auto.svg18.46 KB
auto.odg13.56 KB

4. Vetvenie

Vetvenie pomocou podmienky

if podmienka then príkaz;
if podmienka then príkaz1 else príkaz2;

Ak je podmienka splnená, vykonaj príkaz. Podmienka je ľubovoľný výraz typu Boolean (musí byť vyhodnotiteľná: pravda/nepravda) a príkaz môže byť aj zložený (skupina začne BEGINom a končí ENDom). Ak podmienka splnená nie je (jej hodnota je False), nerob nič, alebo vykonaj iný príkaz za ELSE (zase môže byť aj zložený).

Príklad 1: Absolútna hodnota čísla.

program AbsolutnaHodnota;
var x: integer;
begin
writeln(´Program na výpočet absolútnej hodnoty čísla.´);
writeln(´Zadaj číslo:´);
readln(x);
if x<0 then x:=x*(-1);
writeln(´Absolútna hodnota čísla je:´ x);
readln;
end.

Príklad 2: Odmocnina čísla.

program Odmocnina;
var x: real;
begin
writeln(´Program na výpočet absolútnej hodnoty čísla.´);
writeln(´Zadaj číslo:´);
readln(x);
if x<0 then writeln(´Záporné čísla neodmocňujeme´)
else begin y:=sqrt(x); writeln(´Odmocnina je:´ y); end;

readln;
end.

Vetvenie pomocou výberu

case Premenná of
Hodnota1: Príkaz1;
Hodnota2: Príkaz2;
Hodnota3: Príkaz3;
...
else InýPríkaz; end;

Ak má premenná Hodnotu1, vykoná sa Príkaz1 (aj zložený), ak má premenná Hodnotu2, vykoná sa Príkaz2... Ak sa obsah premennej nezhoduje ani s jednou uvedenou hodnotou, vykoná sa InýPríkaz; Časť s else môže byť vynechaná.

Príklad 3: Jedna hodnota pre možnosť.

Program VyberMoznosti;
uses crt;
var cislo: integer;
begin
clrscr;
writeln(‘Zvol moznost 1, 2 alebo 3!’);
readln(cislo);
case cislo of
1: writeln(‘Zvolil si moznost 1’);
2: writeln(‘Zvolil si moznost 2’);
3: writeln(‘Zvolil si moznost 3’);
else writeln('Zvolil si nespravnu hodnotu!');
end;

readln;
end.

Príklad 4: Viac hodnôt pre jednu možnosť.

Program VyberMoznosti2;
uses crt;
var znak: char;
begin
clrscr;
writeln(‘Zvol moznost A, B alebo C!’);
readln(znak);
case znak of
‘a’, ‘A’:writeln(‘Zvolil si moznost A’);
‘b’, ‘B’:writeln(‘Zvolil si moznost B’);
‘c’, ‘C’:writeln(‘Zvolil si moznost C’);
else
writeln(‘Zvolil si nespravny znak’);
end;

readln;
end.

Príklad 5: Intervaly hodnôt. Zápis hodnoty pH pomocou slov: zasada, kyselina, neutralna.

Program PhSlovom;
uses crt;
var ph: real;
begin
clrscr;
writeln(‘Program pre slovné pomenovanie pH.’);
writeln(‘Zadaj hodnotu pH od 0 do 14.’);
readln(ph);
writeln(’Latka je:’);
case volba of
0..6: writelneln(’kyselina’);
8..14: writelneln(’zásada’);
else
writeln(‘neutralna’);
end;

readln;
end.

PrílohaVeľkosť
Vyber.odg19.09 KB
Vyber.svg43.45 KB
IfThenElse.odg12.55 KB
IfThenElse.svg17.88 KB
IfThen.odg12.04 KB
IfThen.svg15.7 KB
CaseOf.svg20.42 KB
CaseOf.odg13.67 KB

5. Cykly

Cyklus opakovane vykonáva (zložený) príkaz.

Cyklus s pevným počtom krokov

Príkazy sa vykonajú nastaveným počtom opakovaní.

For prem := min To max Do príkaz;

Opakovane vykonáva príkaz, pričom hodnotu premennej Prem zvyšuje od Min do Max (Max>Min).

For prem := max DownTo min Do príkaz;

To isté ako For s To, ale hodnota premennej sa znižuje.

Príklad 1: Výpis celých čísel od min do max, a opačne.

Vypíšeme čísla od 1 do 10:

For i := 1 To 10 Do write(i,' ');

Doplníme opačný výpis.

For i := 10 DownTo 1 Do write(i,' ');

Program upravíme tak aby načítal minimálne a maximálne číslo výpisu, a potom ich vypísal:

readln(min);
readln(max);
For i := min To max Do write(i,' ');
For i := max DownTo min Do write(i,' ');

Cyklus s podmienkou na konci

Príkaz sa opakovane vykonáva, ak nie je splnená podmienka na konci. Príkaz sa musí vykonať aspoň raz. Ak je podmienka splnená, cyklus sa ukončí.

Repeat
príkaz1;
príkaz2;
...
Until nepravdiva_podmienka;

Príkazy REPEAT-UNTIL nahrádzajú slová BEGIN-END

Príklad 2: Aritmetický priemer známok, ak nepoznáme ich počet.

Budeme načítavať čísla, dokiaľ nenačítame hodnotu 0.

sucet:=0;
pocet:=-1;
Repeat
readln(X)
sucet := sucet + X;
pocet := pocet + 1;
Until X = 0;
priemer := sucet / pocet;

Upravíme podmienku tak, aby zistila čísla mimo rozsah 1 až 5:

Until ((X < 1) or (X > 5));
priemer := sucet / pocet;

Cyklus s podmienkou na začiatku

Príkaz sa opakovane vykonáva, dokiaľ je splnená podmienka na začiatku. Príkaz sa nemusí vykonať ani raz.

While pravdiva_podmienka Do príkaz;

Príklad 3: Výpočet najväčšieho spoločného deliteľa dvoch čísel.

Euklidov algoritmus spočíva v tom že dokiaľ nebude a = b, budú sa vykonávať operácie:
ak a > b potom a := a - b
ak b > a potom b := b - a

While a >< b Do
begin
if a>b then a:=a-b;
if b>a then b:=b-a;
end;

Pomôcky

repat until keypressed; {počká kým nestlačíme klávesu, je potrebná knižnica Crt}

break; {ukončí cyklus}

continue; {skok na dalsie opakovanie}

Príklady na opakovanie

a) cyklus s pevným počtom krokov (For - To)

Príklad 4: Výpočet faktoriálu:

Faktoriál je súčin čísel 1 až N, číže N! = 1 . 2 . 3 ... N. Napríklad 4! = 1 . 2 . 3 . 4 = 24.

vysledok := 1;
For i := 1 To cislo Do vysledok := vysledok * i;

b) cyklus s podmienkou na konci (Repeat - Until)

Príklad 5: Program načítava znak z klávesnice. V prípade že je to 'q' alebo 'Q', tak program ukončí.

repeat
writeln ('Stlac klaves (Q,q: koniec) ');
kl:=readkey;
writeln(kl);
until (kl='q') or (kl='Q');

c) cyklus s podmienkou na začiatku (While - Do)

PrílohaVeľkosť
CyklusSpevnym.odg13.06 KB
CyklusSpevnym.svg34.99 KB
CyklusNaZaciatku.svg14.23 KB
CyklusNaZaciatku.odg11.39 KB
CyklusNaKonci.svg14.33 KB
CyklusNaKonci.odg11.26 KB

6. Procedúry a funkcie

Procedúra je deklarovaný podprogram, ktorý možno volať z príkazovej časti programu pomocou jeho názvu.

Deklarácia procedúry:

procedure MenoProcedury; { hlavicka procedury }
begin { príkazová časť }
prikaz1;
prikaz2;
...
prikazn
end;

Procedúry bez lokálnych objektov a bez parametrov

používajú spoločné (globálne) premenné alebo iné objekty.

Príklad 1: Rozdelenie programu na výpočet priemeru dvoch čísel do procedúr.

program ZLOZENY;
uses crt;
var A,B,C: real;

{----- Deklaracia procedur -----}

procedure VSTUP;
begin
writeln(’Zadaj 2 čísla’);
readln(A);
readln(B);
end;

procedure PRIEMER;
begin
C:=(A+B)/2;
end;

procedure VYSTUP;
begin
writeln(’Priemer je: ’,C:0:2);
readln;
end;

{----- Prikazova cast programu -----}

begin
clrscr;
VSTUP;
PRIEMER;
VYSTUP;

end.

Procedúry s lokálnymi objektami a bez parametrov

Premenné definované v procedúrach zaberajú pamäť len počas činnosti procedúry.

Príklad 2: Výmena dvoch čísel.

program PouzitieVymeny;
uses CRT;
var A,B: integer;

{----- Deklaracia procedury -----}

procedure VYMENA;
var POM: integer;
begin
POM:=A; A:=B; B:=POM;
end;

{----- Prikazova cast programu -----}

begin
clrscr;
writeln('Vymena dvoch cisel.');
writeln('Zadaj 2 cele cisla:');
readln(A);
readln(B);
VYMENA;
writeln('Vymenene cisla su: ',A,' , ',B);
readln;
end.

Funkcie

Funkcia je podprogram, ktorý prenáša hodnoty cez premenné v zátvorke a sám vráti hodnotu. Deklaruje sa slovom function. Hodnotu funkcii priradíme spôsobmi:

  1. Pridadíme ju premennej Result. Netreba ju deklarovať, ak je vo FreePascale zapnutá kompatibilita s Delphi v menu: Options - Compiler.
  2. Hodnotu priradíme premennej s rovnakým názvom ako má fukcia.

Príklad 3: Program na výpočet mocniny 10^2.

program mocniny;

{----- Dekláracia funkcie -----}

function mocnina (zaklad, exponent: integer): integer;
var c, vysledok: integer;
begin
vysledok := 1;
for c := 1 to exponent do
vysledok := vysledok * zaklad;
mocnina := vysledok;
end;

{----- Samotný program -----}

begin
writeln(mocnina(10,2));
readln;
end.

..................

Príklad 4: Program na výpočet mocniny X^Y.

program mocniny;
uses Crt;
var X,Y: integer;

{----- Dekláracia funkcie -----}

function mocnina (zaklad, exponent: integer): integer;
var c, vysledok: integer;
begin
vysledok := 1;
for c := 1 to exponent do
vysledok := vysledok * zaklad;
mocnina := vysledok;
end;

Príklad 5: Program na výpočet faktoriálu X!.

Algoritmus: Faktoriál je súčin celých čísel 1 * 2 * ... X. V programe možno použiť cyklus s pevným počtom opakovaní:

Y:=1;
For i:=1 To X Do Y:=Y*i;

7. Polia

Pole je typ premenných rovnakého typu, ktoré majú svoje číselné indexy. K prvkom v poli pristupujeme pomocou názvu poľa, za ktorým nasleduje v hranatých zátvorkách index prvku. Napríklad:

ovocie[1] := 'jablko';
ovocie[2] := 'banan';
ovocie[3] := 'slivka';

Deklarácia poľa:

var
názov_poľa: array[začiatok..koniec]
of typ_premenných;

Naríklad:

var
ovocie: array[1..3] of string;

Príklad: Program načíta do poľa 5 čísel z klávesnice a vypíše ich v opačnom poradí.

program polia;
uses Crt;
var
c: integer;
pole: array[1..5] of integer;
begin
ClrScr;
{ ziskavanie }
for c := 1 to 5 do begin
writeln('Zadajte ', c, '. cislo.');
readln(pole[c]);
end;
{ opacny vypis }
writeln('Opacny vypis:');
for c := 5 downto 1 do
write(pole[c],' ');
readln;
end.

Graph - zoznam príkazov

Štandardná programová jednotka GRAPH

- obsahuje prostriedky pre prácu sgrafikou, kreslenie geometrických útvarov, pohyb grafického kurzora, prácu s farbami a iné grafické operácie. Na začiatku ju treba inicializovať a na konci ukončiť. Organizácia textovej a grafickej obrazovky sa v zásade líši.

Popis textovej obrazovky

  • Textová stránka sa skladá z 80 stĺpcov, 25 riadkov
  • celkovo prístupných 80 x 25 buniek
  • v každej bunke zobrazený jeden znak
  • miesto zapisovania je označené blikajúcim kurzorom
  • v každej bunke sa môžu naraz vyskytnúť dve farby -1. farba pozadia 2. farba znaku
  • riadky sú číslované od 1 po 25, stĺpce od 1 po 80

Grafická obrazovka

V programe pascal je implicitne navolená textová obrazovka, na prepnutie do grafického formátu musíme použiť príkaz jazyka. Pre našu potrebu budeme voliť grafickú kartu VGA s režimom VGA 640x480 bodov pri 16-tich farbách.

  • základná grafická obrazovka je tabuľka pozostávajúca zo 640 stĺpcov a 480 riadkov
  • každá bunka tejto tabuľky sa nazýva pixel
  • pixel je základnou grafickou jednotkou a môže mať iba jednu farbu
  • grafický kurzor - miesto kam ukazuje grafické pero - nie je viditeľné, ale počítač si jeho polohu pamätá a môžeme ho príkazmi presúvať po obrazovke
  • stĺpce sú číslované od 0 po maxxa riadky od 0 po maxyAko sú orientované súradnice na obrazovke: ľavý horný roh (0,0) pravý horný roh (maxx,0) ľavý dolný roh (0,maxy) pravý dolný roh (maxx,maxy)

Prehľad procedúr a funkcií knižnice GRAPH

Procedúry a funkcie na inicializáciu grafického režimu

  • procedúra InitGraph(gd, gm, cesta) - inicializuje a nastavuje grafický režim
  • procedúra ClearDevice - vymaže grafickú obrazovku a pripraví ju na kreslenie
  • procedúra CloseGraph - ukončí prácu v grafickom režime, nastaví opäť textový režim Procedúry a funkcie na nastavenie farieb
  • procedúra SetBkColor(farba) - nastavuje farbu pozadia
  • procedúra SetColor(farba) - nastavuje farbu na kreslenie obrazcov
  • funkcia GetBkColor - vracia kód aktuálnej farby pozadia
  • funkcia GetColor - vracia kód aktuálnej farby obrazca
  • funkcia GetMaxColor vracia najvyššiu hodnotu kódu farby, ktorá sa môže použiť v procedúre SetColor pre daný graf. režim

Procedúry a funkcie na zistenie a nastavenie súradníc grafického režimu:

  • funkcia GetX - vracia aktuálnu x-ovú súradnicu
  • funkcia GetY - vracia aktuálnu y-ovú súradnicu
  • funkcia GetMaxX - vracia maximálnu možnú x-ovú súradnicu
  • funkcia GetMax - vracia maximálnu možnú y-ovú súradnicu
  • procedúra MoveTo(x, y) - premiestni kurzor do definovaného bodu
  • procedúra MoveRel(rx, ry) - posunie kurzor o relatívnuvzdialenosť vzhľadom k aktuálnej pozícii kurzora

Procedúry na kreslenie čiar a nastavenie spôsobu kreslenia čiar

  • procedúra Line(x1, y1, x2, y2) nakreslí čiaru ako spojnicu dvoch bodov
  • procedúra LineTo(x, y) nakreslí čiaru z pozície aktuálneho kurzora do def. bodu, grafický kurzor sa nastaví na posledný bod kreslenej čiary
  • procedúra SetLineStyle(styl, vzorka, hrúbka) nastaví spôsob kreslenia čiar

Procedúry na kreslenie pravouholníkov a mnohouholníkov

  • procedúra Rectangle(x1, y1, x2, y2) nakreslí pravouholník
  • procedúra Bar(x1, y1, x2, y2) nakreslí pravouholník aktuálnym typom výplne a aktuálnou farbou
  • procedúra Bar3D(x1, y1, x2, y2, h, v) nakreslí trojrozmerný pravouholník aktuálnym typom výplne a aktuálnou farbou
  • DrawPoly(pv,kde) - obrys mnohouholníka, pv – počet vrcholov, kde – jednorozmenrné pole súradníc vrcholov mnohouholníka, ktoré sú typu PointType
  • FillPoly(pv,kde) - vyplnený mnohouholník, pv – počet vrcholov, kde – jednorozmenrné pole súradníc vrcholov mnohouholníka, ktoré sú typu PointType

Procedúry na kreslenie kružníc, elíps a výsekov

  • procedúra Circle(x, y, r) nakreslí kružnicu so stredom [x, y] a polomerom r
  • procedúra Ellipse(x, y, uz, uk, a, b) nakreslí elipsu
  • procedúra FillEllipse(x, y, a, b) nakreslí a vyplní elipsu
  • procedúra Arc(x, y, uz, uk, r) nakreslí kruhový oblúk
  • procedúra PieSlice(x, y, uz, uk, r) nakreslí a vyplní kruhový výsek
  • procedúra Sector(x, y, uz, uk, a, b) nakreslí a vyplní eliptický výsek

Procedúry na definovanie výplní obrázkov

  • procedúra SetFillStyle(vypln, f) nastaví jeden z preddefinovaných vzorov výplne a farbu
  • procedúra FloodFill(x, y, f) zaplní ohraničenú oblasť aktuálnym typom výplne

Procedúry a funkcie pre písanie textu

  • procedúra OutText(text) zobrazí textový reťazec v grafickom režime na aktuálnej pozícii grafického kurzora
  • procedúra OutTextXY(x, y, text) zobrazí textový reťazec v grafickom režime na def. súradniciach
  • procedúra SetTextStyle(font, smer, vel) nastaví font, koeficient zväčšenia písma, smer písma
  • procedúra SetTextJustify(h, v) nastaví spôsob zarovnávania textu v graf. režime pri písaní pomocou OutText a OutTextXY

všetko

PrílohaVeľkosť
pascal.doc587 KB

1. Vyhradené slová a direktívy

Pascal používa:

Vyhradené slová slúžia na definovanie premenných, operácií, atď., preto sa nesmú používať na nič iné: and, array, asm, begin, case, const, constructor, destructor, div, do, downto, else, end, exports, file, for, function, goto, if, implementation, in, inherited, inline, interface, label, library, 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.

Direktívy sa môžu použiť aj na iné účely: absolute, assembler, export, external, far, forward, index, interrupt, near, private, public, resident, virtual.

PrílohaVeľkosť
skripta.doc587 KB

2. Skladba programu

  1. HLAVIČKA - obsahuje názov programu a poznámky na čo je program a čo sa v ňom môže meniť. Začína slovom program.
  2. DEFINÍCIE, DEKLARÁCIE - definicía dátových typov (TYPE), premenných (VAR), použité programové jednotky (USES)
  3. TELO - obsahuje príkazy programu. Je ohraničené slovami begin a end.

Ukážka programu ma súčet dvoch čísel:

Program SucetCisel;
var a, b, c : integer;
begin
Writeln(' Zadaj dve prirodzene cisla a, b ');
Readln(a,b);
c :=a+b;
Write('Sucet cisel je: ', c);
readln;
end.

3. Programové jednotky

Programové jednotky slúžia na zjednodušenie a zrýchlenie programovania. Každá knižnica obsahuje nejaký zoznam funkcií a ich výstupov a procedúr. Po vložení knižnice do programu, vieme volať všetky jej funkcie, ktoré vykonajú nejakú operáciu alebo vrátia nejaku hodnotu. Napríklad ak chceme kresliť kružnicu voláme funkciu Circle, zadáme parametre a bez toho aby sme vedeli postup vykresľovania kružnice, vráti funkcia výstup a teda vykreslenú kružnicu.

1. Prehľad jednotiek

Pascal obsahuje málo príkazov. Ak chceme pridať ďalšie, musíme si ich napísať (čo je pracné), alebo využiť programové jednotky:

  • System - obsahuje najbežnejšie používané príkazy (Readln, Writeln); Jej meno sa v uses neuvádza
  • Crt - práca s textom (zmena farby) + efekty (hudba)
  • Graph - práca s akožegrafikou (kreslenie plných štvorcov a prázdnych kružníc)
  • Printer - Uľahčuje tlač ( = Umožňuje tlačiť)
  • Dos - Spolupráca s operačným systémom (Vymaž adresár, súbor...)
  • Strings - Práca s reťazcom
  • Overlay - vhodné pre počítač s menej ako 2 MB RAM, dnes už na nič
  • Turbo3 - Ak chcete používať zastaralé príkazy verzie 3.0 (jedine z nostalgie)
  • Graph3 - Ešte zastaralejšie grafické príkazy 3.0 (grafika okolo roku 1985)

Ak chceme niektorú z nich používať, musíme to prekladaču oznámiť pomocou uses NázovJednotiek; do časti deklarácií. Napríklad: uses Graph. Jednotky netreba používať zbytočne.

Ukážka programu:

program farebnytext;
uses Crt;
begin
TextColor(Blue);
Write('modry text');
TextColor(LightGreen);
Writeln('zeleny text');
Readln;
end.

2. Jednotka System

Matematické procedúry a funkcie

Umožňujú spracovať matematické výrazy.

Round(x):longint - zaokrúhli x
Trunc(x):longint - celá časť x
Frac(x):Real - desatinná časť x
Int(x):Real - Zaokrúhli x. Výsledným typom je ale Real !!!
Abs(x : ČíselnýTyp) : ČíselnýTyp - absolútna hodnota z x, výsledny typ je rovnaký, ako má pôvodné číslo
Pi : Real - známe číslo (3,1415...)
ArcTan(x):Real - ArcusTangens z x (Tan-1 x)- výsledok je v radiánoch
Cos(x):Real - Cosinus (x je v radiánoch)
Sin(x):Real - Sinus (x v radiánoch)
Sqr(x):Real - druhá mocnina
Sqrt(x):Real - druhá odmocnina
Exp(x):Real - ex
Ln(x):Real - prirodzený logaritmus z x
Randomize; Nastaví generátor náhodných čísel
Random : Real; Generuje náhodné číslo z intervalu 0,1)
Random(n) : Longint; Generuje náhodné prirodzené číslo menšie než n (môže vygenerovat i nulu)

Procedúry konverzné

Prevádzajú medzi sebou jednotlivé typy premenných.

Chr(x) : char – vráti x-tý znak v ASCII tabulke
Ord(x) : longint – vráti o koľký znak daného typu se jedná (počíta sa od nuly)
UpCase(x):char – prevedie písmeno na veľké
Round(x):Longint – zaokrúhli reálné číslo
Trunc(x):Longint – celá čásť reálneho čísla
Str(x,s) - procedura prevedie reálne číslo x na reťazec znakov s. (je možné použiť poznámku k x : PočetMiest, x:PočetMiest:PočetMiestZaDesetinnou)
Val(s,var v,c) – Procedura prevedie reťazec s na reálne číslo v (=premenná), v prípade chyby vráti v c u koľkatého znaku došlo k chybe

Procedúry ordinálne

Umožňujú lepšie spracovanie ordinálnych premenných. Je potrebné si uvedomiť, že Word sa skladá z dvoch bytov.

Ord(x):longint – vracia ordinárne číslo znaku
Pred(x):ordinal – vracia predchodcu danej hodnoty
Succ(x):ordinal – vracia nasledovníka hodnoty
Odd(x):Boolean – Testuje, či je x párne, alebo nepárne (x je celé číslo)
Inc(x) – Procedura zvýši hodnotu celého čísla x o 1
Inc(x,n) – Procedura zvýši hodnotu celého čísla o n
Dec(x) – Procedura zníži o 1 hodnotu premennej x.
Dec(x,n) – Procedura zníži hodnotu x o n.
Pozn. Procedúry Inc a Dec sú o niečo rýchlejšie (a teda i lepšie) než tradičné priradzovanie.

Procedúry a funkcie pre prácu s reťazcami

Zjednodušujú prácu s reťazcovými premennými

Concat(a,b,c,...):string – spojí reťazce do jediného (lepšie ako x:=a+b+c+...); Pochopiteľne je možné zadať aj samotný reťazec (Write(Concat('a'));)
Copy(s,od,pocet):string – vracia podreťazec reťazca s, začína pritom od „od“ a vyhodí počet znakov
Delete(s,od,pocet) – Procedúra vymaže z reťazca „s“ počet znakov (začne od „od“)
Insert(v,r,kam) – Procedúra vloží na miesto „kam“ do reťazca „r“ reťazec „v“.
Pos(subs,s):byte – Nájde, kde sa v reťazci „s“ nachádza podreťazec „subs“; ak nenájde daný podreťazec, vracia nulu.
Length(s):integer – vracia skutočnú dĺžku reťazca
Str(x,s) – Prevedie číslo „x“ na reťazec „s“
Val(s,var v,c) – Prevedie reťazec „s“ na číslo „v“, pokiaľ sa vyskytne chyba, je číslo prvého chybného znaku uložené v premennej c;

Procedúry riadenia behu výpočtu

Break – Procedúra okamžite ukončí práve prebiehajúci cyklus
Continue – Prejde na koniec cyklu (a buď ho vykoná od začiatku, nebo skončí)
Exit – Ukončí podprogram (=prebiehajúcu procedúru)
Halt – Okamžite ukončí program
Halt(n) – Ukončí program a ako výstupnú hodnotu (ERRORLEVEL) udá n
RunError – Ukončí program tým, že vyvolá chybu 0 (delenia nulou?)
RunError(n) – Ukončí program vyvolaním chyby s číslom n

Procedúry pre prácu s ukazovateľmi a dynamickými premennými

Bez nich by programovanie nebolo možné. Využívajú sa všade, hlavne pri vytváraní a práci s dynamickými zoznamami dát.

Assigned(P) : Boolean – Ukazuje P na niečo? (rovnako je i P <> nil)
Addr(x):pointer Vracia ukazovateľ (adresu) na premennú x.
New(p); vytvorí novú dynamickú premennú a nastaví na ňu ukazovateľ p
Dispose(p); zruší dynamickú premennú, na ktorú ukazuje p.

Procedúry a funkcie pre prácu zo súbormi

Občas je vhodné, aby sme data uložili, kým ich nepotrebujeme zmazať. Pozn. „s“ teraz bude znamenať reťazec typu 'C:\...')

ChDir(s) – nastaví aktuálny adresár (zložku) na „s“ („s“ je názov zložky v systéme MS-DOS)
GetDir(d:Byte,var s:string) – Procedúra uloží do reťazca „s“ aktuálny adresár. Parameter d udáva, o ktorý disk sa zaujímame (0 - súčasný, 1 - A:, 2 - B: ...)
MkDir(s) – vytvorí novú zložku s názvom „s“
RmDir(s) – zmaže prázdny adresár „s“
Assign(f,s) – priradí premennej f externý súbor s názvom s
Erase(f) – zmaže súbor priradený k premennej f. f nesmie byť otvorený ani pre čítanie ani pre zápis
Rename(f,s) – premenuje externý súbor priradený k premennej f na s. f nesmie byť otvorený
Reset(f) – Otvorí súbor na čítanie
Rewrite(f) – otvorí (vytvorí, ak neexistoval) súbor pre zápis
Close(f) – Zavrie ľubovoľný otvorený súbor
Append(f) – otvorí textový! súbor pre zápis, ale nezmaže pritom predchádzajúce znaky
Write(f,x) – zapíše do súboru f hodnotu premennej x
Writeln(f,x) – To isté, ale zapíše znak konca riadku (pri textových súboroch)
Read(f,x) – Prečíta hodnotu zo súboru a uloží ju do premennej x.
Readln(f,x) – To isté, ale po načítaní premennej prejde na nový riadok.
Eof(f):Boolean – Funkcia testuje, či nenastal koniec souboru
Eoln(f):Boolean – Funkcia u textového súboru testuje, či sme sa nedostali na koniec riadku.

Ostatné procedúry a funkcie

Niektoré procedúry a funkcie jednotky SYS nie je možné zaradiť ani do jednej z kategórií:

ParamCount : Word – funkcia vracia počet parametrov, ktoré mal program v príkazovom riadku
ParamStr(I) : string – vracia hodnotu I-teho parametra ParamStr(1) = 'megahit'
SizeOf(X):longint – vracia, koľko miesta v pamäti zaberá X (môže to byť premenná či i typ)
Include(S,P) – zaradí do množiny S prvok P (P musí patriť vhodnému (=bázovému) typu)
Exclude(S,P) – vyradí z množiny S prvok P (P musí byť bázového typu)
Pozn. Include a Exclude sú oproti S:=S±[P] o málilinko výhodnejšie.

Jednotka CRT

Jednotka Crt nám umožňuje vyrobiť rôzne textové a zvukové efekty. Pre tých, ktorý používajú FreePascal – obsah tejto jednotky je zahrnutý už v jednotke System. Jednotka Crt mala tú nevýhodu, že nefungovala na počítačoch s procesormi rychlejšími ako 200MHz. na Internete je niekoľko opravných opatrení. Ak pracujete s TP7, najskôr sa s týmto problémom už nestretnete. Inak musíte nájsť opravnú jednotku (napr. Crtp2), či patch, ktorý umožní fungovat už preloženým súborom.

Uvedomte si, že súradnice sa na obrazovke počítajú zľava doprava a zhora dole.

Procedúry a funkcie

ClrScr – Procedúra zmaže obrazovku
GotoXY(X,Y:Byte) – Presunie textový kurzor na zadané súradnice(obrazovka má 80 x 25 znakov)
WhereX:Byte – x-ová súradnice kurzora
WhereY:Byte – y-ová súradnica kurzora
Delay(ms:word) – Počká ms milisiekund
Sound(Hz) – začne vydávať zvuk o frekvencii v Hz (je možné použiť aj jednoduché skladby: komorné A má 440Hz a tón o oktávu vyšší potom má frekvenciu dvojnásobnú)
NoSound – Ukončí vydávanie zvuku (jediný spôsob, ako sa zbaviť pišťania, najčastejšie sa používa v spojení: Sound(FrekvenceDanéNoty), Delay(DobaTrváníNoty); Nosound
ReadKey:char – Prečíta jeden znak z klávesnice. Používa sa najčastejšie v cykloch, kde sa dookola testuje, či bola stlačená nejaká klávesa (nemusí totiž čakat na stačenie Entra ako Readln)
KeyPressed : Boolean – Funkcia zisťuje, či stlačil užívateľ niečo

3. Jednotka CRT

Jednotka Crt nám umožňuje pracovať i s farbami. K tomu sa musia farby ale nejako definovať a na to máme zopár konštánt:

Black 0
Blue 1
Green 2
Cyan 3
Red 4
Magenta 5
Brown 6
LightGray 7
DarkGray 8
LightBlue 9
LightGreen 10
LightCyan 11
LightRed 12
LightMagenta 13
Yellow 14
White 15
Blink 128

Ako číslo 4, tak i Red znamenajú červenú farbu. Takže uveďme si teraz niekoľko farebných funkcií:

TextColor(Barva) – Zmení farbu textu na zadanú hodnotu
TextBackground(Barva) – Zmení farbu pozadia (nie vašeho). Pri tejto procedúre používame tmavé farby.

Uvedené procedúry sa nevzťahujú na už napísané znaky (ClrScr je výjimka)

4. Jednotka PRINTER

Táto jednotka definuje výstupný súbor Lst a vykoná jeho inicializáciu. Akýkoľvek zápis do tohoto súboru znamená tlač. Vyskúšajte si tento program (ak neviete čo robí)

program Tlac;
var I:Integer;
begin
for I:=1 to MaxInt do
Writeln(Lst,'To je ale papiera');
end.

4. Základné typy premenných

  • Jednoduché
    • Ordinálne
      • celočíselné: byte ( 1 byte, 0 - 255), shortint (1 byte, -128..127), word (2B, 0..65535), integer (2 B, -32 768..32 767), longint (4 B, -2 147 483 648 .. 2 147 483 647)
      • boolean - logická hodnota True (pravda) alebo False (nepravda), použitie pri podmienkach. (If Podmienka then, until Podmienka;...). Ak sa má výraz vyhodnotiť ako Booleovská premenná, je nutné, aby bol v zátvorkách., Napríklad: if (x>5) and (x<12) then
      • char - znaky, zapísané (Znak := 'A'), alebo ASCII (Znak := #64;), alebo číslo znaku( Znak :=Chr(64); ), alebo ^Písmeno (Znak := ^A;). Pozor: 'B' a 'b' sú iné znaky, '1' je znak (číslica), ale 1 je číslo, #12 = Ord(12), pomocou ^ zadávame Ctrl-znaky, akoby sme držali kláves Ctrl (^C = Ctrl-C , čo odpovedá #3 – podľa abecedy)., znak apostrofu musíme vyjadriť ako dvojicu apostrofov, napríklad: Znak := ''''; Pozrite si ASCII tabuľku.
      • vymenovaný, napr.: type Farby = (Modra, Zelena, Cervena);
      • interval - Dolna hranica .. dve bodky .. Horna hranica (var a : 1..7; alebo type TStlpec = 'a'..'h'; var Stlpec : TStlpec;)
    • Neordinálne: single (1,5E-45 až 3,4E+38 , 7 platných číslic , 4 byty) , real (2.9E-39 až 1.7E+38, 11 platných číslic, 6 byteov), double (5,0E-324 až 1,7E308 , 15 číslic, 8 bytov), extended (3,4E-4932 až 1,1E4932 , 19 číslic, 10 bytov), comp (-2^63 + 1 až 2^63 - 1 , 19 číslic, 8 bytov)
  • Štrukturované
    • Pole - viacrozmerná skupina dát rovnakého typu
    • Záznam - pevne daná skupina dát rôzneho typu
    • Množina - pevne daná skupina dát rovnakého typu (bez usporiadania)
    • Súbor - premenná štruktúra prvkov rovnakého typu, z ktorých je prístupný vždy len jeden
  • Ukazovateľ - adresa premennej v pamäti, ukazuje na ňu

5. Riadenie programu

Vstavané riadiace procedúry

  • Exit – Okamžite ukončí podprogram (= procedúru alebo funkciu).
  • Halt – Okamžite ukončí náš program.
  • Halt(Code:Word); Okamžite ukončí náš program a ako výsledok (=v Dose ERRORLEVEL) dá Code.
  • RunError; Vytvorí chybu s kódom 0.
  • RunError(Code:Word); Vytvorí chybu s kódem Code; (Lze takto napríklad trápiť užívateľa hláškami typu Error XYZ: C: is not formatted)
    Ak nastane nejaká udalosť, ktorá vyžaduje okamžité ukončení nášho programu, zavoláme Halt.
    Ak potrebujeme rozlíšiť viac takých stavov, použijeme RunError a niektoré nevyužité kódy chýb.

Rozhodovanie

Využívame:

  • if Podmienka then Príkaz;
  • if Podmienka then Príkaz else InýPríkaz;

Ináč povedané: ak je podmienka splnená, vykonaj príkaz. Podmienka je ľubovoľný výraz typu Boolean (musí byť vyhodnotiteľná: pravda/nepravda) a príkaz môže byť aj zložený (skupina začne BEGINom a končí ENDom). Ak podmienka splnená nie je (jej hodnota je False), nerob nič, alebo vykonaj iný príkaz za ELSE (zase môže byť aj zložený).

Príklad 1: Absolútna hodnota čísla.

Program AbsoltnaHodnota;
var a: real;
begin
Writeln('Zadaj číslo');
Readln(a);
If a<0 then a:=a*(-1);
Write('Absolútna hodnota čísla je:', a);
readln;
end.

Príklad 2: Teplo alebo zima von podľa teploty.

Program TeploZima;
var a: real;
begin
Writeln('Zadaj teplotu');
Readln(a);
If a<7 then
Writeln('Je zima');
else
Writeln('Je teplo');
readln;
end.

Občas je ale možností viac. K tomu nám už nestačí premenná typu Boolean (dve hodnoty), ale musíme využiť iný ordinárny typ (napr. interval, char, integer); Toto rozhodovanie potom vyzerá takto :

case Premenná of
Hodnota1: Príkaz1;
Hodnota2: Príkaz2;
Hodnota3: Príkaz3;
...
else InýPríkaz; end;

Ak má premenná Hodnotu1, vykoná sa Príkaz1 (zase i zložený)... Ak sa obsah premennej nezhoduje ani s jednou uvedenou hodnotou, vykoná sa InýPríkaz;
Časť s else môže byť aj vynechaná.

Príkaz case sa najčastejšie využíva pri tvorbe menu.

Príklad 3: Jedna hodnota pre možnosť.

Program VyberMoznosti;
var cislo: integer;
begin
writeln(‘Zvol moznost 1, 2 alebo 3!’);
readln(cislo);
case cislo of
1: writeln(‘Zvolil si moznost 1’);
2: writeln(‘Zvolil si moznost 2’);
3: writeln(‘Zvolil si moznost 3’);
elsewriteln(‘Zvolil si nespravnu hodnotu!’);
readln;
end.

Príklad 4: Viac hodnôt pre jednu možnosť.

writeln(‘Zvolte moznost A, B alebo C’);
readln(volba);
case volba of
‘a’, ‘A’:writeln(‘Zvolili ste moznost A’);
‘b’, ‘B’:writeln(‘Zvolili ste moznost B’);
‘c’, ‘C’:writeln(‘Zvolili ste moznost C’);
else
writeln(‘Zvolili ste nespravnu hodnotu’);

Príklad 5: Intervaly hodnôt.

case volba of
   1..3:begin
         readln(c1,c2);
         writeln(c1+c2);
      end;
   4..8:writeln(‘Zvolili ste hodnotu z intervalu <4,8>’);
else
   writeln(‘Nezvolili ste hodnotu od 1 do 8’);

Cyklus

Cyklus opakovane vykonáva jednoduchý alebo zložený príkaz.

S počtom krokov

For Prem := Min to Max do Príkaz;

Vykonáva príkaz, pričom hodnotu ordinárnej premennej Prem zvyšuje od Min do Max (Max > Min)

For Prom := Max downto Min do Príkaz;

To isté ako for s to, ale hodnota premennej sa znižuje

Príklad 6: Výpis čísel od Min do Max.

For i := Min to Max do write(i);

Príklad 7: Výpis čísel od Max do Min.

for i:='Max' downto 'Min' do write(i);

Príklad 8: Aritmetický priemer čísel.

Program prikladfor;
var i,pocet:integer;zlozka,sucet,priemer:real;
begin
write('Zadaj pocet cisel: ');readln(pocet);
sucet:=0;
for i:=1 to pocet do begin
write('Zadaj ',i,' zlozku: ');
readln(zlozka);
sucet:=sucet+zlozka;
end;
writeln('Sucet je ',sucet, 'Priemer zo zadanych cisel je: ',sucet/pocet:10:2);
readln;

end.

Príklad 9: Faktoriál.

Program Faktorial;
var a, b: integer;
begin
Writeln(' Zadaj číslo pre výpočet faktoriálu');
Readln(a);
b := 1
For I := 1 to A do b := b * I;
Write('Faktoriál je', b);
readln;
end.

S podmienkou na konci

repeat
Príkaz1;
Príkaz2;
...
until Podmienka;

Tento cyklus sa opakuje tak dlho, dokiaľ nie je splnená podmienka (Ale vždy sa vykoná aspoň raz. Všimnite si tiež, že môže obsahovať aj viac ako jeden príkaz. Nesmieme ale zabudnúť, že podmienka sa musí meniť, aby cyklus niekedy aj skončil.

Príklad 10: Najväčší spoločný deliteľ dvoch čísel pomocou Euklidovského algoritmu.

Program prikladwhile;
uses crt;
var a,b:integer;
begin
clrscr;
write('Zadaj dve cisla: '); readln(a,b);
while a=b do begin
if a>b then a:=a-b;
if b>a then b:=b-a;
end;
writeln('NSD tychto cisel je ',a:3);
readln;
End.

Príklad 11: výpis čísel 1 až 20 pomocou WHILE

S podmienkou na začiatku

while Podmienka do Príkaz;

Ak je splnená podmienka, vykonávaj príkaz (i zložený). I tu musíme zaistiť, aby sa hodnota podmienky niekedy menila. Narozdiel od cyklu repeat sa telo cyklu nemusí vykonať ani raz. Na riadenie programu sa ďalej viažu tieto procedúry:

Break – Okamžite ukončí práve prebiehajúci cyklus (ostatné príkazy sú ignorované)

Continue; Prejde hneď na koniec cyklu a vyhodnotí podmienku (pri for pokračuje od ďalšej hodnoty premennej). Príkazy medzi Continue a koncom cyklu sú ignorované.

Príklad 12: Program po žiadosti vypíše stlačenú klávesu, v prípade q alebo Q sa program ukončí.

program klaves;
uses crt;
var kl:string;

begin
clrscr;
repeat
writeln ('Stlac klaves (Q,q: koniec) ');
kl:=readkey;
writeln(kl);
until (kl='q') or (kl='Q');
end.

Príklad 13: Výpis čísel 1 až 20 pomocou REPEAT

Príklad 14: Najväčší spoločný deliteľ 2 prirodzených čísel (Euklidov algoritmus).

Príkazy cyklu REPEAT sa vždy vykonávajú aspoň raz. V cykle WHILE sa príkaz nemusí vykonať ani raz - pri nesplnení podmienky hneď na začiatku.

6. Dátové štruktúry

1. Ukazovateľ

2. Množina

3. Pole

4. Záznam

5. Súbor

7. Vlastné procedúry, funkcie a jednotky

Procedúry

procedure NázovProcedúry(Parametre);
Definícia a deklarácia;
begin
Zložený príkaz;
end;

Definície a deklarácie sú rovnaké ako v bežnom programe, s výnimkou, že nesmieme používať uses. A nemali by sme definovať ani ďalšie procedúry a funkcie (stráca sa prehľadnosť, kvôli ktorej práve procedúry zavádzame). V programe potom používame nasledovné premenné:

– miestna deklarácia (v procedúre) – Ak potrebuje určitý dátový typ iba určitá procedúra, je lepšie ho definovať priamo v nej. Premenné sa potom vyskytujú iba v tele (medzi beginom a endom) procedúry a sú prístupné iba v nej samotnej.

– globálna deklarácia (v programe) – Premenná je potom dostupná aj v procedúre aj v programe.

Príklad na takúto deklaráciu:

Program Ukazka;
var z1,z2 :char; {Globálna deklarácia}
Procedure PrehodZnaky;
var pom : char; {Lokálna deklarácia}
begin
pom := z1;
z1:= z2;
z2 := pom;
end;
begin
Write('Zadaj dva znaky');
readln(z1,z2);
Writeln(z1,' ',z2);
Prehodznaky;
readln;
Writeln(z1,' ',z2);
readln;
end.

Funkcie

function Názov(Parametry):VýslednyTyp;
Deklarácie a definície
begin
Zložený príkaz;
end.

O funkciách platí všetko, čo bolo povedané o procedúrach. V tele samotnej funkcie sa ale musí použiť priradzovací príkaz NázovFunkcie:=NejakáHodnota; Pretože to je výsledok funkcie. Jeho hodnota sa už ďalej nesmie meniť. Pred i po priradení ale môžu prebiehať akékoľvek príkazy, ktoré s výsledkom funkcie nemajú nič spoločné.

Formálne a skutočné parametre

Program, ktorý využíva procedúry alebo funkcie, môže byť napísaný dvojako. Ukážeme si to na príklade: program Objem1; var polomer,vyska : real; function ObjemValca: real; begin ObjemValca:= pi*sqr(polomer)*vyska; end; begin Writeln('Zadaj polomer valca a vysku valca'); readln(polomer,vyska); Writeln(ObjemValca); end. alebo program Objem2; var polomer, vyska : real; function ObjemValca(Polomer,vyska : real) : real; begin objemValca := pi*sqr(polomer)*vyska; end; begin Writeln('Zadaj polomer a vysku valca'); readln(polomer, vyska); Writeln(objemValca(polomer,vyska)); Writeln(ObjemValca(polomer*2,vyska)); end. Druhý spôsob zápisu sa ukazuje ako jednoduchší, keď je potrebné použiť rovnakú procedúru pre rôzne poomery valca. V tomto prípade sa neprepisuje procedúra, prípadne sa nemusí prepočítavať premenná vopred, ale stačí uviesť správnu hodnotu premennej pri volaní procedúry. Parametre v mieste deklarácie funkcie označujeme ako predpísané (formálne) a v mieste volania funkcie ako skutočné parametre. Ich názvy a nemusia absolútne zhodovať.

Parametre nahradené hodnotou a odkazom

Ak rozlišujeme predpísané a skutočné parametre, musíme tiež rozlišovať medzi parametrami nahradenými hodnotou a nahradenými odkazom. Rozdiel si ukážeme na dvoch programoch, vrátime sa k prvému ukážkovému programu: Program Ukazka3; var z1,z2 :char; Procedure PrehodZnaky (x1,x2 : char); var pom : char; begin pom := x1; x1:= x2; x2 := pom; end; begin Write('Zadaj dva znaky'); readln(z1,z2); Writeln(z1,' ',z2); Prehodznaky; Writeln(z1,' ',z2); end. Pri prvom programe budú hodnoty prehodené vo vnútri procedúry, ale nebudú späť „exportované“ do nadradeného programu. Parameter, ktorý je nahradzovaný hodnotou sa chová ako miestny. Takže vo výpise hodnôt z1, z2 sa neukáže prehodenie poradia. Problém odstránime jednoducho, pri deklarácii procedúry napíšeme vyhradené slovo var: Program Ukazka4; var z1,z2 :char; Procedure PrehodZnaky (var x1,x2 : char); var pom : char; begin pom := z1; z1:= z2; z2 := pom; end; begin Write('Zadaj dva znaky'); readln(z1,z2); Writeln(z1,' ',z2); Prehodznaky; readln; Writeln(z1,' ',z2); readln; end. Takýto parameter nahradzovaný odkazom sa bude chovať inak. Parametre procedúry už predstavujú konkrétnu hodnotu, tú, ktorú sme uviedli v zozname skutočných parametrov. Zmena hodnoty uvedená vo vnútri procedúry bude platiť aj po navrate do hlavného programu. Pre tento typ nahradenia sa rozhodujeme vždy v týchto prípadoch: 1. Parameter nahradzovaný odkazom použijeme vždy pre každú výstupnú hodnotu. Aby výsledok výpočtu v procedúre bol „importovaný“ aj do nadriadeného programu. 2. Premenné dátového typu súbor musia byť vždy deklarované ako parametre nahradzované odkazom. 3. Pri práci s veľkými datovými štruktúrami využívame parametre nahradzované odkazom, pretože sú menej naročnejšie na pamäť.

Rekurzia a rekurzívne programy

Pri procedúrach a funkciách sa veľmi často sa používa rekurzia. Ide prípady, kedy funkcia alebo procedúra sa priamo alebo nepriamo (ak ide o cyklycký odkaz viacerých podrogramov) odkazuje sama na seba. Najprv ukážka funkcie, typickým príkladom sú faktorály: function Factorial(N:byte):longint; begin  if N >0 then Factorial:= N * Factorial(N-1) else Factorial:=1; end; Najdôležitejšie pri využívaní tohto algoritmu je nezabudnúť ukončiť cyklus! Problém ale nastáva, ak máme dve procedúry, z ktorých prvá využíva druhú a naopak, teda keď ide o nepriamu rekurziu. V Pascale sa totiž môže používať iba to, čo sme si dopredu zadefinovali. Ako to vyriešiť? Oznámime existenciu danej procedúry pomocou  procedure NázovA(parametre); forward; Potom dodefinujeme procedúru procedure NázovB (v ktorej používame NázovA). A nakoniec uvedieme samotné telo NázvuB (procedure NázovA; (tu už nemusíme vypisovať parametre...) Radšej si to ukážme na jednoduchom príklade: procedure NicNerobi(A:integer);forward; procedure NiecoRobi(A:integer); begin If A > 0 then NicNerobi(A-1); writeln(A); end; procedure NicNerobi; begin If A < 0 then NiecoRobi(A); writeln(A); end;

Procedúry bez lokálnych objektov a bez parametrov

- používajú len globálne objekty (zavedené v nadradenej časti), hovoríme aj, že komunikuje s okolım len pomocou globálnych premenných. Na mieste, kde chceme, aby došlo k vykonaniu príkazov uvedených v procedúre, stačí uviesť meno procedúry - hovoríme o tzv. volaní procedúry. Napríklad v príkazovej časti hlavného programu:

BEGIN
VSTUP;
VYMENA;
VYSTUP;
END.

Vidíme, že volanie procedúry je na úrovni príkazu (mena procedúr sme použili ako nami definované príkazy). Všetky použité premenné musia byť deklarované v úseku definícií a deklarácií hlavného programu. Ako v celom Pascale (až na malo výnimiek), aj pri podprogramoch platí, že každy objekt musí byť najprv definovaný alebo deklarovaný a až potom ho môžeme použiť.

procedure nazovprocedury;
begin
príkaz1;
príkaz2;
...
end;

Príklad:

procedure VSTUP;
begin
A := StrToInt ( InputBox (’Vstupď,’Zadaj prve cıslo: ’,’1’));
B := StrToInt ( InputBox (’Vstupď,’Zadaj druhe cıslo: ’,’2’);
end;
procedure VYMENA;
begin
POM := A; A := B; B := POM
end;

procedure VYSTUP;
begin
Label1.Caption := IntToStr (A) + ´ ´ + IntToStr (B)
end;

Procedúry s lokálnymi objektami a bez parametrov

Keď sa pozrieme na procedúru VYMENA, ľahko zistíme, že premennú POM potrebujeme len počas vykonavania tejto procedúry. Takýchto objektov môže byť viacej a nie je dôvod zaťažiť pamäť počítača počas behu celého programu vyhradením pamäťových miest objektom, ktoré používame len lokálne. Preto takéto objekty stačí definovať a deklarovať len v danej procedúre, hovoríme, že sú lokálne, čo znamená, že sú použiteľné len v danej procedúre (alebo v podriadených procedúrach).

Deklarácia procedúry slokálnymi objektami má tvar:

procedure mp;
usek definícií a deklarácií
blok
príkazová časť

kde mp je meno procedury.

Pamäťovo efektívnejšíı zápis procedúry VYMENA (s lokalnou premennou POM):

procedure VYMENA;
var POM : integer;
begin
POM := A; A := B; B := POM
end;

Volanie procedúry s lokálnymi objektami je rovnaké ako procedúry bez lokálnych objektov. Procedúra naďalej komunikuje s okolím len cez globálne premenné . Ak použ ijeme rovnaké pomenovanie pre lokálnu aj globálnu premennú, dôjde k tzv. zatieneniu globálnej premennej lokálnou premennou v danej procedure, čo znamená, že daná globálna premenná je nepoužiteľna v danej procedúre.

8. Triediace a vyhľadávacie algoritmy

Opakovanie

Teória

  1. Na čo sú vyhradené slová a direktívy?
  2. Aké časti má program a čo môžu obsahovať?
  3. Na čo sú programové jednotky a v akej časti programu sa uvádzajú?
  4. Aký je rozdiel medzi jednoduchými a štruktúrovanými premennými? Uveďte 2 príklady typov.
  5. Uveďte príkazy pre ukončenie programu, cyklus a vetvenie.

Praktické úlohy

Vytvorte programy ktoré budú obsahovať:

  1. lineárny algoritmus, napríklad súčet 2 čísel načítaných z klávesnice,
  2. vetvenie, napríklad výpočet absolútnej hodnoty čísla,
  3. cyklus, napríklad výpočet faktoriálu čísla.

4. Robot Lego Mindstorms EV3

1. Časti

Základom stavebnice je počítač v tvare krabičky:

Možno k nemu pripojiť rôzne časti a tak vytvoriť funkčné zostavy, napríklad robot, autíčko, gitara:

Počítač obsahuje:

  • 4 vstupné porty, označené 1, 2, 3, 4 - pripájajú sa tam senzory
  • 4 výstupné porty, označené A, B, C, D - pripájajú sa tam motory
  • 6 tlačidiel na výber položiek a pohyb v menu, a LCD display
  • mini USB
  • slot na mikroSD kartu
  • Wifi a Bluetooth
  • 16 MB flash
  • 64 MB RAM

Stavebnica obsahuje:

  • riadiaca jednotka
  • 3 motory - 2 veľké a 1 presný
  • 2 dotykové senzory
  • ultrazvukový senzor na meranie vzdialenosti
  • senzor na intenzitu a farbu svetla
  • gyroskop
  • sada dielov

Dotykový senzor umožňuje detegovať tri stavy: stlačený, uvoľnený a náraz (stlačenie a následné uvoľnenie).

Svetelný senzor umožňuje merať intenzitu svetla. Keďže má vlastný svetelný zdroj, tak aj intenzitu odrazeného svetla a dokáže rozpoznať farby predmetov. Senzor sa využíva napríklad v scenároch, ak má robot sledovať čiernu, alebo farebnú čiaru.

Ultrazvukový senzor meria vzdialenosti v rozsahu 0 – 255 cm s presnosťou 3 cm. Pomocou tohoto senzora sa robot dokáže vyhnúť prekážkam, alebo ako v našom prvom príklade, zastaviť pred prekážkou.

Gyroskop – meria rotačný pohyb a uhly náklonu s presnosťou 3 stupne. Vzorkovacia frekvencia je 1 kHz, takže je možné zostrojiť aj robota, ktorý udržiava rovnováhu na dvoch kolesách, podobne ako Segway.

Servomotory – v súprave sú tri. Dva veľké silnejšie, ktoré spravidla slúžia na pohon, alebo kráčanie a jeden presnejší, ktorým sa väčšinou ovláda manipulácia. Otáčky sú ovládané pomocou pulzne-šírkovej modulácie PWM. Každý motor má senzor indikujúci uhol natočenia s presnosťou 1 stupeň.

PrílohaVeľkosť
priruckaEV3.pdf12.56 MB
MindstormsPocitac.jpg40.53 KB
MindstormsModely.jpg81.16 KB
MindstormsZostavy.png184.35 KB
MindstormsCasti.png254.12 KB

2. Programovanie

3. Linky

nedokončené

5. Vývojové nástroje

Lazarus

Linky

Čo je Lazarus

Lazarus je free a open source vývojový nástroj pre prekladač FreePascal (Object Pascal), ktorý je tiež free a open source. Umožňuje tvorbu samostatne bežiacich (.exe) grafických a konzolových aplikácií. Poskytuje prispôsobiteľný editor zdrojového kódu a vizuálnu tvorbu formulárov s manažérom balíčkov, debuggerom a úplnou integráciou prekladača FreePascal do GUI (grafické rozhranie).

Okná programu Lazarus

  1. Hlavná ponuka - je hore, obsahuje všetky príkazy Lazarusu.
  2. Panel s ovládacími prvkami Lazarusu je pod hlavnou ponukou.
  3. Editor zdrojového kódu - je veľké okno vpravo dole.
  4. Inšpektor objektov - je vľavo, obsahuje zoznam objektov písaného programu, a ich vlastností.
  5. Panel Paleta komponentov - obsahuje ovládacie prvky ktoré môžeme vkladať do formulárov písaného programu.
  6. Práca v Lazaruse

    Novú formulár vytvoríte tlačítkom "Nový formulár" alebo príkazom "Nový formulár" v ponuke Súbor. Prepínať medzi formulárom a Editorom zdrojového kódu môžeme tlačítkom alebo príkazom "Prepnúť zobrazenie Formulár/Jednotka" v ponuke Zobraziť. Vlastnosti vybraného objektu formulára môžeme meniť v Inšpektorovi objektov, napríklad Vlastnosti - Caption -> napíšeme zobrazované označenie prvku. Alebo Udalosti - OnClick - (...) -> napíšeme podprogram ktorý sa má vykonať po kliknutí na prvok.

    Všetky potrebné súbory sa vytvoria vo zvolenom adresári v novom projekte príkazom "Nový projekt" v ponuke "Projekt". Uložením projektu a spustením tvorenej aplikácie sa vytvorí .exe súbor.

    Úloha

    Vytvorte okennú aplikáciu .exe, ktorá v okne zobrazí zmysluplný text, napríklad vaše meno ako autora, a tlačítko ktoré po kliknutí vykoná nejakú činnosť, napríklad ukončí program. Zmeňte veľkosť okna a tlačítka. Program .exe vo forme archívu .zip cez email.

Linky

  1. algoritmus - https://sk.wikipedia.org/wiki/Algoritmus , http://spseke.sk/tutor/projekt/algoritmy.htm , https://www.algoritmy.net/
  2. Zoznam programovacích jazykov: https://sk.wikipedia.org/wiki/Zoznam_programovac%C3%ADch_jazykov , Java: https://sk.wikipedia.org/wiki/Java_(programovac%C3%AD_jazyk
  3. editor a kompilátor Pascalu: https://www.freepascal.org/download.html
  4. Vývojový nástroj: https://www.lazarus-ide.org/ + tutorial: http://wiki.freepascal.org/Lazarus_Tutorial/sk
  5. edior C, C++, PHP and JavaScript: https://codelite.org/