oregon ha scritto:
Nippolo smetti di provocare flame inutili
Ne sai una più del diavolo!
@cavamr
- innanzitutto al fine di rendere il codice più chiaro e leggibile ti consiglio di rispettare la spaziatura e l'indentazione e di racchiudere il corpo delle istruzioni di controllo (if, for, ...) tra parentesi graffe anche quando costituito da una sola riga di codice;
- almeno in questa fase iniziale, dove lo scopo è implementare la funzione trova_array(), perché perdere tempo con l'inserimento da tastiera? Meglio inserire i valori direttamente nel codice.
Sulla scorta di quanto appena detto, e volendo mostrarti come passare un array bidimensionale statico ad una funzione (non entro nei dettagli in quanto mi sembra di capire che tu non sia molto interessato all'argomento), si ottiene qualcosa del genere:
#include <iostream>
using namespace std;
const int RIG= 3;
const int COL= 4;
const int DIM= 3;
bool trova_array(int *v, int dim, int m[][COL], int rig, int col)
{
if(dim > col)
{
return false;
}
int cont;
for(int r = 0; r <= rig - dim; r++)
{
for(int c = 0; c <= col - dim; c++)
{
cont = 0;
for(int j = 0; j < dim; j++)
{
if(v[0 + j] == m[r + j][c + j])
{
cont++;
}
else
{
break;
}
}
if(cont == dim)
{
return true;
}
}
}
return false;
}
int main()
{
int m[RIG][COL] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{5, 5, 4, 2}};
int v[DIM] = {5, 4, 2};
cout << trova_array(v, DIM, m, RIG, COL) << endl;
}
Relativamente alla funzione ti chiedo:
- ipotizziamo di avere una matrice m 4x7 e un vettore v di 2 elementi, quante righe devo controllare prima di poter affermare che v non è contenuto nelle righe di m?
- tutta la parte racchiusa nel terzo for cosa dovrebbe fare secondo te? Perché sommi j anche all'indice r?