Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problemi con l' implemento del conteggio dei pioli banchi del mastermind
Forum - C/C++ - problemi con l' implemento del conteggio dei pioli banchi del mastermind

Pagine: [ 1 2 3 4 5 6 7 ] Precedente | Prossimo
Avatar
venerba mirco (Normal User)
Rookie


Messaggi: 28
Iscritto: 17/12/2015

Segnala al moderatore
Postato alle 11:37
Mercoledì, 30/12/2015
ho un problema con il blocco di codice che racchiude il conteggio dei pioli neri e bianchi.
ricordo che i pioli neri vuol dire posizione giusta e numero giusto mentre pioli bianchi vuol dire numero presente nella sequenza segreta e posizione sbagliata. il mio blocco di codice funziona solo se i numeri della sequenza segreta da indovinare sono tutti diversi perché fa un controllo con due for e scorrendo gli indici di una posizione del primo array e poi scorre tutti del secondo array e cosi via. mentre se alcuni numeri dentro alla sequenza segreta sono uguali, il conteggio mi risulta sbagliato alla fine perché controlla ogni volta dalla posizione con indice 0, ricordo che questo programma è in fase di costruzione e non ancora completato. spero di essere stato il più chiaro possibile , grazie per chi mi aiuta....


Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<ctime>
  3. #include<cstdlib>
  4.  
  5. using namespace std;
  6. main(){
  7.         srand(time(NULL));
  8.        
  9.         int q=0;//scorrere valori per pioli neri e bianchi
  10.         int piolineri;//colore giusto, posizione giusto
  11.         int piolibianchi;//colore giusto, posizione sbagliata
  12.         char a[36];//varie sequenze
  13.         char b[36];//piolineri e binachi
  14.         int combinazione;//sequenza data dall utente
  15.         int c[4];//combinazioneda indovinare
  16.         int i=0;//indice array
  17.         int migliaia=0, centinaia=0, decine=0, unita=0;
  18.        
  19.         //sequenza pc
  20.         for(int z=0; z<=3; ++z){
  21.                 c[z]=rand()%6+1;
  22.         }
  23.         for(int z=0; z<=3; ++z){
  24.                 cout<<c[z];
  25.         }
  26.         cout<<endl;
  27.        
  28.         //azzeramento
  29.                 for(int z=0; z<=35; ++z){
  30.                         a[z]=32;
  31.                 }
  32.                 for(int z=0; z<=35; ++z){
  33.                         b[z]=32;
  34.                 }
  35.        
  36.         for(int y=0; y<=8; ++y){
  37.                
  38.                 //azzeramento variabili
  39.                 piolineri=0;
  40.                 piolibianchi=0;
  41.        
  42.                 //stampo dell array
  43.                 cout<<"+-----+-----+"<<endl;
  44.                 cout<<"|  "<<b[0]<<"  |  "<<b[1]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  45.                 cout<<"+-----+-----+     "<<a[0]<<"     |     "<<a[1]<<"     |     "<<a[2]<<"     |     "<<a[3]<<"     |"<<endl;
  46.                 cout<<"|  "<<b[2]<<"  |  "<<b[3]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  47.                 cout<<"+-----+-----+"<<endl;
  48.                 cout<<"+-----+-----+"<<endl;
  49.                 cout<<"|  "<<b[4]<<"  |  "<<b[5]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  50.                 cout<<"+-----+-----+     "<<a[4]<<"     |     "<<a[5]<<"     |     "<<a[6]<<"     |     "<<a[7]<<"     |"<<endl;
  51.                 cout<<"|  "<<b[6]<<"  |  "<<b[7]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  52.                 cout<<"+-----+-----+"<<endl;
  53.                 cout<<"+-----+-----+"<<endl;
  54.                 cout<<"|  "<<b[8]<<"  |  "<<b[9]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  55.                 cout<<"+-----+-----+     "<<a[8]<<"     |     "<<a[9]<<"     |     "<<a[10]<<"     |     "<<a[11]<<"     |"<<endl;
  56.                 cout<<"|  "<<b[10]<<"  |  "<<b[11]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  57.                 cout<<"+-----+-----+"<<endl;
  58.                 cout<<"+-----+-----+"<<endl;
  59.                 cout<<"|  "<<b[12]<<"  |  "<<b[13]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  60.                 cout<<"+-----+-----+     "<<a[12]<<"     |     "<<a[13]<<"     |     "<<a[14]<<"     |     "<<a[15]<<"     |"<<endl;
  61.                 cout<<"|  "<<b[14]<<"  |  "<<b[15]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  62.                 cout<<"+-----+-----+"<<endl;cout<<"+-----+-----+"<<endl;
  63.                 cout<<"|  "<<b[16]<<"  |  "<<b[17]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  64.                 cout<<"+-----+-----+     "<<a[16]<<"     |     "<<a[17]<<"     |     "<<a[18]<<"     |     "<<a[19]<<"     |"<<endl;
  65.                 cout<<"|  "<<b[18]<<"  |  "<<b[19]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  66.                 cout<<"+-----+-----+"<<endl;
  67.                 cout<<"+-----+-----+"<<endl;
  68.                 cout<<"|  "<<b[20]<<"  |  "<<b[21]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  69.                 cout<<"+-----+-----+     "<<a[20]<<"     |     "<<a[21]<<"     |     "<<a[22]<<"     |     "<<a[23]<<"     |"<<endl;
  70.                 cout<<"|  "<<b[22]<<"  |  "<<b[23]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  71.                 cout<<"+-----+-----+"<<endl;
  72.                 cout<<"+-----+-----+"<<endl;
  73.                 cout<<"|  "<<b[24]<<"  |  "<<b[25]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  74.                 cout<<"+-----+-----+     "<<a[24]<<"     |     "<<a[25]<<"     |     "<<a[26]<<"     |     "<<a[27]<<"     |"<<endl;
  75.                 cout<<"|  "<<b[26]<<"  |  "<<b[27]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  76.                 cout<<"+-----+-----+"<<endl;
  77.                 cout<<"+-----+-----+"<<endl;
  78.                 cout<<"|  "<<b[28]<<"  |  "<<b[29]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  79.                 cout<<"+-----+-----+     "<<a[28]<<"     |     "<<a[29]<<"     |     "<<a[30]<<"     |     "<<a[31]<<"     |"<<endl;
  80.                 cout<<"|  "<<b[30]<<"  |  "<<b[31]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  81.                 cout<<"+-----+-----+"<<endl;
  82.                 cout<<"+-----+-----+"<<endl;
  83.                 cout<<"|  "<<b[32]<<"  |  "<<b[33]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  84.                 cout<<"+-----+-----+     "<<a[32]<<"     |     "<<a[33]<<"     |     "<<a[34]<<"     |     "<<a[35]<<"     |"<<endl;
  85.                 cout<<"|  "<<b[34]<<"  |  "<<b[35]<<"  |-----------+-----------+-----------+-----------+"<<endl;
  86.                 cout<<"+-----+-----+"<<endl;
  87.                
  88.                 ///migliaia centinaia decine unita
  89.                 cin>>combinazione;
  90.                 migliaia=combinazione/1000;
  91.                 centinaia=(combinazione-migliaia*1000)/100;
  92.                 decine=(combinazione-migliaia*1000-centinaia*100)/10;
  93.                 unita=combinazione-migliaia*1000-centinaia*100-decine*10;
  94.                
  95.                 //codice ascii
  96.                 migliaia+=48;
  97.                 centinaia+=48;
  98.                 decine+=48;
  99.                 unita+=48;
  100.                
  101.                 //array
  102.                 a[i]=migliaia;
  103.                 a[++i]=centinaia;
  104.                 a[++i]=decine;
  105.                 a[++i]=unita;
  106.                 i++;
  107.                
  108.                 //pioli neri e bianchi
  109.                 {
  110.                         int s=0;
  111.                         for(int z=0; z<=3; ++z){
  112.                                
  113.                                 if(a[q]-48==c[s]){
  114.                                         piolineri++;
  115.                                 }
  116.                                 else{
  117.                                         for(int g=0; g<=3; ++g){
  118.                                                 if((a[q]-48)==c[g]){
  119.                                                         piolibianchi++;
  120.                                                         break;
  121.                                                 }
  122.                                         }
  123.                                 }
  124.                                 ++q;
  125.                                 ++s;
  126.                         }
  127.                 }
  128.                
  129.                 //output quantita pioli neri e bianchi
  130.                 cout<<"pioli neri= "<<piolineri<<endl;
  131.                 cout<<"pioli bianchi= "<<piolibianchi;
  132.  
  133.                 system("pause");
  134.                 system("cls");
  135.         }
  136.         system("pause");
  137. }


Ultima modifica effettuata da venerba mirco il 30/12/2015 alle 23:17


venerba mirco
PM Quote
Avatar
Template (Member)
Pro


Messaggi: 175
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 9:17
Giovedì, 31/12/2015
Tu mi credi, se ti dico che non ho capito una sillaba di quello che hai scritto (e che, di conseguenza, non ho capito neanche il senso del tuo codice - il quale tra l'altro è scritto con una sintassi pessima)? :rofl:

Seriamente:

- Quello che hai scritto (e non mi riferisco al codice) è pieno di errori... povero italiano 8-|
- Non capisco il senso del codice dalla riga 27 alla riga 107
- Ti piacciono molto gli incrementi prefissi, vedo... peccato che siano una fonte incredibile di errori (se è questo il tuo caso, non posso purtroppo dirtelo: prima, dovrei capire il senso del tuo codice)

Forse mi sbaglio, ma guardando il tuo elaborato ho l'impressione che tu ti sia complicato inutilmente il lavoro ponendoti problemi che non c'erano ed implementando malissimo le relative soluzioni... potresti commentarmi dettagliatamente i singoli blocchi di codice?


"Nel curriculum scrivete quello che sapete fare... e anche quello che non sapete fare! Tipo: "Già vescovo di Cracovia, partecipai alla Coppa America, vincendola!""
[...]
"Sto giocando al piccolo Dio e mi sta venendo pure alla grande."
PM Quote
Avatar
venerba mirco (Normal User)
Rookie


Messaggi: 28
Iscritto: 17/12/2015

Segnala al moderatore
Postato alle 13:20
Giovedì, 31/12/2015
scusa se non sono stato abbastanza chiaro, qui allego il file cpp commentato e prova ad eseguirlo inserendo una combinazione di quattro numeri uguali e vedi subito l' errore nell conteggio dei pioli bianchi, comunque la prima parte del codice che non capisci, con azzeramento dell array mi riferisco ad impostare ogni posizione al codice ascii 32 che indica lo spazio per impostare vuota quella posizione quando non è usata nel campo da gioco.
poi con STAMPO dell'array usando cout mi stampo una semplice griglia di gioco, molto facile senza l' uso di librerie grafiche.
poi con decine unita centinaia e migliaia , usando delle divisioni estraggo dalla sequenza dei quattro numeri dati dall' utente le migliaia centinaia decine e unita.
poi essendo variabili di tipi char, con codice ascii, trasformo i valori ottenuti in centinaia unita decine e migliaia , aggiungendo 48 in codice ascii.
poi con array inserisco le variabili migliaia decine unita centinaia in posizioni crescenti e definite dell' array, comunque provandolo ad eseguirlo, inserendo una combinazione di 4 numeri uguali , sul conteggio che viene stampato alla fine dei pioli bianchi c' è un evidente problema, perché la somma tra pioli neri e bianchi deve dare un numero minore o uguale a 4. grazie se mi aiutate


venerba mirco ha allegato un file: mastermind.zip (445398 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da venerba mirco il 31/12/2015 alle 13:22


venerba mirco
PM Quote
Avatar
Template (Member)
Pro


Messaggi: 175
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 17:03
Giovedì, 31/12/2015
Avevo visto giusto: ti sei complicato la vita.
Non c'è bisogno di giocare con i codici ASCII o di inventarsi algoritmi assurdi per le divisioni in cifre (a che ti servono, poi?) per creare una versione console utilizzabile di Mastermind... basta decidere come vuoi rappresentare i colori del codice da indovinare (per esempio, interi da 1 a 6) ed i pioli (per esempio, 0 per il bianco ed 1 per il nero), costruire una ricorsione per i 9 turni consentiti, inserirci il ciclo di verifica ed il gioco è fatto!

Questa è una possibile soluzione, banalissima:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5.  
  6. typedef enum { GIALLO = 1, VERDE, BLU, ROSSO, ROSA, ARANCIONE } colori_codice; /*Codifica dei colori "indovinabili"*/
  7. typedef enum{ BIANCO, NERO } colori_pioli; /*Codifica dei colori dei pioli*/
  8. typedef enum{ FALSE, TRUE } boolean; /*Definizione rapida di un sostituto di tipo booleano*/
  9.  
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13.         int griglia[9][4], i, j, k, n_turni; /*Griglia di gioco, indici di scorrimento e contatore dei turni giocati*/
  14.         colori_codice codice[4], col; /*Codice da indovinare e variabile per l'input dei colori da tastiera*/
  15.         colori_pioli pioli[9][4]; /*Mappa dei pioli bianchi e neri, in corrispondenza con la griglia: ad ogni sua riga corrisponde una riga della griglia*/
  16.         boolean finito; /*Indicatore di fine partita*/
  17.  
  18.         /*Generazione del codice da indovinare*/
  19.         srand((int) time(NULL));
  20.         for (i = 0; i < 4; i++)
  21.                 codice[i] = (rand() % 6) + 1;
  22.  
  23.         /*Inizializzazione della mappa dei pioli con un valore simbolico indicante la cella vuota*/
  24.         for (i = 0; i < 9; i++)
  25.                 for (j = 0; j < 4; j++)
  26.                         pioli[i][j] = -1;
  27.  
  28.         /*Altre inizializzazioni*/
  29.         n_turni = 0;
  30.         i = 0;
  31.         finito = FALSE;
  32.  
  33.         while (i < 9 && !finito) /*Ciclo di gioco*/
  34.         {
  35.                 /*Input della proposta dell'utente*/
  36.                 printf("Inserire proposta codice\n(GIALLO = 1, VERDE = 2, BLU = 3, ROSSO = 4, ROSA = 5, ARANCIONE = 6): ");
  37.                 for (j = 0; j < 4; j++)
  38.                 {
  39.                         scanf("%d", &col);
  40.                         if (col > ARANCIONE)
  41.                                 printf("Colore non valido.\n");
  42.                         griglia[i][j] = col;
  43.                 }
  44.                 n_turni++;
  45.  
  46.                 /*Verifica della soluzione propoosta*/
  47.                 for (j = 0; j < 4; j++)
  48.                 {
  49.                         if (griglia[i][j] != codice[j]) /*Caso dei pioli bianchi e delle celle vuote...*/
  50.                         {
  51.                                 for (k = 0; k < 4; k++) /*Scansione della soluzione precalcolata per vedere se il colore proposto si trova da qualche parte*/
  52.                                 {
  53.                                         if (griglia[i][j] == codice[k])
  54.                                                 if (pioli[i][j] == -1)
  55.                                                 {
  56.                                                         pioli[i][j] = BIANCO;
  57.                                                         break;
  58.                                                 }
  59.                                 }
  60.                         }
  61.                         else /*Caso dei pioli neri*/
  62.                                 pioli[i][j] = NERO;
  63.                 }
  64.  
  65.                 /*Stampa della parte di griglia già riempita*/
  66.                 printf("\n");
  67.                 for (j = 0; j < n_turni; j++)
  68.                         printf("|%2d|%2d|%2d|%2d|  |%2d|%2d|%2d|%2d|\n", pioli[j][0], pioli[j][1], pioli[j][2], pioli[j][3], griglia[j][0], griglia[j][1], griglia[j][2], griglia[j][3]);
  69.                 printf("\n");
  70.  
  71.                 /*Verifica della fine della partita (= soluzione trovata)*/
  72.                 if (pioli[i][0] == NERO && pioli[i][1] == NERO && pioli[i][2] == NERO && pioli[i][3] == NERO)
  73.                         finito = TRUE;
  74.                 /*Passaggio al turno successivo*/
  75.                 i++;
  76.         }
  77.  
  78.         if (finito)
  79.                 printf("\nEnigma risolto!\n\n");
  80.         else
  81.                 printf("Sbagliato! La soluzione era: %d %d %d %d\n\n", codice[0], codice[1], codice[2], codice[3]);
  82.         system("pause");
  83.         return EXIT_SUCCESS;
  84. }



"Nel curriculum scrivete quello che sapete fare... e anche quello che non sapete fare! Tipo: "Già vescovo di Cracovia, partecipai alla Coppa America, vincendola!""
[...]
"Sto giocando al piccolo Dio e mi sta venendo pure alla grande."
PM Quote
Avatar
venerba mirco (Normal User)
Rookie


Messaggi: 28
Iscritto: 17/12/2015

Segnala al moderatore
Postato alle 23:09
Giovedì, 31/12/2015
grazie , adesso controllo e implemento e domani ti so dire


venerba mirco
PM Quote
Avatar
venerba mirco (Normal User)
Rookie


Messaggi: 28
Iscritto: 17/12/2015

Segnala al moderatore
Postato alle 23:32
Giovedì, 31/12/2015
il codice non me lo fa compilare , mi dice che ci sono errori.....però non capisco dove


venerba mirco
PM Quote
Avatar
Template (Member)
Pro


Messaggi: 175
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 1:04
Venerdì, 01/01/2016
Nel codice che ti ho scritto io? Onestamente, mi pare molto improbabile (tanto più a fronte del fatto che io, prima di postare il codice, l'ho compilato e testato). Potresti postarmi i messaggi del tuo compilatore?


"Nel curriculum scrivete quello che sapete fare... e anche quello che non sapete fare! Tipo: "Già vescovo di Cracovia, partecipai alla Coppa America, vincendola!""
[...]
"Sto giocando al piccolo Dio e mi sta venendo pure alla grande."
PM Quote
Avatar
venerba mirco (Normal User)
Rookie


Messaggi: 28
Iscritto: 17/12/2015

Segnala al moderatore
Postato alle 9:53
Venerdì, 01/01/2016
riga16    colonna26    C:\Users\venerba mirco\Documents\mastermind\SenzaTitolo1.cpp    [Error] invalid conversion from 'int' to 'colori_codice' [-fpermissive]



riga20    colonna13    C:\Users\venerba mirco\Documents\mastermind\SenzaTitolo1.cpp    [Error] invalid conversion from 'int' to 'colori_pioli' [-fpermissive]



qui di seguito ti allego in file cpp il tuo codice


venerba mirco ha allegato un file: SenzaTitolo1.zip (1302 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da venerba mirco il 01/01/2016 alle 9:54


venerba mirco
PM Quote
Avatar
Template (Member)
Pro


Messaggi: 175
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 11:26
Venerdì, 01/01/2016
Non avevo mai visto un compilatore segnalare come errore una "conversione" (ma poi, che conversione? Sono praticamente la stessa cosa!) da un tipo enumerativo ad un intero...

Prova a sostituire le due righe incriminate con queste:

Codice sorgente - presumibilmente Plain Text

  1. codice[i] = (colori_codice) ((rand() % 6) + 1);
  2. [...]          
  3. pioli[i][j] = (colori_pioli)(-1);



Ma è veramente assurdo che ti dia questa segnalazione... che compilatore stai usando?

Ultima modifica effettuata da Template il 01/01/2016 alle 11:27


"Nel curriculum scrivete quello che sapete fare... e anche quello che non sapete fare! Tipo: "Già vescovo di Cracovia, partecipai alla Coppa America, vincendola!""
[...]
"Sto giocando al piccolo Dio e mi sta venendo pure alla grande."
PM Quote
Pagine: [ 1 2 3 4 5 6 7 ] Precedente | Prossimo