Autore Topic: [RISOLTO] Funzione intero2numeroromano(int)  (Letto 1261 volte)

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
[RISOLTO] Funzione intero2numeroromano(int)
« il: 30 Novembre 2013, 21:09:04 »
Avrei bisogno di una funzione per trasformare un intero in una stringa contenente l'omologo in numerazione romana.
Ho cercato un po' sul forum e l'unica cosa che ho trovato era una funzione fatta da Ceskho lasciata sul suo vecchio spazio (soluzionisoftware) che però non permette più di scaricare l'allegato.
Ceskho o qualcun'altro mi può aiutare così non mi devo mettere li a riscriverla?
Approposito quella di Ceskho arrivava fino a 4000...
... per me è più che sufficente.

Grazie :ciao:
« Ultima modifica: 01 Dicembre 2013, 13:32:55 da Taurus dei miracoli »
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Funzione intero2numeroromano(int)
« Risposta #1 il: 01 Dicembre 2013, 01:00:57 »
Puoi agevolmente convertire dal VB il secondo ed il terzo codice presente in questa pagina:

http://www.vb-helper.com/howto_roman_arabic.html
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: Funzione intero2numeroromano(int)
« Risposta #2 il: 01 Dicembre 2013, 08:19:44 »
Ok, grazie... :ok:
...sei sempre preciso e puntuale. :2birre:
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: Funzione intero2numeroromano(int)
« Risposta #3 il: 01 Dicembre 2013, 13:32:34 »
Ho deciso di fare così (scritta da capo):

Codice: [Seleziona]
Public Function lResto(lNumero As Long, lDivisore As Long) As Long
  Dim lAppo As Long
  Dim lAppa As Long
  lAppo = Int(lNumero / lDivisore)
  lAppa = lNumero - (lAppo * lDivisore)
  Return lAppa
End

Public Function int2romani(iNumero As Long) As String
  Dim iAppo As Integer
  Dim iMigliaia As Integer
  Dim iCentinaia As Integer
  Dim iDecine As Integer
  Dim iUnita As Integer
  Dim sRis As String
  If iNumero > 0 And iNumero < 4000 Then
    iAppo = iNumero
    iMigliaia = iAppo / 1000
    iAppo = lResto(iAppo, 1000)
    iCentinaia = iAppo / 100
    iAppo = lResto(iAppo, 100)
    iDecine = iAppo / 10
    iUnita = lResto(iAppo, 10)
    sRis = ""
    If iMigliaia = 1 Then
      sRis = "M"
    Else If iMigliaia = 2 Then
      sRis = "MM"
    Else If iMigliaia = 3 Then
      sRis = "MMM"
    Endif
    If iCentinaia = 1 Then
      sRis = sRis & "C"
    Else If iCentinaia = 2 Then
      sRis = sRis & "CC"
    Else If iCentinaia = 3 Then
      sRis = sRis & "CCC"
    Else If iCentinaia = 4 Then
      sRis = sRis & "CD"
    Else If iCentinaia = 5 Then
      sRis = sRis & "D"
    Else If iCentinaia = 6 Then
      sRis = sRis & "DC"
    Else If iCentinaia = 7 Then
      sRis = sRis & "DCC"
    Else If iCentinaia = 8 Then
      sRis = sRis & "DCCC"
    Else If iCentinaia = 9 Then
      sRis = sRis & "CM"
    Endif 
    If iDecine = 1 Then
      sRis = sRis & "X"
    Else If iDecine = 2 Then
      sRis = sRis & "XX"
    Else If iDecine = 3 Then
      sRis = sRis & "XXX"
    Else If iDecine = 4 Then
      sRis = sRis & "XL"
    Else If iDecine = 5 Then
      sRis = sRis & "L"
    Else If iDecine = 6 Then
      sRis = sRis & "LX"
    Else If iDecine = 7 Then
      sRis = sRis & "LXX"
    Else If iDecine = 8 Then
      sRis = sRis & "LXXX"
    Else If iDecine = 9 Then
      sRis = sRis & "XC"
    Endif
    If iUnita = 1 Then
      sRis = sRis & "I"
    Else If iUnita = 2 Then
      sRis = sRis & "II"
    Else If iUnita = 3 Then
      sRis = sRis & "III"
    Else If iUnita = 4 Then
      sRis = sRis & "IV"
    Else If iUnita = 5 Then
      sRis = sRis & "V"
    Else If iUnita = 6 Then
      sRis = sRis & "VI"
    Else If iUnita = 7 Then
      sRis = sRis & "VII"
    Else If iUnita = 8 Then
      sRis = sRis & "VIII"
    Else If iUnita = 9 Then
      sRis = sRis & "IX"
    Endif
    Return sRis
  Else
    Return "ERR"
  Endif
End

Grazie
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #4 il: 01 Dicembre 2013, 20:15:00 »
Avrei bisogno di una funzione per trasformare un intero in una stringa contenente l'omologo in numerazione romana.
Ho cercato un po' sul forum e l'unica cosa che ho trovato era una funzione fatta da Ceskho lasciata sul suo vecchio spazio (soluzionisoftware) che però non permette più di scaricare l'allegato.
Ceskho o qualcun'altro mi può aiutare così non mi devo mettere li a riscriverla?
Approposito quella di Ceskho arrivava fino a 4000...
... per me è più che sufficente.

Grazie :ciao:

Si con la chiusura del vecchio spazio web ho perso molta roba ma se non erro in area download c'è ancora qualcosa.

P.S. I numeri romani non vanno oltre il 4000 :)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #5 il: 01 Dicembre 2013, 23:39:46 »
P.S. I numeri romani non vanno oltre il 4000

Dove è scritto che anticamente la rappresentazione dei numeri romani non superava l'attuale numero decimale 4000 ?  ???
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #6 il: 02 Dicembre 2013, 08:43:31 »
P.S. I numeri romani non vanno oltre il 4000 :)


Non è vero che non supera i 4000 è che non si può rappresentare con i caratteri ASCII.
Infatti per rappresentazioni superiori si usa il moltiplicatore a mille dei caratteri usati precedentemente (V, X, D, C, ecc.) che si rappresenta con un trattino sopra la lettera (per moltiplicare x 1000000 due trattini e così via).
Il limite dei numeri romani é che coi moltiplicatori a 1000 diventa difficilissimo lettere un numero sopra il 4000.
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #7 il: 02 Dicembre 2013, 15:53:51 »
Non è vero che non supera i 4000 è che non si può rappresentare con i caratteri ASCII.
Infatti per rappresentazioni superiori si usa il moltiplicatore a mille dei caratteri usati precedentemente (V, X, D, C, ecc.) che si rappresenta con un trattino sopra la lettera (per moltiplicare x 1000000 due trattini e così via).


...ed infatti... magari con uno stratagemma utilizzando il codice UNICODE ed in particolare i caratteri componibili mediante i caratteri diacritici:
Codice: gambas [Seleziona]

Public Sub Form_Open()


  TextEdit1.RichText = "V̅  |V̅|  V̿"


End

si riesce, bene o male, a rappresentare quei numeri dal 5000 in su.
Nell'esempio vengomo mostrati tre simboli che rappresentano rispettivamente: 5000, 500000 e 5000000.
« Ultima modifica: 03 Dicembre 2013, 01:36:40 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #8 il: 02 Dicembre 2013, 18:17:23 »
Non è vero che non supera i 4000 è che non si può rappresentare con i caratteri ASCII.
Infatti per rappresentazioni superiori si usa il moltiplicatore a mille dei caratteri usati precedentemente (V, X, D, C, ecc.) che si rappresenta con un trattino sopra la lettera (per moltiplicare x 1000000 due trattini e così via).


...ed infatti... magari con uno stratagemma utilizzando il codice UNICODE ed in particolare i caratteri componibili mediante i caratteri diacritici:
Codice: gambas [Seleziona]

Public Sub Form_Open()


  TextEdit1.RichText = "V̅ ⎹V̅⎸ V̿"


End

si riesce, bene o male, a rappresentare quei numeri dal 5000 in su.
Nell'esempio viene mostrato tre simboli che rappresentano rispettivamente: 5000, 500000 e 5000000.

In questi casi dalle mie parti si dice:
BELIN :rolleyes: :rolleyes: :rolleyes:
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #9 il: 02 Dicembre 2013, 18:45:32 »
In questi casi dalle mie parti si dice:
BELIN :rolleyes: :rolleyes: :rolleyes:

Se dalle tue parti si dicesse BELEN vivrei lì

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO] Funzione intero2numeroromano(int)
« Risposta #10 il: 03 Dicembre 2013, 01:18:22 »
Se dalle tue parti si dicesse BELEN vivrei lì

« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »