Algorytm Karpa Rabina - problem z kompilacją

0

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;
}
1

No jak masz problem z kompilacją, to raczej nie działa :D A nawet jak już się skompiluję, to mam wątpliwości czy zadziała.

W taki sposób nie przekazuje się tablic wielowymiarowych do funkcji.

return pozycja_x, pozycja_y;

W taki sposób w językach C / C++ nie zwrócisz dwóch argumentów.

if(k == 8 && l == 2)
  znalazlem=1;

A to co ma oznaczać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1