Proměnné a jejich typy

Proměnné využijeme ve většině programů, kdy budeme potřebovat uchovat nějakou hodnotu (číslo, písmeno, slovo) nebo s nimi v průběhu programu pracovat (provádět operace). Pro aplikace je proměnnou část paměti, do které její hodnotu ukládá. V Delphi (či Pascalu) musí být každá proměnná předem definovaná (deklarovaná), musí být určený její název a typ (co se do ní dá uložit), aby mohlo být v paměti vymezeno patřičné místo.
Deklarace proměnných začíná klíčovým slovem var (už je ve zdroji automaticky, najděte jej) a je umístěna před definicemi procedur, může vypadat například takto:
var
Form1: TForm1;
pokusy,a: integer;

Nejprve je vždy uvedený název proměnné (nebo proměnných oddělených čárkou) a za dvojtečkou její typ. Název proměnné může být písmeno nebo slovo (kromě klíčových) bez speciálních znaků, při větším počtu proměnných je rozumné volit názvy proměnných podle jejich funkce. Všimněte si, že mezi proměnnými bude vždy proměnná typu formuláře, kterou nadefinuje Delphi automaticky.
Na dalším řádku ukázky jsou definované dvě proměnné s názvy pokusy a a, obě jsou typu
integer, což jsou celá čísla (-2147483648..2147483647).
Další základní typy proměnných jsou:
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).

Existuje řada dalších typů, používaných spíš u rozáhlejších projektů, například celá čísla v menším rozsahu (např. Byte) zaberou méně paměti, což se projeví v rychlosti aplikace, to ale zatím (a ještě dlouho :-) ) nepotřebujeme.

Operace s proměnnými

Základní operací je uložení hodnoty do proměnné pomocí znaku pro přiřazení := , například:
pokusy:=5;
a:=3;
Do proměnných pokusy a a typu integer jsou uloženy konkrétní hodnoty, které se mohou měnit, nebo se s nimi mohou provádět početní operace (jde o čísla). Hodnoty proměnných jsou v paměti za běhu aplikace, po ukončení aplikace neexistují.
Operace, které lze s proměnnými provádět závisí samozřejmě na jejich typu, nejčastěji budeme pracovat s číselnými proměnnými (+ , - , * , /):
pokusy:=a - do proměnné pokusy je uložena hodnota proměnné a
pokusy:=2*a; - do proměnné pokusy je uložen dvojnásobek hodnoty proměnné a
b:=pokusy+a - do proměnné b je uložen součet proměnných pokusy a a
pokusy:=pokusy+1 - proměnná pokusy je zvětšená o 1
(Kontrolní otázka, jaké hodnoty budou nakonec ve všech proměnných, pokud se provedou všechny příkazy v tomto odstavci v uvedeném pořadí?)

Pro řetězcové proměnné má smysl operace sčítání (v ukázce jsou všechny proměnné typu string):
slovo1:='Ahoj'; slovo2:=' světe!'; (řetězce musí být zapsané v apostrofech, jinak by šlo o názvy proměnných)
pozdrav:=slovo1+slovo2; (zde už apostrofy nejsou, protože jde o názvy proměnných)
Sečtením je spojení řetězců, v proměnné pozdrav bude tedy řetězec Ahoj světe!

Další důležitou operací je převod čísla (integer) na řetězec (string) a obráceně:
Mějme definované proměnné
cislo:integer; slovo:string;
potom můžeme využít tyto operace:
slovo:=IntToStr(cislo); - funkce IntToStr převede proměnnou cislo na řetězec (tomu odpovídá i název funkce) a tento řetězec je uložen do proměnné slovo
nebo obráceně (že už víte, jaký bude název funkce :-) ):
cislo:=StrToInt(slovo); - proměnná (řetězec) slovo je převedena na číslo (pokud se skládá z číslic) a uložena do proměnné cislo

Pexesíčko - počítání

S využitím proměnných můžeme Pexesíčko z minulé lekce doplnit o počítání kolikrát bylo kliknuto (kolikrát se otočila kartička). Nejprve si podle obrázku připravíme TLabel s popiskem Počet otočení a další TLabel, do kterého se bude vypisovat počet kliknutí, zatím vložíme 0.

V dalším kroku definujeme proměnnou, do které se bude počet kliknutí ukládat. Ve zdrojovém kódu najdeme sekci var a doplníme definici proměnné pocet typu integer (celé číslo):
var
Form1: TForm1;
pocet: integer;


Nyní chceme, aby se po kliknutí na kartičku proměnná pocet zvětšila o 1 a vypsala se do připraveného TLabelu. Vybereme "kartičku" a její událost po kliknutí (OnClick) doplníme o další dva řádky. Celá bude potom vypadat takto:
procedure TForm1.Label1Click(Sender: TObject);
begin
Label1.Caption:='3';
Label1.Color:=clFuchsia;
pocet:=pocet+1; {zvětšení proměnné pocet o 1}
Label8.Caption:=IntToStr(pocet); {do Label8 nelze vypsat číslo, proto se pocet převede na řetězec}
end;
Stejným způsobem je potřeba doplnit události zbývajících "kartiček", nové řádky programu stačí ve zdroji kopírovat a vkládat (vybrat Label lze také v prvním řádku Object Inspectoru).


Aplikaci ukládej do složky s názvem lekce3

Úkoly:

Základní úloha:

Doplň aplikaci Pexesíčko podle textu lekce.


Úloha na plus:

Hledej rozdíly
Vytvoř aplikaci pro hledání rozdílů mezi dvěma skoro stejnými obrázky (viz ukázka ). Při hodnocení se uvede, kolik rozdílů "pátrač" našel a kolik mu jich uniklo. (Pro hledané Labely můžeš využít vlastnost Transparent.)


Úloha na jedničku:

Doplň úlohu na plus o možnost přejít na další obrázek. Pro nový obrázek je potřeba nový formulář (New - Form), tím se vytvoří i nová unita Unit2. V Unit1 je potřeba hned pod implementation uvést uses Unit2 (využíváme Unit2) a dále se může využít pro Form1 nebo Form2 vlastnost Visible (true, false). Podrobnější popis najdeš v ABCDelphi v kapitole Komponenta Form.