IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

[Débutant] Ecrire un nombre en chiffres romains !


Sujet :

Ada

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 24
    Points
    24
    Par défaut [Débutant] Ecrire un nombre en chiffres romains !
    Bonjour tout le monde!

    voila, j'ai un petit souci avec un programme que j'essai de réaliser...
    Le but du programme c'est de changer le nombre entré par l'utilisateur en chiffres romains...

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    with Ada.Text_Io, Ada.Integer_Text_Io;
    use Ada.Text_Io, Ada.Integer_Text_Io;
     
    procedure Chiffres_Romains is
     
     
       N,I: Integer;
       Rom: String;
     
    begin
     
       Put_line ("donne un chiffre");
       Get (N);
       I:=0;
       loop
          if N>=1000 then
             Rom(I):='M';
             I:=I+1;
             N:=N-1000;
          elsif N>=500 then
             Rom(I):='D';
             I:=I+1;
             N:=N-500;
          elsif N>=100 then
             Rom(I):='C';
             I:=I+1;
             N:=N-100;
          elsif N>=50 then
             Rom(I):='L';
             I:=I+1;
             N:=N-50;
          elsif N>=10 then
             Rom(I):='X';
             I:=I+1;
             N:=N-10;
          elsif N>=5 then
             Rom(I):='V';
             I:=I+1;
             N:=N-5;
          elsif N>=1 then
             Rom(I):='I';
             I:=I+1;
             N:=N-1;
          end if;
          exit when N=0;
       end loop;
     
     
       Put (Rom);
     
    end Chiffres_Romains;
    Mon problème se situe au niveau des strings... je ne sais pas trop comment les manier en ada...

    Après j'ai peut être des erreurs dans mon algorithme, mais, j'y verrai plus clair quand mon code fonctionnera!

    Adagide me dit que mon string n'est pas initialisé, mais moi j'ai pas envie de l'initialiser, le string va se construire petit à petit...

    Merci d'avance pour votre aide!

  2. #2
    Membre actif

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Points : 220
    Points
    220
    Par défaut
    Bonjour,
    Le type String en ADA est obligatoirement contraint il faut donc déclarer la contrainte comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Variable : String(min..max)
    Où min et max sont des valeurs explicites
    Il y a moyens d'utiliser des chaîne de caractères non contrainte via le type
    Unbounded_String (à voir pour le package me souvient plus de tête)

    sinon en utilisant des strings contraints , tu peux regarder mon code de convertion en chiffre romain si ca peut aider
    ici

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    merci pour ta réponse!

    j'ai un peu modifié mon programme, maintenant il marche, mais il marche mal...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    with Ada.Text_Io, Ada.Integer_Text_Io;
    use Ada.Text_Io, Ada.Integer_Text_Io;
    
    procedure Chiffres_Romains is
       
    
       N,I: Integer;
       Rom: String(1..14);
       
    begin
    
       Put_line ("donne un chiffre");
       Get (N);
       I:=1;
       loop
          if N>=1000 then
             Rom(I):='M';
             I:=I+1;
             N:=N-1000;
          elsif N>=500 then
             Rom(I):='D';
             I:=I+1;
             N:=N-500;
          elsif N>=100 then
             Rom(I):='C';
             I:=I+1;
             N:=N-100;
          elsif N>=50 then
             Rom(I):='L';
             I:=I+1;
             N:=N-50;
          elsif N>=10 then
             Rom(I):='X';
             I:=I+1;
             N:=N-10;
          elsif N>=5 then
             Rom(I):='V';
             I:=I+1;
             N:=N-5;
          elsif N>=1 then
             Rom(I):='I';
             I:=I+1;
             N:=N-1;
          end if;
          exit when N=0;
       end loop;
    loop
          exit when I=20;
          Rom(I):=' ';
             I:=I+1;
    end loop;
    
    
    
       Put (Rom);
       
    end Chiffres_Romains;
    en gras: les modifications

    Par contre le coup de déclarer string(1..MAX) me pose un problème. Le MAX n'est pas le même pour tout les nombres à transformer en chiffres romains... donc mon MAX est parfois bon, parfois trop petit parfois trop grands!

    EDIT: problème réglé, mais c'est surement pas la plus belle solution... si vous en avez une meilleure, je suis preneur!

    ps: merci pour le lien vers ton programme!

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/02/2014, 17h06
  2. Conversion de nombres en chiffres romains
    Par Manila2 dans le forum Pascal
    Réponses: 9
    Dernier message: 13/11/2008, 15h42
  3. Nombre de chiffre pour ecrire un entier en binaire
    Par Darksnakes dans le forum Débuter
    Réponses: 9
    Dernier message: 11/03/2008, 20h19
  4. arrondir un nombre à 2 chiffres après la virgule
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/02/2005, 08h36
  5. [MFC] Nombre de chiffres après la virgule
    Par karl3i dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo