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 :

Les variables globales et locales dans les fonctions [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut Les variables globales et locales dans les fonctions
    Bonjour,
    1- à propos la manipulation des variables globales depuis l’intérieur d'une fonction on peut le faire que si seulement ça passe comme l'un des paramètres de la fonction ?
    2- si on veut créer une variable dans le workspace depuis une fonction, cette dernière elle doit figurer comme variable de retour de la fonction ?

    Merci d'avance.
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  2. #2
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    Citation Envoyé par zakimadrid Voir le message
    1- à propos la manipulation des variables globales depuis l’intérieur d'une fonction on peut le faire que si seulement ça passe comme l'un des paramètres de la fonction ?
    bein non ... c'est justement une des particularités des variables globales, il n'y a pas à les faire passer par les paramètres
    (il faut par contre bien les déclarer avec le préfixe global partout ou tu les utilises)

    sinon en général on évite les variables globales

    Citation Envoyé par zakimadrid Voir le message
    2- si on veut créer une variable dans le workspace depuis une fonction, cette dernière elle doit figurer comme variable de retour de la fonction ?
    oui si la fonction est appelé depuis un script
    non si elle est appelée depuis une fonction (dans ce cas la variable sera créer dans le workspace de la fonction appelante)
    dans ce deuxième cas si tu veux absolument la créer dans le workspace de base, tu peux utiliser assignin

  3. #3
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par le fab Voir le message
    salut


    bein non ... c'est justement une des particularités des variables globales, il n'y a pas à les faire passer par les paramètres
    (il faut par contre bien les déclarer avec le préfixe global partout ou tu les utilises)

    sinon en général on évite les variables globales


    oui si la fonction est appelé depuis un script
    non si elle est appelée depuis une fonction (dans ce cas la variable sera créer dans le workspace de la fonction appelante)
    dans ce deuxième cas si tu veux absolument la créer dans le workspace de base, tu peux utiliser assignin
    Voila ce que je veux faire :

    Mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    global img imgG histogramme
    img = imread('C:\Users\Zicou\Desktop\Lenna.png');
    imgG= rgb2gray(img);
    histogramme = imhist(imgG);
    dimension = 4;
    solution = [26 29 31 35];
    Kapur(dimension,solution);
    et la fonction :

    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
     
    function Fit = Kapur(dimension,solution)
    j= 1;
    tailleImage = size(img);
    nombrePixels = tailleImage(1)*tailleImage(2);
    vecteurProbabilities = zeros(1,256);
    W = zeros(1,dimension+1);
    for i = 1:256 %Calcul des probabilités%
        vecteurProbabilities(i) = histogramme(i)/nombrePixels;
    end
    for i = 1:256
        if(j < dimension)
     
            if(histogramme(i) < solution(j))
                W(j)= W(j) + vecteurProbabilities(i);
                disp('a');
            elseif(histogramme(i) >= solution(j)) && (histogramme(i) < solution(j+1))
     
                W(j+1) = W(j+1)+vecteurProbabilities(i);
                j = j+1;
                disp('b');
     
            end
        else
            W(j+1) = W(j+1) + vecteurProbabilities(i);
            disp('c');
        end
    end
    end
    l'erreur :
    Undefined function or variable 'img'.

    Error in Kapur (line 3)
    tailleImage = size(getglobal(img));

    Error in Untitled (line 7)
    Kapur(dimension,solution);

    je sais très bien que les variables globales sont à éviter, mais vue que je suis débutant sur MATLAB...
    sinon y a t-il un moyen de ne pas utiliser des variables globales sans devoir les passer en paramètres ?
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur en science de l'environnement
    Inscrit en
    Août 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur en science de l'environnement

    Informations forums :
    Inscription : Août 2013
    Messages : 97
    Points : 149
    Points
    149
    Par défaut
    Ta fonction traite ton image, je pense donc que c'est normal que l'image soit un des input de ta fonction

    Ou si tu as trop d'input et que ça devient trop brouillon, trop bordélique, tu peux toujours envoyer une structure dans ta fonction.

    moninput.IMG = IMG
    moninput.histo = histogramme
    etc...

  5. #5
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    désolé je vous ai pas compris à propos la structure si c'est possible une documentation ou plus d'explications ?
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  6. #6
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,
    Citation Envoyé par zakimadrid Voir le message
    je sais très bien que les variables globales sont à éviter, mais vue que je suis débutant sur MATLAB...
    C'est justement parce que tu es débutant qu'il faut éviter les variables globales! Prends des bonnes habitudes dès maintenant, et dans ton cas, ce sera plus rapide et efficace, il n'y a aucune raison à ne pas mettre l'image en entrée de la fonction.

    Pour les structures, un début d'explications; http://matlab.developpez.com/faq/?page=structure
    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.

  7. #7
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    j'ai juste aimer alléger le nombre de paramètres vu que la fonction n'est pas encore finalisée et j'ajouterai probablement d'autres paramètres.
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  8. #8
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    Ce que tu crois simplifier maintenant va te compliquer la vie plus tard. Si vraiment cela pose un problème, tu peux regrouper tes paramètres dans des structures comme indiquée par petchi.
    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.

  9. #9
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    Merci l'équipe.
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

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

Discussions similaires

  1. text, ntext et image sont interdits dans les variables locales
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/07/2013, 15h44
  2. Réponses: 4
    Dernier message: 18/09/2011, 14h50
  3. Réponses: 2
    Dernier message: 11/05/2010, 14h18
  4. Réponses: 15
    Dernier message: 15/04/2008, 14h25
  5. Réponses: 1
    Dernier message: 19/11/2006, 16h47

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