Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SUDOKU] Funkcja sprawdzająca kwadrat działa jak chce (czyli źle).

Ostatnio zmodyfikowano 2014-12-06 23:05
Autor Wiadomość
Mr.Herbata
Temat założony przez niniejszego użytkownika
[SUDOKU] Funkcja sprawdzająca kwadrat działa jak chce (czyli źle).
» 2014-12-06 19:51:51
Cześć,
mam problem z tą o to funkcją:
C/C++
bool square( int y, int x, int nr ) { ///sprawdza kwadrat, y i x to są współrzędne kursora kiedy jest wpisywana cyfra nr
    int k = conventerx( x );
    int l = conventery( y );
    int r = ceil(( l + 1 ) / 3.); /// ceil zaokrągla wynik do góry, czyli jak 1 podzieli przez 3 to wyjdzie 1
    int c = ceil(( k + 1 ) / 3.);
    for( int i =( r - 1 ) * 3; i <( r - 1 ) * 3 + 3; i++ ) {
        for( int j =( c - 1 ) * 3; j <( c - 1 ) * 3 + 3; j++ ) {
            if( tab[ j ][ i ] == nr )
                 return 0; } }
   
    return 1;
   
   
}
Zwraca zero wtedy kiedy nie powinna niestety...
Tutaj trochę większa część kodu:
C/C++
int conventery( int y ) { ///konwertuje wspolrzedna y na wspolrzedna w tablicy
    int k;
    for( int i = 1; i < 18; i += 2 ) {
        if( top + i == y )
             k = i / 2;
       
    }
    return k;
}

int conventerx( int x ) { ///konwertuje wspolrzedna x na wspolrzedna w tablicy
    int l;
    for( int i = 1; i < 26; i += 3 ) {
        if( side + i == x )
             l = i / 3;
       
    }
    return l;
}

bool linerow( int y, int x, int nr ) { ///sprawdza wiersz
    int i, j, k, l, g;
    k = conventery( y );
    for( j = 0; j < 9; j++ )
    {
        if( tab[ k ][ j ] == nr )
       
             return 0;
       
    }
    return 1;
   
}

bool linecolumn( int y, int x, int nr ) { ///sprawdza kolumne
    int i, j, k, l, g;
    k = conventerx( x );
    for( j = 0; j < 9; j++ )
    {
        if( tab[ j ][ k ] == nr )
       
             return 0;
       
    }
    return 1;
   
}

bool square( int y, int x, int nr ) { ///sprawdza kwadrat
    int k = conventerx( x );
    int l = conventery( y );
    int r = ceil(( l + 1 ) / 3.);
    int c = ceil(( k + 1 ) / 3.);
    for( int i =( r - 1 ) * 3; i <( r - 1 ) * 3 + 3; i++ ) {
        for( int j =( c - 1 ) * 3; j <( c - 1 ) * 3 + 3; j++ ) {
            if( tab[ j ][ i ] == nr )
                 return 0; } }
   
    return 1;
   
   
}
Funckje sprawdzające kolumny i wiersze działają dobrze.
P-122394
Rashmistrz
» 2014-12-06 19:56:40
Sprecyzuj problem.

Zwraca zero wtedy kiedy nie powinna niestety...
Jeśli zwraca jeden kiedy powinno być zero to możesz zanegować. :F
P-122395
Mr.Herbata
Temat założony przez niniejszego użytkownika
» 2014-12-06 20:01:30
No chodzi o to, że źle działa. Blokuje cyfry które nie powinny być w danym kwadracie blokowane, a w kwadracie mogą się znajdować cyfry od 1 do 9(każda tylko raz).
P-122397
Rashmistrz
» 2014-12-06 21:00:50
Nie mogę zrozumieć tego co zrobiłeś,
jak dla mnie za dużo obliczeń prefiksowych. :F

W sprawdzaniu kolumny, wiersza i kwadratu powinieneś pomijać
puste miejsca i miejsce w którym wstawiana jest cyfra :F
P-122401
Mr.Herbata
Temat założony przez niniejszego użytkownika
» 2014-12-06 21:20:39
Nie powinienem, bo funkcja sprawdzająca jest wywoływana przed wklepaniem wartości w tablicę ;) Tablica jest typu [9][9], wartości współrzędnych nie trzeba rozumieć, bo już są konwertowane na cyfry od 0 do <9 by tablica mogła je "obsłużyć". Moim zdaniem funkcja "square" ma sens. Mogę dać więcej kodu jak to działa jeśli będzie to pomocne ;)
P-122404
Rashmistrz
» 2014-12-06 21:29:27
Nie przekazujesz ani nie deklarujesz
tablicy
tab[][];
 w żadnej z funkcji.
Ona jest tablicą globalną?

//Podrzuć cały kod i planszę na której grałeś, spróbuję co w mojej mocy :-_/
P-122406
Mr.Herbata
Temat założony przez niniejszego użytkownika
» 2014-12-06 22:00:11
tak, ona jest globalna. Da się tu na PW wysyłać, bo w sumie to jest projekt na uczelnie, więc w tej chwili całego kodu publicznie nie mogę? :P
P-122413
pekfos
» 2014-12-06 22:11:59
Da się tu na PW wysyłać, bo w sumie to jest projekt na uczelnie, więc w tej chwili całego kodu publicznie nie mogę? :P
Nie da się. Projekty na zaliczenie powinno się wykonywać samodzielnie, a skoro i tak kodu nie możesz podać..
P-122416
« 1 » 2
  Strona 1 z 2 Następna strona