From 462d87e081e8f38493478dad063c51378d5b08e3 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Thu, 3 Mar 2016 19:30:01 +0100 Subject: [PATCH] Seance #1 --- ex1.cpp | 9 +++++ ex2.cpp | 16 +++++++++ ex3.cpp | 67 ++++++++++++++++++++++++++++++++++++ ex3/Addition.cpp | 23 +++++++++++++ ex3/Addition.h | 9 +++++ ex3/Division.cpp | 22 ++++++++++++ ex3/Division.h | 9 +++++ ex3/DivisionEuclidienne.cpp | 27 +++++++++++++++ ex3/DivisionEuclidienne.h | 9 +++++ ex3/Multiplication.cpp | 23 +++++++++++++ ex3/Multiplication.h | 10 ++++++ ex3/Operator.h | 60 ++++++++++++++++++++++++++++++++ ex3/Soustraction.cpp | 25 ++++++++++++++ ex3/Soustraction.h | 9 +++++ exec/ex1 | Bin 0 -> 9166 bytes exec/ex2 | Bin 0 -> 13923 bytes exec/ex3 | Bin 0 -> 20666 bytes 17 files changed, 318 insertions(+) create mode 100644 ex1.cpp create mode 100644 ex2.cpp create mode 100644 ex3.cpp create mode 100644 ex3/Addition.cpp create mode 100644 ex3/Addition.h create mode 100644 ex3/Division.cpp create mode 100644 ex3/Division.h create mode 100644 ex3/DivisionEuclidienne.cpp create mode 100644 ex3/DivisionEuclidienne.h create mode 100644 ex3/Multiplication.cpp create mode 100644 ex3/Multiplication.h create mode 100644 ex3/Operator.h create mode 100644 ex3/Soustraction.cpp create mode 100644 ex3/Soustraction.h create mode 100755 exec/ex1 create mode 100755 exec/ex2 create mode 100755 exec/ex3 diff --git a/ex1.cpp b/ex1.cpp new file mode 100644 index 0000000..5d03069 --- /dev/null +++ b/ex1.cpp @@ -0,0 +1,9 @@ +#include + +using namespace std; + + +int main(){ + cout << "Hello World!" << endl; + return 0; +} \ No newline at end of file diff --git a/ex2.cpp b/ex2.cpp new file mode 100644 index 0000000..3ca2d50 --- /dev/null +++ b/ex2.cpp @@ -0,0 +1,16 @@ +#include +#include + +using namespace std; + + +int main(){ + int a = 10; + int b (11); + string stra("a="); + string strb("b="); + + cout << stra << a << endl; + cout << strb << b << endl; + return 0; +} \ No newline at end of file diff --git a/ex3.cpp b/ex3.cpp new file mode 100644 index 0000000..3fd777d --- /dev/null +++ b/ex3.cpp @@ -0,0 +1,67 @@ +#include +#include + +#include "ex3/Addition.cpp" +#include "ex3/Soustraction.cpp" +#include "ex3/Multiplication.cpp" +#include "ex3/Division.cpp" +#include "ex3/DivisionEuclidienne.cpp" + +using namespace std; + + +int main(){ + int choix(0); + + /* [1] On initialise les operations + =========================================================*/ + Operator *operations[5]; + + // On ajoute les operations; + operations[0] = new Addition(); + operations[1] = new Soustraction(); + operations[2] = new Multiplication(); + operations[3] = new Division(); + operations[4] = new DivisionEuclidienne(); + + int nbOp = sizeof(operations)/sizeof(Operator*); + + + /* [2] Choix de l'operation a executer + =========================================================*/ + do{ + cout << " +-------------------------+" << endl; + for( int i = 0 ; i < nbOp ; i++ ) + cout << " + " << i << ") " << operations[i]->getLibelle() << endl; + cout << " +-------------------------+" << endl; + cout << " + Choix: "; + cin >> choix; + cout << endl << endl; + }while( choix < 0 || choix >= nbOp ); + + + /* [3] On recupere les operandes pour le calcul + =========================================================*/ + float scanner; + int countOp(0); + while( operations[choix]->missingOperand() ){ + + cout << "x" << countOp << " = "; + cin >> scanner; + cout << endl; + + operations[choix]->addOperand(scanner); + countOp++; + } + + float* result = operations[choix]->calc(); + + for( int i = 0 ; result[i] != '\0' ; i++ ) + cout << "y" << i << " = " << result[i] << endl; + + return 0; +} + + + + diff --git a/ex3/Addition.cpp b/ex3/Addition.cpp new file mode 100644 index 0000000..83c680e --- /dev/null +++ b/ex3/Addition.cpp @@ -0,0 +1,23 @@ +#include "Addition.h" + +/* [0] CONSTRUCTEUR +=========================================================*/ +Addition::Addition(){ + this->init(2); +} + +/* [1] Renvoie le nom du type de calcul +=========================================================*/ +std::string Addition::getLibelle(){ + return "Addition"; +} + +/* [2] Effectue le calcul et renvoie le resultat +=========================================================*/ +float* Addition::calc(){ + this->result = (float*) malloc(1*sizeof(float)); + + this->result[0] = this->operands[0]+this->operands[1]; + + return this->result; +} \ No newline at end of file diff --git a/ex3/Addition.h b/ex3/Addition.h new file mode 100644 index 0000000..b923ad4 --- /dev/null +++ b/ex3/Addition.h @@ -0,0 +1,9 @@ +#include "Operator.h" + + +class Addition : public Operator{ + public: + Addition(); + std::string getLibelle(); + float* calc(); +}; \ No newline at end of file diff --git a/ex3/Division.cpp b/ex3/Division.cpp new file mode 100644 index 0000000..54a4c44 --- /dev/null +++ b/ex3/Division.cpp @@ -0,0 +1,22 @@ +#include "Division.h" + +/* [0] CONSTRUCTEUR +=========================================================*/ +Division::Division(){ + this->init(2); +} + +/* [1] Renvoie le nom du type de calcul +=========================================================*/ +std::string Division::getLibelle(){ + return "Division"; +} + +/* [2] Effectue le calcul et renvoie le resultat +=========================================================*/ +float* Division::calc(){ + this->result = (float*) malloc(1*sizeof(float)); + + this->result[0] = this->operands[0]/this->operands[1]; + return this->result; +} \ No newline at end of file diff --git a/ex3/Division.h b/ex3/Division.h new file mode 100644 index 0000000..6354620 --- /dev/null +++ b/ex3/Division.h @@ -0,0 +1,9 @@ +#include "Operator.h" + + +class Division : public Operator{ + public: + Division(); + std::string getLibelle(); + float* calc(); +}; \ No newline at end of file diff --git a/ex3/DivisionEuclidienne.cpp b/ex3/DivisionEuclidienne.cpp new file mode 100644 index 0000000..1cd1297 --- /dev/null +++ b/ex3/DivisionEuclidienne.cpp @@ -0,0 +1,27 @@ +#include "DivisionEuclidienne.h" + +/* [0] CONSTRUCTEUR +=========================================================*/ +DivisionEuclidienne::DivisionEuclidienne(){ + this->init(2); +} + +/* [1] Renvoie le nom du type de calcul +=========================================================*/ +std::string DivisionEuclidienne::getLibelle(){ + return "Division euclidienne"; +} + +/* [2] Effectue le calcul et renvoie le resultat +=========================================================*/ +float* DivisionEuclidienne::calc(){ + int division = this->operands[0] / this->operands[1]; + int reste = (int)(this->operands[0]) % (int)(this->operands[1]); + + this->result = (float*) malloc(2*sizeof(float)); + + this->result[0] = (float) division; + this->result[1] = (float) reste; + + return this->result; +} \ No newline at end of file diff --git a/ex3/DivisionEuclidienne.h b/ex3/DivisionEuclidienne.h new file mode 100644 index 0000000..adfd788 --- /dev/null +++ b/ex3/DivisionEuclidienne.h @@ -0,0 +1,9 @@ +#include "Operator.h" + + +class DivisionEuclidienne : public Operator{ + public: + DivisionEuclidienne(); + std::string getLibelle(); + float* calc(); +}; \ No newline at end of file diff --git a/ex3/Multiplication.cpp b/ex3/Multiplication.cpp new file mode 100644 index 0000000..f8fb338 --- /dev/null +++ b/ex3/Multiplication.cpp @@ -0,0 +1,23 @@ +#include "Multiplication.h" + +/* [0] CONSTRUCTEUR +=========================================================*/ +Multiplication::Multiplication(){ + this->init(2); +} + +/* [1] Renvoie le nom du type de calcul +=========================================================*/ +std::string Multiplication::getLibelle(){ + return "Multiplication"; +} + +/* [2] Effectue le calcul et renvoie le resultat +=========================================================*/ +float* Multiplication::calc(){ + this->result = (float*) malloc(1*sizeof(float)); + + this->result[0] = this->operands[0]*this->operands[1]; + + return this->result; +} \ No newline at end of file diff --git a/ex3/Multiplication.h b/ex3/Multiplication.h new file mode 100644 index 0000000..c3c9b81 --- /dev/null +++ b/ex3/Multiplication.h @@ -0,0 +1,10 @@ +#include "Operator.h" + + + +class Multiplication : public Operator{ + public: + Multiplication(); + std::string getLibelle(); + float* calc(); +}; \ No newline at end of file diff --git a/ex3/Operator.h b/ex3/Operator.h new file mode 100644 index 0000000..5371fb7 --- /dev/null +++ b/ex3/Operator.h @@ -0,0 +1,60 @@ +#ifndef OPERATOR_H + #define OPERATOR_H + #include + #include + + + class Operator{ + public: + void init(int size); + void addOperand(float x); + bool missingOperand(); + + virtual std::string getLibelle(); + virtual float* calc(); + + int size; + + protected: + float *result; + float *operands; + }; + + + /* (1) Initialise les operandes */ + void Operator::init(int size){ + this->size = size; + this->operands = (float*) malloc(size*sizeof(float)); + + // On preremplis les operandes + for( int i = 0 ; i < size ; i++ ) + this->operands[i] = '\0'; + } + + + + /* (2) Ajoute une operande */ + void Operator::addOperand(float x){ + // On rempit la prochaine operande non-vide + for( int i = 0 ; i < this->size ; i++ ) + if( this->operands[i] == '\0' ){ // si vide + this->operands[i] = x; + break; + } + + } + + + /* (3) Verification qu'aucune operande ne manque */ + bool Operator::missingOperand(){ + // On verifie que toutes les operandes ont une valeur + for( int i = 0 ; i < this->size ; i++ ) + if( this->operands[i] == '\0' ) return true; // operandes ont une valeur + + return false; + } + + + std::string Operator::getLibelle(){ return "Operator"; }; + float* Operator::calc(){ return this->result; }; +#endif \ No newline at end of file diff --git a/ex3/Soustraction.cpp b/ex3/Soustraction.cpp new file mode 100644 index 0000000..9c82e51 --- /dev/null +++ b/ex3/Soustraction.cpp @@ -0,0 +1,25 @@ +#include "Soustraction.h" + + +/* [0] CONSTRUCTEUR +=========================================================*/ +Soustraction::Soustraction(){ + this->init(2); +} + +/* [1] Renvoie le nom du type de calcul +=========================================================*/ +std::string Soustraction::getLibelle(){ + return "Soustraction"; +} + +/* [2] Effectue le calcul et renvoie le resultat +=========================================================*/ +float* Soustraction::calc(){ + this->result = (float*) malloc(1*sizeof(float)); + + this->result[0] = this->operands[0]-this->operands[1]; + + + return this->result; +} \ No newline at end of file diff --git a/ex3/Soustraction.h b/ex3/Soustraction.h new file mode 100644 index 0000000..d05adc5 --- /dev/null +++ b/ex3/Soustraction.h @@ -0,0 +1,9 @@ +#include "Operator.h" + + +class Soustraction : public Operator{ + public: + Soustraction(); + std::string getLibelle(); + float* calc(); +}; \ No newline at end of file diff --git a/exec/ex1 b/exec/ex1 new file mode 100755 index 0000000000000000000000000000000000000000..2d0c2b8189843e08148565363cb95748e59db9d3 GIT binary patch literal 9166 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 literal 0 HcmV?d00001 diff --git a/exec/ex3 b/exec/ex3 new file mode 100755 index 0000000000000000000000000000000000000000..5202a5eeca19825fbb2e36042a99801904eecead GIT binary patch literal 20666 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