Stavba programu

Paskalský program má nasledovnú štruktúru
Hlavička
Je nepovinná a preto vo väčšine programov chýba (programátor je lenivé stvorenie)
Syntax:
PROGRAM identifikátor;

Za kľúčovým slovom program je uvedený identifikátor, ktorý musí byť jedinečný v programe.
Deklaračná časť
V deklaračnej časti zadefinujeme všetky objekty používané v príkazovej časti.
Knižnice
V knižniciach bývajú začlenené ďalšie-nové príkazy, popísané ďalšie konštanty, typy. Každá knižnica je zameraná na nejakú "tému".
Syntax:
USES zoznam_kniznic;

Sémantika:
Kompilátor pri preklade hľadá neznámy príkaz (podprogram) postupne v zozname uvedených knižníc a príslušný podprogram z knižnice pričlení ku programu.
Príklad:
uses crt, graph;
Konštanty
Definovanie konštanty znamená pomenovanie nejakej hodnoty čo poznáme napr. z matematiky alebo fyziky
g=9.81, e=2,71, pi=3.14
Poznáme:
  • Netypové konštanty
  • Typové konštanty
Netypové
Ľubovoľnej hodnote sa pridelí názov-identifikátoru. V programe je potom tento identifikátor nahradený danou hodnotou. Typ hodnoty može byť celočíselný, reálny, znakový, textový, logický.
Syntax:

CONST
meno1 = hodnota1;   
meno2 = hodnota2;   
      . . .
Hodnota môže byť aj konštantný výraz (môže obsahovať už dovtedy zadefinované konštanty)
Sémantika
S takýmito konštantami pracujeme potom ako s premennými, ale nesmieme im meniť-priraďovať hodnotu
Príklad

 CONST
 min = 100;   
 max = 200;   
 str = (min+max) div 2; 
 pozdrav = 'Ahoj';
 var pole: Array[min..max] of byte;
 Begin
   Writeln (pozdrav);
   Writeln('Interval: ',min,' - ',max, 'Stred: ',str);
 End.
	 . . .

Pozn.
Vidíme, že takéto konštanty možno použiť pri konštrukcii poľa (Array)
Typové
Globálne typové konštanty sú vlastne iniciované premenné. Lokálne typové konštanty sú statické premenné, ktoré po skončení podprogramu ostávajú "nažive" a pri ďalšom spustení podprogramu ich možno opäť používať.
Syntax:

 CONST
 meno1:typ1 = hodnota1;   
 meno2:typ2 = hodnota2;   
	 . . .

Príklad

 CONST
 min:byte = 100;   
 max:byte = 200;   
 str:byte = (min+max) div 2; {toto neprejde, typova konstanta nemoze byt pouzita na definovanie inej}
 pozdrav:string = 'Ahoj';
 var pole: Array[min..max] of byte;  {toto neprejde, typova konstanta nemoze byt pouzita na definovanie pola}
 Begin
   Writeln (pozdrav);
   Writeln('Interval: ',min,' - ',max);
 End.
	 . . .

Pozn.
1. Takéto konštanty nemožno použiť pri konštrukcii poľa (Array), sú to plnohodnotné premenné aj keď definované v časti Const.
2. Takéto konštanty-premenné môžu byť aj štruktúrované (array, record)
Definovanie nových typov - Type
V sekcii type môžme zadefinovať svoj vlastný typ. Načastejšie tu pomenúvame štrukturálne typy pole a record.
Syntax:

 TYPE
 typ1 = popis1;   
 typ2 = popis2;   
	 . . .

Sémantika:
Vytvorí nové pomenované typy, ktoré môžme používať pri deklarácií premenných a parametrov podprogramov.
Príklad:

 Type
 cele = integer;    {cele a integer vytvoria synonymum}
 minmax = 1..200;
 pole = Array[minmax] of cele;    {pri popise noveho typu mozno pouzivat uz popisane typy}
 komplex = RECORD 
             rea, ima: double;
           END;
Function Sucet(a:pole):cele;
var i,s:cele;
Begin
   s:=0;
   for i:=1 to 200 do s:=s+a[i];
   Sucet:=s;
End;
Var
   i,j: cele;		    	
   p:pole;		 
 Begin
	 . . .
 End.

Definovanie premenných - Var
V sekcii Var môžme zadefinovať globálne premenné.
Syntax:
Var
zoznam_prem1:typ1;
zoznam_prem2:typ2;
. . .

zoznam_prem je tvorený identifikátormi oddelenými čiarkou, typ je preddefinovaný typ, nami definovaný typ v sekcii Type alebo popis premennej pomocou konštruktora Array, RECORD
Sémantika:
Vytvorí v pamäti priestor pre vymenované premenné, obsadená dĺžka je daná typom.
Definovanie podprogramov
V pascale poznáme 2 typy podprogramov - funkcie, procedúry. Funkcie majú návratovú hodnotu, procedury sú akoby nové príkazy jazyka. Písaniu podprogramov je ďalej venovaná celá kapitola.
Typy premenných
číselné
Väčšina nami vytvorených premenných bude číselná (Do takýchtoi premenných možno zapisovať číselné hodnoty) lebo väčšinou budeme niečo počítať. Číselné premenné delíme na:
  • celočíselné - do takýchto premenných možno zapísať len celočíselné hodnoty, rozdeľujeme ich podľa toho či obsahujú znamienko na:
    • neznamienkové - do takýchto premenných možno zapísať len kladné hodnoty
    • znamienkové - do takýchto premenných možno zapísať kladné aj záporné hodnoty
    Názov+/-DĺžkaMinMax
    byteneznam.1B0255
    shortintznam.1B-128127
    wordneznam.2B065536
    integerznam.2B-3276832767
    longintznam.4B-21474836482147483648
    int64znam.8B-92233720368547758089223372036854775807
    Pozn1.: int64 máme k dispozícii len v pascaloch pod Win (napr. konzolová aplikácia v Delphi, Lazarus, FreePascal)
  • desatinné (reálne) - do takýchto premenných možno zapísať aj čísla desatinné.
    NázovDĺžkaMinMaxPresnosť
    single4B10^-4510^387-8 číslic
    real6B10^-3910^3811-12 číslic
    double8B10^-32410^30815-16 číslic
    extended10B10^-493210^493219-20 číslic
    Je odporúčané používať typy single - pre nízku presnosť a typ double pre vyššiu presnosť
znakové - char
používame ak chceme vytvoriť "úložisko" pre jeden znak (napr. jedno písmeno). Do takto vytvorenej premennej možno zapísať jeden zo znakov od poradového čísla 0 po poradové číslo 255 z ASCII tabuľky.
logické - boolean
Do takto vytvorených premenných možno zapísať TRUE (pravda), alebo FALSE (nepravda), v pamäti zaberajú 1B.
textové - string
používame ak chceme vytvoriť "úložisko" pre viac znakov. Do takto vytvorenej premennej možno zapísať 0 až 255 rôznych znakov z ASCII tabuľky.

Pozn: Určením typu premennej nie je určený len rozsah povolených hodnôt, ale aj operátory ktoré možno na takýto typ aplikovať
(viac pozri výrazy)
Príkazová časť
V príkazovej časti napíšeme postupnosť príkazov oddelených bodkočiarkov   ;  .
Vkladanie bielych znakov (biele znaky sú medzera, enter, tabulátor a komentár {})
Programátor môže ľubovoľne vkladať do príkazov biele znaky ako oddelovače slov. Biele znaky nemajú žiadny vplyv na preložený program *.exe a teda ani na chod programu. Slúžia len ako vizuálna pomôcka pre programátora aby sa v programe ľahšie orientoval. Príkazy môžu obsahovať výrazy, výrazy poznáme:

Jednoduché príkazy

Príkaz priradenia
Syntax
premenna := výraz ;
výraz musí byť kompatibilný ku premennej uvedenej vľavo
Sémantika
Vyhodnotí sa výraz vpravo a výsledná hodnota sa zapíše do premennej vľavo
Príklady
a := 100 * 5; {do a zapise 500}
x := 100/5; {do x zapise hodnotu 20.0 x musi byt desatinna prem}
a := 7 mod 4; {do a zapise 3}
Výstup
Zatiaľ vystačíme s nasledovnou trojicou príkazov:
  • write(zoznam);
  • writeln(zoznam);
  • writeln;
zoznam
zoznam je postupnosť výrazov oddelených čiarkov
Napr. 'Ahoj',5,15*19,'Stara'+#13#10+'mama',5>10
každý výraz môže obsahovať navyše formátovače, ktorými môžeme určovať/korigovať vzhľad výstupu
:dĺžka
napríklad 5*6:5 ... určuje výstup výsledku súčinu na 5 miest - zľava sa doplní medzerami
:dlzka:pocet_desatinnych ... len pri výstupe des. čísla
5.13*6:5:1 ... výsledok sa zaokrúhli na jedno des. miesto
ak chceme určiť len počet des. čísel a dĺžku nechceme nastavovať -> zadáme dĺžku rovnú nule 5.13*6:0:1
sémantika
postupne sa vyhodnotia výrazy a prevedú na text a zapisujú na výstup.

Príkaz write() po skončení výstupu nechá kurzor za posledným vypísaným znakom
Príkaz writeln() po skončení výstupu presunie kurzor o riadok nižšie na začiatok riadka
Príkaz writeln nepíše nič len presunie kurzor o riadok nižšie na začiatok riadka
Vstup
Už vieme že zapísať hodnotu do premennej možno priraďovacím príkazom := . Ďalšou možnosťou je načítanie hodnoty z klávesnice. Nateraz si ukážeme nasledovnú trojicu príkazov:
  • readln(zoznam_prem);
  • readln(zoznam_prem);
  • readln;
zoznam_prem
zoznam je postupnosť premenných oddelených čiarkov (vymenované premenné, ktoré potrebujeme naplniť). Premenné môžu byť typu
  • číselné
  • znakové
  • stringové
Na rozdiel od výstupu nemôžeme používať typ boolean.