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

Autres IDE Pascal Discussion :

Boucle "while do" de procédures [Dev-Pascal]


Sujet :

Autres IDE Pascal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Boucle "while do" de procédures
    Bonjour,

    J'ai un "petit" problème avec une boucle de procédures que je dois réaliser.

    Voici ma séquence principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    begin
      Initialiser;
      InitialiserDonnees;
      nomEtudiant1;
        while not (nomEtudiant = '****') do begin
          encoderEtudiant;
          CalculerResultats;
          AfficherResultats;
        end;
      CalculerResultatsClasse;
      AfficherResultatsClasse;
      Terminer
    end.
    Mon problème est que normalement, lorsque dans la procédure "nomEtudiant1" on donne comme nom "****" le programme doit passer à "CalculerResultatsClasse" mais le résultat est toujours le même => le programme ne s'arrête pas

    Merci à ceux qui pourront m'aider à comprendre mon erreur

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Je supprime ma réponse qui ne répondait pas au problème. La solution correcte se trouve dans le message de Paul TOTH.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    je suppose que nomEtudiant1 demande le nom de l'étudiant...comme c'est fait en dehors de la boucle, le nom ne change jamais.

    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
     
    begin
      Initialiser;
      InitialiserDonnees;
      nomEtudiant1;
        while not (nomEtudiant = '****') do begin
          encoderEtudiant;
          CalculerResultats;
          AfficherResultats;
     
          nomEtudiant1; // étudiant suivant !
     
        end;
      CalculerResultatsClasse;
      AfficherResultatsClasse;
      Terminer
    end.
    accessoirement, on pourra faire de nomEtudiant1 une fonction booléenne qui renvoie True si un nom est donné, et False dans les autres cas, et tester directement sa valeur dans le WHILE.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Un tout grand merci.

    j'ai rajouter la procédure "nomEtudiant1" a la fin de ma boucle et tout fonctionne a merveille

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hoa,

    On est dans un cas typique où la boucle à privilégier est repeat ... until :

    On passe au moins une fois dans la boucle pour lire le premier nom, et avec un while, ça t'oblige à déporter cette 1ère lecture hors de la boucle, d'où l'erreur courante consistant à oublier d'ajouter à nouveau la lecture dans la boucle.

    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par droggo Voir le message
    Hoa,

    On est dans un cas typique où la boucle à privilégier est repeat ... until :

    On passe au moins une fois dans la boucle pour lire le premier nom, et avec un while, ça t'oblige à déporter cette 1ère lecture hors de la boucle, d'où l'erreur courante consistant à oublier d'ajouter à nouveau la lecture dans la boucle.

    oui mais ça ne change pas le double appel...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      premiernom;
      repeat
        traitement;
        nomsuivant;
       until nom='*****';
    pour l'éviter il faut passer par une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      while nouveaunom do
        traitement;
    EDIT: dans d'autres langages on écrirait l'équivalent de ceci qui n'est pas possible en Pascal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      while (nom := lirenom) <> '****' do
       traitement;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hoe,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    repeat
      nom := lire_nom;
      if nom <> '*****' then
      begin
         traiter
      end;
    until nom = '*****';
    Si les cons volaient, il ferait nuit à midi.

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

Discussions similaires

  1. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 15h30
  2. Appel recurssif et boucle Do...While
    Par zsoh dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2004, 18h01

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