| Worms 4 Tweaking Le tweaking ou comment créer ses armes au delà de l'usine d'armes |
|
| Mon rectangle ne tourne pas rond... | |
| | Auteur | Message |
---|
Hotman Membre
Nombre de messages : 771 Age : 31 Localisation : Ca sent la croquette..... Date d'inscription : 23/08/2006
| Sujet: Mon rectangle ne tourne pas rond... Mer 30 Sep 2009, 20:18 | |
| Bon, j'ai un problème avec un code apparemment tout simple, mais pour un profane comme moi, bin ça bloque à un endroit, alors voilà le code : - Code:
-
#include <stdio.h> #include <stdlib.h> #include <math.h>
double x = 0, y = 0 ; double perim(double x , double y); double aire (double x , double y); double diagonale (double x, double y) ;
int main(int argc, char *argv[]) { int selection = 0 ;
puts ("\n Bienvenue sur perimaire."); printf("\n === Menu ==="); printf("\n 1 - Calcule du perimetre d'un rectangle"); printf("\n 2 - Calcule de l'aire d'un rectangle"); printf("\n 3 - Calculer la diagonale d'un rectangle"); printf("\n 4 - Sortir") ; printf("\n Entrez votre choix : "); scanf("%d", &selection);
switch(selection) { case 1: { double resultat = 0; printf("\n Vous voulez calculer le perimetre"); printf("\n Entrez la longueur du rectangle : "); scanf ("%fl", &x); printf("\n Entrez la largueur du rectangle : "); scanf("%fl", &y);
resultat = perim(x ,y ) ;
printf("\n Le perimetre du rectangle est de %f cm\n", resultat); system ("PAUSE"); break; } case 2: { double resultat = 0 ; printf("\n Vous voulez calculez l'aire d'un rectangle"); printf("\n Entrez la longueur du rectangle : "); scanf("%fl", &x); printf("\n Entrez la largeur : "); scanf("%fl", &y);
resultat = aire (x , y) ;
printf("\n L'aire du rectangle est de %f cm", resultat); break; } case 3: { double resultat = 0 ; printf("\n Vous voulez calculez la diagonale d'un rectangle"); printf("\n Entrez la longueur du rectangle: "); scanf("%fl", &x); printf("\n Entrez la largeur : "); scanf("%fl", &y);
resultat = diagonale(x , y) ;
printf("\n La diagonale du rectangle est de %f cm", resultat); break; } case 4: { printf("\n A bientot"); break; } default: printf("\n Oups ! Choix incorect.");
exit(EXIT_SUCCESS); }
} double perim (double x, double y) {
return (x + y)*2;
}
double aire(double x, double y) {
return x*y ; }
double diagonale (double x,double y) { double diagonale1 = 0;
diagonale1 = (sqrt (x)) + (sqrt (y)); diagonale1 = diagonale1*diagonale1 ; return diagonale1 ; }
Il permet de calculer divers truc dans un rectangle seulement voilà, un problème ce pose, c'est que lorsque je veut calculer des entiers, pas de problème, je met toute les variables en "int" et ça marche impec, mais dès que je veut calculer des décimaux, je remplace tout les "int" par "double", les "%d" par "%f" (ou "%fl" pour les scanf), mais là, les calculs me renvoient tout le temps le même resultat, sois 0.00000... La moitié du code n'est pas de moi, je me suis juste occupé d'aider une personne à corriger ses problèmes, mais j'ai pas pus m'empêcher de faire tout un tas de modifs notamment rajouter la possibilité de calculer la diagonale. Et je veux aussi rendre possible les calculs avec des décimaux ,seulement avec mon problème, impossible pour le moment...Enfin bref, je trouve pas mon erreur, je demande donc de l'aide à un codeur qui passerait par là.... . | |
| | | _Kilburn Admin
Nombre de messages : 1118 Age : 33 Localisation : data\\Tweak\\ Date d'inscription : 25/05/2006
| Sujet: Re: Mon rectangle ne tourne pas rond... Mer 30 Sep 2009, 21:40 | |
| Hé bien, ça m'a pris un bon bout de temps pour trouver parce que je suis habitué à utiliser scanf et printf. En fait, c'est %lf et non %fl pour entrer un double. En passant, le programme est horriblement indenté, et y'a des variables déclarées un peu partout où elles ne devrait pas être, comme x et y qui sont déclarées en dehors de main(), ce qui n'a aucun intérêt (d'ailleurs, il pourrait y avoir confusion avec les paramètres x et y de chaque fonction). Ensuite, resultat. A quoi bon le déclarer dans chaque case du switch (ce qui engendre une erreur du genre "cross initialization" si on met pas les accolades) quand tu peux tout simplement le déclarer une fois au début de main(). Finalement, il faut obligatoirement un return 0; à la fin de la fonction main. La partie exit(EXIT_SUCCESS) ne sert à rien ici parce que dès que tu quittes la fonction main, le programme se termine. EXIT_SUCCESS en lui même ne sert à rien, c'est une définition qui équivaut à 0, donc tout le monde utilise en général return 0; Et puis c'est quoi cette fonction diagonale, on a oublié le théorème de Pythagore ? - Code:
-
#include <stdio.h> #include <stdlib.h> #include <math.h>
double perim(double x , double y); double aire (double x , double y); double diagonale (double x, double y) ;
int main(int argc, char *argv[]) { int selection; double x, y, resultat;
printf("\n Bienvenue sur perimaire."); printf("\n === Menu ==="); printf("\n 1 - Calcule du perimetre d'un rectangle"); printf("\n 2 - Calcule de l'aire d'un rectangle"); printf("\n 3 - Calculer la diagonale d'un rectangle"); printf("\n 4 - Sortir") ; printf("\n Entrez votre choix : "); scanf("%d", &selection);
switch(selection) { case 1: printf("\n Vous voulez calculer le perimetre"); printf("\n Entrez la longueur du rectangle : "); scanf ("%lf", &x); printf("\n Entrez la largueur du rectangle : "); scanf("%lf", &y); resultat = perim(x, y); printf("\n Le perimetre du rectangle est de %f cm\n", resultat); break; case 2: printf("\n Vous voulez calculez l'aire d'un rectangle"); printf("\n Entrez la longueur du rectangle : "); scanf("%lf", &x); printf("\n Entrez la largeur : "); scanf("%lf", &y); resultat = aire(x, y); printf("\n L'aire du rectangle est de %f cm", resultat); break; case 3: printf("\n Vous voulez calculez la diagonale d'un rectangle"); printf("\n Entrez la longueur du rectangle: "); scanf("%lf", &x); printf("\n Entrez la largeur : "); scanf("%lf", &y); resultat = diagonale(x, y); printf("\n La diagonale du rectangle est de %f cm", resultat); break; case 4: printf("\n A bientot"); break; default: printf("\n Oups ! Choix incorect."); } system("PAUSE"); return 0; }
double perim (double x, double y) { return (x + y)*2; }
double aire(double x, double y) { return x*y ; }
double diagonale(double x,double y) { return sqrt(x*x + y*y); } | |
| | | Hotman Membre
Nombre de messages : 771 Age : 31 Localisation : Ca sent la croquette..... Date d'inscription : 23/08/2006
| Sujet: Re: Mon rectangle ne tourne pas rond... Mer 30 Sep 2009, 22:19 | |
| Comme je le disais, les 3/4 du code sont pas de moi, jamais j'aurais utilisé de case/break déjà, j'ai horreur de ce truc, et puis mon théorème de Pythagore est bel et bien pourrit ( faut vraiment que je me remette à bosser mes maths...) . Bref, merci ^^, c'était tout bête. | |
| | | Contenu sponsorisé
| Sujet: Re: Mon rectangle ne tourne pas rond... | |
| |
| | | | Mon rectangle ne tourne pas rond... | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|