Zapełnianie tablicy pseudolosowymi liczbami

0

Mam przekazać do funkcji pustą tablicę, którą zapełnię liczbami z zadanego zakresu. Nie wiem czemu ale gdy wyświetlam tablicę wyskakują mi jakieś duże liczby, pomoże ktoś wskazać błąd? Z góry dzięki!

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;
const int R=9;

void fPseudo(int iPseudo[], int zakdol, int zakgor){
    srand(time(NULL));
    int liczba;
    for(int i=0; i<R; i++){
        liczba = rand()%zakgor+zakdol;
        iPseudo[liczba];
    }
    for(int i=0; i<R; i++){
        cout<<iPseudo[i]<<" ";
    }

}
int main()
{
    int iTab[R];
    int zd;
    int zg;
    cout<<"Podaj zakres dolny \n";
    cin>>zd;
    cout<<"Podaj zakres gorny \n";
    cin>>zg;
    fPseudo(iTab, zd, zg);
    return 0;
}

0
    for(int i=0; i<R; i++){
        liczba = rand()%zakgor+zakdol;
        iPseudo[liczba];
    }

Gdzie przypisujesz wylosowaną wartość do elementu tablicy?

Przy okazji: https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/

0

iPseudo[i] = liczba, rozmiar powinien być podany, a jak nie to Twórz dynamicznie, a w ogóle, to po coś jest STL , vector, i inne.

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;
const int R=9;

void fPseudo(int *iPseudo, int zakdol, int zakgor){
    srand(time(NULL));
    int liczba = 0;;
    for(int i=0; i<R; i++){
        liczba = rand()%zakgor+zakdol;
        iPseudo[i] = liczba;
    }
    cout << "\n";


    for(int i=0; i<R; i++){
        cout<<iPseudo[i]<<" ";
    }


}
int main()
{
    int iTab[9] = {0,0,0,0,0,0,0,0,0};
    int zd;
    int zg;
    cout<<"Podaj zakres dolny \n";
    cin>>zd;
    cout<<"Podaj zakres gorny \n";
    cin>>zg;
    fPseudo(iTab, zd, zg);
    return 0;
}
0

Wiem, że jest wektor i lepiej go używać ale akurat w tym zadaniu w poleceniu było napisane żeby używać zwykłych tablic. Już widzę, że źle przypisywałem wartość a właściwie to w ogóle jej nie przypisywałem, dzięki za pomoc!

0

@lion137: czy muszę wpisywać do tej tablicy 9 zer na początku? Czy wystarczy tak jak zrobiłem wcześniej czyli nadałem jej tylko rozmiar?

0

Musisz, bo trzeba też zarezerwować pamięć dla 9 - ciu elementów.

EDIT Nie Musisz, pomyliło mi się z czymś?:), Masz już tablicę zaalokowaną.
EDIT2 Jednka nie, Patrz na post poniżej.

0
int iTab[9] = {0,0,0,0,0,0,0,0,0};

To za dużo pisania, aby zainicjalizować zerami wystarczy:

int iTab[9] = {};

Ale poniższe nie wystarczy (wartości tablicy nie będą zainicjalizowane, a odczyt ich wartości to UB):

int iTab[9];
0

@kq: kod działa dla obu wersji czy taka deklaracja tablicy

int iTab[9] = {};

jest w czymś lepsza od tej?

int iTab[9];
0

Ciut się zagalopowałem, poprawiłem posta. Generalnie, jeśli od razu wypełniasz tablicę, to nie musisz jej inicjalizować, ale warto mieć nawyk zawsze inicjalizowania - mniej problemów w przyszłości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1