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

Rozdział 19. O co chodzi?

Ostatnio zmodyfikowano 2014-03-15 20:42
Autor Wiadomość
Ard123
Temat założony przez niniejszego użytkownika
Rozdział 19. O co chodzi?
» 2014-03-15 20:21:48
Zadanie domowe
Napisz program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je i wynik wypisze na ekran. Wszelkie operacje mają zostać zrealizowane w oparciu o funkcje. Tablica ma być zadeklarowana w funkcji main. Oczekiwane funkcje:

    Wypełnienie tablicy o podanym rozmiarze losowymi liczbami z przedziału podawanego przez argumenty funkcji.
    Sumowanie określonej ilości liczb znajdujących się w tablicy i zwrot wyniku.
    Wypisywanie zawartości tablicy.

Przykładowa implementacja funkcji main:
C/C++
int main()
{
    int tablica[ 999 ];
    wylosujLiczby( tablica, 999, 4, 10 );
    wypiszLiczby( tablica, 999 );
    int iSuma = obliczSume( tablica, 999 );
    std::cout << "Suma liczb wynosi: " << iSuma << std::endl;
    return 0;
}

Witam, mam problem napisałem ten program z zadania domowego, lecz nie działa tak jak trzeba. Nie widzę błędu, ale coś jest nie tak. Program źle sumuje liczby. Wynik po prostu jest dużo za duży. Domyślam się, że coś z warunkami zakończeń funkcji jest coś nie tak.
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

int wylosujLiczby( int Liczby[], int limit, int przedzialOd, int przedzialDo )
{
    srand( time( NULL ) );
    rand();
    do
    {
        Liczby[ limit ] = rand() %( przedzialDo + 1 - przedzialOd ) + przedzialOd;
        limit--;
    } while( limit > 0 );
   
}

int wypiszLiczby( int Liczby[], int limit )
{
    do
    {
        std::cout << Liczby[ limit ] << std::endl;
        limit--;
    } while( limit > 0 );
   
}
int obliczSume( int Liczby[], int limit )
{
    int suma;
    do
    {
        suma = suma + Liczby[ limit ];
        limit--;
    } while( limit > 0 );
   
    return suma;
}

int main()
{
    int tablica[ 999 ];
    wylosujLiczby( tablica, 999, 4, 10 );
    wypiszLiczby( tablica, 999 );
    int iSuma = obliczSume( tablica, 999 );
    std::cout << "Suma liczb wynosi: " << iSuma << std::endl;
    return 0;
}
A i jeszcze jedno, gdy to pisałem to w  funkcji losującej zamiast
( przedzialDo + 1 - przedzialOd )
 napisałem
( przedzialDo++ - przedzialOd )
 a liczby losowały się ze złego przedziału. Tutaj rodzi się pytanie czemu? Przecież to praktycznie to samo. Sytuacja odwrotna była przy
limit--
, gdy napisałem
limit - 1
 to pojawiał się błąd.
P-106481
SeaMonster131
» 2014-03-15 20:29:59
Nadaj początkową wartość zmiennej
int suma;
. Po drugie wychodzisz w funkcjach poza zakres tablicy, powinien być od 0 do 998 włącznie, a nie od 1 do 999 włącznie.

Zamiast postinkrementacji:
C/C++
( przedzialDo++ - przedzialOd )
użyj preinkrementacji:
C/C++
( ++przedzialDo - przedzialOd )

» Kurs C++ » Poziom 1Operacje matematyczne lekcja - Inkrementacja i dekrementacja
P-106484
Ard123
Temat założony przez niniejszego użytkownika
» 2014-03-15 20:42:06
Dzięki, poprawiłem. Ale próbowałem już preinkrementacji i postinkrementacji a nawet nawiasów ( pomyślałem że ++  nie może stać bezpośrednio przed minusem ) brak efektów.
P-106489
« 1 »
  Strona 1 z 1