funkcja losuje te same liczby

0

Witam, kolejny dzień zmagań z moimi początkami w C. Napotkałem problem, który nie wiem jak rozwiązać, a mianowicie mam program, który tworzy 3 tabele. Pierwszą i drugą wypełniam sam, trzecia ma powstać ze złączenia tych dwóch tablic i ma zostać wypełniona najmniejszymi liczbami z tych dwóch indeksów, także pod tym samym indeksem tablicy.
(trochę zamotałem, ale po kodzie wiadomo o co chodzi ;)). Wszystko jest ok, aż do momentu, kiedy zmienię mój program w taki sposób, aby sam wypełniał indeksy dwóch pierwszych tablic liczbami pseudolosowymi(korzystając z funkcji "rand"). Problem tkwi w tym, że zarówno pierwszą jak i drugą tablicę wypełnia tymi samymi liczbami. Z tego co wiem funkcja "rand" korzysta z zegara komputera i dlatego wydaje mi się to logiczne, że korzystając z tej samej funkcji w "tym samym" (teoretycznie) czasie program będzie losował takie same liczby. Pytanie brzmi jak to obejść? Czy dać w "mainie" jakieś opóźnienie? (nie wiem czy takie coś jest jeszcze do tego nie doszedłem). Może lepszym sposobem było by napisanie kolejnej funkcji, ale czy to coś da i czy jest zgodne z kulturą programowania? Bardzo proszę o pomoc, będę bardzo wdzięczny. Mam jeszcze drobne pytanko na temat tego, czy mogę dynamicznie zalokować pamięć dla tych tablic tak jak to zrobiłem. Działać działa, ale czy tak się po prostu robi.

Oto mój program:

#include<stdio.h>
#include<stdlib.h>
//#define l 5

//void stworz( int *, int);
void stworz_losowe(int *, int);
void wysw (int *, int);
void zlacz (int *, int *, int *, int);
main()
{

    int *tabela1, *tabela2, *tabela3, l;
    printf("Podaj wielkosc tablic:\n");
    scanf("%d", &l);
    tabela1=malloc(sizeof(int)* l);
    tabela2=malloc(sizeof(int)* l);
    tabela3=malloc(sizeof(int)* l);
    //
    //
    //printf("Podaj liczby do pierwszej Tablicy:\n");
    //stworz(tabela1, l);
    stworz_losowe(tabela1, l);
    //printf("Podaj liczby do drugiej Tablicy:\n");
    //stworz(tabela2, l);
    stworz_losowe(tabela2, l);
    printf("Tabela pierwsza: \n");
    wysw(tabela1, l);
    printf("\nTabela druga: \n");
    wysw(tabela2, l);
    zlacz(tabela1, tabela2, tabela3, l);
    printf("\ntabela trzecia:\n");
    wysw(tabela3, l);
}

void stworz(int tab[], int wielk)
{
    int i;
    for(i=0;i<wielk;i++)
    {
        scanf("%d", &tab[i]);
    }
}

void stworz_losowe(int tab[], int wielk)
{
    int i;
    srand(time(NULL));
    for(i=0;i<wielk;i++)
    {
        tab[i]=rand()%10;
    }
}

void wysw(int tab[], int wielk)
{
    int i;
    for(i=0;i<wielk;i++)
    {
        printf("%d, ", tab[i]);
    }
}

void zlacz(int tab1[], int tab2[], int tab3[], int  wielk)
{
    int i;
    for(i=0;i<wielk;i++)
    {
        if(tab1[i]<tab2[i])tab3[i]=tab1[i];
        else tab3[i]=tab2[i];
    }
}
0

Przepraszam!
http://pl.wikibooks.org/wiki/C/rand
Musisz odwołać sie do czasu.

0

Funkcję Srand() wywołuje się tylko raz w całym kodzie.

3

Wywal srand(time(NULL)); z stworz_losowe do main: http://ideone.com/sAH8Ut

Możesz dynamicznie alokować w ten sposób, ale musisz potem zwolnić. Czyli jak jest

tabela1=malloc(sizeof(int)* l);

to gdzieś pod koniec powinno być

free(tabela1);
2

Dzięki wielkie za podpowiedzi. Wszystkie przejrzałem i wziąłem po uwagę. Wszystko działa. Super forum. Jeszcze raz wielkie dzięki.

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