[Matrici in C]

Messaggioda Mikii02 » 10/12/2021, 17:21

Ciao a tutti. Sono una studentessa alle prime armi con il linguaggio c. Stavo scrivendo un programma che verifica che in una matrice di n righe e m colonne ci siano almeno due righe nulle.
Io ho scritto così il programma

#include <stdio.h>
#include <stdlib.h>
int main(void) {
//Dichiarazione di una matrice di 100x100 interi
const int maxDim = 100;
int a[maxDim][maxDim];
int N;
int M;
int i;
int j;
int flag1;
int flag2;
int righe0;
int numrighe;

//Inserimento delle dimensioni
printf("Inserisci il numero di righe (max %d)", maxDim);
scanf("%d", &N);
printf("Inserisci il numero di colonne (max %d)", maxDim);
scanf("%d", &M);
//Controllo di allocazione statica
flag1 = (N > 0) && (N <= maxDim);
flag2 = (M > 0) && (M <= maxDim);
if( flag1 && flag2) {
//Lettura della matrice
printf("Leggiamo la matrice");
for(i = 0; i < N; i++) {
for(j = 0; j < M; j++) {
printf("Inserisci a[%d][%d]: ", i, j);
scanf("%d", &a[i][j]);
}
}
//Ricerca delle righe con tutti gli elementi nulli
righe0 = 0;
numrighe=0;
while ((i < N) && (righe0 = 0)) {
if (( a[i][j] == 0) && (a[i][j+1] == 0)){
righe0 = 1;
numrighe++;
}
i++;
}
}
}
//Stampa della matrice
if ((righe0 == 1) && (numrighe >=2)) {
printf("Il numero di righe e' sufficiente");
} else {
printf("Il numero delle righe non e' suffiente");
}
} else {
printf("Errore: la dimensione inserita e' maggiore di %d", maxDim);
}
return 0;
}
Ho pensato di ragionare così : di prendere un elemento di una riga e i suoi successivi e verificare se sono uguali a zero e di contare il numero di righe nulle. Quando vado ad eseguire però, non ottengo il risultato sperato. Cosa c'è di sbagliato? Grazie in anticipo a chi mi aiuterà.
Mikii02
Starting Member
Starting Member
 
Messaggio: 5 di 26
Iscritto il: 05/11/2021, 20:43

Re: [Matrici in C]

Messaggioda utente__medio » 10/12/2021, 18:08

Ciao, per postare del codice sul forum dovresti utilizzare i tag "code" (pulsante "Code" nell'editor completo):

Codice:
così


Detto ciò, prima di entrare nel merito della questione, vorrei chiederti una cosa: quel codice compila? A me sembra che ci sia un po' di casino con le graffe.
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 34 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan

Re: [Matrici in C]

Messaggioda Mikii02 » 10/12/2021, 19:11

Si ci sono graffe in più perché lo avevo modificato ma non andava. Correggendo però compila.
Mikii02
Starting Member
Starting Member
 
Messaggio: 6 di 26
Iscritto il: 05/11/2021, 20:43

Re: [Matrici in C]

Messaggioda utente__medio » 11/12/2021, 00:05

Se è per questo ci sono anche degli else "appesi"... non sarebbe meglio se provvedessi tu a postare il codice corretto utilizzando gli appositi tag come ti ho spiegato nell'altro post?!
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 35 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan

Re: [Matrici in C]

Messaggioda Mikii02 » 11/12/2021, 10:51

Codice:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
//Dichiarazione di una matrice di 100x100 interi
const int maxDim = 100;
int a[maxDim][maxDim];
int N;
int M;
int i;
int j;
int flag1;
int flag2;
int righe0;
int numrighe;

//Inserimento delle dimensioni
printf("Inserisci il numero di righe (max %d)", maxDim);
scanf("%d", &N);
printf("Inserisci il numero di colonne (max %d)", maxDim);
scanf("%d", &M);
//Controllo di allocazione statica
flag1 = (N > 0) && (N <= maxDim);
flag2 = (M > 0) && (M <= maxDim);
if( flag1 && flag2) {
  //Lettura della matrice
  printf("Leggiamo la matrice");
  for(i = 0; i < N; i++) {
   for(j = 0; j < M; j++) {
   printf("Inserisci a[%d][%d]: ", i, j);
   scanf("%d", &a[i][j]);
   }
  }
  //Ricerca delle righe con tutti gli elementi nulli
  righe0 = 0;
  numrighe=0;
  while ((i < N) && (righe0 = 0)) {
     if (( a[i][j] == 0) && (a[i][j+1] == 0)){
     righe0 = 1;
     numrighe++;
      }
   i++;
   }

  //Stampa della matrice
  if ((righe0 == 1)  && (numrighe >=2)) {
  printf("Il numero di righe e' sufficiente");
  } else {
  printf("Il numero delle righe non e' suffiente");
  }
 } else {
 printf("Errore: la dimensione inserita e' maggiore di %d", maxDim);
 }
return 0;
}
Mikii02
Starting Member
Starting Member
 
Messaggio: 7 di 26
Iscritto il: 05/11/2021, 20:43

Re: [Matrici in C]

Messaggioda utente__medio » 11/12/2021, 14:07

Ci sono varie cose che non vanno, se ti può essere utile io farei qualcosa del genere:

Codice:
#include <stdio.h>

#define N 6
#define M 4
#define N_RIG_MAX 2

int main(void)
{
    int m[N][M] = {{0, 0, 2, 9},
                   {0, 0, 0, 0},
                   {0, 1, 0, 0},
                   {0, 0, 9, 0},
                   {0, 0, 0, 0},
                   {0, 0, 0, 0}};
    int n_rig = 0;
    for(int i = 0, j; i < N && n_rig < N_RIG_MAX; ++i)
    {
        for(j = 0; j < M && !m[i][j]; ++j);
        n_rig += j == M;
    }
    printf("%d\n", n_rig == N_RIG_MAX);
    return 0;
}
"Ci abbaiano, Sancho; segno che stiamo cavalcando!"
utente__medio
Junior Member
Junior Member
 
Messaggio: 37 di 394
Iscritto il: 02/11/2021, 12:48
Località: Draghistan

Re: [Matrici in C]

Messaggioda Mikii02 » 11/12/2021, 18:46

Va bene, grazie mille
Mikii02
Starting Member
Starting Member
 
Messaggio: 8 di 26
Iscritto il: 05/11/2021, 20:43


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite