 |
Cykly
|
[ZPĚT na OBSAH]
Obecně:
|for <jméno_proměnné>| |from <výraz>| |by <výraz>| |to <výraz>| |while <výraz>|
do <posloupnost příkazů> od;
Konkrétně
Chceme vytvořit cyklus, který vytiskne sudá čísla od 0 do 6:
>for i from 0 by 2 to 6 do
>print(i)
>od;
0
2
4
6
promněnná i zde nabývá hodnoty od 0 (from 0 ) do 6 (to 6 ) násobkem dvou (by 2 )
Násobek nemusí být celé číslo:
>for i from 3 by 1.5 to 6 do
>print(i)
>od;
3
4.5
6
Stejný případ s použitím příkazu while
>i:=0;
>while i<6 do
>i:=i+2;
>od;
i:=0
i:=2
i:=4
i:=6
while lze přeložit "až do" =>
druhý řádek říká, že se bude opakovat cyklus až do té chvíle, dokud i bude menší než 6. Poté se cyklus ukončí.
Více cyklů lze libovolně vnořit do sebe, ale nesmí se křížit:
>for i from 1 to 3 do
>for j from 1 to 2 do
>print(i,j);
>od;
>od;
1, 1
1, 2
2, 1
2, 2
3, 1
3, 2
Další příklady:
Máme zadanou posloupnost sedmi hodnot objemového průtoku kapaliny v l/min
>Vprutok:=[0,200,400,600,800,1000,1200]: # objemovy prutok [l/min]
>Pocet_dat:=7:
Tyto hodnoty musíme pro další výpočty přepočíst na m3/s:
Máme dvě možnosti
a) příkazu map
>Vprutok:=evalf(map(x -> x/(60*1000), Vprutok)): # prepocet vsech clenu na [m^3/s]
Vprutok:=[0,0.0033333333,0.0066666667,0.0100000000, 0.0133333333,0.0166666667,0.0200000000]
b) cyklus
>for i from 1 to Pocet_dat do
>Vprutok_novy[i]:=evalf(Vprutok[i]/(60*1000));
>od;
>Vprutok_novy:=convert(Vprutok_novy,list); # prevedeni dat z tabulky do vektoru
Vprutok_novy1:=0
Vprutok_novy2:=0.0033333333
Vprutok_novy3:=0.0066666667
Vprutok_novy4:=0.0100000000
Vprutok_novy5:=0.0133333333
Vprutok_novy6:=0.0166666667
Vprutok_novy7:=0.0200000000
Vprutok_novy:=[0,0.0033333333,0.0066666667,0.0100000000, 0.0133333333,0.0166666667,0.0200000000]
Příkaz convert převádí nově vypočtená data do tvaru, se kterým lze dále počítat.
|