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