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

C# Discussion :

Tableaux de fonctions


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 45
    Par défaut Tableaux de fonctions
    Bonjour à tous,

    voila j'ai créés 4 fonctions sous la forme f(x,y,z,t) f1,f2,f3,f4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      public static Double f1(double V, double gamma, double h, double r, double t)
            { return -CD / 2 * rho * V * V * S / mass - g * Math.Sin(gamma); }
     
            public static Double f2(double V, double gamma, double h, double r, double t)
            { return 1 / V * (1 / (2 * mass) * rho * V * V * S * CL - g * Math.Cos(gamma)); }
     
            public static Double f3(double V, double gamma, double h, double r, double t)
            { return V * Math.Sin(gamma); }
     
            public static Double f4(double V, double gamma, double h, double r, double t)
            { return V * Math.Cos(gamma);
    et j'aurais besoin enfait de les appeler dans une boucle, genre f_i avec i de 1 à 4. Pour cela j'ai pensé à les réunir dans une matrice F pour pouvoir appeler F(i).

    Mais question, est il possible de définir cette matrice, et de l'utiliser comme par exemple F(i)(V,gamma,h,r) avec i de 0 à 3 ? Toujours dans le but d'utiliser mes différentes fonctions dans une boucle for

    En vous remerciant,

    Cordialement,

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 45
    Par défaut
    Bon on va dire que avec ca ca passe, c'est pas super générique mais bon...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            public static Double F(int i,double x1, double x2, double x3, double x4,double t)
                {
                    if (i == 1) { return f1(x1, x2, x3, x4, t); }
                    if (i == 2) { return f2(x1, x2, x3, x4, t); }
                    if (i ==3) { return f3(x1, x2, x3, x4, t); }
                    if (i == 4) { return f4(x1, x2, x3, x4, t); }
                            }

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    C'est mon jour de bonté Imagine que ta classe dans laquelle sont définies tes fonctions s'appelle MyClass :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MyClass {
        public static Double f1(double V, double gamma, double h, double r, double t)
        { return -CD / 2 * rho * V * V * S / mass - g * Math.Sin(gamma); }
     
        public static Double f2(double V, double gamma, double h, double r, double t)
        { return 1 / V * (1 / (2 * mass) * rho * V * V * S * CL - g * Math.Cos(gamma)); }
     
        public static Double f3(double V, double gamma, double h, double r, double t)
        { return V * Math.Sin(gamma); }
     
        public static Double f4(double V, double gamma, double h, double r, double t)
        { return V * Math.Cos(gamma); }
    }
    Imaginons ensuite que tu veuilles faire l'appel dynamique dans une classe qui s'appelle OtherClass :
    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
    public class OtherClass {
        // ...
     
        public void DummyMethod() {
            // Tu crées une instance de l'objet sur lequel tu veux appeler dynamiquement des méthodes
            MyClass myClass = new MyClass();
            MethodInfo currentMethodInfo = null;
            double currentDouble = 0.0;
            // Ta boucle qui simule un "f(i)"
            for (int i = 1; i < 5; i++) {
                // Tu récupères la méthode via son nom
                currentMethodInfo = typeof(MyClass).GetMethod("f" + i);
                // Tu l'éxécutes avec les bons paramètres et récupères le résultat
                currentDouble = (double)methodInfo.Invoke(myClass, new object[] { 1, 1, 1, 1, 1 });            
            }        
        }
    }
    Je te laisse fouiller dans la doc pour voir comment ça fonctionne réellement

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Par défaut
    Dans ton cas je ferais plutôt une seul fonction , je passerais i en parametres et je ferais un switch comme 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
     
    public static Double f(double V, double gamma, double h, double r, double t, int i)
    {
    Double result = 0;
    switch (i)
                {
                    case 1 : result = -CD / 2 * rho * V * V * S / mass - g * Math.Sin(gamma);
                    break;
                    case 2 : result = 1 / V * (1 / (2 * mass) * rho * V * V * S * CL - g * Math.Cos(gamma)); }
                     break;
    ///ect......
                }
    return result
    }
    L'autre solution est d'utiliser la reflection, mais ce procédé est un peu plus complexe.

    bonne continuation a+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 45
    Par défaut
    Merci à tous pour toutes ces réponses, que je vais tester sans trainer !

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

Discussions similaires

  1. [Tableaux] Des fonctions SVG
    Par atito dans le forum Langage
    Réponses: 2
    Dernier message: 16/07/2007, 19h11
  2. Réponses: 8
    Dernier message: 12/03/2007, 16h56
  3. [Tableaux] Similitude fonctions de fichiers et de tableaux
    Par beejeridou dans le forum Langage
    Réponses: 2
    Dernier message: 04/02/2007, 15h46
  4. [Tableaux] simplifier fonction str_replace
    Par nicerico dans le forum Langage
    Réponses: 7
    Dernier message: 04/12/2006, 15h45
  5. Réponses: 11
    Dernier message: 04/07/2006, 14h33

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