Eljött az idő, hogy végre programozzunk is egy kicsit. Az eddig megtanultakat felhasználva és némi újat is tanulva írjunk egy
programot, ami szorzási feladatokat ad a felhasználónak és számolja menniyt hibázott illetve talált el. Az összeszorzandó
számok lenyenek véletlenszerűek. Végjelre lépjen ki, nevezetesen arra, ha a felhasználó -1-et ír be eredménynek. A program
pedig ablakban jelenjen meg. Mondjuk így:
Hogyan készíthetünk ablakot? Nagyon egyszerű, megrajzoljuk speciális karakterekből. Ezeket a kararktereket az ASCII
kódjukkal írhatjuk be. Lenyomjuk a bal alt gombot majd a numpadon begépeljük a karakter kódját. Ha kíváncsi vagy arra mi
mindent tartalmaz az ASCII kódtábla és mik az egyes karakterek kódjai látogass el a
http://www.lookuptables.com/ oldalra. Szükség lesz még a karakterek
színének állítására. Erre szolgál a:
TextColor(green);
Milyen színeket adhatunk meg? Ehhez nézd meg a Pascal help-jét. Mindenesetre jó tudni, hogy szavak helyett számokat is
meg adhatunk (0-tól 15-ig). Ha már a színeknél járunk, érdemes megemlíteni, nem csak a betű színét lehet állítani, hanem a
betű hátterének a színét is.
TextBackGround(blue);
Ha szeretnénk, hogy az ekész képernyő ilyen színű legyen, töröljünk képernyőt közvetlenül utána. Következő probléma, amire nem
tudjuk a választ a véletlen számok generálása. Létezik egy függvény ami megteszi ezt nekünk.
valtozo := Random(100);
A valtozot eyenlőve tesszük egy véletlen számmal ami nulla és 99 közé esik, úgy hogy a 0 és a 99 is lehetséges érték. Magyarul
[0, 99] zárt intervallumból választ véletlenszerűen egyet. Előfordulhat egy olyan feladat amikor a véletlen számnak 20 és 30
közé kell esnie. Ilyenkor tegyük a következőt. Generáljunk egy számot 0 és 10 között, majd adjunk hozzá 20-at. Így:
valtozo := Random(10) + 20;
Ahhoz, hogy mindez működjön a program elején, vagy legalább is a szám generálás előtt be kell írni a következő sort:
Randomize;
Remélem ezzel nem lesz gond, de ha mégis, akkor írjatok e-mailt, vagy használjátok a vendégkönyvet. Most már végre mindent
tudunk, ami szükséges a program megírásához.
Természetesen én már meg is írtam és az oldal alján te is letöltheted. Most nem fogom az elejét ide bemásolni, mert feleslegesen
foglalná a helyet. Az ablak megrajzolását mindenki megtalálja a forrásban, nincs semmi különös benne, egyszerű GoToXY();- és
Write(); -ok sorozata. Kezdjük a kód tárgyalását a változókkal.
var
{ Az a szám amit a felhasználó beír. }
eredmeny : Integer;
{ Ezekben számoljuk mennyit hibázott, illetve talált el. }
talalat, hiba : Integer;
{ Szorzásban szereplő tagok. Véletlen szerű értékeket kell adni neki. }
elso_tag, masodik_tag :Integer;
{ Tartalmazza majd, hogy hány százalékát találtuk el a feladatoknak. }
siker : Real;
Nézzük a főciklust. Mivel nem tudjuk hány szorzást számol ki a felhasználó, azt sem tudjuk hányszor
kell futtatni a ciklust. Ezen oknál fogva csakis a feltételes ciklus jöhet szóba. Én az előltesztelős változatnál döntöttem, a
feltétel pedig az, hogy az eredmény változó -1 e. Lássuk tehát!
while (eredmeny <> -1) do
begin
GoToXY(57,7); Write(talalat);
GoToXY(54,9); Write(hiba);
GoToXY(24,9); Write(' ');
elso_tag := Random(100);
masodik_tag := Random(100);
GoToXY(24,9); Write(elso_tag,' * ',masodik_tag,' = ');
ReadLn(eredmeny);
If (eredmeny = elso_tag * masodik_tag) Then
begin
talalat := talalat + 1;
end
Else
begin
hiba := hiba + 1;
end;
end;
A ciklusmag első három során nincs mit magyarázni, egyszerű szövegkiírás a kívánt pozícióba. A harmadik sorban azért írok ki
szóközöket, mert oda kerül a felatad. Ha már nem először fut a ciklusunk akkor az előző iterációban szereplő feladványt le kell
törölni. Ezek után jöhet a két összeszorzandó tag generálása. A fent tárgyalt módon történik. Kiírjuk a szorzást a képernyőre
és várunk, hogy a felhasználó beírja az általa helyesnek vélt megoldást. Ha megtette, eldöntjük helyesen számolt e. Mivel lehet
eldönteni? Mi mással mint az if then else -el. Összehasonlítjuk a kapott eredményt a két szám tényleges szorzatával. Ha egyezik,
növeljük talalat változó értékét. Ha nem, akkor a hiba változóét. Ezzel véget is ért a ciklus tárgyalása.
A ciklus után még van egy feladatunk. Ki kell számolnunk a találatok és hibák arányát.
hiba := hiba - 1;
If (talalat + hiba <> 0) then
begin
siker := talalat / (talalat + hiba) * 100;
GoToXY(23, 9); Write(' ');
GoToXY(24, 9); Write(siker:0:0,'% talalat.');
end
Else
begin
GoToXY(23, 8); Write(' ');
GoToXY(24, 8); Write('Egyet azért');
GoToXY(22, 9); Write(' megprobálhattál ');
GoToXY(25,10); Write(' volna!! ');
end;
Hibából ki kell vonni egyet, hiszen a -1 végjelet mindenképp hibás eredményként könyveli el a ciklus. A nullával való osztás
hibát eredményezne, ezért egy feltétel segítségével ellenőrizzük próbált-e megfejteni legalább egy feladatot. Ha igen, kiírjuk
a képernyőre hány százalékos a teljesítménye.
Ezzel be is fejeztem ezt a leckét. Legközelebb az alprogramokról és függvényekről lesz szó.
A leckében tárgyalt program kódjat letöltheted itt!