From fba43d28682567fc21512b1a87ad045723cf06e9 Mon Sep 17 00:00:00 2001 From: Pixel Date: Wed, 2 May 2001 01:41:15 +0000 Subject: Blah --- lib/polynom.c | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) (limited to 'lib/polynom.c') diff --git a/lib/polynom.c b/lib/polynom.c index 8478531..472eb24 100644 --- a/lib/polynom.c +++ b/lib/polynom.c @@ -222,21 +222,52 @@ polynome ply_multiplication(polynome poly1, polynome poly2) return resultat; } -polynome ply_division(polynome poly1, polynome poly2) +polynome ply_division(polynome dividende, polynome diviseur) { /* division de deux polynomes */ - polynome result = NULL; - - - return result; - - + polynome interdividende = dividende, interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; + + printf("On divise %s", ply_affichage(dividende)); + printf("par %s\n", ply_affichage(diviseur)); + printf("interdividende degre = %u\n", interdividende->degre); + printf("diviseur degre = %u\n", diviseur->degre); + while ((interdividende) && (interdividende->degre >= diviseur->degre)) { + inter = ply_constr(rat_division(dividende->coef, diviseur->coef), dividende->degre - diviseur->degre); + printf("On trouve qu'il nous faut soustraire %s fois\n", ply_affichage(inter)); + r = ply_addition(resultat, inter); + printf("Resultat intermédiaire %s\n", ply_affichage(r)); + interdiviseur = ply_multiplication(diviseur, inter); + printf("On soustrait donc %s\n", ply_affichage(interdiviseur)); + reste = ply_soustraction(interdividende, interdiviseur); + printf("Reste intermédiaire %s\n", ply_affichage(reste)); + ply_destruct(resultat); + ply_destruct(inter); + ply_destruct(interdividende); + ply_destruct(interdiviseur); + resultat = r; + interdividende = reste; + } + + return resultat; } -polynome ply_modulo(polynome poly1, polynome poly2) +polynome ply_modulo(polynome dividende, polynome diviseur) { /* reste de la division de deux polynomes */ - polynome result = NULL; + polynome interdividende = dividende, interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; - return result; + while (interdividende->degre >= diviseur->degre) { + inter = ply_constr(rat_division(dividende->coef, diviseur->coef), dividende->degre - diviseur->degre); + interdiviseur = ply_multiplication(diviseur, inter); + r = ply_addition(resultat, inter); + reste = ply_soustraction(interdividende, interdiviseur); + ply_destruct(resultat); + ply_destruct(inter); + ply_destruct(interdividende); + ply_destruct(interdiviseur); + resultat = r; + interdividende = reste; + } + + return reste; } polynome ply_exposant(polynome poly, unsigned int exp) -- cgit v1.2.3