Finita o quasi c'è solo qualche dettaglio da rivedere, ma nella versione in Vb6 sono certo che funzionerà perfettamente.
Per ora c'è solo questa in Python.
Esegue conversioni da Decimali a numeri romani
Da numeri romani a decimali
Esegue calcoli esclusivamente con numeri romani tipo XX + III = XXIII
fa somme, sottrazioni, moltiplicazioni, divisioni.
I limiti penso che siano noti niente numeri negativi, ne numeri che se convertiti o sommati diano un risultato superiore a 3999.
Le divisioni restituiscono solo interi.
Questo il codice di cui le funzioni di conversione sono gia state postate.
CODICE
#************* RomanCalc.py ver 1.00 *************
#************ Scritto in Python ver 2.7 *********
#*** Converte numeri decimali in numeri romani e viceversa ***
#*** 14/12/2010 RomanCalc.py is licenced under LGPL. ***
#*** http://www.gnu.org/licenses/lgpl.html ***
#*** I'd be happy to hear if you use this in your software. ***
# Copyright (C) 2010 xyzangelo@gmail.com
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
#*** programma testato unicamente su win seven 64bit.
#*** Funzione che trasforma numeri decimali in numeri romani
#*** Questa però presenta un limite numerico massimo che è 3999
#*** Numeri superiori non possono essere convertiti in quanto
#*** la numerazione romana comprende cifre fino alle migliaia simbolo (M)
#*** cifre superiori per poterle sommare, sotrarre, moltiplicarle etc.
#*** necessitano di caratteri non compresi nei 255 codici ASCII
#*** ATTENZIONE: oltre il 3999 il programma da i numeri nel vero senso
#*** della parola, es. digitate 5656 e vi esce XX.
import sys #*** header di programma.
def ConvertNum(Num):
dgt = "IVXLCDM" #*** Costante dei numeri romani.
x = 0
t = ""
while Num > 0: #*** esegue un ciclo fino a che il numero delle cifre è finito
dg = Num % 10 #*** trova il resto della divisione num / 10, o meglio è la funzione MOD di python
Num = int(Num / 10) #*** divide e trasforma Num in un'intero
#*** Procedura per la conversione in numero romano.
if dg == 1:
t = dgt[x:x+1] + t
elif dg == 2:
t = dgt[x:x+1] + dgt[x:x+1] + t
elif dg == 3:
t = dgt[x:x+1] + dgt[x:x+1] + dgt[x:x+1] + t
elif dg == 4:
t = dgt[x:x+2] + t
elif dg == 5:
t = dgt[x + 1:x+2] + t
elif dg == 6:
t = dgt[x + 1:x+2] + dgt[x:x+1] + t
elif dg == 7:
t = dgt[x + 1:x+2] + dgt[x:x+1] + dgt[x:x+1] + t
elif dg == 8:
t = dgt[x + 1:x+2] + dgt[x:x+1] + dgt[x:x+1] + dgt[x:x+1] + t
elif dg == 9:
t = dgt[x:x+1] + dgt[x + 2:x+3] + t
x += 2
return t
#*** Funzione che trasforma numeri romani in numeri decimali.
#*********************************************************************
#*** Bla... Bla... Bla!!! come listato conversione decimale a romano.
#*********************************************************************
#*** Questa però presenta un limite numerico massimo che è MMMCMXCIX (3999)
#*** Numeri superiori non possono essere convertiti in quanto
#*** la numerazione romana comprende cifre fino alle migliaia simbolo (M)
#*** cifre superiori per poterle sommare, sotrarre, moltiplicarle etc.
#*** necessitano di caratteri non compresi nei 255 codici ASCII
#*********************************************************************
#*** ATTENZIONE: oltre il MMMCMXCIX (3999) il programma da errore
#*********************************************************************
#*** Funzione per dichiarare e sostituire i numeri arabi o decimali a quelli romani
def RomToDec(t):
Y = 0
#*** Costanti dei numeri romani.
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
#*** Assegnazione dei numeri decimali
if t == "I":
Y = I
elif t == "V":
Y = V
elif t == "X":
Y = X
elif t == "L":
Y = L
elif t == "C":
Y = C
elif t == "D":
Y = D
elif t == "M":
Y = M
return Y
#*** Funzione di conversione
def ConvRomToDec(Rom):
x = 0
x1 = 1
t = ""
dc = 0
dc1 = 0
dec = 0
z = 0
for z in range(len(Rom)): #*** esegue un ciclo fino a che il numero delle cifre romane è finito
#*** Procedura per la conversione in numero decimale.
#*** Prende ogni carattere o numero romano, e verifica che non sia inferiore al successivo
#*** con uno shift da sinistra verso destra.
#*** Se il carattere o 'numero romano' è maggiore del successivo lo somma,
#*** altrimenti lo sotrae, con segno negativo per suplire la somma precedente.
#*****************************************************************************************
#*** Come prima cosa per sapere se un numero romano è inferiore al successivo, trasformo
#*** i numeri romani in decimali.
t = Rom[x:x1]
dc = RomToDec(t)
t = Rom[x1:x1 + 1]
dc1 = RomToDec(t)
if dc >= dc1: #**** Converte i positivi tipo ( XXVIII ) = 28
dec += (dc + dc1) - dc1 # lo sottrae per evitare somme doppie incrementali
elif dc < dc1: #**** Converte i negativi tipo (MCMXXX) = 1930 o (IV) = 4
dec += (-dc * 2 + dc1) + dc - dc1
x += 1
x1 += 1
return dec
while 1:
print "Calcolatrice romana... ver 1.00"
print
print "1) = Convertitore Decimale Romano..."
print "2) = Convertitore Romano Decimale..."
print "3) = Calcolatrice Romana............"
print "4) = Uscita dal programma..........."
print
Qst = input("Sciegliere un numero tra 1 e 4: ")
if Qst == 1:
Num = input("Inserire un numero decimale inferiore a 4000: ")
if Num == 0:
break
print "numero romano = ",ConvertNum(Num) # Stampa il numero romano.
if Qst == 2:
print "Premere e lasciare premuto (Caps Lock) per comodita."
print "ATTENZIONE: non sbagliare ad immettere i numeri romani. Pena errore nella conversione."
print
#ERRORE o COSA? Se si seleziona dal menu la calcolatrice, il progr non dovrebbe dopo il calcolo saltare QUI!!! HELP ME PLEASE
Rom = raw_input("Inserire un numero romano non superiore a MMMCMXCIX (3999): ")
print "numero decimale = ",ConvRomToDec(Rom) # Stampa il numero decimale.
if Qst == 3:
print
print "immettere i numeri romani da sommare, sotrarre, moltiplicare,o dividere max(MMMCMXCIX 3999)."
print "Il primo numero deve essere seguito dall'operatore."
print "(Es: XXV+ e premere invio quindi Immettere XX e premere invio)"
print "Risultato = XLV"
N1 = raw_input("Primo numero Romano -> ")
N2 = raw_input("Secondo numero Romano -> ")
if N1 == "" or N2 == "":
break
#*** Estrapola dalla stringa il primo numero, l'operatore
z = 0
Nx = 0
Ny = 0
Risult = 0
p1 = N1[z:len(N1)-1] #* Estrae il primo numero
op = N1[len(N1)-1:] #* Estrae l'operatore
Nx = ConvRomToDec(p1)
Ny = ConvRomToDec(N2)
if op == '+':
Risult = Nx + Ny
elif op == '-':
Risult = Nx - Ny
elif op == '*':
Risult = Nx * Ny
elif op == '/':
Risult = int(Nx / Ny)
print "Risultato operazione = ",ConvertNum(Risult) # Stampa il risultato in numero romano.3
if Qst == 4:
print "FINE. Grazie per aver usato CalcRoman.py"
break
Rom = raw_input("Inserire un numero romano non superiore a MMMCMXCIX (3999) (q) per uscire: ")
print
print "Premere e lasciare premuto (Caps Lock) per comodita."
print "ATTENZIONE: non sbagliare ad immettere i numeri romani. Pena errore nella conversione."
print
print "numero decimale = ",ConvRomToDec(Rom) # Stampa il numero decimale.
Ora in Vb6 sarà uno scherzo...