|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Feb 2001
Città: Pescara
Messaggi: 10542
|
Programma per trasformare i numeri in numeri romani
Salve ragazzi.
Sono alle prime armi con la programmazione Java. Ho bisogno di creare un programmino in java che dato un numero restituisca il numero in cifre romane.... Ad esempio. Se scrivo 1745 deve restituire MDCCVL Qualcuno di voi saprebbe aiutarmi??? Se qualcuno non ricordasse tutti i numeri romani ecco qua ![]() I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2002
Città: Biella
Messaggi: 1882
|
Io l'ho fatto in VB e che fa l'operazione opposta... se vuoi dargli un occhiata e cercarlo di convertirlo bene, altrimenti mi spiace che nn sono servito
![]() Codice:
Public Function CRomanoToNum(ByVal sNumRomano As String) As Long 'converte un numero da romano a arabo Dim sAux As String Dim sRomani(12) As String Dim nArabici(12) As Integer Dim nI As Integer Dim nJ As Integer Dim bTrovato As Boolean 'preparo la tabella di conversione nArabici(0) = 1000 nArabici(1) = 900 nArabici(2) = 500 nArabici(3) = 400 nArabici(4) = 100 nArabici(5) = 90 nArabici(6) = 50 nArabici(7) = 40 nArabici(8) = 10 nArabici(9) = 9 nArabici(10) = 5 nArabici(11) = 4 nArabici(12) = 1 sRomani(0) = "M" sRomani(1) = "CM" sRomani(2) = "D" sRomani(3) = "CD" sRomani(4) = "C" sRomani(5) = "XC" sRomani(6) = "L" sRomani(7) = "XL" sRomani(8) = "X" sRomani(9) = "IX" sRomani(10) = "V" sRomani(11) = "IV" sRomani(12) = "I" 'ciclo per la conversione nI = 1 Do 'primo ciclo per i numeri composti da due caratteri nJ = -1 Do bTrovato = False nJ = nJ + 1 If Mid$(sNumRomano, nI, 2) = sRomani(nJ) Then bTrovato = True CRomanoToNum = CRomanoToNum + nArabici(nJ) sAux = sAux & Mid$(sNumRomano, nI, 2) End If Loop Until bTrovato = True Or nJ = 12 'se nn trova due caratteri validi prende il valore del carattere singolo If bTrovato = False Then nJ = -1 Do nJ = nJ + 1 If Mid$(sNumRomano, nI, 1) = sRomani(nJ) Then bTrovato = True CRomanoToNum = CRomanoToNum + nArabici(nJ) sAux = sAux & Mid$(sNumRomano, nI, 1) End If Loop Until bTrovato = True Or nJ = 12 End If nI = nI + 1 Loop Until Len(sAux) = Len(sNumRomano) End Function ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
Tieni l'ho fatto al volo, dovrebbe andare ...
manca l'inseriemtno da tastiera però ![]() Codice:
class NumeriRomani { /* * Questa funzione converte un numero decimale in un numero romano * * I = 1 * II = 2 * III = 3 * IV = 4 * V = 5 * X = 10 * L = 50 * C = 100 * D = 500 * M = 1000 * * */ public static String converti(int numeroDaConvertire) { int numeroM = 0; int numeroD = 0; int numeroC = 0; int numeroL = 0; int numeroX = 0; int numeroV = 0; int numeroI = 0; int resto; int i; String numeroRomano = ""; //quante M numeroM = numeroDaConvertire/1000; resto = numeroDaConvertire%1000; //quante D numeroD = resto/500; resto = resto%500; //quante C numeroC = resto/100; resto = resto%100; //quante L numeroL = resto/50; resto = resto%50; //quante X numeroX = resto/10; resto = resto%10; //quante V numeroV = resto/5; resto = resto%5; //quante I numeroI = resto; for(i=0; i<numeroM; i++) { numeroRomano = numeroRomano+"M"; } //ci può stare al massimo una D if (numeroD > 0) { numeroRomano = numeroRomano+"D"; } //centinaia if (numeroC>3 && numeroC != 0) { numeroRomano = numeroRomano+"CD"; //400 } else for(i=0;i<numeroC; i++) numeroRomano = numeroRomano+"C"; //ci può stare al massimo una L if (numeroL > 0) { numeroRomano = numeroRomano+"L"; } //decine if (numeroX>3 && numeroX != 0) { numeroRomano = numeroRomano+"XL"; //40 } else for(i=0;i<numeroX; i++) numeroRomano = numeroRomano+"X"; //ci può stare al massimo una V if (numeroV > 0) { numeroRomano = numeroRomano+"V"; } //unità if (numeroI>3 && numeroI != 0) { numeroRomano = numeroRomano+"IV"; //4 } else for(i=0;i<numeroI; i++) numeroRomano = numeroRomano+"I"; return numeroRomano; } public static void main(String[] args) { String numeroRomano = converti(1444); System.out.println(numeroRomano); } } Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#4 | |
Bannato
Iscritto dal: Feb 2001
Città: Pescara
Messaggi: 10542
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Feb 2001
Città: Pescara
Messaggi: 10542
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#6 |
Bannato
Iscritto dal: Feb 2001
Città: Pescara
Messaggi: 10542
|
funonzia grazie mille
![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sblantipodi: al tuo manca qualche "regola"... Ad esempio il 900 ed il 9...
Per convertire in numeri romani si può usare ilnromale algoritmo di conversione fra cifre...tra l'altro è molto + semplice... Codice:
string numeri_romani(unsigned int x) { struct cifra { unsigned int num; string str; }; cifra vett[] = {{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"}, {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"}, {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"}}; if(x == 0) return "0"; string str = ""; int i = 0; while(x > 0) { if((x / vett[i].num) == 0) ++i; else { str += vett[i].str; x -= vett[i].num; } } return str; } |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
bello questo
![]() Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#9 | |
Bannato
Iscritto dal: Feb 2001
Città: Pescara
Messaggi: 10542
|
Quote:
Prova a scrivere 45 con questo programma ![]() Il prof. oggi ci ha detto che dobbiamo obbligatoriamente risolverlo utilizzando il metodo charAt |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
45 viene tradotto in XLV che è corretto ... come diceva cionci non va bene se metti 9 o 90 perchè devi aggiungere qualche caso ...
charAt in che modo lo vuole usare il tuo professore? Ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Feb 2001
Città: Pescara
Messaggi: 10542
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
mica ne sarei tanto sicuro ... per esempio
48 è XLVIII mica IIL di sicuro 40 è XL ma non so se 45 è VL anche perchè 48 come dici tu dovrebbe essere VLIII che non mi paer sia corretto ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma charAT a che serve in Java ?
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
charAt
public char charAt(int index) Returns the character at the specified index. An index ranges from 0 to length() - 1. The first character of the sequence is at index 0, the next at index 1, and so on, as for array indexing. Parameters: index - the index of the character. Returns: the character at the specified index of this string. The first character is at index 0. ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
Quote:
![]() ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
aspetto chiarimenti dal diretto interessato ...
magari converte il numero in stringa e da li in base alla posizione sceglie che lettera mettere 1923 lo ceonverte in stringa poi vele la lunghezza della stringa che è 4 allora la prima cifra saranno migliaia poi centinaia poi decine e unità ma è una inutile complicazione, se dovesse essere così. Ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:17.