/* main.c */
#include <stdio.h>
#include <math.h>
#include </home/elronde/calculator/simple.c>
#include </home/elronde/calculator/complexe.c>
int main(void)
{
//variables de choix des opérations
char refaire[10];
char type[15];
//on fait une premiere opération avant de faire la boucle
printf("Voulez vous faire une operation complexe ou simple (complexe/simple)?\n");
scanf("%s", &type);
if(!strcmp(type, "complexe"))
{
complexe();
}
else if(!strcmp(type, "simple"))
{
simple();
}
//on repropose à l'utilisateur de faire une opération
while(1)
{
printf("\nVoulez vous faire une nouvelle opération (oui/non)?\n");
scanf("%s", &refaire);
if(!strcmp(refaire, "oui")) // si l'utilisateur veut refaire une opération, on choisit le type
{
printf("Voulez vous faire une operation complexe ou simple (complexe/simple)?\n");
scanf("%s", &type);
if(!strcmp(type, "complexe"))
{
complexe(); //operations type polynomes, fonctions etc etc
}
else if(!strcmp(type, "simple"))
{
simple(); //operations de base
}
else
{
printf("Mode operatoire indisponnible");
}
}
else
{
return 0;
}
}
return 0;
}
/* simple.c */
#include <stdio.h>
#include <math.h>
#include </home/elronde/calculator/simple.c>
#include </home/elronde/calculator/complexe.c>
int main(void)
{
//variables de choix des opérations
char refaire[10];
char type[15];
//on fait une premiere opération avant de faire la boucle
printf("Voulez vous faire une operation complexe ou simple (complexe/simple)?\n");
scanf("%s", &type);
if(!strcmp(type, "complexe"))
{
complexe();
}
else if(!strcmp(type, "simple"))
{
simple();
}
//on repropose à l'utilisateur de faire une opération
while(1)
{
printf("\nVoulez vous faire une nouvelle opération (oui/non)?\n");
scanf("%s", &refaire);
if(!strcmp(refaire, "oui")) // si l'utilisateur veut refaire une opération, on choisit le type
{
printf("Voulez vous faire une operation complexe ou simple (complexe/simple)?\n");
scanf("%s", &type);
if(!strcmp(type, "complexe"))
{
complexe(); //operations type polynomes, fonctions etc etc
}
else if(!strcmp(type, "simple"))
{
simple(); //operations de base
}
else
{
printf("Mode operatoire indisponible");
}
}
else
{
return 0;
}
}
return 0;
}
/** avoir le nombre soit fraction ou pas **/
int obtenir_nombre(void)
{
int i = 0;
char buf[256];
char n1[64], n2[64];
int nb, nb1, nb2;
int test = 0;
char *p, *p2, *ret;
printf("Entrer le nombre\n");
/** on regarde la chaine de caractère correspondant au nombre saisie **/
scanf("%s", &buf);
/** on attribue un pointeur à buf
*p correspond à buf[0] au depart
**/
p = buf;
/** on attribue un pointeur aussi à buf **/
p2 = buf;
/** on boucle jusqu'à tend qu'on tombe sur autre chose que des nombres, tout en
faisant evolué le pointeur
**/
while ((isdigit(*p)) && (*p != 0))
p++;
/** on verifie bien que *p c'est un / **/
if (*p == '/')
{
/** entre le debut de la chaine de caractère et le /, on enregistre, cette portion
de chaine de caractère dans une variable n1 correspondant au numérateur
**/
strncpy(n1, p2, p - p2);
/** on transforme la chaine de caractère n1 en nombre **/
nb1 = atoi(n1);
/** on attribue le nombre 1 à test pour dire que le nombre est une fraction **/
test = 1;
}
/** on fais evolue le pointeur pour enlever le / **/
p++;
/** apres le / et la fin de la chaine de caractère, on enregistre, cette portion de chaine
de caractère dans une variable n2 correspondant au dénominateur **/
strncpy(n2, p, p - p2);
/** on transforme n2 en nombre **/
nb2 = atoi(n2);
/** si test n'est pas égal à 0, c'est que le nombre est une fraction **/
if (!test)
nb = nb1/nb2;
/** sinon la chaine de caractère correspond tout simplement à un nombre à par entière **/
else
nb = atoi(buf);
return nb;
}
/* complexe.c */
void polygon2nd(void) //polygones du second degrès dans |R de la forme ax²+bx+c = 0
{
float a;
float b;
float c;
float delta;
float x1; //1iere solution
float x2; //deuxième solution
printf("Polygone du second degres de la forme ax² + bx + c = 0\nEntrez a :\n");
a = obtenir_nombre();
printf("Entrez b :\n");
b = obtenir_nombre();
printf("Entrez c :\n");
c = obtenir_nombre();
if(a == 0) //on vérifie que a différent de 0
{
printf("a ne doit pas être égal à 0.\n");
}
else
{
delta = pow(b,2)-4*a*c;
printf("Delta = %f\n", delta); //on sort les solutions en fonction de delta
if(delta < 0)
{
printf("Delta est inferieur a 0, aucune solution pour ce polynome.\n");
}
else if(delta == 0)
{
x1 = (b-pow(delta,0.5))/(2*a);
printf("Delta = 0, une seule solution : %f\n", x1);
}
else
{
x1 = (b-pow(delta,0.5))/(2*a);
x2 = (-b-pow(delta,0.5))/(2*a);
printf("1iere solution : %f\n", x1);
printf("2nd solution : %f\n", x2);
}
}
}
void primitive(void) //calcul de primitives
{
}
void derive(void) //calcul de derives
{
}
void complexe(void) //opérations complexes (polygones, etc etc) fonction principale du fichier
{
char type[20];
printf("Quel type d'operation / equation voulez vous resoudre (poly2nd, primitive, derive)?\n");
scanf("%s", &type);
if(!strcmp(type, "poly2nd"))
{
polygon2nd();
}
else if(!strcmp(type, "primitive"))
{
primitive();
}
else if(!strcmp(type, "derive"))
{
derive();
}
else
{
printf("Operation non definie\n");
}
}