Linguaggio C: trovare matrice all'interno di un'altra matrice
Ciao a tutti!
Devo scrivere un programma per verificare la presenza di una matrice MxM all'interno di un'altra matrice di dimensione maggiore NxN. Secondo voi il programma che ho scritto è corretto?? Grazie a chi volesse aiutarmi
Devo scrivere un programma per verificare la presenza di una matrice MxM all'interno di un'altra matrice di dimensione maggiore NxN. Secondo voi il programma che ho scritto è corretto?? Grazie a chi volesse aiutarmi

#include <stdio.h> #include <stdlib.h> #define N 9 #define M 3 int main() { int i,j,k,h,flag; int matrice1[N][N], matrice2[M][M]; for(i=0;i<N-M+1;i++){ for(j=0;j<N-M+1;j++){ flag=1; for(k=0 && flag==1;k<N;k++){ for(h=0 && flag==1;h<M;h++){ if(matrice1[i+k][j+h]!=matrice2[k][h]) flag=0; } } } } if(flag==1){ printf("match a partire dalla posizione %d %d \n",i,j); } else{ printf("no match"); } return 0; }
Risposte
Il principio generale mi sembra corretto, a parte per la mancanza della inizializzazioni delle matrici, e il fatto che hai scritto la condizione sul flag nelle assegnazioni invece che nelle condizioni del for. Il compilatore non ti dà warning o errori?
ah già! non sono inizializzate perché in realtà questa è solo una parte dell'intero esercizio..
comunque nè warning nè errori ma non mi funziona
comunque nè warning nè errori ma non mi funziona


Conoscendo solo le basi del c++ mi risulta difficile capire dove si trova l'errore, quindi ti posto il programma che ho fatto (sembra funzioni), così magari riesci a capire dove sbagli.
#include <iostream> using namespace std; void inserisci_matrice(int a, int v[20][20], int b) { for(int i = 0; i < a; i++) { cout << endl; for(int j = 0; j < a; j++) { cout << "v" << b << "[" << i << "][" << j << "] = "; cin >> v[i][j]; } } } void mostra_matrice(int a, int v[20][20], int b) { cout << endl << "v" << b << ":" << endl; for(int i = 0; i < a; i++) { cout << endl; for(int j = 0; j < a; j++) { cout << v[i][j] << "\t"; } } cout << endl; } int main() { int N, M, v1[20][20], v2[20][20], conta = 0; bool x; cout << "N = "; cin >> N; cout << "M = "; cin >> M; inserisci_matrice(N, v1, 1); inserisci_matrice(M, v2, 2); mostra_matrice(N, v1, 1); mostra_matrice(M, v2, 2); for(int i = 0; i < N - M + 1; i++) { for(int j = 0; j < N - M + 1; j++) { x = 0; if(v1[i][j] == v2[0][0]) { x = 1; for(int k = 0; k < M; k++) { for(int q = 0; q < M; q++) { if (v1[i + k][j + q] != v2[k][q]) { x = 0; break; } } if (x == 0) { break; } } } if (x == 1) { conta++; } } } cout << endl << "Numero di volte che v2 e' contenuta in v1: " << conta; }
A prima vista saltano all'occhio un paio di errori. Ti direi di dare un'occhiata ai loops :
Inoltre non capisco se tu voglia verificare la presenza della sotto matrice o anche se è contenuta più volte, perché a questo punto dovesti o utilizzare delle variabili per segnarti la posizione dell'inizio della sotto matrice o spostare il printf all'interno dei primi 2 loops.
Spero che ti sia utile
Inoltre non capisco se tu voglia verificare la presenza della sotto matrice o anche se è contenuta più volte, perché a questo punto dovesti o utilizzare delle variabili per segnarti la posizione dell'inizio della sotto matrice o spostare il printf all'interno dei primi 2 loops.
Spero che ti sia utile

grazie mille a tutti!
