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 30/12/2010, 12h29   #21
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 richard Voir le message
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 ...
Je pense qu'il voulait écrire
Code :
1
2
3
 
while i<iMax do
 //...
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 12h56   #22
hocine
Membre éclairé
 
Inscription : janvier 2005
Messages : 474
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 474
Points : 355
Points : 355
Salut Monsieur Richard,
je crois que Dr.Who a laissé le choix à l'utilisateur pou imax
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 30/12/2010, 13h59   #23
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
Citation:
Envoyé par hocine Voir le message
Salut Monsieur Richard,
je crois que Dr.Who a laissé le choix à l'utilisateur pou imax
Bonne chance
Merci.
ça je crois que tout le monde avait compris que la valeur de iMax est à choisir

Mais je crois surtout et ce qui angoisse richard qu'on va tomber dans une boucle infinie si on ne prend pas en compte la proposition de darrylsite écrite juste au dessus !!!
__________________
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 30/12/2010, 15h06   #24
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 krachik Voir le message
ça je crois que tout le monde avait compris que la valeur de iMax est à choisir

Mais je crois surtout et ce qui angoisse richard qu'on va tomber dans une boucle infinie si on ne prend pas en compte la proposition de darrylsite écrite juste au dessus !!!
avec i de type integer, elle ne serait pas infinie.
__________________
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, 15h49   #25
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
Oui si tu me prends aux mots et aux valeurs de bornes 'integer'

Juste pour dire qu'on allait faussé le résultat attendu
__________________
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 30/12/2010, 17h40   #26
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 darrylsite Voir le message
Je pense qu'il voulait écrire
Code :
1
2
3
 
while i<iMax do
 //...
En fait, c'est ce que je pensais aussi ...
__________________
"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
Vieux 30/12/2010, 18h11   #27
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 droggo Voir le message
Gia,

avec i de type integer, elle ne serait pas infinie.
Oui-da, mais dans ce cas elle se sera jamais exécutée car la condition ne peut pas être vérifiée puisque 0 est le plus petit entier existant à ma connaissance, cette boucle est donc inutile ... Le choix entre une boucle infinie ou une boucle jamais exécutée est angoissant, non ?

( M'enfin c'était juste une erreur de '<' au lieu de '>' , tout le monde avait compris, simplement c'est ce type d'erreur qui peut planter tout un programme )
__________________
"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
Vieux 30/12/2010, 20h46   #28
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
Hai,
Citation:
Envoyé par richard Voir le message
Oui-da, mais dans ce cas elle se sera jamais exécutée car la condition ne peut pas être vérifiée puisque 0 est le plus petit entier existant à ma connaissance, cette boucle est donc inutile ... Le choix entre une boucle infinie ou une boucle jamais exécutée est angoissant, non ?
Sauf que les entiers relatifs existent (les valeurs négatives), parfaitement pris en compte par le type Integer (encore heureux, non ?).

Et quand l'incrémentation de la variable atteindra le maximum possible pour les valeurs positives, le débordement lors du calcul renverra une valeur négative.
Et paf, la boucle s'arrêtera, car la condition deviendra vraie.
__________________
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, 21h15   #29
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 droggo Voir le message
Hai,

Sauf que les entiers relatifs existent (les valeurs négatives), parfaitement pris en compte par le type Integer (encore heureux, non ?).
Tu as raison sur ce point, j'avais pris le mot "entier" au sens mathématique et non pas dans le sens de "Integer" (je n'appelle jamais un "Integer" un "entier" pour cette raison d'ailleurs)

Citation:
Envoyé par droggo Voir le message
Et quand l'incrémentation de la variable atteindra le maximum possible pour les valeurs positives, le débordement lors du calcul renverra une valeur négative.
Et paf, la boucle s'arrêtera, car la condition deviendra vraie.
Ca c'est intéressant. Nous n'avons pas lu le même code ou alors j'ai vraiment du mou dans la corde à noeud. Pour moi ce que tu dis tiens quasiment du miracle puisque c'est I qui est incrémenté et que I part de 0.

Mais je bute peut-être sur une de mes lacunes fondamentales ?
__________________
"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
Vieux 30/12/2010, 22h05   #30
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 richard Voir le message
Ca c'est intéressant. Nous n'avons pas lu le même code ou alors j'ai vraiment du mou dans la corde à noeud. Pour moi ce que tu dis tiens quasiment du miracle puisque c'est I qui est incrémenté et que I part de 0.

Mais je bute peut-être sur une de mes lacunes fondamentales ?
C'est bien ça!

i commence à 0 et croit jusqu'à ce que i soit inférieur à iMax.
Alors si nous admettons que nous initialisons iMax à -1, mathématiquement i ne pourra pas être inférieur à iMax puisque sa valeur croit à partir de 0 :
i E [0; +infini[
Mais vu les limitations sur les types de données Integer, si je suppose par exemple que les entiers sont représentés sur 16 bit en compléments à 2, le domaine de variation de i sera :
i E [0; +32767[ U [-32768; 0[

On voit donc bien que i prendra des valeurs négatives inférieures à iMax.

Mais si au départ la valeur de iMax est supérieure à 0, alors la boucle ne s'exécutera pas. Je suppose que c'est ce que tu disais.
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 22h16   #31
richard
Membre expérimenté
 
Inscription : avril 2002
Messages : 427
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 427
Points : 550
Points : 550
Juste. J'avais oublié qu'arrivé à la fin des entiers positifs, I prenait une valeur négative.
C'est pour moi un effet de bord qui ne correspond pas du tout à l'algorithme mais effectivement, dans la pratique, c'est toi [EDIT <et Droggo>] qui a raison et donc moi qui ai tort.


Merci pour ce rafraîchissement de mémoire, en tout cas.
__________________
"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
Vieux 30/12/2010, 22h42   #32
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 richard Voir le message
Juste. J'avais oublié qu'arrivé à la fin des entiers positifs, I prenait une valeur négative.
C'est pour moi un effet de bord qui ne correspond pas du tout à l'algorithme mais effectivement, dans la pratique, c'est toi [EDIT <et Droggo>] qui a raison et donc moi qui ai tort.


Merci pour ce rafraîchissement de mémoire, en tout cas.
Tu n'avais pas tord non plus. On détient tous une partie de la vérité
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 13h59   #33
minifux
Invité de passage
 
Homme Stephane
Analyste développeur
Inscription : décembre 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme Stephane
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Analyste développeur
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 1
Points : 2
Points : 2
en essayant ça ? ( même 12 mois après je veux essayer )


Code :
1
2
3
4
5
for i:= 0 to imax do
begin
  if (NOT odd(i) ) then
   /*Code*/
end;
minifux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2011, 15h40   #34
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,

Pourquoi toujours tenir à compliquer le code ?

Le problème est résolu depuis longtemps, en Pascal, c'est du domaine d'une boucle while (ou repeat .. until, si, si ).

Avec ton code, ta boucle vas faire 2 fois de tours que nécessaire, ce simple fait montre que ce n'est pas adapté.
__________________
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 03/12/2011, 21h38   #35
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
Qua,

Pourquoi toujours tenir à compliquer le code ?

Le problème est résolu depuis longtemps, en Pascal, c'est du domaine d'une boucle while (ou repeat .. until, si, si ).

Avec ton code, ta boucle vas faire 2 fois de tours que nécessaire, ce simple fait montre que ce n'est pas adapté.
+1

En management on parle souvent d'efficience et d'efficacité.

Le code que propose minifux peu être considéré comme efficace en ce sens qu'il résout le problème posé. Mais non efficient puisqu'il utilise plus de moyen que nécessaire.

La solution avec une boucle while est plutôt efficient, et là la meilleur solution.
darrylsite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2012, 03h24   #36
Dr.Mimo
Invité de passage
 
Homme George Klarckson
Étudiant
Inscription : mars 2012
Messages : 10
Détails du profil
Informations personnelles :
Nom : Homme George Klarckson
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2012
Messages : 10
Points : 3
Points : 3
Il y a beaucoup de solutions, dont celle-ci :
Code :
1
2
3
4
5
6
7
8
9
10
11
program pas;
var i: integer;
Begin
  writeln('Pas de deux');
  For i:= 1 to 15 do
    Begin
      writeln(i);
      i:=i+1;
    End;
  readln;
End.
Dr.Mimo est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 27/05/2012, 13h47   #37
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
Hoe,

C'était envisageable, mais c'est du code très sale, car modification du compteur de boucle dans la boucle, ce qu'on n'est pas censé faire en Pascal.
D'ailleurs, les compilateurs plus récents doivent l'interdire.

Et une fois de plus, pourquoi insister, ce sujet est résolu depuis longtemps ! Et en plus avec un code crade ...
__________________
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/05/2012, 16h22   #38
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 001
Points : 1 001
Citation:
Envoyé par droggo Voir le message
C'était envisageable, mais
Si je puis me permettre, moi je ne trouve même pas ça "envisageable". L'instruction donnée à la machine est inintelligible.

Ça me rappelle ces vers :

Citation:
Prends un siège, Cinna, et assieds-toi par terre ;
Et si tu veux parler, commence par te taire !
Que doit faire Cinna à votre avis ?


Cependant je serais curieux de savoir ce qui se passe dans la machine si on essaie d'exécuter ce code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
program test;
 
uses crt;
 
var i: integer;
 
begin
 
  for i:=1 to 9 do
 
    begin
 
      writeln(i); readkey;
 
      i:=i+1;
 
      writeln(i); readkey;
 
    end;
 
end.
Je l'ai testé avec trois compilateurs différents. Cela donne trois résultats différents, ce qui n'est pas étonnant vu l'ambiguïté du code.

1° Turbo-Pascal

i croît indéfiniment, sans s'arrêter à la limite indiquée.

2° Virtual-Pascal

Le programme donne le résultat espéré : à 10 il s'arrête.

3° Free-Pascal

La compilation est refusée. Un message explique qu'il est "illégal" de changer la valeur de i.


Les bons exemples ont tous été donnés dans la première page.
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/05/2012, 16h29   #39
Archimède
Membre émérite
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 026
Points : 975
Points : 975
Excellent
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2012, 19h21   #40
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
Qui,

Par "envisageable", je voulais dire que TP aurait accepter ce code, je ne dis pas que le programmeur aurait dû envisager de le faire.

C'était un des bugs de TP, dans lequel ils sont nombreux à être tombés, et aussi nombreux à en avoir perdu le peu de Pascal qu'ils avaient ("peu de Pascal", car un programmeur connaissant vraiment Pascal ne devrait même pas se poser la question "Puis-je faire ça ?").
__________________
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 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


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


 
 
 
 
Partenaires

Hébergement Web