Zmienna zmienia swoją wartość po wyjściu z pętli.

Odpowiedz Nowy wątek
2014-11-26 15:16
0

Cześć,
mam problem z funkcją, która za zadanie ma minimalizować każdą wartość w wierszu o wartość minimalnego elementu.

Oto kod:

    void minimumWiersz(int **mapa, int rozmiar, int dolneOszacowanie)
    {
        int minimum = 999999;       // zmienna przechowująca minimum w wierszu

        for (int i = 0; i < rozmiar; i++)
        {
            for (int j = 0; j < rozmiar; j++)
            {
                if (mapa[i][j] < minimum)       // znajdowanie minimum w wierszu
                    minimum = mapa[i][j];
            }
            if (minimum =! 0)       // odejmujemy wierszami tylko wtedy, gdy znalezione minimum jest > od 0
            {
                for (int k = 0; k < rozmiar; k++)   // odejmowanie znalezionego minimum od całego wiersza
                {
                    mapa[i][k] -= minimum;
                }
            }
            dolneOszacowanie += minimum;
            minimum = 999999;
        }
    }

Pod debuggerem odkryłem, że po wyjściu z pierwszej pętli wartość zmiennej minimum jest prawidłowa, zaś po wejściu do pętli kolejnej (ze zmienną iteracyjną k) wartość minimum zmienia się na 1. Dzieje się tak dla wszystkich wierszy w tablicy (tzn. za każdym razem odejmowana jest 1).
Przykładowa tablica wartości (po lewej przed, po prawej po przejściu algorytmu).
user image

Z góry dziękuję za wszystkie odpowiedzi.
Pozdrawiam.

edytowany 1x, ostatnio: Mefa2, 2014-11-26 15:17

Pozostało 580 znaków

2014-11-26 15:18
 if (minimum =! 0)

=! to nie to samo co !=

Ale żenujący błąd, masz oczywiście rację. Dzięki! - Mefa2 2014-11-26 15:24

Pozostało 580 znaków

2014-11-26 15:21
1

Masz minimum = !0 zamiast minimum != 0.

Robisz negację 0, co daje nam 11111111111111111111111111111111(2) a to jest -1(10) i chyba taką wartość przyjmuje?

edytowany 5x, ostatnio: Sarrus, 2014-11-26 16:03
Ale żenujący błąd, masz oczywiście rację. Dzięki! - Mefa2 2014-11-26 15:24
Nie, to nie jest negacja bitowa, więc pewnie kompilator po prostu zrobi !0 == 1 - twonek 2014-11-26 15:28
Ta błędna operacja ustawia mi wartość minimum = 1 - Mefa2 2014-11-26 15:30
no tak rozpędziłem się - Sarrus 2014-11-26 16:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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