From 2160d5e1b4e0651ec0dc4ac8f27decc57cf1a8cb Mon Sep 17 00:00:00 2001 From: Pixel Date: Wed, 2 May 2001 02:15:48 +0000 Subject: Hop --- lib/interface.c | 2 ++ lib/pile.c | 2 +- lib/polynom.c | 40 ++++++++++++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/interface.c b/lib/interface.c index 001c01d..e3fbe7a 100644 --- a/lib/interface.c +++ b/lib/interface.c @@ -16,6 +16,8 @@ void supprime(char * ch) { void inserer(char * ch, char c) { int i; + ch[strlen(ch) + 1] = '\0'; + for (i = strlen(ch) - 1; i != -1; i--) { *(ch + i + 1) = *(ch + i); } diff --git a/lib/pile.c b/lib/pile.c index 6459019..02a418a 100644 --- a/lib/pile.c +++ b/lib/pile.c @@ -55,7 +55,7 @@ void push_pile(char *st) pushcontext(_("it's a name")); if (*st == '\'') { st++; - st[strlen(st) + 1] = 0; + st[strlen(st) - 1] = 0; } push_pile_string(Estrdup(st)); popcontext(); diff --git a/lib/polynom.c b/lib/polynom.c index 472eb24..99c5a75 100644 --- a/lib/polynom.c +++ b/lib/polynom.c @@ -224,21 +224,31 @@ polynome ply_multiplication(polynome poly1, polynome poly2) polynome ply_division(polynome dividende, polynome diviseur) { /* division de deux polynomes */ - polynome interdividende = dividende, interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; + polynome interdividende = ply_copy(dividende), interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; +#ifdef DEBUG 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); +#endif while ((interdividende) && (interdividende->degre >= diviseur->degre)) { - inter = ply_constr(rat_division(dividende->coef, diviseur->coef), dividende->degre - diviseur->degre); + inter = ply_constr(rat_division(interdividende->coef, diviseur->coef), interdividende->degre - diviseur->degre); +#ifdef DEBUG printf("On trouve qu'il nous faut soustraire %s fois\n", ply_affichage(inter)); +#endif r = ply_addition(resultat, inter); +#ifdef DEBUG printf("Resultat intermédiaire %s\n", ply_affichage(r)); +#endif interdiviseur = ply_multiplication(diviseur, inter); +#ifdef DEBUG printf("On soustrait donc %s\n", ply_affichage(interdiviseur)); +#endif reste = ply_soustraction(interdividende, interdiviseur); +#ifdef DEBUG printf("Reste intermédiaire %s\n", ply_affichage(reste)); +#endif ply_destruct(resultat); ply_destruct(inter); ply_destruct(interdividende); @@ -252,13 +262,31 @@ polynome ply_division(polynome dividende, polynome diviseur) polynome ply_modulo(polynome dividende, polynome diviseur) { /* reste de la division de deux polynomes */ - polynome interdividende = dividende, interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; + polynome interdividende = ply_copy(dividende), interdiviseur = NULL, inter = NULL, reste = dividende, resultat = NULL, r = NULL; - while (interdividende->degre >= diviseur->degre) { - inter = ply_constr(rat_division(dividende->coef, diviseur->coef), dividende->degre - diviseur->degre); - interdiviseur = ply_multiplication(diviseur, inter); +#ifdef DEBUG + 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); +#endif + while ((interdividende) && (interdividende->degre >= diviseur->degre)) { + inter = ply_constr(rat_division(interdividende->coef, diviseur->coef), interdividende->degre - diviseur->degre); +#ifdef DEBUG + printf("On trouve qu'il nous faut soustraire %s fois\n", ply_affichage(inter)); +#endif r = ply_addition(resultat, inter); +#ifdef DEBUG + printf("Resultat intermédiaire %s\n", ply_affichage(r)); +#endif + interdiviseur = ply_multiplication(diviseur, inter); +#ifdef DEBUG + printf("On soustrait donc %s\n", ply_affichage(interdiviseur)); +#endif reste = ply_soustraction(interdividende, interdiviseur); +#ifdef DEBUG + printf("Reste intermédiaire %s\n", ply_affichage(reste)); +#endif ply_destruct(resultat); ply_destruct(inter); ply_destruct(interdividende); -- cgit v1.2.3