forked from Felipe-Visgou/gitproj1
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGERAALT.H
More file actions
169 lines (153 loc) · 6.28 KB
/
GERAALT.H
File metadata and controls
169 lines (153 loc) · 6.28 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#if ! defined( GERAALT_ )
#define GERAALT_
/***************************************************************************
*
* $MCD Módulo de definição: ALT Gerador de números aleatórios
*
* Arquivo gerado: GERAALT.h
* Letras identificadoras: ALT
*
* Nome da base de software: Arcabouço para a automação de testes de programas redigidos em C
* Arquivo da base de software: C:\AUTOTEST\PROJETOS\ARCABOUC.BSW
*
* Projeto: INF 1301 / 1628 Automatização dos testes de módulos C
* Gestor: LES/DI/PUC-Rio
* Autores: avs
*
* $HA Histórico de evolução:
* Versão Autor Data Observações
* 4 avs 01/fev/2006 criar linguagem script simbólica
* 3 avs 08/dez/2004 uniformização dos exemplos
* 2 avs 07/jul/2003 unificação de todos os módulos em um só projeto
* 1 avs 16/abr/2003 início desenvolvimento
*
* $ED Descrição do módulo
* Implementa um pequeno conjunto de geradores de números aleatórios.
*
* $EIM Interface com outros módulos
* Antes de gerar qualquer número deve ser chamada a função
* ALT_Inicializar.
*
***************************************************************************/
#if defined( GERAALT_OWN )
#define GERAALT_EXT
#else
#define GERAALT_EXT extern
#endif
/***********************************************************************
*
* $FC Função: ALT &Inicializar o gerador de números aleatórios
*
* $ED Descrição da função
* Inicializa o gerador de números aleatórios.
* Esta função deve ser chamada antes de qualquer outra do módulo GERAALT
*
* $EP Parâmetros
* Base - se == 0 utiliza a semente normal (PI 3141592653 )
* isto gerará a mesma seqüência de números aleatórios
* a seguir da inicialização. Esta semente é tida como
* uma boa semente, a distribuição é virtualmente uniforme
* e a cardinalidade é a maior possível.
* se == 1 utiliza a PI | time( )
* isto gera uma seqüência de números aleatórios
* diferente a cada inicialização
* outros - utiliza o valor fornecido como semente
* deve ser tomado cuidado pois uma semente mal escolhida
* pode levar à geração de uma seqüência não aleatória,
* ou de cardinalidade limitada.
*
* $ER Requisitos
* Esta função deve ser chamada uma única vez e isso antes de gerar
* o primeiro número aleatório
*
***********************************************************************/
void ALT_Inicializar( unsigned int Base ) ;
/***********************************************************************
*
* $FC Função: ALT &Gerar inteiro em uniformemente distribuído
*
* $ED Descrição da função
* Gerar um número inteiro uniformemente distribuído em um
* intervalo dado
*
* $EP Parâmetros
* $P Inf - limite inferior, inclusive
* $P Sup - limite superior, inclusive
*
* $FV Valor retornado
* Inf <= x <= Sup
*
* $EAE Assertivas de entradas esperadas
* Inf <= Sup
* Dados errados provocarão um comportamento errático no programa.
*
***********************************************************************/
int ALT_GerarDistUniforme( int Inf , int Sup ) ;
/***********************************************************************
*
* $FC Função: ALT &Gerar distribuição dada por tabela de freqüências
*
* $ED Descrição da função
* Gerar distribuição segundo tabela de freqüências
*
* $EP Parâmetros
* $P numElem - número de elementos (intervalos) da tabela
* o número de intervalos é na realidade igual a numElem + 1
* $P vetElem - vetor de elementos da tabela
* Os valores dos elementos são números entre 0 e Limite - 1
* Os elementos devem estar em ordem crescente.
* Os elementos correspondem a uma função cumulativa
* Exemplo, se forem desejados as freqüências
* 10% 30% e 60%
* devem ser fornecidos os dados 2 {10 , 40} 100
* $P Limite - é o limite superior da distribuição de freqüências
* Permite chegar a freqüências muito pequenas, por exemplo
* para uma distribuição de freqüências 9999/10000 e
* 1/10000 forneça os parâmetros
* 1 9999 10000
*
* $FV Valor retornado
* O índice da freqüência 0 <= indice <= numElem, com uma probabilidade
* igual ao correspondente intervalo.
*
* A probabilidade x é dada por
* x = ( vetElem[ i ] - vetElem[ i - 1 ] ) / Limite
* para todos i , 0 <= i <= numElem
* sendo que vetElem[ -1 ] é assumido igual a 0
* sendo que vetElem[ numElem ] é assumido igual a Limite
*
* $EAE Assertivas de entradas esperadas
* numElem >= 1
* vetElem[ numElem - 1 ] < Limite
* para todos i, 0 <= i < numElem : vetElem[ i - 1 ] < vetElem[ i ]
* sendo que vetElem[ -1 ] é considerado igual a 0
* Dados errados provocarão um comportamento errático no programa.
*
***********************************************************************/
int ALT_GerarFrequencia( int numElem , int * vetElem , int Limite ) ;
/***********************************************************************
*
* $FC Função: ALT &Gerar permutação randômica uniformemente distribuída
*
* $ED Descrição da função
* Gera uma permutação de n elementos uniformemente distribuída.
* O algoritmo utilizado é o "Knuth shuffle" descrito na Wikipedia.
*
* $EP Parâmetros
* $P tamVetor - número de elementos a serem embaralhados
* $P Vetor - elementos a serem embaralhados. O vetor deve conter
* pelo menos tamVetor elementos. Caso não contenha, os
* resultados serão impreditíveis, possivelmente
* desastrosos.
* O vetor deve estar inicializado com os elementos a
* serem permutados. Por exemplo, no caso de um baralho,
* o vetor deve ser inicializado com a seqüência de
* índices das cartas (0 a 51).
*
***********************************************************************/
void ALT_GerarPermutacao( int tamVetor ,
int * Vetor ) ;
#undef GERAALT_EXT
/********** Fim do módulo de definição: ALT Gerador de números aleatórios **********/
#else
#endif