Umíte pascalsky - 5.lekce ...

Umíte pascalsky?
5.lekce
Vytisknout  

Základní příkazy - 2.část
     V dnešní lekci se budeme zabývat podmíněným příkazem case a cyklem for.

Příkaz Case

Umožňuje vybrat k realizaji jeden z více příkazů podle hodnoty výběrového výrazu (selektoru). Má tvar:

case výraz of
  hodnota1: příkaz1;
  hodnota2: příkaz2;
    ...
  hodnotan: příkazn;
  else příkaz
end

Výraz za klíčovým slovem case se nazývá selektor větvení a je to výraz ordinálního typu,
hodnot1, hodnota2, ... hodnotan jsou konstanty stejného typu jako selektor.
příkaz1, příkaz2, ... příkazn jsou jednotlivé alternativní příkazy.
Příkaz může předznamenávat více konstant oddělených čárkou.

Realizace: Vyhodnotí se selektor a potom se vykoná ten příkaz, před nímž je uvedena stejná hodnote , jakou má selektor. Pokud se selektor nerovná žádné konstantě, provede se příkaz za klíčovým slovem else - tento řádek je nepovinný.

Příklad: Je-li v proměnné poradi_dne ulozeno poradove cislo dne v tydnu, lze rozhodnout, zda se jedna o pracovni den ci vikendovy den takto:

case poradi_dne of
  1,2,3,4,5: writeln('pracovni den');
  6,7: writeln('vikendovy den');
end

Příklady:

Příklad1:
1.ledna 2001 bylo pondělí. Sestavte program, který po zadání pořadového dne v roce zjistí, který pracovní den to je (Po=1, Ut=2, ..., Pa=5).

Myšlenka (hrubý algoritmus):
3.ledna - streda, 5.ledna - patek, 11.ledna - 11-7=4 tedy ctvrtek, 13.ledna - 13-7=6 tedy víkendový den atd.
Zjistíme tedy zbytek po dělení pořadového čísla dne sedmi a ten rozhodne o dnu.

Program tedy může vypadat takto:

program Jaky_den;
  var den: integer; {Deklarace proměnných}
  begin
    writeln('Zadejte poř.číslo dne v roce 2001'); {Napíše výzvu k zadání dne}
    readln(den);    {Načte den}
    case (den mod 7) of {Zjistí zbytek po dělení 7}
        1: writeln('pondeli'); {pondělí}
        2: writeln('utery'); {úterý}
        3: writeln('streda'); {středa}
        4: writeln('ctvrtek'); {čtvrtek}
        5: writeln('patek'); {pátek}
        else writeln('vikendový den'); {víkendový den}
    end
  end.


Příkaz cyklu

     Příkazy cyklu umožňují opakování příkazů nebo posloupnosti příkazů vícekrát. V jazyce Pascal můžeme zadat počet opakování explicitně nebo implicitně - ve tvaru podmínky, která určuje, zda se má v opakování pokračovat nebo ho ukončit.
Počet opakování je určen:
a) explicitně - cyklus For
b) implicitně (podmínkou) - cyklus While, Repeat

Příkaz For

     Příkaz For slouží k zápisu cyklu se zadaným počtem opakování. Má tvar:

for proměnná := dol to hor do
     příkaz

proměnná - proměnná ordinálního typu - řídící proměnná (parametr cyklu), lze ji používat jen pasivně (není možné v příkazu měnit), po ukončení cyklu ztrácí svou hodnotu
dol,hor - výrazy ordinálního typu
příkaz - jediný příkaz, tělo cyklu

Realizace:
Řídící proměnné se přiřadí hodnota výrazu dol. Je-li tato hodnota menší nebo rovna hodnotě hor, provede se příkaz za slovem do (tělo cyklu). Potom je řídící proměnné přiřazena hodnota následovníka současné hodnoty - succ(proměnná). Je-li tato hodnota menší nebo rovna hor, opět se provede tělo cyklu, v opačném případě je cyklus ukončen.
Je-li dol>hor , neprovede se příkaz (tělo cyklu) ani jednou.
Je-li dol=hor , provede se příkaz (tělo cyklu) jednou.

Příklad:
for kolik:=1 to 5 do
     witeln(kolik,'. Ahoj');

Vytiskne pětkrát Ahoj s očíslováním řádků.

Chceme-li, aby se při dalším průchodu cyklem řídící proměnná o jedničku zmenšila nebo měla hodnotu předchůdce - pred(proměnná), můžeme použit variantu:

for proměnná := hor downto dol do
     příkaz

Příklad:
for kolik:=7 downto 2 do
     wite(kolik);

Vytiskne 765432 .

Příklady:

Příklad1:
Sestavte program pro výpočet faktoriálu zadaného přirozeného čísla.
Např. faktoriál z pěti je 5! = 5.4.3.2.1

Myšlenka (hrubý algoritmus):
Vynásobíme po sobě následující přirozená čísla od jedné až po dané číslo tolikríát, kolik udává toto číslo.
Program tedy může vypadat takto:

program Faktor;
  var cislo, faktorial, nasob: integer; {Deklarace proměnných}
  begin
    writeln('Zadejte číslo'); {Napíše výzvu k zadání čísla}
    readln(cislo);    {Načte číslo}
    faktorial := 1; {inicializuje proměnnou faktorial}
    for nasob := 1 to cislo do {opakovně od 1 do čísla}
          faktorial:=faktorial * nasob; {vynásobí dalším číslem}
    writeln('Faktorial je ',faktorial); {vytiskne výsledný faktoriál}
  end.



Domácí úkol:

     Sestavte program pro nalezení největšího čísla ze zadaných deseti čísel.

On-line účast na řešení úkolu

Řešit úkol Prohlídka hodnocení úkolu Dotazy,připomínky

Pomocí volby Řešit můžete (po přihlášení) odeslat vaše řešení domácího úkolu (každý úkol smíte řešit jen jednou). Volbou Hodnocení si přečtete hodnocení a komentář od vyučujícího. Dotaz nebo připomínku můžete opakovaně zasílat pomocí tlačítka Dotazy, Komunikace (na levém okraji) zobrazuje příklad možné komunikace s vyučujícím.