Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 40 sur 40
  1. #21
    Rédacteur
    Avatar de darrylsite
    Inscrit en
    juillet 2007
    Messages
    1 300
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 1 300
    Points : 2 210
    Points
    2 210

    Par défaut

    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
     //...

  2. #22
    Membre éclairé
    Inscrit en
    janvier 2005
    Messages
    485
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 485
    Points : 391
    Points
    391

    Par défaut

    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

  3. #23
    Expert Confirmé Sénior
    Avatar de krachik
    Inscrit en
    décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 1 964
    Points : 4 168
    Points
    4 168

    Par défaut

    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

  4. #24
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 565
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 565
    Points : 4 575
    Points
    4 575

    Par défaut

    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.

  5. #25
    Expert Confirmé Sénior
    Avatar de krachik
    Inscrit en
    décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 1 964
    Points : 4 168
    Points
    4 168

    Par défaut

    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

  6. #26
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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

  7. #27
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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

  8. #28
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 565
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 565
    Points : 4 575
    Points
    4 575

    Par défaut

    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.

  9. #29
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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

  10. #30
    Rédacteur
    Avatar de darrylsite
    Inscrit en
    juillet 2007
    Messages
    1 300
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 1 300
    Points : 2 210
    Points
    2 210

    Par défaut

    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.

  11. #31
    Membre chevronné

    Inscrit en
    avril 2002
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 436
    Points : 614
    Points
    614

    Par défaut

    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

  12. #32
    Rédacteur
    Avatar de darrylsite
    Inscrit en
    juillet 2007
    Messages
    1 300
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 1 300
    Points : 2 210
    Points
    2 210

    Par défaut

    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é

  13. #33
    Invité de passage
    Homme Profil pro Stephane
    Analyste développeur
    Inscrit en
    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 : 1
    Points
    1

    Par défaut

    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;

  14. #34
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 565
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 565
    Points : 4 575
    Points
    4 575

    Par défaut

    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.

  15. #35
    Rédacteur
    Avatar de darrylsite
    Inscrit en
    juillet 2007
    Messages
    1 300
    Détails du profil
    Informations forums :
    Inscription : juillet 2007
    Messages : 1 300
    Points : 2 210
    Points
    2 210

    Par défaut

    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.

  16. #36
    Invité de passage
    Homme Profil pro George Klarckson
    Étudiant
    Inscrit en
    mars 2012
    Messages
    12
    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 : 12
    Points : 3
    Points
    3

    Par défaut

    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.

  17. #37
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 565
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 565
    Points : 4 575
    Points
    4 575

    Par défaut

    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.

  18. #38
    Rédacteur/Modérateur
    Avatar de Roland Chastain
    Homme Profil pro Roland Chastain
    Inscrit en
    décembre 2011
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Nom : Homme Roland Chastain
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : décembre 2011
    Messages : 1 411
    Points : 3 899
    Points
    3 899

    Par défaut

    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 :

    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.

  19. #39
    Membre Expert
    Avatar de Archimède
    Homme Profil pro anthony LAURENT
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Nom : Homme anthony LAURENT
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 190
    Points : 1 250
    Points
    1 250

    Par défaut

    Excellent

  20. #40
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 565
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 565
    Points : 4 575
    Points
    4 575

    Par défaut

    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •