Stránka o Delphi

Autor: Matěj Procházka

Poslední úpravy: 6.11.98

Tato stránka byla vytvořena jako pomůcka pro studenty třídy A2C Vyšší Odborné Školy Informačních Služeb


Seznam kapitol

Přiřazovací příkaz (:=)

var

typy proměnných

matematické operátory

Dvojice begin - end

Co je to program v Delphi?

Komponenta Edit

Co se chysta

Funkce pro převádění typů

If-then-else

Logické výrazy

Komponenta Button


Co je to program v Delphi?

Program v Delphi. Co to vlastně je? K čemu to slouží? Co jsou to Delphi? To se budu snažit zodpovědět v následujících řádkách.

Co jsou to Delphi - Delphi jsou tzv. RAD (Rapid Application Developer). Je to nástroj, kterého se využívá při tvorbě aplikací pro prostředí Windows (95,98,NT a dříve i 3.x (Delphi 1.0)). Delphi jsou založeny na využívání komponent a následného propojení mezi nimi a přiřazení specifických funkcí daným komponentám.

Komponenty jsou to, co vidíte noahoře na tlačítkovém panelu. Jsou to předdefinované objekty, které mají (většinou) nějakou vizuální reprezentaci a navíc umějí obsluhovat události, které se s nimi dějí - např stlačení myši, přetažení myši nad objekt bez změna textu v objektu. K těmto událostem je potom třeba přiřadit kód, který bude specifikovat, co se při dané události má stát. Nejčastěji definujeme kód ke stlačení tlačítka. To je pro Delphi událost. V Object Inspectoru máme nahoře dvě záložky. Properties a Events. Podívejte se do obou u všech komponent, které využíváte. Jenom proto, abyste věděli co tam tak asi může být.

Properties (vlastnosti -můj překlad) jsou hodnoty, které si můžeme u dané komponenty definovat. Například je to vlastnost Visible. Ta určuje, zda uživatel komponentu na formuláři vůbec uvidí. Je to hodnota tpu boolean .

Events (události) - zde je jenom seznam událostí.

Co vlastně "programujeme"?

To, co píšeme jako programový kód v Delphi je to , jak se budou jednotlivé události obsluhovat. Tedy, kdybychom do události OnClick u komponenty Button napsali mezi begin a end slovo

Close;

, pak při kliknutí na toto talčítko dojde k ukončení aplikace.

Co vlastně lze v Delphi naprogramovat?

V Delphi jsou naprogramované například Delphi. Vážně. Beze srandy. Nejdřív udělali jenom kus a pomocí toho kusu dodělávali ten zbytek. Můžete vytvářet aplikace, které vypadají tak profesionálně, jako ty, které používáte. Zkuste si třeba naprogramovat program, který by uměl převádět rodné číslo na datum naropzení a ještě udal pohlaví. Přidejte k tomu obrázek. Že nevíte, jak to naprogramovat? Máte svoji hlavu a máte help. Nic víc nepotřebujete!


:=

:= přiřazovací příkaz. Používá se, pokud chceme do proměnné vložit nějakou hodnotu

Př.

var a,b:integer; {vytvoří celočíselné proměnné a ,b}

begin {začátek programu}

a:=29; {do proměnné a vloží hodnotu 29}

a:=30; {do proměnné a vloží hodnotu 30 a tím přepíše původní obsah}

b:=a; {do proměnné b vloží hodnotu a (30)}

b:=b+1; {do proměnné b vloží hodnotu b zvětšenou o 1}

{hodnota b je tedy nyní 31}

end. {konec programu}


var



var příkaz pro "deklaraci" proměnných. Tím, že je deklaruje, vytvoří pro tyto proměnné v paměti místo a zároveň "řekne" programu, které identifikátory reprezentují dané proměnné

SYNTAX

var identifikátor1,identifikátor2:typ proměnné;

kde:

var klíčové slovo

identifikátor1 název proměnné

identifikátor2 nepovinný. název 2. a dalších proměnných. Od sebe jsou identifikátory odděleny čárkou

typ proměnné viz dále


For - to cyklus

Jedná se o další z velké množiny cyklů (jsou tři), které Delphi znají. Ty další jsou repeat until a while do.

Je to můj nejoblíbenější cyklus, ale je naprosto zcestné používat ho, kdekoli to jen jde.

Umožňuje přesně (pomocí celého čísla, nebo proměnné) stanovit, kolikrát proběhne. Také není třeba používat žádná počítadle.

Myslím, že nejlepší bude uvést příklad:

procedure TForm1.Button1Click(Sender: Tobject);

{program bude pocitat x-tou mocninu yadaneho cisla}

var i,vysledek,cislo,x: integer;

begin

	cislo:=StrToInt(Edit1.Text);

	x:=StrToInt(Edit2.Text);

	vysledek:=1;

	for i to x do

		vysledek:=vysledek*cislo;



	Label1.Caption:=IntToStr(vysledek);

end;


Typy proměnných

typy promněnných jsou zvláštní identifikátory, které jsou buď definované tvůrci jazyka Object Pascal, který Delphi využívají, nebo je můžeme definovat my, jako programátoři.

Definováním vlastních typů se zatím zabývat nebudu.

Zde je přehled některých používaných typů tak, jak jsou předdefinovány

integer celočíselná hodnota

real reálné číslo

string řetězec znaků (prvků typu char) tento řetězec je možné si představit jako jednorozměnrné pole, kde jednotlivé znaky jsou seřazeny a očíslovány. Každému znaku řetězce proto náleží číslo. na to je potom možné se odkazovat. mějme například řetězec

retezec='muj retez'

potom

retezec[3]='j'



retezec[6]='e'

nesmíme přitom zapomínat, že počáteční a koncové apostrofy se do řetězce nezapočítávají, zatímco mezery ANO!!!!!!!.

Operace s retezci:

Převádění řetězů- viz funkce pro převádění typů

Sčítání řetězců:

a,b,c:string

cislo:integer

a='ahoj'

b='sasku'

c='pocmaranej'

cislo=56
Vzorec Výsledek
a+b





ahojsasku
a+' '+b
ahoj sasku
a+' '+b+' '+c ahoj sasku pocmaranej
a+cislo !!!!!!!!!!!!CHYBA!!!!!!! -ruzne typy!!!!!
a+IntToStr(cislo) ahoj56










Některé funkce pro práci s řetězci:

IntToStr

Length - vrací délku řetězce

použití:

a:string

b:integer



a:='ahoj';

b:=length(a);

{b=4}

StrToInt

FloatToStr

char jeden znak - je ordinálního typu, to znamená, že můžeme určovat pořadí hodnot. To znamená např., že:

A>B

Znak je v paměti reprezentován jako číslo. Technicky je to číslo typu integer o velikosti 0-256, ke kterému ovšem počítač přistupuje jako ke znaku.

Je možné potom převádět číslo na znak a opačně pomocí fcí chr a ord

boolean logická proměnná. Obsahuje buď hodnotu True nebo False.


Funkce pro převádění typů

Funkce pro převádění typů se používají tehdy, když potřebujeme např proměnnou typu integer převést na proměnnou typu string. Základní funkce:

StrToInt používá se pro převod řetězce na celé číslo

syntax:

StrToInt(promnena1:string):integer;

Použití:

var retezec:string;



    cislo:integer;



begin



    retezec:='56';{do promnene retezec se vlozi cislo 56, ale jako



retezec}



    cislo:=StrToInt(retezec); {do promnene cislo se vlozi obsah



promnenne retezec prevedeny na cele cislo. Promnenna cislo tedy



obsahuje hodnotu 56}



end.



IntToStr

Syntax:

IntToStr(promnenna1:integer):string;

Použití:

var retezec:string;



    cislo:integer;



begin



    cislo:=56; {do promnenne cislo se vlozi hodnota 56}



    retezec:=IntToStr(cislo); {retezec='56'}



end.

FloatToStr

Syntax:

Použití:

StrToFloat

Syntax:

Použití:


Dvojice begin - end

Dvojice příkazů begin a a posloupnost příkazů mezi nimi vytváří "blok". Blok je možné použít téměř všude, kde je možné použít jeden příkaz. Zvláštní typ bloku je potom program, kde je ta zvláštnost, že po slovu end nenásleduje středník, ale tečka. Tato tečka signalizuje, že je to poslední end a dále už nic není.


Komponenta Edit

Komponenta Edit je základní možností vstupu nějakých údajů od uživatele do programu (nedatabázového, ale to až o hodně později). Na obrazovce se reprezentuje jako obdélníkové okénko, do kterého lze vpisovat údaje.

Klíčové vlastnosti

Text:string  Text je základní vlastností. Komponenty se většinou využívá pro vstup dat od uživatele.

Visible:boolean


Komponenta Button

Komponenta Button se využívá, pokud chceme, aby uživatel spustil nějakou akci. Nejspíše to bude spuštění výpočtu, opuštění programu, nebo něco podobného.

Klíčové vlastnosti

Caption:string Caption je nápis, který se objeví na grafickém znázornění tlačítka

Enabled:boolean Enabled je vlastnost, která určuje, zda bude tlačítko možno používat, či nikoli. To se potom projeví i na grafické podobě tlačítka

Klíčové události (events)

OnClick je událost, ke které dojde, jestliže uživatel "klikne" myší na tlačítku

Příklad obsluhy události: tlačítko při stisknutí ukončí program:

procedure TForm1.Button1Click(Sender: TObject);

begin

	Close;

end;


If-then-else

Konstrukce if-then-else se používá v Pascalu pro vyjádření české věty. Kdyby-tak-jinak.

Kdyby a bylo větší než b tak udělej krok A, jinak udělej krok B se zapíše jako:

if a>b then krokA else krokB;

Základní syntax příkazu je tedy následující:

If (logický výraz) then (příkaz) else (příkaz);

Program tedy pracuje následnovně:

Pokud je logický výraz vyhodnocen jako pravdivý, provede se příkaz za slovem then. Pokud je naopak vzhodnocen jako nepravdivý, provede se příkaz, následující za klíčovým slovem else.

Příkazy (oba, nebo jen jeden) mohou být nahrazeny složenými příkazy, ohraničenými begin a end. POZOR! Před slovem else nesmí být středník.!

Př.

If a>b then Edit1.Text:=' a je větší' else Edit1.Text:='b je menší

nebo rovno a';

Program tento řádek vyhodnotí tak, že porovná a a b. Pokud je a větší, vypíše , že a je větší, ale pokud není, vypíše, že b je větší nebo rovno a. Pozor na to, že opakem a>b není b>a, ale b>=a!!


Logické výrazy

Logické výrazy jsou v Pascalu celkem obvyklé:

jsou buď jednoduché

a>b

nebo složené

(a>b) and (c=d)

povšiměte si, že oba jednoduché výrazy jsou v závorkách.

Je zásadní rozdíl mezi := a =. ':=' je přiřazovací příkaz, zatímco '=' je znak rovnosti
výraz význam
'=' rovno
'>' je větší, než
'<' je menší, něž
'>=' je větší nebo rovno, než
'<=' je menší nebo rovno, než
'<>' není rovno
and a zároveň
or nebo
not ne (negace)






Příklady:

a>b

a je větší, než b
a>=b a je větší nebo rovno b
(a>b) and (c<d) a je větší než b a zároveň je c menší, něž d
(a<>0) or (a<>b) a není nula nebo a není rovno b (výraz je pravdivý pouze, pokud b=0)
Edit1.Text<>'ahoj' Edit1.Text neobsahuje retezec 'ahoj'


Matematické operátory

DELPHI (pascal) matematika
'+' plus
'-' minus
'/' děleno
'*' krát
25.5 25,5 -desetinná tečka!
div celočíselné dělení
mod zbytek po celočíselném dělení
Sqrt() odmocnina (číslo nebo proměnnou napíšeme do závorek)
Abs() Absolutní hodnota
 

Příklady:

10 mod 3=3

10/3=3.333333

10 mod 3= 1

Sqrt(4)=2

Abs(-5)=5

10+3=13

10-3=7

10*3=30


While - do cyklus

Tak, co je to cyklus. Cyklus je část programu, která se provádí, dokud je splněn nějaký logický výraz. Je tedy možné, aby se něco opakovalo několikrát. While - do cyklus nemá vlastní způsob, jak měnit hodnoty v tomto logickém výrazu a tak je nutné je měnit v těle tohoto příkazu. Výhodou (někdy nevýhodou, ale to zjistíte až později) je, že se logický výraz testuje na správnost ještě před prvním průchodem cyklu a pokud není True, cyklus je přeskočen.

While - do můžeme volně přeložit jako DOKUD platí (logický výraz) TAK DĚLEJ

syntax je tedy:

While {logicky vyraz} do

	{prikaz}

Příkladem by mohlo být třeba vypisování čísel od 1 do 10 do řetězce. Program předpokládá jeden Label pro výstup a jeden Button ke spuštění

procedure TForm1.Button1Click(Sender: Tobject);

	var cislo:integer;

	    s:string;

begin

	cislo:=1;

	while cislo<=10 do

		begin

			s:=s+IntToStr(cislo);

			cislo:=cislo+1;

		end;

	Label1.Caption:=s;

end;

Poznámka: U každého cyklu si musíte před spuštěním programu ujasnit, co cyklus dělá a zda jeho formulace nepovede k tzv. "nekonečnému cyklu", což je cyklus, který bude splňovat podmínku logického výrazu vždy. Překladač tuto chybu většinou není schopen odhalit a dojde k "zatuhnutí" počítače. Pokud se vám něco takového stane, zkuste v menu RUN v Delphi zvoli Program Reset.

Příklad nekonečného cyklu:

var a,b:integer;

begin

	a:=5;

	while a>5 do

		b:=b+1;

end;


Repeat - until cyklus

Repeat - until cyklus je cyklus, který se od while - do cyklu odlišuje především tím, že proběhne minimálně jednou. Vyplývá to z toho, že slovo repeat je na začátku, zatímco slovo until a logický výraz je na konci.

Př:

{program pro pricitani peti do hodnoty, ktera tesne prevysuje zadane cislo, ale minimalne5}

procedure TForm1.Button1Click(Sender: Tobject);

var a,b:integer ;



begin

     b:=StrToInt(Edit1.Text);

     repeat

	a:=a+5;

     until a<=b;

end;

	

	


Comming soon

Základní struktura Pascalovského programu




Příklady z programování v Delphi

Tady budou příklady, které mě napadnou. Pokud máte návrh na příklad, který by zde měl být, napište mi.


Příklad1 - součet dvou celých čísel

Předpokládám, že máme vytvořeny tři Edity a jeden Button. Edit1 a Edit2 jsou vstupy dvou čísel a Button1 obhospodařuje výpočet. Tzn. stlačením Buttonu1 dosáhneme toho, že v Editu3 se nám vypíše součet.

procedure TForm1.Button1Click(Sender: TObject);





var cislo1,cislo2,cislo3:integer {cislo 1 a 2 jsou vstupy, do cisla 3



potom budeme ukladat vysledek vypoctu}







begin



     cislo1:=StrToInt(Edit1.Text); {Edit1.text prevedeme na cislo a



vlozime do promenne cislo1}



     cislo2:=StrToInt(Edit2.Text); {To same pro Edit2}



     



     cislo3:=cislo1+cislo2; {toto je vlastni soucet. Vsimnete si



toho, ze hodnota se uklada zprava doleva}







     Edit3.Text:=IntToStr(cislo3); {cislo3 prevedeme na string a



vlozime do Edit3.Text}



end.

Doplňující úlohy:

Napište programy které:

1) vypočítají součin, rozdíl a celočíselný podíl dvou číse


Příklad2 - atritmetický průměr dvou celých čísel

Program předpokládá existenci tří komponent Edit a jedné Button. První dva Edity slouží jako vstup a poslední Edit jako výstup. Tlačítko potom slouží ke spuštění výpočtu.

procedure TForm1.Button1Click(Sender: Tobject);



var cislo1,cislo2:integer; {promenne pro vstupni cisla}

    vysledek:real; {promenna pro vystup musi byt typu real, protoze

neni jiste, ze prumer bude cele cislo}



begin

     cislo1:=StrToInt(Edit1.Text); {prvni edit prevedeme na cislo a

ulozime do promenne cislo1}

     cislo2:=StrToInt(Edit2.Text); {to same pro edit2 a cislo2}

     vysledek:=(cislo1+cislo2)/2; {provedeme vypocet}

     Edit3.Text:=IntToStr(vysledek); {prevedeme vysledek na retezec a

vypiseme na Edit3}

end.      

Napište programy, které:

1)Spočítají, která ze dvou úseček je delší. Vstupem budou čtyři body A,B,C,D - respektive jejich x-ové a y-ové souřadnice. Výstupem potom bude konstatování, která z úseček je delší nebo, že jsou obě stejně dlouhé.

Příklad 3 - porovnejte dvě čísla a vypište to větší

Příklad 4 - vypište, kolikrát je v textu otazník, kolikrát vykřičník a kolikrát tečka- text bude ukončen hvězdičkou