Ciao a tutti, e grazie in anticipo a chi proverà a risolvere il mio problema.
Essenzialmente devo acquisire da tastiera una matrice NxN grande e una più piccola matrice MxM (con ovviamente M<N), per poi ricercare se e quante volte la matrice piccola è contenuta in quella grande.
La mia idea di base è : scandire ogni sottomatrice MxM della matrice grande, e confrontare ogni elemento con il corrispettivo elemento della matrice piccola, ogni volta che tale uguaglianza si verifica vera, count aumenta di una unità. Ogni volta che count raggiunge il valore NxN vuol dire che la matrice piccola è stata trovata il quella grande
In realtà mi sembra un esercizio abbastanza banale, ma non riesco a capire come impostare i valori dei cicli for vari. (Per velocizzare le prove, ho già allocato preventivamente i valori delle matrici).
#include <stdio.h>
#include <stdlib.h>
#define N 5
#define M 2
int main()
{
int matrice_grande[N][N] = {{1,23,13,22,6},{5,1,23,44,-3},{11,5,1,88,6},{88,22,11,9,15}};
int matrice_piccola[M][M] = {{1,23},{5,1}};
int i,j,k,z;
int count =0 , occorrenze=0;
/*printf("Inserisci gli elementi della matrice di dimensione %d %d\n", N , N);
for(i=0 ; i<N; i++)
for (j=0 ; j<N ; j++)
scanf("%d", &matrice_grande[j]);*/
/*printf("Inserisci gli elementi della matrice di dimensione %d %d\n", M , M);
for ( i=0; i<M;i++)
for(j=0; j<M ; j++)
scanf("%d", &matrice_piccola[j]);*/
for(i=N-M-pr ; i<N; i++)
for(j=0 ; j<N && j<pc; j++)
for( k = 0; k<M ; k++)
for (z=0 ; z<M ; z++)
{if (matrice_grande[z] == matrice_piccola[k][j])
count++;
else count=0;
if (count == M*M){
occorrenze++;
count=0;}
}
printf("La matrice di dimensione %d %d si trova %d volte nella matrice di dimensione %d %d \n", M,M, occorrenze, N , N);
return 0;
}
MATRICE GRANDE
1 23 13 22 6
5 1 23 44 -3
11 5 1 88 6
88 22 11 9 15
MATRICE PICCOLA
1 23
5 1
(In questo esempio le occorrenze sono due)
13 17 26 46 3