fonction en c++
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

fonction en c++



  1. #1
    invitea7d8195d

    fonction en c++


    ------

    Bonjour,
    je souhaite implémenter dans un programme C++, trois fonctions d'une variable S de type double:
    , , et
    où u et v sont des constantes.
    pour ca, je cherche un exemple d'implémentation, par exemple pour g1. Il faut deux choses:
    1- écrire le prototype de la fonction: double g1 (double S);
    2- écrire l'implémentation
    Code:
    double g1(double S)
    {
    pow(S,2);
    
    }
    mon souci est comment l'appeler pour l'utiliser dans la définition de la fonction f?
    Je vous remercie par avance.

    -----

  2. #2
    Paraboloide_Hyperbolique

    Re : fonction en c++

    Bonsoir,

    C'est tout bête (et en plus vous l'avez déjà fait avec une fonction à deux arguments quand vous avez défini votre fonction g1! *):

    Code:
    double f(double S)
    {
    return g1(S)/u*(...); // "..." = à compléter par vos soins.
    }
    *Fonction g1 à laquelle il manque un "return" cependant.

  3. #3
    invitea7d8195d

    Re : fonction en c++

    En fait, je cherche un faire un programme en C++ pour calculer

    pour $n$ allant de 0 à M, et $i$ allant de 0 à N.
    En sachant que pour tout i, et pour tout n.
    ($\alpha$ est une constante), et f est définie dans mon premier post.
    Là je suis perdue, est-ce que je construit un vecteur ? ou bien je déclare une fonction f et je change à chaque fois l'attribut? Proposez moi une bonne idée s'il vous plaît.
    Je vous remercie par avance.

  4. #4
    imoca

    Re : fonction en c++

    Bonjour,

    Citation Envoyé par mimi-mimi1 Voir le message
    En sachant que pour tout i, et pour tout n.
    Et pour n=i=0?

    Code:
    double S(int n, int i)
    {
    if(n==0){
           return 0;
    }
    else{
          if(i==0){
                return 1;
          }
          else{
                double r=S(n-1,i);
                return r+alpha*(f(r)-f(S(n,i-1)));
          }
    }
    }

  5. A voir en vidéo sur Futura
  6. #5
    invitea7d8195d

    Re : fonction en c++

    Je ne comprend pas très bien ce que tu as défini. S est cencé être un vecteur. C'est quoi ton idée? S'il te plaît.

  7. #6
    imoca

    Re : fonction en c++

    S est censé être un double(cf le poste 1).

    Le programme effectue des appels récursifs.

  8. #7
    invitea7d8195d

    Re : fonction en c++

    En fait, ce que l'on doit calculer, c'est
    avec i allant de 0 à N-1, et n allant de 0 à M-1, en sachant que S^0_i = 0 pour tout i, et S^n_0=1 pour tout n, et la fonction f est celle de mon premier post. Je suis bloquée sur la stratégie à utiliser pour ce calcul, je souhaite éviter de faire deux boucles (une sur n et l'autre sur i). Comment faire? S'il vous plaît.
    Je vous remercie par avance.

  9. #8
    imoca

    Re : fonction en c++

    Citation Envoyé par mimi-mimi1 Voir le message
    En fait, ce que l'on doit calculer, c'est
    avec i allant de 0 à N-1, et n allant de 0 à M-1, en sachant que S^0_i = 0 pour tout i, et S^n_0=1 pour tout n, et la fonction f est celle de mon premier post. Je suis bloquée sur la stratégie à utiliser pour ce calcul, je souhaite éviter de faire deux boucles (une sur n et l'autre sur i). Comment faire? S'il vous plaît.
    Je vous remercie par avance.
    1/ Pour i=n=0

    2/ Ici n'est pas une puissance sinon pour i>0,.

    3/ On doit calculer N*M valeurs de suite ayant 2 indices. La fonction précédemment écrite procède par récurrence.
    Code:
    double S(int n, int i)
    {
    if(n==0){
           return 0;
    }
    else{
          if(i==0){
                return 1;
          }
          else{
                double r=S(n-1,i);
                return r+alpha*(f(r)-f(S(n-1,i-1)));
          }
    }
    }
    4/ En optimisant le code, lorsque pour un couple (i,n) le S est calculé, celui-ci peut être stocké dans un matrice. Par la suite, la fonction cherchera en priorité dans la matrice si le résultat est présent. Ainsi on calcul chaque terme une et une seul fois.
    Alors une boucle sur i est suffisante pour remplir la matrice, en effet les engendrerons les appels récursifs pour tout les couples.

  10. #9
    invitea7d8195d

    Re : fonction en c++

    S'il te plaît, écris moi la classe que tu utilises dans ton programme, et ce que tu mets avant le main.
    Merci par avance.

  11. #10
    invitea7d8195d

    Re : fonction en c++

    Moi j'ai écris ca pour l'instant:
    fichier.h
    Code:
    #include<iostream>
    class vecteur
    {
     private:
      int N;//taille
      double *v;//pointer les composantes
     public:
     vecteur():v(NULL),N(0){};//Déclaration et définition du constructeur par défaut
      vecteur(int Nb=0, double val=0);//déclaration d'un constructeur avec argument
      vecteur(vecteur const& v);//déclaration d'un constructeur de copie
      ~vecteur();//déstructeur
      double& operator[](int rang);//Déclaration de l'opérateur[]
      vecteur& operator=(const vecteur&);//Déclaration de l'opérateur =
      vecteur operator * (double scalar); //Déclaration de l'opérateur *
      vecteur operator + (const vecteur&);//Déclaration de l'opérateur +
      void affiche();
      double krw(double s);
      double kro(double s);
      double f(double s); 
      vecteur F(const vecteur&, double, double);  
    };
    et fichier.cpp

    Code:
    #include <iostream>
    #include "exemple6.h"
    #include <cmath>
    #include <fstream>
    using namespace std;
    //Définition du constructeur de copie
    vecteur::vecteur(const vecteur& ref): N(ref.N)
    {
      v = new double[N];
      for(unsigned int i=0; i<N;i++)
        v[i]=ref.v[i];
    }
    
    //Définition du constructeur avec argument
    vecteur::vecteur(int Nb, double val)
    {
       N = Nb;
       if (Nb == 0)
          v = NULL; 
       else
       {
          v = new double[N];
          for (unsigned i=0; i<N; i++)
             v[i] = val;
       }
    }
    
    //Définition du destructeur
    vecteur::~vecteur()
    {}
    
    //Définition de []
    double& vecteur::operator[](int rang)
    {
      return v[rang]; 
    }
    
    //Définition de =
    
    vecteur &vecteur::operator=(const vecteur &a)
    {
      for(int i=0;i<N;i++)
        {
          v[i]=a.v[i];
        }
    return *this;
    }
    
    
    //Définition de +
    vecteur vecteur:: operator + (const vecteur &a)
    {
    vecteur d(N);
    for (int i=0;i<N;i++)
    d.v[i]=v[i]+a.v[i];
    return d;
    }
    
    //Définition de *
    vecteur vecteur:: operator*(double  d)
    {
    for(int i=0;i<N;i++)
    v[i]=d*v[i];
    return *this;
    }
    
    //Déclaration de la fonction affiche
    void vecteur::affiche()
    {
    //cout<<"les coordonnées du vecteurs v sont"<<endl;
    for(int i=0;i<N;i++)
    {
    cout<<v[i]<<endl;
    }
    cout<< "---fin---"<<endl;
    }
    
    
    //Définition de la fonction krw
    double krw(double s)
    {
    return pow(s,2);
    }
    
    //Définition de la fonction kro
    double kro(double s)
    {
    return pow((1-s),2);
    }
    
    //Définition de la fonction fw
    
    double fw (double s, double u, double w)
    {
    return (krw(s)/u)/ ((krw/w)+(kro/u));
    }
    
    
    // Définition d'un vecteur F à partir de fw
    vecteur vecteur ::F (const vecteur &S, double u, double w)
    {
       v[0]= fw(S.v[0],u,w);
       for(int i=1; i< N; i++)
      v[i]= fw(S.v[i], u, w);
    return *this;
    }
    
    
    
    int main()
    {
    int N=2;
    double u=1;
    double v=1;
    
    
    
    vecteur S(3);
    S[0]=1;
    S[1]=10;
    S[2]=12;
     
    vecteur G(3);
    
    
    }
    j'ai essayé de créer un vecteur à partir de la fonction f, mais je n'arrive pas à l'appeler dans le main, ca c'est le problème 1, et le problème 2 est qu'il m'affiche l'erreur suivante:
    In function ‘double fw(double, double, double)’:
    exemple6.cpp:95:26: error: invalid operands of types ‘double(double)’ and ‘double’ to binary ‘operator/’
    return (krw(s)/u)/ ((krw/w)+(kro/u));
    ^
    exemple6.cpp:95:34: error: invalid operands of types ‘double(double)’ and ‘double’ to binary ‘operator/’
    return (krw(s)/u)/ ((krw/w)+(kro/u));

    Comment arranger mon programme? Et pouvez vous s'il vous plaît, me dire ce que vous écrivez avant le main dans votre fichier. cpp et qu'est ce que vous mettez dans le .h?
    Je vous remercie par avance.

  12. #11
    imoca

    Re : fonction en c++

    Voici un code rapidement programmer (pas forcement sans bug!)


    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    double u=1;
    double v=1;
    double alpha=1;
    int M=4;
    int N=4;
    
    double g1(double s){
        return s*s;
    }
    double g2(double s){
        return (1-s)*(1-s);
    }
    double f(double s){
        return (g1(s)/u)/((g1(s)/u)+(g2(s)/v));
    }
    
    double S(int n, int i)
    {
        if(n==0){
            return 0;
        }
        else{
            if(i==0){
                return 1;
            }
            else{
                double r=S(n-1,i);
                return r+alpha*(f(r)-f(S(n-1,i-1)));
            }
        }
    }
    
    
    int main()
    {
        int i,n;
        for(i=0;i<M;i++){
            for(n=0;n<N;n++){
                printf("%d %d %f \n",n,i,S(n,i));
            }
        }
    }

  13. #12
    invitea7d8195d

    Re : fonction en c++

    Ce programme est en C, non? Moi je cherche un programme en C++. Où bien je me trompe et le tien est en c++, si oui, où est le .h? Stp

  14. #13
    imoca

    Re : fonction en c++

    Effectivement le programme est en c, il te suffit de modifier le printf en cout:

    A la place des includes:
    Code:
    #include <iostream>
    
    using namespace std;
    remplacer la ligne printf par
    Code:
    cout << n<<","<<i<<","<<S(n,i) << endl;
    puis compiler en c++

    Code complet
    Code:
    #include <iostream>
    
    using namespace std;
    
    double u=1;
    double v=1;
    double alpha=1;
    int M=4;
    int N=4;
    
    double g1(double s){
        return s*s;
    }
    double g2(double s){
        return (1-s)*(1-s);
    }
    double f(double s){
        return (g1(s)/u)/((g1(s)/u)+(g2(s)/v));
    }
    
    double S(int n, int i)
    {
        if(n==0){
            return 0;
        }
        else{
            if(i==0){
                return 1;
            }
            else{
                double r=S(n-1,i);
                return r+alpha*(f(r)-f(S(n-1,i-1)));
            }
        }
    }
    
    
    int main()
    {
        int i,n;
        for(i=0;i<M;i++){
            for(n=0;n<N;n++){
                cout << n<<","<<i<<","<<S(n,i) << endl;
            }
        }
    }

  15. #14
    bisou10

    Re : fonction en c++

    HERESIE !!

    Si le programme est en C++, c'est certainement parce que le prof le souhaite en objet

Discussions similaires

  1. Résolution d'une équation reliant une fonction fonction d'elle même
    Par invite3016febc dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 16/12/2013, 15h51
  2. la sortie d'une fonction soit un paramétre d'entrèe de la même fonction
    Par inviteb02396e9 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 28/07/2013, 20h25
  3. Dérivée d'une fonction composée avec racine carrée d'une fonction au dénominateur
    Par schrom007 dans le forum Mathématiques du supérieur
    Réponses: 11
    Dernier message: 08/08/2012, 17h43
  4. Maple, fonction Odeplot comment obtenir une couleur en fonction du temps ?
    Par invite8810fee1 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 28/11/2010, 21h05
  5. Comment insérer une fonction Matlab dans les paramètres d'entrée d'une autre fonction ??
    Par inviteac36b108 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 04/01/2010, 07h16