[Lekcja 18] Błąd przy wypisywaniu liczb
Ostatnio zmodyfikowano 2015-01-11 17:48
Motokami Temat założony przez niniejszego użytkownika |
[Lekcja 18] Błąd przy wypisywaniu liczb » 2015-01-10 19:49:26 #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
int randomNumber( int a, int b ) { int number = rand() %( b - a + 1 ) + a; return number; }
void drawNumbers( int a, int b, int container[], int counter ) { do { container[ counter ] = randomNumber( a, b ); counter--; } while( counter > 0 ); }
void displayAllNumbers( int container[], int counter ) { int i = 1; do { cout << i << ". " << container[ i ] << "\t"; i++; } while( i <= counter ); }
int main() { srand( time( NULL ) ); int containerForNum[ 999 ]; int initialNum = 4; int finalNum = 10; int quantity = 999; drawNumbers( initialNum, finalNum, containerForNum, quantity ); displayAllNumbers( containerForNum, quantity ); return 0; } Nie wiem dlaczego ale gdy w funkcji displayAllNumbers, w pętli do..while jest warunek while(i <= counter) to program wypisuje 'losową' ilość liczb. W przypadku gdy zamienię warunek na to co jest w komentarzu czyli while(i <= 999) program działa prawidłowo. Nie mogę sobie poradzić z odnalezieniem źródła problemu przy oryginalnym zapisie ze zmienną counter. Proszę o pomoc. |
|
Monika90 |
» 2015-01-10 20:23:33 Obydwa warunki i <= 999 oraz i <= counter są błędne i powodują wyjście poza zakres tablicy. |
|
Motokami Temat założony przez niniejszego użytkownika |
Poprawione » 2015-01-11 10:54:24 ...
void displayAllNumbers( int container[], int counter ) { do { cout << counter << ". " << container[ counter ] << "\t"; counter--; } while( counter >= 0 ); }
int main() { srand( time( NULL ) ); int containerForNum[ 999 ]; int initialNum = 4; int finalNum = 10; int quantity = 998; drawNumbers( initialNum, finalNum, containerForNum, quantity ); displayAllNumbers( containerForNum, quantity ); ...
Błędnie zadeklarowałem zmienną int quantity , której wartość rzeczywiście przekraczała liczbę elementów tablicy. Czy istnieje funkcja umożliwiająca szybkie sprawdzenie maksymalnej liczby elementów tablicy (coś w stylu sizeOf())? |
|
stryku |
» 2015-01-11 11:03:01 No nawet zgadłeś. sizeof( containerForNum ) / sizeof( int ) |
|
Motokami Temat założony przez niniejszego użytkownika |
[Solved] » 2015-01-11 17:48:06 Wszystkie problemy rozwiązane, program działa prawidłowo. Starałem się napisać kod w taki sposób, żeby funkcje były zależne od zmiennych oraz aby nie było w nich na sztywno przypisanych wartości. Dziękuję Wam za pomoc :) #include <iostream> #include <ctime> #include <cstdlib>
using namespace std;
int randomNumber( int a, int b ) { int number = rand() %( b - a + 1 ) + a; return number; }
void drawNumbers( int a, int b, int container[], int counter ) { int i = 0; do { container[ i ] = randomNumber( a, b ); i++; } while( i < counter ); }
void displayAllNumbers( int container[], int counter ) { int i = 0; do { cout << i << ". " << container[ i ] << "\t"; i++; } while( i < counter ); }
void addition( int container[], int counter ) { int i = 0; int sum; cout << "\nAddition..." << endl; do { sum += container[ i ]; cout << i << ". " << sum << "\t"; i++; } while( i < counter ); cout << "\nSum: " << sum << endl; }
int main() { srand( time( NULL ) ); int containerForNum[ 999 ]; int initialNum = 4; int finalNum = 10; int quantity = 999; drawNumbers( initialNum, finalNum, containerForNum, quantity ); displayAllNumbers( containerForNum, quantity ); addition( containerForNum, quantity ); return 0; } |
|
« 1 » |