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!