Numeri

Scrivete un programma che, dato un numero intero compreso tra 1 e 99 inclusi, scriva la parola italiana corrispondente.

Dati in input

Il file input.txt contiene un numero compreso tra 1 e 99 inclusi.
Il file è costituito da un’unica riga di testo, contenente una o due cifre da 0 a 9.

Dati in output

Il programma, dopo aver letto il file di input, deve fornire la parola corrispondente in italiano, e scriverla su un file di nome output.txt.
Più precisamente, il file output.txt deve contenere un’unica riga.
Su questa riga dovrà comparire la parola italiana corrispondente al numero.

Assunzioni

  1. Il file di input non contiene altri caratteri oltre a quelli precisati.
  2. Qualora lo stesso numero possa essere espresso in più forme, scegliere sempre la più breve (per esempio, “ventuno” e non “ventiuno” o “ventieuno”, “ottantuno” e non “ottantauno” o “ottantaeuno”).
    Nel caso precedente, scrivere “ventieuno” al posto di “ventuno” è considerato un errore.
    Allo stesso modo, uno spazio nella parola è considerato un errore.
  3. I caratteri accentati devono essere inseriti privi di accento (per esempio, “trentatre” e non “trentatrè” o “trentatre'”).
  4. Importante! Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente.
    Deve solo leggere il file di input e scrivere il file di output.
  5. L’esecuzione del programma deve terminare entro 5 secondi.

Esempi

input.txt output.txt
1 12 dodici
2 23 ventitre
3 88 ottantotto

Utilizza le funzioni TP6 per le stringhe: Concat(), Delete()

Program OII_2001_Numeri;
Const
    CIFRE : array[0..19] of String =
    (
        'zero', 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei', 'sette', 'otto',
        'nove', 'dieci', 'undici', 'dodici', 'tredici', 'quattordici', 'quindici',
        'sedici', 'diciassette', 'diciotto', 'diciannove'
    );
    DECINE : array[2..9] of String =
    (
       'venti', 'trenta', 'quaranta', 'cinquanta', 'sessanta', 'settanta', 'ottanta', 'novanta'
    );
Var
    N      ,
    decina ,
    unita  : Integer;
    numero : String;
    fileIN ,
    fileOUT: Text;
begin
    Assign(fileIN, 'input.txt');
    Reset(fileIN);
    Read(fileIN, N);
    Close(fileIN);

    if(N < 20) then
        begin
            numero:=CIFRE[N];
        end
    else
        begin
            decina:=(N DIV 10);
            unita :=(N MOD 10);
            numero:=Concat(numero, DECINE[decina]);
            if(unita <> 0) then
                begin
                   if(unita=1) OR (unita=8) then
                       Delete(numero, length(numero), 1);
                   numero:=Concat(numero, CIFRE[unita]);
                end;
        end;

    Assign(fileOUT, 'output.txt');
    Rewrite(fileOUT);
    Write(fileOUT, numero);
    Close(fileOUT);
end.