The-Revenge
02-12-2009, 11:07
Salve, ho un problema con questo codice , è una funzione ricorsiva che dovrebbe generare numeri sparsi casualmente, da 1 a 10, con ripetizione 4 volte.
Simula in pratica il mescolamento di un mazzo di carte napoletane da 40 carte (senza contare il seme).
E' fatto per mezzo di una funzione ricorsiva e dei puntatori, ma il risultato è che a volte mi escono numeri tutti uguali, altre volte mi dice il programma ha smesso di funzionare.
Ecco il codice :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define dim 40
void genera_num(int *);
int i,k=0;
int *s;
int main(){
int A[dim];
int *s;
s=A;
for(i=0;i<40;i++){
genera_num(s);
s++;
}
for(i=0;i<40;i++)
printf("%d ",A[i]);
system("PAUSE");
return(0);
}
void genera_num(int *b){
int asso,due,tre,quattro,cinque,sei,sette,donna,cavallo,re,a;
srand(time(NULL));
a=rand()%10+1;
switch(a){
case 1:
asso++;
if(asso<5) *b=a;
else genera_num(b);
break;
case 2:
due++;
if(due<5) *b=a;
else genera_num(b);
break;
case 3:
tre++;
if(tre<5) *b=a;
else genera_num(b);
break;
case 4:
quattro++;
if(quattro<5) *b=a;
else genera_num(b);
break;
case 5:
cinque++;
if(cinque<5) *b=a;
else genera_num(b);
break;
case 6:
sei++;
if(sei<5) *b=a;
else genera_num(b);
break;
case 7:
sette++;
if(sette<5) *b=a;
else genera_num(b);
break;
case 8:
donna++;
if(donna<5) *b=a;
else genera_num(b);
break;
case 9:
cavallo++;
if(cavallo<5) *b=a;
else genera_num(b);
break;
case 10:
re++;
if(re<5) *b=a;
else genera_num(b);
break;
}
}
Simula in pratica il mescolamento di un mazzo di carte napoletane da 40 carte (senza contare il seme).
E' fatto per mezzo di una funzione ricorsiva e dei puntatori, ma il risultato è che a volte mi escono numeri tutti uguali, altre volte mi dice il programma ha smesso di funzionare.
Ecco il codice :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define dim 40
void genera_num(int *);
int i,k=0;
int *s;
int main(){
int A[dim];
int *s;
s=A;
for(i=0;i<40;i++){
genera_num(s);
s++;
}
for(i=0;i<40;i++)
printf("%d ",A[i]);
system("PAUSE");
return(0);
}
void genera_num(int *b){
int asso,due,tre,quattro,cinque,sei,sette,donna,cavallo,re,a;
srand(time(NULL));
a=rand()%10+1;
switch(a){
case 1:
asso++;
if(asso<5) *b=a;
else genera_num(b);
break;
case 2:
due++;
if(due<5) *b=a;
else genera_num(b);
break;
case 3:
tre++;
if(tre<5) *b=a;
else genera_num(b);
break;
case 4:
quattro++;
if(quattro<5) *b=a;
else genera_num(b);
break;
case 5:
cinque++;
if(cinque<5) *b=a;
else genera_num(b);
break;
case 6:
sei++;
if(sei<5) *b=a;
else genera_num(b);
break;
case 7:
sette++;
if(sette<5) *b=a;
else genera_num(b);
break;
case 8:
donna++;
if(donna<5) *b=a;
else genera_num(b);
break;
case 9:
cavallo++;
if(cavallo<5) *b=a;
else genera_num(b);
break;
case 10:
re++;
if(re<5) *b=a;
else genera_num(b);
break;
}
}