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
- Il file di input non contiene altri caratteri oltre a quelli precisati.
- 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. - I caratteri accentati devono essere inseriti privi di accento (per esempio, “trentatre” e non “trentatrè” o “trentatre'”).
- 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. - 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.