Compilation non reussie
joeel85
Messages postés
62
Date d'inscription
Statut
Membre
Dernière intervention
-
joeel85 Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
joeel85 Messages postés 62 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai trouvé un code source d'un programme calculant la correlation linéaire entre 2 signaux(cela devrait me permettre de
continuer mon exercice en traitement numerique du signal) ,pourtant le compilateur m'informe qu'il ya une erreur
et je ne peux donc pas l'executer.(je rappelle que je suis debutant en programmation en c).
le code source du programme en question est le suivant
#include <math.h>
#include <stdio.h>
void correlation(double *x,double *y,int n, double *r/*out*/)
{
int i,j,delay,maxdelay;
double mx,my,sx,sy,sxy,denom;
maxdelay=n/2;
printf("%f \n",maxdelay);
/* Calculate the mean of the two series x[], y[] */
mx = 0;
my = 0;
for (i=0;i<n;i++) {
mx += x[i];
my += y[i];
}
mx /= n;
my /= n;
/* Calculate the denominator */
sx = 0;
sy = 0;
for (i=0;i<n;i++) {
sx += (x[i] - mx) * (x[i] - mx);
sy += (y[i] - my) * (y[i] - my);
}
denom = sqrt(sx*sy);
/* Calculate the correlation series */
for (delay=-maxdelay;delay<maxdelay;delay++) {
sxy = 0;
for (i=0;i<n;i++) {
j = i + delay;
if (j < 0 || j >= n)
continue;
else
sxy += (x[i] - mx) * (y[j] - my);
/* Or should it be (?)
if (j < 0 || j >= n)
sxy += (x[i] - mx) * (-my);
else
sxy += (x[i] - mx) * (y[j] - my);
*/
}
r[delay + maxdelay] = sxy / denom;
/* r is the correlation coefficient at "delay" */
}
}
merci d'avance pour toute aide!
j'ai trouvé un code source d'un programme calculant la correlation linéaire entre 2 signaux(cela devrait me permettre de
continuer mon exercice en traitement numerique du signal) ,pourtant le compilateur m'informe qu'il ya une erreur
et je ne peux donc pas l'executer.(je rappelle que je suis debutant en programmation en c).
le code source du programme en question est le suivant
#include <math.h>
#include <stdio.h>
void correlation(double *x,double *y,int n, double *r/*out*/)
{
int i,j,delay,maxdelay;
double mx,my,sx,sy,sxy,denom;
maxdelay=n/2;
printf("%f \n",maxdelay);
/* Calculate the mean of the two series x[], y[] */
mx = 0;
my = 0;
for (i=0;i<n;i++) {
mx += x[i];
my += y[i];
}
mx /= n;
my /= n;
/* Calculate the denominator */
sx = 0;
sy = 0;
for (i=0;i<n;i++) {
sx += (x[i] - mx) * (x[i] - mx);
sy += (y[i] - my) * (y[i] - my);
}
denom = sqrt(sx*sy);
/* Calculate the correlation series */
for (delay=-maxdelay;delay<maxdelay;delay++) {
sxy = 0;
for (i=0;i<n;i++) {
j = i + delay;
if (j < 0 || j >= n)
continue;
else
sxy += (x[i] - mx) * (y[j] - my);
/* Or should it be (?)
if (j < 0 || j >= n)
sxy += (x[i] - mx) * (-my);
else
sxy += (x[i] - mx) * (y[j] - my);
*/
}
r[delay + maxdelay] = sxy / denom;
/* r is the correlation coefficient at "delay" */
}
}
merci d'avance pour toute aide!
Configuration: Windows XP Internet Explorer 8.0
7 réponses
-
Salut,
Ton main est où?-
en fait je n'ai pas de main mais d'autres codes sources.(celui qui suit a l'extension .h)
void correlation(double *x,double *y,int maxdelay, double *r);
void fastCorrelation(float *x,float *y,int T, float *r);
double x[10000]={
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
};
double y[10000]={
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
};
c'est quoi au juste car je ne le comprend pas bien.
-
-
Re,
La fonction main est indispensable pour un programme.
Tu compiles quoi?
Tu dois avoir un fichier avec l'extension .c
Les .h ne sont que des fichiers d'en-tête (headers) qui sont utiliser par les fichiers .c grâce à la directive #include-
merci dejà pour ton aide.
j'ai un peu modifier le 1er code comme ceci.
#include <math.h>
#include <stdio.h>
#include <conio.h>
void main(double *x,double *y,int n, double *r/*out*/)
{
int i,j,delay,maxdelay;
double mx,my,sx,sy,sxy,denom;
maxdelay=n/2;
printf("%f \n",maxdelay);
/* Calculate the mean of the two series x[], y[] */
mx = 0;
my = 0;
for (i=0;i<n;i++) {
mx += x[i];
my += y[i];
}
mx /= n;
my /= n;
/* Calculate the denominator */
sx = 0;
sy = 0;
for (i=0;i<n;i++) {
sx += (x[i] - mx) * (x[i] - mx);
sy += (y[i] - my) * (y[i] - my);
}
denom = sqrt(sx*sy);
/* Calculate the correlation series */
for (delay=-maxdelay;delay<maxdelay;delay++) {
sxy = 0;
for (i=0;i<n;i++) {
j = i + delay;
if (j < 0 || j >= n)
continue;
else
sxy += (x[i] - mx) * (y[j] - my);
/* Or should it be (?)
if (j < 0 || j >= n)
sxy += (x[i] - mx) * (-my);
else
sxy += (x[i] - mx) * (y[j] - my);
*/
}
r[delay + maxdelay] = sxy / denom;
/* r is the correlation coefficient at "delay" */
}
getch ();
}
mais le compilateur affiche comme erreur `main' must return `int'
-
-
Re,
Un main peut avoir cette formeint main() { /* déclaration variables */ /* instructions */ return 0; }ouint main(int argc, char **argv) { /* déclaration variables */ /* instructions */ return 0; }
Donc il n'y a pas des paramétrés qui doivent être passer à main
En revanche tu peux appeler une fonction et lui passer des arguments dans main
Ce qui donnevoid correlation(double *x,double *y,int n, double *r); int main() { /* déclaration variables */ /* instructions */ correlation(x,y,n,r); /* appel de ta fonction */ /*instructions*/ return 0; } void correlation(double *x,double *y,int n, double *r){ /* le code de la fonction */ }
-
Pour info voilà le projet complet issu du site cppfrance.com, ci-joint le lien
http://www.cijoint.fr/cjlink.php?file=cj200812/cijegonJdp.zip
Le projet à charger est echo_canceller.dsw, il te chargera tous les fichiers nécessaires
Signal 1 : fx.txt
Signal 2 : fy.txt
Résultat : text.txt
A plus -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Re,
Ok, je vois.
J'ai modifié le fichier test1.c (j'ai rendu main en int et j'ai ajouté un return 0; à la fin - voir en gras)#include <stdio.h> #include <stdlib.h> #include <math.h> #include "correlation.h" #include "outil.h" int main(void) { FILE * fr= fopen ("txt.txt", "w"); FILE * fx= fopen ("fx.txt", "r"); FILE * fy= fopen ("fy.txt", "r"); double r[10000]; int i,nbr, T= 10000; for(i=0;i<T;i++) r[i]=0; nbr=0; while (fscanf(fx,"%lf",&x[nbr]) != EOF) { /* essai lecture ligne */ nbr++; } nbr=0; while (fscanf(fy,"%lf",&y[nbr]) != EOF) { /* essai lecture ligne */ nbr++; } correlation(x,y,T,r); for(i=0;i<T;i++) { fprintf(fr,"%lf \n",r[i]*100); } fclose(fr); fclose(fx); fclose(fy); printf("Max = %lf\n",maxTab(r,T-1)); return 0; }
J'ai ajouter un saut de ligne pour les fichiers .c
Et j'ai compilélami20j@debian:~/src/c$ ls -1 cijegonJdp.zip correlation.c correlation.h echo_canceller.dsp echo_canceller.dsw echo_canceller.ncb echo_canceller.opt echo_canceller.plg fx.txt fy.txt outil.c outil.h @Readme-CodeS-SourceS-FR.txt @Source telecharge depuis ce lien.url test1.c txt.txt lami20j@debian:~/src/c$ gcc -c correlation.c outil.c test1.c lami20j@debian:~/src/c$ gcc -o test1 correlation.o outil.o test1.o -lm lami20j@debian:~/src/c$ ./test1 -0.000000 Max = 1.000000
-
Tu gardes tout comme c'est mais tu charges le .dsw en open workspace
-
Je ne vois pas ton soucis, mais en lui-même le programme n'affiche quasiment rien, il met juste le résultat dans le fichier text.txt.
Par contre assure toi que ton executable soit dans le même répertoire que tes sources fx.txt et fy.txt parce que mine de rien se sont les données de base