Aughton Temat założony przez niniejszego użytkownika |
Przekazywanie tablic jednowymiarowych - lekcja 19 » 2014-05-17 21:01:49 Witam. Mam problem z zadaniem: 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; }
I zrobiłem do tej pory to: #include <iostream> #include <ctime> #include <cstdlib> using namespace std; int wylosujLiczby( int t1[], int a, int b, int c ) { srand( time( NULL ) ); do { t1[ a ] =( rand() % 7 ) + 4; a++; } while( a < 999 ); }
int wypiszLiczby( int t1[], int b ) { cout << "Wylosowane liczby to: "; t1 = 0; b = 0; do { cout << t1[ b ] << ", "; } while( b < 999 ); } int obliczSume( int t1[], int c ) { t1 = 0; c = 0; int suma = 0; do { suma += t1[ c ]; c++; } while( c < 999 ); } int main() { int tablica[ 999 ]; wylosujLiczby( tablica, 999, 4, 10 ); wypiszLiczby( tablica, 999 ); int iSuma = obliczSume( tablica, 999 ); cout << "Suma liczb wynosi: " << iSuma << endl; return 0; }
Kompilator nie znajduje żadnych błędów, ale po uruchomieniu program buguje się (w sensie wyskakuje komunikat MS, że wystąpił błąd i tyle). Co jest źle? |
|
pekfos |
» 2014-05-17 21:05:23 Niepoprawnie używasz argumentów funkcji. PS. JAK ZAZNACZYĆ KOD, ŻEBY POKAZANY BYŁ W "TRYBIE" C++, A NIE NA CZYSTO? NIECZYTELNE STRASZNIE, SORY. |
.. |
|
Aughton Temat założony przez niniejszego użytkownika |
» 2014-05-17 21:17:58 czyli jak to powinno wyglądać? nie chodzi mi o przepisanie całego programu żeby działal, tylko zebyscie nakierowali ;v |
|
pekfos |
» 2014-05-17 21:20:43 Wszystkie luźne inty przekazywane do funkcji są niepoprawnie użyte w implementacji funkcji - czyt. niezgodnie z przeznaczeniem. |
|
Moorfox |
» 2014-05-18 00:18:42 Nie pisz programu o funkcjach, póki nie wiesz jak działają funkcje, kompletnie tego nie rozumiesz... wylosujLiczby( tablica, 999, 4, 10 ); <--- Takie wywołanie funkcji A ty ja definiujesz, tak: int wylosujLiczby( int t1[], int a, int b, int c ) { srand( time( NULL ) ); do { t1[ a ] =( rand() % 7 ) + 4; a++; } while( a < 999 ); }
Co oznacza t1 = tablica (w duzym uproszczeniu) a = 999 b = 4 c = 10 int wylosujLiczby( int t1[], int a, int b, int c ) { srand( time( NULL ) ); do { t1[ a ] =( rand() % 7 ) + 4; a++; } while( a < 999 ); } zastanawiales sie po co ci te argumenty b i c ? bo ich nie wykorzystujesz przeciez to od ilu do ilu chccesz losowac czyli mozna zapisac to (rand() % c-b+1) + b co jest równoważne z (rand() % 10-4+1) + 4 = (rand() % 7) + 4 jakbys chcial od 20 do 23, czyli b = 20 c = 23 to znowu wzor dziala (rand() % 23-20+1)+20 = (rand() % 4) + 20 Kolejna uwaga przestan uzywac petli while i do while staraj uzywac sie for. Kolejna... twoja funkcja jak pisze w deklaracji zwraca int, bo int wylosujLiczby(), to gdzie twoj return int ??. Po za tym nie potrzebny ci tutaj tym zwracany wystarczy void Pprawnie funkcja wylosujLiczby powinna wygladac void wylosujLiczby( int t1[], int a, int b, int c ) { srand( time( NULL ) ); int temp = c - b + 1 for( int i = 0; i < a; i++ ) { t1[ i ] =( rand() % temp ) + b; } }
Ewentualnie jesli chcesz petle do while void wylosujLiczby( int t1[], int a, int b, int c ) { srand( time( NULL ) ); int i = 0; int temp = c - b + 1; do { t1[ i ] =( rand() % temp ) + b; i++; } while( i < a ); } Reszte funkcji sam popraw[/i] |
|
mody |
też mam problem z zadaniem z lekcji 19tej » 2014-06-12 10:01:13 << removed - załóż własny temat >> |
|
« 1 » |