Devuelve la forma escrita de un numero entero
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | 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. |
17854 -Diecisiete mil ochocientos cincuenta y cuatro