Un nombre d'itération infinie qui ne se fait que... 46 fois ?
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
    invite234d9cdb

    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 ?

    -----

  2. #2
    invite88ef51f0

    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.

  3. #3
    invite234d9cdb

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


  4. #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.

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

    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

  7. #6
    invite597d4991

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

  8. #7
    invite597d4991

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

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

  9. #8
    invitefa5fd80c

    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; )

  10. #9
    invite234d9cdb

    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++

  11. #10
    invite3d7be5ae

    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.

  12. #11
    invite234d9cdb

    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

  13. #12
    invite6de5f0ac

    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

  14. #13
    invite234d9cdb

    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

  15. #14
    invite6de5f0ac

    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

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/08/2007, 19h32
  2. Permettre un nombre d'itération infini sous Dev-C++
    Par invite234d9cdb dans le forum Logiciel - Software - Open Source
    Réponses: 29
    Dernier message: 16/10/2006, 21h01
  3. nombre d'itération
    Par invite81670530 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 invitee99e2f01 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 07/01/2005, 22h19
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...