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++ - [Progetto] Tombola: problema array di struct
Forum - C/C++ - [Progetto] Tombola: problema array di struct

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 16:35
Martedý, 07/07/2015
Ciao, ho un problema con il passaggio di parametri di un array di struct: dopo averlo dichiarato nel main devo passarlo ad una procedura posta in un altro file, ma mi da un errore : unknown type name Players.
Il codice Ŕ questo:
-main,
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include "mia_libreria.h"
  5. enum Vincite {Ambo,Terno,Quaterna,Quintina,Tombola};
  6. typedef enum {false, true} Bool;
  7.  
  8.  
  9. struct player{
  10.     char nome[20];
  11.     unsigned short cartella[3][5];
  12.     unsigned int caselle_mancanti;
  13. };
  14.  
  15. typedef struct player Players;
  16.  
  17.  
  18.  
  19.  
  20. int main()
  21. {
  22.     Players giocatori[5];
  23.     int numero_giocatori = 5,i;
  24.  
  25.     puts("INSERIMENTO DEI NOMI DEI PARTECIPANTI");
  26.     for(i=0;i<numero_giocatori;i++){
  27.         printf("\tGiocatore %d: ",i+1);
  28.         gets(giocatori[i].nome);
  29.         fflush(stdin);
  30.     }
  31.  
  32.     printf("\n\n\n");
  33.     srand(time(NULL));
  34.     genera_cartelle(giocatori,numero_giocatori);
  35.  
  36.     visualizza_cartelle(giocatori,numero_giocatori);
  37.  
  38.     printf("INIZIO ESTRAZIONE NUMERI: PARTE IL GIOCO\n");
  39.     estrazione_numeri(giocatori,numero_giocatori);
  40.  
  41.     return 0;
  42. }


-ecco una delle funzioni:
Codice sorgente - presumibilmente C++

  1. void estrazione_numeri(Players *g, int num_gioc){
  2.     int numeri[90] ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
  3.                     31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
  4.                     61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90};
  5.     int estrazioni = 0, indice_estratto, numero_estratto,i,k,j;
  6.     int colonna_da_scrutare;
  7.     int contatore; // servirÓ nel verificare se un giocatore abbia fatto terno o quaterna
  8.     enum Vincite vincite = Ambo;
  9.     Bool verifica = false;
  10.  
  11.     do{
  12.         printf("Estrazione numero %d. ", estrazioni+1);
  13.         indice_estratto = rand()%(90 - estrazioni);
  14.         numero_estratto = numeri[indice_estratto];
  15.         estrazioni++;
  16.         printf("Numero estratto: %d\n", numero_estratto);
  17.  
  18.         for(i=indice_estratto;i<90-estrazioni;i++)
  19.             numeri[i] = numeri[i+1];
  20.  
  21.         if(numero_estratto >= 1 && numero_estratto <= 18)
  22.             colonna_da_scrutare = 0;
  23.         else if(numero_estratto >= 19 && numero_estratto <= 36)
  24.             colonna_da_scrutare = 1;
  25.         else if(numero_estratto >= 37 && numero_estratto <= 54)
  26.             colonna_da_scrutare = 2;
  27.         else if(numero_estratto >= 55 && numero_estratto <= 72)
  28.             colonna_da_scrutare = 3;
  29.         else if(numero_estratto >= 73 && numero_estratto <= 90)
  30.             colonna_da_scrutare = 4;
  31.  
  32.         for(i=0;i<num_gioc;i++){
  33.             k = 0;
  34.             do{
  35.                 if(g[i].cartella[k][colonna_da_scrutare] == numero_estratto){
  36.                     g[i].cartella[k][colonna_da_scrutare] = 0;
  37.                     g[i].caselle_mancanti--;
  38.  
  39.                     if(estrazioni >= 2){
  40.                         switch(vincite){
  41.                             case Ambo:
  42.                                 for(j=0;j<5;j++){
  43.                                     if((j!=colonna_da_scrutare && g[i].cartella[k][j] == 0) ||
  44.                                         (j!=k && j<3 && g[i].cartella[j][colonna_da_scrutare] == 0)){
  45.                                             printf("\n%s fa Ambo !\n", g[i].nome);
  46.                                             visualizza_cartelle(g,num_gioc);
  47.                                             printf("\n\n");
  48.                                             vincite++;
  49.                                             break;
  50.                                     }
  51.                                 }
  52.                                 break;
  53.  
  54.                             case Terno:
  55.                                 contatore = 1;
  56.                                 for(j=0;j<5;j++){
  57.                                     if(g[i].cartella[k][j] == 0 && j != colonna_da_scrutare){
  58.                                         contatore++;
  59.                                     }
  60.                                     if(contatore == 3){
  61.                                         printf("\n%s fa Terno !\n", g[i].nome);
  62.                                         visualizza_cartelle(g,num_gioc);
  63.                                         printf("\n\n");
  64.                                         vincite++;
  65.                                         break;
  66.                                     }
  67.                                 }
  68.  
  69.                                 if(g[i].cartella[0][colonna_da_scrutare] +
  70.                                    g[i].cartella[1][colonna_da_scrutare] +
  71.                                    g[i].cartella[2][colonna_da_scrutare] == 0){
  72.                                         printf("\n%s fa Terno !\n", g[i].nome);
  73.                                         visualizza_cartelle(g,num_gioc);
  74.                                         printf("\n\n");
  75.                                         vincite++;
  76.                                         break;
  77.                                 }
  78.                                 break;
  79.                             case Quaterna:
  80.                                 contatore = 1;
  81.                                 for(j=0;j<5;j++){
  82.                                     if(g[i].cartella[k][j] == 0 && j != colonna_da_scrutare){
  83.                                         contatore++;
  84.                                     }
  85.                                     if(contatore == 4){
  86.                                         printf("\n%s fa Quaterna ! - Riga %d \n", g[i].nome,k);
  87.                                         visualizza_cartelle(g,num_gioc);
  88.                                         printf("\n\n");
  89.                                         vincite++;
  90.                                         break;
  91.                                     }
  92.                                 }
  93.                                 break;
  94.                             case Quintina:
  95.                                 if((g[i].cartella[k][0] + g[i].cartella[k][1] + g[i].cartella[k][2] + g[i].cartella[k][3] + g[i].cartella[k][4]) == 0){
  96.                                         printf("\n%s fa Quintina! \n", g[i].nome);
  97.  
  98.                                         visualizza_cartelle(g,num_gioc);
  99.                                         printf("\n\n");
  100.  
  101.                                         vincite++;
  102.                                 }
  103.                                 break;
  104.                             case Tombola:
  105.                                 if(g[i].caselle_mancanti == 0){
  106.                                         printf("\n%s fa TOMBOLA!!! \n", g[i].nome);
  107.  
  108.                                         visualizza_cartelle(g,num_gioc);
  109.                                         printf("\n\n");
  110.  
  111.                                         verifica = true;
  112.                                 }
  113.                                 break;
  114.                         }
  115.                     }
  116.                     break;
  117.                 }
  118.                 k++;
  119.  
  120.             }while(k<3);
  121.  
  122.             if(verifica == true)
  123.                 break;
  124.         }
  125.     system("PAUSE");
  126.     }while( verifica == false);
  127.  
  128. }



Grazie a tutti in anticipo.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6124
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:14
Martedý, 07/07/2015
Le funzioni dove stanno? Dicci come Ŕ organizzato il progetto, i file .cpp e i .h

Ultima modifica effettuata da nessuno il 07/07/2015 alle 17:15


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 17:20
Martedý, 07/07/2015
Queste sono le altre funzioni:
Codice sorgente - presumibilmente C++

  1. void genera_cartelle(Players *g, int num_gioc){
  2.     int i,j,k;
  3.  
  4.     for(i=0;i<num_gioc;i++){
  5.         g[i].caselle_mancanti = 15;     //inizializzo il numero di caselle da puntare necessario per fare tombola
  6.         for(j=0;j<5;j++){
  7.             for(k=0;k<3;k++){
  8.                  switch(k){
  9.                      case 0:
  10.                         g[i].cartella[k][j] = ( 1+ (18*j)) + rand()%6;
  11.                         break;
  12.  
  13.                      case 1:
  14.                          do{
  15.                             g[i].cartella[k][j] = ( 7+ (18*j)) + rand()%6;
  16.                          }while(g[i].cartella[k][j] == g[i].cartella[k-1][j]);
  17.                          break;
  18.  
  19.                      case 2:
  20.                          do{
  21.                             g[i].cartella[k][j] = ( 13 + (18*j)) + rand()%6;
  22.                          }while((g[i].cartella[k][j] == g[i].cartella[k-1][j] || g[i].cartella[k][j] == g[i].cartella[k-2][j]));
  23.                          break;
  24.                  }
  25.             }
  26.  
  27.         }
  28.  
  29.     }
  30. }



Codice sorgente - presumibilmente C/C++

  1. void visualizza_cartelle(Players *g, int num_gioc){
  2.     int i,j,k;
  3.     for(i=0;i<num_gioc;i++){
  4.             printf("Cartella di %s:\n",g[i].nome);
  5.             for(k=0;k<3;k++){
  6.                 for(j=0;j<5;j++){
  7.                     printf("\t%hu",g[i].cartella[k][j]);
  8.                 }
  9.                 printf("\n");
  10.             }
  11.             printf("\n\n");
  12.     }
  13. }




Codice sorgente - presumibilmente C++

  1. #ifndef MIA_LIBRERIA_H_INCLUDED
  2. #define MIA_LIBRERIA_H_INCLUDED
  3. void genera_cartelle(Players *g, int num_gioc);
  4. void visualizza_cartelle(Players *g, int num_gioc);
  5. void estrazione_numeri(Players *g, int num_gioc);
  6.  
  7.  
  8. #endif // MIA_LIBRERIA_H_INCLUDED


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6124
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:37
Martedý, 07/07/2015
Ti avevo chiesto come Ŕ organizzato il progetto ...

Hai un file MIALIBRERIA.h

e poi?


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 17:49
Martedý, 07/07/2015
In che senso come Ŕ organizzato? Ti ho mandato tutti i file del progetto.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6124
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:53
Martedý, 07/07/2015
Ce l'hanno un nome questi file?

Le funzioni stanno nello stesso file del main? O no?

E' una cosa complicata quella che chiedo?

Ultima modifica effettuata da nessuno il 07/07/2015 alle 17:54


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 18:10
Martedý, 07/07/2015
Ovviamente si: genera_cartelle, visualizza_cartelle, estrazione_numeri.
Ogni file ha lo stesso nome della procedura, come puoi notare. Sono funzioni diverse in file diversi.

Ultima modifica effettuata da WildBlood il 07/07/2015 alle 18:10
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6124
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:15
Martedý, 07/07/2015
Un file .cpp per ogni funzione? Non ha molto senso ... Allora per progetti con 1000 funzioni fai 1000 file?

In ogni caso, la struct e la typedef vanno in un file .h che devi includere in ogni file sorgente .cpp


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilitÓ) chiamava il gioco del Lotto Tassa sulla stupiditÓ.
PM Quote
Avatar
WildBlood (Normal User)
Rookie


Messaggi: 58
Iscritto: 17/02/2015

Segnala al moderatore
Postato alle 18:29
Martedý, 07/07/2015
Ho risolto grazie.
Era un problema di librerie. Non le ho incluse nei file delle funzioni.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo