Esercizio linguaggio -C
Salve ragazzi, ho un problema con un esercizio di ricerca di matrici in C e non riesco a capire il mio errore. Praticamente, data una matrice di dimensione N , e una più piccola di dimensione M bisogna vedere quante volte la piccola è contenuta nella grande. C'è qualcosa che non va nell'algoritmo perchè se la piccola è contenuta nelle zone ''inferiori'' della grande non funziona 
Grazie in anticipo!!
Grazie in anticipo!!
#include <stdio.h>
#include <stdlib.h>
#define N 5
#define M 2
int main()
{
int i,j,k,l,stampe=0,flag;
int mat1[N][N],mat2[M][M];
printf("immetti valori matrice piu' grande.n");
for(i=0;
i<N;
i++)
{
for(j=0;
j<N;
j++)
{
scanf("%2d",&mat1[i][j]);
}
}
for(i=0;
i<N;
i++)
{
for(j=0;
j<N;
j++)
{
printf("%d",mat1[i][j]);
}
printf("n");
}
printf("immetti valori matrice minore.n");
for(i=0;
i<M;
i++)
{
for(j=0;
j<M;
j++)
{
scanf("%d",&mat2[i][j]);
}
}
for(i=0;
i<M;
i++)
{
for(j=0;
j<M;
j++)
{
printf("%d",mat2[i][j]);
}
printf("n");
}
for(i=0;
i<N-M;
i++)
{
for(j=0;
j<N-M;
j++)
{
if(mat1[i][j]==mat2[0][0])
{
flag=1;
printf("n%d",flag);
for(k=0;
k<M;
k++)
{
for(l=0;
l<M;
l++)
{
if(mat1[i+k][j+l]!=mat2[k][l])
flag=0;
printf("n%d",flag);
}
}
if(flag)
{
stampe++;
}
}
}
}
printf("nLa matrice minore e' contenuta %d volta/e nella maggiore",stampe);
if(stampe==0)
printf("Non");
return 0;
}
Risposte
Ti consiglio di cercare di formattare il codice meglio, usando l'indentazione per delimitare i diversi blocchi. Non è infatti molto leggibile così com'è. La logica del programma mi sembra corretta, più tardi cerco di testarlo con un compilatore e vedere che cosa mi dice.
Grazie mille, purtroppo ho fatto copia e incolla dal compilatore
Il problema è nella condizione dei due cicli seguenti.
Dovresti fermarti a N-M compreso per cui la condizione corretta avrebbe dovuto essere:
for (i = 0; i < N - M; i++) {
for (j = 0; j < N - M; j++) {
Dovresti fermarti a N-M compreso per cui la condizione corretta avrebbe dovuto essere:
for (i = 0; i <= N - M; i++) {
for (j = 0; j <= N - M; j++) {
GRAZIE INFINITE!!!!!!!!!!!!!