Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
888 connectés 

  FORUM HardWare.fr
  Programmation
  C

  fonction polynome

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction polynome

n°1541292
fabsolute
Posté le 11-04-2007 à 13:44:49  profilanswer
 

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

mood
Publicité
Posté le 11-04-2007 à 13:44:49  profilanswer
 

n°1541296
olivthill
Posté le 11-04-2007 à 13:50:09  profilanswer
 

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.

n°1541298
fabsolute
Posté le 11-04-2007 à 13:50:59  profilanswer
 

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

n°1541301
olivthill
Posté le 11-04-2007 à 13:57:48  profilanswer
 

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
n°1541308
fabsolute
Posté le 11-04-2007 à 14:15:51  profilanswer
 

je test sa desuite merci

n°1541316
fabsolute
Posté le 11-04-2007 à 14:26:40  profilanswer
 

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

n°1541319
did-54
Posté le 11-04-2007 à 14:29:30  profilanswer
 

tu devrais initialiser ton d à 0...


Message édité par did-54 le 11-04-2007 à 14:29:42
n°1541321
_darkalt3_
Proctopathe
Posté le 11-04-2007 à 14:30:42  profilanswer
 

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


---------------
Töp of the plöp
n°1541322
fabsolute
Posté le 11-04-2007 à 14:31:31  profilanswer
 

j'ai essayer mais sa affiche toujours pareille

n°1541324
fabsolute
Posté le 11-04-2007 à 14:32:53  profilanswer
 

-1/3 est solution oui

mood
Publicité
Posté le 11-04-2007 à 14:32:53  profilanswer
 

n°1541325
fabsolute
Posté le 11-04-2007 à 14:33:23  profilanswer
 

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
n°1541329
Taz
bisounours-codeur
Posté le 11-04-2007 à 14:34:48  profilanswer
 

et si a == 0 ?

n°1541330
did-54
Posté le 11-04-2007 à 14:35:15  profilanswer
 

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

n°1541331
Taz
bisounours-codeur
Posté le 11-04-2007 à 14:35:28  profilanswer
 

_darkalt3_ a écrit :

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


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

n°1541337
fabsolute
Posté le 11-04-2007 à 14:39:55  profilanswer
 

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 ?

n°1541366
Sve@r
Posté le 11-04-2007 à 15:20:19  profilanswer
 

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.
n°1541368
Taz
bisounours-codeur
Posté le 11-04-2007 à 15:20:45  profilanswer
 
n°1541370
Taz
bisounours-codeur
Posté le 11-04-2007 à 15:22:04  profilanswer
 

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 ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  fonction polynome

 

Sujets relatifs
[javascript] page précédente et rechargement de fonctionHauteur des cellules en fonction de leurs valeurs?
fonction qui retourne un pointeur[VBS] [résolu]Pb avec fonction STRCOMP
appliquer une fonction js a toutes balises inputFonction mysql_fetch_assoc
fonction avec table hash en parametreErreur d'accès ambigu à une fonction membre après dérivation multiple
comment utiliser cette fonctionFonction pour écrire un DWORD dans la base de registre avec VB6
Plus de sujets relatifs à : fonction polynome


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR