Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

Pascal - Structures conditionnelles

Les structures conditionnelles en Pascal Encyclopédie


Les structures de boucle

Notre exemple avance. Maintenant, si nous désirons construire une phrase non plus avec trois mots, mais avec cinq, nous n'allons tout de même pas répéter notre code cinq fois !!!

Pour cela, il suffit d'utiliser une des structures de boucle. Il en existe trois : le For ... to ... do ... (pour <valeur initiale> jusqu'à <valeur finale> faire <ceci>), le while (tant que <condition>) et le repeat ... until (répète <ceci> jusqu'à <condition>).

Le For et le while sont utilisés quand on connaît à l'avance le nombre de fois que la boucle doit être exécutée. Dans le repeat ... until la condition de fin de boucle est à la fin, et on l'utilise quand la boucle doit au moins être parcourue une fois.

Notre exemple avec un For :

Program MonDeuxiemeProg;

function ConstruitPhrase(phrase:string):string;
var s : string;
begin
  readln(s);
  ConstruitPhrase:=phrase+', '+s;
end;

var
  Phrase : string;
  i : integer;
begin
  Phrase:='';  {initialiser à chaîne vide}

  for i:=1 to 3 do begin
    writeln('Entrez un mot :');
    Phrase:=ConstruitPhrase(Phrase);
  end;

  {afficher le résultat}
  writeln('La phrase complète est :');
  writeln(Phrase);

  writeln('Appuyer sur <entrée> pour quitter');
  readln;
end.

Tout ce qui est entre le begin et le end du For est exécuté en boucle. N'oubliez pas la déclaration de notre nouvelle variable i.

Avec un while :

  [...]

  i:=1;  {initialiser i}
  while i<>3 do begin
    writeln('Entrez un mot :');
    Phrase:=ConstruitPhrase(Phrase);
    inc(i);  {incrémente i à chaque tour}
  end;

  {afficher le résultat}
  [...]
end.

ATTENTION : Dans ce cas vous voyez que vous êtes vous-même obligé d'incrémenter votre compteur i. Ne pas oublier d'initialiser votre variable ni de l'incrémenter sinon votre programme tournera indéfiniment.

Avec un repeat :

  [...]

  i:=1;  {initialiser i}
  repeat
    writeln('Entrez un mot :');
    Phrase:=ConstruitPhrase(Phrase);
    inc(i);  {incrémente i à chaque tour}
  until i>3;

  {afficher le résultat}
  [...]
end.

On voit bien que dans ce cas, le plus efficace est le For. Mais alors, pourquoi utiliser un while ? Et bien parce qu'on ne peut mettre dans une boucle For qu'un compteur. Dans un while ou un repeat, la condition pourrait être quelque chose de plus complexe, comme par exemple :

while length(phrase) <= 100; {
	exécute la boucle tant que la longueur de la variable phrase
}

                                              

{ne dépasse pas 100 caractères} 

ou encore :

until length(phrase) > 100; {
	termine la boucle si la longueur de la variable phrase
}

                                           

{dépasse 100 caractères} 

Si on change les règles du jeu, et que l'on veut demander à l'utilisateur quand il désire s'arrêter, on pourrait utiliser un repeat :

  [...]

var
  Phrase : string;
  reponse : char;  {contiendra un caractère}
begin
  Phrase:='';  {initialiser à chaîne vide}
  repeat
    writeln('Entrez un mot :');
    Phrase:=ConstruitPhrase(Phrase);
    writeln('Voulez-vous continuer ? (entrez o pour continuer) ');
    readln(reponse);
  until Upcase(reponse)<>'O';  {différent de o ou O}

  {afficher le résultat}
  [...]
end.

 

Structures de test

Alors, reste un petit problème que vous aurez forcément remarqué : notre phrase commence toujours par une virgule !

Pour corriger ça, il suffit simplement de n'ajouter la virgule que si la chaîne n'est pas vide. C'est là toute l'utilité des tests :


[...]
function ConstruitPhrase(phrase:string):string;
var s : string;
begin
  readln(s);
  if phrase = '' then
    ConstruitPhrase:=s
  else
    ConstruitPhrase:=phrase+', '+s;
end;
[...]

Ce qui se traduit en gros par :

Si phrase est vide alors
  mettre s dans phrase
sinon
  ajouter s à phrase et mettre le tout sans phrase

Remarquez qu'il n'y a pas de point-virgule après la ligne phrase:=phrase+s. En effet, l'instruction du If ne se termine qu'après le else.

On peut aussi utiliser un if sans else :


[...]
function ConstruitPhrase(phrase:string):string;
var s : string;
begin
  readln(s);
  if phrase <> '' then
    phrase:=phrase+', ';
  ConstruitPhrase:=Phrase+s;;
end;
[...]

Article écrit par Thierry Cornu

Trucs & astuces pertinents trouvés dans la base de connaissances

10/12 10h48 GRUB - La structure de fichier de configuration (Linux)
19/10 01h12 Structure de la base de registre (Base de registre)
03/06 00h46 Liens Compilateurs et Ressources (Pascal)
conditionnelles pascal structures Plus d'astuces sur « conditionnelles pascal structures »

Discussions pertinentes trouvées dans le forum

13/01 12h28 exercice structure conditionnelles exercice sur structure conditionnelles Développement 13/01 13h26->The Edge1
06/01 17h26 pascal pascal Développement 23/01 08h59->Char Snipeur28
10/06 19h32 maudites structures [C] Maudites structures..... Développement 14/06 20h18->kilian21
06/04 12h15 excel somme automatiques conditionnelles Excel, somme automatiques conditionnelles Développement 08/04 18h16->kaz9
31/08 22h43 excel macro mise forme conditionnelle Excel - macro (mise en forme conditionnelle) Développement 01/09 18h53->Armojax8
12/07 18h35 turbo pascal windows tpw Turbo pascal sur windows(TPW) Développement 08/11 09h41->mouna8
08/11 17h16 structure aide Structure en C Développement 11/11 17h55->kilian8
13/03 19h58 javascript execution conditionnelle [Javascript] execution conditionnelle Windows 14/03 15h53->Edoc5
02/11 17h48 structure langage structure en langage c Développement 12/05 13h30->tamsamani5
28/09 22h49 turbo pascal windows xp turbo pascal et windows xp Développement 23/12 19h55->zahir19805
Discussion fermée Problème résolu conditionnelles pascal structures Plus de discussions sur « conditionnelles pascal structures »

Ce document intitulé « Pascal - Structures conditionnelles » issu de l'encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.