Vous n'êtes pas identifié(e).
Pages : 1
Piti code très mal optimisé (roh, c’est les débuts, aussi), bah… Voilà :
[== C++ ==]
/*
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
*/
#include <iostream>
#include <math.h>
using namespace std;
void cinCleaner()
{
cin.clear();
cin.ignore(255,'\n');
}
//Début de déclaration des fonctions
void entrerVariables(float &a, float &b, float &c);
short int equaNum(float a, float b, float c, float &r1, float &r2, float &r1Imaginaire, float &r2Imaginaire);
void afficheSol(float r1, float r2, float r1Imaginaire, float r2Imaginaire, short int signeDelta);
void resolNeg(float r1,float r1Imaginaire,float r2Imaginaire);
void resolNul(float r1);
void resolPos(float r1,float r2);
//Fin de déclaration des fonctions
int main()
{
while(1)
{
float a(0),b(0),c(0),r1(0),r2(0), r1Imaginaire(0), r2Imaginaire(0);
// Décclaration des variable de l'équation et du résultat.
short int caseDelta(0);
//Variable qui vera si Delta est positif, nul ou négatif
entrerVariables(a,b,c);
//fonction demandant à l'utilisateur, de rentrer les variables de l'équation
caseDelta = equaNum(a,b,c,/*&*/r1,/*&*/r2,/*&*/r1Imaginaire,/*&*/r2Imaginaire);
//fonction qui calcul le résultat de l'équation numérique asscoiée.
afficheSol(r1, r2, r1Imaginaire, r2Imaginaire, caseDelta);
//fonction qui affiche les solution de l'équation
}
return 0;
}
void entrerVariables(float &a, float &b, float &c)
{
cout << "\n\nSalut, je resous des equations differentielles du second ordre, de la forme af''+bf'+cf = 0" << endl;
cout << "merci de me donner a : ";
cin >> a;
cinCleaner(); //vide le buffer
cout << "merci de me donner b : ";
cin >> b;
cinCleaner(); //vide le buffer
cout << "merci, enfin, de donner c : ";
cin >> c;
cinCleaner(); //vide le buffer
}
short int equaNum(float a, float b, float c, float &r1, float &r2, float &r1Imaginaire, float &r2Imaginaire)
{
float Delta = b*b-(4*a*c); //calcul de Delta=(b²-4ac)
if (Delta < 0)
{
//Deux solution Complexe
r1 = (-b/2*a); //partie réel commune aux 2 solutions
r1Imaginaire = sqrt(-Delta)/2*a; //partie imaginaire de r1
r2Imaginaire = -r1Imaginaire; //partie imaginaire de r2
return -1; //caseDelta sera égal à négatif, car Delta est négatif
}
else if (Delta == 0)
{
//Une seule solution Réelle
r1 = (-b/2*a);
return 0; //caseDelta sera égal à 0, car Delta est nul
}
else
{
//Deux solution réelles
r1 = (-b+sqrt(Delta))/2*a; //la première solution
r2 = (-b-sqrt(Delta))/2*a; //la deuxième solution
return 1; //caseDelta sera égal à -1, car Delta est négatif
}
}
void afficheSol(float r1, float r2, float r1Imaginaire, float r2Imaginaire, short int signeDelta)
{
switch(signeDelta)
{
case -1 : resolNeg(r1,r1Imaginaire,r2Imaginaire); break;
//si Delta est négatif, appel de resolNeg
case 0 : resolNul(r1); break;
//si Delta est nul, appel de resolNul
case 1 : resolPos(r1, r2); break;
//si Delta est positif, apper de resolPos
}
}
void resolneg(float r1,float r1imaginaire,float r2imaginaire)
{
cout << "les solutions a l'equation sont : " << endl;
if (r1!=-1 && r1!=0 && r1!=1) //0xx
{
cout << "f(x) = e^(" << r1 << "x ) ";
if (r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1) //x0x
{
cout << "(a * cos (" << r1imaginaire << "*x )";
if (r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1) //xx0
{
cout << " + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if (r2imaginaire==1) //xx1
{
cout << " + b * sin ( x )), a et b sont reel.";
}
else if (r2imaginaire==0) //xx2
{
cout << "), a est reel.";
}
else //xx3
{
cout << " + b * sin ( -x )), a et b sont reel.";
}
}
else if (r1imaginaire==1) //1xx
{
cout << "f(x) = e^( x ) ";
if (r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1)
{
cout << "(a * cos (" << r1imaginaire << "*x )";
if (r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1)
{
cout << " + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if (r2imaginaire==1)
{
cout << " + b * sin ( x )), a et b sont reel.";
}
else if (r2imaginaire==0)
{
cout << "), a est reel.";
}
else
{
cout << " + b * sin ( -x )), a et b sont reel.";
}
}
}
else if (r1imaginaire==0) //2xx
{
if (r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1)//x0x
{
cout << "a * cos (" << r1imaginaire << "*x )";
if (r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1)//xx0
{
cout << " + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if (r2imaginaire==1) //xx1
{
cout << " + b * sin ( x ), a et b sont reel.";
}
else if (r2imaginaire==0) //xx2
{
cout << ", a est reel.";
}
else //xx3
{
cout << " + b * sin ( -x ), a et b sont reel.";
}
}
else if (r1imaginaire==1)//x1x
{
cout << "a * cos ( x )";
if (r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1)//xx0
{
cout << " + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if (r2imaginaire==1) //xx1
{
cout << " + b * sin ( x ), a et b sont reel.";
}
else if (r2imaginaire==0) //xx2
{
cout << ", a est reel.";
}
else //xx3
{
cout << " + b * sin ( -x ), a et b sont reel.";
}
}
else if (r1imaginaire==0)//x2x
{
cout << "a +";
if (r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1)//xx0
{
cout << " + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if (r2imaginaire==1) //xx1
{
cout << " + b * sin ( x ), a et b sont reel.";
}
else if (r2imaginaire==0) //xx2
{
cout << ", a est reel.";
}
else //xx3
{
cout << " + b * sin ( -x ), a et b sont reel.";
}
}
}
else if (r1imaginaire==-1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //030
{
cout << "(a * cos ( -x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if (r1imaginaire==-1 && r2imaginaire==1 ) //031
{
cout << "(a * cos ( -x ) + b * sin ( x )), a et b sont reel.";
}
else if (r1imaginaire==-1 && r2imaginaire==0 ) //032
{
cout << "(a * cos ( -x )), a est reel.";
}
else if (r1imaginaire==-1 && r2imaginaire==-1 ) //033
{
cout << "(a * cos ( -x ) + b * sin ( -x )), a et b sont reel.";
}
}
else if (r1 == 1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1) //100
{
cout << "f(x) = e^(x) (a * cos (" << r1imaginaire << "*x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==1) //101
{
cout << "f(x) = e^( x ) (a * cos (" << r1imaginaire << "*x ) + b * sin ( x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==0) //102
{
cout << "f(x) = e^( x ) (a * cos (" << r1imaginaire << "*x )), a est reel.";
}
else if ( r1==1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==-1) //103
{
cout << "f(x) = e^( x ) (a * cos (" << r1imaginaire << "*x ) + b * sin ( -x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //110
{
cout << "f(x) = e^( x ) (a * cos ( x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==1 && r2imaginaire==1 ) //111
{
cout << "f(x) = e^( x ) (a * cos ( x ) + b * sin ( x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==1 && r2imaginaire==0 ) //112
{
cout << "f(x) = e^( x ) (a * cos ( x )), a est reel.";
}
else if ( r1==1 && r1imaginaire==1 && r2imaginaire==-1 ) //113
{
cout << "f(x) = e^( x ) (a * cos ( x ) + b * sin ( -x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==0 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //120
{
cout << "f(x) = e^( x ) (a + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==0 && r2imaginaire==1 ) //121
{
cout << "f(x) = e^( x ) (a + b * sin ( x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==0 && r2imaginaire==0 ) //122
{
cout << "f(x) = ae^( x ), a est reel.";
}
else if ( r1==1 && r1imaginaire==0 && r2imaginaire==-1 ) //123
{
cout << "f(x) = e^( x ) (a + b * sin ( -x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==-1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //130
{
cout << "f(x) = e^( x ) (a * cos ( -x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==-1 && r2imaginaire==1 ) //131
{
cout << "f(x) = e^( x ) (a * cos ( -x ) + b * sin ( x )), a et b sont reel.";
}
else if ( r1==1 && r1imaginaire==-1 && r2imaginaire==0 ) //132
{
cout << "f(x) = e^( x ) (a * cos ( -x )), a est reel.";
}
else if ( r1==1 && r1imaginaire==-1 && r2imaginaire==-1 ) //133
{
cout << "f(x) = e^( x ) (a * cos ( -x ) + b * sin ( -x )), a et b sont reel.";
}
else if (r1 == 0 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1) //200
{
cout << "f(x) = a * cos (" << r1imaginaire << "*x ) + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==1) //201
{
cout << "f(x) = a * cos (" << r1imaginaire << "*x ) + b * sin ( x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==0) //202
{
cout << "f(x) = a * cos (" << r1imaginaire << "*x ), a est reel.";
}
else if ( r1==0 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==-1) //203
{
cout << "f(x) = a * cos (" << r1imaginaire << "*x ) + b * sin ( -x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //210
{
cout << "f(x) = a * cos ( x ) + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==1 && r2imaginaire==1 ) //211
{
cout << "f(x) = a * cos ( x ) + b * sin ( x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==1 && r2imaginaire==0 ) //212
{
cout << "f(x) = a * cos ( x ), a est reel.";
}
else if ( r1==0 && r1imaginaire==1 && r2imaginaire==-1 ) //213
{
cout << "f(x) = a * cos ( x ) + b * sin ( -x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==0 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //220
{
cout << "f(x) = a + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==0 && r2imaginaire==1 ) //221
{
cout << "f(x) = a + b * sin ( x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==0 && r2imaginaire==0 ) //222
{
cout << "f(x) = a, a est reel.";
}
else if ( r1==0 && r1imaginaire==0 && r2imaginaire==-1 ) //223
{
cout << "f(x) = a + b * sin ( -x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==-1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //230
{
cout << "f(x) = a * cos ( -x ) + b * sin (" << r2imaginaire << "x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==-1 && r2imaginaire==1 ) //231
{
cout << "f(x) = a * cos ( -x ) + b * sin ( x ), a et b sont reel.";
}
else if ( r1==0 && r1imaginaire==-1 && r2imaginaire==0 ) //232
{
cout << "f(x) = a * cos ( -x ), a est reel.";
}
else if ( r1==0 && r1imaginaire==-1 && r2imaginaire==-1 ) //233
{
cout << "f(x) = a * cos ( -x ) + b * sin ( -x ), a et b sont reel.";
}
else if (r1 == -1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1) //300
{
cout << "f(x) = e^( -x ) (a * cos (" << r1imaginaire << "*x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==1) //301
{
cout << "f(x) = e^( -x ) (a * cos (" << r1imaginaire << "*x ) + b * sin ( x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==0) //302
{
cout << "f(x) = e^( -x ) (a * cos (" << r1imaginaire << "*x )), a est reel.";
}
else if ( r1==-1 && r1imaginaire!=-1 && r1imaginaire!=0 && r1imaginaire!=1 && r2imaginaire==-1) //303
{
cout << "f(x) = e^( -x ) (a * cos (" << r1imaginaire << "*x ) + b * sin ( -x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //310
{
cout << "f(x) = e^( -x ) (a * cos ( x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==1 && r2imaginaire==1 ) //311
{
cout << "f(x) = e^( -x ) (a * cos ( x ) + b * sin ( x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==1 && r2imaginaire==0 ) //312
{
cout << "f(x) = e^( -x ) (a * cos ( x )), a est reel.";
}
else if ( r1==-1 && r1imaginaire==1 && r2imaginaire==-1 ) //313
{
cout << "f(x) = e^( -x ) (a * cos ( x ) + b * sin ( -x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==0 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //320
{
cout << "f(x) = e^( -x ) (a + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==0 && r2imaginaire==1 ) //321
{
cout << "f(x) = e^( -x ) (a + b * sin ( x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==0 && r2imaginaire==0 ) //322
{
cout << "f(x) = ae^( -x ) , a est reel.";
}
else if ( r1==-1 && r1imaginaire==0 && r2imaginaire==-1 ) //323
{
cout << "f(x) = e^( -x ) (a + b * sin ( -x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==-1 && r2imaginaire!=-1 && r2imaginaire!=0 && r2imaginaire!=1 ) //330
{
cout << "f(x) = e^( -x ) (a * cos ( -x ) + b * sin (" << r2imaginaire << "x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==-1 && r2imaginaire==1 ) //331
{
cout << "f(x) = e^( -x ) (a * cos ( -x ) + b * sin ( x )), a et b sont reel.";
}
else if ( r1==-1 && r1imaginaire==-1 && r2imaginaire==0 ) //332
{
cout << "f(x) = e^( -x ) (a * cos ( -x )), a est reel.";
}
else //333
{
cout << "f(x) = e^( -x ) (a * cos ( -x ) + b * sin ( -x )), a et b sont reel.";
}
}
void resolnul(float r1)
{
cout << "les solutions a l'equation sont : " << endl;
if (r1!=-1 && r1!=0 && r1 != 1)
//si r1 n'est ni égal à 0 ni à 1, pas de simplification
{
cout << "f(x) = (a*x+b)e^( " << r1 << "x )";
}
else if (r1 == 1)
//si r1 est égal à 1, simplification, on ne le mentionne pas
{
cout << "f(x) = (a*x+b)e^( x )";
}
else if(r1 == 0 )
//si r1 est nul, suppression de l'exponentiel : e⁰ = 1
{
cout << "f(x) = (a*x+b)";
}
else
//si r1 est égal à -1, simplification, on ne mentionne que le -.
{
cout << "f(x) = (a*x+b)e^( -x )";
}
}
void resolPos(float r1,float r2)
{
cout << "les solutions a l'equation sont : " << endl;
if ( r1 != 0 && r1 != 1 && r1 != -1 && r2 != 0 && r2 != 1 && r2 !=-1 ) //00
//r1 et r2 sont différent de 0 et de 1 -> Pas de simplif.
{
cout << "f(x) = Ae^( " << r1 << "x ) + Be^( " << r2 << "x )";
}
else if ( r1 != 0 && r1 != 1 && r1 != -1 && r2 == 1 ) //01
//idem pour r1, r2 égal 1 => simplification, on ne le mentionne pas.
{
cout << "f(x) = Ae^( " << r1 << "x ) + Be^( x )";
}
else if ( r1 != 0 && r1 != 1 && r1 != -1 && r2 == 0 ) //02
//idem pour r1, r2 égal 0 => simplification de l'exponentiel : e⁰=1
{
cout << "f(x) = Ae^( " << r1 << "x ) + B";
}
else if ( r1 != 0 && r1 != 1 && r1 != -1 && r2 == -1 ) //03
//idem pour r1, r2 égal -1 => simplification, on ne mentionne que le -
{
cout << "f(x) = Ae^( " << r1 << "x ) + Be^( -x )";
}
else if (r1 == 1 && r2 != 0 && r2 != 1 && r2 !=-1 ) //10
//r1 égal 1 et r2 ni 0 ni 1 => simplif r1 pas mentionné
{
cout << "f(x) = Ae^( x ) + Be^( " << r2 << "x )";
}
else if (r1 == 1 && r2 == 1) //11
//idem r1, r2 (cf cas n°2)
{
cout << "f(x) = Ae^( x ) + Be^( x )";
}
else if (r1 == 1 && r2 == 0) //12
//idem r1, r2 (cf cas n°3)
{
cout << "f(x) = Ae^( x ) + B";
}
else if (r1 == 1 && r2 == -1) //13
//idem r1, r2 (ce cas n°4)
{
cout << "f(x) = Ae^( x ) + Be^( -x )";
}
else if (r1 == 0 && r2 != 0 && r2 != 1 && r2 !=-1 ) //20
//r1 nul, simplif son exponentiel (e⁰=1), r2 idem cas n°1
{
cout << "f(x) = A + Be^( " << r2 << "x )";
}
else if (r1 == 0 && r2 == 1) //21
//idem r1, r2 cas n°2
{
cout << "f(x) = A + Be^( x )";
}
else if (r1 == 0 && r2 == 0) //22
//idem r1, r2 cas n°3
{
cout << "f(x) = A + B";
}
else if (r1 ==0 && r2 == -1) //23
//idem r1, r2 cas n°4
{
cout << "f(x) = A + Be^( -x )";
}
else if (r1 == -1 && r2 != 0 && r2 != 1 && r2 !=-1 ) //30
//r1 égal -1, r2 cas n°1
{
cout << "f(x) = Ae^( -x ) + Be^( " << r2 << "x )";
}
else if (r1 == -1 && r2 == 1) //31
//idem r1, r2 cas n°2
{
cout << "f(x) = Ae^ ( -x ) + Be^( x )";
}
else if (r1 == -1 && r2 == 0 ) //32
//idem r1, r2 cas n°3
{
cout << "f(x) = Ae^( -x ) + B";
}
else
//idem r1, r2 cas n°4
{
cout << "f(x) = Ae^( -x ) + Be^ (-x )";
}
}
Libriste, Végétarien, Anarchiste, Communiste un poil Marginal.
Hors ligne
J'aime bien le "r1imaginaire" (rien imaginaire)
Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D
Hors ligne
J'aime bien le "r1imaginaire" (rien imaginaire)
Ah, non non non, c’est juste que les solutions, on les appelle r1 et r2, et comme ce sont des complexes et que je dois séparé la partie réelle de la partie imaginaire, bah je nommes la variable r1imaginaire *sourire*.
Libriste, Végétarien, Anarchiste, Communiste un poil Marginal.
Hors ligne
Pages : 1