Rozdział 19 - Zadanie domowe
Ostatnio zmodyfikowano 2016-03-31 14:32
piotrekw Temat założony przez niniejszego użytkownika |
Rozdział 19 - Zadanie domowe » 2016-03-31 14:03:59 Witam Mój kod do tego zadania wygląda tak: #include <iostream> #include <cstdlib> #include <ctime>
int wylosuj( int t[], int rozmiar, int start, int stop ) { int licznik = 0; int wynik; do { t[ licznik ] =(( std::rand() %( stop -( start - 1 ) ) + start ) ); licznik++; } while( licznik < rozmiar ); wynik = t[ rozmiar ]; return wynik; }
int wypisz( int t[], int rozmiar ) { int licznik = 0; do { std::cout << t[ licznik ] << std::endl; licznik++; } while( licznik < rozmiar ); return 0; }
int obliczSume( int t[], int rozmiar ) { int licznik = 0; int suma = 0; do { suma += t[ licznik ]; ++licznik; } while( licznik < rozmiar ); return suma; } int main() { int tablica[ 999 ]; srand( time( NULL ) ); wylosuj( tablica, 999, 4, 10 ); wypisz( tablica, 999 ); int suma = obliczSume( tablica, 4 ); std::cout << "Suma rekordow wynosi: " << suma << std::endl; return 0; }
Wszystko działa ok do czasu aż argument funkcji obliczSume jest większy od 4. Jeśli dam np. 3 lub 2 to już nie sumuje mi dwóch pierwszych rekordów tylko wypisuje dziwny wynik. Czy gdzieś w kodzie popełniłem błąd ? |
|
mateczek |
» 2016-03-31 14:24:17 u mnie działa. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int wylosuj( int t[], int rozmiar, int start, int stop ) { int licznik = 0; int wynik; do { t[ licznik ] =(( std::rand() %( stop -( start - 1 ) ) + start ) ); licznik++; } while( licznik < rozmiar ); wynik = t[ rozmiar - 1 ]; return wynik; }
int wypisz( int t[], int rozmiar ) { int licznik = 0; do { std::cout << t[ licznik ] << " "; licznik++; if(( licznik % 30 ) == 0 ) cout << endl; } while( licznik < rozmiar ); return 0; }
int obliczSume( int t[], int rozmiar ) { int licznik = 0; int suma = 0; do { suma += t[ licznik ]; ++licznik; } while( licznik < rozmiar ); return suma; } int main() { int tablica[ 999 ]; srand( time( NULL ) ); wylosuj( tablica, 999, 4, 10 ); wypisz( tablica, 999 ); int suma = obliczSume( tablica, 2 ); std::cout << "Suma rekordow wynosi: " << suma << std::endl; return 0; } |
|
piotrekw Temat założony przez niniejszego użytkownika |
» 2016-03-31 14:32:11 Poprawiłem tę linijkę w funkcji wylosuj na: wynik = t[rozmiar - 1]; - wciąż nie sumuje mi podanych wyników. Przykładowo: Jeśli argument 'rozmiar' funkcji obliczSume jest 2 to dostaje wynik sumy: 14 mimo, że dwa pierwsze rekordy to 7 i 5. EDIT: Hmmm dziwne.. bo skopiowałem Twój kod i działa, więc dlaczego mój nie ? EDIT2: Moja funkcja wypisz wszystko psuje bo skopiowałem swoją do Twojego kodu to znów przestało działać, więc wie ktoś na czym polega problem w funkcji wypisz ? EDIT3: Do mojego kodu wstawiłem dwie linijki std::cout << tablica[ 0 ] << std::endl; std::cout << tablica[ 1 ] << std::endl;
I wyskakuje suma rekordów: 8 tablica[0] ma wartość 4 i tablica[1] ma wartość 4, więc sumuje dobrze. Natomiast dwa pierwsze wyniki w wylosowanych liczbach które mi wypisało na początku to: 6 i 9. O co chodzi ? Dodałem w funkcji wypisz linijkę: std::cout << licznik; i program pokazuje mi wyniki od 853 do 998. Dlaczego ? OK wychodzi na to, że konsola ogranicza wyświetlanie wyników. EDIT4: Problem rozwiązany, wystarczyło usunąć w funkcji wypisz std::endl ze względu na ograniczenie wyświetlania w konsoli. |
|
« 1 » |