MFF UK / Ústav teoretické fyziky / Tomáš Ledvinka
Přednášky
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
  Úvod
  Programy a algoritmy
  Píšeme program
    Krotíme Delphi
    PASCAL - Program
    PASCAL - Příkaz
    PASCAL - Cykly
    PASCAL - Výraz
  Píšeme program II
  Procedury a funkce
  Malujeme funkce
  Chyby. Typy I.
  Typy II. Pole a Záznamy
  Pole II.Řetězce.Soubory.
  Gnuplot.Interpolace...
  Matice. Velké O...
  Fronta,Zásobník. Postscript
  Bin. soubory, ...
  Ukazatele,Objekty, ...
Počítačová algebra
Klasická elektrodynamika (2.r)
Vybrané partie OTR

Cvičení
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
Teoretická mechanika (2.r)
Klasická elektrodynamika (2.r)


Věda
. . . . . . . . . . . . . . . . . . . . . . . . . .
Diskové zdroje v OTR
Hyperbolické systémy v OTR


Kontakt
. . . . . . . . . . . . . . . . . . . . . . . . . .
Email
Konzultační hodiny


Ostatní
. . . . . . . . . . . . . . . . . . . . . . . . .
Mallorca
Ze společnosti

Strukturované příkazy

- Cykly



jsou důležitým prvkem jazyka. Představují opakování nějakého příkazu, které je ve správnou chvíli ukončeno. Strukturované příkazy rozlišují vlastní příkaz(y), které se mají opakovat a kontrolní část, která určuje za jakých podmínek se má příkaz provádět. Později uvidíme, že toto striktní oddělení, zvyšující "teoretické" kvality jazyka, bude povoleno porušit i jinak než pomocí goto.

Cyklus While



nejdříve se vyhodnotí podmínka a je-li splněna (hodnota true), provedede se příkaz, pak se znovu vyhodnotí podmínka atd. Nesplnění podmínky znamená konec provádění tohoto strukturovaného příkazu. V příkazu následujícím za přikazem while tak mohu předpokládat, že Vyraz má hodnotu nepravda (false).

Cyklus Repeat



nejdříve se vykonají všechny příkazy mezi klíčovými slovy repeat a until a pokud následně podmínka není splněna (Vyraz má hodnotu false), opakuje se provádění příkazů v cyklu atd. V příkazu následujícím za příkazem repeat tak mohu předpokládat, že Vyraz má hodnotu pravda (true).

repeat
writeln(i);
i:=i+1;
until i>10;
je tedy rovnocenný příkazům
writeln(i);
i:=i+1;
while i<=10 do begin
writeln(i);
i:=i+1;
end;


Cyklus For


Je určen jako zkratka cyklu while v případě, kdy potřebujeme projít všecha celá čísla v nějakém intervalu

a umožní nám zjednodušit náš sčítací program

program SKonstantouDvemaPromennymiACyklemFor;
const N = 10;
var i,s : integer;
begin
s:=0; {na tohle nesmím zapomenout}
for i:=1 to N do s:=s+i;
writeln('Soucet cisel od 1 do ',N,' je ',s);
end.
Příkaz for je zkratkou cyklu while a tak při nevhodné konstalaci mezí nemusí být příkaz ani jednou vykonán.

Příklad: následující program nám odhalí, kteráže trojciferná čísla jsou stejně jako třeba číslo 153 součtem třetích mocnin svých cifer.

program cisla;

var a,i,j,k:integer;

begin
for i:=1 to 9 do {např. 024 není trojciferné, tak začínám od 1}
for j:=0 to 9 do
for k:=0 to 9 do
begin
a:=i*100+j*10+k;
if a=i*i*i+j*j*j+k*k*k then writeln(a);
end;
end.
Pozn.: Algoritmus, který tento program popisuje, patří do třídy těch nejpotupnějších, neboť jej lze zapsat slovy: zkus všechny možnosti. (Slang: Brute force) Bohužel v diskrétních úlohách někdy ani lepší nenajdeme. Naštěstí není celých čísel "tak moc" jako těch reálných.
.