Semplice domanda su If e For

di Anonimizzato10222 il
8 risposte
Ciao Ragazzi
Ho una domanda su una cosa che immagino per voi sarà una sciocchezza ma che mi sta dando un po' di filo da torcere.

Ho un programma in C con una matrice precedentemente inizializzata per essere tutta piena di 0, il programma riceve l'input dell'utente per riempire la matrice di numeri interi, poi devo verificare che nella matrice non sia rimasto più nessuno zero, come faccio? Inizialmente ho scritto questo:
int piena(int m[RIGHE][COLONNE]) 
	{
		int i,j;
		for(i=0;i<RIGHE;i++)
		{
			for(j=0;j<COLONNE;j++)
			{
				if(m[i][j]!=0) return 1;
			}
		}
         return 0;
	};
ma ovviamente non funziona perché la funziona ritorna 1 (cioè che la matrice è piena) ogni volta che incontra un elemento che è diverso da 0!
Quindi come faccio a far verificare la condizione per tutti gli elementi della matrice?

...Sono sicuro che sto sbagliando proprio procedimento
Ogni aiuto è gradito vi ringrazio in anticipo

8 Risposte

  • Basta che al primo zero che incontri restituisci 0 (quindi cambi il '!=' in '=='), vuol dire che non è piena. Se invece arriva alla fine vuol dire che non ci sono 0 e allora restituisci 1 per dire che è piena.
  • Attenzione al puntoevirgola in fondo al codice
  • barba59 ha scritto:


    Basta che al primo zero che incontri restituisci 0 (quindi cambi il '!=' in '=='), vuol dire che non è piena. Se invece arriva alla fine vuol dire che non ci sono 0 e allora restituisci 1 per dire che è piena.
    Ovvio ahah a dire il vero l'avevo pure fatto giusto, non funzionava solo perché quando chiamavo la funzione scordavo di passargli la matrice. Tremendo.

    Grazie mille, rischiavo di stare delle ore a farlo e rifarlo
  • Potevi anche farlo semplicemente con un boolean.
    bool piena(int m[r][c]){
    bool x=true;
    for(int i=0;i<r;i++)
    for(int j=0;j<c;j++)
    if(m[i][j]==0)
    x=false;
    return x;
    }
    
  • Monstercat95 ha scritto:


    Potevi anche farlo semplicemente con un boolean.
    bool piena(int m[r][c]){
    bool x=true;
    for(int i=0;i<r;i++)
    for(int j=0;j<c;j++)
    if(m[i][j]==0)
    x=false;
    return x;
    }
    
    Il consiglio di usare un bool al posto di un int è buono, invece il ciclo è meglio che si interrompa al primo valore uguale a zero, è più efficiente. ( poi bisogna indentare il codice )
  • barba59 ha scritto:


    Monstercat95 ha scritto:


    Potevi anche farlo semplicemente con un boolean.
    bool piena(int m[r][c]){
    bool x=true;
    for(int i=0;i<r;i++)
    for(int j=0;j<c;j++)
    if(m[i][j]==0)
    x=false;
    return x;
    }
    
    Il consiglio di usare un bool al posto di un int è buono, invece il ciclo è meglio che si interrompa al primo valore uguale a zero, è più efficiente. ( poi bisogna indentare il codice )
    Ahahahah purtroppo sono abituato a non indentare mai
  • Monstercat95 ha scritto:


    Ahahahah purtroppo sono abituato a non indentare mai
    In effetti puoi anche non farlo, basta che non ti interessi farlo leggere ad altri o fare programmi complessi
  • Allora dovrò imparare ad abituarmi all'indentazione.
Devi accedere o registrarti per scrivere nel forum
8 risposte