W trakcie wykonywania pętli int zmienia wartość bez powodu.

2016-09-13 09:16

Rejestracja: 3 lata temu

Ostatnio: 10 godzin temu

0

Jest to część kodu do sprawdzania poprawności wypełnionej planszy sudoku. Problem w tym, że gdy wpisuję liczby(te które powinny być) a więc program kończy obieg pętli z wartością zmiennej "dzielenie = 9" to pomiędzy tym break a if(dzielenie !=9) wartość dzielenia cofa się do 8. Ktoś widzi jakiś błąd w kodzie?

int dzielenie = 1;
for (int test = 0; test < liczba_test; test++) {
    for (int linia = 0; linia < 9; linia++) {
        for (int kolumna = 0; kolumna < 9; kolumna++) {
            if (tablica[test][linia][kolumna] / dzielenie == 1) {
                if (tablica[test][linia][kolumna] / 9 == 1) {
                    break;
                }

                dzielenie++;
                kolumna = 0;
            }
        }
        if (dzielenie != 9) {
            break;
        }
        dzielenie = 1;
    }
}
edytowany 2x, ostatnio: furious programming, 2016-09-13 18:31

Pozostało 580 znaków

2016-09-13 09:28
Moderator

Rejestracja: 16 lat temu

Ostatnio: 5 godzin temu

Akurat cały ten kod nie ma sensu z dwóch powodów:

  1. bo int/int = int więc na przykład 3/2 == 1 jest prawdą
  2. Bo skoro w tablicy liczby są wpisane w losowej kolejności to dlaczego niby nie moze się zdarzyć że tablica[test][linia][kolumna] juz dla pierwszej kolumny wynosi 9 i od razu skończysz pętlę z dzielenie równym 1?

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Racja >.> Pozmieniam to na zmiennoprzecinkowe. Tak głupiego błędu dawno nie zrobiłem. - xDevil2 2016-09-13 09:33
Nie no nie żartuj, to nadal ma mało sensu. Jeśli juz to zrób tablicę bool[9] gdzie zaznaczysz sobie padające liczby na przykład ;] - Shalom 2016-09-13 09:34
Przy zmiennoprzecinkowych przyrównywanie do konkretnej wartości może nie mieć sensu, jeśli wykonujesz operacje na liczbach - kaczus 2016-09-13 09:36
Yup, zmieniłem na zmiennoprzecinkowe i nadal nie działa. Napiszę od zera i spróbuję tak jak mówisz z tablicą bool - xDevil2 2016-09-13 09:38
Jeśli to jest c++ to mozesz użyć też unordered_set, wrzucic do niego liczby z kolumny a potem tylko sprawdzić czy set ma 9 elementów i czy wszystkie są w zakresie. - Shalom 2016-09-13 09:41
http://eduinf.waw.pl/inf/utils/001_2008/0119.php - info o porównaniu liczb zmiennoprzecinkowych. - carlosmay 2016-09-13 10:19

Pozostało 580 znaków

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