Discussion: Boucle "while do" de procédures [Dev-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
    2 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 708
    Points : 9 408
    Points
    9 408
    Billets dans le blog
    4

    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.

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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 499
    Points : 20 316
    Points
    20 316

    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
    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 672
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 672
    Points : 4 933
    Points
    4 933

    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 éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 499
    Points : 20 316
    Points
    20 316

    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é

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

    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