Probleme java

Fermé
adriano - 22 sept. 2010 à 04:39
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 - 23 sept. 2010 à 09:20
Bonjour,

voila j ai M(1000), D(500), C(100), L(50), X(10), V(5) et I(1) et des groupes
CM(900), CD(400), XC(90), XL(40), IX(9) et IV(4).

je dois rentrer un nombre compris entre 1 et 4999 et le transformer en chiffre romain et vise versa.
par exemple;

15
XV

XV
15

1999
MCMXCIX

CMXLVIII
948

50000
Nombre hors intervalle

15M+
Entrée invalide

j ai de la misere a le faire, est ce qu il y aurai des volontaire pour me donner un coup de main, des indices.
merci enormement. ;)
A voir également:

2 réponses

varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
22 sept. 2010 à 10:25
Bonjour,

Je veut bien te donner un coup de main, mais pas le faire a ta place:

--> tu code, et quand tu as un problème tu demande un coup de main.

Pour commencer, je vais te fournir un exemple d'algorithme a suivre pour ton problème que tu devra implémenter en java (puisque apparemment tu veut coder en java)

int min;
int max
int nombre;
boolean bool

nombre = saisir();

si (nombre < min || nombre > 4999)
{
    afficher("nombre hors limite, choisir entre 1 et 4999=)
}else

si (nombre n'est pas un int)
{
    afficher("entrée invalide, choisir un nombre")
}else
{
    //ici l'algorithme
    /* c''est simple, il va consister a retirer a chaque fois la valeur de la lettre tant que le resultat reste positif, et passez au suivant.
    Par exemple 1999 = MCMXCIX ==> 1999 - 1000 = 999 > 0 donc on affiche deja M puis 999 - 1000 = -1 < 0, donc on passe a CM 999 - 900 = 99 > 0 on a donc MCM puis 99 - 999 = -900 < 0 etc...
    bool = true
    while (bool)
    {
        nombre = nombre - 1000;
        if (nombre < 0)
        {
            nombre = nombre + 1000;
            bool = false
        }else
        {
            affiche("M")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 900;
        if (nombre < 0)
        {
            nombre = nombre + 900;
            bool = false
        }else
        {
            affiche("CM")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 500;
        if (nombre < 0)
        {
            nombre = nombre + 500;
            bool = false
        }else
        {
            affiche("D")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 400;
        if (nombre < 0)
        {
            nombre = nombre + 400;
            bool = false
        }else
        {
            affiche("CD")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 100;
        if (nombre < 0)
        {
            nombre = nombre + 100;
            bool = false
        }else
        {
            affiche("C")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 90;
        if (nombre < 0)
        {
            nombre = nombre + 90;
            bool = false
        }else
        {
            affiche("XC")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 50;
        if (nombre < 0)
        {
            nombre = nombre + 50;
            bool = false
        }else
        {
            affiche("L")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 40;
        if (nombre < 0)
        {
            nombre = nombre + 40;
            bool = false
        }else
        {
            affiche("XL")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 10;
        if (nombre < 0)
        {
            nombre = nombre + 10;
            bool = false
        }else
        {
            affiche("X")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 9;
        if (nombre < 0)
        {
            nombre = nombre + 9;
            bool = false
        }else
        {
            affiche("M")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 5;
        if (nombre < 0)
        {
            nombre = nombre + 5;
            bool = false
        }else
        {
            affiche("IX")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 4;
        if (nombre < 0)
        {
            nombre = nombre + 4;
            bool = false
        }else
        {
            affiche("IV")
        }
    }
    bool = true
    while (bool)
    {
        nombre = nombre - 1;
        if (nombre < 0)
        {
            nombre = nombre + 1;
            bool = false
        }else
        {
            affiche("I")
        }
    }

}

0
MrSlave Messages postés 2587 Date d'inscription lundi 28 avril 2008 Statut Membre Dernière intervention 26 août 2011 146
22 sept. 2010 à 11:41
Moi j'aurai plus décomposé le nombre.
Par exemple pour 3541, on prend le premier chiffre, on regarde sa correspondance dans un tableau par exemple, puis on prend le 2eme chiffre, etc ...
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
22 sept. 2010 à 11:47
tu aurais eu des problème mon pti slave, par exemple pour 8, tu aurais fait comment? et 3? sachant que sa augmenterait la complexité de l'algo vu que tu devra refaire le même procéder jusqu'à 4 fois (mille/cent/dix/unité), et si il y a pas de millier, ni de centaine, ni de dizaine?

bref, beaucoup plus de paramètre à prendre en compte
0
merci beaucoup, sa ma beaucoup aider,
mais j ai une question, par rapport au code que tu as donnés,
pk par exemple
bool = true
while (bool)
{
nombre = nombre - 1000;
if (nombre < 0)
{
nombre = nombre + 1000;
bool = false
}else
{
affiche("M")
}
}
on ecrit nombre = nombre + 1000, bool = false, je ne comprend pas, parce que si je l enleve sa ne fonctionne plus de la meme facon, mais je comprend pas parce que nombre ne va jamais tomber negatif si je met une condition avant decrire tous le code.

while (nombreEntre < 1 || nombreEntre > 4999){

System.out.println("Nombre entrer hors limite");
nombreEntre = Clavier.lireInt();

}
merci beaucoup ;)
0
varfendell Messages postés 3256 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 8 février 2020 699
23 sept. 2010 à 09:20
en faite, imagine que tu ai 900. le retour doit etre CM. donc la première boucle doit rien donner, et la seconde doit le mettre a zero:
si on suis la maniere de faire de mon code on aura:

nombre = 900 - 1000 = -100
=> nombre < 0 donc
nombre = -100 + 1000 = 900 (on le remet comme avant)
bool = false (on sort de la boucle while pour afficher le M)
(on rentre dans celle pour afficher MC)
nombre = 900 - 900 = 0
nombre n'est pas < 0 mais = 0, donc on entre dans le else)
afficher (CM)
nombre = 0 - 900 = -900
nombre < 0 donc on sort de la boucle afficher CM:
nombre = -900 + 900 = 0
bool = false

et toute les autre boucle vont etre sauter car nombre = 0

et a la fin tu n'aura plus que CM d'affiché

nombre n'est pas fixe, ce n'est pas parce que tu met une condition au début de ta boucle que dans toute la boucle cette variable va satisfaire cette condition. La variable ne va satisfaire la condition de la boucle que en entrant.
0