#1 Le 03/10/2006, à 21:19
- dialloma
Un petit problème de maths en C qui ne marche pas (help)
Bonjour,
Je viens de faire un petit exo de maths sous C mais miracle, le résultat me semble bizzare, je ne m'attendais pas à ça du tout. Can you help me please ?
//Programme principal
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//#include "complexe.h"
//#include "prot_complexe.h"
#include "trapeze.h"
//Définition des fonctions "f" et "en"
Complexe f(double x)
{
Complexe y;
y.reel = cos(x) - 1;
y.imag = sin(x);
return y;
}
double pi=3.1416;
int main(int argc, char * argv[]){
float a; /* periode */
int N; /* Nb points de l'echantillonnage */
int n,k; /*pour les fonctions en(x)*/
int age;
if (argc==0)
{ printf("Ereur dans les arguments\n");
exit(0);
}
else
{
sscanf(argv[1],"%f",&a);
sscanf(argv[2],"%d",&N);
sscanf(argv[3],"%d",&n);
sscanf(argv[4],"%d",&k);
//a=2pi, N=101, n=4 k=0
}
// printf("Votre age \n");
// scanf("%d",&age);
// printf("Votre age est %d \n ", age);
printf("Programme de calcul intégrale à partir de la formule des trapèzes ...\n");
printf (" a:%f\t N:%d\n",a,N);
//formule des traprapèzes appliquée à la fonction f = (exp(x) - 1)/x
int i=0; //i: pour la boucle et
double t=0.0; //t pour tj
Complexe F; //On initialise la somme à zéro
F.reel = 0;
F.imag = 0;
for(i=0; i<=N; i++)
{
t = i*a/N;
F = sommecomplexe(f(t), F);
printf("t = %d \n", t);
printf("i = %d \n", i);
}
printf("La valeur de l'intégrale de f entre 0 et a est g : (%d) + i(%d) \n", F.reel, F.imag);
return EXIT_SUCCESS;
}
/Défintion des fonctions complexes
#include <stdio.h>
#include <stdlib.h>
#include "complexe.h"
Complexe sommecomplexe(Complexe a,Complexe b)
{
Complexe res ;
res.reel = a.reel + b.reel;
res.imag = a.imag + b.imag;
return res;
}
Complexe multrc(Complexe a,double x) //Multiplication d'un réel par un complexe
{
a.reel *= x;
a.imag *= x;
return a;
}
Complexe conjugue(Complexe a) //complexe conjugué
{
a.imag = -a.imag;
return a;
}
Complexe mult(Complexe a ,Complexe b)
{
Complexe res;
res.reel = a.reel*b.reel - a.imag*b.imag;
res.imag = a.reel*b.imag + a.imag*b.reel;
return res;
}
#include "complexe.h"
Complexe f(double x);
Complexe en(double,double,int);
typedef struct {
double reel;
double imag;
} Complexe;
Complexe sommecomplexe(Complexe,Complexe);
Complexe multrc(Complexe,double);
Complexe conjugue(Complexe);
Complexe mult(Complexe ,Complexe);
a:6.280000 N:11
t = 0
i = 0
t = 780903145
i = 1
t = 780903145
i = 2
t = -976128931
i = 3
t = 780903145
i = 4
t = -97612893
i = 5
t = -976128931
i = 6
t = -1854644969
i = 7
t = 780903145
i = 8
t = -1805838522
i = 9
t = -97612893
i = 10
t = 1610612736
i = 11
La valeur de l'intégrale de f entre 0 et a est g : (-1673586720) + i(-1071250745)
Merci de votre aide
Hors ligne
#2 Le 04/10/2006, à 15:16
- bertrand0
Re : Un petit problème de maths en C qui ne marche pas (help)
%lf pour un double
%f pour un float
et pas %d
Dernière modification par bertrand0 (Le 04/10/2006, à 15:57)
Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
Buffon, Discours sur le style
Hors ligne