IFT1170 - TRAVAIL PRATIQUE #1 - 22 mai 2001

Minerva, les romains et la calculette ...

Mohamed Lokbani


DATE LIMITE: 07 juin 2001 minuit, avec une pénalité de 2 points par jour de retard.


Conseils
  • À faire seul ou à 2. Il est quand même conseillé de faire le TP à deux (maximum).
  • Lisez l'énoncé de A à Z, puis en cas de problèmes,
    contactez-nous (démonstrations, séances de consultation, pauses durant les séances de cours).
  • N'attendez pas la semaine précédant la remise avant de commencer... vous n'aurez pas le temps!
  • 1. BUT: Ce TP a pour but de vous faire pratiquer les matières suivantes:
  • premiers pas en Java
  • structures de contrôle
  • l'algorithmique de base
  • 2. Description:
    Dans ce travail pratique, vous allez concevoir une calculatrice romaine, permettant d'effectuer les opérations d'addition et de soustraction sur des chiffres romains.

    3. Description des chiffres romains:

    Les valeurs décimales inférieures à 3999 sont représentées dans le système numérique romain par des lettres. Le tableau suivant donne la correspondance entre le système décimal et le système romain:
     
    chiffre (lettre) dans le système romain
    correspondance dans le système décimal
    M
    1000
    D
    500
    C
    100
    L
    50
    X
    10
    V
    5
    I
    1

    3. Calcul dans la système romain:

      Représentation

    • Les chiffres romains sont écrits dans ordre descendant. Les chiffres sont additionnés pour produire la valeur finale, sauf pour certains préfixes (voir plus bas).

      Nombre d'occurrences

    • Pas plus de 3 occurrences de M, C, X ou I peuvent apparaître consécutivement dans un nombre romain, et pas plus qu'un seul D, L, ou V dans ce nombre la. Ainsi par exemple, on peut avoir MMM mais pas MMMM et MCCC, mais pas MCCCC etc.

    • De même, le chiffre C, X ou I peut être utilisé comme préfixe, et sa valeur est donc retranchée au lieu d'être ajoutée au nombre, comme suit:

      Un C qui préfixe un M ou un D, représente respectivement 900 ou 400, et les chiffres M & D sont écrits après le C ; par exemple:
      CM <=> 900
      car M=1000 et C=100.
      Avoir C avant M, on retranche => cela signifie 1000-100=900.

    • Les chiffres qui viennent après le M ou le D, ne peuvent totaliser plus de 99. On ne peut pas avoir donc: CMM.

    • Un X qui préfixe un C ou un L, représente respectivement 90 ou 40, et les chiffres C & L sont écrits après le X ; par exemple:
      XC <=> 90
      car C=100 et X=10.
      Avoir X avant C, on retranche => cela signifie 100-10=90.

    • Un I qui préfixe un X ou un V, représente respectivement 9 ou 4, et les chiffres X & V sont écrits après le I à la fin du chiffre, par exemple:
      IV <=> 4
      car V=5 et I=1.
      Avoir I avant V, on retranche => cela signifie 5-1=4.

    • Ainsi la valeur (en romain) de MMI correspond à 2001 en décimal, MCMLXX à 1970 etc.

    4. Travail à réaliser:
    Votre tâche est d'écrire un programme en java qui prend en entrée une opération mathématique en chiffres romains et qui donne le résultat en chiffre romain de cette opération. Par exemple:

    MMI - MCMLXX + X = 2001 - 1970 + 10 = 41 = XLI

    Pour ce faire, vous devez procéder ainsi:

  • Lire en entrée l'opération mathématique à réaliser,
  • Convertir chaque chiffre de l'opération en décimal,
  • Calculer cette opération en décimal,
  • Convertir le résultat obtenu en chiffres romains,
  • Afficher ce résultat en sortie.

    Vous devez faire attention aussi aux cas suivants:

  • Tous les chiffres romains de l'opération son correctement écrits. Vous n'avez pas donc à vous soucier par exemple des écritures suivantes: CMM (incorrecte car 1000 après 900), ni CFM (incorrecte à cause de la lettre F) etc.

  • Dans le cas où votre opération mathématique dépasse 3999, vous devez afficher un message d'erreur (voir le fichier in3.txt pour l'entrée et out3.txt pour la sortie obtenue).

  • Il y a au moins un argument sur la ligne de commande, dans le cas contraire un message d'erreur est afficher en sortie (voir le fichier in4.txt pour l'entrée et out4.txt pour la sortie obtenue).

  • La priorité de traitement dans une opération quelconque entre les opérateurs + et - est de gauche à droite.
  • 5. Fichiers fournis:
    Ci-joint 4 jeux d'entrée/sortie.

    6. Documents à remettre:
    Votre code Java sera écrit dans le fichier tp1.java attention au nom du fichier en MINUSCULE Vous devez remettre votre fichier (tp1.java) sous format électronique au plus tard le jeudi 7 juin à minuit (nuit de jeudi à vendredi).

    remise pift1170 tp1 tp1.java

    Il vous est également demandé de remettre une version papier de votre code. Vous pouvez me remettre directement
    votre TP, soit au début ou à la fin d'un cours. Vous pouvez également le déposer au local (3225 du pavillon André-Aisenstadt).
    En cas d'absence, veuillez glisser votre listing sous la porte. Une page de garde pour la remise des documents
    est disponible sur la page web de ce TP.

    7. Contraintes et vérification du format d'affichage:
    Nous allons comparer de manière automatique (en utilisant des scriptes unix) la sortie obtenue par votre programme et la notre. De ce fait: Vous ne devez pas modifier le nom du fichier que vous devez remettre. Vous devez suivre la spécification à la lettre. Des exemples vous ont été fournis afin de tester vos sorties. Vous devez obtenir exactement les mêmes sorties.

    Si votre sortie, pour l'exemple in1.txt a été sauvegardée dans le fichier masortie1.txt, pour vérifier que vous obtenez la même chose que nous (fichier out1.txt, faites ce qui suit:

    diff -b -w -i -B masortie1.txt out1.txt

    Si les fichiers sont identiques, vous n'obtenez rien en sortie. Sinon, vous obtiendrez les différences entre les deux fichiers. Pour plus de détails sur cette commande unix, sur votre console xterm, exécutez la commande suivante: man diff.

    8. Barème:
    Ce TP1 est noté sur 10 points. Voir page web TP#1 pour plus de détails sur les critères de correction.

    9. Mise à jour:
    22-05-2001 diffusion