--------------------------------------------------------------------------------
Mathematiques Appliquees et Calcul Scientifique
Analyse numerique
Programmeur : Laydine YOUSSOUF
Ingenieur Mathematiques Appliquees et Calcul Scientifique
Premiere annee

--------------------------------------------------------------------------------
Projet : Resolveur d'equations polynomiales de degre 2
       	 (version C)

--------------------------------------------------------------------------------
Sommaire

1. Presentation
2. Liste des fonctions
3. Compilation

--------------------------------------------------------------------------------
1. Presentation

Ce programme permet de resoudre des equations polynomiales de degre 2 du type : P(z) = a*z^2 + b*z + c = 0 avec z complexe. Il peut de meme resoudre des equations polynomiales du premier degre en considerant le coefficient a comme nul. Des fonctions de validation sont presentes pour verifier la veracite des fonctions de resolutions et de calculs. L'ensemble du projet comporte 11 fichiers. Fichiers sources : complexe.c inout.c main.c resol.c valid.c. Headers : complexe.h inout.h resol.h structure.h valid.h. Le programme principal se trouve dans le fichier source main.c. Un fichier «makefile» accompagne le projet et permet de le compiler et de l'executer.

Remarques :
* Tous les calculs sont faits avec des nombres complexes et utilisent des fonctions et structures dediees
* Certaines fonctions de validation utilisent des notions de mathematiques abstraites relevant du champ de l'Analyse
* L'utilisateur a le choix du nombre de tests et de la precision des calculs lors de l'execution des fonctions de validation
* Un menu permet a un utilisateur de choisir le type d'equation a resoudre et ses coefficients ou d'utiliser un fichier contenant une liste de coefficients
* Concernant les resolutions avec fichiers textes, les coefficients doivent etre separes par un ou plusieurs espaces
* La partie reelle et imaginaire d'un coefficient doivent obligatoirement figurer dans le fichier des coefficients et separees d'un espace
* Il est recommande de sauter une ligne apres la declaration des coefficients d'une equation
* Si les coefficients sont associes a des equations du premier degre il est imperatif de mettre le premier coefficient a 0 0 et d'ecrire les deux suivants a la suite
* Une equation est necessairement associee a trois coefficients et 6 nombres reelles dans un fichier texte
* L'ensemble de l'affichage se fait dans le terminal

--------------------------------------------------------------------------------
2. Liste des fonctions

Voici la liste de toutes les fonctions pouvant etre appelees dans le fichier source main.c.

Bibliotheque et fonctions :

complexe : fonctions qui manipulent des nombres complexes et leur structure

	   complexe zero_c(void);
	   cree un complexe nul, il s'agit du zero dans C

	   double distance_c(complexe, complexe);
	   calcule la distance euclidienne entre deux complexes, la distance est associee a la norme 2 sur C

	   complexe poly2c(coeff_s, complexe);
	   calcule P(z) avec P(z) = a*z^2 + b*z + c

	   complexe produit_c(complexe, complexe);
	   calcule le produit de deux complexes

	   complexe quotient_c(complexe, complexe);
	   calcule le quotient de deux complexes dont le deuxieme non nul

	   complexe inverse_c(complexe);
	   calcule l'inverse d'un complexe non nul

	   complexe racine_c(complexe);
	   calcule une racine carree d'un complexe

	   complexe rac_expc(complexe);
	   calcule une racine carre d'un complexe en ecriture exponentielle

	   double module_c(complexe);
	   calcule le module d'un complexe, il s'agit de la norme 2 sur C

	   double theta_c(complexe);
	   calcule l'argument d'un complexe

	   complexe exp_c(complexe);
	   passe de l'ecriture algebrique a l'ecriture exponentielle

	   complexe exptoalg(complexe);
	   passe de l'ecriture exponentielle a l'ecriture algebrique

	   complexe somme_c(complexe, complexe);
	   calcule la somme de deux complexes

	   complexe signe_c(complexe);
	   change le signe d'un complexe

	   complexe scal_c(complexe, double);
	   calcule le produit d'un complexe par un nombre reel

inout :    fonctions d'affichages et de saisies utilisateurs

           void affiche_menu(void);
	   affiche le texte brute du menu

	   void discussion(int);
	   switch sur la variable en entree, corps du menu

	   void menu(void);
	   menu classique, interface utilisateur machine

	   void affiche_s(solution_s);
	   affiche les solutions d'une equation de degre 2

	   void affiche_c(complexe);
	   affiche un complexe en ecriture algebrique

	   coeff_s saisie_repd(void);
	   saisie des coefficients pour une equation de degre 1

	   coeff_s saisie_coeff(void);
	   saisie des coefficients d'une equation de degre 2

resol :    fonctions qui resolvent une equation de degre 1 et 2

      	   solution_s repd(complexe, complexe);
	   resoud une equation du premier degre

	   complexe delta_c(coeff_s);
	   calcule le discriminant d'une equation de degre 2

	   solution_s discussion_c(coeff_s, complexe);
	   discussion sur le discriminant

	   solution_s resd(coeff_s);
	   resoud une equation de degre 2

	   int nlignes(char*);
	   compte le nombre de lignes contenues dans un fichier

	   void refp(char*);
	   resoud par un fichier de donnees qui inclue les coefficients

valid :    fonctions de validation

      	   double calcul_eps(void);
	   calcule la precision machine

	   complexe complexaleat(void);
	   cree un complexe de facon aleatoire

	   coeff_s coeffaleat(void);
	   cree des coefficients de facon aleatoires

	   void valid_inversec(int, double);
	   fonction de validation de inverse_c

	   void valid_signec(int, double);
	   fonction de validation de signe_c

	   void valid_modulec(int, double);
	   fonction de validation de module_c

	   void valid_produitc(int, double);
	   fonction de validation de produit_c

	   void valid_quotientc(int, double);
	   fonction de validation de quotient_c

	   void valid_racinec(int, double);
	   fonction de validation de racine_c

	   void valid_sommec(int, double);
	   fonction de validation de somme_c

	   void valid_resd(int, double);
	   fonction de validation de resd

	   void valid_repd(int, double);
	   fonction de validation de repd

	   void valid_distancec(int, double);
	   fonction de validation de distance_c

--------------------------------------------------------------------------------
3. Compilation

Voici les commandes a executer pour compiler et/ou executer le projet dans un terminal ou une console :

Commande simple : make
Puis executer le programme principal avec ./main
Supprimer les fichiers objets temporaires avec rm *.o

Commande propre (Compilation + suppression des fichiers objets temporaires) : make && make clean
Puis executer le programme principal avec ./main

Commande totale (Compilation + suppression des fichiers objets temporaires + execution) : make && make clean && make run
