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

  FORUM HardWare.fr
  Programmation
  C

  [C] programme cherche les racines des polynomes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] programme cherche les racines des polynomes

n°2106613
poneyz
Posté le 16-10-2011 à 16:09:35  profilanswer
 

Salut,
 
voila je débute en C et j'ai essayer de faire pour m'amuser (je sais qu'il y a plus ludique mais bon) un programme qui trouverais la valeur des racines qui annule un polynôme du second degrés.
J'ai déjà écrit une bonne partie du code sous code blocks j'ai choisi comme type de projet console application (je sais pas si cette précision est pertinente)  
 
voici mon code

Code :
  1. #include<stdio.h>
  2. int main(int argc, char *argv[])
  3. {
  4.     int a = 0;
  5.     int b = 0;
  6.     int c = 0;
  7.     int delta = 0;
  8.     int x1 = 0;
  9.     int x2 = 0;
  10.     #define quatre = 4
  11.     #define j = 'j'
  12. // on demande les coefs pour delta
  13.     printf("entrez A : " );
  14.     scanf("%d",a);
  15.     printf("entrez B : " );
  16.     scanf("%d",b);
  17.     printf("entrez C : " );
  18.     scanf("%d",c);
  19. // on calcule delta
  20.     delta=(b*b)-4*a*c;
  21. // on fait une boucle pour chercher les racines
  22.     if(delta=0)
  23.     {
  24.         x1=(-b)/(2*a);
  25.         x2=(-b)/(2*a);
  26.     }
  27.     else if(delta>0)
  28.     {
  29.         x1=((-b)+sqrt(delta))/(2*a);
  30.         x2=((-b)-sqrt(delta))/(2*a);
  31.    }
  32.    else if(delta<0)
  33.    {
  34.        x1=(-b)/(2*a) + sqrt(fabs(delta))/(2*a);
  35.        x2=(-b)/(2*a) - sqrt(fabs(delta))/(2*a);
  36.    }
  37.    printf("les racines sont \n X1 = %d \n X2 = %d \n", x1,x2 );
  38.    return 0;
  39. }

 
 
mais voila quand je le compile et l’exécute grâce au bouton prévus par code blocks , la console me demande d'entrer A ce que je fait puis mon programme crash quelqu'un a une idée?
 
merci d'avance

mood
Publicité
Posté le 16-10-2011 à 16:09:35  profilanswer
 

n°2106615
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 16-10-2011 à 16:18:09  profilanswer
 

 printf("entrez A : " );
    scanf("%d",a);
    printf("entrez B : " );
    scanf("%d",b);
    printf("entrez C : " );
    scanf("%d",c);
 
C'est faux:
 
  printf("entrez A : " );
    scanf("%d",&a);
    printf("entrez B : " );
    scanf("%d",&b);
    printf("entrez C : " );
    scanf("%d",&c);
 
Devrait mieux marcher


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°2106635
poneyz
Posté le 16-10-2011 à 21:08:17  profilanswer
 

oui merci beaucoup  
 
pour mon next problème c'est que j'aimerais avoir la valeur exacte des racine j'ai donc passer x1 x2 et delta en float mais ca me donne des valeurs aberrante  
 
et ma deuxieme question c'est que parfois je ne peux pas utiliser le debugger de code blocks tout est griser pourquoi ?  
 
merci d'avance

n°2106653
Sve@r
Posté le 17-10-2011 à 00:40:38  profilanswer
 

poneyz a écrit :

pour mon next problème c'est que j'aimerais avoir la valeur exacte des racine j'ai donc passer x1 x2 et delta en float mais ca me donne des valeurs aberrante  
 

Code :
  1. x1=(-b)/(2*a);
  2. x2=(-b)/(2*a);

 


Salut
 
Le problème, c'est que le calcul se fait dans la précision de l'opérande le plus large impliqué. Or a et b étant des int, le calcul se fait en int et le résultat (entier) est ensuite copié dans x1 et x2 mais c'est trop tard, tu as déjà perdu les décimales

Code :
  1. x1=(-b)/(2.0*a);
  2. x1=(-b)/(2.0*a);

 
Avec un double impliqué (2.0), le calcul se fera en précision double.
 
Attention, il faut bien comprendre que le calcul se fait avec la précision des opérandes strictement impliqués par chaque opération et non dans la précision de l'opérande le plus large qu'on peut trouver dans le calcul. Exemple

Code :
  1. float f=5 / 2 + 3.0


La division étant prioritaire, le premier calcul sera 5/2 et se fera donc en précision int (le 3.0 n'étant pas impliqué ne sera pas pris en compte). Le résultat sera alors en int (2) et sera ensuite additionné à 3.0 pour donner 5.0 ce qui ne correspond pas au résultat espéré (5.5)
 

poneyz a écrit :

et ma deuxieme question c'est que parfois je ne peux pas utiliser le debugger de code blocks tout est griser pourquoi ?


Alors là...
 
PS: inutile de passer par fabs() quand delta < 0. Puisque delta est <0, te suffit de prendre -delta. Plus rapide quoi. Toutefois, dans ce cas là, le polynôme n'a pas de racine réelle donc ce que tu affiches est faux...


Message édité par Sve@r le 17-10-2011 à 00:48:29

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°2106695
poneyz
Posté le 17-10-2011 à 11:56:16  profilanswer
 

Salut,
 
merci beaucoups pour toute ces précision je comprend mieux maintenant merci encore  
 
PS si tu veux dire que pour le delta <0 les racines sont complexe je le savais mais j ai juste voulu voir si ça marchais je rajouterais le j après.
 il manque encore pas mal de truc nottament vérifier que la saissi par l utilisateur de a b et c soient bien des nombres et non des lettres
 

n°2106815
Sve@r
Posté le 17-10-2011 à 21:30:06  profilanswer
 

poneyz a écrit :

il manque encore pas mal de truc nottament vérifier que la saissi par l utilisateur de a b et c soient bien des nombres et non des lettres


Code :
  1. char saisie[80];
  2. int nb;
  3. while (1)
  4. {
  5.     printf("Saisissez un nombre: " ), fflush(stdout);
  6.     fgets(saisie, 80, stdin);
  7.     if (sscanf(saisie, "%d", &nb) == 1) break;
  8.     printf("Saisie erronée, %s n'est pas un nombre - Recommencez\n", saisie);
  9. }


 


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

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

  [C] programme cherche les racines des polynomes

 

Sujets relatifs
[C] trouver la longueur de la plus longue suite decroissante en CC++, Compter des caractères ...
[Python] Aide pour un programme de débutantLinux C/C++ broadcast UDP sur machine sans gateway
Convolution de 2 tableaux unidimensionnels avec FFTW C++Dessiner graphe via un programme C++
faire un programme qui s'execute cotée serveurCore dumped en C
Plus de sujets relatifs à : [C] programme cherche les racines des polynomes


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