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 :

utilisation du switch dans une fonction


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut utilisation du switch dans une fonction
    rebonjour c'est encore moi,

    J'essaye de m'initier à la création et à l'utilisation de function, pour alléger mes codes.

    J'ai créer une fonction qui à partir d'une date donnée dans le programme principale calcule la succession de dates toutes les 15 minutes. Le nombres de dates calculées est données par la taille d'une matrice définie dans le programme principale.

    Le code de ma fonction fonctionne parfaitement quand il est directement inséré dans le programme principale, mais lorsqu'il est sous forme de fonction j'obtiens le message d'erreur suivant :

    ??? Function 'eq' is not defined for values of class 'cell'.

    Error in ==> eq at 18
    [varargout{1:nargout}] = builtin('eq', varargin{:});

    Error in ==> calculedate at 15
    case m=={1,3,5,7,8,10,12}

    Error in ==> temp2 at 16
    t=calculedate(date, s);
    Je suis persuadé qu'il ne faut pas grand chose pour régler se problème, j'ai essayé de remplacer les '{' par des '(' mais cela ne fonctionne pas.

    voici mon programme principal:
    Code programme principal : 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
    clear all
    close all
    clc
     
    X=[1:1:50];
    s=size(X);
     
    prompt={'date de début sous le format mm/dd/yyyy HH:MM'};
    title='toto à la plage';
    num_lines=1;
    def={'05/23/2000 23:45'};
    answer = inputdlg(prompt,title,num_lines,def);
     
    date=answer{1};
     
    t=calculdate(date, s);

    et ma function 'calculdate'
    Code calculdate.m : 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
    function t=calculdate(date, s)
     
    [y, m, d, H, M] = datevec(date);
     
    t={datestr(sprintf('%d-%d-%d %d:%d',m,d,y,H,M),'dd-mmm-yyyy HH:MM')};
     
    for i=2:(s(2)+1);
        M=M+15;
        t{i}=datestr(sprintf('%d-%d-%d %d:%d',m,d,y,H,M),'dd-mmm-yyyy HH:MM');
        if (M==60)
            H=H+1;
            if (H==24)
                d=d+1;
                switch m
                    case m=={1,3,5,7,8,10,12}
                        if (d==31)
                            m=m+1;
                        end
                    case m=={4,6,9,11}
                        if (d==30)
                            m=m+1;
                        end
                    case m==2
     
                            if y=={1996,2000,2004,2008,2012,2016}
                                if (d==29)
                                    m=m+1;
                                end
                            else
                                if(d==28)
                                    m=m+1;
                                end
                            end
                end
                if (m==12);
                    y=y+1;
                end
            end
        end
    end

  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 828
    Points
    14 828
    Par défaut
    Juste une petite erreur dans l'utilisation de switch case : tu ne dois pas réperter dans le case le m=.
    Tu fais simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    switch m
     case {1,3,5,7,8,10,12}
    Ce qui signifie cas où m est l'une des valeurs contenue dans le tableau de cellules.
    Et quand il n'y a qu'une seule valeur :

  3. #3
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut
    Effectivement ça fonctionne bien mieux, merci caro.

    Toute fois il reste un leger problème, une sorte de cas particulier, quand la serie commence à 23h45 la fonction se trompe sur la 3ème valeur ce qui entraine un décalage d'un jour et une heure :

    Columns 1 through 4

    '28-May-2000 23:45' '29-May-2000 00:00' '30-May-2000 01:15' '30-May-2000 01:30'

    Columns 5 through 8

    '30-May-2000 01:45' '30-May-2000 02:00' '30-May-2000 02:15' '30-May-2000 02:30'
    à quoi cela peut il être du ?

Discussions similaires

  1. Utiliser un string dans une fonction de setInterval
    Par strat0 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 02/08/2007, 17h56
  2. [SQL SERVER 2005] Utilisation de Exec dans une fonction ?
    Par Dadou74 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 22h09
  3. Utilisation de fstream dans une fonction
    Par Silverstone dans le forum SL & STL
    Réponses: 7
    Dernier message: 22/07/2006, 09h55
  4. utilisation de getdate() dans une fonction ?
    Par devdev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/03/2005, 17h40
  5. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12

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