Je cherche le rayon d'une sphere ou le volume est donner

Fermé
hassine - 5 nov. 2013 à 01:18
Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 - 6 nov. 2013 à 19:47
Bonjour,
l'execution ne donne pas une resultat correcte .
j'ai essai plusieur fois mais j'ai pas pu trouver la faute .... el merci d'avance pour l'aide :) :)

voici le prog :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14

float hassine ( float r )

{
float a ;
return (r = pow(a, 1/3 ) ) ;
}


float main()

{

float v ,r ,a;
printf("donnez le volume de sphere :" ) ;
scanf ("%f",&v) ;

a =(3*v )/ (4*PI) ;

printf ("le rayon r =%f ", hassine(r)) ;

}




1 réponse

Yoan Messages postés 11795 Date d'inscription mardi 1 février 2005 Statut Modérateur Dernière intervention 10 décembre 2023 2 330
Modifié par Yoan le 5/11/2013 à 02:36
Bonjour,

Il y a plein de (gros) problèmes.

Déjà parlons uniquement de la fonction hassine sans même regarder le code à l'intérieur.

Déjà rien que le nom de tes variables suggère que tu n'as pas compris l'appel de fonctions en C. Alors reprenons du début. Telle qu'elle est déclarée
float r
signifie que cette fonction prend en paramètre un flottant nommé
r
et le
float
devant le nom de la fonction signifie qu'elle renvoie un flottant, mais cette valeur de retour n'est pas nommée, on ne peut obtenir cette valeur qu'en faisant un appel à la fonction hassine(5.0) par exemple. Dans ce contexte le float
r
est une entrée de la fonction et le float non nommé est une sortie. Tu ne devrais donc déjà pas nommer
r
de cette façon car je suppose que tu pense que c'est le rayon mais pas du tout, car l'entrée de ta fonction c'est le volume. Le rayon est une sortie mais la sortie n'est pas nommée en C (elle l'est dans certains autres langages). Conclusion : hassine devrait prendre un paramètre qui s'appelle plutôt
v
que
r
, et ce
v
ne devra jamais être affecté car
v
est une valeur de sortie (jamais de
v = quelque-chose
dans cette fonction).


Ensuite regardons le code à l'intérieur de la fonction hassine :
La première instruction est une déclaration de variable. Ca sert à prévenir le compilateur que l'on va prochainement utiliser une variable nommée
a
mais ça ne lui donne aucune valeur. Ou bien pour être plus correct la valeur par défaut de cette variable est une valeur complètement aléatoire. A la fin de cette déclaration, a a par exemple pour valeur -68428.87450 (par exemple).

Ensuite pow(a, 1/3 ) permet effectivement de calculer la racine cubique de
a
. Sauf que
a
a la valeur complètement hallucinante de -68428.87450 donc le résultat escompté n'est forcément pas bon. Lorsque tu calcules pow() il faut donc opérer sur l'entrée de la fonction (que tu as appelé
r
et que je te suggère d'appeler
v
).
Mais surtout ne pas faire
r = quelque-chose
car cette valeur de sortie sera perdue.

Il y a des erreurs dans le main aussi, erreurs qui montrent quelle partie de ton cours de C tu n'as pas assez révisé : la portée des variables. Avant de vouloir corriger ton code je te suggère de revoir absolument ton cours 'ou n'importe quel cours sur Internet) sur la portée des variables en C. Ce que tu as écrit ressemble (ou ressemblote) à la manière dont sont déclarées les variables dans certains langages fonctionnels mais pas en C.

Rien ne sert d'aller plus loin maintenant il faut que tu relises cette partie du cours et que tu corriges la fonction hassine pour le reste on verra après ...

Sinon j'ajoute que le découpage en fonction devrait avoir un sens et apporter quelque-chose d'intéressant. Dans l'immédiat, en admettant qu'elle soit juste ta fonction hassine ne fait rien d'autre que calculer la racine cubique, ce qui est déjà le rôle de la fonction pow donc ça n'a aucun intérêt. Par contre tu pourrais inclure dans cette fonction le calcul (3*v )/ (4*PI) en plus du calcul de la racine cubique. Maintenant ça devient beaucoup plus intéressant car ta fonction hassine (que tu as nommée ainsi probablement car tu ne connaissais pas vraiment son rôle) a maintenant un rôle de calculer un rayon à partir d'un volume. Tu pourrais donc l'appeler
float calcul_rayon(float v)

L'urgent est fait, l'impossible est en cours,
Pour les miracles, prévoir un délai ...
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
5 nov. 2013 à 14:44
moi et les maths ça fait deux, mais.. heu... la formule c'est pas :
rayon = sqrt(aire / PI);
?


Dal
0
hassin19 Messages postés 4 Date d'inscription mardi 5 novembre 2013 Statut Membre Dernière intervention 6 novembre 2013
5 nov. 2013 à 15:39
'je suis débutant en langage C .. je vais faire de mon mieux pour corriger mes fautes en tout cas je vous remercie pour les conseilles :) :)
0
blux Messages postés 26545 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 22 décembre 2024 3 318
Modifié par blux le 5/11/2013 à 15:44
@[Dal]
Je confirme que les maths et toi, ça fait (au moins) 3 ;-)

La formule du volume est
4/3*pi*R^3
, donc on ne cherchera pas une racine carrée, mais plutôt une racine cubique...
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 5/11/2013 à 15:59
Arf.. je me disais aussi. Je vous jure que j'ai vu "cercle" et "surface" au lieu de "sphère" et "volume", si, si, je vous juuureeeeeeeeee !!!

(musique du générique des Envahisseurs, David Vincent, sort de ce corps !!! :-D)
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
5 nov. 2013 à 16:01
Toutes mes excuses hassin19, je n'avais pas les yeux en face des trous.

Dal
0