C/Visual C - Fallo con srand

 
Vista:
sin imagen de perfil

Fallo con srand

Publicado por Rosa (12 intervenciones) el 13/12/2017 01:19:39
Hola a todos
El caso es que tengo un programa en c con varias funciones, una de ellas que me genera un struct Conjunto1000.
A dicha función le paso el parámetro por referencia, pero al hacerlo creo que srand no me funciona bien, y genera igual unos structs que otros. He de aclarar que no puedo cambiar el paso por referencia a paso por valor

Les pregunto para saber si la unica solución es hacer: srand(time(NULL)) antes de inicializar la función o si existe una forma para que funcione desde dentro.

Aquí os dejo mi código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
 
struct Conjunto1000{
    int num_elem;
    int elementos[1000];
};
 
 
/*
    Identificador: GenConjunto1000
    Tipo devuelto: void
    Cometido:      Genera un struct Conjunto1000 aleatorio, con valores en el vector de elementos de 0 a 32767
    Entradas:      Un puntero de Conjunto1000
    Salidas:
*/
void GenConjunto1000 (struct Conjunto1000 *conj){
 
    int i, j, aux;
 
    (*conj).num_elem = (rand()%999)+2;
 
 
    /* Para v[0, num.elem-1] se genera en cada posición un numero entero aleatorio */
    for (i = 0; i < (*conj).num_elem; i++){
        (*conj).elementos[i] = rand();
    }
 
    /* Para cada posición se calcula si en las siguientes el valor es menor,
       en caso de serlo se intercambian                                      */
    for (i = 0; i < (*conj).num_elem; i++){
        for (j = i+1; j < (*conj).num_elem; j++){
            if ((*conj).elementos[i] > (*conj).elementos[j]){
                aux = (*conj).elementos[j];
                (*conj).elementos[j] = (*conj).elementos[i];
                (*conj).elementos[i] = aux;
            }
        }
    }
 
/* UnionConjunto devuelve un struct con los elementos comunes a c1 y c2 */
struct Conjunto1000 UnionConjunto1000(struct Conjunto1000 c1, struct Conjunto1000 c2){
 
    int i, j;
    struct Conjunto1000 NuevoConjunto;
    NuevoConjunto.num_elem = 0;
 
    for (i = 0; i < c1.num_elem; i++){
        for (j = 0; j < c2.num_elem; j++){
            if (c1.elementos[i] == c2.elementos[j]){
                NuevoConjunto.elementos[NuevoConjunto.num_elem] = c1.elementos[i];
                NuevoConjunto.num_elem++;
            }
        }
    }
 
    return NuevoConjunto;
}
 
 
 
int main()
{
 
    struct Conjunto1000 C1, C2, union12;
 
    srand(time(NULL));
    GenConjunto1000(&C1);
    DispIntVector(C1.elementos, C1.num_elem);
    printf("\n\n\n\n\n");
    GenConjunto1000(&C2);
    union12 = UnionConjunto1000(C1, C2);
    DispIntVector(C2.elementos, C2.num_elem);
    printf("\n\n\n\n\n");
    DispIntVector(union12.elementos, union12.num_elem); /* Se muestra en pantalla los valores de c1 repetidos en c2 */
    printf("\n\n\n\n\n");
}
 
}

DispIntVector aunque no lo meta aquí es una función que está en el programa y que funciona perfectamente






Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder