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

  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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
    Inscrit en
    décembre 2011
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 986
    Points : 5 715
    Points
    5 715
    Billets dans le blog
    1

    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.
    L'Art est long et le Temps est court.

  3. #3
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 076
    Points : 17 839
    Points
    17 839

    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
    Produits : UPnP, RemoteOffice, FlashPascal

  4. #4
    Invité de passage
    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 : 0
    Points
    0

    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é Sénior

    Inscrit en
    août 2006
    Messages
    3 622
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 622
    Points : 4 762
    Points
    4 762

    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.

    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  6. #6
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 076
    Points : 17 839
    Points
    17 839

    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
    Produits : UPnP, RemoteOffice, FlashPascal

  7. #7
    Expert Confirmé Sénior

    Inscrit en
    août 2006
    Messages
    3 622
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 622
    Points : 4 762
    Points
    4 762

    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 = '*****';
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

+ 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