Compilation non reussie
joeel85
Messages postés
66
Statut
Membre
-
joeel85 Messages postés 66 Statut Membre -
joeel85 Messages postés 66 Statut Membre -
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!
A voir également:
- Compilation non reussie
- Breach compilation c'est quoi - Guide
- Erreur de compilation dans le module caché excel - Forum Logiciels
- Compilation error: expected unqualified-id before '{' token ✓ - Forum C++
- Must declare a named package because this compilation unit is associated to the named module - Forum Java
- Erreur de compilation projet ou bibliothèque introuvable - Forum VB / VBA
7 réponses
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
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'
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 forme
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 donne
Un main peut avoir cette forme
int 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 donne
void 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
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)
J'ai ajouter un saut de ligne pour les fichiers .c
Et j'ai compilé
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
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.