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

Zadanie domowe, lekcja 19

Ostatnio zmodyfikowano 2015-08-12 22:26
Autor Wiadomość
Eryk
Temat założony przez niniejszego użytkownika
Zadanie domowe, lekcja 19
» 2015-08-11 14:23:18
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;
}


Mój program:

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int wylosuj_liczby( int tab[], int start, int stop )
{
    int i = 0;
    do
    {
        tab[ i ] =( rand() %( start + 1 ) ) + stop;
    } while( i < 999 );
   
}
int zsumuj_liczby( int tab[] )
{
    int suma = 0;
    int i = 0;
    do
    {
        suma += tab[ i ];
        i++;
       
    } while( i < 999 );
   
    return suma;
}

int wypisz_liczby( int tab[] )
{
    int i = 0;
    do
    {
        cout << tab[ i ] << endl;
        i++;
       
    } while( i < 999 );
   
}

int main()
{
    int tablica[ 999 ];
    wylosuj_liczby( tablica, 6, 4 );
    int iSuma = zsumuj_liczby( tablica );
    wypisz_liczby( tablica );
    cout << "Suma: " << iSuma;
}

Czy popełniłem gdzieś błąd? Dlaczego w przykładowej implementacji funkcji main w miejscu argumentów, znajduje się 999?
P-136058
pekfos
» 2015-08-11 14:45:29
Dlaczego w przykładowej implementacji funkcji main w miejscu argumentów, znajduje się 999?
Bo rozmiar tablicy ma nie zależeć od funkcji, która coś na niej robi.

C/C++
tab[ i ] =( rand() %( start + 1 ) ) + stop;
Co..? Maksymalna losowana liczba to w twoim kodzie start + stop. Szkoda, że nie ma napisane w kursie, że trzeba użyć tego przykładowego maina (czy jest..?). Zmieniłeś znaczenie i wartości argumentów by pójść na łatwiznę i dać rację bytu temu losowaniu..
P-136063
Eryk
Temat założony przez niniejszego użytkownika
» 2015-08-11 15:17:52
Czyli wielkość tablicy mam określić zmienną, zaś ta zmienna ma być argumentem w wywołanej funkcji, która znajduje się w main. Rozumiem.


Tylko nie rozumiem jednego. Program ma losować od 4 do 10 zatem

( rand() % 7 ) + 4


W przykładowej implementacji podano 4 i 10. Czyżbym musiał obniżyć wartość?
P-136067
pekfos
» 2015-08-11 15:20:08
C/C++
( rand() % 7 ) + 4
W przykładowej implementacji podano 4 i 10. Czyżbym musiał obniżyć wartość?
Wartość po % to nie koniec przedziału. Masz w kursie podany wzór.
P-136068
Eryk
Temat założony przez niniejszego użytkownika
» 2015-08-11 15:30:25
Masz na myśli brak srand(time(NULL))?
P-136069
pekfos
» 2015-08-11 15:55:50
Nie.. Ale to też do poprawy.
C/C++
int wylosowana_liczba =( std::rand() % ile_liczb_w_przedziale ) + startowa_liczba;
» Kurs C++ » Poziom 2Pseudolosowe liczby całkowite lekcja
P-136070
Eryk
Temat założony przez niniejszego użytkownika
» 2015-08-11 22:29:47
Napisałem od nowa program. Teraz jest dobrze?
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int wylosujLiczby( int tab[], int przedzial_tablicy, int four, int ten )
{
    int i = 0;
    srand( time( NULL ) );
    do
    {
        tab[ i ] =( rand() %( ten - four + 1 ) ) + four;
        i++;
    } while( i < przedzial_tablicy );
   
}

int wypiszLiczby( int tab[], int przedzial_tablicy )
{
    int i = 0;
    do
    {
        cout << tab[ i ] << endl;
        i++;
    } while( i < przedzial_tablicy );
   
}
int obliczSume( int tab[], int przedzial_tablicy )
{
    int i = 0;
    int suma;
    do
    {
        suma += tab[ i ];
        i++;
    } while( i < przedzial_tablicy );
   
    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;
}
P-136081
carlosmay
» 2015-08-11 23:35:48
C/C++
int wylosujLiczby
i
C/C++
int wypiszLiczby
nie zwracają wartości a ty napisałeś, że zwracają,
oraz
C/C++
int suma;
do
{
    suma += tab[ i ];
    i++;
} while( i < przedzial_tablicy );

nie masz wartości początkowej dla sumy, więc program zaczyna dodawać liczby od wartości śmieciowej.
P-136083
« 1 » 2
  Strona 1 z 2 Następna strona