Funkcja losująca


(Ziomek Zemsty) #1

Witam.

Mam taki oto problem, że chciałbym, aby program dla każdego przebiegu pętli losował inną wartość. Jak to zrobić, bo próbowałem już różnych metod i nic nie działa...


(Fizyda) #2
int main()
{
    int ods;
    int i=0;
    /* ods = (int*)malloc(sizeof(int)); */

    for (i = 0; i <= 200; i++)
    {
        srand((unsigned int)time(NULL));
        ods = rand();
        printf("%d\n", ods);
    }

lub

int main()
{
    for (int i = 0; i <= 200; i++)
    {
        printf("%d\n", rand());
    }

Tylko nie wiem czemu chcesz resztę z dzielenia przez 500, jak coś to już 100 chociaż i to nie ma sensu bo rand zwraca inta a nie double.

EDIT:

Moja wina, nie zauważyłem że to o C chodzi. Ale raczej w C++ jest podobnie, ale nie powiem czy to w takim razie działa, zwłaszcza że dawno nawet w C++ się nie bawiłem więc nie mam 100% pewności co do tego co napisałem wyżej.


(Rolek0) #3

srand wywołuj tylko raz, na początku programu.


(Pablo_Wawa) #4

Podstawowy błąd w kodzie Ziomek Zemsty polega na tym, że zmienna ods jest wskaźnikiem do liczby całkowitej (czyli adresem pamięci zawierającym wartość typu int), a nie liczbą całkowitą:

int *ods;
ods = (int*)malloc(sizeof(int));

i dlatego późniejsze jej użycie w tym kodzie

ods = rand() % 500;

jest błędem, bo do wskaźnika jest przypisywana (losowa) wartość. Poprawnie powinno być tak:

*ods = rand() % 500;
printf("%d\n", *ods);

Dlaczego akurat takie podejście autora (poprzez wskaźnik), nie mam pojęcia, ale jak widać nie bardzo umie ich używać.

Drugim (mniej istotnym) błędem jest wstawienie wywołania funkcji srand w pętli for (zamiast raz na początku)