[Matrici in C]
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
#include
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[j]);
}
}
//Ricerca delle righe con tutti gli elementi nulli
righe0 = 0;
numrighe=0;
while ((i < N) && (righe0 = 0)) {
if (( a[j] == 0) && (a[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à.
Io ho scritto così il programma
#include
#include
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[j]);
}
}
//Ricerca delle righe con tutti gli elementi nulli
righe0 = 0;
numrighe=0;
while ((i < N) && (righe0 = 0)) {
if (( a[j] == 0) && (a[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à.
Risposte
Ciao, per postare del codice sul forum dovresti utilizzare i tag "code" (pulsante "Code" nell'editor completo):
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.
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.
Si ci sono graffe in più perché lo avevo modificato ma non andava. Correggendo però compila.
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?!
#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; }
Ci sono varie cose che non vanno, se ti può essere utile io farei qualcosa del genere:
#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; }
Va bene, grazie mille