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 :

fonction en c++


Sujet :

C++

  1. #21
    Débutant
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 71
    Points : 0
    Points
    0
    Par défaut
    Ok, l'erreur de syntaxe est enfin corrigée. Merci beaucoup, je ne voyais pas que j'avais oublié le s.
    Maintenant mon code est:
    le fichier.h
    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
     
    #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);  
    };
    fichier.cpp

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    #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(s)/w)+(kro(s)/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)=fw(1,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 w=1;
     
    vecteur S(3);
    S[0]=1;
    S[1]=10;
    S[2]=12;
     
    vecteur G(3);
    G= G.F(S,u,w);
    F[0]=fw(S[0]);
    F[1]=fw(S[1]);
    F[2]=fw(S[0]);
    for(int i=0;i<3;i++)
    cout<<G[i]<<endl;
    }
    Ensuite, j'utilise ce G pour faire le calcul. Vous trouvez que c'est une bonne idée? Et surtout est-ce qu'elle est correcte?
    Je vous remercie par avance.

  2. #22
    Débutant
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 71
    Points : 0
    Points
    0
    Par défaut
    Voici mon programme. Dites moi ce que vous en pensez s'il vous plaît, il tourne bien mais dites moi si l'algorithme est bon et si tout est correct s'il vous plaît. Je vous remercie par avance.
    fichier.h

    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
     
    #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 +
      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);
      vecteur decg(const vecteur&);   
    };
    fichier.cpp

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
     
    #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 - (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(s)/w)+(kro(s)/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;
    }
     
    //Définition de la fonction décalée à gauche
    vecteur vecteur:: decg(const vecteur &S)
    {
    v[0]=S.v [N-1];
    for(int i=1;i<N;i++)
    v[ i]=S.v[ i-1];
    return *this;
    }
     
     
     
     
     
    int main()
    {
    int N=99;
    int M=99;
    double u=1.;
    double w=1.;
    double qT=1.;
    double phi=0.2;
    double L=1000.;
    double T=3860.;
    double delta=T/(M+1);
    double h=L/(N+1);
     
     
     
    vecteur S(N), S3(N);
    double S1, S2;
    S[0]=1;
    vecteur San(N);
    San[0]=1;
    vecteur G(N);
    vecteur Gg(N);
     
     
    for(int n=0; n<M; n++)
    {
    G=G.F(San,u,w);
    Gg=Gg.decg(San);
    S1= qT/phi;
    S2= delta/h;
    S3= (G-Gg)*S2;
    S=San-S3*S1;
    S[0]=1;
    //S=San -(qT/phi) * (delta/h)*(G-Gg);
    San=S;
    }
     
     
     
     
    ofstream fichier("resultat.dat", ios :: out | ios :: trunc);  // ouverture en écriture avec effacement du fichier ouvert
    for(int i=0;i<=N;i++)
    fichier<< i*h<<" "<<S[ i]<<endl;  
     
     
     
     
     
     
    //vecteur S(3);
    //S[0]=1;
    //S[1]=10;
    //S[2]=12;
    //vecteur G(3);
    //G=G.F(S,u,w);
    //for (int i=0;i<3;i++)
    //cout<<G[i]<<endl;
     
    }

  3. #23
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Regarde le message où j'ai réécrit ton vecteur.

    Tu y trouveras quantité de remarques qui s'appliquent toujours.
    Et puis, fais deux cpp.
    l'un pour la définition du vecteur, l'autre pour main et les fonctions du problème mathématique (f, fw, krw, kro...)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #24
    Débutant
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 71
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    et sur l'algorithme utilisé, vous avez des remarque? Surout pour le calcul de S à la fin.
    J'aimerai d'abord corrigé mon programme, puis voir d'autres façons de l'écrire. Je vous remercie par avance.

  5. #25
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, une bonne manière d'écrire rendra triviale la correction de l'algorithme.

    En l'état, ce que tu as écris ne semble pas te permettre de dire si ton algorithme est correct.
    Et puis choisis donc des noms de variables plus expressifs.

    L'idée sous-jacente, c'est que si ton code n'est pas assez clair pour un humain, il n'est pas possible de savoir s'il traduit correctement la volontée du développeur. C'est à dire, si le compilateur le comprendra correctement.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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