[C++] utiliser des classes dans mon code

utiliser des classes dans mon code [C++] - C++ - Programmation

Marsh Posté le 12-02-2014 à 14:40:50    

Bonjour  :hello:  :hello:
voilà j'ai commencé à coder ce programme qui "price" plusieurs types d'options (pour le moment seulement 2, je compte en rajouter plusieurs par la suite)
le programme marche bien (il me donne les bons prix)
en revanche j'aimerais le modifier légèrement pour qu'il fasse la meme chose mais en utilisant des classes :??:
or ca fait longtemps que je n'ai pas codé en C++ et je ne me rappel plus trop comment les inclure

 

j'ai pensé à un truc dans le genre :

 

class EuropeanOption {
 public :
   
  int maturity;
  double strike;
  double rate;
  double underlyingprice;
  double volatility;
 
};

 

et ensuite utiliser un pointeur ??

 

voilà le programme :

 

_______________________________________

 

#include<iostream>
#include<cstdlib>
#include<math.h>
using namespace std;

 

double maxi(double a, double b){
    return a>=b ? a : b;
   
}

 

int main (int argc, char * const argv[]){
    srand((unsigned)time(0));
    double T,K,S0,sigma,r;
    double calleu,puteu;
    double x,y,z,s;
    double meanc=0,meanp=0;
    double St[100000];
    double payoff[100000];
    int type=0;
    int i;
   
    cout << "quel type d'options voulez vous pricer ?" << endl;
    cout << "1 : call/put européen" << endl;
    cout << "2 : call/put digitale" << endl;
    cin >> type;
    if (type != 1 && type != 2){
        cout << "merci d'entrer une des propositions et pas n'importe quoi !" << endl;
        return 0;
    }
   
    cout << "entrez la valeur de T :" << endl;
    cin >> T;
    cout << "entrez la valeur de K :" << endl;
    cin >> K;
    cout << "entrez la valeur de S0 :" << endl;
    cin >> S0;
    cout << "entrez la valeur de sigma :" << endl;
    cin >> sigma;
    cout << "entrez la valeur de r :" << endl;
    cin >> r;
   
    if (type==1){
   
    for ( i=0 ; i<100000 ; i++ ){
        do{
            x=rand();
            y=rand();
            x=2*(x/RAND_MAX);
            y=2*(y/RAND_MAX);
            x=x-1;
            y=y-1;
            s=pow(x,2)+pow(y,2);
        }while (s > 1);
       
        z = x*sqrt((-2*log(s))/s);
       
        St[i] = S0*exp(((r-(sigma*sigma)/2))*T + sigma*sqrt(T)*z);
        payoff[i]= maxi((St[i]-K),0);
        meanc=meanc+payoff[i];
    }
    meanc=meanc/100000;
    calleu = exp(-r*T);
    calleu = calleu*meanc;
    puteu=calleu + K*(exp(-r*T))-S0;
   
        cout << "le call européen vaut :" << calleu << endl;
        cout << "le put européen vaut :" << puteu << endl;
       
    }
   
   
    else if (type==2){
        int nominal=0;
        int PayoffCallDig=0;
        int PayoffPutDig=0;
       
        cout << "entrez la valeur du nominal de l'option digitale :" << endl;
        cin >> nominal;
       
   
       
        for ( i=0 ; i<100000 ; i++ ){
            do{
                x=rand();
                y=rand();
                x=2*(x/RAND_MAX);
                y=2*(y/RAND_MAX);
                x=x-1;
                y=y-1;
                s=pow(x,2)+pow(y,2);
            }while (s > 1);
           
            z = x*sqrt((-2*log(s))/s);
           
            St[i] = S0*exp(((r-(sigma*sigma)/2))*T + sigma*sqrt(T)*z);
           
            if ( St[i] - K >= 0 ) {
                PayoffCallDig = nominal;
                PayoffPutDig = 0;
            }
           
            else {
                PayoffCallDig = 0 ;
                PayoffPutDig = nominal;
            }
            meanc=meanc+PayoffCallDig;
            meanp=meanp+PayoffPutDig;
        }
   
        meanc=meanc/100000;
        meanp=meanp/100000;
        meanc=meanc*exp(-r*T);
        meanp=meanp*exp(-r*T);
   
        cout << "le call digital vaut :" << meanc << endl;
        cout << "le put digital vaut :" << meanp << endl;
    }
   
       
return 0;
}

 

______________________________________

 

si quelqu'un peut me donner un coup de main, je lui en serai éternellement reconnaissant  [:poupou49:2]
thx  :jap:  :jap:


Message édité par HeisenberG75 le 12-02-2014 à 14:45:11
Reply

Marsh Posté le 12-02-2014 à 14:40:50   

Reply

Marsh Posté le 12-02-2014 à 14:53:55    

Bonjour,

 

Les classe en C++ c'est un peut différent des langage style C# ou Java

 

Tu as forcement 2 fichier :
MaClass.h
MaClass.cpp

 

Dans ton ficher .h tu as toutes tes déclaration de méthode et de variable.

 

Ex :

Code :
  1. #ifndef MaClass_H
  2. #define MaClass_H
  3. class MaClass
  4. {
  5.     public:
  6.     int MaPropriété;
  7.     void MaMéthode();
  8.     Private :
  9.      ect....
  10. };
  11. #endif
 

Pour ton fichier .cpp tu as juste a include MaClass.h

 

Et a utiliser tes méthodes et propriété que tu as créer dans MaClass.h

 

Et si tu veux utiliser ta classe autre part dans ton code tu doit également faire ton #include "MaClass.h" et faire si besoin tes héritage ( si utilisation dans une autres classe, sachant qu'une classe en c++ ne possède pas ( je crois ) de multi héritage )

 

Sinon tu veux plus d'information un tuto C++ objet pour voir comment on l'utilise et ça te reviendra vite ( l'objet reste de l'objet )


Message édité par OrcusZ le 12-02-2014 à 14:54:20

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 15:34:25    

oki merci pour ton aide :)

 

donc si j'ai bien compris dans .cpp je mets mon ancien programme
et dans Maclasse.h je peux mettre ttes mes fonctions que j'utilise dans mon code actuel ? genre la fonction "maxi" ou la partie du programme qui génère une loi normale ? --> (
do{
                x=rand();
                y=rand();
                x=2*(x/RAND_MAX);
                y=2*(y/RAND_MAX);
                x=x-1;
                y=y-1;
                s=pow(x,2)+pow(y,2);
            }while (s > 1);
           
            z = x*sqrt((-2*log(s))/s);
)

 

donc j'aurai un fichier avec mes fonctions dans .h et un fichier avec le reste du code ou j'appelle mes fonctions dans .cpp c'est bien ca ?

 

sinon qu'est ce que je peux mettre d'autre dans .h pour "épurer" le code dans .cpp ? à part les fonctions ?


Message édité par HeisenberG75 le 12-02-2014 à 15:35:29
Reply

Marsh Posté le 12-02-2014 à 15:40:32    

Re,
 
Tu as bien compris le principe.
Ensuite à toi de juger ce que tu trouve bon d'intégrer dans ta classe ( tu regroupe en général les méthodes et propriété dans une classe si elle ont des fonction utile pour ton objet ).
 
Exemple :
Si tu as une classe ARME
Tu lui mettra les propriété int dégat, int nbBalle, int porter.
Et les méthodes void Tirer, void recharger, void viser.
 
Ensuite les seuls chose qui peuvent apparaitre dans ton .h ce sont
Des priopriété ( tes valeur )
des méthodes ( tes fonction )
Un constructeur
Un destructeur.
 
Le reste c'est de l'optimisation que tu va faire avec des fonction propre à la programmation Objet ( héritage, méthode public, private, static ect.. )


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 15:53:24    

quand tu dis rentrer des valeurs (propriétés) dans .h, ce sont donc des valeurs fixes ?
car dans mon programme tous les paramètres sont rentrés par l'utilisateur (et selon ce qu'il rentre il obtient un prix différent) donc il n'y a rien de fixe (aucune valeur initialisés)

Reply

Marsh Posté le 12-02-2014 à 16:28:48    

Re,
 
Non pas forcement, quand je dit rentrer ça veut dire créer.
 
Ex :

Code :
  1. //on est dans MaClass.h
  2. public :
  3.   int age;
  4.   char sexe;
  5.   int compteur = 0;
  6.   //Tes valeur peuvent être initialisé ou non :)


Mais cela signifie que tu aura des méthodes qui te permettrons de demander a l'utilisateur de saisir des paramètres ( avec des cin ).
 
Si tu ne connais pas les attribut public, privé ( pour les class, méthodes et propriété ) je te conseille d'y jeter un coup d'oeil.
Car ce sont ces attributs qui te permettrons de rendre accessible tes  class, méthodes et propriété dans d'autres fichiers de ton code.
 


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 17:45:54    

j'ai lu quelques cours sur les classes et j'ai crée un fichier header.h ou je vais mettre des fonctions
en fait à aucun moment j'ai besoin de créer une "classe" dans ce que j'ai fait ??? -->

 
Code :
  1. #ifndef Monte_Carlo_Header_h
  2. #define Monte_Carlo_Header_h
  3. double maxi(double a, double b){
  4.        
  5.         return a>=b ? a : b;
  6.        
  7. }
  8. double boxmuller(){
  9.     double x,y,s;
  10.     do{
  11.         x=rand();
  12.         y=rand();
  13.         x=2*(x/RAND_MAX);
  14.         y=2*(y/RAND_MAX);
  15.         x=x-1;
  16.         y=y-1;
  17.         s=pow(x,2)+pow(y,2);
  18.     }while (s > 1);
  19.    
  20.     return x*sqrt((-2*log(s))/s);
  21.    
  22. }
  23. #endif
 

du coup je pige pas pk tu parlais de classe avec méthodes alors que là j'ai juste à mettre mes fonctions et ca marche pareil  :D  :bounce:
c'est parce que mes fonctions sont public (j'ai pas besoin de restrictions) que du coup j'ai pas besoin de classe c'est ca ?

 


Message édité par HeisenberG75 le 12-02-2014 à 17:49:40
Reply

Marsh Posté le 12-02-2014 à 19:30:02    

Re,
 
La c'est juste un header ou tu place une partie de ton code ( mais ce n'est asbolument pas de la POO avec la notion d'objet )
 
Si je reprend ton code en POO ça donne ça
 
Ton .h :

Code :
  1. #ifndef Monte_Carlo_Header_h
  2. #define Monte_Carlo_Header_h
  3.    
  4. class NomDeTaClasse //il faut que tu lui donne un nom cohérent avec ce que tu met à l'intérieur
  5. {
  6. //Je met tout en public car c'est plus simple pour la compréhension au début et tu pourra l'utiliser dans d'autres classe ( mais c'est absolument pas comme ça que tu doit faire il faut mettre les variable en private et faire des méthodes getter //et setter
  7. public :
  8. //variable
  9. double x,y,s;
  10. //méthode
  11.  
  12.   double Maxi(double a, double b);
  13.   double Boxmuller();
  14.      
  15. //PS : je ne met pas de constructeur ou destructeur pour ne pas compliqué ta compréhension mais ce sont des notions essentiels
  16. #endif


 
ton .cpp
 

Code :
  1. #inlude "NomDeTaClasse.h"
  2. double NomDeTaClasse::Maxi(double a, double b){
  3.      
  4.         return a>=b ? a : b;
  5.      
  6. }
  7. double NomDeTaClasse::Boxmuller(){
  8.     double x,y,s;
  9.     do{
  10.         x=rand();
  11.         y=rand();
  12.         x=2*(x/RAND_MAX);
  13.         y=2*(y/RAND_MAX);
  14.         x=x-1;
  15.         y=y-1;
  16.         s=pow(x,2)+pow(y,2);
  17.     }while (s > 1);
  18.  
  19.     return x*sqrt((-2*log(s))/s);
  20.  
  21. }


 
 
Mais si tu n'as jamais fait de programmation orienté objet je ne te conseille pas de commencer par du C++, pour moi le langage avec lequel j'ai compris c'est le C#
 
En tout cas voilà à quoi ressemblerais ton code en POO


---------------
Made you your own sentence without believing that of the others...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed