Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 18] Błędny wynik dodawania w zadaniu domowym.

Ostatnio zmodyfikowano 2012-03-12 21:29
Autor Wiadomość
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
C/C++
#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;
}
P-52483
jsc
» 2012-03-12 18:00:06
Po pierwsze nie zainicjowałeś wartości początkowej zmiennej suma, a po drugie
C/C++
suma = liczba[ proby ];
to zwykłe przypisanie aktualnej wartości do zmiennej suma.
P-52484
Thud
» 2012-03-12 18:02:03
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    srand( time( NULL ) );
    int liczba[ 10 ];
    int proby = 0;
   
   
    do
    {
        int liczba =( rand() % 7 ) + 4; //Błąd
        proby++;
        std::cout << liczba << std::endl;
       
    }
    while( proby <= 10 ); //Zastanawiam się czy nie wychodzisz poza zakres
   
    int suma; //Wyjaśnij dlaczego tak daleko to zrobiłeś, nie mogłeś wcześniej?
    //Gdzie wyzerowałeś licznik?
    do
    {
       
        suma = liczba[ proby ]; //Czyżby zabrakło znaku plus?
        proby++;
    } while( proby <= 10 ); //Zastanawiam się czy nie wychodzisz poza zakres
   
   
    std::cout << "Suma wszystkich liczb=" << suma << std::endl;
   
    return 0;
}

To tak na szybko.
P-52485
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.
P-52486
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.
P-52488
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.
P-52491
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.
P-52492
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.
P-52493
« 1 » 2
  Strona 1 z 2 Następna strona