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 dans test if, le prog rentre toujours dans mon else


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut Problème dans test if, le prog rentre toujours dans mon else
    Bonjour,

    Voilà, je souhaiterais savoir comment faire pour ne pas entrer automatiquement dans le else du if.... Je m'explique, j'ai un "vecteur" dist2 dont seulement 0 ou 1 valeur sera inférieur à 10. Donc, quand je fais mon test, il rentre toujours dans le else alors que je souhaiterais en sortir dès lors que j'ai trouvé la valeur voulue (entrée dans "matrice"). En fait, si je trouve dist<10 je veux entrer le numéro dans matrice là où je l'ai trouvé et si je ne trouve pas je veux entrer le numéro à la fin de matrice!

    Voici mon programme :

    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
    for k=2
        dist{k-1}=zeros(le{k},1);
        for i=1:le{k}
            dist{k-1}(i)=sqrt((cellule{k-1}(matrice(i,k)).x-cellule{k}(num_Matlab{k}(i)).x)^2+(cellule{k-1}(matrice(i,k)).y-cellule{k}(num_Matlab{k}(i)).y)^2);
            if dist{k-1}(i)<10
                matrice(i,k+1)=num_Matlab{k}(i);
            elseif dist{k-1}(i)>10
                for j=1:le{k-1}
                    if matrice(j,k)~=0                     dist2{k-1}{i}(j)=sqrt((cellule{k-1}(matrice(j,k)).x-cellule{k}(num_Matlab{k}(i)).x)^2+(cellule{k-1}(matrice(j,k)).y-cellule{k}(num_Matlab{k}(i)).y)^2);
                        if dist2{k-1}{i}(j)<10
                            matrice(j,k+1)=num_Matlab{k}(i);
                            break
                        else
                            matrice(le{k}+a,k+1)=num_Matlab{k}(i);
                            matrice(:,k+1)
                        end
                    end
                end
            else
                matrice(matrice(i,k),k+1)=NaN;
            end
        end 
    end
    En vous remerciant de votre aide,

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Je n'ai pas tout compris...

    Mais si tu cherches une valeur dans un vecteur, tu n'est pas obliger de faire un "if" et "else", regardes la fonction "find".

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    break fonctionne avec while .

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par mr_samurai Voir le message
    break fonctionne avec while .
    Désolée de te contredire mais break fonctionne aussi très bien avec for :
    Citation Envoyé par The Mathworks
    break - Terminate execution of for or while loop
    Dans le cas qui nous concerne il y a déjà un break mais attention le break ne sort que de la boucle for juste au-dessus pas de toutes et c'est ça que tu veux faire, je suppose, lilyla ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    En fait je souhaite sortir du test "if" ce n'est apparemment pas possible avec break selon caro... si vous avez des indices, je prend!

    Sinon, je vais utiliser la fonction find pour trouver des valeurs inférieurs à celle souhaitée c'est une très bonne idée dans mon cas je pense.

    Je regarde et vous tiens au courant merci

  6. #6
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par lilyla Voir le message
    En fait je souhaite sortir du test "if"
    De quel if tu parles ?
    Peux-tu signaler dans ton code l'endroit où tu veux arriver quand le programme tombe sur le break ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    De quel if tu parles ?
    Peux-tu signaler dans ton code l'endroit où tu veux arriver quand le programme tombe sur le break ?
    En fait dans le else qui est en gras dans le code de mon 1er post!

    Merci de ton aide,
    Cordialement,

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par lilyla Voir le message
    En fait dans le else qui est en gras dans le code de mon 1er post!

    Merci de ton aide,
    Cordialement,
    Comprends pas.
    Tu veux que s'il rentre dans le if il aille aussi dans le else ?
    Dans ce cas pourquoi faire un else ?
    Est-ce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                    if matrice(j,k)~=0
                       dist2{k-1}{i}(j)=sqrt((cellule{k-1}(matrice(j,k)).x-cellule{k}(num_Matlab{k}(i)).x)^2+(cellule{k-1}(matrice(j,k)).y-cellule{k}(num_Matlab{k}(i)).y)^2);
                       if dist2{k-1}{i}(j)<10
                           matrice(j,k+1)=num_Matlab{k}(i);
                       end
                       matrice(le{k}+a,k+1)=num_Matlab{k}(i);
                       matrice(:,k+1)
                    end
    ne vonviendait pas ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 109
    Points : 63
    Points
    63
    Par défaut
    En fait, je veux que s'il rentre dans le else (d'ailleurs, dans ce cas, il n'est pas rentré dans le if) il n'y rentre qu'une seule fois!

    Mais je pense qu'avec le find je vais contourner mon problème enfin j'espère... car sinon, il ne fait que rentrer dans le else et changé ma valeur à chaque fois par le nouveau num_Matlab{k}(i) (fonction de i) ...

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/01/2015, 09h27
  2. [AC-2003] Problème de test sur plusieurs champs dans une table
    Par Cavart dans le forum Access
    Réponses: 1
    Dernier message: 23/11/2011, 14h51
  3. le prog ne rentre pas dans la boucle
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 06/10/2006, 06h45
  4. [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