9. dubna 2004
.:Přidat k oblíbeným
.:Napsat e-mail





Lekce
:01: prostředí :02: proměnné
Příklady
Ostatní

Po zahřívacím kole se konečně podíváme na něco praktičtějšího, něco, co si budete moci ihned vyzkoušet. Naučíte se vytvořit primitivní program. Ukážeme si jednoduché příkazy, způsobující výpis na obrazovku a načtení z obrazovky. Kromě toho uzříte aritmetické operátory Pascalu. Takže je nejvyšší čas vyjevit si, jak vypadá...

Základní struktura programu

V závěru první lekce jste měli opsat naprosto primitivní program bez jakéhokoliv vysvětlení. To bych teď rád napravil. Ale nejprve pro jistotu - opakování je matka moudrosti:

program ahoj;

begin
  writeln('Ahoj Svete!!');
end.

program ahoj; Každý program by měl obsahovat klíčové slovo program a dále jméno programu (hádáte správně - "by měl" znamená, že nemusí, ale je to slušnost) pro pořádek a přehlednost.

begin - další klíčové slovo, tentokrát vyjadřující začátek bloku programového kódu. Všude, kam můžete vložit jeden příkaz, můžete tento příkaz nahradit blokem (skupinou příkazů uzavřených mezi slovy begin a end). V tomto případě má begin ještě specifičtější funkci, označuje začátek hlavního programu (jestli existuje i vedlejší program či co, s tím si zatím nelamte hlavu - vyčkejte času).

Čili end označuje konec tohoto bloku. Ve většině případů se za end píše středník (;). Je-li za end tečka jako v našem případě, znamená to definitivní konec hlavního programu. Prostě důležité je, že většina vašich programů bude končit právě slůvkem end.

A nakonec to nejlepší: až na výjimky (tady např. begin a end) musí každý příkaz v Pascalu končit středníkem (;)!! Pokud na něj zapomenete, překladač si o něj při pokusu o rozběhnutí programu řekne:

Error 85: ';' expected.

Výpis na obrazovku alias write

Pro komunikaci s kýmkoliv bude váš program většinou používat výpis na obrazovku (může na uživatele třeba i pípat morseovkou, ale pro začátek bych zůstal u těch výpisů na obrazovku). Zobrazení nápisu na obrazovce docílíte procedurou write, případně writeln:

write('Váš vzkaz');
writeln('Jiný vzkaz');

Všechny příkazy budeme pro začátek vkládat do bloku hlavního programu (mezi begin a end.). Rozdíl mezi write a writeln doceníte teprve při vypsání více řádků textu než jen jednoho. Zatímco write pouze vypíše zprávu, writeln vypíše zprávu a nastaví nový řádek.

Proměnné

Nemáte-li ponětí, co je to proměnná, pak vězte, že do proměnných můžete ukládat nejrůznější hodnoty. Jsou to takové malé chlívečky na data, se kterými program pracuje. V Pascalu platí, že všechny struktury programu se musí nejprve deklarovat. U proměnných se deklarace uvozuje klíčový slovem var (od variable - anglicky proměnná). Celé to vypadá asi takhle:

var jmeno_promenne: integer;

Po jménu proměnné následuje dvojtečka a datový typ té které proměnné (o datových typech si povíme vzápětí). Všechno ale může vypadat i trochu jinak:

var a, b: integer;
    pravda: boolean;

Tímto máme deklarovány dvě proměnné (a, b) typu integer a jednu proměnnou (pravda) typu boolean, což znamená, že s nimi můžeme dále směle pracovat v programu. Zpravidla se deklarace proměnných vkládá před hlavní program. Celé to potom vypadá takto:

program promenne;

var a: integer;

begin
   a:= 3;
   writeln(a);
end.

Vyskytlo se tu pár nových jevů. Jednak zvláštní kombinace znaků := Říká se tomu přiřazovací příkaz. Přiřazovací proto, že přiřadí do proměnné a hodnotu 3. Naší proměnnou potom můžeme vypsat opět příkazem writeln. Pozor! Povšimněte si prosím závorky! Nepoužíváme žádné apostrofy nebo uvozovky, jinými slovy chceme vypsat na obrazovku obsah proměnné a (tedy 3) a ne řetězec/znak 'a' (tedy a).

Jednoduché datové typy

Před chvilkou byla proměnná a naplněna číslem 3, ale proč zrovna trojkou? Odpověď zní datové typy. Ty nám určují možnosti práce s proměnnou. Pro ilustraci: typ integer znamená celé číslo od -32 768 do 32 767. Proto proměnné a nemůžete přiřadit třeba tak obludnou hodnotu jako 3.465464213 (to je číslo reálné). Možná se teď ptáte, proč si přidělávat tolik práce a ještě ke všemu se takhle omezovat. Inu vašemu programu je pro práci přidělena jen určitá (v Pascalu velmi malá) část paměti a každá proměnná nějaké to místečko zhltne. Překladač potřebuje předem vědět, kolik paměti má pro váš program vyhradit a to si přečte jedině v deklaraci. Je vám doufám jasné, že 3.465464213 zabere v paměti víc místa než 32 767. V praxi tedy, pokud vám s jistotou nikdo nebude do programu zadávat nějaké horentní desetinné sumy, je lepší použít celočíselné datové typy a podobně.

Tabulka jednoduchých ordinálních datových typů
TypCože to?Rozsah hodnotMísto v paměti
byteCelá čísla0..2551 byte (překvapivě)
shortintCelá čísla-128..1271 byte
integerCelá čísla-32 768..32 7672 byte
wordZase celá čísla0..65 5352 byte
charJednotlivé znaky, symboly a číslice (konečně změna)později1 byte
booleanLogické hodnoty (buď true - pravda, nebo false - nepravda)Co byste řekli?1 byte

Ordinální versus neordinální?

Ordinální datové typy jsou takové, u nichž můžete s jistotou určit předchůdce a následovníka (tedy pokud umíte počítat na prstech). U neordinálních typů to možné není. Vezměme si kupř. typ real (reálná čísla od 2,9 * 10-39 až 1,7 * 10+38, v paměti zabírá 6 byte). Nikdy nemůžete s jistotou určit třeba předchůdce čísla 1.5 (není to ani 1.4 ani 1.49 dokonce ani 1.499...).

Výrazy

Učeně: výrazem jsou v Pascalu (jakožto i v ostatních programovacích jazycích) veškeré aritmetické, logické i jiné operace (třeba operace žlučníku). Abychom mohli operovat aritmeticky potřebujeme minimálně aritmetické operátory a tady jsou:

Aritmetické operátory (podle priority)
*Násobení
/Dělení reálných (!!) čísel
divCeločíselné dělení (21 div 5 = 4)
modZbytek po celočíselném dělení (21 mod 5 = 1)
+Sčítání
-Odčítání

Ještě dodatek: Kulaté závorky () fungují jako v matematice - určují prioritu matematických operací, (4 + 1) * 2 = 10 ALE 4 + 1 * 2 = 6

Načítání z klávesnice alias readln

ReadLn(jmeno_promenne);

Procedura readln čeká na vstup řetězce znaků ukončeného znakem enter. Potom tímto řetězcem naplní proměnnou podle jejího typu. Všechno si ukážeme už na trochu sofistikovanějším příkladu.

program operace;

var c1, c2, soucin: integer;
    podil: real;

begin
   writeln('Zadejte dve cela cisla: ');
   readln(c1); 
   readln(c2);

   podil:= c1 / c2;
   soucin:= c1 * c2;

   writeln('Podil cisel je ', podil);
   writeln('Soucin cisel je ', soucin);
   readln;
end.

Vezmeme to pěkně popořádku: na třetím řádku vidíme deklaraci potřebných proměnných. V hlavním programu budete požádáni o zadání dvou celých čísel(writeln('Zadejte...')). Zadáte první, stisknete Enter, zadáte druhé a opět Enter. Do proměnných podil a soucin se uloží výsledky obou matematických operací. Jinými slovy, při zadaných hodnotách 3 a 2, se na obrazovce zobrazí asi toto:

Podil cisel je 1.50000000000000E+0000
Soucin cisel je 6

Děsivý zápis 1.500000... znamená jen vědecký zápis čísla pomocí mocnin deseti (v překladu do lidštiny 1.5 * 10+0). Nakonec malý trik s readln; Tento příkaz samozřejmě nic do proměnné nenačte, ale přesto má své opdstatnění. Každý váš dosavadní program prosviští přes obrazovku rychlostí blesku a než se stačíte vzpamatovat, je všechno pryč. Potom si dosažené výsledky musíte zdlouhavě prohlížet pomocí volby User screen. Díky readln; (úplně na konci) program uctivě počká, až všechno zevrubně prozkoumáte, a teprve po stisku Enter skončí a zhasne.

Konstanty

Málem bych na ně zapomněl a tohle sem dopisuji těsně před vyvrhnutím druhé lekce do sítě sítí. Konstanty nejsou jako proměnné - proměnné, nóbrž jako konstantní - konst... neměnné. Pročež při deklaraci konstanty musíte rovnou definovat i její hodnotu a ta se už nikde v programu nedá změnit. Půjdeme-li hodně do extrémů, dá se říci, že v zápisu a:= 3; Je právě 3 konstanta. 3 totiž bude vždycky 3 a nikdy nic jiného - rozumíme si?

K čemu se to používá? Občas je lepší nadefinovat si na začátku programu konstantu a při případné změně měnit její hodnotu jen na jednom místě, než překopat dvacet výrazů v programu a dlouze dohledávat, kde jste to číslo vlastně sakra všude použili:-/ Pascal nabízí některé konstanty implicitně. Bez jakékoliv deklarace můžete používat třeba konstantu pi. Konečně vás už přestanu napínat a vyjevím, jak vypadá deklarace takové konstanty (je to úplně jednoduché):

program konstanta;

const euler = 2.718281828;

var a: real;

begin
   a:= euler;
   writeln('Eulerovo cislo je asi: ', euler);
   writeln('a je samozrejme take: ', a);
   readln;
end.

Závěr

Tyhle lekce určitě nemají ambice stát se naprosto vyčerpávajícím popisem jazyka, takže třeba seznam datových typů rozhodně není úplný. Ale myslím, že pro náruživce, kterým by to nestačilo tu mám dost odkazů na stránky, kde takové seznamy naleznou. Jinak nashledanou u příští lekce (logické operace, podmínky, cykly).

Mort




<< Předchozí lekce
_
^
Back to top

Visit one of the best free video poker gratis black jack and slot machine online gokken.

Valid XHTML 1.0!   Valid CSS!
TOPlist