Help Problem con OUTPUT PROGRAMMA 2

di il
5 risposte

Help Problem con OUTPUT PROGRAMMA 2

Ciao Ragazzi vorrei chiedervi aiuto per 2 questioni sul mio programma, che avvengono sulla funzione controllo_risultato(); e il suo richiamo all' interno del main :
1) Come mai dopo il Risultato d' AMBO la stringa del vincitore ad es: terno diviene:
il Giocatore NULL ha fatto "RISULTATO es TERNO", così via per tutte le altre vincite;
2) Come mai non mi viene stampato a video, l' avvenimento dell' evento TOMBOLA, quando avviene, ho effettuato anche una prova in cui ho portato a finire i numeri anche sul cartellone vuoto, ma non esegue la stampa della tombola. ecco il codice:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#define righe 3
#define colonne 5
#define maxvett 15
#define maxnome 10
#define PEDINE 90 //maxcontr
#define NUM_USERS 5
#define r 9
#define c 10

typedef struct
{
	char scheda[righe][colonne];	
	char nome[maxnome];
	bool ambo=false;
	bool terno=false;
	bool quaterna=false;
	bool cinquina=false;
	bool tombola=false;
	
}giocatore;

giocatore m_user[NUM_USERS]; /* uso l' array di struct per identificare l' utente */

void carica_scheda()
{
	int i,j,y;
	
	for(i=0;i<NUM_USERS;i++)
	{
		printf("Inserici il nome del %d giocatore\t",i+1);
		gets(m_user[i].nome);
		
		for(j=0;j<righe;j++)
		{
			for(y=0;y<colonne;y++)
			{
				m_user[i].scheda[j][y]=0;	
			}
		}
	}
	system("cls");
}

void inizializza_scheda()
{
	int i,col;
	
	for(i=0;i<NUM_USERS;i++)
	{
		//carico la prima colonna con numeri compresi tra 1 e 9
		col=rand()%8+1;
		col++;
		m_user[i].scheda[0][0]=col;
			
		do
		{
			col=rand()%8+1;
			col++;
				
		}while(col==m_user[i].scheda[0][0]);
			
		m_user[i].scheda[1][0]=col;
			
		do
		{
			col=rand()%8+1;
			col++;
				
		}while(col==m_user[i].scheda[0][0] || col==m_user[i].scheda[1][0]);
			
		m_user[i].scheda[2][0]=col;
			
		//carico la seconda colonna con numeri compresi tra 10 e 29
			
		col=rand()%(29-10)+10;;
		col++;
		m_user[i].scheda[0][1]=col;
			
		do
		{
			col=rand()%(29-10)+10;;
			col++;
				
		}while(col==m_user[i].scheda[0][1]);
			
		m_user[i].scheda[1][1]=col;
			
		do
		{
			col=rand()%(29-10)+10;;
			col++;
				
		}while(col==m_user[i].scheda[0][1] || col==m_user[i].scheda[1][1]);
			
		m_user[i].scheda[2][1]=col;
			
		//carico la terza colonna con numeri compresi tra 30 e 59
			
		col=rand()%(59-30)+30;
		col++;
		m_user[i].scheda[0][2]=col;
			
		do
		{
			col=rand()%(59-30)+30;
			col++;
				
		}while(col==m_user[i].scheda[0][2]);
			
		m_user[i].scheda[1][2]=col;
			
		do
		{
			col=rand()%(59-30)+30;
			col++;
				
		}while(col==m_user[i].scheda[0][2] || col==m_user[i].scheda[1][2]);
			
		m_user[i].scheda[2][2]=col;
			
		//carico la quarta colonna con numeri compresi tra 60 e 79
			
		col=rand()%(79-60)+60;
		col++;
		m_user[i].scheda[0][3]=col;
			
		do
		{
			col=rand()%(79-60)+60;
			col++;
				
		}while(col==m_user[i].scheda[0][3]);
			
		m_user[i].scheda[1][3]=col;
			
		do
		{
			col=rand()%(79-60)+60;
			col++;
				
		}while(col==m_user[i].scheda[0][3] || col==m_user[i].scheda[1][3]);
			
		m_user[i].scheda[2][3]=col;
			
		//carico la quinta colonna con numeri compresi tra 80 e 90
				
		col=rand()%(90-80)+80;
		col++;
		m_user[i].scheda[0][4]=col;
			
		do
		{
			col=rand()%(90-80)+80;
			col++;
				
		}while(col==m_user[i].scheda[0][4]);
			
		m_user[i].scheda[1][4]=col;
			
		do
		{
			col=rand()%(90-80)+80;
			col++;
				
		}while(col==m_user[i].scheda[0][4] || col==m_user[i].scheda[1][4]);
			
		m_user[i].scheda[2][4]=col;	
			
	}
	
}

int controllo_risultato()
{
	//ciclo AMBO
	int i,j,y,conta;
	
	for(i=0;i<NUM_USERS;i++)
	{
		if(m_user[i].ambo==false)
		{
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[0][y]==0)
				{
					conta++;
				}
				
			}
			if(conta==2)
			{
				m_user[i].ambo==true;
				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
			}
			
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[1][y]==0)
				{
					conta++;
				}	
			}
			if(conta==2)
			{
				m_user[i].ambo==true;
				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
			}
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[2][y]==0)
				{
					conta++;
				}	
			}
			if(conta==2)
			{
				m_user[i].ambo==true;
				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
			}
			
				
		}
	}
	
	//ciclo TERNO
	
	for(i=0;i<NUM_USERS;i++)
	{
		if(m_user[i].terno==false)
		{
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[0][y]==0)
				{
					conta++;
				}
			}
			if(conta==3)
			{
				m_user[i].terno==true;
				printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
			}
			
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[1][y]==0)
				{
					conta++;
				}
			}
			if(conta==3)
			{
				m_user[i].terno==true;
				printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
			}
			
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[2][y]==0)
				{
					conta++;
				}
			}
			if(conta==3)
			{
				m_user[i].terno==true;
				printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
			}			
		}
	}
			
	//ciclo QUATERNA
	
	for(i=0;i<NUM_USERS;i++)
	{
		if(m_user[i].quaterna==false)
		{
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[0][y]==0)
				{
					conta++;
				}
			}
			if(conta==4)
			{
				m_user[i].quaterna==true;
				printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
			}
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[1][y]==0)
				{
					conta++;
				}
			}
			if(conta==4)
			{
				m_user[i].quaterna==true;
				printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
			}
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[2][y]==0)
				{
					conta++;
				}
			}
			if(conta==4)
			{
				m_user[i].quaterna==true;
				printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
			}
		}
	}
	//ciclo CINQUINA
	
	for(i=0;i<NUM_USERS;i++)
	{
		if(m_user[i].cinquina==false)
		{
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[0][y]==0)
				{
					conta++;
				}
			}
			if(conta==5)
			{
				m_user[i].cinquina==true;
				printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
			}
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[1][y]==0)
				{
					conta++;
				}
			}
			if(conta==5)
			{
				m_user[i].cinquina==true;
				printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
			}
			conta=0;
			for(y=0;y<colonne;y++)
			{
				if(m_user[i].scheda[2][y]==0)
				{
					conta++;
				}
			}
			if(conta==5)
			{
				m_user[i].cinquina==true;
				printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
			}			
		}
	}

	//ciclo TOMBOLA
	
	for(i=0;i<NUM_USERS;i++)
	{
		if(m_user[i].cinquina==true && m_user[i].tombola==false)
		{
			conta=0;
			
			for(j=0;j<righe;j++)
			{
				for(y=0;y<colonne;y++)
				{
					if(m_user[i].scheda[j][y]==0)
					{
						conta++;
					}
				}
			}
			if(conta==maxvett)
			{
				m_user[i].tombola==true;
				return i;
			}	
		}
	}
}

void stampa_scheda()
{
	int i,y,j;
	
	for(i=0;i<NUM_USERS;i++)
	{
		printf("la scheda di %s e':\n",m_user[i].nome);
		for(j=0;j<righe;j++)
		{
			for(y=0;y<colonne;y++)
			{
			 	printf("%d\t",m_user[i].scheda[j][y]);	
			}
			printf("\n");
		}
		printf("\n");	
	}
}

void tombola_stampa()
{
	printf("TOMBOLA\n");
	//serie di solo testo in printf
}

int main()
{
	int i,y,j,x,z=0,num,estratto,scelta,col,ind_vincitore=0; //y=c
	int tabella[r][c];
	
	int vett[maxvett];
	int controllo[PEDINE];
	
	bool trovato=false;
	bool giauscito=false;
	
	carica_scheda();	
	
	//INIZIO CARICAMENTO DELLA MATRICE DEI GIOCATORI
	inizializza_scheda();
	
	//CARICO IL TABELLONE CON I NUMERI DA 1 A 90
	
	num=1;
	
	for (i=0; i<9; i++)
	{
		for (j=0; j<10; j++)
		{
			tabella[i][j]=num;
			num++;
		}
	}
	
	do
	{
		
		bool giauscito=false;
		bool entrato=false;
		
		srand(time(NULL));
	
		//imposto il vettore di controllo a 0
	
		for(x=0; x<PEDINE; x++)
		{
			controllo[x]=0;		
		}
		
		
		//STAMPO LE CARTELLE
		stampa_scheda();
		
		estratto=0;
		
		//INIZIO GIOCO
	
		do
		{
			system ("cls");
			//sostituisco con uno 0 i numeri gia usciti
			
			for(i=0;i<NUM_USERS;i++)
			{
				for(j=0;j<righe;j++)
				{
					for(y=0;y<colonne;y++)
					{
						if(m_user[i].scheda[j][y]==estratto)
						{
							m_user[i].scheda[j][y]==estratto;
						}
					}
				}
			}
			
			ind_vincitore=controllo_risultato();
			if(ind_vincitore!=0)
			{
				printf("Il Giocatore %s ha fatto \n\n",m_user[ind_vincitore]);
				m_user[ind_vincitore].tombola=true;
				tombola_stampa();
			}
			
			//STAMPO LE CARTELLE
			stampa_scheda();
			
			//STAMPO LA TABELLA	
	
			printf("TABELLA: \n\n");
	
			for (j=0; j<r; j++)
			{
				for (y=0; y<c; y++)
				{
					printf("%d",tabella[j][y]);
					printf("\t");
				}
				printf("\n");
			}
			
			system("pause");
			printf("\n\n");
			
			printf("Estrazione");
	
			for(i=0;i<3;i++)
			{
				Sleep(100);
				printf(".");
			}
			
			//controllo sull'estrazione
			
			do
			{
		
				giauscito=true;
				estratto=rand()%90+1;
				
				for (j=0; j<r; j++)
				{
					for (y=0; y<c; y++)
					{
						if (tabella[j][y]==estratto)
						{
							giauscito=false;
						}
						
					}
				}
				
			}while(giauscito==true);
			
			printf("\n");
			printf("Numero estratto: %d\n\n\n",estratto);
			
			system ("pause");
	
			//sostituisco con un 0 i numeri gia estratti
	
			for (j=0; j<r; j++)
			{
				for (y=0; y<c; y++)
				{
					if(tabella[j][y]==estratto)
					{
						tabella[j][y]=0;
					}		
				}
			}
			
			for(i=0;i<NUM_USERS;i++)
			{
				for(j=0;j<righe;j++)
				{
					for(y=0;y<colonne;y++)
					{
						if(m_user[i].scheda[j][y]==estratto)
						{
							m_user[i].scheda[j][y]=0;
						}
					}
				}
			}
				
		}while(m_user[ind_vincitore].tombola==true);
	
		printf("Vuoi estrarre un numero 1 per SI altro valore per NO:\t");
		scanf("%d",&scelta);
			
	}while(scelta==1 || m_user[ind_vincitore].tombola==true);
}

5 Risposte

  • Re: Help Problem con OUTPUT PROGRAMMA 2

    Per il punto 1 controlla se ci sono differenze nelle linee che mostrano il vincitore dell'ambo e del terno

    Per il punto 2 il codice controlla solo l'utente che ha fatto cinquina e che non ha fatto tombola e ovviamente è sbagliato

    P.S. Nei titoli non mettere Help e Problem ma indica qualcosa come "Visualizzazione sbagliata" oppure "Tombola non segnalata"
  • Re: Help Problem con OUTPUT PROGRAMMA 2

    Ciao Oregon per quanto riguarda il punto 2 se scrivo solamente if(m_user.tombola==false) cosa che è giusta, accade che ad ogni ciclo di sua il richiamo.dalla funzione tombola_stampa() che stampa a video il suo contenuto omettendo ( cosa giusta ) il ne del giocatore che ha provocato l evento, come me la cavo
  • Re: Help Problem con OUTPUT PROGRAMMA 2

    Per il punto 1 hai risolto?

    Per il punto 2, riscrivi in italiano la domanda perché è incomprensibile
  • Re: Help Problem con OUTPUT PROGRAMMA 2

    Ciao Oregon e ragazzi allora per il punto 1 non ho risolto ti mostro il codice solo dell Ambo e del terno, tanto è uguale anche per la QUATERNA e la CINQUINA
    
    //ciclo AMBO
    	for(i=0;i<NUM_USERS;i++)
    	{
    		if(m_user[i].ambo==false)
    		{
    			conta=0;
    			for(y=0;y<colonne;y++)
    			{
    				if(m_user[i].scheda[0][y]==0)
    				{
    					conta++;
    				}	
    			}
    			if(conta==2)
    			{
    				m_user[i].ambo==true;
    				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
    			}
    			
    			conta=0;
    			for(y=0;y<colonne;y++)
    			{
    				if(m_user[i].scheda[1][y]==0)
    				{
    					conta++;
    				}	
    			}
    			if(conta==2)
    			{
    				m_user[i].ambo==true;
    				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
    			}
    			conta=0;
    			for(y=0;y<colonne;y++)
    			{
    				if(m_user[i].scheda[2][y]==0)
    				{
    					conta++;
    				}	
    			}
    			if(conta==2)
    			{
    				m_user[i].ambo==true;
    				printf("Il giocatore %s ha fatto AMBO\n",m_user[i].nome);
    			}
    			
    				
    		}
    	}
    	
    	//ciclo TERNO
    	
    	for(i=0;i<NUM_USERS;i++)
    	{
    		if(m_user[i].terno==false)
    		{
    			conta=0;
    			for(y=0;y<colonne;y++)
    			{
    				if(m_user[i].scheda[0][y]==0)
    				{
    					conta++;
    				}
    			}
    			if(conta==3)
    			{
    				m_user[i].terno==true;
    				printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
    			}
    			
    			conta=0;
    			for(y=0;y<colonne;y++)
    			{
    				if(m_user[i].scheda[1][y]==0)
    				{
    					conta++;
    				}
    			}
    			if(conta==3)
    			{
    				m_user[i].terno==true;
    				printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
    			}
    			
    			conta=0;
    			for(y=0;y<colonne;y++)
    			{
    				if(m_user[i].scheda[2][y]==0)
    				{
    					conta++;
    				}
    			}
    			if(conta==3)
    			{
    				m_user[i].terno==true;
    				printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
    			}			
    		}
    	}
    
    Per quanto riguarda il punto 2,
    se nel codice inserisco unicamente il codice:
    
    //ciclo TOMBOLA
    	
    	for(i=0;i<NUM_USERS;i++)
    	{
    		if(m_user[i].tombola==false)
    		{
    			conta=0;
    			
    			for(j=0;j<righe;j++)
    			{
    				for(y=0;y<colonne;y++)
    				{
    					if(m_user[i].scheda[j][y]==0)
    					{
    						conta++;
    					}
    				}
    			}
    			if(conta==maxvett) // maxvett =15
    			{
    				m_user[i].tombola==true;
    				return i;
    			}	
    		}
    	}
    
    Ad ogni ciclo vi è il richiamo nel main della funzione tombola_stampa(), che appunto stampa a video TOMBOLA, non inserendo il nome del giocatore che ha vinto ( cosa giusta ), ma dovrebbe avvenire solo quando conta==maxvett

    richiamo nel main
    ind_vincitore=0; // inizializzato a 0 a inizio main
    
    			ind_vincitore=controllo_risultato();
    			if(ind_vincitore!=0)
    			{
    				printf("Il Giocatore %s ha fatto \n\n",m_user[ind_vincitore]);
    				m_user[ind_vincitore].tombola=true;
    				tombola_stampa();
    			}
    
  • Re: Help Problem con OUTPUT PROGRAMMA 2

    Giacomo_made4core ha scritto:


    Ciao Oregon e ragazzi allora per il punto 1 non ho risolto ti mostro il codice
    L'hai già mostrato il codice e l'ho visto. Ti ho suggerito di CONFRONTARE le printf della parte dell'ambo e del terno per capire da solo, ma non l'hai fatto.
    Ad ogni ciclo vi è il richiamo ...
    Se la funzione restituisce un valore a partire da 0 in poi, ha trovato un vincitore (perché 0 è un giocatore valido).
    Se non ne trova deve restituire -1. E nel main devi controllare se è >=0
Devi accedere o registrarti per scrivere nel forum
5 risposte