recuperer un nombre depuis une chaine de caractere

recuperer un nombre depuis une chaine de caractere - Ada - Programmation

Marsh Posté le 15-11-2011 à 21:05:13    

Bonsoir  tout le monde  :hello:  
 
je devrai crée un programme qui convertie la température mais comme enter l’utilisateur doit saisir le nombre + l’unité choisie => 45c  ou 40F
le problème c’est que je ne sais pas comment prendre que la valeur numérique (45 ou 40) qu’est de type string pour l’utilisé dans une formule  
 
Merci d'avance a tout ce qui peuvent m'aide

Reply

Marsh Posté le 15-11-2011 à 21:05:13   

Reply

Marsh Posté le 15-11-2011 à 21:16:22    

Bonjour,
 
Une solution est de prendre les 1 à N-1 caractère de ta chaîne de longueur N
 
Avec Get_line : procedure Get_Line(Item : out String; Last : out Natural);
 
value : Temperature_Type := temperature'value(chaîne(1..Last-1));
 
Et l'unité avec
 
Char : character := Chaine(Last);


Message édité par Profil supprimé le 15-11-2011 à 21:16:49
Reply

Marsh Posté le 16-11-2011 à 10:27:50    

bonjour  
 
merci pour votre réponse mais en tant que je suis nouveau en ADA je connais pas grand chose sur les procédure  
en plus avec lenth(langueur) on va prendre même la langueur des espace  car l’utilisateur a le droit d'entrer  
tant  d'espace souhaité soit avant soit après son message ou entre l'unité et la valeur  
 
si tu peut me donner encore un petit coup de pousse merci encore une foi  ^^

Reply

Marsh Posté le 16-11-2011 à 10:47:30    

Bon,  
 
 
Tu as donc des chaîne de de type :

  • "     25    c   "
  • "22 F"
  • "          55K"


Pour avoir la valeur d'un type à partir d'une chaîne, c'est toujours l'attribut "value", soit TYPE'value("chaine" ).
 
Pour convertir ta valeur je pense pas que les espace avant ou après change quelque chose.
Il te faut donc savoir où est le caractère d'unité pour arrêter la chaine.
 
Pour ça il te faut parcourir la chaîne en testant si le caractère est un digit numéric ou pas.
Là, la fonction Is_Digit dans Ada.Characters.Handling, fera le travail.
 
Au cas où tu souhaiterais ne récupérer que les caractère différent d'une espace, tu peux utiliser la fonction Index_Non_Blank se trouvant dans la bibliothèque Ada.Strings.Fixed.
 

Reply

Marsh Posté le 16-11-2011 à 15:00:12    

salut  
j'ai essayé avec le programme suivant mais j'arrive pas a attendre mon but  
 
with Ada.Text_Io;                  use Ada.Text_Io;
with Ada.Float_Text_Io;            use Ada.Float_Text_Io;
with Ada.Characters.Handling;      use Ada.Characters.Handling;
 
procedure temperatur is
   C : character ;
   value : integer;
begin  
 
    while not End_Of_Line loop
       Get(C);
           if Is_Digit(c) then
           put(c);
           New_Line;
       end if  ;  
     end loop;
   Skip_Line;
end Labo_6;
 
la compilation donne  
 en entrer on a  (  35  c)
résultat  
3
5
mais je souhaite avoir le nombre compose 35 et nn pas 3 et 5 séparer en sachant en passant par les character car les string on les a pas fait dans le cours  
si sa peu être une procédure ou fonction ça sera mieux bien sur  
 
et merci pour ton aide  
 

Reply

Marsh Posté le 16-11-2011 à 15:13:24    

Ben jovalise t'a pourtant expliqué comment faire, c'est très compréhensible.
Il ne faut pas espérer qu'on va écrire le code à ta place ici, ce n'est pas la politique du forum.
Pour ta tentative avec un code qui n'a rien a voir avec celui proposé par jovalise, si tu veux t'engager dans cette voie, tu as récupéré les chiffres sous forme de caractères successifs, ce n'est pas bien dur de prendre un caractère numérique lorsqu'il est rencontré, en déduire le chiffre correspondant, et composer le nombre final au fur et a mesure.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 16-11-2011 à 15:16:13    

Problème :

Citation :

le problème c’est que je ne sais pas comment prendre que la valeur numérique (45 ou 40) qu’est de type string pour l’utilisé dans une formule  


Ah t'as pas vu les chaîne, ah ben tu peux pas alors.
 
 
Si non, si non, je crois que tu peut tu peux saisir un entier, et un caractère, mais tu poura pas mettre d'espace entre l'entier et le caractère.
 
Style :

Code :
  1. with Ada.Integer_Text_Io;
  2. with Ada.Text_Io;
  3. use Ada;
  4.  
  5. procedure Temp is
  6.  
  7.   subtype Temp_Type is Integer range -2_000..180_000_000;
  8.   Value : Temp_Type := 0;
  9.   Unit : Character := ' ';
  10. begin
  11.   Integer_Text_Io.Get(Value);
  12.   Text_Io.Get(Unit);
  13.  
  14.   Integer_Text_Io.Put(Value);
  15.   Text_Io.Put(Unit);
  16.  
  17. end Temp;


 

void:Temp# ./temp  
      35
c
         35c
void:Temp#

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed