XmX

Calcolatrice con numeri romani, tipo XX - IX = XI

« Older   Newer »
  Share  
gigio^ne
view post Posted on 12/12/2010, 14:21 by: gigio^ne
Avatar

Advanced Member

Group:
Member
Posts:
1,184
Location:
Sedna

Status:


Ecco il secondo tassello. Converte i numeri romani in numeri arabi o se preferite decimali. :B):
Ho cercato in rete ma nisba nulla NULL, di codici a parte quella miseria che convertiva i romani in decimali
ma solo fino a 1000 ed il codice è lungo una settimana, e oltretutto sbaglia.
Se non trovate codice simile in rete lo rilascio sotto GPL Cercate. cercate.... prima che mi monto la testa. :lol:

Sorgente scritto da [email protected] Rilasciato sotto GPL www.gnu.org/licenses/gpl.html

Source code:
CODICE
#*** RomaToDec.py scritta con Pyton ver. 2.7 per windows 64bit
#*** programma testato unicamente su win seven 64bit.
#*** 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
#*********************************************************************
import sys    #*** header di programma.
#*** 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
   #print Y
   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
# Programma principale, esegue un ciclo infinito richiamando se stesso fino a che non viene
# immesso (q) o si preme invio senza alcun carattere romano e non. Procedura errori non implementata.
print "Premere e lasciare premuto (Caps Lock) per comodita."
print "ATTENZIONE: non sbagliare ad immettere i numeri romani. Pena errore nella conversione."
print
while 1:
   Rom = raw_input("Inserire un numero romano non superiore a MMMCMXCIX (3999) (q) per uscire: ")
   if Rom == "q" or Rom == "Q":
       print "FINE. Grazie per aver usato RomaToDec.py"
       break
   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.


E Python quindi occhio all'identazione. :gatto6kb5.jpg:
 
Top
20 replies since 6/12/2010, 21:08   8215 views
  Share