HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Variációt kalkuláló komponens készítése


Példaprogram letöltése

5261 bájt

Készítünk egy komponenst, amely a kombinatorikai, ismétléses és ismétlés nélküli variációk használatához nyújt segítséget. A komponens képes elvégezni a variációk számának meghatározását, de arra is lehetőséget nyújt, hogy a teljes variáció listát egy TXT formátumú állományba elmentsük. A létrejövő állományban minden egyes lehetséges variáció külön sorban szerepel.

A mellékelt példaprogram megnyitása előtt a Variation.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Ha n elem közül k elemet kell kiválasztanunk úgy, hogy minden elemet legfeljebb egyszer választunk ki, és a sorrendre is tekintettel vagyunk, akkor n elem k-adosztályú, ismétlés nélküli variációit kapjuk. A variációk száma: n!/(n-k)!.
Ha a kiválasztás során visszatevéssel járunk el (azaz minden kivétel után visszatesszük a húzott elemet), akkor ismétléses variációról beszélünk. A variációk száma ebben az esetben: n^k.
A használható elemeket a komponens Items tulajdonságában adhatjuk meg. A Level property-ben adhatjuk meg a húzandó elemek számát. Ha a Repetable tulajdonság értékét igazra állítjuk, akkor ismétléses, egyébként ismétlés nélküli variációt kalkulálunk.
Az Execute metódus meghívásával, a FileName property-ben megadott TXT típusú állományban létrejön a kalkuláció. Minden egyes kalkuláció külön sorba kerül. Az állomány utolsó sora a variációk számát tartalmazza.
Ha csak egy számítást akarunk elvégezni, és nem vagyunk kíváncsiak a részletekre, csak az eredményre, akkor használhatjuk az alábbi függvényeket.
function GetVariations(Items, Level: Byte): Extended;
function GetRepVariations(Items, Level: Byte): Extended;
Az első az ismétlés nélküli, a második az ismétléses variációk kiszámolására szolgál. Az Items paraméterben adhatjuk meg az elemek számát, a Level paraméterben pedig a húzandó elemek számát.
Komponensünket a TComponent osztályból származtatjuk.
A GetVariations és GetRepVariations metódusokban nincs más dolgunk, mint a megfelelő képletek alapján elvégezni a számításokat.
Az Execute metódusban létre kell hoznunk a FileName property-ben megadott állományt. Az állományt globális változóként deklaráltuk, szövegfájlként.
A variációk kalkulálását a Count függvény végzi el, rekurzív módon. A függvény kezdeti értékét az Execute metódusban kell beállítanunk.
procedure TVariation.Count(List: TStringList; ILevel: Integer; s: String);
var
  i: Integer;
  l: TStringList;
A függvény List paramétere tartalmazza az aktuálisan rendelkezésre álló elemeket. Az ILevel paraméter a rekurzió szintjét adja vissza. Az s paraméter tartalmazza az eddig meghatározott elemeket, vesszővel elválasztva.
A függvény működését két logikai egységre kell bontanunk.
if ILevel=FLevel then begin
  for i:=0 to List.Count-1 do begin
    WriteLn(f,s+List[i]);
    FRows:=FRows+1;
  end;
end
Ha az ILevel értéke megegyezik a Level property-ben megadott értékkel, az azt jelenti, hogy a kalkuláció utolsó eleménél járunk, így a kalkulált elemet el kell mentenünk a megadott állományba.
Ha ez a feltétel nem teljesül, akkor a függvényt újra meg kell hívnunk, rekurzív módon.
else begin
  for i:=0 to List.Count-1 do begin
    if ILevel=1 then s:='';
    l.Assign(List);
    if not FRepetable then
      l.Delete(i);
    Count(l,ILevel+1,s+List[i]+',');
  end;
end;
A rekurzió során, ha ismétlés nélküli variációt számolunk, ki kell vennünk az éppen felhasznált elemet a listából. Ehhez az l segédobjektumot használjuk. Az új függvényhíváskor a felhasznált elem már nem létezik a List objektumban.

Cikksorozat

#IDKategóriaCikk címeSorozat
2535C#Oracle adatbázis-elérés alapjai1. rész
2546C#SQL utasítások végrehajtása2. rész
2557C#Tárolt eljárások és függvények fejlesztése3. rész
2565C#Csomagok fejlesztése4. rész
2573C#Adatbázis triggerek fejlesztése5. rész
2581C#Kivételek kezelése PL/SQL-ben6. rész
3276C#Kurzorok deklarálása PL/SQL-ben7. rész
3297C#Tömb adattípus létrehozása és kezelése PL/SQL-ben8. rész
3326C#Adatbevitel tömb-adattípussal rendelkező oszlopokba9. rész
3357C#Adattárolás beágyazott tábla-típusú oszlopokban10. rész
3388C#Adatok beszúrása beágyazott táblákba11. rész
3418C#Index létrehozása PL/SQL-ben12. rész
3444C#Szekvenciák használata13. rész
3488C#Adatok betöltése állományokból14. rész
1765DelphiOracle adatbázis-elérés alapjai15. rész
1774DelphiSQL utasítások végrehajtása16. rész
1784DelphiTárolt eljárások és függvények fejlesztése17. rész
1794DelphiCsomagok fejlesztése18. rész
1803DelphiAdatbázis triggerek fejlesztése19. rész
1815DelphiKivételek kezelése PL/SQL-ben20. rész
3256DelphiKurzorok deklarálása PL/SQL-ben21. rész
3287DelphiTömb adattípus létrehozása és kezelése PL/SQL-ben22. rész
3318DelphiAdatbevitel tömb-adattípussal rendelkező oszlopokba23. rész
3348DelphiAdattárolás beágyazott tábla típusú oszlopokban24. rész
3377DelphiAdatok beszúrása beágyazott táblákba25. rész
3408DelphiIndex létrehozása PL/SQL-ben26. rész
3436DelphiSzekvenciák használata27. rész
3467DelphiAdatok betöltése állományokból28. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 84. 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 |