Szerző Téma: [Lottógenerátor] Random számok generálása, rendezéssel, egyezés-ellenõrzéssel  (Megtekintve 2293 alkalommal)

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
+4 Show voters
Hali!
Néha-néha elszórakozgatok újra a pawn nyelvben, mert szeretnék ráhangolódni újra, mert már elég rég óta nem szkripteltem.
Hajlamos vagyok baromságokat írni ilyenkor, itt az egyik.. Pl ez alapján adtam fel lottót tegnap a postán :D



Na meg binary number spammer a console-ba, mint a filmekben amikor megy a nagy hackelés :D
Ezt nem kívánom publikálni, mert teljesen haszontalan, viszont jól néz ki, majd akinek kell írjon pmben xD
 
Sok hasznát ennek nem veszem, de úgy gondolom hogy valaki szkriptileg is tudná használni pl egy lottószkriptben legenerálni a számokat, stb.
Használata:
 
generateLotteryNumbers(5, 90);

 
Paraméterek:
        -5: ennyi számot generálhatunk le (egyébként maximum 7 a megengedett, de könnyen átírhatjátok többre, csak a \'MAX_LOTTERY_NUMBERS\' címkéjû definíciót kell átírnotok)
        -90: tartomány - 1 és 90 közt sorsolja ki a véletlen számokat
Visszatérési érték: az 5 legenerált szám, a tartományom belüli véletlenül generált számokkal sztingben, rendezve növekvõ sorrendben.
Kommentszûz:
 
generateLotteryNumbers( hanyaslotto=5, tartomany=90 )
{
#define MAX_LOTTERY_NUMBERS 7
new
szamok[ MAX_LOTTERY_NUMBERS ], vege[128], vege_seged[16], csere_seged,
i, k, x, j, w, c
;
for(k = 0; k < hanyaslotto; k++) {
szamok[k] = random((tartomany+1) - 1) + 1;
for(c = k-1; c >= 0; c--)
{     
   if(k != 0) {     
      w = c;
      while(szamok[w++] == szamok[k]) szamok[k] = random((tartomany+1) - 1) + 1;
   }
}             
}
for( i = 0 ; i < hanyaslotto-1; i++) {
for(j = ( hanyaslotto - 1 ) ; j >= ( i + 1 ); j--) {
   if(szamok[j] < szamok[j - 1]) {     
      csere_seged = szamok[j];
      szamok[j] = szamok[j-1];
      szamok[j-1] = csere_seged;
   }
}
}
for(x = 0; x < hanyaslotto; x++) {
if( x < ( hanyaslotto - 1 ) ) format(vege_seged, sizeof vege_seged, \"%d, \", szamok
  • );

else format(vege_seged, sizeof vege_seged, \"%d\", szamok
  • );

strcat(vege, vege_seged);
}
return vege;
}

 
Íme a kód magyarázattal:
vagy
 
generateLotteryNumbers( hanyaslotto=5, tartomany=90 )
{
#define MAX_LOTTERY_NUMBERS 7 // Max ennyi számot generálhatok le
new
szamok[ MAX_LOTTERY_NUMBERS ], vege[128], vege_seged[16], csere_seged, // egyéb deklarálások
i, k, x, j, w, c // ciklusokhoz változók deklarálása
;
for(k = 0; k < hanyaslotto; k++) // Ciklust futtatok, ebben generálom a \'tartomány\' és 1 közti számokat. 5-ös lottónál: 90, 6-osnál: 45, 7-esnél: 35
{
szamok[k] = random((tartomany+1) - 1) + 1; // Generálás
for(c = k-1; c >= 0; c--) // Ciklust futtatok, itt nézem meg az egyezéseket
{   
   if(k != 0) // Az elsõnél nem kell az ellenõrzés
   {   
      w = c; // segédváltozó feltöltése \'c\' értékével
      while(szamok[w++] == szamok[k]) szamok[k] = random((tartomany+1) - 1) + 1; // Új generálása ha egyezik
   }
}      
}
for( i = 0 ; i < hanyaslotto-1; i++) // Rendezés ciklusai
{
for(j = ( hanyaslotto - 1 ) ; j >= ( i + 1 ); j--) // j = ha pl 5-ös lottó, akkor 4 lesz a j értéke. Ciklus addig amíg j >= i+1, és csökkentjük a j értékét
{
   if(szamok[j] < szamok[j - 1]) // Ja a számok[j] kissebb mint a számok[j-1] akkor cseréljük a számokat, ezáltal rendezzük azokat
   {   
      /*
         A cserét úgy kell felfogni, mint ha lenne 3 poharad, de ebbõl csak kettõ van tele.
         A bögrében sör van, a korsóban pedig tej, a harmadik pohárban pedig nincs semmi. Te fel szeretnéd cserélni úgy hogy a bögrében
         tej legyen, a korsóban pedig sör.
         A korsóból a tejet beleöntöd az üres pohárba, a bögrébõl a sört átöntöd a korsóba, a pohárból a tejet pedig bele a bögrébe.
      */
      csere_seged = szamok[j]; // Beleöntöm az üresbe a sört, ezáltal a szamok[j] \'üres\' lesz, de vigyázat, mert csak képletesen mondom, a régi értéke még megmarad.
      szamok[j] = szamok[j-1]; // Beleöntöm a \'szamok[j]\'-be a tejet, a \'szamok[j-1]\' \"üresnek\" tekinthetõ
      szamok[j-1] = csere_seged; // a pohárból átöntön a korsóba a sört. Kész is.
   }
}
}
for(x = 0; x < hanyaslotto; x++) // Ebben a ciklusban a \'vege\' stringhez csatolom a \'segéd\'eket.
{
if( x < ( hanyaslotto - 1 ) ) format(vege_seged, sizeof vege_seged, \"%d, \", szamok
  • );    // Ez arra jó, hogy nem fog a végére írni egy vesszõt a stringnek

else format(vege_seged, sizeof vege_seged, \"%d\", szamok
  • );                   // pl: 1, 2, 3, 4, 5,   helyett 1, 2, 3, 4, 5

strcat(vege, vege_seged);
}
printf(\"LOTTÓSZÁMOK: %s\", vege); // Kiíratom a számokat debugként.
return vege; // Visszatérek a formázott változóval. Használjátok egészséggel! :D
}
« Utoljára szerkesztve: 2014. február 02. - 00:15:31 írta Zharko »

0 Show voters
Érdekes dolog ez a lottó dolog, van belõle pár már, de azért adok egy pluszt amiért dolgoztál vele.
Amúgy ez így rossz:
 
random(tartomany - 1) + 1;[/quote]
Mert így a szkriptben szereplõ 90-es számot sose fogja kisorsolni.

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
+1 Show voters
Köszi, igen azt gondoltam, hogy akad pár már belõle. :D
Köszönöm a bug észrevételét is, javítva.

0 Show voters
Ezt viccnek szántad?
Hozzá adsz egyet meg kivonsz egyet, minek?
 
szamok[k] = random((tartomany+1) - 1) + 1;[/quote]
 
szamok[k] = random(tartomany) + 1;

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
+1 Show voters
Bocs, késõ volt már, fáradt voltam :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal