Ciao a tutti.. ho un problema con un esercizio, dovrebbe essere una cosa stupida ma non riesco a correggerlo.
il programma deve simulare un'estrazione del lotto e poi, mettiamo in caso di aver azzeccato 2 numeri nella 3° riga della matrice e uno nella 6° dovrebbe creare una lista così: INIZIO--> 3,ambo --> 6 -->singolo --> FINE
Ora.. il problema è che nella for dove scorro la matrice per vedere se ho azzeccato alcuni numeri mi da sempre come se li ho azzeccati anche se poi andando a controllare non è vero.. è da ieri che sto provando a modificare qualcosa ma non riesco a risolvere... aiutatemi se potete, grazie a tutti in anticipo..
PS: metto tutto l'esercizio...
codice:
/*Esercizio 1 [20]
Si scriva un programma lotto.c. In esso si simuli la giocata di un terno
creando un vettore di 3 elementi interi giocate i cui valori (interi da 1 a 90) vengano inseriti
da tastiera dall'utente. Si simuli l'estrazione di 5 numeri su 8 ruote riempiendo la matrice
8x5 estrazioni con numeri casuali tra 1 e 90. Se si è in grado, si faccia in modo che non
siano mai uguali tra loro sulla stessa riga, altrimenti procedere oltre.
Si visualizzi la matrice in standard output.
Si calcolino le vincite mediante una funzione vincite che, data in ingresso la matrice,
restituisca una lista concatenata contenente le vincite ottenute, i cui elementi contengano
un intero (l'indice della riga, cioè la ruota di estrazione) e una stringa (la vincita) che può
essere “singolo”, “ambo”, “terno” se la riga contiene al massimo 1, 2, o 3 numeri contenuti
nel vettore giocate. Esempio: giocate = (2,34,56)
2 14 44 55 72
4 13 22 43 55
11 23 43 44 78
1 43 67 78 90
3 33 34 56 67
7 17 34 45 89
22 24 28 67 90
12 39 51 82 84
output: (0, singolo)->(4,ambo)->(5,singolo)->NULL
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define R 8
#define C 5
int giocata [3];
int estrazioni [R][C];
struct lista {
int riga;
char *vinc;
struct lista *next;
};
typedef struct lista Lista;
Lista *vincite (Lista *);
main()
{
Lista *inizio=NULL;
srand(time(NULL));
int giocata [3];
int estrazioni [R][C];
int i,j;
for (i=0;i<3;i++)
{
do
{
printf("\nInserisci il %d numero della tua giocata: ",i+1);
scanf("%d",&giocata[i]);
} while (giocata[i]<1||giocata[i]>90);
}
printf("\n\nEstrazioni\n\n");
for (i=0;i<R;i++)
{
for (j=0;j<C;j++)
{
estrazioni[i][j]=1+rand()%90;
printf("%4d",estrazioni[i][j]);
}
printf("\n\n");
}
vincite(inizio);
fflush(stdin);
getchar();
}
Lista *vincite (Lista *inizio)
{
int x,conta=0,i,j;
Lista *p;
for (i=0;i<R;i++)
{
conta=0;
for (j=0;j<C;j++)
{
if (giocata[0]==estrazioni[i][j]) conta++;
else if (giocata[1]==estrazioni[i][j]) conta++;
else if (giocata[2]==estrazioni[i][j]) conta++;
}
switch (conta)
{
case 0:
printf("\ncase %d",conta);
break;
case 1:
printf("\ncase %d",conta);
p=(Lista*)malloc(sizeof(Lista));
p->riga=i;
p->vinc="Singolo"; /*strcpy("Singolo",p->vinc); */
p->next=inizio;
inizio=p;
break;
case 2:
printf("\ncase %d",conta);
p=(Lista*)malloc(sizeof(Lista));
p->riga=i;
p->vinc="Ambo"; /*strcpy("Ambo",p->vinc);*/
p->next=inizio;
inizio=p;
break;
printf("\ncase %d",conta);
case 3:
p=(Lista*)malloc(sizeof(Lista));
p->riga=i;
p->vinc="Terno"; /*strcpy("Terno",p->vinc);*/
p->next=inizio;
inizio=p;
break;
default:
printf("\n\nERRORE!");
printf("\nCONTA == %d",conta);
break;
}
conta=0;
}
printf("\n\n\nElenco Vincite\n\nInizio --> ");
while (inizio)
{
printf("Ruota %d,%s --> ",inizio->riga,inizio->vinc);
inizio=inizio->next;
}
printf("FINE");
}