Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79

    [C] Controllo elementi consecutivi nella matrice

    Buonasera a tutti
    Ringrazio di nuovo per l'aiuto ricevuto nel problema di ricerca di un valore in array di liste

    Mi trovo ora ad affrontare un altro problema che sti cercando di risolvere da quasi tutto il pomeriggio...
    il mio scopo è quello di controllare se 4 elementi consecutivi orizzontalmente, siano uguali, e in tal caso, stampare a video se è vero o no...

    Questo è il codice

    codice:
    int controllo_orizz(int griglia[6][6]) 
    {    
     int giusto = 0;     
    int i;       
    int j;        
    for(i=0;i<5;i++)     
       {          
        for(j=0;j<2;j++) //2 è perchè basta controllare 2 volte iniziando dalla prima e seconda cella          
            {         
               if(griglia[i][j] == 'X' || griglia[i][j] == 'O')             
                    {             
                      if(griglia[i][j] == griglia[i][j+1])             
                          {              
                             if(griglia[i][j+1] == griglia[i][j+2])                
                                {                   
                                   if(griglia[i][j+2] == griglia[i][j+3])        
                                     {                                             
                                           printf("i 4 elementi sono consecutivi\n\n");                                               
                                          giusto++;                  
                                      }                  
                                  }             
                             }             
                    }                     
                }  
          }                          
    return giusto;                               
    }
    il mio problema è che gli elementi NON risultano mai consecutivi, neanche quando io li metto di proposito consecutivi..
    quello che ho voluto "dire" al programma attraverso il mio codice è di controllare che l'elemento consecutivo (della stessa riga ma colonna successiva) sia uguale al primo.... tuttavia questo codice non mi va...


    Sapete darmi delle dritte?
    Grazie infinite

  2. #2
    Gli indici del vettore vanno da 0 a 5. Se tu nel primo for() metti i=0;i<5; i assumerà i valori da 0 a 4, escluso il 5. E' il primo errore che mi salta all'occhio, ma non so se è quello "giusto". Prova a mettere i<=5 o i<6 e vedi come va...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79
    Originariamente inviato da web_pirate
    Gli indici del vettore vanno da 0 a 5. Se tu nel primo for() metti i=0;i<5; i assumerà i valori da 0 a 4, escluso il 5. E' il primo errore che mi salta all'occhio, ma non so se è quello "giusto". Prova a mettere i<=5 o i<6 e vedi come va...
    purtroppo non è quello l'errore comunque grazie

  4. #4
    Aspetta un attimo... Il vettore che hai tu è di int. Quindi non potresti mai leggere una X da esso, né se nell'if metti griglia[i][j]=='0' sarà mai uguale, perché mettendo lo 0 tra apici, diventa anch'esso un carattere e l'if dovrebbe constatare se griglia[i][j], che è int, è uguale a un carattere di tipo char, quindi questa condizione non sarà mai vera... Prova a togliere gli apici dallo 0 e dovrebbe funzionare laddove ci sono 4 zeri consecutivi, ma comunque non 4 X.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79
    Originariamente inviato da web_pirate
    Aspetta un attimo... Il vettore che hai tu è di int. Quindi non potresti mai leggere una X da esso, né se nell'if metti griglia[i][j]=='0' sarà mai uguale, perché mettendo lo 0 tra apici, diventa anch'esso un carattere e l'if dovrebbe constatare se griglia[i][j], che è int, è uguale a un carattere di tipo char, quindi questa condizione non sarà mai vera... Prova a togliere gli apici dallo 0 e dovrebbe funzionare laddove ci sono 4 zeri consecutivi, ma comunque non 4 X.
    grandissimo!! hai proprio ragione!
    sono sempre abituata ad usare INT per tutto...nel senso che la maggior parte delle cose che uso sono int int int...e il char non mi capita quasi mai di usarlo...per cui me lo scordo!!
    grazie davvero!
    odiosi errorucci!

    provo a modificare e spero non incappino altri problemi!

  6. #6
    Prego...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79
    ho modificato il codice mettendo <6 nel primo for e char al posto di int...
    ma c'è un altro problema...

    se nella mia griglia faccio 4 elementi consecutivi a partire dalla prima cella mi dice giustamente che i 4 el sono consecutivi, se invece gli elementi consecutivi sono a partire dalla seconda cella, non mi dice niente..ma mi fa andare avanti con l'inserimento degli elementi ç_ç


    MODIFICA ore 20.40
    sono riuscita a risolvere il problema
    tuttavia non riesco ancora a fare una cosa (grrr)
    io vorrei passare il valore che prende GIUSTO (che dovrebbe incrementarsi a 1 in seguito al fatto che i 4 elementi sono consecutivi) ad una variabile nel main del programma.....


    conteggio = controllo_orizz(griglia);

    vorrei che il valore 1 andasse a conteggioche mi serve per farmi uscire dal programma...
    ovviamente conteggio l'ho dichiarato come INT

    ma non passa alcun valore..
    e giusto dentro la funzione è incrementato correttamente (ho controllato con un printf)

  8. #8
    La funzione controllo_orizz ti ritorna il numero di serie trovate.. Non ho comunque ben capito cosa vuoi dire?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    79
    All'interno del MAIN io ho
    codice:
    if(conteggio == 1) 			
    { 				
    printf("\n vuoi inserire ancora simboli? \n (s: SI' / n: NO): "); 				fflush(stdin); 				
    scanf("%c", &programma); //per prendere la scelta dell'utente
    if(programma == 'n') 				
         { 					
         exit(0); 				
         }  			
    }
    e quindi ho bisogno di avere conteggio = 1 non appena ho controllato il fatto di avere 4 elementi consecutivi..così da poter scegliere di ripartire con il programma o uscire da questo...

  10. #10
    Se alla variabile conteggio tu assegni il valore di ritorno di controllo_orizz, avrai un valore compreso da 0 a 6(al minimo non hai nessuna serie nella matrice, al massimo ne hai sei). Se vuoi fare in modo che il programma richieda un nuovo carattere da ricercare nella stringa all'utente nell'if devi porre conteggio come > 0.
    ma non passa alcun valore..
    e giusto dentro la funzione è incrementato correttamente (ho controllato con un printf)
    Hai controllato la variabile conteggio dopo averle assegnato il valore di ritorno della funzione controllo_orizz? Oppure hai soltanto controllato l'incremento della variabile "giusto" all'interno della stessa funzione? Perché il problema può essere, come ho detto sopra, che il tuo controllo(if(conteggio == 1)) sia falso nel momento in cui all'interno della matrice ci sono più di una sola serie. Prova a mettere if(conteggio>0) e vedi come va...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.