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

MATLAB Discussion :

Problème de IF dans une boucle WHILE


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut Problème de IF dans une boucle WHILE
    Salut,

    j'ai un problème avec ma boucle qui veut pas marcher

    déja je ne sais pas si on peut utiliser la boucle while et à l'interieur des conditions (plusieurs) if ??
    bref:

    moi je veux tester plusieurs dimensions (XX:longueur ;YY:largeur) d'un instrument mécanique de mesure:
    et je cherche quelle dimension est la plus precise en calculant la précision "t_calculer " données avec ces dimensions (dimensions de l'instrument utilisé) :

    Si t1< t_calculé < t2---->ok les dimensions de l'instrument sont bonnes .

    Si t1> t_calculé : ----> les dimensions sont pas assez alors :
    XX=2*XX
    YY=2*YY

    Si t_calculé > t2 :----> les dimensions sont trop grandent alors :
    XX=XX/2
    YY=YY/2

    mon code ou la structure de mon code est la suivante:


    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    %un premier calcul (t_calculé) avec les dimensions  initiales  XX=XXet YY=YY
              for i=.....
     
             t_Calculé=f(XX,YY)
     
              end 
     
    while ( t_Calculé < t1) |( t_Calcule > t2)
             if  t1 > t_Calculé 
                  XX=2*XX
                  YY=2*YY
     
             elseif  t_calculé > t2 
                   XX=XX/2
                   YY=YY/2
     
    %et ici une boucle "for" pour juste calculer "t_Calculé"en fonction des %nouveaux  XX et YY
             for i=.....
     
             t_Calculé=f(XX,YY)
     
              end 
     
       end
    mais le code il s'arrete "probleme avec While"
    parfois il me met "probleme avec if "

    Aidez moi SVP
    Je vous remerci d'avance

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    il n' y a pas de endif en matlab?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    ce n'est pas end if c'est un end while

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Salut,
    il manque un end pour le if :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    %un premier calcul (t_calculé) avec les dimensions  initiales  XX=XXet YY=YY
              for i=.....
    
             t_Calculé=f(XX,YY)
    
              end 
    while ( t_Calculé < t1) |( t_Calcule > t2)
             if  t1 > t_Calculé 
                  XX=2*XX
                  YY=2*YY
    
             elseif  t_calculé > t2 
                   XX=XX/2
                   YY=YY/2
             end
    
    %et ici une boucle "for" pour juste calculer "t_Calculé"en fonction de XX et YY
             for i=.....
    
             t_Calculé=f(XX,YY)
    
              end 
    
       end
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    ça ne marche toujours pas
    en fait il calcule un nouveau t_calculé mais il ne prend pas les nouveaux XX et YY.
    càd il donne le meme t_calculé

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Citation Envoyé par Medoou Voir le message
    ça ne marche toujours pas
    en fait il calcule un nouveau t_calculé mais il ne prend pas les nouveaux XX et YY.
    càd il donne le meme t_calculé
    Peut-être que le premier t_calculé vérifie les conditions pour sortir directement du while?

    par contre, tel qu'il est construit, ton code a de grande chance de provoquer une boucle infini avec le while...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Citation Envoyé par magelan Voir le message
    Peut-être que t_calculé vérifie les conditions du while?...
    non c'est pas pas possible sinon il sort de la boucle et il affiche "ok les dimensions sont bonnes.
    Citation Envoyé par magelan Voir le message
    par contre, tel qu'il est construit, ton code a de grande chance de provoquer une boucle infini avec le while...
    oui j'ai l'impression aussi car parfois je dois appuer sur Ctrl+c pour arreter et là il me dit "problème avec while"
    mais qu'est ce qu'il faut faire?????????

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Pourquoi fais-tu une boucle for pour calculer t_Calculé? (et pourquoi avoir mis des pointillés dans "for i=....."?)
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    c'est juste pour simplifier le problème j'ai mis des points et tout
    en vérité pour calculé "t_calculé" il faut faire plusieurs itérations avant d'arrivé à l'etape de "t_calculé"

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    C'est difficile de t'aider concrètement sans le code complet mais je vais essayer quand même.

    première question : es-tu sûr qu'en augmentant les dimensions, t_Calculé augmente? (et inversement?) (ça pourrait être aussi une cause de boucle infini...)

    Deuxièment : tu as une condition pour laquelle si t1>t_Calculé alors tu multiplies par 2 tes dimensions, puis tu calcules une nouvelle valeur de t_Calculé. Imaginons que cette nouvelle valeur vérifie t_calculé > t2, alors tu va rentrer dans la deuxième condition donc tu vas diviser tes dimensions par 2, donc tu vas te retrouver dans la configuration initiale!!! (c'est à dire que tu auras multiplié par 2 puis diviser par 2 donc c'est comme si tu n'avais rien fait); donc ce scénario va se répéter indéfiniment...

    Il faut donc que tu adaptes le coefficient multiplicateur de tes dimensions en fonction du résultat précédent.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 175
    Par défaut
    Merci déja beaucoup pour ton suivi
    1-pour ta première question oui , je suis sur qu'en augmentant les dimension t_calculè augmente aussi ---> c'est normal pasque t_calculè=f(XX,YY).

    2-pour la ta 2 iepme remarque l'idée en fait c'est que : par exemple XX/2 et YY/2 ça marche pas càd t_calculè>t2.
    avec la boucle while on incrimente sur les précidents dimension çàd la 2ième itiration XX=XX/2/2=XX/4
    et YY=YY/2/2=YY/4
    et la meme chose pour l'autre cas :
    2*XX et 2*YY devienent 4*XX et 4*YY

    en tout cas c'est ce que je veux faire, mais je ne sais pas ma boucle ça marche comme ça ou pas. càd elle incrémente sur les dernieres dimensions XX etYY ?
    ou comme ta dis c'est les dernieres XX et YY qui se repetent ????
    je suis perdu

Discussions similaires

  1. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 17h18
  2. Problème .destroy() dans une boucle while !
    Par stuffy dans le forum Tkinter
    Réponses: 1
    Dernier message: 29/06/2008, 01h30
  3. problème de recordset dans une boucle while
    Par sebac dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/06/2007, 11h47
  4. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  5. [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

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