19 - Lottósorsolás

Programozás C nyelven.
Feladatok, magyarázatok, linkek, könyvek, minden, ami a C programozással kapcsolatos.
Avatar
S-kami
Adminisztrátor
Hozzászólások: 1037
Csatlakozott: 2014.04.16. 12:54
Kapcsolat:

19 - Lottósorsolás

Hozzászólás Szerző: S-kami » 2019.05.24. 11:01

Most egy olyan példa proramot készítettem, amit egy kicsit összetettebb példának szánok és elsősorban tanulmányozni, beszélgetni róla és nem elrettentő példának. :mrgreen: :mrgreen: :mrgreen:
Még csak érintettük ugyan a tömböket, de ezzel a programmal talán kicsit jobban látható, hogyan is lehet a külön-külön már megtanult dolgokat összerakni.

A program sorsol 5 véletlenszerű számot, majd megvizsgálja, hogy volt e már, ha volt, akkor húz másik számot, majd sorbarendezzük azokat és végül következik a kiíratás.

Kód: Egész kijelölése

/*******************************************************************************
 *                   Lottósorsolás - C nyelven
 *
 *  Lottósorsolás - véletlenszámok példa program
 *
 * Copyright (C) 2019 skamilinux.hu
 ******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h> //a random számokhoz kell

int main(){
    unsigned i,j,tmp,huzas,lottoszam[5];

    srand(time(0));     //enélkül a sor nélkül mindig ugyanaz a szám jönne ki
    lottoszam[0]=((rand()%90)+1);  //kap egy kezdeti értéket az első elem

    for(i=0; i<5;)
    {

        huzas=((rand()%90)+1); //kihúzzuk a számot
        for (j=0; j<i; j++) //megnézzük, hogy volt e már, ha igen, akkor újat húzunk
        {
            if(lottoszam[j]==huzas)
            {
                lottoszam[j]=((rand()%90)+1);
                i--;
            }
        }
        lottoszam[i]=huzas;
        i++;
    }
//sorbarendezés
    for (i=0; i<5; i++)
    {
        for(j=0; j<5; j++)
        {
            if(lottoszam[j]>lottoszam[j+1])
            {
                tmp=lottoszam[j];
                lottoszam[j]=lottoszam[j+1];
                lottoszam[j+1]=tmp;
            }
        }
    }


//lottoószámok kíírása
    for(i=0; i<5; i++)
    {
        printf("\n\t Az %d. lottoszam: %d \n", i+1, lottoszam[i]);
    }

    return 0;
}
Puppy linux ! Mert megérdemlem !
Gyertek fel a csetre ! Katt ide a csevegéshez: https://discord.gg/74tBqJk

Avatar
S-kami
Adminisztrátor
Hozzászólások: 1037
Csatlakozott: 2014.04.16. 12:54
Kapcsolat:

Re: 19 - Lottósorsolás

Hozzászólás Szerző: S-kami » 2019.05.24. 11:48

Egy fontos és lényeges dolog sokak számára a formázás.
Még ebben a témában szeretném megemlíteni és a későbbiekben majd komolyabban is kitérünk egy külön szálon a dologra, csak ennél a programnál már eléggé szembetűnő lesz a változás, ez pedig a kód kinézete.

Talán a mi kis programjainknál még annyira ez nem is lényeges, de érdemes rá figyelni már időben.

Nos egy kis figyelmesség után már így néz ki a regulázott, javított kódunk - hasonlítsuk össze az előző kóddal: ;)

Kód: Egész kijelölése

/*******************************************************************************
 *                   Lottósorsolás - C nyelven
 *
 *  Lottósorsolás - véletlenszámok példa program
 *
 * Copyright (C) 2019 skamilinux.hu
 ******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //a random számokhoz kell

int main() {
  unsigned i, j, tmp, huzas, lottoszam[5];

  srand(time(0)); //enélkül a sor nélkül mindig ugyanaz a szám jönne ki
  lottoszam[0] = ((rand() % 90) + 1); //kap egy kezdeti értéket az első elem

  for (i = 0; i < 5;) {

    huzas = ((rand() % 90) + 1); //kihúzzuk a számot
    for (j = 0; j < i; j++) //megnézzük, hogy volt e már, ha igen, akkor újat húzunk
    {
      if (lottoszam[j] == huzas) {
        lottoszam[j] = ((rand() % 90) + 1);
        i--;
      }
    }
    lottoszam[i] = huzas;
    i++;
  }
  //sorbarendezés
  for (i = 0; i < 5; i++) {
    for (j = 0; j < 5; j++) {
      if (lottoszam[j] > lottoszam[j + 1]) {
        tmp = lottoszam[j];
        lottoszam[j] = lottoszam[j + 1];
        lottoszam[j + 1] = tmp;
      }
    }
  }

  //lottoószámok kíírása
  for (i = 0; i < 5; i++) {
    printf("\n\t Az %d. lottoszam: %d \n", i + 1, lottoszam[i]);
  }

  return 0;
}
Mivel ez pusztán csak szematikai szempont, nem szintaktikai, így nem szabad elfelejtenünk, hogy egy C kód akár így is kinézhet:

Kód: Egész kijelölése

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){unsigned i,j,tmp,huzas,lottoszam[5];srand(time(0));lottoszam[0]=((rand()%90)+1);for(i=0;i<5;)
{huzas=((rand()%90)+1);for(j=0;j<i;j++)
{if(lottoszam[j]==huzas)
{lottoszam[j]=((rand()%90)+1);i--;}}
lottoszam[i]=huzas;i++;}
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
{if(lottoszam[j]>lottoszam[j+1])
{tmp=lottoszam[j];lottoszam[j]=lottoszam[j+1];lottoszam[j+1]=tmp;}}}
for(i=0;i<5;i++)
{printf("\n\t Az %d. lottoszam: %d \n",i+1,lottoszam[i]);}
return 0;}
Tehát az elrendezés elsősorban nekünk fotnos, hogy olvashgató, áttekinthető kódot kapjunk és nem a számítógépünknek lényeges... :mrgreen: :mrgreen: :mrgreen:
Ez ugyan csak a példa kedvéért írtam ide, de ettől még a kód tökéletesen sértetlen és működőképes, ez csak nekünk durva :lol:
Puppy linux ! Mert megérdemlem !
Gyertek fel a csetre ! Katt ide a csevegéshez: https://discord.gg/74tBqJk

Avatar
S-kami
Adminisztrátor
Hozzászólások: 1037
Csatlakozott: 2014.04.16. 12:54
Kapcsolat:

Re: 19 - Lottósorsolás

Hozzászólás Szerző: S-kami » 2019.05.25. 09:39

A hup.hu szakmai oldalon rengeteg nagyszerű komment és jótanács fogad minket, ahol többek között a lottó program saját, önálló életre kelt.
A bejegyzés és az oldal közvetlen linkje:

https://hup.hu/node/164416
Puppy linux ! Mert megérdemlem !
Gyertek fel a csetre ! Katt ide a csevegéshez: https://discord.gg/74tBqJk

Válasz küldése

Vissza: “C programozás”