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 avec une boucle for


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 116
    Par défaut Problème avec une boucle for
    Bonsoir à tous,

    J'ai codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    n=200;
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = floor(rand(1,1)*3+1)
    else NB_MODES(i) = floor(rand(1,1)*4+1) 
      end
    end
    ZONE est un tableau de 200 postes.
    Moi ce que je souhaite c'est donc que i balaye dans son intégralité le tableau ZONE et fasse un certain traitement en fonction de ce qui est contenu dans ZONE. C'est-à-dire créer un tableau NB_MODES de 200 postes (une valeur par poste) qui contiendra ces valeurs qui dépendent de ZONE.
    Or, lorsque j'exécute je me retrouve avec 200 tableaux NB_MODES et j'ai l'impression que la condition n'est pas respectée.

    Merci d'avance.

  2. #2
    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
    Bonjour,
    Citation Envoyé par Zaza91280 Voir le message
    Or, lorsque j'exécute je me retrouve avec 200 tableaux NB_MODES
    Peux-tu préciser?
    Normalement, tu devrais obtenir un tableau NB_MODES contenant 200 valeurs.

    Pour tester tu peux plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    n=200;
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = 2
    else NB_MODES(i) = 1
      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.

  3. #3
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n = 200 ;
     
    NB_MODES = zeros(n, 1) ;
     
    NB_MODES(ZONE == 2) =  floor(rand(1,1)*3+1)  ;
     
    NB_MODES(ZONE~= 2) =  floor(rand(1,1)*4+1)  ;

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 116
    Par défaut
    Citation Envoyé par magelan Voir le message
    Bonjour,

    Peux-tu préciser?
    Normalement, tu devrais obtenir un tableau NB_MODES contenant 200 valeurs.

    Pour tester tu peux plutôt faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    n=200;
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = 2
    else NB_MODES(i) = 1
      end
    end
    ZONE est obtenu comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZONE = floor(rand(1,200)*5+2)
    Et lorsque j'exécute votre code, j'obtiens ceci :
    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
    NB_MODES  =
     
        1.  
     NB_MODES  =
     
        1.  
        1.  
     NB_MODES  =
     
        1.  
        1.  
        1.  
     NB_MODES  =
     
        1.  
        1.  
        1.  
        1.  
     NB_MODES  =
     
        1.  
        1.  
        1.  
        1.  
        1.  
     NB_MODES  =
     
        1.  
        1.  
        1.  
        1.  
        1.  
        1.  
     NB_MODES  =
     
        1.  
        1.  
        1.  
        1.  
        1.  
        1.  
        1.
    et ça continue et ça continue .

    Avec mon ancien code, j'ai x tableaux NB_MODES de 200 postes tous identiques.

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Voici ce que ça donne chez moi :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    >> ZONE = floor(rand(1,10)*5+2)
    
    ZONE =
    
         5     3     6     4     3     6     6     4     5     4
    
    >> n=10;
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = 2
    else NB_MODES(i) = 1
      end
    end
    
    NB_MODES =
    
         1
    
    
    NB_MODES =
    
         1     1
    
    
    NB_MODES =
    
         1     1     1
    
    
    NB_MODES =
    
         1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1     1     1     1

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 116
    Par défaut
    Citation Envoyé par kmaniche Voir le message
    Voici ce que ça donne chez moi :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    >> ZONE = floor(rand(1,10)*5+2)
    
    ZONE =
    
         5     3     6     4     3     6     6     4     5     4
    
    >> n=10;
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = 2
    else NB_MODES(i) = 1
      end
    end
    
    NB_MODES =
    
         1
    
    
    NB_MODES =
    
         1     1
    
    
    NB_MODES =
    
         1     1     1
    
    
    NB_MODES =
    
         1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1     1     1
    
    
    NB_MODES =
    
         1     1     1     1     1     1     1     1     1     1
    Donc en fait, ce qu'on voit là c'est la construction du tableau NB_MODES et le dernier est en fait la version finale ?

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Par défaut
    Oui, c'est tout à fait ca

    Tu vois juste la construction du tableau.
    Si tu fais une péallocation de mémoire, tu verrais ton tableau avec sa taille finale se remplir au fur et à mesure.

    Tu peux mettre un point virgule à la fin de NB_MODES dans ta boucle pour ne pas avoir tous ces affichages. Et tu ne l'affiches qu'à la fin.

    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
    ZONE = floor(rand(1,10)*5+2)
     
    ZONE =
     
         5     3     6     4     3     6     6     4     5     4
     
    n=10;
    NB_MODES = zeros(n, 1) ;
     
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = 2
    else NB_MODES(i) = 1
      end
    end
     
    %ou encore
     
     
    for i = 1:n,
    if ZONE(i)==2 then NB_MODES(i) = 2;
    else NB_MODES(i) = 1;
      end
    end
    NB_MODES

Discussions similaires

  1. [PHP 5.1] Problème avec une boucle FOR ( Undefined )
    Par Dearth dans le forum Langage
    Réponses: 27
    Dernier message: 26/09/2010, 18h30
  2. Problème avec une boucle for
    Par nostalamigo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/03/2009, 23h26
  3. Réponses: 6
    Dernier message: 26/11/2007, 15h25
  4. problème avec une boucle For
    Par mademoizel dans le forum ASP
    Réponses: 3
    Dernier message: 24/03/2007, 13h20
  5. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 16h50

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