Differenze tra le versioni di "Convertire un numero decimale in numerazione romana"

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
 
Per convertire un numero intero decimale in un numero a [http://it.wikipedia.org/wiki/Sistema_di_numerazione_romano rappresentazione numerale romana] è possibile utilizzare un codice come quello seguente:
 
Per convertire un numero intero decimale in un numero a [http://it.wikipedia.org/wiki/Sistema_di_numerazione_romano rappresentazione numerale romana] è possibile utilizzare un codice come quello seguente:
  '''Public''' Struct CifraRomana_S
+
  Public Struct CifraRomana_S
 
   cr_stringa As String
 
   cr_stringa As String
 
   cr_intero As Short
 
   cr_intero As Short
  '''End''' Struct
+
  End Struct
 
   
 
   
'''Private''' RD As New CifraRomana_S[]
 
 
   
 
   
 +
Private RD As New CifraRomana_S[]
 
   
 
   
'''Private''' Function ConverteInRomano(numerus As Short) As String
 
 
   
 
   
  Dim rd0, rd1, rd2, rd3, rd4, rd5, rd6, rd7, rd8, rd9, rd10, rd11, rd12 As New CifraRomana_S
+
  Private Function ConverteInRomano(numerus As Short) As String
Dim stringaRomana As String
 
Dim b As Byte
 
 
   
 
   
 +
  Dim rd0, rd1, rd2, rd3, rd4, rd5, rd6, rd7, rd8, rd9, rd10, rd11, rd12 As New CifraRomana_S
 +
  Dim stringaRomana As String
 +
  Dim b As Byte
 
   
 
   
 
   If numerus > 3999 Then
 
   If numerus > 3999 Then
Riga 19: Riga 19:
 
     Return
 
     Return
 
   Endif
 
   Endif
 
 
   
 
   
 
   rd0.cr_stringa = "M"
 
   rd0.cr_stringa = "M"
Riga 70: Riga 69:
 
   Return stringaRomana
 
   Return stringaRomana
 
   
 
   
  '''End'''
+
  End
 
 
  
  
Riga 81: Riga 79:
 
oppure anche utilizzando la funzione ''.Chr()'' della Classe ''String'':
 
oppure anche utilizzando la funzione ''.Chr()'' della Classe ''String'':
 
  TextEdit1.RichText = "V" & String.Chr(&0305) & "  |V" & String.Chr(&0305) & "|" & "  V" & String.Chr(&033F)
 
  TextEdit1.RichText = "V" & String.Chr(&0305) & "  |V" & String.Chr(&0305) & "|" & "  V" & String.Chr(&033F)
 
  
  

Versione attuale delle 16:31, 1 lug 2024

Per convertire un numero intero decimale in un numero a rappresentazione numerale romana è possibile utilizzare un codice come quello seguente:

Public Struct CifraRomana_S
 cr_stringa As String
 cr_intero As Short
End Struct


Private RD As New CifraRomana_S[]


Private Function ConverteInRomano(numerus As Short) As String

 Dim rd0, rd1, rd2, rd3, rd4, rd5, rd6, rd7, rd8, rd9, rd10, rd11, rd12 As New CifraRomana_S
 Dim stringaRomana As String
 Dim b As Byte

 If numerus > 3999 Then
   Message.Warning("Il numero da convertire non deve essere superiore a 3999 !")
   Return
 Endif

 rd0.cr_stringa = "M"
 rd0.cr_intero = 1000
  RD.Add(rd0)
 rd1.cr_stringa = "CM"
 rd1.cr_intero = 900
  RD.Add(rd1)
 rd2.cr_stringa = "D"
 rd2.cr_intero = 500
  RD.Add(rd2)
 rd3.cr_stringa = "CD"
 rd3.cr_intero = 400
  RD.Add(rd3)
 rd4.cr_stringa = "C"
 rd4.cr_intero = 100
  RD.Add(rd4)
 rd5.cr_stringa = "XC"
 rd5.cr_intero = 90
  RD.Add(rd5)
 rd6.cr_stringa = "L"
 rd6.cr_intero = 50
  RD.Add(rd6)
 rd7.cr_stringa = "XL"
 rd7.cr_intero = 40
  RD.Add(rd7)
 rd8.cr_stringa = "X"
 rd8.cr_intero = 10
  RD.Add(rd8)
 rd9.cr_stringa = "IX"
 rd9.cr_intero = 9
  RD.Add(rd9)
 rd10.cr_stringa = "V"
 rd10.cr_intero = 5
  RD.Add(rd10)
 rd11.cr_stringa = "IV"
 rd11.cr_intero = 4
  RD.Add(rd11)
 rd12.cr_stringa = "I"
 rd12.cr_intero = 1
  RD.Add(rd12)

 For b = 0 To 12
   While (RD[b].cr_intero <= numerus)
     stringaRomana &= RD[b].cr_stringa
     numerus -= RD[b].cr_intero
   Wend
 Next

 Return stringaRomana

End


Rappresentare in numerazione romana una cifra superiore a 3999

Poiché nella numerazione romana per rappresentare una cifra non possono essere utilizzate più di tre segni della medesima lettera (ad esempio per rappresentare il numero 4 si usano le lettere IV e non IIII), per rappresentare le cifre superiori a 3999 non sarà possibile, dunque, scrivere più di tre volte la lettera "M" (che sta per mille). Il sistema numerico romano utilizza degli appositi segni diacritici al di sopra delle lettere per moltiplicare per 10000, per 100000 e per 1000000.

E' possibile ottenere, ancorché con una certa approssimazione, la rappresentazione grafica di questi particolari simboli numerici romani utilizzando anche un paio di caratteri diacritici del codice UNICODE:

TextEdit1.RichText = "V&#x305;  |V&#x305;|  V&#x33F;"

oppure anche utilizzando la funzione .Chr() della Classe String:

TextEdit1.RichText = "V" & String.Chr(&0305) & "  |V" & String.Chr(&0305) & "|" & "  V" & String.Chr(&033F)


Note

[1] Vi sono diversi codici, anche realizzati con vari linguaggi informatici, per convertire numeri arabi in numeri romani e viceversa. Un paio di essi a titolo esemplificativo: