/* main.c */ #include #include #include #include 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 #include #include #include 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"); } }