Sera,
sto lavorando su un esercizio proposto su un testo (Deitel) di cui si è già parlato sul sito e da cui ho già attinto.
L'esercizio riguarda un mazzo di carte ed è strutturato così: c'è un programma base (che basta ricopiare) e l'esercizio consiste nel modificarlo.
Il programma di base è composto dal main e due funzioni: la prima funzione mescola le carte, la seconda le distribuisce.
L'esercizio richiede di distribuire solo 5 carte e di realizzare una serie di funzioni la prima delle quali deve individuare un eventuale coppia.
Ho modificato il programma che adesso distribuisce 5 carte. Ho trovato un sistema per individuare una coppia ma NON ho realizzato una terza funzione, come da richiesta, ma ho solo modificato la seconda funzione.
Come creo una terza funzione partendo da ciò che ho creato?
Questo tutto il programma:
//Programma per mescolare e distribuire delle carte da gioco
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SUITS 4 //il numero di semi
#define FACES 13 //il numero di facce
#define CARDS 5 // il numero di carte che voglio che distribuisca
void shuffle(int wDeck[][FACES]); // prototipo per mescolare le carte
void deal(const int wDeck[][FACES], const char *wFace[], const char *wSuits[]); // prototipo per distribuire le carte (5 in questo caso)
//void couple(const char *hFace[]); // prototipo per valutare la mano
int main() {
int i;
int deck[SUITS][FACES] = {0}; // inizializzo il vettore bidimensionale di 52 elementi a 0, ogni elemento verrà poi modificato in shuffle per definire in che ordine vadano distribuite
const char *suit[SUITS] = {"Cuori", "Quadri", "Fiori", "Picche"}; //dichiaro e inizializzo i vettori dei semi
const char *face[FACES] = {"Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", //vettori di puntatori rispettivamente di 5 e 13 elementi
"Sette", "Otto", "Nove", "Dieci", "Jack", "Regina", "Re"};
srand(time(NULL)); // seme casuale
shuffle(deck); // passo il mazzo inizializzato a 0 alla funzione shuffle
deal(deck, face, suit); //passo il mazzo mescolato e i due vettori appena inizializzati alla funzione che distribuisce le carte
return 0;
}
void shuffle(int wDeck[][13]){
int card; // questo contatore serve a definire l'ordinamento delle carte
int row; //inizializzo le righe
int column; //inizializzo le colonne
for(card=1; card<=52; card++){
do{
row = rand()%SUITS; //assegno un valore casuale alle righe
column = rand()%FACES; //assegno un valore casuale alle colonne
} while(wDeck[row][column] != 0); //mi assicuro che quel particolare elemento del mazzo non sia già stato modificato
wDeck[row][column] = card; //associo a quell'elemento il numero di carta che determina quando dovrà essere pescato
}
}
void deal(const int wDeck[][13], const char *wFace[], const char *wSuit[]){
int card;
int row;
int column;
int i, j;
char *appoggioFace[6] = {"Zero", "Asso", "Due", "Tre", "Quattro", "Cinque"};
for(card=1; card<=5; card++){
for(row=0; row<=3; row++){
for(column=0; column<=12; column++){
if (wDeck[row][column]==card){ appoggioFace[card]=wFace[column]; printf("%5s of %-8s%c", wFace[column], wSuit[row], card%2 ==0 ?'\n' : '\t'); /*printf("%5s", appoggioFace[card]); */
}
}
}
}
for(i=1; i<=5;i++)
for(j=i+1; j<=5; j++)
if(appoggioFace[i]==appoggioFace[j]) printf("\n\nTrovato");
}
Queste le parti della seconda funzione create (o modificate) da me che invece dovrebbero formare una terza funzione:
char *appoggioFace[6] = {"Zero", "Asso", "Due", "Tre", "Quattro", "Cinque"};
if (wDeck[row][column]==card){ appoggioFace[card]=wFace[column]; printf("%5s of %-8s%c", wFace[column], wSuit[row], card%2 ==0 ?'\n' : '\t');
for(i=1; i<=5;i++)
for(j=i+1; j<=5; j++)
if(appoggioFace[i]==appoggioFace[j]) printf("\n\nTrovato");
Grazie