Stampa elementi comuni di 2 matrici diverse

di il
5 risposte

Stampa elementi comuni di 2 matrici diverse

Dovrei fare un confronto fra gli elementi di due matrici 2X2 (già inseriti in input), se l'algoritmo trova elementi in comune li assegna in una matrice esterna e stampa il contenuto di tale matrice. !Non è detto che gli tutti gli elementi siano uguali, pertanto la matrice ''c'' risulterebbe inferiore nonostante gli abbia dato lo stesso spazio di memoria!
PROBLEMA: mi stampa gli INDIRIZZI anziché i valori della matrice in comune ''mc''. Vi allego anche il prompt.
Dov'è che sbaglio? Strutturalmente è giusto ma semanticamente sto proprio sottoterra... evidentemente mi mancano delle capacità di logica basilari =_=''
Vi ringrazio di cuore in anticipo.
#include <stdio.h>
#include <stdlib.h>
#define N 2
int main(){
	int m1[N][N]={{1,2},{4,7}};
	int m2[N][N]={{5,2},{1,9}};
	int mc[N][N];



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[N][N]=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;
}

5 Risposte

  • Re: Stampa elementi comuni di 2 matrici diverse

    Ciao PhobosGrunt96

    Quando assegni i valori alla matrice mc devi usare gli stessi indici i e j. Quelli che visualizza in output sono valori che trova in memoria agli indirizzi per i e j =0 e = 1 mentre tu il valore lo assegni in mc [2][2]. Ricorda che N=2 non lo fai variare nel for e quindi sovrascrivi nella stessa posizione.

    In soldoni:
     
      ...
      for (i=0; i <N; i++)
       for (j=0; j <N; j++)
       ...
         mc[i][j]=m1[i][j];
    ...
     
     
    Spero di essermi spiegato...con il cell mi sono impazzito

    Non ho l'etá per le acrobazie con i pollici.

    Un saluto
  • Re: Stampa elementi comuni di 2 matrici diverse

    Che deficiente che sono... non me n'ero proprio accorto di aver messo le cardinalità tra le parentesi invece dei contatori <.<
    Grazie mille! ^^'
  • Re: Stampa elementi comuni di 2 matrici diverse

    No problem

    A presto
  • Re: Stampa elementi comuni di 2 matrici diverse

    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];
    
    
                               }
                                                                   }
  • Re: Stampa elementi comuni di 2 matrici diverse

    Focalizza...cosa devi fare? Devi verificare l'uguaglianza di un valore della prima matrice per ciascuno dei valori dell'altra...per tutti i valori dell'altra...voglio dire:
    Tieni fermo il valore m1 [0][0] e lo compari per tutti quelli di m2 facendo scorrere gli indici i e j...poi avanzi di un elemento in m1 e lo compari con TUTTI i valori di m2...usa indici differenti per m1
Devi accedere o registrarti per scrivere nel forum
5 risposte