chaînes et pointeurs en ada - Ada - Programmation
Marsh Posté le 01-12-2004 à 13:54:45
et...
soit un peu plus explicite, il n'y a même pas un point d'interrogation...
Si tu veux qu'on te fasse ton prog, relis la charte du forum!
Si tu veux des reponses à des questions précises, formules-les!
Marsh Posté le 01-12-2004 à 13:58:05
qu'elle est le but de ton programme?
simplement classer les caracteres en fonction de leur rôle (operande/operateur) ou bien calculer la valeur de l'expression saisie par l'utilisateur?
Marsh Posté le 01-12-2004 à 19:49:27
Bonsoir,
excuse... je suis nouvelle et n'a pas eu le temps de lire la charte; pardon.
En fait le programme prend en paramètre une chaîne de caractère comme précedemment citée et ensuite mais dans deux piles, l'une opérateur, l'autre opérande, puis donne en fin de procedure le résultat de la valeur arithmétique entrée. j'èspère que je me suis un peu mieux exprimée.
Merci
Marsh Posté le 02-12-2004 à 00:28:28
vraiment pas evident à premiere vue!
1)la partie repartition des elements semble assez basique,(mais c'est peut là qu'est le piege)
tu balayes ta chaine de caracteres avec un
"for i in 1..chaine'lenght loop"
puis tu verifie l'appartenance:
if chaine(i)>='0' and chaine(i)<='9'
then
"Traitement des nombres"
else
"traitement des operateurs
end if;
end loop;
la partie traitement des operateurs consiste simplement à les "empiler" dans ton tableau operateur
la partie traitement des nombres est identique sauf dans le cas ou les nombres sont admis (ex:125). dans ce cas elle consiste à "reunir les chiffres qui se suivent pour reformer le nombre:
-----------
n:=0;
nb:=0;
while chaine(i)>='0' and chaine(i)<='9' loop
nb:=nb + "valeur de chaine(i)"*10^n;
n:=n+1;
end loop;
"empiler" (nb);
-------------
(je ne me souviens plus comment on fait pour recuperer la valeur entiere correspondant à un caractere) ca dois etre du style ada.integer'value(chaine(i));
pareil pour les puissances (là une petite procedure est assez simple à faire au cas où...)
2) la partie calcul du resultat est beaucoup plus complexe (à mon pauvre niveau)
si je reprend ton exemple (2+3*(5+6)+2-(2*5)) la repartition basique donnera:
tableau1: (+*(+)+-(*))
tableau2: 2 3 5 6 2 2 5
et là... ???
disons qu'une premiere piste serait peut-etre de stocker inteligement les nombres et operandes dans les tableaux: fais une recherche sur "systeme polonais inversé" ou notation postfixée
sinon peut etre deux tableaux dynamiques
tu traites (à la maniere du calcul post fixé) les calculs par ordre de priorité. le resultat serait un truc du style:
tableau1: (+*(+)+-(*))
tableau2: 2 3 5 6 2 2 5
puis
tableau1: (+*+-)
tableau2: 2 3 11 2 10
puis
tableau1: (++-)
tableau2: 2 33 2 10
.
.
.
puis finalement
tableau1: ()
tableau2: 27
j'espere que ca t'aideras un peu quand meme!
Marsh Posté le 02-12-2004 à 12:02:23
Cool, c'est vraiment sympa de ta part. je t'enverrai le code dès que ça marche.
Merci beaucoup
Marsh Posté le 01-12-2004 à 12:40:51
Bonjour,
j'ai un souci de prog; en effet je veux mettre cette chaîne :
(2+3*(5+6)+2-(2*5)); dans deux tableaux operateur et operande avec pour operande les chiffres et operateur les parenthèses et signes d'opération arithmétique.
Merci beaucoup car c'est pour un projet en ada que je dois rendre dans 3 jours.
---------------
Merci