Professional Documents
Culture Documents
Obsah:
Kapitola 1 Zaname.......................................................................2
Vytvorenie a spustenie novej aplikcie .....................................................2
Viac o vvojovom prostred....................................................................2
Prv program.....................................................................................3
Typy hodnt......................................................................................5
LAZARUS
LAZARUS
- prostredie, v ktorom sa programuje v programovacom jazyku Objektov Pascal (Object
Pascal).
Kapitola 1 Zaname
Mnoh programy v sasnch operanch systmoch Windows aj Linux komunikuj s pouvateom prostrednctvom okien. Naprklad, v okne grafickho editora sa zobrazuje
ponuka (menu), papier a tlaidl s nstrojmi na kreslenie. Aj my budeme vytvra
podobn modern oknov aplikcie.
Vytvorenie a spustenie novej aplikcie
1. Spustme prostredie Lazarus.
Hlavn ponuka
Formulr
Inpektor
objektov
Okno s programom
(editor zdrojovho kdu)
LAZARUS
Komponenty s stavebn prvky, z ktorch vytvrame aplikcie. Slia na interakciu pouvatea s programom, na zadvanie vstupnch a zobrazovanie vstupnch hodnt alebo
na riadenie behu aplikcie.
Najastejie budeme pouva komponenty tlaidlo (Button), obrzok (Image), editovacie polko (Edit), textov plocha (Memo), zakrtvacie polko (CheckBox).
Formulr predstavuje budce okno naej aplikcie. Tak, ako teraz komponenty umiestnime do formulra, tak bude vyzera naa aplikcia po spusten.
Teraz vlome do formulra komponenty Button (tlaidlo) a Image (obrzok). Tlaidlom
budeme spa prkazy programu. Obrzok bude sli ako vstup programu.
HLAVIKA
TELO
LAZARUS
Poznmka: pri prci v prostred Lazarus sa v naom spustenom programe zafarb plocha
na ierno. Ak chceme, aby mal obrzok biele pozadie, musme ho zmaza:
1. Dvojklikneme do formulra (ke n program nie je spusten),
2. V okne s programom vznikne alia procedra, do ktorej vpeme prkaz:
procedure TForm1.FormCreate(Sender: Tobject);
begin
Image1.Canvas.FillRect(Image1.ClientRect);
end;
Grafick plochu budeme takto maza aj v budcnosti, ke budeme v prostred Lazarus
vytvra grafick projekty.
Komponenty, ktor vkladme do formulra dostvaj svoje jednoznan men. Naprklad
obrzok dostal meno Image1, tlaidlo Button1.
Potaov sradnicov sstava je in, ako sme boli zvyknut v matematike:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.TextOut(0, 0, 'Ahoj');
end;
Ak takto program znovu spustme, uvidme, e bod so sradnicami 0, 0 le v avom
hornom rohu obrzka. Os x-ov rastie smerom vpravo, y-ov smerom nadol. Do grafickej
plochy meme vypisova na rzne miesta aj viac textov:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.TextOut(80, 50, 'Ahoj');
Image1.Canvas.TextOut(50, 70, 'Ako sa m?');
end;
V jazyku Pascal oddeujeme dva prkazy ; (bodkoiarkou). Hoci za poslednm prkazom
je bodkoiarka zbyton, budeme ju tam psa pre prpad, e by sme chceli na koniec
tela procedry dopisova ete alie prkazy.
LAZARUS
Typy hodnt
Prv dva parametre v prkaze vpisu musia by cel sla. Tret, posledn parameter mus by text, presnejie, textov reazec. V zpisoch v programe odlime textov
reazce od sel alebo prkazov tm, e znaky textovho reazca napeme medzi apostrofy.
sla a texty s pre pota rozdielne typy dajov. S kadm vykonvame in
kony, inak s nimi manipulujeme. Preto naprklad v prkaze vpisu nememe na mieste
textovho parametra napsa slo:
nesprvne: Image1.Canvas.TextOut(0, 0, 123) ... 123 je slo
Pomocou FloatToStr zmenme desatinn slo na text z sla 0.5 vznikne '0.5'.
FloatToStr je skratka zo slov Floating point number To String = zme slo s desatinnou bodkou Na Reazec.
Aj desatinn a cel sla s dva rozdielne typy. Hodnota vrazu, v ktorom sa del pomocou /, bude vdy desatinn slo. A to aj vtedy, keby sme delili 10/2:
nesprvne: Image1.Canvas.TextOut(0, 0, IntToStr(10/2));
sprvne: Image1.Canvas.TextOut(0, 0, FloatToStr(10/2));
V jazyku Pascal sa rozliuje desatinn a celoseln delenie. Celoseln delenie sa realizuje pomocou opertora div:
vype 5: Image1.Canvas.TextOut(0, 0, IntToStr(10 div 2));
vype 3: Image1.Canvas.TextOut(0, 0, IntToStr(10 div 3));
S celoselnm delenm svis aj zvyok, ktor vznikne po delen dvoch celch sel.
Ten vieme zisti pomocou opertora mod:
vype 1: Image1.Canvas.TextOut(0, 0, IntToStr(3 mod 2));
vype 4: Image1.Canvas.TextOut(0, 0, IntToStr(14 mod 5));
V programoch tie meme pouva niektor matematick funkcie. Naprklad sqrt pota odmocninu z sla. Vsledok bude desatinn slo:
Image1.Canvas.TextOut(0, 0, FloatToStr(sqrt(64)));
Image1.Canvas.TextOut(0, 0, FloatToStr(sqrt(5*5-4*4)));
LAZARUS
LAZARUS
[100,100]
[300,200]
Prkaz m 4 parametre. S to sradnice dvoch bodov, medzi ktor sa nakresl obdnik.
Prv dve sla [100, 100] s sradnice prvho vrcholu, tretie a tvrt slo [300, 200] s
sradnice protiahlho vrcholu obdnika. Obdnik sa nakresl tak, e bude ma strany
rovnobene so stranami grafickej plochy.
tvorce tie kreslme pomocou prkazu na kreslenie obdnikov. tvorec je pecilny
prpad obdnika, ktorho strany maj zhodn dku. Naprklad tvorec, so stranou dky
100 nakreslme takto:
procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Canvas.Rectangle(50, 20, 50+100, 20+100);
end;
Parametre mu by aj vrazy, ktor sa najskr vyhodnotia.
Nakreslite:
Kruh je op pecilny prpad elipsy. Ako nakreslme kruh so stredom v bode 50, 50 a
polomerom 10? Pre prkaz Ellipse musme vypota sradnice dvoch protiahlch vrcholov tvorca, do ktorho sa elipsa vlastne u kruh, vpe.
procedure TForm1.Button3Click(Sender: Tobject);
begin
Image1.Canvas.Ellipse(50-10, 50-10, 50+10, 50+10);
end;
LAZARUS
Nakreslite:
Kreslenie seiek
seku nakreslme pomocou dvojice prkazov:
procedure TForm1.Button4Click(Sender: Tobject);
begin
Image1.Canvas.MoveTo(100, 50);
Image1.Canvas.LineTo(200, 80);
end;
Prkaz Image1.Canvas.MoveTo presunie neviditen grafick pero do zadanho bodu.
Prkaz Image1.Canvas.LineTo nakresl s grafickm perom iaru.
Farba obrysu a vplne
Pri kreslen obdnikov a kruhov meme nastavi farbu vplne (vntra) a farbu obrysu
(obvodu). Kruh so ltou vplou a ervenm obrysom nakreslme takto:
procedure TForm1.Button5Click(Sender: Tobject);
begin
Image1.Canvas.Brush.Color:=clYellow;
Image1.Canvas.Pen.Color:=clRed;
Image1.Canvas.Ellipse(10, 10, 90, 90);
end;
Vysvetlenie:
Pen.Color znamen farba pera a uruje farbu iaru, obrys tvaru
Brush.Color znamen farba tetca, ktorou sa vymauje, vypln plocha
Farba pera m vplyv aj pri kreslen seiek.
Nakreslite:
Nhodn sla
Nae programy sa zatia sprvali vemi presne vdy nakreslili rovnak tvar, pretoe
sradnice geometrickho tvaru sa nezmenili. Pozrime sa ale na tento prklad:
procedure TForm1.Button6Click(Sender: Tobject);
begin
Image1.Canvas.LineTo(Random(400), Random(300));
end;
8
LAZARUS
Obidve nhodne zvolen sla sa pouij ako sradnice bodu, do ktorho sa nakresl
seka (seka zana v bode (0,0)). Ak stlame tlaidlo druh krt, vygeneruj sa in
nhodn sla, take sa nakresl seka do inho koncovho bodu.
Parameter, ktor uvdzame pre vygenerovanie nhodnho sla udva rozsah nhodnch sel: Random(n) nhodne zvol slo spomedzi sel od 0 po n-1.
Ak sla me vypsa program?
procedure TForm1.Button7Click(Sender: Tobject);
begin
Image1.Canvas.TextOut(0, 0, IntToStr(1+Random(6)));
end;
Random(6) generuje sla od 0 po 5. Ak k vygenerovanmu slu pripotame 1,
hodnota vrazu bude v rozsahu od 1 po 6.
Ak sla sa vygeneruj?
1+random(10)
random(21)-10
Ako vygenerujete sla:
od 0 po 100
od 20 po 30
od -5 po +5?
LAZARUS
farby: Image1.Canvas.Font.Color:=clRed;
Rzne typy dajov meme chpa ako rzne mnoiny. Tie maj v jazyku Pascal svoje
pomenovanie:
cel slo je typu (je z mnoiny) Integer
farba: TColor
tlaidlo: TButton
10
LAZARUS
Kapitola 4: Premenn
Pri potan na kalkulake zvykneme pova pam kalkulaky M+ na to, aby sme do nej
odloili doasn vsledok. Neskr, ke chceme odloen hodnotu poui, vyvolme ju z
pamti pomocou tlaidla MR. Aj v programoch si budeme potrebova zapamta vsledky
vpotov, ktor neskr pouijeme. A budeme si tie musie pamta aj vea alch dajov, ktor v programe spracovvame. V programovacch jazykoch sa na tento el pouvaj premenn.
Premennou v programovan rozumieme miesto v pamti potaa:
do premennej, ie do pamovho miesta, meme daje zapsa,
posledn zapsan hodnota sa v premennej uchov, pamt sa,
zapamtan hodnotu meme neskr vyui, preta, zisti.
Vidme, e v programovan m pojem premenn in vznam, ako v matematike.
V matematike pouvame pojem premenn na oznaenie parametra alebo neznmej
hodnoty. Naprklad, dka seky je a, obsah tvorca S=a2 alebo hadme rieene rovnice
1 + x = 3. Avak premenn v matematickch vrazoch a v programoch maj spolon to,
e nm umouj popsa veobecnejie pravidl alebo platn vzahy.
V jazyku Pascal meme pouva vea premennch (ben kalkulaka m iba jedno pamov miesto M). Pred pouitm treba premenn najskr zadeklarova. Deklarcia premennej je zpis, v ktorom prezradme:
LAZARUS
kad z nich, teda aj premenn A si doke zapamta jedno ubovon cel slo
hovorme, e premenn A je typu cel slo.
A
2
B
5
Sucet
Sucet:=A+B;
A
2
B
5
Sucet
7
12
LAZARUS
Premenn X a Y nazvame loklne premenn. V pamti potaa existuj iba poas vykonvania procedry Button3Click. Aj preto prkazy z tejto procedry nedoku pouva loklnu premenn A z procedry Button2Click. Loklne premenn s viditen
iba pre prkazy tej procedry, v ktorej s deklarovan.
Vypte na nhodn miesto tieovan npis:
Tip: ak chceme, aby sa texty psali bez bieleho pozadia, vypneme vpl:
Brush.Style:=bsClear
Tento prkaz pouijeme aj vtedy, ke chceme kresli tvary bez vplne.
Premenn meme deklarova aj mimo tela procedry. Nasledujci program pota kliknutia na tlaidlo:
var N: Integer=0;
procedure TForm1.Button4Click(Sender: Tobject);
begin
N:=N+1;
Button4.Caption:=IntToStr(N);
end;
Premenn N je globlna premenn. Vhodou globlnej premennej je, e existuje a pamt si nastaven hodnotu poas behu celho programu. Globlna premenn je viditen
aj pre prkazy v procedrach, ale iba od miesta svojej deklarcie. Navye, globlnej premennej meme pri deklarcii nastavi poiaton hodnotu.
13
LAZARUS
Pouvaniu globlnych premennch sa vak sname o mono najviac vyhba. Je to preto, lebo globlne premenn s do uritej miery nebezpen do globlnej premennej
me zasahova prli vea prkazov z rznych procedr, a tak mu jej obsah neprehadnm spsobom meni.
LAZARUS
HLAVIKA
TELO
Prkaz tame: nastavuj premenn I postupne na hodnoty od 1 po 3 a vykonvaj kreslenie nhodnej seky.
Keby sme v hlavike cyklu zmenili slo 3 na 100, nakreslilo by sa 100 seiek.
Premenn I nazvame riadiacou premennou cyklu. Hodnota v premennej I sa postupne zvuje o 1. Meme to vidie aj na nasledujcom prklade, v ktorom postupne vypeme do grafickej plochy sla od 1 po 10.
procedure TForm1.Button3Click(Sender: Tobject);
var I: Integer;
begin
for I:=1 to 10 do
Image1.Canvas.TextOut(0, I*20, IntToStr(I));
end;
Kreslite na nhodn miesta sstredn krunice vyplnen
nhodnou
farbou.
Hlavika cyklu
V hlavike cyklu napeme meno riadiacej premennej, ktor sa bude postupne zvova
o hodnotu 1. Uvedieme hranice cyklu, teda poiaton hodnotu, ktor sa prirad do
riadiacej premennej a koncov hodnotu, po ktor sa bude obsah riadiacej premennej
zvova.
for premenn := poiaton to koncov do prkaz;
Ak by poiaton hodnota bola via ako koncov hodnota, prkaz z tela cyklu by sa ani
raz nevykonal.
Telo cyklu
Telo cyklu me obsahova aj viac prkazov:
procedure TForm1.Button4Click(Sender: Tobject);
var I: Integer;
begin
for I:=1 to 10 do
begin
Image1.Canvas.TextOut(0, I*20, IntToStr(I));
Image1.Canvas.TextOut(100, I*20, IntToStr(I*I));
end;
end;
15
LAZARUS
Slov begin a end funguj ako jeden zloen prkaz alebo programov ztvorky.
Oznauj skupinu prkazov,, ktor sa maj spolone opakova:
na zaiatku cyklu sa do premennej I prirad hodnota 1
vykon sa prkaz, ktor vype slo 1,
potom sa vykon prkaz, ktor vype druh mocninu sla 1,
obsah premennej I sa zv o 1, teda I=2
op sa vykon prkaz pre vpis I, teda sa vype slo 2
alej sa vykon prkaz, ktor vype druh mocninu sla, teda 4
obsah premennej I sa zvi o 1, teda I=3, at.
Nakreslite pyramdu z rznofarebnch obdnikov:
Cyklus v cykle
Ako zobrazme mal nsobilku teda tabuku s slami:
16
LAZARUS
LAZARUS
18
LAZARUS
Zloen podmienky
Doposia sme pouvali jednoduch podmienky, ktor boli
zaloen na porovnvan hodnt. Pomocou logickch opertorov, ktor poznme aj z
matematiky, meme podmienky sklada a vytvra zloen podmienky.
V jazyku Pascal pouvame opertory not, and, or:
vysvetlenie:
zpis:
prklad:
vsledok:
negcia V
not V
not (1=2)
= true
logick X a Y
X and Y
= false
logick X alebo Y
X or Y
(1=2) or (2<3)
= true
Na obrazovku vypeme vetky neprne sla do 100, ktor s deliten 7. Pre tak slo
N plat predpis, e (N mod 2<>0) and (N mod 7=0)
procedure TForm1.Button4Click(Sender: TObject);
var N, Y: Integer;
begin
Y:=0;
for N:=1 to 100 do
if (N mod 2<>0) and (N mod 7=0) then
begin
Image1.Canvas.TextOut(0, Y, IntToStr(N));
Y:=Y+20;
end;
end;
V cykle postupne skame sla N od 1 po 100. Vypeme tie, ktor maj nenulov
zvyok po delen 2, ale nulov po delen 7. Ostatn sla ns nezaujmaj, preto v
programe pouvame prkaz if bez vetvy else. V premennej Y si pamtme y-ov
sradnicu, kam vypeme vsledky.
Kreslite krky na nhodnch pozcich v kruhovej oblasti :
19
LAZARUS
LAZARUS
o sme sa nauili
Nauili sme sa zklady programovania v jazyku Pascal s tm, e sme vyuvali vvojov
prostredie Lazarus. Nauili sme sa prkazy pre kreslenie geometrickch tvarov,
vypisovanie textu alebo nastavovanie vlastnost pomocou prkazu priradenia.
Rozliovali sme rzne typy dajov: cel sla, desatinn sla, texty, logick hodnoty.
Premenn sme pouvali na to, aby si program pamtal daje, vsledky rznych
vpotov alebo poet opakovan. Okrem postupnosti prkazov sme sa nauili pouva
aj zkladn programov kontrukcie, ktormi riadime vykonvanie programu. Pomocou
cyklov for a while sme zabezpeili, aby sa v programe niekokokrt opakovane
vykonal prkaz alebo skupina prkazov. Podmienen prkaz if sme pouili pri vbere
alternatvy, ktor z prkazov sa alej vykon. Pritom sme sa snaili predvies spsob
uvaovania, teda, ako rozmame nad rieenm problmov, a ako sa k vslednmu
rieeniu dopracujeme (asto aj po malch krokoch).
Zveren projekt:
Naprogramujte projekt, v ktorom budete pomocou tlaidla a editovacieho polka
kresli obrzok lesa. Po stlaen tlaidla sa z editovacieho polka nata hodnota N a
na nhodnch pozcich sa vykresl N stromov. Korunu stromu vykresujte ako zelen
elipsu a kme ako hned obdnik. Vekosti strn vetkch obdnikov generujte
nhodne z intervalu od 30 do 70.
21
LAZARUS