Determinare se una matrice è sottomatrice dell'altra

di il
1 risposte

Determinare se una matrice è sottomatrice dell'altra

Salve ragazzi io avrei un problema di uno svolgimento di un esercizio che dice:

"Date due matrici A e B di valori interi acquisite da tastiera, scrivere un programma in linguaggio C che mediante uso di funzione (passare le due matrici e ritornare per valore la risposta…) determini se una di esse è sottomatrice dell’altra.
Le dimensioni delle matrici devono essere max 5x5"

Qualcuno che sia in grado di aiutarmi perchè la parte dell'input sono riuscito a svolgerla ma il controllo non è corretto e non riesco a farlo
#include <stdio.h>
#include <stdlib.h>	

int main(){
	
	int n,m,r,c,i,j,A[5][5],B[5][5],esito;

/*Inserimento delle righe e colonne  della matrice A*/	
do{
    
	printf("Quante righe vuoi inserire nella prima matrice (MAX 5 MIN 1)\n==> ");
    scanf("%d",&n);
    
}while((n<1)||(n>5));

do{
    printf("Quante colonne vuoi inserire nella prima matrice (MAX 5 MIN 1)\n==> ");
    scanf("%d",&m);
    
}while((m<1)||(m>5));

system("cls");

/*Inserisco gli elementi della matrice di A*/
	printf("***********************\n");
	printf("*      MATRICE A      *\n");
	printf("*                     *\n");
	printf("***********************\n");

for(i=0;i<n;i++){
 for(j=0;j<m;j++){
    	
        printf("[%d][%d]==> ",i+1,j+1);
        scanf("%d",&A[i][j]);
}
}

/*Inserimento delle righe e colonne  della matrice B*/	
do{
    printf("Quante righe vuoi inserire nella seconda matrice (MAX 5 MIN 1)\n==> ");
    scanf("%d",&r);
    
}while((r<1)||(r>5));

do{
    printf("Quante colonne vuoi inserire nella seconda matrice (MAX 5 MIN 1)\n==> ");
    scanf("%d",&c);
    
}while((c<1)||(c>5));	

/*Inserisco gli elementi della matrice di A*/
	printf("***********************\n");
	printf("*      MATRICE B      *\n");
	printf("*                     *\n");
	printf("***********************\n");

for(i=0;i<r;i++){
 for(j=0;j<c;j++){
        printf("[%d][%d]==> ",i+1,j+1);
        scanf("%d",&B[i][j]);
}
}	

/*Funzione dove controllo se la matrice B è sotto matrice di A*/

sottomatrice(&A[5][5],&B[5][5],&n,&m,&r,&c,&esito);	

if((esito==1)||(esito==0)){
	
	printf("La matrice B e' sottomatrice di A\n");
}else{
	printf("La matrice B non e' sottomatrice di A\n");	
}
return 0;
}

void sottomatrice( int d[5][5],int e[5][5],int *x,int *y,int *z,int *v,int *e){
	int i,j,i2,j2;
	
	for(i=0;i<*x;i++){
	for(j=0;j<*y;j++){
	 for(i2=0;i2<*z;i2++){
	 for(j2=0;j2<*v;j2++){
	 		
		if(d[i][j]==e[0][0]){
		if(d[i][j]==e[1][1]){
		
		 *e=1;
		}else{
		 *e=0;	
		}
		
		}
		
	 }
	 }	
	
    }
	}
}

1 Risposte

  • Re: Determinare se una matrice è sottomatrice dell'altra

    Ciao, al fine di rendere il codice meno ridondante ti suggerisco di implementare una funzione anche per l'inserimento della singola matrice.

    Relativamente al problema, date due matrici A e B, se ho ben capito devi controllare se A è sottomatrice di B o se B è sottomatrice di A. Per il momento ti stai concentrando solo sul secondo punto (B sottomatrice di A), ma per iniziare va bene.
    Come prima cosa mi chiederei quante volte la matrice B può essere contenuta in A. Per capire meglio cosa intendo dai un'occhiata alla seguente immagine:


    Sulla matrice A sono evidenziate in rosso tutte le possibili origini di B.
    La struttura di 4 cicli for innestati che hai abbozzato è la strada giusta, ma bisogna apportare qualche correzione. I primi due for devono far variare i e j sugli elementi evidenziati in figura, mentre il terzo e quarto for vanno bene. Basterà poi un solo if con la giusta condizione.

    Inizia a ragionarci, poi se serve aiuto chiedi pure.
Devi accedere o registrarti per scrivere nel forum
1 risposte