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: 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: #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? |
|
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. 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.. |
|
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ść? |
|
pekfos |
» 2015-08-11 15:20:08 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. |
|
Eryk Temat założony przez niniejszego użytkownika |
» 2015-08-11 15:30:25 Masz na myśli brak srand(time(NULL))? |
|
pekfos |
» 2015-08-11 15:55:50 |
|
Eryk Temat założony przez niniejszego użytkownika |
» 2015-08-11 22:29:47 Napisałem od nowa program. Teraz jest dobrze? #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; }
|
|
carlosmay |
» 2015-08-11 23:35:48 i nie zwracają wartości a ty napisałeś, że zwracają, oraz 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. |
|
« 1 » 2 |