Operacja na tablicach w pętli for

0

Witam.
powie ktoś dlaczego nie działa mi taka pętla ( program nie odczytuje prawidłowo wartości z pieniadzeWAutomacieTab[i])?

for (int i = 0; i<=10; i++){
pieniadzeWAutomacieTab[i] = pieniadzeWAutomacieTab[i] - resztaTab[i] + ileWybralUzytkownik [i];
}

a gdy zapisuję tak :
pieniadzeWAutomacieTab[0] = pieniadzeWAutomacieTab[0] - resztaTab[0] - ileWybralUzytkownik [0];
pieniadzeWAutomacieTab[1] = pieniadzeWAutomacieTab[1] - resztaTab[1] - ileWybralUzytkownik [1];

to działa poprawnie

1
  • Po pierwsze nie i++ tylko ++i;
  • Na pewno tak: i <= 10, a nie tak i < 10 gdzie 10 to rozmiar tablicy?
  • Nie używaj magic numbers. Zastosuj zamiast 10 zmienną, która będzie Ci trzymała rozmiar. Jak zajdzie potrzeba zmiany wartości to zmienisz ją w jednym miejscu, a nie np... w 25;
  • Popraw nazwy tych tablic, bo są dosyć nieczytelne i za długie;
  • Załączaj kod w znacznikach <code></code>;

Poza tym to powinno działać, pod warunkiem, że rozmiar każdej z tych tablic jest jednakowy. Może użyj debugera i sprawdź i-te wartości w poszczególnych iteracjach.

EDIT: W pętli wykorzystujesz dodawanie, a poza pętlą już tylko odejmowanie. Może dlatego Ci nie działa, bo wynik w pętli po prostu znosi się powiedzmy do zera itd. Popatrz dobrze.

1

Powinno działać. Co masz na myśli pisząc "program nie odczytuje prawidłowo" ?

0

Nie działa poprawnie znaczy, że coś źle przelicza z takiego czegoś:

 resztaTab[0] = obliczIleDodacNominalu (reszta, 20000);
            if (resztaTab[0] > (pieniadzeWAutomacieTab[0] - ileWybralUzytkownik [0])){
                resztaTab[0] = (pieniadzeWAutomacieTab[0] - ileWybralUzytkownik [0]);
            }
        reszta = reszta - resztaTab[0]*20000;

        resztaTab[1] = obliczIleDodacNominalu (reszta, 10000);
            if (resztaTab[1] > (pieniadzeWAutomacieTab[1] - ileWybralUzytkownik [1])){
                resztaTab[1] = (pieniadzeWAutomacieTab[1] - ileWybralUzytkownik [1]);
            }
        reszta = reszta - resztaTab[1]*10000;

Wiem że jest to strasznie brzydkie i niskopoziomowe dlatego chce powoli popoprawiać kod.
W powyższej części program dobierając pieniądze z pieniadzeWAutomacieTab[0] stopniowo zmniejsza resztę aż do 0.
i tu coś szwankuje

i tan warunek nie zostaje spełniony

 if (reszta == 0)

przy zastosowaniu pętli for

1

i myslisz ze ktos bedzie analizowal kod ktory jest zle napisany (co sam powiedziales)? Bez zadnego kontekstu co dane zmienne robia?

masz kilka opcji

  1. napisac to czytelnie
  2. podac polecenie co chcesz zrobic (bo zapewne da sie to zrobic duzo lepiej)
  3. uzyc debuggera i samemu zobaczyc co jest nie tak (podgladasz wartosci i wiesz dlaczego liczy tak a nie inaczej)

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