All pastes #773799 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-11-14 20:02 UTC
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[LOTTONUM];
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);
	}

}