recuperer un nombre depuis une chaine de caractere - Ada - Programmation
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);
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 ^^
Marsh Posté le 16-11-2011 à 10:47:30
Bon,
Tu as donc des chaîne de de type :
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.
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
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+,
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 :
|
void:Temp# ./temp |
Marsh Posté le 15-11-2011 à 21:05:13
Bonsoir tout le monde
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