Przerobiłem kod KR na 2d. Mam problem z kompilacją. W Codeblocks wyświetla się: : cannot convert 'int (*)[13]' to 'int**' for argument '1' to 'int wyszukanieKR(int**, int**)'|. Także nie jestem pewny czy w ogóle działa poprawnie kod bo nie mogę sprawdzić..
int licznik = 0;
int _hash(int start, int start2, int ile, int ile2, int **tab)
{
int suma = 0;
for(int i = 0; i < start + ile; i++)
for(int j = 0; j < start2 + ile2; j++)
suma += tab[i][j];
return suma;
}
int wyszukanieKR(int **tekst, int **wzorzec)
{
int hash_wzorzec = _hash(0, 0, 9, 3, wzorzec);
int hash_tekst = 0;
int pozycja_x = 0;
int pozycja_y = 0;
for(int i = 0; i < 84; i++)
{
for(int j = 0; j < 13; j++)
{
hash_tekst = _hash(i, j, 0, 0, tekst);
if(hash_wzorzec == hash_tekst)
{
bool znalazlem=0;
for (int k = 0; k < 9; k++)
{
for (int l = 0; l < 3; l++)
{
if (tekst[k+pozycja_x][l+pozycja_y] != wzorzec[k][l])
break;
if(k == 8 && l == 2)
znalazlem=1;
}
}
if(znalazlem)
return pozycja_x, pozycja_y;
licznik = licznik+1;
}
pozycja_x++;
}
pozycja_x = 0;
pozycja_y++;
}
return pozycja_x, pozycja_y;
}
int main()
{
int tekst[84][13];
int wzorzec[9][3];
for(int i=0; i<84; i++)
{
for(int j=0; j<13; j++)
cout << (tekst[i][j]=rand()%10) << " ";
cout<<endl;
}
for(int i=0; i<9; i++)
{
for(int j=0; j<3; j++)
cout << (wzorzec[i][j]=rand()%10) << " ";
cout<<endl;
}
cout << "\nWzorzec jest na " << wyszukanieKR(tekst, wzorzec)<< " miejscu" << endl;
//cout << "Suma wzorca: " << _hash(wzorzec, 0,4) << endl;
//cout << "Licznik:" << licznik;
return 0;
}