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

  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

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 116
    Par défaut
    Merci pour toutes vos réponses .

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 116
    Par défaut
    Ça ne veut toujours pas, à croire que le sort s'acharne.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ZONE = floor(rand(1,200)*5+2)
     
    n=200;
    NB_MODES = zeros(n, 1);
     
    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
    Cela produit encore n'importe quoi et avec des ; rien ne s'affiche.

  10. #10
    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
    Qu'est ce qui ne fonctionne pas ? Le code que tu as testé ou le résultat qui ne correspond pas à ce que tu attends ?

    Ce qui est bizarre dans ton code c'est que tu remplaces les variables de ton tableau égale à 2 par... des valeurs comprisent entre 1 et 3.

    Et les valeurs non égales à 2, tu les remplaces par des valeurs comprisent entre 1 et 4.

    En gros, tu ne fais pas vraiment de tri... Autant utiliser directement un rand sur ton NB_MODES, tu auras le même résultat.

    Qu'est ce que tu cherches à faire exactement avec ce code ?

    sinon, c'est normal que les ; enlève l'affichage à l'écran.

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2010
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 116
    Par défaut
    En fait j'ai un tableau ZONE où je stocke la zone de transport de l'étudiant (zone 2,3,4,5 ou 6) générée aléatoirement (car on veut avoir un échantillon représentatif). A partir de ce tableau je dois générer un tableau NB_MODES qui détermine le nombre de modes de transport utilisés par l'etudiant. Et on a défini le fait que si l'étudiant était de la zone 2, il n'utilisait pas plus de 3 modes de transport différent (d'où mon test). Et ce tableau NB_MODES doit avoir aussi des valeurs générées aléatoirement.

  12. #12
    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
    Donc, ton dernier code fonctionne, non?

    Utilise les ";" pour ne pas afficher le tableau NB_MODES à chaque itération, et à la fin, visualise ton tableau NB_MODES pour vérifier qu'il est rempli avec des valeurs qui te semblent cohérentes.
    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.

  13. #13
    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
    Donc, ton dernier code fonctionne, non?

    Utilise les ";" pour ne pas afficher le tableau NB_MODES à chaque itération, et à la fin, visualise ton tableau NB_MODES pour vérifier qu'il est rempli avec des valeurs qui te semblent cohérentes.
    Ok ça marche nikel alors .

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, 19h30
  2. Problème avec une boucle for
    Par nostalamigo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/03/2009, 00h26
  3. Réponses: 6
    Dernier message: 26/11/2007, 16h25
  4. problème avec une boucle For
    Par mademoizel dans le forum ASP
    Réponses: 3
    Dernier message: 24/03/2007, 14h20
  5. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 17h50

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