rendered paste body
//Tehtävä 27
//
//a) Kirjoita ohjelma, joka arpoo oikean lottorivin eli 7 numeroa
// ja 3 lisänumeroa. Mahdolliset numerot ovat 1-39.
//
//b) Kehitä ohjelmaa siten, että se pyytää käyttäjältä
// tämän rivin, tulostaa oikean rivin ja ilmoittaa,
// kuinka monta numeroa ja lisänumeroa käyttäjällä oli oikein.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// qsort()-funktion käyttämä kahden alkion vertailufunktio,
// jolle qsort() tarjoaa vertailtavien lukujen osoitteita.
// Osoittimet, jotka ottavat lukujen osoitteet vastaan, ovat
// yleiskäyttöisiä osoittimia (void*). Näille on lisäksi
// määritelty const-määre eli read-only..
#define LOTTONUM 10
#define VIIKKOJENLKM 1
int omatnumerot[9];
int vertailu(const void* eka, const void* toka);
void alustaLottokone(void);
void arvonta(unsigned numerot[], unsigned kpl);
void tulosta(unsigned* numerot, unsigned kpl);
int onjoarvottu(unsigned numerot[],int kpl,unsigned nextnum);
void lauantai(void);
int etsitty_arvo=0;
unsigned lottonumerot[LOTTONUM];
int main(int argc, char** argv)
{
int i;
int loyty=0;
int numero=0;
for (numero=0;numero<10;numero++)
{
printf("Anna 7+3 numeroa\n");
scanf("%d",&omatnumerot[numero]);
}
printf("Alustetaan lottokone..\n");
alustaLottokone();
printf("Lottokone alustettu.\nArvotaan lottonumerot..\n");
for(i=0;i<VIIKKOJENLKM;i++)
{
arvonta(lottonumerot,LOTTONUM);
qsort(lottonumerot,7,sizeof(unsigned),vertailu);
qsort(&lottonumerot[7],3,sizeof(unsigned),vertailu);
printf("Viikon %2d varsinaiset numerot: ",i+1);
tulosta(lottonumerot,7);
printf(". Ja lisanumerot: ");
tulosta(&lottonumerot[7],3);
printf("\n");
lauantai();
}
_getch();
return 0;
}
int vertailu(const void* eka, const void* toka)
{
int x, y;
// tyyppimuunnetaan epämääräiset (void) osoittimet
// kantatyyppiin int ja luetaan sen jälkeen int-arvot
// ja sijoitetaan int-apumuuttujiin x ja y vertailun
// helpottamiseksi
x = *((int*)eka);
y = *((int*)toka);
if(x<y)
return -1;
else if (x==y)
return 0;
else
return 1;
// Huom: yo if-elseif-else-rakenne voidaan ilmoittaa myös:
// return x<y ? -1 : x==y ? 0 : 1;
}
void alustaLottokone(void)
{
srand(time(NULL));
}
void arvonta(unsigned numerot[], unsigned kpl)
{
unsigned i;
unsigned nextnum;
for(i=0;i<kpl;i++)
{
nextnum = rand() % 39 + 1;
while(onjoarvottu(numerot,i,nextnum))
nextnum = rand() % 39 + 1;
numerot[i] = nextnum;
}
}
int onjoarvottu(unsigned numerot[],int kpl,unsigned nextnum)
{
int i;
for(i=0;i<kpl;i++)
{
if(numerot[i]==nextnum)
return 1;
}
return 0;
}
void tulosta(unsigned* numerot, unsigned kpl)
{
int i;
for(i=0;i<kpl;i++)
printf("%2d ",numerot[i]);
}
void lauantai(void)
{
int i=0;
int j=0;
int loyty=0;
for (j=0; j<LOTTONUM; j++)
{
etsitty_arvo=omatnumerot[j];
for (i=0; i<LOTTONUM; i++)
{
if (lottonumerot[i]==etsitty_arvo)
loyty=1;
}
if (loyty==1)
printf("%d l\x94yty, ",etsitty_arvo);
}
}