#1 Le 01/09/2006, à 23:06
- Renault
[Résolu] [C - Pythagore] Résultats éronnés
Bonjour,
J'ai cherché dans divers sites spécialisés dont ici mais sans succès. Je me remets doucement à la programmation avec un logiciel utilisant le Théorème de Pythagore. La compilation se passe sans erreur, jusqu'ici tout à l'air bon. Mais quand je commence à l'employer les calculs sont inexactes, il renvoi une valeur type -45687445 voir 0 mais rien ressemblant à un calcul normal (j'ai utilisé la règle du 3 4 5 pour vérifié si ça marchait).
Donc j'aimerais savoir où est le problème. Pour la peine je vous donne le code source (sous licence GPL donc vous gênez pas).
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
long choixTheoreme = 0, refaire = 0;
double hypothenuse2 = 0, longueur1 = 0, longueur3 = 0, longueur4 = 0, longueur5 = 0, longueur2 = 0, hypothenuse = 0, longueur6 = 0;
//Présentation
do
{
printf("Bienvenue dans Theoreme of Pythagore version 0.1\n");
printf("De Charles-Antoine Couret, sous licence GPL\n");
// On fait choisir le programme à l'utilisateur
printf("Choisissez le cas d'utilisation du Theoreme de Pythagore (tapez le numero correspondant)\n\n");
printf("1-Caluler la longueur de l'hypothenuse\n");
printf("2-Calculer la longueur d'un cote du triangle rectangle\n");
printf("3-Definir si le triangle est droit\n");
printf("\nVotre choix ? ");
scanf("%ld", &choixTheoreme);
switch (choixTheoreme)
{
case 1:
printf("Selectionner la longueur d'un cote du triangle rectangle: ");
scanf("%f", &longueur1);
printf("Selectionner la longueur de l'autre cote du triangle rectangle: ");
scanf("%f", &longueur2);
longueur3 = longueur1 * longueur1;
longueur4 = longueur2 * longueur2;
longueur6 = longueur3 + longueur4;
hypothenuse = sqrt(longueur6);
printf("L'hypothenuse mesure %d cm.\n", hypothenuse);
break;
case 2:
printf("Selectionner la longueur de l'hypothenuse: ");
scanf("%f", &hypothenuse);
printf("Selectionner la longueur d'un cote du triangle rectangle: ");
scanf("%f", &longueur1);
longueur3 = longueur1 * longueur1;
hypothenuse2 = hypothenuse * hypothenuse;
longueur6 = hypothenuse2 - longueur3;
longueur2 = sqrt(longueur6);
printf("Le cote mesure %d cm.\n", longueur2);
break;
case 3:
printf("Selectionner la longueur de l'hypothenuse: ");
scanf("%f", &hypothenuse);
printf("Selectionner la longueur d'un cote du triangle rectangle: ");
scanf("%f", &longueur1);
printf("Selectionner la longueur de l'autre cote du triangle rectangle: ");
scanf("%f", &longueur2);
longueur3 = longueur1 * longueur1;
longueur4 = longueur2 * longueur1;
longueur5 = longueur3 + longueur4;
hypothenuse2 = hypothenuse * hypothenuse;
if (longueur5 == hypothenuse2)
printf("Le triangle est rectangle.\n");
else
printf("Le triangle n'est pas rectangle.\n");
break;
default:
printf("Vous n'avez pas selectionner un numero correct, choix incorrect, ressaisissez un numero correct.\n");
}
printf("Voulez-vous reutiliser le programme ? (tapez 1 ou 2 uniquement)\n");
printf("1-Oui\n");
printf("2-Non\n");
printf("Votre choix ? ");
scanf("%d", &refaire);
} while (refaire==1);
return 0;
getchar();
}
J'admets que mon code n'est pas très jolie et qu'il y a des surplus dans les calculs mais je trouve ça plus facile ...
J'ai compiler avec la commande:
gcc main.c -o main -lm
Voilà vous savez tout à présent, j'espère qu'il y a une solution, je vous en remercie d'avance en espérant que ça sera corrigé.
Dernière modification par Renault (Le 02/09/2006, à 14:05)
Ambassadeur — Testeur — Traducteur de Fedora.
Rédacteur de la documentation française de Fedora.
Membre de l'AFUL, APRIL, Linux Foundation et membre du Conseil d'Administration de Fedora-fr.
Président du Club de l'ISEN sur les Logiciels Libres (CILL).
Hors ligne
#2 Le 02/09/2006, à 08:32
- trucutu
Re : [Résolu] [C - Pythagore] Résultats éronnés
Vu que tu fais des scanf assez souvent, est-ce que tu as contrôlé la valeur des grandeurs que tu lui fourni, une par une ?
La chanson du dimanche - "La pêche !"
PC acheté chez Novatux : entièrement satisfait.
Faire des recherches solidaires !
Hors ligne
#3 Le 02/09/2006, à 09:07
- bergi
Re : [Résolu] [C - Pythagore] Résultats éronnés
il faut vider le buffer après de scanf de mémoire : fflush(stdin);
Hors ligne
#4 Le 02/09/2006, à 14:05
- Renault
Re : [Résolu] [C - Pythagore] Résultats éronnés
Vu que tu fais des scanf assez souvent, est-ce que tu as contrôlé la valeur des grandeurs que tu lui fourni, une par une ?
Merci, j'ai trouvé le problème qui était dans les scanf et la donne du résultat, j'ai mis %f au lieu de %lf et pour la réponse il fallait mettre %f au lieu de %d. En tout cas tout fonctionne et je vous en remercie.
Les erreurs de débutants.
Ambassadeur — Testeur — Traducteur de Fedora.
Rédacteur de la documentation française de Fedora.
Membre de l'AFUL, APRIL, Linux Foundation et membre du Conseil d'Administration de Fedora-fr.
Président du Club de l'ISEN sur les Logiciels Libres (CILL).
Hors ligne