Nombre Password [ Regístrate ]

Diccionario numérico (OIE 5 - 2001) - Código en Pascal
program dicc;
uses crt;

const {array con el diccionario}
 palabras: array[0..31] of string = ('zero', 'one', 'two',
          'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',
          'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen',
          'seventeen', 'eighteen', 'nineteen', 'twenty', 'thirty', 'forty',
          'fifty', 'sixty', 'seventy', 'eighty', 'ninety', 'hundred',
          'thousand', 'million', 'negative');

var
 i: byte;{indice para ir recorriendo el array}
 num, aux: longint;{num: numero que representa cada linea; aux:auxiliar}
 palabra, frase: string;{frase:cada linea nueva que se lee}
 f, ff: text;{ficheros de entrada y salida}
 negativo: boolean;

function numero(s:string): longint;
{transforma una palabra en su numero correspondiente}
begin
 i:=0;
 while (palabras[i]<>s) do inc(i);
 if i<=20 then
  numero:=i
  else
  if (i=31) then
   begin
    negativo:= true;
    numero:=0;
   end
   else
    if i<28 then
     numero:= 20+((i mod 10)*10)
     else numero:= 0;
end;

procedure sacarnumeros;
{para cada numero leido en letras se sacan sus digitos}
var k: byte;
begin
 k:=1;
 while k<=length(frase) do
  begin
   palabra:='';
   while (frase[k]<>' ') and (k<=length(frase)) do
    begin
     palabra:=palabra+frase[k];
     inc(k);
    end;
   aux:= aux + numero(palabra);
   if i=28 then aux:= aux*100;
   if i=29 then begin
    num:= num + (aux*1000);
    aux:=0;
   end;
   if i=30 then begin
    num:= aux*1000000;
    aux:=0;
   end;
  inc(k);
 end;
end;

begin
 assign(f, 'ING.DAT');
 reset(f);
 assign(ff, 'ING.RES');
 rewrite(ff);
 while not(eof(f)) do
  begin
   readln(f, frase);
   num:= 0;
   aux:=0;
   negativo:= false;
   sacarnumeros;
   num:=num+aux;
   if negativo then writeln(ff, 0-num)
    else writeln(ff, num);
  end;
 close(f);
 close(ff);
end.


© (2001-2008) ALGORITMIA.NET - Política de privacidad