
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:
DispIntVector aunque no lo meta aquí es una función que está en el programa y que funciona perfectamente
Muchas Gracias

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


0