Pascal – řízení programu
cykly
Opakování – if-then
Seřaďte dva řetězce podle abecedy (stačí je porovnat)
Všechna velká písmena jsou v ASCII tabulce před malými!!!
(každý znak má v této tabulce svůj kód – číselnou hodnotu)
Opakování – if-then
Program Retezce; Var R1,R2 : string; Begin
Writeln('Zadej dva retezce (malymi pismeny): '); Readln(R1); Readln(R2); Writeln;
If R1 < R2 then Writeln(R1, ' stoji v abecede pred ', R2); If R1 = R2 then Writeln('Oba retezce jsou identicke'); If R1 > R2 then Writeln(R2, ' stoji v abeceda pred ',R1);
Readln; End.
Pascal – příkazy a cykly
další možností řízení programu jsou tzv. cykly
a) s pevným počtem opakování
for Proměnná:=DelejOd to DelejDo do
Příkaz;
počet opakování cyklu určíme řídící proměnnou, dolní a horní mezí (řídící proměnná bude postupně nabývat hodnoty mezi dolní a horní mezí včetně)
před započetím provádění cyklu je znám počet opakování
používá se, chceme-li několikrát po sobě zopakovat stejnou činnost
Pascal – příkazy a cykly
i – řídící proměnná
d – dolní mez
h – horní mez
for i:= dolní mez to
horní mez do příkaz
Pascal – příkazy a cykly
obsah proměnné zvětšují od DelejOd do DelejDo a pokaždé provedou Příkaz
Příklad:
Program Abeceda;
Var c:char;
Begin for c:='a' to 'z' do Writeln(c);
Readln;
End.
Pascal – příkazy a cykly
Vytvořte program, který zaplní celou
obrazovku nápisem Ahoj (NIKDE nesmí
zůstat mezera).
Pascal – příkazy a cykly
Program AhojVsude;
Var I:Integer;
Begin
Writeln('Kecy');
For I:=1 to 980 do Write('Ahoj');
Readln;
End.
Pascal – příkazy a cykly
Řešený příklad “Součet”: na vstupu jsou dvě přirozená čísla a, b
(a < b). vytiskněte, kolik je součet všech přirozených
čísel v intervalu <a, b>
(budou-li např. na vstupu čísla 4 a 7, chceme vytisknout číslo 22, protože 4+5+6+7=22)
Pascal – příkazy a cykly
Řídící proměnnou cyklu necháme nabývat
hodnot 4, 5, 6 a 7 (v našem konkrétním
případě) a vždy ji přičteme do proměnné
SOUCET, kde bude hledaný součet
Pascal – příkazy a cykly
Program SCITANI;var ODKUD, KAM, SOUCET, I: integer;begin
write (´Od ktereho cisla mam zacit scitat ?´);readln (ODKUD);write (´Do ktereho cisla mam scitat ?´);readln (KAM);SOUCET := 0;for I:= ODKUD to KAM do SOUCET := SOUCET + I;write (´Hledany soucet cisel je:´, SOUCET);readln;
end.
Najděte všechna řešení rovnice a2+b2=c2 v oboru přirozených čísel menších jak 100
Řešený příklad – for – to -do
Zadejte číslo n a najděte všechny jeho dělitele.program delitel; var i:byte; n,m:word; begin writeln('Zadej cislo:');
readln(n); for i:=1 to n do
begin m:=n mod i; if m=0 then writeln('Cislo ',i,' je delitelem cisla ',n); end;
readln; end.
?
Pascal – příkazy a cykly
Program Pythagoras; Var A,B,C : Integer; Begin
For A:=1 to 100 do For B:=1 to 100 do
For C:=1 to 100 do if A*A +B*B = C*C then Write(a:3,' ',b:3,' ',c:4,' '); Readln;
End.
Pascal – příkazy a cykly
b) Cyklus s podmínkou na konci
příkaz REPEAT … UNTIL
REPEAT
Příkaz A;
Příkaz B;
UNTIL Podm;
Jediná výjimka, kdy není třeba Begin a End.
Pascal – příkazy a cykly
Příkaz A
Příkaz B
Podm.
Ne
Ano
Opakuj tak dlouho,
až nastane splnění podmínky
(až začne platit podmínka)
Opakuj Akci 1 a Akci 2,dokud neplatí Podmínka
Příklad: Sčítání 10 čísel
Příklad pro repeat - until
Spočítejte počet studentů na škole. Počty se zadávají po jednotlivých třídách. Na konci zadávající stiskne 0.
Řešení příkladu
program skola; var soucet,pocet:word; begin
soucet:=0; repeat writeln('Zadej pocet studentu ve tride'); readln(pocet); soucet:=soucet+pocet; until pocet=0; writeln('Pocet studentu na skole je ',soucet);
readln; end.
Řešený příklad repeat-until
Vytvořte program pro výpočet faktoriálu. program faktorial; var a,f:integer; begin f:=1;
repeat writeln('Zadej celé číslo od 1 do 12.');
readln(a); until (a>=1) and (a<=12); write('Faktorial cisla ',a,' je '); while a<>0 do begin
f:=f*a; a:=a-1; end;
writeln(f,'.'); readln;
end.
Pascal – příkazy a cykly
c) cyklus s podmínkou na začátku
příkaz WHILE …DO
WHILE Podm DO Begin
Příkaz X;
Příkaz Y;
End;
Pascal – příkazy a cykly
Podm.
Příkaz X
Příkaz Y
Ne
Ano
Dokud platí podmínka,
dělej Příkazy X a Y
Pokud platí Podmínka,Prováděj Akci
Sčítání n čísel
S:=0;
I:=1;
while I <=10 do S:=S+I
příkaz cyklu se bude provádět do nekonečna, neboť obsah proměnné I je stále stejný (obsah proměnné S se neustále zvyšuje o 1)
Sčítání n čísel
požadujeme-li však sečíst pouze1+2+…+10 a výsledek tohoto součtu uložit do proměnné S, pak algoritmus musí být ve tvaru:
S:=0;
I:=1;
while I <=10 do begin S:=S+I;
I:=I+1
end
Zadání příkladu – while-do
Spočítejte průměrnou známku studentů. Učitel do programu zadává známky a program spočítá průměr ze všech zadaných známek. Při ukončení zadávání stiskne učitel 0.
Řešení příkladu:
program prumer; var a,soucet,i:integer; begin
soucet:=0; i:=0; writeln('Zadej znamku'); readln(a);
while (a>0) and (a<6) do begin soucet:=soucet+a; i:=i+1; writeln('Zadej znamku'); readln(a); end;
if soucet=0 then writeln('Zadnou znamku jsi nezadal') else writeln('Prumerna znamka je', soucet/(i-1)); readln;
end.