[Lekcja 18] Błędny wynik dodawania w zadaniu domowym.
Ostatnio zmodyfikowano 2012-03-12 21:29
abcde Temat założony przez niniejszego użytkownika |
[Lekcja 18] Błędny wynik dodawania w zadaniu domowym. » 2012-03-12 17:55:43 Rozwiązałem zadanie, ale mam problem bo jak wkleiłem do excela wszystkie te liczby to okazuje się, ze mój program błędnie oblicza sumę wszystkich liczb.
Więc tutaj pytanie gdzie robię błąd?
Kod
#include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba[ 10 ]; int proby = 0; do { int liczba =( rand() % 7 ) + 4; proby++; std::cout << liczba << std::endl; } while( proby <= 10 ); int suma; do { suma = liczba[ proby ]; proby++; } while( proby <= 10 ); std::cout << "Suma wszystkich liczb=" << suma << std::endl; return 0; }
|
|
jsc |
» 2012-03-12 18:00:06 Po pierwsze nie zainicjowałeś wartości początkowej zmiennej suma, a po drugie to zwykłe przypisanie aktualnej wartości do zmiennej suma. |
|
Thud |
» 2012-03-12 18:02:03 #include <iostream> #include <cstdlib> #include <ctime> int main() { srand( time( NULL ) ); int liczba[ 10 ]; int proby = 0; do { int liczba =( rand() % 7 ) + 4; proby++; std::cout << liczba << std::endl; } while( proby <= 10 ); int suma; do { suma = liczba[ proby ]; proby++; } while( proby <= 10 ); std::cout << "Suma wszystkich liczb=" << suma << std::endl; return 0; } To tak na szybko. |
|
jsc |
» 2012-03-12 18:07:40 Zastanawiam się czy nie wychodzisz poza zakres |
W pierwszym wypadku się mieści, ale w drugim dlatego, że nie wyzerowano zmiennej próby, to rzeczywiście jest po zasięgiem (i to kompletnie). Wyjaśnij dlaczego tak daleko to zrobiłeś, nie mogłeś wcześniej? |
Dobra praktyka podpowiada, aby zmienną deklarować jak najbliżej pierwszego użycie, tylko nie wszystkich językach się to da np. w Pascalu. |
|
Thud |
» 2012-03-12 18:14:36 Jestem przyzwyczajony do czegoś zupełnie odwrotnego. Deklaruję zmienne na początku.
Wiem wtedy w którym miejscu są...
Argh, z przekroczeniem zakresu w pierwszym przypadku nie popatrzałem, mój błąd. Nie ma tam niczego co potrzebuje indeksu. |
|
jsc |
» 2012-03-12 18:20:51 Nie ma tam niczego co potrzebuje indeksu. |
Drugie niedopatrzenie. Tablica liczba go potrzebuje, a nie ma i ciekawe jak to w ogóle się kompiluje. PS. Nie zauważyłem przesłonięcia definicji, ale to z kolej powoduje, że się sypie cała logika programu. |
|
Thud |
» 2012-03-12 18:25:02 No właśnie zdziwiłem się bo u mnie się kompiluje.
To co napisałem odnosi się do stanu kodu jaki napisał kolega. Nie widziałem tam żadnego indeksu. I jak napisałeś, przesłonięta definicja. |
|
jsc |
» 2012-03-12 18:30:06 I właśnie te przesłonięcie powoduje błędne wyniki, po prostu pętla dodająca operuje na śmieciach. |
|
« 1 » 2 |