Opakování asymptotické notace

Na cvičení byly rozebrány dva příklady. Není mým záměrem poskytovat zde univerzální návod pro rozhodování o vztazích mezi funkcemi. Věřím ale, že konkrétní řešený příklad může často pomoct pro lepší orientaci v problematice.

Jak se píše program

K napsání programu vám stačí libovolný textový editor. Na cvičení jsme použili editor zabudovaný ve vývojovém prostředí pro Turbo Pascal 7.0. Následující program ilustruje konstrukce a pojmy předvedené na cvičení.

1  Program cvicnyProgram;

2  const Pozdrav = 'Ahoj';
3        tajneCislo = 10;

4  var  X: integer;
5       Y: integer;
6       i: integer;

7  Begin
8  writeln(Pozdrav);
9  write('Hadej cislo: ');
10 readln(X);
11 Y := X;
12 if Y > tajneCislo then
13   writeln('To je moc. Zkus priste min.')
14 else
15   begin
16   if Y = tajneCislo then
17     begin
18     writeln('Trefa!');
19     write('Za odmenu ti tu napisu ',tajneCislo,' hvezdicek: ');
20     for i:=1 to tajneCislo do
21       write('*');
22     writeln;
23     end
24    else
25      writeln('To je malo. Zkus priste vic.');
26    end;
27 readln;
28 End.

Komentář

Na prvním řádku najdeme název programu. Mezi řádky 7 až 28 je hlavní blok programu uzavřený mezi Begin a End.. Pascal ve zdrojovém kódu nerozlišuje velká a malá písmena. Hlavní blok je speciálním případem bloku příkazů a proto je za End tečka místo středníku. Další bloky příkazů jsou např. mezi řádky 15-26, nebo 17-23. Každý blok příkazů obsahuje seznam příkazů oddělených znakem ";".

Na řádku 2 a 3 je uvedena definice konstant používaných v programu. Jde o seznam dvojic:

nazevKonstanty = hodnota

uvozený klíčovým slovem const, jehož položky jsou odděleny středníkem.

Podobně jsou na řádcích 4-6 uvedeny deklarace konstant. Tentokrát jde o seznam dvojic ve tvaru:

nazevPromenne : typPromenne

Položky seznamu jsou opět odděleny středníkem.

Pascal rozpoznává množství příkazů. V této ukázce se vyskytují:

  • přiřazovací příkaz (ř. 11 - kopírování hodnoty z jedné proměnné do druhé)
  • příkazy pro standartní vstup (ř. 10 - čtení hodnoty do proměnné; a 27 - čekání na Enter). V obou případech jde o volání procedury readln.
  • příkazy pro standartní výstup (ř. 8,9,13,18,19,21,22 a 25). Jde vždy o volání procedur write, nebo writeln. Druhá jmenovaná vypíše kromě svých parametrů také konec řádku.
  • řídicí struktury (ř. 12-26, 16-25 a 20-21). V prvních dvou případech jde o větvící příkaz ve tvaru:

    if COND then prikaz_1 else prikaz_2;

    Přitom COND může být jakýkoliv výraz, který lze vyhodnotit jako pravdivý, nebo nepravdivý a prikaz_1 i prikaz_2 může být libovolný příkaz z tohoto seznamu příkazů, nebo blok příkazů uzavřený mezi begin a end.

    Struktura na řádcích 20-21 představuje cyklus s daným počtem opakování ve tvaru: for iteracniPromenna:=start to konec do prikaz;
    Funguje to tak, že se prikaz provede postupně pro každou hodnotu počínaje start a konče konec.

Domácí úkol

V CodExu je zadána první domácí úloha. K jejímu vyřešení budete potřebovat využít funkce read,readln,writeln, řídicí strukturu představenou jako for-cyklus a několik proměnných typu integer. Zdrojový kód si zkuste přeložit a spustit. Případné technické problémy vyřešíme společně na příštím cvičení.

Za úlohu sice nejsou žádné body, ale úspěšní řešitelé mohou získat bonusové body. Na příštím cvičení si příklad podrobně rozebereme.