Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Langage
Langage Vos questions sur langage Pascal en général, ses évolutions, les technologies, ...
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 14/06/2010, 18h25   #1
ayari.zohra
Invité de passage
 
zohra ayari
Inscription : juin 2010
Messages : 1
Détails du profil
Informations personnelles :
Nom : zohra ayari

Informations forums :
Inscription : juin 2010
Messages : 1
Points : 0
Points : 0
Par défaut Utiliser une boucle for avec un pas de 2

Ayez l'amabilité de me dire comment écrire une boucle FOR avec un pas de 2
MERCI.
ayari.zohra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2010, 18h59   #2
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Joa,

C'est impossible en Pascal.

Il faut utiliser une boucle while ... do ou repeat ... until.
__________________
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 14/06/2010, 19h46   #3
mick605
Membre Expert
 
Homme
Étudiant
Inscription : juin 2009
Messages : 936
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Aveyron (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2009
Messages : 936
Points : 1 808
Points : 1 808
Ou plus simplement :

Code :
1
2
3
4
5
6
7
for i:=1 to 5 do
begin
  j:=i*2;
 
  //Utiliser j
 
end;
mick605 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/06/2010, 20h15   #4
l_autodidacte
Modérateur
 
Avatar de l_autodidacte
 
Homme Moncef
Directeur de lycée
Inscription : juillet 2009
Messages : 1 212
Détails du profil
Informations personnelles :
Nom : Homme Moncef
Âge : 57
Localisation : Tunisie

Informations professionnelles :
Activité : Directeur de lycée
Secteur : Enseignement

Informations forums :
Inscription : juillet 2009
Messages : 1 212
Points : 2 224
Points : 2 224
Envoyer un message via Skype™ à l_autodidacte
Ou encore, mais avec boucles imbriquées :
Code :
1
2
3
4
5
6
7
8
For i:=1 to n do
      begin 
          if i mod 2 = 0 then
             begin
                 ................
                 ................
             end;
       end;
i mod 2 =0 pour les pairs ou i mod 2 =1 pour les impairs, à toi de voir.
__________________
A cœur vaillant rien d'impossible
l_autodidacte est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/06/2010, 20h22   #5
krachik
Expert Confirmé
 
Avatar de krachik
 
Inscription : décembre 2004
Messages : 1 964
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 964
Points : 3 965
Points : 3 965
Bonjour

Si c'est imposé chose que je trouverais bizarre (ce qui peut quand même arriver suivant les notions mises jeu), on va dire que tu peux passer par des calculs intermédiaires comme proposé dans les posts précédents. Si ce n'est pas imposé inutile de t'encombrer avec des lignes supplémentaires, fais comme l'a dit droggo et surtout que la boucle while peut jouer tous les rôles
__________________
Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells
krachik est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2010, 14h06   #6
darrylsite
Rédacteur
 
Avatar de darrylsite
 
Inscription : juillet 2007
Messages : 1 296
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 1 296
Points : 1 922
Points : 1 922
Citation:
Envoyé par droggo Voir le message
Joa,

C'est impossible en Pascal.

Il faut utiliser une boucle while ... do ou repeat ... until.
je crois que la boucle Repeat ... Until n'est pas appropriée pour remplacer une boucle For. Comme l'a dit krachik, la meilleur solution est bien d'utiliser While.

Pour illuster mon propos,
Code :
1
2
3
4
5
 
 for i:=10 to 8 do
 begin
   echo("hello world");
 end;
ne produira aucun résultat sur le stdout. Pour arriver au même résultat avec la boucle Repeat, il faudra ajouter un contrôle supplémentaire ce qui n'est pas tout naturel.
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2010, 16h21   #7
krachik
Expert Confirmé
 
Avatar de krachik
 
Inscription : décembre 2004
Messages : 1 964
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 964
Points : 3 965
Points : 3 965
Code darrylsite :
1
2
3
4
for i:=10 to 8 do
 begin
   echo("hello world");
 end;
PHP, sort de ce corps

Pourquoi tu mets do au lieu de downto? du coup je me demande pourquoi dans ce cas précis suivant ce que dit l'auteur de la discussion, en quoi un repeat... until ne peut remplacer un for?
__________________
Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells
krachik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2010, 16h37   #8
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 408
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 408
Points : 10 771
Points : 10 771
Citation:
Envoyé par krachik Voir le message
Code darrylsite :
1
2
3
4
for i:=10 to 8 do
 begin
   echo("hello world");
 end;
PHP, sort de ce corps

Pourquoi tu mets do au lieu de downto? du coup je me demande pourquoi dans ce cas précis suivant ce que dit l'auteur de la discussion, en quoi un repeat... until ne peut remplacer un for?
voici ce qu'il voulait illustrer
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
// ceci ne produit rien comme son "for"
  i := 10;
  while i < 8 do 
  begin
    WriteLn('Hello');
    Inc(i);
  end;
// ceci produit un 'Hello'
  i := 10;
  repeat
    WriteLn('Hello');
    Inc(i);
  until i > 8;
__________________
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 00
Vieux 15/06/2010, 17h45   #9
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Hio,
Citation:
Envoyé par darrylsite Voir le message
Pour illuster mon propos, ne produira aucun résultat sur le stdout. Pour arriver au même résultat avec la boucle Repeat, il faudra ajouter un contrôle supplémentaire ce qui n'est pas tout naturel.
Je sais, mais il m'arrive fréquemment d'utiliser repeat ... until quand on connaît parfaitement les valeurs d'entrée et sortie de la boucle : si on est sûr de boucler au moins une fois, c'est bien du domaine de repeat ... until ...

... mais même dans ce cas, j'utilise également très souvent while ... do, ça dépend de l'état d'esprit du moment.
__________________
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 15/06/2010, 17h46   #10
Eric2a
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 094
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 42

Informations forums :
Inscription : septembre 2005
Messages : 1 094
Points : 1 648
Points : 1 648
Salut,

J'ai le souvenir que le code machine géneré par Turbo Pascal pour une boucle For est quasi-identitique à celui généré pour while.
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2010, 22h59   #11
Dr.Who
Membre Expert
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 980
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : septembre 2009
Messages : 980
Points : 1 175
Points : 1 175
Code :
1
2
3
4
5
6
7
8
9
var i : integer;
begin
  I := 0;
  while I > iMax do
  begin
    { code }
    inc(I, 2);
  end;
end;

Code :
1
2
3
4
5
6
7
8
var i : integer;
begin
  I := 0;
  repeat
    { code }
    inc(I, 2);
  until I <= iMax;
end;

Code :
1
2
3
4
5
6
7
8
var i, iPrime : integer;
begin
  for i := 0 to (iMax shr 1) do
  begin
    iPrime := i shl 1;
    { code }
  end;
end;
__________________
[ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
Ma messagerie n'est pas la succursale du forum... merci!
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2010, 02h59   #12
darrylsite
Rédacteur
 
Avatar de darrylsite
 
Inscription : juillet 2007
Messages : 1 296
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 1 296
Points : 1 922
Points : 1 922
Citation:
Envoyé par Dr.Who Voir le message
Code :
1
2
3
4
5
6
7
8
var i, iPrime : integer;
begin
  for i := 0 to (iMax shr 1) do
  begin
    iPrime := i shl 1;
    { code }
  end;
end;
il faudra peut être précisé que :
Code :
1
2
3
 
iMax shr 1 <==> iMax div 2
i shl 1       <==> i*2
je ne sais pas si c'est moi qui m'égare ou c'est parce que je manque de sommeil (), mais je ne vois pas pourquoi vous cherchez à faire un code qui génére les nombres pairs.
Faire une boucle for avec un pas de 2 est différent de trouver des nombres pairs à mon avis. On peut bien avoir 1 - 3 - 5 - 7 - 9.
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2010, 12h52   #13
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Qoa,
Citation:
Envoyé par darrylsite Voir le message
mais je ne vois pas pourquoi vous cherchez à faire un code qui génére les nombres pairs.
Faire une boucle for avec un pas de 2 est différent de trouver des nombres pairs à mon avis. On peut bien avoir 1 - 3 - 5 - 7 - 9.
Je ne peux qu'approuver.

Et même -11, -9, ...
__________________
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 18/06/2010, 14h27   #14
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 408
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 408
Points : 10 771
Points : 10 771
Citation:
Envoyé par droggo Voir le message
Qoa,

Je ne peux qu'approuver.

Et même -11, -9, ...
encore une solution

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
var
  skip : Boolean;
  i :Integer;
begin
  skip := True;
  for i := 0 to 100 do
    skip := not skip;
    if skip then Continue;
    ...
  begin
end;
__________________
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 00
Vieux 18/06/2010, 16h57   #15
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Xoa,

Je crois qu'il vaut mieux arrêter, sinon on finira par exploser le forum par le nombre de messages.
__________________
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 27/12/2010, 08h41   #16
hocine
Membre éclairé
 
Inscription : janvier 2005
Messages : 474
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 474
Points : 355
Points : 355
salut,
je suis arrivé trop tard donc désolé, mais si je me rappel bien pour la boucle for par pas de 2
c'est
Code :
1
2
3
4
 
for i=1 to 10 by step=2 do
begin
end;
Bonne Chance.
Merci.
__________________
Deux, n'apprendront pas; le timide et l'arrogant
hocine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 12h01   #17
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Gia,
Citation:
Envoyé par hocine Voir le message
salut,
je suis arrivé trop tard donc désolé, mais si je me rappel bien pour la boucle for par pas de 2
c'est
Code :
1
2
3
4
 
for i=1 to 10 by step=2 do
begin
end;
Bonne Chance.
Merci.
Arriver en retard ne signifie pas "droit d'écrire n'importe quoi".

La clause "step" n'existe pas en Pascal, tu confonds avec Basic, et mélanges les 2, puisqu'en Basic, Begin et End n'existent pas (en tout cas, dans les vieux Basics, les seuls qu'il m'est arrivé d'utiliser ponctuellement).

Et donc, non, tu ne te souviens pas bien.

Avant d'écrire ce genre de truc, un petit essai vite fait, bien fait ... Non ?
__________________
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 29/12/2010, 08h38   #18
hocine
Membre éclairé
 
Inscription : janvier 2005
Messages : 474
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 474
Points : 355
Points : 355
Salut,
désolé pour le mal entendu,
ce que je voulais dire par "je ne me rappel pas bien" c'est "step=2 ou by step=2" et si les deux sont fausses alors là, c'est une erreur de mon prof en 1989, on écrivait dans l'algorithme " par pas de 2 " mais dans un programmes je me rappel de step c'est pour cela que j'ai confondu.
autre solution
Code :
1
2
3
4
5
6
7
8
 
for i=1 to 100
begin
if i mod 2 <> 0 then
  begin  
  actions
  end; {fin if}
end;   {fin for}
pour la deuxième fois je suis vraiment désolé.
Bonne Chance
Merci.
__________________
Deux, n'apprendront pas; le timide et l'arrogant
hocine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 13h08   #19
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Qua,

Eh oui.

Tu as surtout confondu "algorithme" et "implémentation dans un langage donné".

L'algorithme, qui donne la suite des opérations à effectuer pour résoudre un problème ne doit pas dépendre du langage qui sera effectivement utilisé.

Qu'y figure "par pas de 2" n'implique absolument pas que le langage utilisé intègre cette possibilité dans une boucle "for".

Et comme il a été dit, en Pascal, la meilleure solution est une boucle "while".
__________________
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 30/12/2010, 11h01   #20
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Citation:
Envoyé par Dr.Who Voir le message
Code :
1
2
3
4
5
6
7
8
9
var i : integer;
begin
  I := 0;
  while I > iMax do
  begin
    { code }
    inc(I, 2);
  end;
end;

Bonjour,

j'ai suivi un peu trop distraitement ce fil mais je m'interroge depuis un moment sur cette boucle là. Avec une question qui me taraude : quelle valeur doit donc prendre iMax pour faire fonctionner correctement la boucle ? Ca m'angoisse ...
__________________
"Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
richard 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 12h25.


 
 
 
 
Partenaires

Hébergement Web