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 :

Pb boucle [FOR] avec condition [IF]


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut Pb boucle [FOR] avec condition [IF]
    Bonjour,

    j'essaye de tracer certaines courbes entre elles suivant leurs nom (pas besoin de tout comprendre): en gros je 'creer' le nom du fichier à chaque itération de boucle, je l'ouvre ensuite et le plot dans une figure suivant son nom défini avec i et j).
    Voici le 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    clear all
    close all
    couleur = hsv(10) ;
    serie = [42:81] ;
    pas_serie = 10 ;
    NbStack = [0:11] ;
    
    
    c1 = 0 ;
    c2 = 0 ;
    
    
    
    for i = serie
        
        for j = NbStack
            
            if j<10
                fichier = [num2str(i),'_','00',num2str(j),'.sac'] ;
                
            elseif j >= 10
                fichier = [num2str(i),'_','0',num2str(j),'.sac'] ;
            end
            i
            j
            if j==0 && (i <= serie(1)+pas_serie-1)
                num1 = fichier
                c1 = c1 + 1 ;
                figure(1)
                data1 = readsac(fichier);
                data1 = data1.trace ;
                hold on
                plot(data1,'color',couleur(c1,:)) ;
                title('42 à 51 - V1 (10 stacks)')
            end
    
            if j==0 && (serie(1)+pas_serie <= i <= serie(1)+2*pas_serie-1)
                num2 = fichier
                c2 = c2 + 1 ;
                figure(2)
                data2 = readsac(fichier);
                data2 = data2.trace ;
                hold on
                plot(data2,'color',couleur(c2,:)) ;
                title('52 à 61 - V1 (10 stacks)')
            end
    
    end
    end
    Sans comprendre le pourquoi du comment de ce programme, le problème est au niveau des conditions IF: dès la première série de boucle i et j il me retourne :

    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
    i =
     
        42
     
     
    j =
     
         0
     
     
    num1 =
     
    42_000.sac
     
     
    num2 =
     
    42_000.sac
    on remarque donc ici qu'avec j=0 et i=42, il rentre dans les DEUX conditions (que l'on voit grâce à l'affichage de num1 et num2) alors que la première stipule bien IF j=0 et i<=51 (ici ok pas de pb, ça respecte les conditions) mais la deuxième stipule IF j=0 (toujours ok) mais aussi i compris entre 52 et 61 (Donc pas OK puisque i=42).

    Comprends pas...

    Merci d'avance

    EDIT : merde je crois que c'est juste un pb d'écriture de IF (on peut pas encadrer une conditionnelle...) je vérifie.. Désolé

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 951
    Points
    52 951
    Par défaut
    ça n'a rien à voir mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if j<10
                fichier = [num2str(i),'_','00',num2str(j),'.sac'] ;
     
            elseif j >= 10
                fichier = [num2str(i),'_','0',num2str(j),'.sac'] ;
            end
    devient tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = sprintf('%d_%03d.sac',i,j);
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >> a = [5 27 129]
     
    a =
     
         5    27   129
     
    >> sprintf('%03d\n',a)
     
    ans =
     
    005
    027
    129

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Ha merci DUT, j'aurais pas posté ça pour rien au moins

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

Discussions similaires

  1. Boucle For avec condition sur doublons
    Par nyto35 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/04/2013, 11h04
  2. [XL-2003] boucle For avec multiple conditions d'arret
    Par yvespi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/05/2010, 09h30
  3. Réponses: 2
    Dernier message: 14/04/2010, 18h39
  4. Aide boucle for avec condition
    Par guigui33 dans le forum Images
    Réponses: 1
    Dernier message: 06/03/2008, 20h59
  5. boucle for avec condition
    Par Daniel Magron dans le forum Delphi
    Réponses: 4
    Dernier message: 22/01/2007, 16h18

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