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

Turbo Pascal Discussion :

[TP] Bug fenêtre DOS


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut [TP] Bug fenêtre DOS
    Bonjour à tous,

    Je suis nouveau dans le monde de la programmation et j'aimerais qu'on m'aide à évoluer très vite.

    Dans un cadre scolaire, je vais bientôt commencer à apprendre le pascal. Mais j'ai décidé de commencer seul chez moi à apprendre les bases.

    J'ai téléchargé Turbo Pascal et j'ai voulu ce matin essayer un programme simple déjà écrit que j'ai trouvé sur le net :

    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
    program tve(input,output);
    var prix_unitaire,quantite,
        total_ht,tva,total_ttc:real;
    begin
      writeln('prix de l''article ?');
      readln(prix_unitaire);
      writeln('quantité désirée ? ');
      readln(quantite);
      total_ht:=prix_unitaire*quantite;
      tva:=total_ht*(18.6/100);
      total_ttc:=total_ht+tva;
      writeln('total ht  : ',total_ht);
      writeln('tva       : ',tva);
      writeln('           -------------');
      writeln('total ttc : ',total_ttc)
    end.
    Lorsque que je compile et qu'ensuite j'ouvre le fichier .exe, tout se passe bien au début..

    Il me demande le prix de l'article, j'entre 25, ensuite il me demande la quantité, je rentre 2 et ensuite je fais entrée et puis la fenetre DOS se ferme

    Comment cela se fait-il ?

    Merci d'avance pour votre aide...

    @Bientot
    Ilaron

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Ajoute un readln; avant la fin de ton programme, juste avant le end. final.

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    on va détailler le programme...

    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
     
    (* Declaration des variables *)
    var prix_unitaire,quantite, total_ht,tva,total_ttc:real;
     
    (*debut du programme *)
    begin
     
    (* Writeln Affichage *)
    writeln('prix de l''article ?');
     
    (* le système attend que l'utilisateur entre une donnée - d'après la définition des variables il s'agit d'un réel on pase à l'affichage suivant après que l'utilisateur eu appuyé sur Entrée *)
    readln(prix_unitaire);
     
    (*cf. ci-dessus*)
    writeln('quantité désirée ? ');
    readln(quantite);
     
    (* petit calcul tout simple... ;-) )
    total_ht:=prix_unitaire*quantite;
    tva:=total_ht*(18.6/100);
    total_ttc:=total_ht+tva;
     
    (* affichage des résultats *)
    writeln('total ht : ',total_ht);
    writeln('tva : ',tva);
    writeln(' -------------');
    writeln('total ttc : ',total_ttc)
     
    (* fin du programme *)
    end.
    Lorsque tu lance l'exécutable une fenêtre DOS s'ouvre. Tu entres tes valeurs, puis comme tu le dis la fenêtre se ferme après l'entrée de la quantité.
    Mais la fermeture de la fenêtre ne se fait pas à ce niveau....
    Le calcul est réalisé, l'affichage des résultats se fait et lorsque le programme arrive sur end, la fenêtre se ferme. En fait l'éxecution du programme est tellement rapide que tu ne vois pas se qui ce passe.

    Pour éviter cette fermeture rajoute "readln()" juste avant le "end" du programme : tu verras les résultats. Appuye sur Entrée pour fermer la fenêtre DOS.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut
    Merci pour l'explication

    Maintenant j'ai un autre probleme. Cette fois avec les résultats.

    Si je met le prix de l'article : 25
    quantité : 2

    il me met comme resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Total HT : 5.0000000000E+01
    TVA : 9.30000000E+00
     
    Total : 5.9300000000E+01
    Comment cela se fait il ?

    Merci encore d'avance pour votre aide et vos explications

    @Bientot
    Ilaron

  5. #5
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Bonjour,

    Sur vos 2 questions, les 2 possèdent leur réponse dans la FAQ.
    Il serait donc judicieux de commencer par lire les ressoures en ligne avant de poser des questions.

    Direction la FAQ : http://pascal.developpez.com/faq/


  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut
    Merci beaucoup !

    Cette faq m'a beaucoup aidé...

    Par contre, je veux apprendre maintenant à faire une boucle, j'ai lu le chapitre 6 mais je n'ai rien compris...

    Enfaite, j'aimerai qu'a la fin du programme, c'est à dire lorsque qu'on m'a donné le resultat, je puisse avoir 2 choix :

    Soit : Appuyer sur "entrée" et quitter la fenetre
    Soit : Appuyer sur "espace" et établir un nouveau calcul

    Merci d'avance pour vos réponses et votre aide apportées.

    Bonne soirée,
    Ilaron

  7. #7
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ca fait longtemps que je n'ai plus fait de Pascal, alors je peux me tromper dans le nom des fonctions, mais, si j'ai bonne mémoire, tu dois te servir de boucles "repeat" et de la fonction "readkey" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    begin // début de ton programme principal
       repeat // repeat 1
       ... // tes instructions
     
       repeat // repeat 2
          a := readkey();
       until ((ord(a) = 13) or (ord(a) = 32)); // fin repeat 2
       (* pour info la touche :
       ENTREE correspond successivement aux codes 13 et 10 (sous Windows). 
       ESPACE correspond au code ASCII 32. *)
     
       until(ord(a) = 13); // fin repeat 1
    end. // fin du programme
    Voilà une boucle qui fait ce que tu demandes, normalement.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut
    Bonjour,

    J'ai fais exactement ce que ta dit et ca ne marche pas... :s

    Maintenant, apres le calcul, le programme ne repond plus à aucune touche....


  9. #9
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Je n'ai que delphi d'installé chez moi et apparement il ne reconnait pas readkey (et non readkey() comme je l'avais écrit), donc je ne peux pas tester le programme, mais je ne vois pas ce qui peut ne pas fonctionner...

    A vrai dire tu as plusieurs façon de faire la même chose, alors si ça ne fonctionne pas comme je l'ai dit, essaye une des autres méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    a : char;
     
    ...
     
    repeat
       a := readkey;
    until ((a = #13) or (a = #32));
     
          OU :
     
    repeat
       a := readkey;
    until ((a = chr(13) or (a = chr(32));
    Sinon, tu fais une recherche sur le forum où le sujet est déjà largement traité.

    2 questions maintenant :
    * codes-tu sous Windows (ou DOS) ?
    * as-tu testé la touche espace ? (si oui, le programme n'a t'il pas repris au début ?)

    Si ça ne fonctionne toujours pas, le mieux serait que tu nous montres ton code (pas forcément en entier, mais déjà un schéma) parce que c'est plus probablement là que se trouve l'erreur...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut
    J'ai essayer et ca ne marche pas... et puis quand je compile ile me fait "Error : Unknow identifier" et il pointe sur readkey... :s

    *Oui je code sur Windows a l'aide du logiciel Turbo Pascal 7
    *Oui j'ai tésté et ca ne fait rien du tout...

    Voici mon programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROGRAM tve(input,output);
    VAR prix_unitaire,quantite,total_ht,tva,total_ttc:real; 
           a:char;
    BEGIN 
              (*intro du programme + mot de passe*)
             repeat
            (*calcul*)
            repeat
                a:=readkey;
                until ((a)=#13) or (a)=#32));
            until ord(a)=13
    END.
    Merci encore d'avance pour votre aide

    Bonne journée,
    Ilaron

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    à insérer entre program et var.

    Et merci de lire l'aide de ton compilateur, tu n'aurais pas perdu 3 jours mais trentes secondes.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut
    Je l'ai rajouter et il me fait

    "Error : Type mismatch" et il pointe sur (a)=#32


  13. #13
    Membre Expert
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Par défaut
    Bonjour,

    Citation Envoyé par Ilaron
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    until ((a)=#13) or (a)=#32));
    N'y a-t'il pas un problème de parenthèses ?

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 7
    Par défaut
    Oh !!!!!

    Ca marche

    Merci tout le monde pour votre aide !! Merci infiniment !

    Je vais continuer a améliorer ce programme tout en apprenant le Pascal !

    Je reviendrai surment vous embeter avec mes question idiote

    En attendant, le sujet est "Résolu" !

    Merci encore

    Bonne soirée,
    Ilaron

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bug Visual C++ - Console dos ne se ferme pas
    Par LucienVendeen dans le forum C++
    Réponses: 2
    Dernier message: 21/09/2010, 14h56
  2. Bug ? peut-être, Etrange? très certainement
    Par Inarius dans le forum C#
    Réponses: 0
    Dernier message: 09/04/2010, 23h26
  3. Réponses: 9
    Dernier message: 15/01/2010, 16h43
  4. Réponses: 3
    Dernier message: 06/11/2007, 11h18

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