Opakování příkazů - cyklus for

Často je potřeba v programech opakovat některý příkaz nebo příkazy. Pokud víme předem, kolikrát chceme příkazy opakovat, použijeme příkazy cyklu for:

Princip je jednoduchý, obecně zapsáno může být:
for promenna:= DolniMez to HorniMez do prikaz;
Proměnná, který musí být typu integer, se automaticky mění (v tomto případě roste, pokud byste potřebovali, aby klesala, pak místo to použijete downto) od hodnoty DolniMez do hodnoty HorniMez, říká se jí také řídící proměnná cyklu. Při každé změně se vykoná příkaz (chceme-li více příkazů, uzavřeme je mezi begin a end).

Konkrétní ukázka může vypadat takto:
for i := 1 to 10 do j := j + 10;
Pro hodnoty proměnné i od jedné do deseti se pokaždé proměnná j zvětší o 10, cyklus proběhne desekrát, proměnná j se zvětší celkem o 100.
Dolní a horní hodnota mohou být libovolná přirozená čísla, např.:
for i := 5 to 50 do j := j + 10;
Místo konkrétních hodnot můžeme použít i hodnoty proměnných, které jsou typu integer:
for i := a to b do j := j + 10;
Pro klesající hodnoty řídící proměnné bude zápis vypadat takto:
for i := 10 downto 5 do j := j + 10;

Násobilka

Uvedený FOR cyklus využijeme v jednoduchém projektu, ve kterém se po zadání čísla vypíše jeho malá násobilka - viz obrázek níže nebo ukázka .

Formulář na obrázku obsahuje dva Labely - Násobilka, vyber si číslo a tlačítko pro spuštění výpisu násobilky.

Pro výběr čísla je použita nová komponenta SpinEdit, kterou najdete v kategorii komponent Samples. Slouží pro jednoduchý výběr celého čísla, její základní vlastnosti jsou:
- MaxValue, MinValue - maximální a minimální hodnota
- Increment - krok o který se hodnota mění
- Value - úvodní hodnota
Ve zdroji načteme vybranou hodnotu pomocí SpinEdit.Value.

Pro vlastní výpis násobilky je použitý ListBox, který je podobný ComboBoxu (viz 6. lekce). Protože je použitý pro deset řádků, můžeme jeho velikost už v návrhu přizpůsobit. Do ListBoxu budeme přidávat řádky příkazem (metodou) ListBox.Items.Add('řetězec').

Nejprve nadefinujeme dvě proměnné - n :integer;, to bude řídící proměnná cyklu a proměnnou radek: string, do které budeme ukládat řetězec určený pro výpis do ListBoxu (nebyla by nutná,je zavedena jen pro přehlednost kódu), najděte ve zdroji sekci var a doplňte ji podle ukázky:
var
Form2: TForm2;
n: integer;
radek: string;


Nyní už je vše připraveno k programování události pro kliknutí na spouštěcí tlačítko Zobrazit násobky:

procedure TForm2.Button1Click(Sender: TObject);
begin
listbox1.Clear; {vymazání ListBoxu}
for n:=1 to 10 do
begin {opakujeme desetkrát všechny příkazy mezi tímto beginem a nejbližším endem}
radek:=(inttostr(n)+(' * ')+inttostr(spinedit1.value)+(' = ')+(inttostr(n*spinedit1.value)));
listbox1.Items.Add(radek);
end;
end;

První řádek obsahuje příkaz pro smazání BoxListu (smaže se předešlý výpis).
Dále následuje cyklus, ve kterém se desetkrát opakují dva příkazy (proto musí být uzavřené mezi begin a end):
- nejprve se do proměnné radek vloží řetězec tvořený hodnotou proměnné n (převedené na řetězec)+znak pro násobení (v apostrofech, je to text)+hodnota SpinEditu (vybrané číslo, převedené na řetězec)+rovnítko (v apostrofech)+hodnota součinu proměnné n a hodnoty SpinEditu (výsledek násobení převedený na řetězec)
- takto vytvořená proměnná radek se potom přidá do ListBoxu jako další položka
V konečném výpisu je vidět, že se skutečně hodnota řídící proměnné n měnila od 1 do 10.

Aplikaci ukládej do složky s názvem lekce9.

Úkoly:

Základní úloha:

Vytvoř Násobilku podle textu lekce (viz ukázka). Uprav ji tak, aby bylo možné volit čísla od 1 do 20 (velká násobilka).


Úloha na plus:

Doplň základní úlohu o možnost zvolit kolikátým násobkem bude výpis začínat a kolikátým končit.


Úloha na jedničku:

Vytvořte aplikaci pro výpočet složeného úrokování. Bude se zadávat vložená částka, úroková sazba a počet let, pro které se budou úspory vypočítávat. Tisknout se má průběh změn částky na účtu v každém roce. Zkuste zjistit zhruba, jak velký by musel být úrok, aby se vložená částka během deseti let zdvojnásobila.


Úloha pro experty:

Hodnotě Ludolfova čísla se lze přibližovat (tzv. aproximace) určováním hodnoty nekonečné řady
4.(1 - 1/3 + 1/5 - 1/7 + 1/9 - ....)
Napište aplikaci, která spočte hodnotu výrazu pro zvolený počet členů této řady.