Opakování a shrnutí

Po deseti lekcích nadešel čas na pozastavení, rekapitulaci a další úlohy, které se nevešly do jednotlivých lekcí.

Přehled použitých komponent

V následující tabulce jsou shrnuty všechny komponenty, které jsme v minulých lekcích použili a některé jejich zásadní vlastnosti. Jde jen o stručný přehled, využili jsme ještě řadu dalších vlastností, úplnější přehledy je možné najít v kurzech V. Kadlece nebo ABCDelphi (viz odkazy dole).
komponentahlavní použité vlastnosti a metody
Form - formulář aplikace Caption (titulek), Icon (ikona v titulku)
Label - popisek Caption (popisek)
Edit - vstupní (výstupní) řádekText , Enable (dostupnost položky)
Combobox - rozbalovací seznamItems (položky, jsou číslované od nuly, -1 ~ není vybráno)
ListBox - seznamItems, ve zdroji: ListBox.Items.Add('řetězec') - přidání položky (řádku)
RadioGroup - výběr jedné z více položekItems (položky, jsou číslované od nuly), Caption - text v záhlaví
Memo - víceřádkový textLines - řádky textu, ve zdroji: memo.lines.add('zvoleno nové číslo'); - přidání řádku
ShowMessage - hláška ve zdroji (text v apostrofech): ShowMessage('Chyba!');
Bevel - oddělovací čára Shape, Style - vlastnosti vzhledu
BitBtn - tlačítko s obrázkem Kind - předdefinované typy, Glyph - vlastní obrázek
Image - obrázek Picture - soubor s obrázkem
SpinEdit - výběr čísla Value - vybraná hodnota

Přehled programových příkazů a postupů

V tomto odstavci shrneme použité programové příkazy - jsou seřazené podle lekcí, ve kterých jsme je použili:

Application.Terminate; - ukončení aplikace
Label1.Caption:='3'; - změna popisku (text v apostrofech)
Label1.Color:=clFuchsia; - změna barvy

Typy proměnných (musí být definovány v sekci var):
integer - celá čísla (-2147483648..2147483647)
real - reálná čísla (s desetinnou čárkou, -5.0 x 10^324 .. 1.7 x 10^308),
char - znak
string - text (slovo, řetězec znaků)
boolean - logická hodnota (false, true)

slovo:=IntToStr(cislo); - převod čísla na řetězec
cislo:=StrToInt(slovo); - převod řetězce na číslo
pocet:=pocet+1; {zvětšení proměnné pocet o 1}
a:=strtoint(Edit1.text); - do proměnné a se uloží číslo z Edit1

větvení programu - if (jestliže) then (potom) příkaz else (jinak) příkaz;
příklad: if combobox1.itemindex=0 then edit3.Text:=inttostr(4*strtoint(edit1.Text));

složený příkaz - příkazy uzavřené mezi begin a end

{ ... } - komentář

Spojování podmínek logickými spojkami and (současně) or (nebo)
příklad: if (x>50) and (x<80) then ShowMessage('hodnota je v normě');

cyklus s daným počtem opakování
příklad: for i := 1 to 10 do j := j + 10;

a:=1+random(6) - do proměnné a se uloží náhodné číslo od 1 do 6
randomize; - výměna tabulky náhodných čísel

využití parametru sender (vysílač, objekt, který proceduru použil) procedur a jeho přetypování:
(sender as TLabel).color:=clred;

Projekt Statistika

K procvičení v rámci tohoto opakování vytvoříme jednoduchý statistický projekt, ve kterém budeme zadávat přirozená čísla a průběžně počítat jejich součet, průměr a určovat nejmenší ze zadaných čísel:

Jak je vidět z obrázku, projekt obsahuje jeden Edit pro zadávání čísel, tři Edity pro výstup součtu, největšího čísla a průměru, Listbox, do kterého se vypisují všechna zadaná čísla a tlačítko pro potvrzení zadaného čísla.

Pro práci budeme potřebovat více proměnných, například:
a: integer; {vložené číslo}
sum: integer; {součet}
pocet: integer;{počet vložených čísel}
min: integer;{nejmenší číslo}
prum: real; {průměr}

Jedna procedura bude na tlačítku:
procedure TForm2.Button1Click(Sender: TObject);
begin
a:=strtoint(Edit1.Text); pocet:=pocet+1;
if a<min then min:=a;
listbox1.items.Add(inttostr(pocet)+'. číslo:'+edit1.text);
sum:=sum+a; prum:=sum/pocet;
Edit2.Text:=inttostr(sum);
Edit3.Text:=inttostr(min);
Edit4.Text:=floattostr(prum);
end;

Jednotlivé řádky mají následující význam:
- do proměnné a se uloží číslo z Edit1, proměnná pocet se zvětší o 1
- jestliže je vložené číslo větší než doposud největší, uloží se do proměnné max
- do Listboxu přidej řetězec, například: 1. číslo: 58
- proměnná sum se zvětší o zadané číslo a vypočte se průměr
- v dalších řádcích se do jednotlivých editů vypíše součet, největší číslo a průměr

Pokud takto naprogramovanou proceduru vyzkoušíte, zjistíte, že se špatně určuje nejmenší číslo, pravděpodobně to bude vždy nula. Doposud jsme se totiž dost lehkovážně nestarali o to, jaká hodnota bude v proměnné po spuštění programu, uvažovali jsme, že to bude nula (například pro počítání pokusů), ale nemuselo by to tak vždy být. Tady ale navíc potřebujeme, aby v proměnné min bylo velké číslo, aby některé vložené číslo bylo vůbec menší. Je více možností jak to zajistit, můžeme využít například událost OnCreate formuláře aplikace:
procedure TForm2.FormCreate(Sender: TObject);
begin
min:=1000;
end;
Neboli už při vytvoření formuláře (pro tuto aplikaci vlastně při spuštění programu) se do proměnné min uloží číslo 1000 (to by mohlo stačit - pokud ovšem nebudete vkládat výšky svých budoucích platů-:) ).

Aplikace ukládej do složek ve složce s názvem lekce11 .

Tato lekce je speciální také svými úkoly - na rozdíl od jiných lekcí je potřeba vyřešit alespoň čtyři lehčí úlohy nebo dvě těžší nebo úlohu pro experty (nebo jednu těžší a dvě lehčí). Než se pustíte do řešení, podívejte se na ukázku řešené úlohy - většinu úloh můžete řešit podobně.

Úkoly:

Jednodušší úlohy:

1. Vytvoř projekt Trojúhelník, ve kterém se určí, zda zadaná tři čísla mohou být velikostmi stran trojúhelníka.

2. Vytvoř projekt Rozhodčí, ve kterém se zadávají známky a výsledná známka je jejich průměr, do kterého se nezapočítá největší a nejmenší známka (například pro skoky na lyžích).

3. Vytvoř projekt Kino pro výpočet ceny lístků do kina do jedné z řad, jestliže se zadá počet lístků a řada, do které jsou určené (například 6 lístků do 5. řady). Ceny jsou: 1. až 5. řada 50 Kč, 6. až 10. řada 60 Kč, 10. až 15. řada 80 Kč.

4. Vytvoř projekt Ampule pro laboratoř - budou se zadávat hmotnosti ampulí a program bude vypisovat, zda je ampule v normě (50 - 100 mg), nad nebo pod normou a zároveň počet všech ampulí v normě, nad nebo pod normou vyjádřený v procentech.

5. Známý lékařský koeficient obezity jednotlivce BMI se počítá následovně: váha (kg) lomeno druhou mocninou výšky (m). Vytvoř projekt BMI, který na základě zadané hmotnosti (kg) a výšky (m) vypíše stupeň obezity podle tohoto rozdělení (podle tabulky nalezené M. Hrochovou):
hodnoty BMI stupeň obezity
BMI<20 podváha
20<BMI<=25 ideální
25<BMI<=30 mírná nadváha
30<BMI<=40 obezita
více těžká obezita

Obtížnější úlohy:

(První dvě úlohy jsou ze soutěže PC-ák, kterou pořádá SPŠE v Pardubicích.)
1. Závod Grand Prix se jezdí na různých okruzích, jejichž délka se pohybuje mezi 3600-6000m. Při závodu se jede vždy 30 okruhů. Čas závodu se pohybuje v rozmezí 40-70min.
Zadáme délky okruhů v metrech a dosažené časy v minutách pěti závodů Grand Prix. Program kontroluje správnou hodnotu zadané délky a času, vypočte průměrnou rychlost v km/h každého závodu a vypíše, při kterém závodu bylo dosaženo nejvyšší průměrné rychlosti.

2. Program Prodej DVD
V programu jsou pevně dány názvy a ceny pěti DVD s filmy o krtečkovi. Program je vypíše. Poté zadáváme počet kusů jednotlivých DVD (můžeme zadat i nulu, ne však záporné číslo). Program vypíše celou objednávku s cenami za jednotlivé filmy nebo alespoň celkovou cenu objednaných DVD.

3. Vytvoř projekt Stáří, který určí stáří (roky a měsíce), je-li zadáno datum narození (den, měsíc, rok) a aktuální datum (den, měsíc, rok).

4. Vytvoř projekt Zkoušení, který bude děti zkoušet ze sčítání, odčítání, násobení nebo dělení podle výběru - zadá náhodný příklad a zkontroluje žákem zadaný výsledek. Na konci zkoušení provede vyhodnocení.

Úloha pro experty:

Minivrchcáby - hra pro dva hráče. Každý háže třemi kostkami, může hodit nejvýše třikrát. Po každém hodu může vybrat kostku nebo kostky, se kterými už házet nebude. Jestliže po ukončení házení má stejná čísla na dvou kostkách, získá 5 bodů, pokud má stejná čísla na všech třech kostkách, získá 10 bodů (viz ukázka ). Nápověda: poznámky od T. Skůry, 9.C, šk. rok 2006/7.