1 program Generador_De_Nombres_Ordenados_Alfabeticamente;
10 APELLIDO = string[MAX_APE];
11 DOCUMENTO = 10000000..40000000;
16 TABLA = array[1..1000] of PERSONA;
17 TIPO_LETRA = ( TL_VOCAL, TL_CONSO );
18 TIPO_VOCAL = ( TV_AEIOU, TV_EI );
19 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 );
21 (*********************************************************)
23 function GetVocal( tipo: TIPO_VOCAL ): char;
29 if tipo = TV_AEIOU then valor := random( 16 )
30 else valor := random( 6 ) + 5;
32 0..4: GetVocal := 'A';
33 5..7: GetVocal := 'E';
34 8..10: GetVocal := 'I';
35 11..13: GetVocal := 'O';
36 14..15: GetVocal := 'U';
40 (*********************************************************)
42 procedure GetRNDVocal( var indic: INDICADOR; var proxl: TIPO_LETRA; var vocal: char );
57 vocal := GetVocal( TV_EI );
63 vocal := GetVocal( TV_AEIOU );
65 if random( 40 ) = 0 then proxl := TL_VOCAL
66 else proxl := TL_CONSO;
71 (*********************************************************)
73 procedure GetRNDConsonante( var indic: INDICADOR; var proxl: TIPO_LETRA; var conso: char );
83 I_ESF, I_ESR, I_ESG, I_EST: conso := 'R';
84 I_ESB: case random( 2 ) of
88 I_ESC: case random( 4 ) of
94 I_ESL: case random( 6 ) of
98 I_ESM: case random( 3 ) of
103 I_ESN: case random( 3 ) of
108 else case random( 55 ) of
111 if random( 10 ) = 0 then begin
118 if random( 5 ) = 0 then begin
126 if random( 10 ) = 0 then begin
133 if random( 5 ) = 0 then
136 if random( 4 ) = 0 then proxl := TL_CONSO;
139 18..19: conso := 'H';
140 20..22: conso := 'J';
141 23..24: conso := 'K';
144 if random( 15 ) = 0 then
152 if random( 5 ) = 0 then
160 if random( 5 ) = 0 then
166 34..36: conso := 'P';
173 if random( 3 ) = 0 then
179 42..44: conso := 'S';
182 if random( 10 ) = 0 then
188 48..50: conso := 'V';
193 end; { case random( 55 ) of }
195 end; { case indic of }
196 end; { procedimiento }
198 (*********************************************************)
200 function GetRNDApellido( max, min: integer ): APELLIDO;
210 if max > MAX_APE then max := MAX_APE;
211 tam := random( max + 1 ) + min;
214 if random( 5 ) = 0 then proxl := TL_VOCAL
215 else proxl := TL_CONSO;
218 if proxl = TL_CONSO then GetRNDConsonante( indic, proxl, aux )
219 else GetRNDVocal( indic, proxl, aux );
222 GetRNDApellido := apel;
225 (*********************************************************)
227 function GetRNDLetra( min, max: char ): char;
230 GetRNDLetra := chr( random( ord( max ) - ord( min ) + 1 ) + ord( min ) );
234 (*********************************************************)
235 procedure GetInvOrdApellidos( var ar: text; cant: integer );
240 i, j, veces: integer;
242 ap, ape, apel: APELLIDO;
246 if cant = 1000 then mil := true;
247 dni := 34000000 + (random( 15000 ) * 100);
251 for letra := 'Z' downto 'A' do
254 for letra1 := 'Z' downto 'A' do
258 'A', 'B', 'C', 'E', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T':
260 'A', 'B', 'C', 'E', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'Z': veces := 2;
264 'A', 'B', 'C', 'E', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T': veces := 2;
270 'A', 'B', 'C', 'D', 'E', 'F', 'I', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'V':
272 'D', 'F', 'G', 'H', 'I', 'J', 'K', 'U', 'V': veces := 2;
276 'D', 'F', 'G', 'H', 'I', 'J', 'K', 'U': veces := 2;
281 for j := 1 to veces do
283 if j <> 1 then apel := ape + GetRNDLetra( 'A', 'M' ) + GetRNDApellido( 6, 1 )
284 else apel := ape + GetRNDLetra( 'N', 'Z' ) + GetRNDApellido( 6, 1 );
285 dni := dni - random( 50000 ) - 1;
294 end; { for letra1 := 'A' to 'Z' do }
298 end; { for letra := 'A' to 'Z' do }
302 (*********************************************************)
314 assign( arch, 'DATOS.TXT' );
317 GetInvOrdApellidos( arch, n );