Convertire un numero decimale in numerazione romana: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (6 versioni intermedie di uno stesso utente non sono mostrate) | |||
| 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 | |||
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 rd0, rd1, rd2, rd3, rd4, rd5, rd6, rd7, rd8, rd9, rd10, rd11, rd12 As New CifraRomana_S | ||
Dim stringaRomana As String | Dim stringaRomana As String | ||
Dim | 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=== | ===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 [http://it.wikipedia.org/wiki/ | 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 [http://it.wikipedia.org/wiki/Sistema_di_numerazione_romano#Simboli 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 [http://maxpiano.altervista.org/unicode/intro.php?page=10 caratteri diacritici] del codice [http://it.wikipedia.org/wiki/Unicode UNICODE]: | E' possibile ottenere, ancorché con una certa approssimazione, la rappresentazione grafica di questi particolari simboli numerici romani utilizzando anche un paio di [http://maxpiano.altervista.org/unicode/intro.php?page=10 caratteri diacritici] del codice [http://it.wikipedia.org/wiki/Unicode UNICODE]: | ||
TextEdit1.RichText = "V&#x305; |V&#x305;| V&#x33F;" | 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) | |||
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̅ |V̅| V̿"
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:
- il codice realizzato da un utente del forum Gambas-it.org;
- realizzato in VisualBasic.