Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
531 connectés 

  FORUM HardWare.fr
  Programmation
  Ada

  Question sur mon programme Calculatrice...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur mon programme Calculatrice...

n°1510214
liligator
Posté le 02-02-2007 à 18:02:50  profilanswer
 

Bonjour/Bonsoir,
 
Dans un exo de TP je dois réaliser une calculatrice qui supporte uniquement les 4 opérations de base (qui sait donc effectuer des opérations du style "12*7" ). Bon, j'ai réussi et ça marche. Mais y'a un truc qui m'intrigue (une question de débutante qui se pose toujours trop de questions..) Je vous donne d'abord mon code:
 
PROCEDURE Calculatrice IS
   I,J: Integer;
   R: Float;
   Op: Character;
   
BEGIN
   Put("Veuillez entrer l'opération à effectuer: ");
   Get(I);
   Get(Op);
   Get(J);
   IF Op='*' THEN
      R:=Float(I*J);
   ELSIF Op='+' THEN
      R:=Float(I+J);
   ELSIF Op='/'THEN
      R:=Float(I/J);
   ELSE
      R:=Float(I-J);
   END IF;
   New_Line;
   Put("Résultat-----------> ");
   Put(R,1,2,0);
 
END Calculatrice;
 
Voilà, donc en fait j'ai remarqué qu'en exécutant, si je tape mon opération d'un bloc ou si je fais entrée entre le premier nombre et le type d'opération (+,-,* ou/) et entre le type d'opération et le deuxième, ça marche dans les deux cas. En clair, que je tape
23*7
ou
23
*
7
le programme fonctionne et me donne le bon résultat.
Alors je me demande:
Quand je tape tout d'un bloc, comment le compilateur sait-il qu'à l'intérieur de ce bloc il y a la variable I suivie du type d'opération suivie de la variable J ?? Parce qu'avant de tester mon programme je pensais que pour que ça marche j'aurais dû faire entrée entre chaque élément, et que sinon il aurait considéré que tout ça n'était que la variable I et que le curseur aurait continué à clignoter en faisant entrée, afin que je rentre l'opération puis J...  Or ça fonctionne    :??:  
 
Je sais pas si c'est très clair lol...  
 
Merci..

mood
Publicité
Posté le 02-02-2007 à 18:02:50  profilanswer
 

n°1510248
Profil sup​primé
Posté le 02-02-2007 à 20:46:46  answer
 

A priori, c'est "Get" qui prend juste ce qu'il attend (ce qui me surprend, mais bon, je debute).
Donc, comme toute les données attenduent par les trois "Get" sont dans le buffer clavier, chacun prend ça part.


Message édité par Profil supprimé le 02-02-2007 à 20:47:17
n°1510322
liligator
Posté le 03-02-2007 à 00:40:40  profilanswer
 

Oh un collègue débutant ;)  
Merci jovalise, mais je comprends toujours pas en fait: parce que si on entre 127+4, comment Get peut-il savoir que I va de 1à 7, qu'ensuite c'est le type d'opération et qu'en dernière position on a J ?  :??:  
Ou alors il sait différencier les chiffres des caractères et donc sait qu'il doit passer à la variable Op lorqu'on entre "+" puis à la variable J lorsqu'on entre 4 ?? (je ne vois que ça  :??: )

n°1510351
apprentitu​x
Posté le 03-02-2007 à 04:32:47  profilanswer
 

Salut  :hello: ,  
Pour poster du code source, tu ferais mieux d'utiliser les balises faites pour ça : ( code=ada puis /code )

Code :
  1. Procedure ... is
  2. begin ...


 

liligator a écrit :

Voilà, donc en fait j'ai remarqué qu'en exécutant, si je tape mon opération d'un bloc ou si je fais entrée entre le premier nombre et le type d'opération (+,-,* ou/) et entre le type d'opération et le deuxième, ça marche dans les deux cas.
.....
Quand je tape tout d'un bloc, comment le compilateur sait-il qu'à l'intérieur de ce bloc il y a la variable I suivie du type d'opération suivie de la variable J ??


Ce n'est pas le compilateur qui "sait ..." car cela se passe à l'exécution.
De plus, tu ne sembles pas avoir compris que tu utilise 2 Get différents :
 
Le Get de Ada.Integer_Text_io saute tout les blancs, lit un nombre entier respectant la syntaxe Ada pour les entiers et s'arrète dès qu'il arrive nième caractère tel que n = Integer'length, ou bien s'il rencontre un caractère qui ne respecte pas la syntaxe d'un entier.
Dans ton exemple, Get(i), s'arrète à '*' après avoir consommé les caractères '2' et '3'.
Le caractère '*' est laissé dans le tampon mémoire, et c'est le Get de Ada.Text_Io qui le consomme.
Ce Get là ne va pas plus loin car il est fait pour consommer un seul caractère.
Enfin Get(j) consomme les derniers caractères numérique pour donner une valeur entière à J.
 
Voilà, c'est pas plus compliqué.
 

n°1510531
liligator
Posté le 04-02-2007 à 00:56:19  profilanswer
 

Effectivement je sais pas pourquoi j'ai parlé de compilateur, je devais être fatiguée  :)  
Ben merci pour ces explications, maintenant je comprends mieux comment ça fonctionne (en cours on n'était pas rentrés dans les détails, or c'est quand même mieux de savoir ce qui se passe et pourquoi on tape tel ou tel truc).
 
(et ok pour les balises, j'y penserai la prochaine fois, c'est quand même plus simple..)
 
 :hello:  
 

n°1510532
jagstang
Pa Capona ಠ_ಠ
Posté le 04-02-2007 à 01:50:49  profilanswer
 

la div par 0 ça se passe comment ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1510538
Profil sup​primé
Posté le 04-02-2007 à 07:22:59  answer
 


manuel@gandalf:~/claculatrice$ ./calculatrice
Veuillez entrer l'opération à effectuer: 10/0
 
raised CONSTRAINT_ERROR : calculatrice.adb:28 divide by zero

n°1510558
liligator
Posté le 04-02-2007 à 11:44:37  profilanswer
 

Ben moi quand je divise par zéro avec Adagide j'obtiens l'infini comme résultat...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Ada

  Question sur mon programme Calculatrice...

 

Sujets relatifs
programme c++Question con VBA<->VBS
Activation des pages persos chez free, question SQLquestion sur la fonction fscommand('quit')
[résolu]Shell linux dans un programme Java[SQL] une question de pur debutant
Pause du programme en attendant un évènementUtiliser le compilateur founi avec VC++6 avec un autre IDE?
question de noobProgramme calculant la difference entre 2 dates
Plus de sujets relatifs à : Question sur mon programme Calculatrice...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR