poměrně primitivní program k demonstraci použití procedur
všimněte si procedury baybay a užitečného použití příkazu delay
úkol: doplňte další otázky a další možnosti vyhodnocení
úterý 15. prosince 2009
pondělí 14. prosince 2009
Vysvědčení: procedury, podmínka...
tento program testuje, zda 4 dosažené známky odpovídají vyznamenání nebo znamenají, že student prospěl
na vyznamenání musíte současně splnit tyto podmínky: průměr do 1,5 včetně a zároveň žádná trojka či horší
do proměnné NE se ukládá každé porušení předchozích podmínek, pro udělení vyznamenání musí být NE rovno nule, tak jak bylo nastaveno na začátku
rozšiřte tento program tak, aby testoval, zda student nepropadl
všimněte si vcelku elegantního využití pomocné proměnné zde označené jako NE: na vyznamenání musíte současně splnit tyto podmínky: průměr do 1,5 včetně a zároveň žádná trojka či horší
do proměnné NE se ukládá každé porušení předchozích podmínek, pro udělení vyznamenání musí být NE rovno nule, tak jak bylo nastaveno na začátku
pondělí 30. listopadu 2009
Procedury poprvé
Jeden z předchozích programů je rozkrájen na procedury.
Vlastní program je pak šokézně krátký a přehledný.
cvičení: Upravte tento program tak, aby i z řádků psaných kurzívou byla procedura!
program zkouseni;
uses crt;
var a,i,q,w,e,r,klavesa: integer;
Vlastní program je pak šokézně krátký a přehledný.
cvičení: Upravte tento program tak, aby i z řádků psaných kurzívou byla procedura!
program zkouseni;
uses crt;
var a,i,q,w,e,r,klavesa: integer;
úterý 24. listopadu 2009
Zkoušení cykly
Vytvořete program, který se zeptá na počáteční číslo a konečné číslo a pak vypíše číselnou řadu mezi těmito čísly.
Např.: Vložíte 10 jako počátek a 16 jako konec.
Program vypíše tento výstup:
10 12 14 16
Toto řešte pomocí minimálně dvou metod cyklů.
Ideální příklad výstupu při zadání viz výše:
-----
metoda for:
10 12 14 16
metoda while:
10 12 14 16
metoda repeat:
10 12 14 16
ještě jednou ano/ne?
Např.: Vložíte 10 jako počátek a 16 jako konec.
Program vypíše tento výstup:
10 12 14 16
Toto řešte pomocí minimálně dvou metod cyklů.
Ideální příklad výstupu při zadání viz výše:
-----
metoda for:
10 12 14 16
metoda while:
10 12 14 16
metoda repeat:
10 12 14 16
ještě jednou ano/ne?
pondělí 23. listopadu 2009
Zkoušení cykly
Vytvořete program, který se zeptá na počáteční číslo a konečné číslo a pak vypíše číselnou řadu mezi těmito čísly.
Např.: Vložíte 10 jako počátek a 15 jako konec.
Program vypíše tento výstup:
10 11 12 13 14 15
Toto řešte pomocí všech tří metod cyklů.
Ideální příklad výstupu při zadání viz výše:
-----
metoda for:
10 11 12 13 14 15
metoda while:
10 11 12 13 14 15
metoda repeat:
10 11 12 13 14 15
ještě jednou ano/ne?
-----
Např.: Vložíte 10 jako počátek a 15 jako konec.
Program vypíše tento výstup:
10 11 12 13 14 15
Toto řešte pomocí všech tří metod cyklů.
Ideální příklad výstupu při zadání viz výše:
-----
metoda for:
10 11 12 13 14 15
metoda while:
10 11 12 13 14 15
metoda repeat:
10 11 12 13 14 15
ještě jednou ano/ne?
-----
pondělí 16. listopadu 2009
Program znaky
Program nejdříve zeptá, kolik znaků a pak jaké znaky a pak tyto znaky v počtu, který byl zadán namaluje vedle sebe!
úkol: upravte tento program tak, aby testoval, zda nebylo do počtu znaků, které se mají napsat nebylo zadáno číslo menší než 5, pokud by tomu tak bylo, tak vyzve na nové zadání
graficky tento program vyčistěte (stejné řádkové rozestupy mezi jednotlivými řešeními)
program znaky;
uses crt;
var klavesa, pocet, i, a: integer;
znak: char;
begin
writeln ('Program ti vypise tolik znaku, kolik si reknes:)');
repeat
writeln ('jakym znakem to bude?');
readln (znak);
writeln ('kolik znaku za sebou to bude?');
readln (pocet);
clrscr;
writeln ('nejdrive pomoci FOR');
writeln ('');
for i:=1 to pocet do
write (znak);
writeln ('');
write ('a ted pomoci REPEAT');
writeln ('');
a:=1;
repeat
write (znak);
a:=a+1;
until a>pocet;
writeln ('');
writeln('a ted pomoci WHILE');
writeln ('');
a:=0;
while a
begin
write (znak);
a:=a+1;
end;
writeln ('');
writeln ('Pokracovat 1/0');
readln (klavesa);
until klavesa<>1;
end.
úkol: upravte tento program tak, aby testoval, zda nebylo do počtu znaků, které se mají napsat nebylo zadáno číslo menší než 5, pokud by tomu tak bylo, tak vyzve na nové zadání
graficky tento program vyčistěte (stejné řádkové rozestupy mezi jednotlivými řešeními)
program znaky;
uses crt;
var klavesa, pocet, i, a: integer;
znak: char;
begin
writeln ('Program ti vypise tolik znaku, kolik si reknes:)');
repeat
writeln ('jakym znakem to bude?');
readln (znak);
writeln ('kolik znaku za sebou to bude?');
readln (pocet);
clrscr;
writeln ('nejdrive pomoci FOR');
writeln ('');
for i:=1 to pocet do
write (znak);
writeln ('');
write ('a ted pomoci REPEAT');
writeln ('');
a:=1;
repeat
write (znak);
a:=a+1;
until a>pocet;
writeln ('');
writeln('a ted pomoci WHILE');
writeln ('');
a:=0;
while a
begin
write (znak);
a:=a+1;
end;
writeln ('');
writeln ('Pokracovat 1/0');
readln (klavesa);
until klavesa<>1;
end.
úterý 10. listopadu 2009
Program Cykly 3
námět na zkoušení:
Upravte tento program tak, aby se nejdříve zeptal, kolik znaků a pak jaké znaky a pak tyto znaky v počtu, který byl zadán namaloval vedle sebe!
program cykly3;
uses crt;
var a,i, klavesa: integer;
begin
repeat
writeln ('for -----------------------------------------');
for i:=1 to 5 do
write ('for');
writeln (' ');
writeln ('repeat -----------------------------------------');
a:=0;
repeat
write ('rep');
a:=a+1;
until a>5;
writeln (' ');
writeln ('while -----------------------------------------');
a:=0;
while a<=5 do
begin
write ('whi');
a:=a+1;
end;
writeln (' ');
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Upravte tento program tak, aby se nejdříve zeptal, kolik znaků a pak jaké znaky a pak tyto znaky v počtu, který byl zadán namaloval vedle sebe!
program cykly3;
uses crt;
var a,i, klavesa: integer;
begin
repeat
writeln ('for -----------------------------------------');
for i:=1 to 5 do
write ('for');
writeln (' ');
writeln ('repeat -----------------------------------------');
a:=0;
repeat
write ('rep');
a:=a+1;
until a>5;
writeln (' ');
writeln ('while -----------------------------------------');
a:=0;
while a<=5 do
begin
write ('whi');
a:=a+1;
end;
writeln (' ');
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
pondělí 9. listopadu 2009
Tři typy cyklů
V tomto programu jsou použity všechny 3 typy cyklů. Každý z nic dělá totéž.
Zkoušení bude spočívat v tom, že dostanete podobný program, kde však bude jediný typ cyklu a vy budete muset dopsat zbylé dva.
program nasobilka;
uses crt;
var a, b, c, i,j,pom, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se zacne nasobit');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se skonci nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('zadej cislo, ktere se bude nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (C);
pom:=a;
writeln ('for -----------------------------------------');
writeln ('repeat -----------------------------------------');
repeat
a:=pom;
while a<=b do
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Zkoušení bude spočívat v tom, že dostanete podobný program, kde však bude jediný typ cyklu a vy budete muset dopsat zbylé dva.
Všimněte si prosím záludného použití proměnné POM !
(ideální by bylo udělat simulační tabulku tohoto programu...)program nasobilka;
uses crt;
var a, b, c, i,j,pom, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se zacne nasobit');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se skonci nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('zadej cislo, ktere se bude nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (C);
pom:=a;
writeln ('for -----------------------------------------');
for i:=A to B do
writeln (i, ' x ',c , ' =',i * c);
{napise obsah promenne i, pak znacku nasobeni...}writeln ('repeat -----------------------------------------');
repeat
writeln (a, ' x ',c , ' =',a * c);
a:=a+1;
until a>b;
writeln ('while -----------------------------------------');a:=pom;
while a<=b do
begin
writeln (a, ' x ',c , ' =',a * c);
a:=a+1;
end;
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
úterý 3. listopadu 2009
Program porovnávající cykly
úkol:
Sestavte program, který vypíše násobilku z klávesnice zadaného čísla.
Program vypíše pouze násobky z intervalu, který budete požadovat (zadáte z klávesnice jeho začátek a konec).
Konkrétně:
Zadáte z klávesnice, že požadujete násobky od 3 do 5 pro číslo 6. Program vypíše:
3 x 6 = 18
4 x 6 = 24
5 x 6 = 30
V programu uveďte řešení pomocí 3 různých metod cyklů (for, repeat, while).
Tato řešení oddělte ve výpisu vodorovnou čarou.
-------------------------------------------------------------
...a řešení:
program nasobilka;
uses crt; var a, b, c, i,j, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se zacne nasobit');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se skonci nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('zadej cislo, ktere se bude nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (C);
for i:=A to B do
writeln (i, ' x ',c , ' =',i * c);
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('-----------------------------------------');
repeat
writeln (a, ' x ',c , ' =',a * c);
a:=a+1;
until a>=b;
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Sestavte program, který vypíše násobilku z klávesnice zadaného čísla.
Program vypíše pouze násobky z intervalu, který budete požadovat (zadáte z klávesnice jeho začátek a konec).
Konkrétně:
Zadáte z klávesnice, že požadujete násobky od 3 do 5 pro číslo 6. Program vypíše:
3 x 6 = 18
4 x 6 = 24
5 x 6 = 30
V programu uveďte řešení pomocí 3 různých metod cyklů (for, repeat, while).
Tato řešení oddělte ve výpisu vodorovnou čarou.
-------------------------------------------------------------
...a řešení:
program nasobilka;
uses crt; var a, b, c, i,j, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se zacne nasobit');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, kterym se skonci nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('zadej cislo, ktere se bude nasobit');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (C);
for i:=A to B do
writeln (i, ' x ',c , ' =',i * c);
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('-----------------------------------------');
repeat
writeln (a, ' x ',c , ' =',a * c);
a:=a+1;
until a>=b;
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
úterý 27. října 2009
Zajímavá násobilka potřetí: opečovaný vstup
Co dělat, když nějaký šmoula hodlá zadat začátek násobení od vyššího čísla než konec násobení?
Nutno opečovat vstup:
program nasobilka;
uses crt;
var a, b, c, i, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
repeat
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, ktere budes nasobit');
readln (A);
writeln ('zadej cislo, od ktereho chces nasobit');
readln (B);
writeln ('zadej cislo, do ktereho chces nasobit');
readln (C);
until c>b;
clrscr; {to je vymazani obrazovky}
for i:=b to c do
{cyklus pro i od a do b dělej... -> cyklus probehne (b - a) krat}
writeln (i, ' x ',a , ' =',i * a);
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Nutno opečovat vstup:
program nasobilka;
uses crt;
var a, b, c, i, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
repeat
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, ktere budes nasobit');
readln (A);
writeln ('zadej cislo, od ktereho chces nasobit');
readln (B);
writeln ('zadej cislo, do ktereho chces nasobit');
readln (C);
until c>b;
clrscr; {to je vymazani obrazovky}
for i:=b to c do
{cyklus pro i od a do b dělej... -> cyklus probehne (b - a) krat}
writeln (i, ' x ',a , ' =',i * a);
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Zajímavá násobilka (uživatelsky definován start a konec c yklu)
násobilka, kdy zadáte počátek a konec cyklu:
program nasobilka;
uses crt;
var a, b, c, i, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, ktere budes nasobit');
readln (A);
writeln ('zadej cislo, od ktereho chces nasobit');
readln (B);
writeln ('zadej cislo, do ktereho chces nasobit');
readln (C);
clrscr; {to je vymazani obrazovky}
for i:=b to c do
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
program nasobilka;
uses crt;
var a, b, c, i, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
writeln ('zadej cislo, ktere budes nasobit');
readln (A);
writeln ('zadej cislo, od ktereho chces nasobit');
readln (B);
writeln ('zadej cislo, do ktereho chces nasobit');
readln (C);
clrscr; {to je vymazani obrazovky}
for i:=b to c do
{cyklus pro i od a do b dělej... -> cyklus probehne (b - a) krat}
writeln (i, ' x ',a , ' =',i * a);{napise obsah promenne i, pak znacku nasobeni...}
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
pondělí 26. října 2009
Cyklus v cyklu
Pěkná pakárnička takový cyklus v cyklu!
Namaluj simulační tabulku!
program nasobilka;
uses crt;
var a, b, i,j, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
for i:=1 to 3 do
for j:=5 to 8 do
{vnoreny cyklus pro i od 1 do 3 dělej... -> cyklus probehne 12x}
writeln (i, ' x ',j , ' =',i * j);
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Namaluj simulační tabulku!
program nasobilka;
uses crt;
var a, b, i,j, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
clrscr; {to je vymazani obrazovky}
for i:=1 to 3 do
for j:=5 to 8 do
{vnoreny cyklus pro i od 1 do 3 dělej... -> cyklus probehne 12x}
writeln (i, ' x ',j , ' =',i * j);
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Nejjednodušší základní program vylepšený o nekonečné opakování
Solidní program se nakonec zeptá, zda-li má pokračovat nebo skončit.
Tudy na to:
program nasobilka;
uses crt;
var a, b, i, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
writeln ('zadej cislo');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej dalsi cislo');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('soucet cisel ',a, ' a ',b , ' je ',a+b);
if a = b then
{kdyz - tak, to znas:)}
writeln ('cisla ',a, ' a ',b , ' jsou stejna')
else
{jinak...}
writeln ('cisla ',a, ' a ',b , ' nejsou stejna');
for i:=1 to 10 do
{cyklus pro i od 1 do 10 dělej... -> cyklus probehne 10x}
writeln (i, ' x ',a , ' =',i * a);
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
Tudy na to:
program nasobilka;
uses crt;
var a, b, i, klavesa: integer;
begin
repeat {to je zacatek cyklu, ktery konci tim until dole:
program se bude motat dokola, dokud nekdo nezmackne klavesu 1}
writeln ('zadej cislo');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej dalsi cislo');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('soucet cisel ',a, ' a ',b , ' je ',a+b);
if a = b then
{kdyz - tak, to znas:)}
writeln ('cisla ',a, ' a ',b , ' jsou stejna')
else
{jinak...}
writeln ('cisla ',a, ' a ',b , ' nejsou stejna');
for i:=1 to 10 do
{cyklus pro i od 1 do 10 dělej... -> cyklus probehne 10x}
writeln (i, ' x ',a , ' =',i * a);
{napise obsah promenne i, pak znacku nasobeni...}
writeln ('stiskni 1, kdyz pokracovat, jinak nulu a program skonci');
readln (klavesa);
until klavesa<>1;
{zde konci cyklus repeat}
end.
úterý 20. října 2009
Nejjednodušší základní program
program nasobilka;
uses crt;
var a, b, i: integer;
begin
writeln ('zadej cislo');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej dalsi cislo');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('soucet cisel ',a, ' a ',b , ' je ',a+b);
if a = b then
{kdyz - tak, to znas:)}
writeln ('cisla ',a, ' a ',b , ' jsou stejna')
else
{jinak...}
writeln ('cisla ',a, ' a ',b , ' nejsou stejna');
for i:=1 to 10 do
writeln (i, ' x ',a , ' =',i * a);
writeln ('stiskni cokoli a program skonci');
repeat until keypressed;
{motej se dokola, po zmacknuti cehokoli skonci}
end.
uses crt;
var a, b, i: integer;
begin
writeln ('zadej cislo');
readln (A);
clrscr; {to je vymazani obrazovky}
writeln ('zadej dalsi cislo');
{writeLN napise text a ukonci radek (na rozdil od write)}
readln (B);
writeln ('soucet cisel ',a, ' a ',b , ' je ',a+b);
if a = b then
{kdyz - tak, to znas:)}
writeln ('cisla ',a, ' a ',b , ' jsou stejna')
else
{jinak...}
writeln ('cisla ',a, ' a ',b , ' nejsou stejna');
for i:=1 to 10 do
writeln (i, ' x ',a , ' =',i * a);
writeln ('stiskni cokoli a program skonci');
repeat until keypressed;
{motej se dokola, po zmacknuti cehokoli skonci}
end.
pondělí 19. října 2009
Program NejvetsiSpolDelitel radostněji
program NejvDelitel;
uses crt; {nutné proto, aby fungoval příkaz "repeat until keypressed"}
var A, B, C, D : Integer;
begin
Writeln ( 'Nejvetsi spolecny delitel ' );
Writeln ( 'Zadejte dve cisla ' );
Readln ( A, B );
clrscr;
C:=A;
D:=B;
while A <> B do
if A > B then A := A - B
else B := B - A;
Writeln ( 'Nejvetsi spolecny delitel cisel ', C, ' a ', D, ' je ', A );
Writeln ( '***stiskni cokoli a program skonci***');
repeat until keypressed;
end.
repeat cyklus
repeat
;
;
...............
until
příklad:
repeat
write ('Zadej kladné číslo: ');
read (cislo);
if cislo <= 0 then write ('Cislo ', cislo, 'neni kladne!'); until cislo >0;
cvičení:
Napiš tuto část programu za pomocí cyklu while!
... a řešení:
Porovnání cyklu while oproti cyklu repeat until:
Poznámka:
Repeat cyklus se provede alespoň jednou.
While se nemusí provést ani jednou!
While cyklus běží tak dlouho, dokud platí jeho podmínka.
Repeat se chová opačně - jakmile podmínka platí, skončí!
...............
until
příklad:
repeat
write ('Zadej kladné číslo: ');
read (cislo);
if cislo <= 0 then write ('Cislo ', cislo, 'neni kladne!'); until cislo >0;
cvičení:
Napiš tuto část programu za pomocí cyklu while!
... a řešení:
Porovnání cyklu while oproti cyklu repeat until:
program while_versus_repeat_until;
uses wincrt; {nutné proto, aby fungoval príkaz "repeat until keypressed"}
var cislo : Real;
begin
clrscr; {smaze na zacátku obrazovku - aby nezustával text z predchozích aplikací}
writeln ('*********************************************************');
(* ----------cyklus repeat - until ---------*)
writeln ('Testovani cyklu repeat: ');
repeat
writeln ('Zadej kladné císlo a cyklus repeat skonci: ');
readln (cislo);
if cislo <= 0 then writeln ('Cislo ', cislo, 'neni kladne! Cyklus repeat pokracuje...'); until cislo >0;
(* -------- cyklus repeat - until konec --------*)
writeln ('stiskni cokoli a program pokracuje k testovani cyklu while');
repeat until keypressed;
{PC ceká na stisk libovolné klávesy - aby zustal videt výsledek na obrazovce}
(* --------cyklus while--------------- *)
cislo :=-100 (* quli nasledujici podmince musim nadefinovat promennou cislo jako zapornou*);
while cislo < 0 do begin writeln ('Zadej kladné císlo a cyklus while skonci: '); readln (cislo); end; (*-------- cyklus while konec -----------*) writeln ('bylo zadano kladne cislo, stiskni cokoli a program skonci'); writeln ('*********************************************************'); repeat until keypressed; {PC ceká na stisk libovolné klávesy - aby zustal videt výsledek na obrazovce} clrscr; {smaze na konci obrazovku} end.
Poznámka:
Repeat cyklus se provede alespoň jednou.
While se nemusí provést ani jednou!
While cyklus běží tak dlouho, dokud platí jeho podmínka.
Repeat se chová opačně - jakmile podmínka platí, skončí!
úterý 13. října 2009
Proměnné a jejich deklarace
proměnná = místo na uložení dat
deklarace proměnných: klíčové slovo var :
příklad:
var Radek, Sloupec : Integer;
Prumer : Real;
Integer jsou celá čísla, Real jsou reálná čísla
poznámka:
velká a malá písmenka jsou Pascalovi lhostejná, zde je uvádím pro přehlednost, piš si to jak chceš!
Čerstvě delkarovaná hodnota má počítačem náhodně vygenerovanou hodnotu, nejdřív do ní musíme vložit počáteční hodnotu!!!! Udělá to:
3.1 Přiřazovací příkaz
:=
příklad:
Radek := 4;
Sloupec := Radek + 1;
Radek := Radek + 1; -------> ve výrazu se může vyskytnout cílová proměnná!!!!
program NejvDelitel;
var A, B : Integer;
begin
Write ( 'Největší společný dělitel ' );
Write ( 'Zadejte dvě čísla ' );
Read ( A, B );
while A <> B do
if A > B then A := A - B
else B := B - A;
Write ( 'Největší společný dělitel je ', A );
end.
co by se mohlo hodit?
Borland editor pod DOSem:
CTRL + INSERT - kopíruj blok (copy)
SHIFT + INSERT - vlož blok (paste)
CTRL + KH - zruš označení bloku
ALT 60 je < ALT 62 je >
cvičení:
Jak to dopadne, zadáš-li zápornou hodnotu proměnných A a B? Napiš sledovací tabulku pro použité proměnné!
Vytvoř test, zda-li je opravdu zadáváno kladné číslo a program takto uprav!
řešení:
Největší dělitel - verze obrněná proti idiotským vstupům
pro úspěšné řešení neumíš jedinou věc - ABS(A) je absolutní hodnota čísla A!
deklarace proměnných: klíčové slovo var
příklad:
var Radek, Sloupec : Integer;
Prumer : Real;
Integer jsou celá čísla, Real jsou reálná čísla
poznámka:
velká a malá písmenka jsou Pascalovi lhostejná, zde je uvádím pro přehlednost, piš si to jak chceš!
Čerstvě delkarovaná hodnota má počítačem náhodně vygenerovanou hodnotu, nejdřív do ní musíme vložit počáteční hodnotu!!!! Udělá to:
3.1 Přiřazovací příkaz
příklad:
Radek := 4;
Sloupec := Radek + 1;
Radek := Radek + 1; -------> ve výrazu se může vyskytnout cílová proměnná!!!!
program NejvDelitel;
var A, B : Integer;
begin
Write ( 'Největší společný dělitel ' );
Write ( 'Zadejte dvě čísla ' );
Read ( A, B );
while A <> B do
if A > B then A := A - B
else B := B - A;
Write ( 'Největší společný dělitel je ', A );
end.
co by se mohlo hodit?
Borland editor pod DOSem:
CTRL + INSERT - kopíruj blok (copy)
SHIFT + INSERT - vlož blok (paste)
CTRL + KH - zruš označení bloku
ALT 60 je < ALT 62 je >
cvičení:
Jak to dopadne, zadáš-li zápornou hodnotu proměnných A a B? Napiš sledovací tabulku pro použité proměnné!
Vytvoř test, zda-li je opravdu zadáváno kladné číslo a program takto uprav!
řešení:
Největší dělitel - verze obrněná proti idiotským vstupům
pro úspěšné řešení neumíš jedinou věc - ABS(A) je absolutní hodnota čísla A!
program NejvDelitel;
var A, B : Integer;
begin
Write ( 'Největší společný dělitel ' );
Write ( 'Zadejte dvě čísla ' );
Read ( A, B );
if A * B = 0 then
Writeln ( 'Nula nemá dělitele' )
else
begin
A := Abs(A);
B := Abs(B);
while A <> B do
if A > B then A := A - B
else B := B - A;
Write ( 'Největší společný dělitel je ', A );
end;
end.
pondělí 12. října 2009
První program lépe a radostněji
Když první program spustíme, tak v pohodě zadáme dvě čísla, program porovná, které je větší, větší číslo vypíše, ale ve finále skončí a my z toho nic nemáme.
Je třeba, aby program po vypsání výsledku čekla na stisk klávesy a skončil až potom. To vyřešíme řádkem obsahující trik repeat until keypressed;
program VetsiCislo ( Input, Output );
uses crt; {nutné proto, aby fungoval příkaz "repeat until keypressed"}
var A, B : Integer;
begin
Write ( 'Urceni vetsiho cisla ' );
Write ( 'Zadejte dve cisla ' );
Read ( A, B );
if A > B then
Write ( 'vetsi je ', A )
else
Write ( 'vetsi je ', B );
repeat until keypressed;
end.
Upravte tento program tak, aby řešil situaci, kdy se zadají stejná čísla!
Pokud někdo zadá z klávesnice stejná čísla, program vypíše: "čísla jsou stejná!"
Je třeba, aby program po vypsání výsledku čekla na stisk klávesy a skončil až potom. To vyřešíme řádkem obsahující trik repeat until keypressed;
program VetsiCislo ( Input, Output );
uses crt; {nutné proto, aby fungoval příkaz "repeat until keypressed"}
var A, B : Integer;
begin
Write ( 'Urceni vetsiho cisla ' );
Write ( 'Zadejte dve cisla ' );
Read ( A, B );
if A > B then
Write ( 'vetsi je ', A )
else
Write ( 'vetsi je ', B );
repeat until keypressed;
end.
Upravte tento program tak, aby řešil situaci, kdy se zadají stejná čísla!
Pokud někdo zadá z klávesnice stejná čísla, program vypíše: "čísla jsou stejná!"
První program
všimni si:
na konci (skoro) každého řádku je středník
na konci posledního řádku je tečka
begin je levá závorka
end je pravá závorka
program VetsiCislo ( Input, Output );
var A, B : Integer;
begin
Write ( 'Urceni vetsiho cisla ' );
Write ( 'Zadejte dve cisla ' );
Read ( A, B );
if A > B then
Write ( 'vetsi je ', A )
else
Write ( 'vetsi je ', B );
end.
Neštěstí tohoto programu je, že proběhne a bez varování bleskově skončí.
Lze pořešit vložením příkazu
Read (A);
před závěrečný příkaz
end.
To však není příliš elegantní...
na konci (skoro) každého řádku je středník
na konci posledního řádku je tečka
begin je levá závorka
end je pravá závorka
program VetsiCislo ( Input, Output );
var A, B : Integer;
begin
Write ( 'Urceni vetsiho cisla ' );
Write ( 'Zadejte dve cisla ' );
Read ( A, B );
if A > B then
Write ( 'vetsi je ', A )
else
Write ( 'vetsi je ', B );
end.
Neštěstí tohoto programu je, že proběhne a bez varování bleskově skončí.
Lze pořešit vložením příkazu
Read (A);
před závěrečný příkaz
end.
To však není příliš elegantní...
Přihlásit se k odběru:
Příspěvky (Atom)