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

[Lekcja 18] Błąd przy wypisywaniu liczb

Ostatnio zmodyfikowano 2015-01-11 17:48
Autor Wiadomość
Motokami
Temat założony przez niniejszego użytkownika
[Lekcja 18] Błąd przy wypisywaniu liczb
» 2015-01-10 19:49:26
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

/* draw random numbers */
int randomNumber( int a, int b ) {
    int number = rand() %( b - a + 1 ) + a;
    return number;
}

/* assign numbers to container array */
void drawNumbers( int a, int b, int container[], int counter ) {
    do {
        container[ counter ] = randomNumber( a, b );
        //cout << counter << ". " << container[counter] << "\t";   //display all numbers
        counter--;
    } while( counter > 0 );
   
}

void displayAllNumbers( int container[], int counter ) {
    int i = 1;
    do
    {
        cout << i << ". " << container[ i ] << "\t";
        i++;
    } while( i <= counter ); // it works -> while(i <= 999)
   
}

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.
P-124586
Monika90
» 2015-01-10 20:23:33
Obydwa warunki i <= 999 oraz i <= counter są błędne i powodują wyjście poza zakres tablicy.
P-124590
Motokami
Temat założony przez niniejszego użytkownika
Poprawione
» 2015-01-11 10:54:24
C/C++
...
// TODO (RRR#1#01/10/15): how to display array ascending
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; // containerForNum[999] elements are numerated 0-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())?
P-124630
stryku
» 2015-01-11 11:03:01
No nawet zgadłeś.
sizeof( containerForNum ) / sizeof( int )
P-124635
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 :)

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

/* draw random numbers */
int randomNumber( int a, int b ) {
    int number = rand() %( b - a + 1 ) + a;
    return number;
}

/* assign numbers to container array */
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;
}
P-124668
« 1 »
  Strona 1 z 1