Semplice domanda su If e For

di il
8 risposte

Semplice domanda su If e For

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

  • Re: Semplice domanda su If e For

    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.
  • Re: Semplice domanda su If e For

    Attenzione al puntoevirgola in fondo al codice
  • Re: Semplice domanda su If e For

    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
  • Re: Semplice domanda su If e For

    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;
    }
    
  • Re: Semplice domanda su If e For

    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 )
  • Re: Semplice domanda su If e For

    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
  • Re: Semplice domanda su If e For

    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
  • Re: Semplice domanda su If e For

    Allora dovrò imparare ad abituarmi all'indentazione.
Devi accedere o registrarti per scrivere nel forum
8 risposte