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ą: bool square( int y, int x, int nr ) { 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; } Zwraca zero wtedy kiedy nie powinna niestety... Tutaj trochę większa część kodu: int conventery( int y ) { int k; for( int i = 1; i < 18; i += 2 ) { if( top + i == y ) k = i / 2; } return k; }
int conventerx( int x ) { 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 ) { 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 ) { 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 ) { 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. |
|
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 |
|
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). |
|
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 |
|
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 ;) |
|
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 :-_/ |
|
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
|
|
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ć.. |
|
« 1 » 2 |