Il codice postato è pieno di errori di trascrizione, ma l'errore lampante è nell'if finale dove invece di verificare il valore di condizione2, gli viene assegnato il valore.
// sbagliato
if(condizione2=0) printf("la seconda matrice risulta essere diagonale");
else if(condizione2=1) printf("la seconda matrice non e' diagonale");
// corretto
if(condizione2==0) printf("la seconda matrice risulta essere diagonale");
else if(condizione2==1) printf("la seconda matrice non e' diagonale");
codice corretto, ma solo riferito alla matrice diagonale A e condizione2, non ho verificato altro, non so se ci sono errori di concetto.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4 // matrice casuale stesse dimensioni di quella di confronto
#define D 4
void stampa(int n, int m[N][N]){
int i,j;
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%3d ", m[i][j]);
}
printf("\n");
}
}
void inizializza(int n, int m[N][N]){
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
m[i][j]=rand()%100+1;
}
}
}
int main(void){
int M[N][N];
int A[D][D]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}};
int i,j;
int condizione1, condizione2;
srand(time(0));
inizializza(N,M);
stampa(N,M);
printf("\n\n");
//vero=0 e falso=1
i=0;
while(i<D){
j=0;
while(j<D){
if(i!=j && M[i][j]==0 || i==j && M[i][j]==1 ){
condizione1=0;
j++;
}else{
condizione1=1;
}
i++;
}
}
if(condizione1=0) printf("la prima matrice risulta essere diagonale");
else if(condizione1=1) printf("la prima matrice non e' diagonale");
printf("\n\n");
stampa(D,A);
printf("\n\n");
i=0;
while(i<D){
j=0;
while(j<D){
if((i!=j && A[i][j]==0) || (i==j && A[i][j]==1) ){
condizione2=0;
j++;
}else {
condizione2=1;
}
i++;
}
}
if(condizione2==0) printf("la seconda matrice risulta essere diagonale");
else if(condizione2==1) printf("la seconda matrice non e' diagonale");
}
Il codice non funziona, domanda
Questa matrice è diagonale!
1000
0100
0010
0001
[si]
Questa matrice è diagonale?
1001
0100
0010
0001
[no]
Questa matrice è diagonale?
1234
2134
3415
6781
[no]
Questa matrice è diagonale?
0001
0010
0100
1000
[no]