IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème de boucle


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Par défaut Problème de boucle
    Bonjour,

    j'ai cherché une bonne demi heure une solution à mon problème sur internet avant de me résoudre à le poster ici.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        for(int x=0 ; x<8 ; x++)
        {
            for(int y=0 ; y<9999 ; y++)
            {
                grid->SetReadOnly(y, x, true);
            }
        }
    j'ai une grille qui fait comme taille 8x9999 et la fonction SetReadOnly se fait bien dans l'ordre (y,x)
    voilà, je compile tout va bien, je teste le programme et là, la fenetre ne s'affiche pas et le compilo reste bloqué

    si je remplace 9999 par une valeur faible tout marche bien, je pense que c'est de là que viens le problème mais je ne comprend pas, quelqu'un a une solution s'il vous plait?
    Merci.

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Bonjour.
    Citation Envoyé par Mujin Voir le message
    voilà, je compile tout va bien, je teste le programme et là, la fenetre ne s'affiche pas et le compilo reste bloqué
    [...]
    si je remplace 9999 par une valeur faible tout marche bien
    Est -tu sûr qu'il est bloqué et qu'il n'et pas en train de parcourir ta boucle ? ça peut être long 79992 surtout si SetReadOnly est une fonction longue à exécuter. à ce propos,
    SetReadOnly se fait bien dans l'ordre (y,x)
    dans ce cas, il faudrait peut être inverser les boucle, parce qu'il doit faire pas mal de saut de séquence là (qui sont plus long):le code suivant sera plus rapide (si tu fais pas d'affichage bien sûr)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     for(int y=0 ; y!=9999 ; ++y)
    {
        for(int x=0 ; x!=8 ; ++x)
        {
            grid->SetReadOnly(y, x, true);
        }
        //il pourait être intéressant d'afficher y ici pour voir la progression.
    }


    Bonne chance

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut
    Citation Envoyé par Mujin Voir le message
    Bonjour,

    j'ai cherché une bonne demi heure une solution à mon problème sur internet avant de me résoudre à le poster ici.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        for(int x=0 ; x<8 ; x++)
        {
            for(int y=0 ; y<9999 ; y++)
            {
                grid->SetReadOnly(y, x, true);
            }
        }
    j'ai une grille qui fait comme taille 8x9999 et la fonction SetReadOnly se fait bien dans l'ordre (y,x)
    voilà, je compile tout va bien, je teste le programme et là, la fenetre ne s'affiche pas et le compilo reste bloqué

    si je remplace 9999 par une valeur faible tout marche bien, je pense que c'est de là que viens le problème mais je ne comprend pas, quelqu'un a une solution s'il vous plait?
    Merci.
    D'un côté tu dis :
    Voilà, je compile tout va bien, ...
    et de l'autre tu dis :
    je teste le programme et là, la fenetre ne s'affiche pas et le compilo reste bloqué
    Alors ça compile où ça ne compile pas ?

    Si cela compile alors cela doit être une erreur à l'execution

    Que fais exactement SetReadOnly ?
    Bascule-t-elle uniquement l'état d'un membre donnée de type booléen ou fait-elle autre chose en plus ?

    Qu'utilises-tu comme outils ?
    Visual Studio ? Code::Block ? Tout à la main avec un makefile ?

    Si tu lances ton programme depuis un EDI alors vérifies ce que cela donne lorsque hors de l'EDI (est en version release).

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    A quoi correspond grid (son type) ? Car effectivement, si derrière SetReadOnly se cache un ou des appels systèmes (comme des envois de messages) avec des traitements un peu long, cela peut tout simplement être du à ce que ta boucle prend du temps.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Par défaut
    bonjour,

    grid est une wxGrid (bibliothèque wxWidgets) et je suis sous code::blocks si ça aide

    j'ai besoin d'une boucle pour parcourir une grid de 9999 lignes, peu importe la fonction appelé dans la boucle (ça peut être SetCellBackgroundColour par ex) quand j'execute ça reste figé sans faire apparaitre quoi que ce soit meme en attendant 2 minutes ça fait rien, par contre si je diminue le nombre de boucle à 300 ça s'affiche tout de suite.

    j'ai cru voir un jour que si le nombre de boucle était important cela pouvait se transformer en boucle infini, ma mémoire me joue des tours ou c'est possible que ce soit ça? ou alors c'est une boucle de 9999 qui prend normalement beaucoup de temps?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Puisqu'il n'y a rien de pire que de rester sur un problème très localisé, essayez de limiter les y à 32767/8 = 4109 ou le double 8218.
    Cordialement

  7. #7
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    êtes-vous sure d'avoir correctement dimensionner la grid c.a.d. d'avoir fait grid->CreateGrid( 8, 9999 ) ? car d'après la doc il semble que la taille donnée dans le constructeur n'indique pas le nombre de colonnes/lignes (voir aussi cet exemple )

    Citation Envoyé par méphistopheles Voir le message
    ...
    //il pourait être intéressant d'afficher y ici pour voir la progression.
    au cas ou vous avez bien initialisé la chose, avez-vous fait ce que propose méphistopheles ? voir a partir de quel rang le problème survient peut être intéressant
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 69
    Par défaut
    Lorsque tu appelles 'grid->SetReadOnly(y, x, true)', est-tu sûr et certain que les paramètres 'y' et 'x' ne sont pas modifié par 'SetReadOnly' ?

    Tu n'aurait pas intervertit 'x' à la place de 'y' dans 'grid->SetReadOnly(y, x, true)' ? C'est à dire, ne serait-ce plutôt pas grid->SetReadOnly(x, y, true) au lieu de grid->SetReadOnly(y, x, true) ?

    Quelles-sont les paramètres donnés au constructeur de 'grid' ?

    Avant la boucle, quelles sont les appels de methodes sur 'grid' ?

    Y'a-t-il un autre objet dont tu as passé une référence sur 'grid' qui pourrait modifier l'état de l'objet ?

    etc..

    Bref, le problème est que l'on ne peut absolument pas t'aider car tu nous donnes aucune autre information que la boucle en elle-même.

    Crée un autre autre projet de type console, et dans la fonction 'main' tu fait un copier-coller du bout de code de la boucle que tu nous a donné et à la place de l'appel à 'grid' tu mets ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::cout << "X : " << x << ", Y : " << y << endl;
    Bien sûr ce n'est plus le même programme, mais c'est pour te faire voir que le problème n'est pas la boucle en elle-même mais plutôt ce qu'il y a à l'intérieur de la boucle et comment les indices de boucles sont utilisés.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 49
    Par défaut
    déjà merci à tous pour votre aide

    je viens de voir que c'était pas un problème de boucle merci.
    j'ai attendu plus longtemps et au bout de 5 minutes le programme s'affiche bien, j'ai diminué le nombre de ligne de la grid à 3000 et le temps d'apparition de la fenêtre est plus acceptable alors je vais m'arrêter à ça.

    merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo