'=========================================================================== ' Subject: NUMBER TO LITERAL (ITALIAN) Date: 03-19-97 (15:00) ' Author: Angelo Ken Pesce Code: QB, QBasic, PDS ' Origin: us0082@uniserv.uniplan.it Packet: MISC.ABC '=========================================================================== DECLARE SUB readdata () DECLARE FUNCTION u$ (i!) DECLARE FUNCTION d$ (i!) DECLARE FUNCTION d1$ (i!) DECLARE FUNCTION c$ (i!) DECLARE FUNCTION m$ (i!) DECLARE FUNCTION m1$ (i$) DECLARE FUNCTION m2$ (i$) DECLARE FUNCTION decod$ (i$) DECLARE SUB init () REM ---------------------------------------------------------- DEFLNG A-Z DIM SHARED unit(9) AS STRING DIM SHARED dec(9) AS STRING DIM SHARED dec1(8) AS STRING DIM SHARED millepre(2) AS STRING DIM SHARED miliopre(2) AS STRING DIM SHARED miliapre(2) AS STRING REM ---------------------------------------------------------- DATA "zero","uno","due","tre","quattro","cinque","sei","sette","otto","nove","." DATA "dieci", "undici", "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove","." DATA "venti","trenta","quaranta","cinquanta","sessanta","settanta","ottanta","novanta","." DATA "mille","mila","." DATA "unmilione","milioni","." DATA "unmiliardo","miliardi","." REM ---------------------------------------------------------- CALL init DO INPUT "Numero (premi invio per uscire)"; i$ PRINT : PRINT "----" PRINT "Cifre:"; LEN(i$): PRINT dd$ = decod(i$) PRINT "> "; dd$ IF dd$ = "**ERR.2**" THEN PRINT : PRINT "Errore n.2: Numero fuori limite" PRINT "----": PRINT : PRINT LOOP DEFSNG A-Z FUNCTION c$ (i) REM da 100 a 999 i$ = STR$(i) pre$ = LEFT$(i$, 2) pre1$ = RIGHT$(i$, 2) pr = VAL(pre$) pr1 = VAL(pre1$) IF pr = 1 THEN d11$ = "" ELSE d11$ = u$(pr) SELECT CASE pr1 CASE IS = 0 c$ = d11$ + "cento" CASE IS <= 9 c$ = d11$ + "cento" + u$(pr1) CASE IS <= 19 c$ = d11$ + "cento" + d$(pr1) CASE ELSE IF VAL(LEFT$(pre1$, 1)) = 8 THEN add$ = "cent" ELSE add$ = "cento" c$ = d11$ + add$ + d1$(pr1) END SELECT END FUNCTION FUNCTION d$ (i) REM da dieci a diciannove d$ = dec(i - 10) END FUNCTION FUNCTION d1$ (i) REM da venti a novantanove i$ = STR$(i) decimal$ = LEFT$(i$, 2) unit1$ = RIGHT$(i$, 1) IF VAL(unit1$) = 0 THEN GOTO vz1 IF VAL(unit1$) = 1 OR VAL(unit1$) = 8 THEN d11$ = LEFT$(dec1(VAL(decimal$) - 1), LEN(dec1(VAL(decimal$) - 1)) - 1) ELSE d11$ = dec1(VAL(decimal$) - 1) END IF d1$ = d11$ + u(VAL(unit1$)) GOTO ve1 vz1: d1$ = dec1(VAL(decimal$) - 1) GOTO ve1 ve1: END FUNCTION FUNCTION decod$ (i$) IF i$ = "" THEN END i = VAL(i$) SELECT CASE i CASE IS <= 9 decod$ = u$(i) CASE IS <= 19 decod$ = d$(i) CASE IS <= 99 decod$ = d1$(i) CASE IS <= 999 decod$ = c$(i) CASE IS <= 999999 decod$ = m$(i) CASE ELSE l = LEN(i$) SELECT CASE l CASE IS < 10 decod$ = m1$(i$) CASE IS < 16 decod$ = m2$(i$) CASE ELSE decod$ = "**ERR.2**" END SELECT END SELECT END FUNCTION SUB init WIDTH 80, 50: CLS COLOR 10 PRINT "--------------------------------------" PRINT "======================================" PRINT "Angelo KEN Pesce 1997" PRINT "Convertitore Cifre > Lettere": PRINT PRINT "Versione 1.7": PRINT : PRINT PRINT "Limite massimo corrente: 999.999.999.999.999 (15 cifre, 24 passaggi)": PRINT : PRINT CALL readdata PRINT "======================================" PRINT "--------------------------------------": PRINT : PRINT COLOR 2 END SUB FUNCTION m$ (i) REM fino a 999999 i$ = STR$(i) r$ = RIGHT$(i$, 3) l$ = LEFT$(i$, LEN(i$) - 3) rr = VAL(r$) SELECT CASE rr CASE IS = 0 r1$ = "" CASE IS <= 9 r1$ = u(rr) CASE IS <= 19 r1$ = d(rr) CASE IS <= 99 r1$ = d1(rr) CASE ELSE r1$ = c(rr) END SELECT rl = VAL(l$) IF rl = 1 THEN l1$ = "": k1$ = millepre(1): GOTO ex1 ELSE k1$ = millepre(2) SELECT CASE rl CASE IS <= 9 l1$ = u(rl) CASE IS <= 19 l1$ = d(rl) CASE IS <= 99 l1$ = d1(rl) CASE ELSE l1$ = c(rl) END SELECT ex1: m$ = l1$ + k1$ + r1$ END FUNCTION FUNCTION m1$ (i$) REM fino a 999999999 r$ = RIGHT$(i$, 6) l$ = LEFT$(i$, LEN(i$) - 6) rr = VAL(r$) SELECT CASE rr CASE IS = 0 r1$ = "" CASE IS <= 9 r1$ = u(rr) CASE IS <= 19 r1$ = d(rr) CASE IS <= 99 r1$ = d1(rr) CASE IS <= 999 r1$ = c(rr) CASE ELSE r1$ = m(rr) END SELECT rl = VAL(l$) IF rl = 1 THEN l1$ = "": k2$ = miliopre(1): GOTO ex11 ELSE k2$ = miliopre(2) SELECT CASE rl CASE IS <= 9 l1$ = u(rl) CASE IS <= 19 l1$ = d(rl) CASE IS <= 99 l1$ = d1(rl) CASE ELSE l1$ = c(rl) END SELECT ex11: m1$ = l1$ + k2$ + r1$ END FUNCTION FUNCTION m2$ (i$) REM fino a 999.999.999.999.999 REM Passaggi massimi: 24 r$ = RIGHT$(i$, 9) l$ = LEFT$(i$, LEN(i$) - 9) rr = VAL(r$) SELECT CASE rr CASE IS = 0 r1$ = "" CASE IS <= 9 r1$ = u(rr) CASE IS <= 19 r1$ = d(rr) CASE IS <= 99 r1$ = d1(rr) CASE IS <= 999 r1$ = c(rr) CASE IS <= 999999 r1$ = m(rr) CASE ELSE r1$ = m1(r$) END SELECT rl = VAL(l$) IF rl = 1 THEN l1$ = "": k3$ = miliapre(1): GOTO ex111 ELSE k3$ = miliapre(2) SELECT CASE rl CASE IS <= 9 l1$ = u(rl) CASE IS <= 19 l1$ = d(rl) CASE IS <= 99 l1$ = d1(rl) CASE IS <= 999 l1$ = c(rl) CASE ELSE l1$ = m(rl) END SELECT ex111: m2$ = l1$ + k3$ + r1$ END FUNCTION SUB readdata PRINT "Lettura dati:"; FOR i = 0 TO 9 READ unit(i) NEXT GOSUB err1 FOR i = 0 TO 9 READ dec(i) NEXT GOSUB err1 FOR i = 1 TO 8 READ dec1(i) NEXT GOSUB err1 FOR i = 1 TO 2 READ millepre(i) NEXT GOSUB err1 FOR i = 1 TO 2 READ miliopre(i) NEXT GOSUB err1 FOR i = 1 TO 2 READ miliapre(i) NEXT GOSUB err1 GOTO ext3 err1: READ a$ n = n + 1 IF a$ <> "." THEN PRINT "Errore n.1: Errore lettura dati": END ELSE PRINT n; ":OK "; RETURN ext3: PRINT END SUB FUNCTION u$ (i) REM da zero a nove u$ = unit(i) END FUNCTION