PDA

View Full Version : [C]cosa c'è di errato?


D4rkAng3l
14-02-2005, 10:58
Questo programma viene compilato ma si impalla...che c'è di sbagliato?
/* Programma che mescola e distribuisce un mazzo di carte da gioco */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void shuffle(int [][13]);
void deal(const int[][13], const char *[], const char *[]);

int main(){

char *suit[4] = {"Cuori", "Denari", "Bastoni", "Spade"};
char *face[13] = {"Asso","Due","Tre","Quattro","Cinque","Sei","Sette","Otto","Nove","Dieci","Fante","Regina","Re"};
int mazzo[4][13] = {0}; // Dichiaro la matrice mazzo e ne azzero il contenuto

srand(time(NULL)); // Insemino la funzione rand

shuffle(mazzo); // Invoco la funzione shuffle e gli passo come argomento la matrice mazzo
deal(mazzo, face, suit); // Invoco la funzione deal per distribuire le carte e gli passo la matrice e i 2 vettori

return 0;
}

void shuffle(int wmazzo[][13]){

int carta, riga, colonna;

for(carta=1; carta<=52; carta++){

riga = rand()%4; // Seleziona casualmente una riga (un seme)
colonna = rand()%13; // Seleziona casualmente una colonna (un valore)

while(wmazzo[riga][colonna] != 0){

riga = rand()%4; // Seleziona casualmente una riga (un seme)
colonna = rand()%13; // Seleziona casualmente una colonna (un valore)
}

wmazzo[riga][colonna] = carta; // Se la posizione all'interno della matrice è 0 mettici il valore di carta
}
}

void deal(const int wMazzo[][13], const char *wFace[], const char *wSuit[]){

int carta, riga, colonna;

for(carta=1; carta<=52; carta++)
for(riga=0; riga<=12; riga++)
for(colonna=0; colonna<=3; colonna++)

if(wMazzo[riga][colonna] == carta)
printf("%5s of %-8c", wFace[riga], wSuit[colonna], carta%2==0 ? '\n':'\t');
}



Grazie

Fenomeno85
14-02-2005, 12:17
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void deal(const int wMazzo[][13], char *wFace[], char *wSuit[]){
int carta, riga, colonna;

for(carta=1; carta<=52; carta++)
for(riga=0; riga<=12; riga++)
for(colonna=0; colonna<=3; colonna++)
if(wMazzo[riga][colonna] == carta)
printf("%5s of %-8c", wFace[riga], wSuit[colonna], carta%2==0 ? '\n':'\t');
}

void shuffle(int wmazzo[][13]){
int carta, riga, colonna;
for(carta=1; carta<=52; carta++){
riga = rand()%4; // Seleziona casualmente una riga (un seme)
colonna = rand()%13; // Seleziona casualmente una colonna (un valore)
while(wmazzo[riga][colonna] != 0){
riga = rand()%4; // Seleziona casualmente una riga (un seme)
colonna = rand()%13; // Seleziona casualmente una colonna (un valore)
}
wmazzo[riga][colonna] = carta; // Se la posizione all'interno della matrice è 0 mettici il valore di carta
}
}

int main(){
char *suit[] = {"Cuori", "Denari", "Bastoni", "Spade"};
char *face[] = {"Asso","Due","Tre","Quattro","Cinque","Sei","Sette","Otto","Nove","Dieci","Fante","Regina","Re"};
int mazzo[4][13];

for (int i=0;i<4;i++){
for (int j=0;j<13;j++){
mazzo[i][j]=0;
}
}

srand(time(NULL)); // Insemino la funzione rand

shuffle(mazzo); // Invoco la funzione shuffle e gli passo come argomento la matrice mazzo
deal(mazzo, face, suit); // Invoco la funzione deal per distribuire le carte e gli passo la matrice e i 2 vettori
system ("PAUSE");
return 0;
}


si compila adesso e visualizza.

~§~ Sempre E Solo Lei ~§~

D4rkAng3l
14-02-2005, 16:22
ok, grazie...cosa c'era di sbagliato?

Fenomeno85
14-02-2005, 16:29
guarda non mi ricordo ma non so se è giusto quello che fai io ho solo messo a posto per compilarlo.

~§~ Sempre E Solo Lei ~§~

D4rkAng3l
14-02-2005, 19:12
boo a me continua a dare problemi anche con la versione che mi hai dato te...

Fenomeno85
15-02-2005, 10:14
scusa non riesci a compilarlo??

~§~ Sempre E Solo Lei ~§~

ripsk
15-02-2005, 19:45
while(wmazzo[riga][colonna] != 0)
{
riga = rand()%4;
colonna = rand()%13;
}


Prova a vedere con il debugger se esce sempre da questo loop, io aggiungerei un counter di fuga per evitare che possa rimanere lì in eteno.
Se non esce dopo es. 100 tentativi gli trovi una posizione libera cercandola sequenzialmente.