Scusate se rispolvero un vecchio topic ma mi sono recentemente accorto che il problema si ripresenta QUALORA ci siano elementi UGUALI ma in POSIZIONI diverse. Pertanto ho improvvisato un controllo ma non essendo, ancora una volta, semanticamente corretto mi ripresenta il problema di non-stampa del valore della seconda colonna in prima posizione. Quindi ripeto, il programma funziona se ci sono elementi uguali in posizioni uguali, se ci sono elementi diversi non li stampa (e fin qui mi va bene comunque), ma se ci sono elementi uguali ma in posizione diversa allora il programma non me li stampa nella matrice comune. Ecco il codice modificato:
#include <stdio.h>
#include <stdlib.h>
#define N 2
int main(){
int m1[N][N]={{1,2},{4,7}};
int m2[N][N]={{2,1},{4,7}};
int mc[N][N];
//controlla che nella stessa posizione siano uguali se i numeri sono uguali ma in pos diverse
//non li stampa
// 1,2
// 4,7
// 2,1
// 4,7 (colonna 0 = 2,4) colonna 1 = 1,7
int i, j;
//stampa matrice1
for(i=0;i<N;i++){
printf("\n");
for(j=0;j<N;j++){
printf("|%d|",m1[i][j]);
}
}
//stampa matrice2
for(i=0;i<N;i++){
printf("\n");
for(j=0;j<N;j++){
printf("|%d|",m2[i][j]);
}
}
//compara valori di matrici 1 e 2 e assegna quelli comuni in MC
for(i=0;i<N;i++){
for(j=0;j<N;j++){
if(m1[i][j]==m2[i][j]){
mc[i][j]=m1[i][j];
}
else if (m1[i][j]!=m2[i][j]){
if((m1[i][j]==m2[i][j+1]) && (m1[i][j+1]==m2[i][j])){
mc[i][j]=m1[i][j];
}
}
}
}
//stampa matrice di el comuni
for(i=0;i<N;i++){
printf("\n");
for(j=0;j<N;j++){
printf("|%d|",mc[i][j]);
}
}
system("pause");
return 0;
}
Qui, direttamente la modifica che ho fatto:
else if (m1[i][j]!=m2[i][j]){
if((m1[i][j]==m2[i][j+1]) && (m1[i][j+1]==m2[i][j])){
mc[i][j]=m1[i][j];
}
}