]> git.llucax.com Git - z.facultad/75.40/1er-cuat/orden.git/blob - test/cargar.pas
Se pone fin de línea del sistema.
[z.facultad/75.40/1er-cuat/orden.git] / test / cargar.pas
1 program RNDNames;
2
3 const
4      MAX_APE = 15;
5
6 type
7     APELLIDO = string[MAX_APE];
8     DOCUMENTO = 10000000..40000000;
9     PERSONA = record
10                     ap: APELLIDO;
11                     dni: DOCUMENTO;
12               end;
13     TABLA = array[1..1000] of PERSONA;
14     TIPO_LETRA = ( TL_VOCAL, TL_CONSO );
15     TIPO_VOCAL = ( TV_AEIOU, TV_EI );
16     INDICADOR = ( I_NADA, I_ESB, I_ESC, I_ESF, I_ESG, I_ESL, I_ESM, I_ESN, I_ESQ, I_ESQU, I_ESR, I_EST );
17
18 (*********************************************************)
19
20  function GetVocal( tipo: TIPO_VOCAL ): char;
21
22    var
23       valor: integer;
24
25    begin
26         if tipo = TV_AEIOU then valor := random( 16 )
27                            else valor := random( 6 ) + 5;
28         case valor of
29             0..4: GetVocal := 'A';
30             5..7: GetVocal := 'E';
31             8..10: GetVocal := 'I';
32             11..13: GetVocal := 'O';
33             14..15: GetVocal := 'U';
34         end;
35    end;
36
37 (*********************************************************)
38
39  procedure GetRNDVocal( var indic: INDICADOR; var proxl: TIPO_LETRA; var vocal: char );
40
41    var
42       valor: integer;
43
44     begin
45         case indic of
46             I_ESQ:
47                   begin
48                        vocal := 'U';
49                        indic := I_ESQU;
50                        proxl := TL_VOCAL;
51                   end;
52             I_ESQU:
53                    begin
54                         vocal := GetVocal( TV_EI );
55                         indic := I_NADA;
56                         proxl := TL_CONSO;
57                    end;
58             else
59               begin
60                    vocal := GetVocal( TV_AEIOU );
61                    indic := I_NADA;
62                    if random( 40 ) = 0 then proxl := TL_VOCAL
63                                        else proxl := TL_CONSO;
64               end;
65             end;
66     end;
67
68 (*********************************************************)
69
70  procedure GetRNDConsonante( var indic: INDICADOR; var proxl: TIPO_LETRA; var conso: char );
71
72    var
73       valor: integer;
74
75    begin
76         proxl := TL_VOCAL;
77         indic := I_NADA;
78
79         case indic of
80             I_ESF, I_ESR, I_ESG, I_EST: conso := 'R';
81             I_ESB: case random( 2 ) of
82                        0: conso := 'R';
83                        1: conso := 'L';
84                    end;
85             I_ESC: case random( 4 ) of
86                        0: conso := 'C';
87                        1: conso := 'H';
88                        2: conso := 'R';
89                        3: conso := 'L';
90                    end;
91             I_ESL: case random( 6 ) of
92                        0: conso := 'T';
93                        1..5: conso := 'L';
94                    end;
95             I_ESM: case random( 3 ) of
96                        0: conso := 'P';
97                        1: conso := 'B';
98                        2: conso := 'L';
99                    end;
100             I_ESN: case random( 3 ) of
101                             0: conso := 'R';
102                             1: conso := 'V';
103                             2: conso := 'C';
104                    end;
105             else case random( 55 ) of
106                     0..3: begin
107                                conso := 'B';
108                                if random( 10 ) = 0 then begin
109                                                              indic := I_ESB;
110                                                              proxl := TL_CONSO;
111                                                         end;
112                           end;
113                     4..7: begin
114                                conso := 'C';
115                                if random( 5 ) = 0 then begin
116                                                              indic := I_ESC;
117                                                              proxl := TL_CONSO;
118                                                         end;
119                           end;
120                     8..11: conso := 'D';
121                     12..14: begin
122                                conso := 'F';
123                                if random( 10 ) = 0 then begin
124                                                              indic := I_ESF;
125                                                              proxl := TL_CONSO;
126                                                         end;
127                             end;
128                     15..17: begin
129                                conso := 'G';
130                                if random( 5 ) = 0 then
131                                  begin
132                                       indic := I_ESG;
133                                       if random( 4 ) = 0 then proxl := TL_CONSO;
134                                  end;
135                             end;
136                     18..19: conso := 'H';
137                     20..22: conso := 'J';
138                     23..24: conso := 'K';
139                     25..27: begin
140                                conso := 'L';
141                                if random( 15 ) = 0 then
142                                  begin
143                                       indic := I_ESL;
144                                       proxl := TL_CONSO;
145                                  end;
146                             end;
147                     28..30: begin
148                                conso := 'M';
149                                if random( 5 ) = 0 then
150                                  begin
151                                       indic := I_ESM;
152                                       proxl := TL_CONSO;
153                                  end;
154                             end;
155                     31..33: begin
156                                conso := 'N';
157                                if random( 5 ) = 0 then
158                                  begin
159                                       indic := I_ESN;
160                                       proxl := TL_CONSO;
161                                  end;
162                             end;
163                     34..36: conso := 'P';
164                     37..38: begin
165                                conso := 'Q';
166                                indic := I_ESQ;
167                             end;
168                     39..41: begin
169                                conso := 'R';
170                                if random( 3 ) = 0 then
171                                  begin
172                                       indic := I_ESR;
173                                       proxl := TL_CONSO;
174                                  end;
175                             end;
176                     42..44: conso := 'S';
177                     45..47: begin
178                                conso := 'T';
179                                if random( 10 ) = 0 then
180                                  begin
181                                       indic := I_EST;
182                                       proxl := TL_CONSO;
183                                  end;
184                             end;
185                     48..50: conso := 'V';
186                     51: conso := 'W';
187                     52: conso := 'X';
188                     53: conso := 'Y';
189                     54: conso := 'Z';
190                  end; { case random( 55 ) of }
191
192         end; { case indic of }
193    end; { procedimiento }
194
195 (*********************************************************)
196
197  function GetRNDApellido( max, min: integer ): APELLIDO;
198
199         var
200        tam, i: integer;
201        aux: char;
202        apel: APELLIDO;
203        indic: INDICADOR;
204        proxl: TIPO_LETRA;
205
206         begin
207          if max > MAX_APE then max := MAX_APE;
208          tam := random( max + 1 ) + min;
209          indic := I_NADA;
210          apel := '';
211          if random( 5 ) = 0 then proxl := TL_VOCAL
212                             else proxl := TL_CONSO;
213          for i := 1 to tam do
214            begin
215                 if proxl = TL_CONSO then GetRNDConsonante( indic, proxl, aux )
216                                     else GetRNDVocal( indic, proxl, aux );
217                 apel := apel + aux;
218            end;
219          GetRNDApellido := apel;
220     end;
221
222 var
223     n, i: integer;
224     arch: text;
225     ap: APELLIDO;
226     dni: DOCUMENTO;
227
228 begin
229      randomize;
230      n := 1000;
231      assign( arch, 'DATOS.TXT' );
232      rewrite( arch );
233      dni := 10000000 + (random( 15000 ) * 100);
234
235      for i := 1 to n do
236         begin
237              ap := GetRNDApellido( 7, 4 );
238              dni := dni + random( 50000 ) + 1;
239              writeln( arch, ap );
240              writeln( arch, dni );
241              writeln( arch );
242         end;
243      close( arch );
244 end.