Devuelve la forma escrita de un numero entero
pascal:
Uses Crt;
{
Este programa devuelve, dado un n£mero entero, el valor del n£mero
escrito en palabras, por ejemplo: Si se ingresa 17854 el programa
escribe \"Diecisiete mil ochocientos cincuenta y cuatro\"
Esta tarea la realiza principalmente el procedimiento \"Num_Pal\" que puede
en algunos casos llamarse recursivamente para terminar de resolver el n£mero
dado.
Nota: El programa acepta valores enteros entre -32768 y 32767 (Rango
num‚rico del tipo \"Integer\"). Puede ser extendido igualmente para
aceptar enteros largos (Longint) y en tal caso ser necesario que el
procedimiento reconozca los millones.
Este programa fue escrito por Nicol s Rozas Salgado.
}
{
Procedure Num_Pal(Var S: String; Num: Integer);
Convierte el n£mero especificado a trav‚s de \"Num\" en palabra
y guarda esa palabra en la variable \"S\". En caso de ser necesario
se llama recursivamente (a s¡ mismo) para terminar de resolver la palabra.
}
Procedure Num_Pal(Var S: String; Num: Integer);
Begin
If Num < 0 Then
Begin
S:= 'Menos ';
Num:= Abs(Num); {Lo convierto a positivo}
End;
Case Num Of
0: S:= S + 'cero';
1: S:= S + 'uno';
2: S:= S + 'dos';
3: S:= S + 'tres';
4: S:= S + 'cuatro';
5: S:= S + 'cinco';
6: S:= S + 'seis';
7: S:= S + 'siete';
8: S:= S + 'ocho';
9: S:= S + 'nueve';
10: S:= S + 'diez';
11: S:= S + 'once';
12: S:= S + 'doce';
13: S:= S + 'trece';
14: S:= S + 'catorce';
15: S:= S + 'quince';
16..19: Begin S:= S + 'dieci'; Dec(Num,10); Num_Pal(S,Num); End;
20: S:= S + 'veinte';
21..29: Begin S:= S + 'veinti'; Dec(Num,20); Num_Pal(S,Num); End;
30: S:= S + 'treinta';
31..39: Begin S:= S + 'treinta y '; Dec(Num,30); Num_Pal(S,Num); End;
40: S:= S + 'cuarenta';
41..49: Begin S:= S + 'cuarenta y '; Dec(Num,40); Num_Pal(S,Num); End;
50: S:= S + 'cincuenta';
51..59: Begin S:= S + 'cincuenta y '; Dec(Num,50); Num_Pal(S,Num); End;
60: S:= S + 'sesenta';
61..69: Begin S:= S + 'sesenta y '; Dec(Num,60); Num_Pal(S,Num); End;
70: S:= S + 'setenta';
71..79: Begin S:= S + 'setenta y '; Dec(Num,70); Num_Pal(S,Num); End;
80: S:= S + 'ochenta';
81..89: Begin S:= S + 'ochenta y '; Dec(Num,80); Num_Pal(S,Num); End;
90: S:= S + 'noventa';
91..99: Begin S:= S + 'noventa y '; Dec(Num,90); Num_Pal(S,Num); End;
100: S:= S + 'cien';
101..199: Begin S:= S + 'ciento '; Dec(Num,100); Num_Pal(S,Num); End;
200: S:= S + 'doscientos';
201..299: Begin S:= S + 'doscientos '; Dec(Num,200); Num_Pal(S,Num); End;
300: S:= S + 'trescientos';
301..399: Begin S:= S + 'trescientos '; Dec(Num,300); Num_Pal(S,Num); End;
400: S:= S + 'cuatrocientos';
401..499: Begin S:= S + 'cuatrocientos '; Dec(Num,400); Num_Pal(S,Num); End;
500: S:= S + 'quinientos';
501..599: Begin S:= S + 'quinientos '; Dec(Num,500); Num_Pal(S,Num); End;
600: S:= S + 'seiscientos';
601..699: Begin S:= S + 'seiscientos '; Dec(Num,600); Num_Pal(S,Num); End;
700: S:= S + 'setecientos';
701..799: Begin S:= S + 'setecientos '; Dec(Num,700); Num_Pal(S,Num); End;
800: S:= S + 'ochocientos';
801..899: Begin S:= S + 'ochocientos '; Dec(Num,800); Num_Pal(S,Num); End;
900: S:= S + 'novecientos';
901..999: Begin S:= S + 'novecientos '; Dec(Num,900); Num_Pal(S,Num); End;
1000: S:= S + 'mil';
1001..1999: Begin S:= S + 'mil '; Dec(Num,1000); Num_Pal(S,Num); End;
Else {2000..32767}
Begin
Num_Pal(S,Num Div 1000);
S:= S + ' mil ';
Num:= Num Mod 1000;
If Num <> 0 Then
Num_Pal(S,Num);
End;
End; {Case}
End;
{Principal}
Var S: String;
I: Integer;
C: Char;
Begin
Repeat
ClrScr;
WriteLn('El valor que especifique debe estar entre -32768 y 32767');
WriteLn;
Write('Escriba el n£mero a pronunciar: ');
ReadLn(I);
S:= '';
Num_Pal(S,I);
S[1]:= Upcase(S[1]); {Hago may£scula de la primera letra (Para embellecer)}
WriteLn;
WriteLn('El n£mero ingresado es: ',S);
WriteLn;
Repeat
Write('¨Desea ingresar otro n£mero (S-N)? ');
C:= UpCase(ReadKey);
WriteLn;
Until C In ['S','N'];
Until C = 'N';
End.
{
Este programa devuelve, dado un n£mero entero, el valor del n£mero
escrito en palabras, por ejemplo: Si se ingresa 17854 el programa
escribe \"Diecisiete mil ochocientos cincuenta y cuatro\"
Esta tarea la realiza principalmente el procedimiento \"Num_Pal\" que puede
en algunos casos llamarse recursivamente para terminar de resolver el n£mero
dado.
Nota: El programa acepta valores enteros entre -32768 y 32767 (Rango
num‚rico del tipo \"Integer\"). Puede ser extendido igualmente para
aceptar enteros largos (Longint) y en tal caso ser necesario que el
procedimiento reconozca los millones.
Este programa fue escrito por Nicol s Rozas Salgado.
}
{
Procedure Num_Pal(Var S: String; Num: Integer);
Convierte el n£mero especificado a trav‚s de \"Num\" en palabra
y guarda esa palabra en la variable \"S\". En caso de ser necesario
se llama recursivamente (a s¡ mismo) para terminar de resolver la palabra.
}
Procedure Num_Pal(Var S: String; Num: Integer);
Begin
If Num < 0 Then
Begin
S:= 'Menos ';
Num:= Abs(Num); {Lo convierto a positivo}
End;
Case Num Of
0: S:= S + 'cero';
1: S:= S + 'uno';
2: S:= S + 'dos';
3: S:= S + 'tres';
4: S:= S + 'cuatro';
5: S:= S + 'cinco';
6: S:= S + 'seis';
7: S:= S + 'siete';
8: S:= S + 'ocho';
9: S:= S + 'nueve';
10: S:= S + 'diez';
11: S:= S + 'once';
12: S:= S + 'doce';
13: S:= S + 'trece';
14: S:= S + 'catorce';
15: S:= S + 'quince';
16..19: Begin S:= S + 'dieci'; Dec(Num,10); Num_Pal(S,Num); End;
20: S:= S + 'veinte';
21..29: Begin S:= S + 'veinti'; Dec(Num,20); Num_Pal(S,Num); End;
30: S:= S + 'treinta';
31..39: Begin S:= S + 'treinta y '; Dec(Num,30); Num_Pal(S,Num); End;
40: S:= S + 'cuarenta';
41..49: Begin S:= S + 'cuarenta y '; Dec(Num,40); Num_Pal(S,Num); End;
50: S:= S + 'cincuenta';
51..59: Begin S:= S + 'cincuenta y '; Dec(Num,50); Num_Pal(S,Num); End;
60: S:= S + 'sesenta';
61..69: Begin S:= S + 'sesenta y '; Dec(Num,60); Num_Pal(S,Num); End;
70: S:= S + 'setenta';
71..79: Begin S:= S + 'setenta y '; Dec(Num,70); Num_Pal(S,Num); End;
80: S:= S + 'ochenta';
81..89: Begin S:= S + 'ochenta y '; Dec(Num,80); Num_Pal(S,Num); End;
90: S:= S + 'noventa';
91..99: Begin S:= S + 'noventa y '; Dec(Num,90); Num_Pal(S,Num); End;
100: S:= S + 'cien';
101..199: Begin S:= S + 'ciento '; Dec(Num,100); Num_Pal(S,Num); End;
200: S:= S + 'doscientos';
201..299: Begin S:= S + 'doscientos '; Dec(Num,200); Num_Pal(S,Num); End;
300: S:= S + 'trescientos';
301..399: Begin S:= S + 'trescientos '; Dec(Num,300); Num_Pal(S,Num); End;
400: S:= S + 'cuatrocientos';
401..499: Begin S:= S + 'cuatrocientos '; Dec(Num,400); Num_Pal(S,Num); End;
500: S:= S + 'quinientos';
501..599: Begin S:= S + 'quinientos '; Dec(Num,500); Num_Pal(S,Num); End;
600: S:= S + 'seiscientos';
601..699: Begin S:= S + 'seiscientos '; Dec(Num,600); Num_Pal(S,Num); End;
700: S:= S + 'setecientos';
701..799: Begin S:= S + 'setecientos '; Dec(Num,700); Num_Pal(S,Num); End;
800: S:= S + 'ochocientos';
801..899: Begin S:= S + 'ochocientos '; Dec(Num,800); Num_Pal(S,Num); End;
900: S:= S + 'novecientos';
901..999: Begin S:= S + 'novecientos '; Dec(Num,900); Num_Pal(S,Num); End;
1000: S:= S + 'mil';
1001..1999: Begin S:= S + 'mil '; Dec(Num,1000); Num_Pal(S,Num); End;
Else {2000..32767}
Begin
Num_Pal(S,Num Div 1000);
S:= S + ' mil ';
Num:= Num Mod 1000;
If Num <> 0 Then
Num_Pal(S,Num);
End;
End; {Case}
End;
{Principal}
Var S: String;
I: Integer;
C: Char;
Begin
Repeat
ClrScr;
WriteLn('El valor que especifique debe estar entre -32768 y 32767');
WriteLn;
Write('Escriba el n£mero a pronunciar: ');
ReadLn(I);
S:= '';
Num_Pal(S,I);
S[1]:= Upcase(S[1]); {Hago may£scula de la primera letra (Para embellecer)}
WriteLn;
WriteLn('El n£mero ingresado es: ',S);
WriteLn;
Repeat
Write('¨Desea ingresar otro n£mero (S-N)? ');
C:= UpCase(ReadKey);
WriteLn;
Until C In ['S','N'];
Until C = 'N';
End.
17854 -Diecisiete mil ochocientos cincuenta y cuatro