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 :

Poursuivre l'exécution d'une boucle while()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut Poursuivre l'exécution d'une boucle while()
    Bonjour,

    Je suis nouveau ici ainsi que dans le monde de la programmation.

    Après de multiples recherches, y compris naturellement sur ce forum, je ne trouve pas la réponse à ma question.

    Le problème n'a rien de complexe, et je pense que quelqu'un avec plus d'expérience que moi pourra m'aider.

    J'ai une fonction qui remplit parfaitement son rôle (je ne rencontre pas d'erreur et elle produit le type de résultat escompté).

    Dans cette fonction, j'ai une boucle while() et j'aimerais qu'elle poursuive son exécution même après avoir produit un résultat.

    J'ai vérifié, il est possible de produire plusieurs résultats avec les critères utilisés. Ce n'est donc pas qu'il n'y a qu'un résultat.

    Voici le code réduit à l'essentiel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    while (tests logiques)
            {
                
                for (x=0; x< y; x++) 
                {
               
                (produit des résultats pour le test logique)
    
                    }
    
               for (x=0; x< y; x++) 
                {
                (manipule les résultats précédents)
                    }
     }
    J'ai essayé d'utiliser continue; en vain. Cela n'a aucun effet.

    Merci par avance pour votre réponse !

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Salut

    Qu'entends-tu par "produire des résultats" ???
    En programmation, il n'y a que des variables et des instructions. Si tu veux que la seconde boucle for() puisse traiter les résultats produits par la première, il te faut alors sauvegarder ces résultats dans une variable adaptée => un tableau. Ainsi la seconde boucle pourra accéder aux informations sauvegardées dans la première.

    Ca donnera un truc de ce style
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    déclaration tab[y]
    while (tests logiques)
    {
        for (x=0; x< y; x++) 
        {
             calculer le résultat x et le stocker dans tab[x]
        }           
        for (x=0; x< y; x++) 
        {
             traiter la valeur stockée dans tab[x]
        }
    }

    Toutefois, à ce niveau minimaliste, le tableau devient inutile car on peut traiter directement le résultat x dans la première boucle sans le stocker. Mais c'était pour donner un cadre général...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut
    Tout d'abord, merci pour cette réponse (rapide !).

    Sur le premier point (vocabulaire), je tiens à présenter mes excuses d'être aussi imprécis : je débute tout juste la programmation. Je vais tâcher de veiller à mon langage.

    Sur le second point : la difficulté n'est pas là. Mes boucles for() interagissent bien ensemble grâce à malloc. Mon problème est, comme je l'ai exposé, que l'instruction s'arrête dès qu'un résultat est trouvé. Or je voudrais avoir tous les résultats possibles.

    Merci encore !

    Edit.

    Je cherche à faire ceci :



    Tant que A est TRUE, poursuivre jusqu'à ce que A soit FALSE.
    Mais mon while() est construit à l'envers, car mon A est FALSE jusqu'à ce qu'il soit TRUE (sous-entendu : tant que ces conditions logiques produisent FALSE, continuer de chercher pour qu'elles soient TRUE).

    Ainsi, imaginons que je veuille que (a == b), je fais : while(!(a==b)).

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hobbèse Voir le message
    Ainsi, imaginons que je veuille que (a == b), je fais : while(!(a==b)).
    Oui c'est un choix. Ou alors tu écris plus simplement while (a != b) car tu as à ta disposition tous les opérateurs logiques ainsi que leurs inverses.
    Et en faisant attention, dans le cas de tests plus complexes, aux lois de De Morgan ; qui disent que non(A et B) = non(A) ou non(B) et que non(A ou B) = non(A) et non(B).
    Ainsi si tu veux un nombre compris entre X et Y (donc plus grand que X et plus petit que Y) alors tu ne veux pas de nombre plus petit que X ou plus grand que Y

    Citation Envoyé par Hobbèse Voir le message
    Mes boucles for() interagissent bien ensemble grâce à malloc.
    Euh oui ce n'est pas trop le rôle de malloc() que de faire intéragir des boucles for mais si ça fonctionne...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut
    J'utilise malloc dans un contexte plus large (génération de matrices dynamiques). Mais je n'avais pas songé que cela pouvait expliquer que mon while() s'arrête après un seul résultat...

    Cela ne vient-il pas de la structure même du code ? (un while avec des tests logiques FALSE + deux sous-boucles for non imbriquées)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 13
    Par défaut
    C'est bon, j'ai résolu tout seul mon problème.

    J'ai mis mes deux for dans une boucle do / while. Je peux même ajuster le nombre de résultats souhaités dans while !

    Si cette solution vous intéresse, je peux vous la présenter ici avec plus de détail à votre demande.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hobbèse Voir le message
    J'utilise malloc dans un contexte plus large (génération de matrices dynamiques). Mais je n'avais pas songé que cela pouvait expliquer que mon while() s'arrête après un seul résultat...
    Non. Le malloc() ne joue en rien dans l'arrêt de ta boucle. La boucle sort lorsque l'expression logique invoquée renvoie Faux. Si l'expression logique demande une égalité alors la boucle s'arrête quand l'égalité devient fausse (inégale donc) ; et si l'expression logique demande une inégalité alors la boucle s'arrête quand l'inégalité devient fausse (égale donc).

    Le malloc, lui, ne fait que demander à l'OS une zone mémoire de n octets et te renvoie l'adresse du début de cette zone. Utile pour générer des matrices dynamiques oui mais n'influe pas dans un while (sauf si tu utilises sa valeur renvoyée dans l'expression logique bien évidemment)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Arrêter une boucle (while) en cours d'exécution
    Par Cybberdupont dans le forum Langage
    Réponses: 19
    Dernier message: 26/06/2008, 14h24
  2. Afficher un waitbar pendant l'exécution d'une boucle while
    Par LMU2S dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/03/2008, 19h22
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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