Algoritmo da numero decimale a numero romano

Algoritmi, discussioni sulle possibili implementazioni, matematica, fisica e tutti gli argomenti correlati alla programmazione
Rispondi
Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Algoritmo da numero decimale a numero romano

Messaggio da doom13 »

Come scritto nel titolo, voi come fareste? :)
Ultima modifica di doom13 il 14/10/2013, 18:25, modificato 1 volta in totale.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: C++ da numero decimale a numero romano

Messaggio da Sla »

mah.. io proverei a pensare ad un algoritmo per convertire il numero decimale in romano :fapensare: (come da titolo :fapensare: )
eppure mi sembra tutto giusto...

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: C++ da numero decimale a numero romano

Messaggio da doom13 »

:fapensare:





è una presa per il culo xD?
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: C++ da numero decimale a numero romano

Messaggio da Sla »

Più o meno.. è che fa un po' ridere la domada.. perché in c++? ti aspettavi un itoa_ex(x, LANG_ROMAN)?
Mi sembra più il caso di fare una domanda in "Teoria" chiedendo un possibile algoritmo, e poi di provare a implementare il tutto in c/c++.
eppure mi sembra tutto giusto...

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: C++ da numero decimale a numero romano

Messaggio da doom13 »

Sla ha scritto:Mi sembra più il caso di fare una domanda in "Teoria" chiedendo un possibile algoritmo
Mi sembrava abbastanza ovvio...
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: C++ da numero decimale a numero romano

Messaggio da Sla »

Invece a me sembra tu abbia chiesto del codice in c++ per effettuare la conversione.. sarò scemo io ;)
eppure mi sembra tutto giusto...

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: C++ da numero decimale a numero romano

Messaggio da doom13 »

Sla ha scritto:Invece a me sembra tu abbia chiesto del codice in c++ per effettuare la conversione.. sarò scemo io ;)
Beh si in effetti hai ragione, modifico il titolo.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da Sla »

Ripristina il titolo ,altrimenti sembro idiota.
Comunque...
I simboli in ordine sono:
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
Vado a intuito, potrei anche aver avuto un'idea sbagliata..
Crei un buffer di simboli (un array con molti spazi disponibili oppure una stack.. come vuoi tu)
Sia N il numero decimale intero di partenza, e value(S) il valore del simbolo S (S può essere M,D,C,L,X,V oppure I).
1) Con un ciclo che parte da S = M e risale ordinatamente fino a S=I poni C = N-Value(S).
1b) Ricorda ad ogni iterazione di controllare se N è 0, in questo caso esci dal ciclo perché la conversione è finita
2) Se C >= 0, fai un push nella stack (o buffer) con il simbolo S, poni N = C e ricominci il ciclo da capo (punto 1), con S = M )
3) altrimenti, continua il ciclo processando il prossimo simbolo

Il numero romano dovrebbe avere adesso i suoi simboli ordinatamente nella stack, il primo inserito è quello più a sinistra (il più significativo, diciamo).
eppure mi sembra tutto giusto...

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da doom13 »

Però c'è il problema del 9 per esempio, che comunque ha bisogno del simbolo X insieme al simbolo I.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da Sla »

Le scorciatoie di cui parli in realtà non sono necessarie (entrambe le notazioni sono accette, a quanto ricordo)
Spoiler
Immagine
Per esempio per il numero 19 il mio algoritmo genererebbe
XVIIII
che è giusto.
Se proprio vuoi, però, con le giuste precauzioni, puoi fare un post-processing sulla stringa generata per cercare le "parti brutte" e sostituirle.
Il bello è che puoi operare su una qualunque parte della stringa rimpiazzando alcuni simboli con altri dal valore equivalente, questo perché la stringa romana è la stessa cosa di un polinomio {somma di più costanti}.
Il criterio per analizzare le stringhe è di avere una tabella associativa da consultare per le sostituzioni (le "giuste precauzioni" includono anche l'ordine da seguire)
IIII -> IV
LXXXX -> XC
XXXX -> XL
...

Nel caso specifico, in "XVIIII" potresti trovare la substringa "IIII" e rimpiazzarla con "IV" per ottenere "XVIV"
eppure mi sembra tutto giusto...

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da doom13 »

Ottenendo XVIV sarebbe quindi sbagliato perchè dovrebbe essere XIX. A questo punto servirebbe un altro controllo.
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da Sla »

Hai ragione, mi chiedevo se riapplicato nuovamente il post processing si potesse ovviare..
Nel senso che nella tabella potrebbe esserci anche un VIV (=9) -> IX
eppure mi sembra tutto giusto...

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da Sla »

potresti dover fare due post processing separati, con tabelle distinte.
Ma hai provato a cercare su google? la mia soluzione è intuitiva, non ci ho pensato per più di un minuto, ma figurati se non ci sono tonnellate di esempi sull'argomento in giro per il web
eppure mi sembra tutto giusto...

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da doom13 »

Non ho cercato su google. Questo post-processing non convince tanto anche perché le possibili combinazioni da controllare sono parecchie...
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da Homunculus »

C'era la stessa domanda in un mio esame all'università (che ho prontamente saltato), ma ricordo che mi ha sorpreso la semplicità della soluzione proposta poi in seguito.

Se non ricordo male (e mi sembra che potrebbe funzionare) era una cosa del genere:

- Creo 4 array contenenti rispettivamente migliaia, centinaia, decine e unità (tipo: ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"] per le decine)
- In seguito estraggo per ogni array l'indice adeguato in base alle migliaia, centinaia, decine e unità dal numero decimale in input (usando divisioni e moduli).
- Poi é solo una questione di concatenazione di 4 stringhe

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da doom13 »

Soluzione interessante. Proverò a scriverlo in c++
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: Algoritmo da numero decimale a numero romano

Messaggio da BaronVsCorsar »

i numeri romani prevedono infiniti simboli per poter rappresentare infiniti numeri.
il primo passo per realizzare questo algoritmo è decidere fino a quali numeri può convertire.

per allenamento potrebbe essere intelligente partire con una conversione dei numeri da 1 a 10 (lo zero non esiste in numeri romani).
affrontato il problema dovrebbe essere più facile creare l'algoritmo (e la soluzione intelligente che propone Homu sembra proprio derivare da un allargamento degli orizzonti dell'algoritmo).
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti