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 :

difficulté à afficher une seule matrice pour plusieurs cas possibles


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut difficulté à afficher une seule matrice pour plusieurs cas possibles
    Bonjour,

    Voila je dois effectuer un programme sur matlab et dans mon programme, je ne sais pas comment afficher un SEUL résultat. 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
    a=[7 2 8 4 6 5 3 9 1;4 3 1 9 8 7 5 2 6;6 5 9 1 2 3 4 8 7;1 8 5 2 7 4 6 3 9;9 6 2 3 5 8 1 7 4;3 4 7 6 9 1 8 5 2;5 7 6 8 4 2 9 1 3;2 1 4 5 3 9 7 6 8;8 9 3 7 1 6 2 4 5]
    r=randi(3,1,1),
    for r=1:3,
       if r==1,
          Y=rot90(a);
     
       elseif r==2,
          W=rot90(rot90(a));
     
       elseif r==3,
          Z=rot90(rot90(rot90(a)));
     
       end
    end
    je voudrais qu'il affiche la nouvelle matrice si r=1 ou si r=2 etc .. parce que quand j'ai mis des disp pour chaque cas, et bien quelque soit le r choisi il me montre les 3 matrices au final donc voila j'aurai besoin de votre aide pour n'en afficher qu'une seule merci

  2. #2
    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 830
    Points
    14 830
    Par défaut

    Tu fais une boucle donc c'est logique qu'il affihce pour r=1 puis 2 puis 3.

    Pourquoi d'ailleurs faire une boucle avec 3 IF derrière ?


    Aaaaaaaaah, compris.

    Tu définis r 2 fois, seule la seconde fois (for r=1:3) est prise en compte.

    Donc je ne sais pas ce que tu cherches à faire mais en tout cas tu n'utilises pas du tout comme il faut ni la boucle FOR ni la fonction RANDI (as-tu réellement compris ce qu'elle fait ?)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    ben randi ca sert a choisir aleatoirement un nombre compris entre 1 et 3 ici et c'est ce que je veux. ce que je veux essayer de programmer, c'est si grace au randi r =1 alors il fait telle rotation, si avec randi r=2 als il fait ceci et si r =3 avec rendu alors il fait ca et je voudrais afficher uniquement cette solution tu comprend ? alors comment je pourrais faire si tu me dis que je ne dois pas utiliser la boucle for ? ...

  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 830
    Points
    14 830
    Par défaut
    Alors relis l'aide de RANDI, ou au moins teste-la et tu verras ce qu'elle te retourne.

    Ceci dit avec ton code tu devrais le voir (à mon avis ça retourne toujours 1 ou 3 je ne suis pas trop sure non plus de bien comprendre la doc en anglais )

    r = randi(s,imax,n) returns an n-by-n matrix containing pseudorandom integer values drawn from the discrete uniform distribution on 1:imax. randi draws those values from the random stream s.
    Je te pose plutôt la question : pourquoi fais-tu une boucle ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    J'ai deja teste le randi ca marche comme je te le dis, mais je sais pas je suis pas tres bon en programmation mais c'est un devoir que je dois faire ( je suis en spé) donc ben je ne vois pas comment faire autrement qu'avec une boucle enfin je sais pas ...

    Je dois générer des grilles aleatoires de sudoku et donc ceci c'est un cas parmi 3 autres en fait mais il correspond a des rotations de ma matrice que jai nommé a mais je voudrais que suivant la valeur de r que lui donne le randi ( 1, 2 ou 3) et bien il maffiche la nouvelle grille voila c'est aussi simple que cela

  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 830
    Points
    14 830
    Par défaut
    Et bien teste sans la boucle et tu verras


    Et sinon un test tout simple pour que tu comprennes pourquoi ton programme est faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    r=565,
    for r=1:3
       disp(r)
    end

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    donc j'enleve le for elseif et je laisse tel quel ? et ca devrait marcher ?

    je ne crois pas que tu aies compris ce que j'ai voulu dire ou faire mais ce nest pas grave merci quand meme parce que sans la boucle for ben je n'obtiens pas ce que je recherche! quelqu'un dautre pour m'aider siouplé ?

  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 830
    Points
    14 830
    Par défaut
    Montre :
    - ce que tu as fait

    - ce que tu as obtenu

    - ce que tu souhaites obtenir


    Et je persiste à dire que RANDI ne fait pas ce que tu souhaites (retourner au hasard 1 2 ou 3) mais bon n'ayant pas MATLAB je ne peux tester pour te le démontrer.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    et bien j'ai matlab et quand je lance randi j'obtiens ceci : >> randi(4,1,1)

    ans =

    4

    >> randi(4,1,1)

    ans =

    4

    >> randi(4,1,1)

    ans =

    1

    >> randi(4,1,1)

    ans =

    4

    >> randi(4,1,1)

    ans =

    3

    >> randi(4,1,1)

    ans =

    1

    >> randi(4,1,1)

    ans =

    2
    Donc tu vois bien que cela choisit aléatoirement un seul chiffre entre 1 et 4 à chaque fois ^^
    donc mon programme c'est celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    a=[7 2 8 4 6 5 3 9 1;4 3 1 9 8 7 5 2 6;6 5 9 1 2 3 4 8 7;1 8 5 2 7 4 6 3 9;9 6 2 3 5 8 1 7 4;3 4 7 6 9 1 8 5 2;5 7 6 8 4 2 9 1 3;2 1 4 5 3 9 7 6 8;8 9 3 7 1 6 2 4 5]
    r=randi(3,1,1),
    for r=1:3,
    if r==1 
        Y=rot90(a);
    disp(Y);
    elseif r==2,
    W=rot90(rot90(a));
    disp(W);
    else r==3,
    Z=rot90(rot90(rot90(a)));
    disp(Z);
    end
    end
    et j'obtiens ceci :
    a =

    7 2 8 4 6 5 3 9 1
    4 3 1 9 8 7 5 2 6
    6 5 9 1 2 3 4 8 7
    1 8 5 2 7 4 6 3 9
    9 6 2 3 5 8 1 7 4
    3 4 7 6 9 1 8 5 2
    5 7 6 8 4 2 9 1 3
    2 1 4 5 3 9 7 6 8
    8 9 3 7 1 6 2 4 5


    r =

    1

    1 6 7 9 4 2 3 8 5
    9 2 8 3 7 5 1 6 4
    3 5 4 6 1 8 9 7 2
    5 7 3 4 8 1 2 9 6
    6 8 2 7 5 9 4 3 1
    4 9 1 2 3 6 8 5 7
    8 1 9 5 2 7 6 4 3
    2 3 5 8 6 4 7 1 9
    7 4 6 1 9 3 5 2 8

    5 4 2 6 1 7 3 9 8
    8 6 7 9 3 5 4 1 2
    3 1 9 2 4 8 6 7 5
    2 5 8 1 9 6 7 4 3
    4 7 1 8 5 3 2 6 9
    9 3 6 4 7 2 5 8 1
    7 8 4 3 2 1 9 5 6
    6 2 5 7 8 9 1 3 4
    1 9 3 5 6 4 8 2 7


    ans =

    1

    8 2 5 3 9 1 6 4 7
    9 1 7 4 6 8 5 3 2
    3 4 6 7 2 5 9 1 8
    7 5 8 6 3 2 1 9 4
    1 3 4 9 5 7 2 8 6
    6 9 2 1 8 4 3 7 5
    2 7 9 8 1 6 4 5 3
    4 6 1 5 7 3 8 2 9
    5 8 3 2 4 9 7 6 1
    EN GROS, il m'affiche r=1 mais aussi les 3 nouvelles matrices avec les 3 rotations. Or je voudrais n'avoir qu'une seule nouvelle matrice d'afficher. EN locurrence, ici r=1 donc je voudrais avoir seulement la matrice qui est associée à r=1. C'est bon ?

  10. #10
    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 830
    Points
    14 830
    Par défaut
    Mais pourquoi n'as-tu pas enlevé la boucle ?

    Il est pourtant clair mon petit exemple.
    Ta variable r est écrasée par le for r=1:3 qui fait ce qu'on lui dit de faire c'est-à-cire :
    r=1 puis r=2 puis r=3

    Pose toi vraiment la question de savoir pourquoi tu veux utiliser une boucle alors que tu n'en as manifestement pas besoin (ce n'est même pas un problème MATLAB mais un problème d'algorithmique)


    Pour RANDI : ok je m'incline, donc c'est bien que je n'ai rien compris à la documentation

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Oui mais si je retire le for, comment lui dire que si r=1 alors il faut faire ça, si r=2 alors c'est ceci ... désolé je suis vraiment pas très bon

  12. #12
    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 830
    Points
    14 830
    Par défaut
    Ben avec les IF

    Alors exemple bête :
    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
    for r =1:2
       if r==1
          disp(r);
       elseif r==2
          disp(r);
       end
    end
     
     
    r=1;
       if r==1
          disp(r);
       elseif r==2
          disp(r);
       end

    Notes :
    Il peut être plus avantageux d'utiliser SWITCH plutôt que plein de IF.
    Merci d'indenter ton code (dans l'éditeur MATLAB CTRL+A puis CTRL+I) et d'utiliser les balises code (le bouton # là au-dessus)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Ah c'est bon j'ai trouvé !! Regarde ! ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a=[7 2 8 4 6 5 3 9 1;4 3 1 9 8 7 5 2 6;6 5 9 1 2 3 4 8 7;1 8 5 2 7 4 6 3 9;9 6 2 3 5 8 1 7 4;3 4 7 6 9 1 8 5 2;5 7 6 8 4 2 9 1 3;2 1 4 5 3 9 7 6 8;8 9 3 7 1 6 2 4 5]
    for r=randi(3,1,1),
    if r==1 
        Y=rot90(a);
    disp(Y);
    elseif r==2,
    W=rot90(rot90(a));
    disp(W);
    else r==3,
    Z=rot90(rot90(rot90(a)));
    disp(Z);
    end
    end
    Et là cela fonctionne ! Je te remercie ! Mais ne crois pas t'être débarasser de moi J'ai encore 3 cas où j'ai un peu de mal pour générer encore d'autres grilles de sudoku je vais les poster dans un autre sujet de discussion ou à la suite de celui là. Je les posterai dans la soirée

  14. #14
    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 830
    Points
    14 830
    Par défaut
    Oui mais c'est stupide

    Tu as compris le principe du FOR ?

    Tu as testé mes petites morceaux de code ?

    est exactement identique (au END près à enlever) à :
    Tu fais une boucle sur UNE valeur....

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Ben c'est peut-être débile mais ça marche ...

  16. #16
    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 830
    Points
    14 830
    Par défaut
    Et quelle est la différence avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    a=[7 2 8 4 6 5 3 9 1;4 3 1 9 8 7 5 2 6;6 5 9 1 2 3 4 8 7;1 8 5 2 7 4 6 3 9;9 6 2 3 5 8 1 7 4;3 4 7 6 9 1 8 5 2;5 7 6 8 4 2 9 1 3;2 1 4 5 3 9 7 6 8;8 9 3 7 1 6 2 4 5]
    r=randi(3,1,1),
    if r==1 
        Y=rot90(a);
        disp(Y);
    elseif r==2,
       W=rot90(rot90(a));
       disp(W);
    else r==3,
       Z=rot90(rot90(rot90(a)));
       disp(Z);
    end
    Et en plus joli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    a=[7 2 8 4 6 5 3 9 1;4 3 1 9 8 7 5 2 6;6 5 9 1 2 3 4 8 7;1 8 5 2 7 4 6 3 9;9 6 2 3 5 8 1 7 4;3 4 7 6 9 1 8 5 2;5 7 6 8 4 2 9 1 3;2 1 4 5 3 9 7 6 8;8 9 3 7 1 6 2 4 5]
    switch randi(3,1,1),
    case 1 
        res=rot90(a);
    case 2,
       res=rot90(rot90(a));
    case 3,
       res=rot90(rot90(rot90(a)));
    end
    disp(res)

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    oui c'est la même chose lol ben à l'école on utilise plus souvent la boucle for que la boucle switch donc voila c'est tout

  18. #18
    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 830
    Points
    14 830
    Par défaut
    Bon je sais que le prof d'info en prépa c'est souvent le prof de math ou de physique et qu'il n'y connait donc pas grand-chose mais quand même il faut savoir faire la différence entre une boucle (FOR) et une instruction (IF, SWITCH) : ça n'a rien à voir !

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 42
    Points : 16
    Points
    16
    Par défaut
    Ah mais t(inquiètes, je suis dans une école d'ingénieur donc mon prof de tp ou d'algorithme est un vrai de vrai mais c'est moi qui ne suit juste pas encore à l'aise avec tout ce langage mais si je commence à maîtriser. Mais ce n'est qu'un début

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

Discussions similaires

  1. Une seule CSS pour plusieurs portlets
    Par sheepolata dans le forum Portails
    Réponses: 3
    Dernier message: 02/03/2010, 16h51
  2. [Joomla!] Une seule bdd pour plusieurs sites
    Par Imp rusg dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 23/02/2009, 09h16
  3. Réponses: 2
    Dernier message: 10/07/2007, 13h45
  4. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  5. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 14h41

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