Esercizio linguaggio -C

marcomezzolla
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!!

#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
apatriarca
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.

marcomezzolla
Grazie mille, purtroppo ho fatto copia e incolla dal compilatore

apatriarca
Il problema è nella condizione dei due cicli seguenti.
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++) {

marcomezzolla
GRAZIE INFINITE!!!!!!!!!!!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.