|
|||||||
|
|
|
![]() |
|
|
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: 18:20.


















