Fonction retourne valeur x en c++

Fermé
k' - 21 mai 2009 à 11:38
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 mai 2009 à 17:13
Bonjour,
j'ai un projet à faire on nous a donné cette fonction f(x) = 4xpuissance3 – 3xpuissance2 + 5 et on nous a demandé de écrire en c++ une fonction qui retourne la valeur f(x) pour une valeur de x passée
en paramètre , le problème j"ai pas d'idée pour commencer ça serait gentil si quelqu'un peut me donner un exemple ou au moins le schéma à faire
Merci .
A voir également:

13 réponses

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
21 mai 2009 à 11:43
Langage C++ - Les fonctions
0
Merci , mais c'est pas ce que je voulais la discute que tu m'as envoyer n'as aucun rapport avec ce que je cherche
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
21 mai 2009 à 20:50
Alors explique mieux ce que tu cherches !
0
je vais essayer d'expliquer le maximeum possible ,je veux une fonction qui retourne la
valeur f(x) pour une valeur de x passée en paramètre , la fonction est la suivante f(x)=4xpow3 – 3xpow2 + 5
par ex : je donne x=0
elle me renvoie f(0)=5 une fonction comme on connait en math après je devrais faire son intégral mais j'en suis pas encore là merci pour tes reponce en tout cas! ^^
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
21 mai 2009 à 21:08
Salut,
Tu n'as même pas besoin de pow. Tu peux faire x*x*x pour réaliser x au cube.
Cela évitera d'inclure la bibliothèque math pour rien.
Sinon je te donne la structure :

#include <stdio.h>

double f(double x) {
    return ........ ;
}

int main(void) {
   double x;
   printf("x = ");
   scanf("%f",&x); getchar();
   printf("f(x) = %lf\n",f(x));
   
   getchar(); //si t'es sur windows;
   return 0;
}

A toi de trouver ce qu'il faut mettre dans le return ;-))).
Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bon je connais pas du tout la fonction prinft normalement on travail avec les cin et les cout donc la bibliothéque
<iostream> mais bon d'après ta première fonction je devrais retourner f(x) mais le problème c'est que le programme il marche pas après il bug , merci commém pour ta réponce
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 mai 2009 à 00:11
C'est parce que fiddy te parlait en C et non en C++, je te traduis :
#include <iostream>

double f(double x) {
    return ........ ;
}

int main(void) {
   double x;
   cout << "x = ";
   cin >> x;
   cout << "f(x) = " << f(x) << endl;
   
   system("PAUSE"); //si t'es sur windows;
   return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 mai 2009 à 00:21
Et encore mal lu. Décidément je lis mal ce soir ^^.
Oui en C++, cela donnerait la version de KX. N'oublie pas non plus le using namespace std;
Et évite, si tu utilises system, faut importer cstdlib aussi.
Cdlt
0
oui ça marche on ajoutant le h à la bibliothéque iostram.h pour reconnaitre les cin et les cout sinon ils seront indéfinies je vous remercie tout les deux ^^ , je sais pas comment ça se fait mais pour toute les questions que j'ai posé , on me répond avec du c tu peux me traduire cette fonction en c++ s'il te plait elle convertit à nombre en base de 2 n'empèche elle est pas comléte elle donne que les deux premiers nombre en binaire , merci
0
voila la fonction

#include <iostream.h>

#include <stdio.h>

int main()
{
int entierLu;
int puissanceDe2 = 1;
int reste = 0;
int reste1 = 0;
scanf("%d", &entierLu);

while (puissanceDe2 <= entierLu)
{
puissanceDe2 *= 2;

}

puissanceDe2 /= 2;/* trouve la plus grande puissance de deux inférieur au nombre entré */


reste=entierLu-puissanceDe2;/* reste est égal au nombre entier MOINS la plus grande puissance de deux inférieur au nombre entré */

if (reste > 0)/* On affiche 0 ou 1 puisque l'on doit mettre le nombre entré en base 2 */
{
printf("1");
}
else
{
printf("0");
}


while (puissanceDe2!=0) /* tant que la valeur de la puissance de deux est différente de 0, on divise par deux la puissance de deux, reste1 est égal reste-puissance de 2 */
{
puissanceDe2/=2;

reste1= reste-puissanceDe2;

if (reste1 > 0)
{
printf("1");
}
else
{
printf("0");
}



system("PAUSE");
return 0;
}
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 mai 2009 à 13:04
Ne mélange pas iostream avec stdio.h.
De plus, ce n'est pas iostream.h qu'il faut inclure mais iostream pour rester dans l'esprit C++.
Dans ce cas, soit tu précises l'espace de nom : std devant chacune de tes fonctions, soit tu importes cette espace dans l'espace courant via using namespace std;
0
voila la fonction

#include <iostream.h>

#include <stdio.h>

int main()
{
int entierLu;
int puissanceDe2 = 1;
int reste = 0;
int reste1 = 0;
scanf("%d", &entierLu);

while (puissanceDe2 <= entierLu)
{
puissanceDe2 *= 2;

}

puissanceDe2 /= 2;/* trouve la plus grande puissance de deux inférieur au nombre entré */


reste=entierLu-puissanceDe2;/* reste est égal au nombre entier MOINS la plus grande puissance de deux inférieur au nombre entré */

if (reste > 0)/* On affiche 0 ou 1 puisque l'on doit mettre le nombre entré en base 2 */
{
printf("1");
}
else
{
printf("0");
}


while (puissanceDe2!=0) /* tant que la valeur de la puissance de deux est différente de 0, on divise par deux la puissance de deux, reste1 est égal reste-puissance de 2 */
{
puissanceDe2/=2;

reste1= reste-puissanceDe2;

if (reste1 > 0)
{
printf("1");
}
else
{
printf("0");
}



system("PAUSE");
return 0;
}
}
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 mai 2009 à 12:55
Les seules différences c'est l'utilisation de printf/scanf et cout/cin
scanf("%d", &entierLu);
cin >> entierLu;

printf("1");
cout << "1";

printf("0");
cout << "0";
0
oui merci à vous j'ai même appris à faire du c en même temps
Bon là c'est impeu plus difficile en tout cas moi je suis completement dépassé je dois calculer l'intergal entre a et b [a,b] de la fonction que j'ai écris au début en utilisant la méthodedes rectangles. Les bornes et le nombred'intervalle permettant de calculer
l'approximation seront des paramètresde la fonction.
http://homeomath.imingo.net/methrect.htm voici le lien pour la l'integral avec les methodes des regtangles en math j'éspère que vous avez une idée
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 mai 2009 à 17:11
Bien sûr qu'on a une idée, mais c'est à toi de faire l'exercice, pas à nous...

Une intégrale c'est "juste" une somme d'aire, voici un plan pour t'aider :

fais une fonction double aire(double x, double delta); qui calcule l'aire du rectangle dont les points sont (x,0) (x+delta,0) (x,f(x)) (x+delta,f(x))

ensuite fais une fonction double integrale(double a, double b, double delta); qui calcule la somme des aire(x,delta); pour x qui varie de a à b avec un pas de delta...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 mai 2009 à 17:13
Salut,
T'as fait presque le plus dur avec la fonction f(x).
Maintenant, il faut que tu vois le calcul d'une intégrale comme un calcul d'aires.
Imagine, tu prends un point sur la courbe Cf d'abscisse (a+b)/2, et tu traces un rectangle passant par ce point. Pour calculer l'aire, ça sera :Hauteur*largeur = f((a+b)/2)*(b-a)
Comme tu peux te douter, la précision n'est pas top. Pour cela, tu vas mettre autant de point que possible pour approcher au maximum la fonction et faire la somme algébrique des aires. C'est la méthode des rectangles.
Dans le lien que tu as donné, tout en bas, tu as la formule que tu dois implémenter. Une bête boucle for.
Si tu as des questions, n'hésite pas.
0