Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Un nombre d'itération infinie qui ne se fait que... 46 fois ?



  1. #1
    LicenceXP

    Un nombre d'itération infinie qui ne se fait que... 46 fois ?


    ------

    Bonjour !

    Grâce à l'aide qu'on m'a apporté dans un précédent topic (milles merci ), j'ai pu enfin mettre au point mon script.

    Mais comme l'indique le titre, j'ai un ennui. Le script cherche à trouver des nombres ayant des propriétés bien particulières entre eux. Pour se faire, il sélectionne neufs nombres choisis au hasard et regarde si les propriétés attendues sont vérifiées. Si ce n'est pas le cas il, écrit à l'écran le numéro de l'itération et recommence. Autrement il s'arrête et affiche les neufs nombres.
    Mon ennui : j'attends que le programme tourne durant des heures, or il s'arrête de fonctionner après 46 itérations seulement !

    Mais s'arrêter n'est pas le terme exact; en fait il affiche 1 2 3 4 5 6 7 ... 44 45 46 et puis un curseur. Normalement quand un script a fini de s'exécuter, le compilateur affiche toujours "appuyez sur une touche pour continuer". Il ne le fait pas ici.

    Quelqu'un a une idée de pourquoi il se passe cet étrange phénomène ?
    J'ai testé auparavant le compilateur en lui demandant d'afficher des nombres au hasard jusqu'à la fin des temps : il le fait sans broncher... Pq ne veut-il pas refaire (à peu près) la même chose avec mon nouveau script ?

    -----
    Dernière modification par LicenceXP ; 11/10/2006 à 15h33.

  2. Publicité
  3. #2
    Coincoin

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Salut,
    Ca ressemble à une boucle infinie... Essaye de faire afficher un peu plus de choses (utiles ou non) pour voir s'il ne tourne pas en rond.
    Sinon, file nous ton code qu'on regarde ça.
    Encore une victoire de Canard !

  4. #3
    LicenceXP

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?


  5. #4
    zoup1

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Citation Envoyé par LicenceXP Voir le message
    Pour débugguer ton programme il faudrait que tu l'écrive de façon plus structurée. Pour le moment c'est relativement illisible... surtout que l'on a pas vraiment idée de ce que tu cherches à faire.

    Il faudrait que tu fasses des fonctions qui font des actions bien identifiées.
    Après cela on pourra essayer de débugguer...
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  6. A voir en vidéo sur Futura
  7. #5
    fderwelt

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Bonjour et Aaaarrrrgghhh!

    J'ai jeté un rapide coup d'œil sur ton code...

    Je ne comprends même pas que le compilo accepte des choses pareilles. Une fois que tu as écrit
    int a = ... ;
    int b = ... ;
    tu ne peux pas écrire ensuite
    while (b == a) int b = ... ;
    À mon humble avis, au mieux ça crée un nouvel objet b sur la pile à chaque itération, d'où plantage. Le type (ici int) n'est utile que lorsque l'objet b est créé, il ne l'est plus lorsque b est simplement modifié!
    Il faut écrire:
    int a = ... ; // initialisation de a
    int b = ... ; // initialisation de b
    while (b == a) b = ... ; // modif b tant que b == a
    Mais je persiste à croire qu'un compilo sérieux ne devrait pas accepter ça. C'est étonnant si c'est vraiment Borland C++Builder... (celui que j'utilise).

    -- françois
    Les optimistes croient que ce monde est le meilleur possible. Les pessimistes savent que c'est vrai.

  8. #6
    overmind

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Tu peux répéter int, ce n'est pas gênant (quoique inutile, le compilo ne fait que l'ignorer...) c'est les types conflictuels qui posent problème...

  9. Publicité
  10. #7
    overmind

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    EDIT: gcc me jette dehors après essai...

  11. #8
    PopolAuQuébec

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Citation Envoyé par LicenceXP Voir le message
    Mon ennui : j'attends que le programme tourne durant des heures, or il s'arrête de fonctionner après 46 itérations seulement !
    ...
    J'ai testé auparavant le compilateur en lui demandant d'afficher des nombres au hasard jusqu'à la fin des temps : il le fait sans broncher... Pq ne veut-il pas refaire (à peu près) la même chose avec mon nouveau script ?
    La variable "end" qui contrôle ta boucle principale est initialisée à 1, ton contrôle de boucle principale est :

    while (end==1)

    et vers la fin du programme tu as l'instruction suivante (exécutée conditionnellement) :

    end=0;

    Dans ces conditions, tu ne peux t'attendre à ce que le programme roule indéfiniment.

    Peut-être t'es tu trompé sur le nom de la variable dans cette instruction ?

    (À première vue, tu voulais peut-être écrire : endl=0; )

  12. #9
    LicenceXP

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    La condition pour que end soit différent de un, est extrêmement dure à remplir en fait. Elle est même mathématiquement hypothétique => d'où l'idée que le programme pourrait tourner indéfiniment.


    Bien vu pour le coup du int b interne à while : je n'ai même pas pensé au fait que je ne faisais que créer une nouvelle variable localement :s


    Pour info le vilain compilateur qui a accepté mon mauvais script si j'ai bien compris, c'est Dev-C++

  13. #10
    Pole

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Dev-c++ a pour habitude d'utiliser gcc ou g++.
    En fait, le programme cherche désespérément une solution et bloque puisque il n'y en a pas. (Tu fais un test si tu as un Pentium,ou tu veux transformer ton ordi en détecteur de rayon cosmique? )
    Un bon conseil, évite de décaler de 35 espaces. Moi, je pense que 2 suffisent. (Je sais, Dev-c++ ne décalent pas comme moi et )

    Sinon, que cherches-tu?

    Pole.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  14. #11
    LicenceXP

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Un carré magique troisxtrois constitué de nombres mis au carrés.

    Donc si j'ai bien compris je dois refaire mon programme

  15. #12
    fderwelt

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Bonjour,

    Je me mêle de ce qui ne me regarde pas...

    J'avais bien compris l'idée qu'il s'agit de trouver des carrés magiques 3x3 remplis avec des carrés de nombres distincts. Mais alors 9 boucles imbriquées doivent faire l'affaire. Le coup de prendre des nombres au hasard est risqué, rien ne dit que tu tomberas sur une solution (s'il en existe une) en un temps raisonnable.

    Cela dit, l'exploration complète de toutes les possibilités est garantie de terminer (du moins si les nombres en jeu ne prennent qu'un nombre fini de valeurs), mais en un temps qui, euh, comment dire? Tu as une bonne pile de DVD à côté de toi, des pizzas et un pack de bière?

    Exemple pour un carré 2x2:

    Code:
    for (int i11 = 1 ; i11 <= max ; i11++) {
      for (int i12 = 1 ; i12 <= max ; i12++) {
        if (i12 != i11) {
          for (int i21 = 1 ; i21 <= max ; i21++) {
            if ((i21 != i11) && (i21 != i12)) {
              for (int i22 = 1 ; i22 <= max ; i22++) {
                if ((i22 != i11) && (i22 != i12) && (i22 != i21)) {
                  // vérifier ici si ça colle
                  // si oui, afficher la solution
                }
              }
            }
          }
        }
      }
    }
    Enfin, ça vaut ce que ça vaut...

    -- françois
    Les optimistes croient que ce monde est le meilleur possible. Les pessimistes savent que c'est vrai.

  16. Publicité
  17. #13
    LicenceXP

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    En fait après avoir passé ma journée là-dessus j'en suis arrivé à la conclusion que mon script pouvais être bcp mieux écrit et plus efficace XD

    PS : je ne bois pas de bière

  18. #14
    fderwelt

    Re : Un nombre d'itération infinie qui ne se fait que... 46 fois ?

    Citation Envoyé par LicenceXP Voir le message
    En fait après avoir passé ma journée là-dessus j'en suis arrivé à la conclusion que mon script pouvais être bcp mieux écrit et plus efficace XD
    Je n'en doute pas... Une solution récursive me semble s'imposer.

    PS : je ne bois pas de bière
    Ce que j'en disais... c'est la technique classique devant un match de foot, c'est vrai que devant un ordinateur qui rame ça ne marche peut-être pas pareil. Et pour tout dire, même si je bois parfois un peu de bière, JAMAIS je ne mange de pizza.

    -- françois
    Les optimistes croient que ce monde est le meilleur possible. Les pessimistes savent que c'est vrai.

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/08/2007, 19h32
  2. Permettre un nombre d'itération infini sous Dev-C++
    Par LicenceXP dans le forum Logiciel - Software - Open Source
    Réponses: 29
    Dernier message: 16/10/2006, 21h01
  3. nombre d'itération
    Par duaner dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 13/10/2006, 21h39
  4. windows xp ne reconnait plus mon profil et fait un premier redémarrage à chaque fois
    Par temroc dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 07/01/2005, 22h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.