All pastes #577157 Raw Edit

Calculator

public text v1 · immutable
·published 2007-06-19 20:04 UTC
rendered paste body
/* 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");
	}
}