fonction polynome

fonction polynome - C - Programmation

Marsh Posté le 11-04-2007 à 13:44:49    

Voila je suis débutant en programmation, j'ai essayer de faire un programme qui calcul les solution d'un poly du second degré
voici le code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "inf101.h"
#include <math.h>
 double poly(int a, int b, int c)
{
int f= 2*a;
int d;
int e =b*b-4*a*c ;
 {
if(e>0)
   d = sqrt(e);
 }
 return (-b+d)/f;
}
 
int main(void)
{
  printf("taper trois valeur a,b et c pour avoir un poly de type ax*x + bx + c:\n" );
int a=lire_flottant();
 int b=lire_flottant();
 int c=lire_flottant();
 printf("votre polynome est %dx*x + %dx + %d:\n", a, b, c);
 printf("les solutions sont :%f", poly(a,b,c));
}
 
le programme ce compile parfaitement mais par exemple si je prend 4x²+ 8x +2 il maffiche tout le temp comme solution 0.000000

Reply

Marsh Posté le 11-04-2007 à 13:44:49   

Reply

Marsh Posté le 11-04-2007 à 13:50:09    

Il semble que ce soit un petit problème de conversion enter les entiers et les doubles.
Les conversions sont rarement automatiques en C. Il faut les indiquer.
Dans ce programme, je mettrais toutes les variables en double pour ne pas avoir de soucis, d'autant plus que de nos jours, avec les co-processeurs arithmétiques déjà inclus dans les microprocesseurs ordinaires, le gain de temps du traitement d'un entier par rapport à un double n'est plus du tout sensible.

Reply

Marsh Posté le 11-04-2007 à 13:50:59    

donc par exemple au lieu de metre int a je met double a ?

Reply

Marsh Posté le 11-04-2007 à 13:57:48    

Oui, mais en fait, c'est surtout dans la fonction poly() qu'il faut des doubles. Je comprends que les coefficients soient des entiers.


double poly(int a, int b, int c)  
{  
double f = 2.0 * (double)(a);  
double d;  
double e = (double)(b) * (double)(b) - 4.0 * (double)(a) * (double)(c) ;  
if (e > 0.0)  
   d = sqrt(e);  
else
   return(9999999999.9);  
 return (-1.0 * (double)(b) + d) / f;  
}


Message édité par olivthill le 11-04-2007 à 14:03:14
Reply

Marsh Posté le 11-04-2007 à 14:15:51    

je test sa desuite merci

Reply

Marsh Posté le 11-04-2007 à 14:26:40    

arf tjs pas un polynome come 3x² + 4x + 1
il me met -0.33333 comme solution :(

Reply

Marsh Posté le 11-04-2007 à 14:29:30    

tu devrais initialiser ton d à 0...


Message édité par did-54 le 11-04-2007 à 14:29:42
Reply

Marsh Posté le 11-04-2007 à 14:30:42    

-1/3 ne serait pas racine de ton polynome ?


---------------
Töp of the plöp
Reply

Marsh Posté le 11-04-2007 à 14:31:31    

j'ai essayer mais sa affiche toujours pareille

Reply

Marsh Posté le 11-04-2007 à 14:32:53    

-1/3 est solution oui

Reply

Marsh Posté le 11-04-2007 à 14:32:53   

Reply

Marsh Posté le 11-04-2007 à 14:33:23    

ah ouai lol désolé j'avais pas vu merci.
autre question: comment je peux intégré l'autre solution dans la fonction à savoir -b-d/f ?  


Message édité par fabsolute le 11-04-2007 à 14:35:16
Reply

Marsh Posté le 11-04-2007 à 14:34:48    

et si a == 0 ?

Reply

Marsh Posté le 11-04-2007 à 14:35:15    

ouais mais même, initialise ton d à 0 :)
Au moins tu es sur qu'il contient 0, et pas -878792 :o

Reply

Marsh Posté le 11-04-2007 à 14:35:28    

_darkalt3_ a écrit :

-1/3 ne serait pas racine de ton polynome ?


et comment à utiliser des coefficients double plutot que de caster 1000x

Reply

Marsh Posté le 11-04-2007 à 14:39:55    

autre question: comment je peux intégré l'autre solution dans la fonction à savoir -b-d/f ?  
et comment je peux avoir la solution sous forme de fraction ?

Reply

Marsh Posté le 11-04-2007 à 15:20:19    

fabsolute a écrit :

autre question: comment je peux intégré l'autre solution dans la fonction à savoir -b-d/f ?  
et comment je peux avoir la solution sous forme de fraction ?


Tu ne peux pas avoir la solution sous forme de fraction. Il n'existe pas de type "fraction" en "C".
Mais rien ne t'empêche de créer ce type puis l'utiliser (c'est à dire créer les fonctions qui permettent d'additionner/soustraire/multiplier/diviser 2 fractions puis utiliser ces fonctions dès que t'en as besoin)
 
Ex:

typedef struct {
    int num;
    int den;
} t_fraction;
 
void add(t_fraction *f1, t_fraction *f2, t_fraction *res}
{
    int div;
    res->num=f1->num * f2->den + f2->num * f1->den;
    res->den=f1->den * f2->den;
    div=pgcd(res->num, res->den);
    res->num/= div;
    res->den/=div;
}
 
int pgcd(int num, int den)
{
    int x, y, calc;
    if (num > den)
    {
        x=num;
        y=den;
    }
    else
    {
        x=den;
        y=num;
    }  
     
    while (y != 0)
    {
        calc=x%y;
        x=y;
        y=calc;
    }
 
    return x;
}
int main()
{
    t_frac a, b, res;
    a.num=5;
    a.den=2;
    b.num=17;
    b.res=5;
    additionner(&a, &b, &res);
    printf("res=%d/%d\n", res.num, res.den);
    return 0;
}


 
Bon, ceci n'est qu'une ébauche pas vraiment optimisée. Il serait plus judicieux par exemple d'essayer de réduire les fractions avant de les additionner. On peut aussi gérer les négatifs, et plein d'autres trucs encore mais c'est pour que tu comprennes bien le principe. Bienvenue dans le C, le langage où il te faut d'abord créér les outils dont t'as besoin avant de pouvoir les utiliser...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 11-04-2007 à 15:20:45    

Reply

Marsh Posté le 11-04-2007 à 15:22:04    

euh les fractions t'es gentil avec, mais à résoudre des trinômes, t'as quand même pas mal de chance de tomber sur des irrationels ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed