|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2013
Messaggi: 4
|
Aiuto programma in C++
Salve a tutti, sono un novizio della programmazione e vi scrivo per chiedervi aiuto riguardo un programma che ho scritto e che non ne vuole sapere di funzionare!
Il codice è questo: Codice:
#include <iostream> #include <iomanip> #include <cstdlib> #include <ctime> using namespace std; void casuale ( int [][13]); void qcasuale ( int [][13]); void ecasuale ( int [][13]); void mano ( int [][13], const char *[],const char *[]); void mano2 ( int [][13], const char *[],const char *[]); void terra (int [][13], const char *[],const char *[]); int i=0; int main() { const char *seme[4]= { "Cuori", "Quadri", "Picche", "Fiori" }; const char *faccia[13] = { "Asso", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto", "Nove","Dieci","Jack","Regina","Re"}; int mazzo[4][13]={0}; srand ( time(0)); casuale(mazzo); cout << " La mia mano è:"; mano(mazzo, faccia, seme); qcasuale(mazzo); cout << " La tua mano è:"; mano2(mazzo, faccia, seme); ecasuale(mazzo); cout << "Le carte a terra sono:"; terra (mazzo, faccia, seme); return 0; } void casuale ( int wmazzo[][13]) { int riga, colonna; for(int carta=1; carta <=2; carta++) { do{ riga= rand() % 4; colonna= rand() % 13; } while ( wmazzo[riga][colonna]!=0); wmazzo[riga][colonna]=carta; }} void qcasuale ( int qmazzo[][13]) { int qriga, qcolonna; for(int qcarta=1; qcarta <=3; qcarta++) { do{ qriga= rand() % 4; qcolonna= rand() % 13; } while ( qcarta!=2); qmazzo[qriga][qcolonna]=qcarta; }} void ecasuale ( int emazzo[][13]) { int eriga, ecolonna; for(int ecarta=1; ecarta <=5; ecarta++) { do{ eriga= rand() % 4; ecolonna= rand() % 13; } while (ecarta!=5); emazzo[eriga][ecolonna]=ecarta; }} void mano (int wmazzo[][13], const char *wfaccia[], const char *wseme[]) { for ( int carta=1; carta <=2; ++carta) for(int riga=0; riga <=3; riga++) for( int colonna=0; colonna <=13; colonna++) if (wmazzo[riga][colonna]==carta) cout << wfaccia[colonna] << " di " << wseme[riga] << endl; } void mano2 (int qmazzo[][13], const char *qfaccia[], const char *qseme[]) { for ( int qcarta=1; qcarta <=2; ++qcarta) for(int qriga=0; qriga <=3; qriga++) for( int qcolonna=0; qcolonna <=13; qcolonna++) if (qmazzo[qriga][qcolonna]==qcarta) cout << qfaccia[qcolonna] << " di " << qseme[qriga] << endl; } void terra (int emazzo[][13], const char *efaccia[], const char *eseme[]) { for ( int ecarta=1; ecarta <=5; ++ecarta) for(int eriga=0; eriga <=3; eriga++) for( int ecolonna=0; ecolonna <=13; ecolonna++) if (emazzo[eriga][ecolonna]==ecarta) cout << efaccia[ecolonna] << " di " << eseme[eriga] << endl;} Quando lo compilo non mi da alcun errore, digito ./a.out per farlo partire, si avvia ma mi risponde soltanto dicendomi le due carte della prima mano, quando bisogna passare a " mano2" resta lì, fermo, con il puntatore che lampeggia come se non avesse ancora finito il ciclo. Sapete aiutarmi? Grazie ![]() [ Non credo possa essere rilevante, ma uso Linux versione 13.04). Ultima modifica di GiuspeCar : 10-05-2013 alle 14:13. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Codice:
do{ qriga= rand() % 4; qcolonna= rand() % 13; } while ( qcarta!=2); |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: May 2013
Messaggi: 4
|
Questo l'avevo intuito, solo che non ho idea di che condizione mettere nel while per far terminare il ciclo. L'unica cosa che mi viene in mente è di " legarla" a qriga o qcolonna, solo che così facendo falserei il risultato, credo.
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Ah boh, ho solo trovato un bug, non mi sono messo di certo a studiare il codice, mi spiace.
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Il punto è: cosa vuoi realizzare in quel ciclo do-while? Cioè, perchè vuoi ripetere quelle due assegnazioni, e per quante volte vuoi farlo?
|
![]() |
![]() |
![]() |
#6 | |
Junior Member
Iscritto dal: May 2013
Messaggi: 4
|
Quote:
Il ciclo devo farlo minimo due volte nella funzione qcasuale e minimo cinque in quella ecasuale. |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
Cioè, quel ciclo si ferma se viene ripetuto 2/5 volte oppure in quale altra condizione? |
|
![]() |
![]() |
![]() |
#8 | |
Junior Member
Iscritto dal: May 2013
Messaggi: 4
|
Quote:
Quello in ecasuale è legato alle carte sul " tavolo", che sono cinque e per lo stesso discorso di prima deve ripetersi almeno cinque volte. Il problema è che non so quale e in che modo mettere una condizione all'interno di questi, e non posso farlo con for ( diktat del prof.). |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:44.