HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Lottó komponens készítése


Példaprogram letöltése

4554 bájt

Készítünk egy komponenst, amely egy lottójáték összes lehetséges kombinációját kikalkulálja, ismétlések nélkül. A húzható elemek halmazát és a húzott elemek számát mi állíthatjuk be. Ennek megfelelően az 5-ös és a 6-os lottó lehetséges kombinációinak kiszámolására is használható. Az eredmények egy txt állományba kerülnek. A txt állományba soronként egy kombináció kerül.

A mellékelt példaprogram megnyitása előtt a Lotto.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens használata
A komponens Items tulajdonságában kell megadnunk a húzható elemek halmazát. A tulajdonság TStringList típusú. Minden egyes húzható elemnek külön sorban kell elhelyezkednie.
A Level értékén keresztül adhatjuk meg a húzandó elemek számát. A lehetséges kombinációkat a komponens a FileName tulajdonságban megadott állományba menti el. Az állomány txt formátumú. Minden kombináció külön sorba kerül.
Ha például az 5-ös lottó kombinációira vagyunk kíváncsiak, akkor az Items tulajdonságba írjuk be a számokat 1-90-ig. A Level értékét állítsuk 5-re.
A kombinációk kiszámolásához az Execute metódust kell meghívnunk.
procedure Execute;
A kombinációk kiszámítása gépünk sebességétől függően több percig is eltarthat. A 6-os lottó esetén egy kb. 135 MB-os TXT állomány jön létre.
A komponens elkészítése
A komponenst a TComponent osztályból származtatjuk. Fel kell vennünk a tulajdonságok tárolására szolgáló változókat és metódusokat. A kombinációkat egy TextFile típusú állományba fogjuk elmenteni.
Az Execute metódusnak kell létrehoznia, majd bezárni a FileName tulajdonságban megadott állományt.
AssignFile(f,FFileName);
Rewrite(f);
Count(FItems,1,'');
WriteLn(f,'A kombinációk száma: ',FRows);
CloseFile(f);
A kombinációkat a Count függvény számítja ki.
procedure TLotto.Count(List: TStringList; ILevel: Integer; s: String);
A függvény rekurzív. A List paraméter tartalmazza az éppen aktuális értékkészletet. Az ILevel értéke adja meg azt a függvénynek, hogy éppen hányadik húzott számot generálja. Az s paraméter az előző függvényhívások által kiszámolt számok sorozatát tartalmazza.
A függvény belsejében létre kell hozni egy ideiglenes TStringList-et.
l:=TStringList.Create;
l.Assign(List);
Ha az ILevel változó értéke megegyezik a Level tulajdonságban megadott értékkel, akkor nem kell további függvényhívást végrehajtanunk. Ilyenkor ki kell írnunk az s változó tartalmát a megadott állományba, valamint növelnünk kell a beírt sorok számát tartalmazó változó értékét.
if ILevel=FLevel then begin
  for i:=0 to List.Count-1 do begin
    WriteLn(f,s+List[i]);
    Inc(FRows);
  end;
end
Ha ILevel és FLevel értéke nem egyezik, akkor egy újabb rekurzióra van szükség.
else begin
  for i:=0 to List.Count-1 do begin
    if ILevel=1 then s:='';
    l.Delete(0);
    t:=s+List[i]+',';
    Count(l,ILevel+1,t);
  end;
Az ideiglenes listából (l) ki kell törölnünk az első elemet, hiszen azt éppen most használjuk fel. A meghívott függvénynek tovább kell adnunk az eddig kikalkulált számok listáját. A függvény rekurzív hívásánál az ILevel aktuális értékénél eggyel nagyobbat kell megadnunk.

Cikksorozat

#IDKategóriaCikk címeSorozat
2668WindowsQoS - Quality of Service bemutatása1. rész
2677WindowsQoS - Quality of Service bemutatása2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 15. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |