Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/09/2006, à 00: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). wink

#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é. smile

Dernière modification par Renault (Le 02/09/2006, à 15: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, à 09: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, à 10: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, à 15:05

Renault

Re : [Résolu] [C - Pythagore] Résultats éronnés

trucutu a écrit :

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

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