Bonjour
Actuellement je souhaite créer un programme qui calcule les équations du second degré mais je rencontre quelques problèmes sur mes résultats et je ne comprends pas pourquoi.
Voici mon code :
Quand je rentre comme argument "1" "12" "1" (a = 1, b = 12, c = 1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 /* Pour afficher un charactère */ void....display(char c) { write(1, &c, 1); } /* Pour afficher un nombre */ int.....put_nbr(int nb) { if (nb == -2147483647) { write(1, "-2147483647", 11); return (0); } if (nb < 0) { display('-'); nb *= -1; } if (nb > 9) { put_nbr(nb / 10); put_nbr(nb % 10); } else display(nb + '0'); return (0); } /* Calcule la racine carré */ int.....square_root(int nb) { int...r; int...i; i = 1; r = 1; if (nb == 1) return (1); while (i < nb && i <= 46340 && nb < 2147483647) { r = nb - (i * i); if (r == 0) return (i); else if (r < 0) return (0); i++; } return (r); } void....equation(int *a, int *b, int *c) { int...D; int...D2; int...r1; int...r2; D = (*b * (*b)) - (4 * (*a) * (*c)); D2 = D; if (D == 0) { r1 = ((-*b) / (2 * (*a))); put_nbr(r1); display('\n'); } if (D > 0) { r1 = (-*b - sqrt(D)) / (2 * *a); r2 = (-*b + sqrt(D2)) / (2 * *a); put_nbr(r1); display('\n'); put_nbr(r2); } if (D < 0) display('0'); }
J'ai un discriminant de 140 > 0 donc normalement deux solutions qui sont censées être -11,9 (racine 1) et -0,08 (racine 2) environ. (vu que mes fonctions sont en int, les résultats devraient être arrondis si je ne dis pas de bêtises).
Mais mon programme me renvoie -6 pour chaque solution.
Une idée ?
Merci.
Partager