Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Autres IDE
Autres IDE Les autres environnements de développement (PP Compiler, ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/10/2012, 02h05   #1
dpm6996
Invité de passage
 
Homme
Étudiant
Inscription : 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 :
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
dpm6996 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2012, 08h58   #2
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 687
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 687
Points : 1 002
Points : 1 002
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.
Roland Chastain est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2012, 10h41   #3
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 416
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 416
Points : 10 801
Points : 10 801
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 :
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
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/10/2012, 11h43   #4
dpm6996
Invité de passage
 
Homme
Étudiant
Inscription : 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
Un tout grand merci.

j'ai rajouter la procédure "nomEtudiant1" a la fin de ma boucle et tout fonctionne a merveille
dpm6996 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2012, 13h50   #5
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 417
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 417
Points : 3 772
Points : 3 772
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.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2012, 22h23   #6
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 416
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

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

Informations forums :
Inscription : novembre 2002
Messages : 4 416
Points : 10 801
Points : 10 801
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 :
1
2
3
4
5
6
 
  premiernom;
  repeat
    traitement;
    nomsuivant;
   until nom='*****';
pour l'éviter il faut passer par une fonction.

Code :
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 :
1
2
3
 
  while (nom := lirenom) <> '****' do
   traitement;
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/10/2012, 23h17   #7
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 417
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 417
Points : 3 772
Points : 3 772
Hoe,

Code :
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.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h07.


 
 
 
 
Partenaires

Hébergement Web