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