Codigo completo: Main.c #include <stdio.h>
#include "funcao.o"
#define N 4000
void funcao( float Sx[], float h[], float Cor[][4], int PontosSpec, int v );
int main()
{
int v, j, NumeroEspectros, PontosSpec, q;
char L[N][1000];
signed char x[N][1000];
float Sx[N], h[N], c[N], Cor[N][4];
FILE *ArquivoEntrada;
FILE *Espectro;
ArquivoEntrada = fopen("lista.dat", "r");
v=0;
do{
fscanf(ArquivoEntrada,"%s",L[v]);
//printf("v=%d %s\n", v, L[v]);
v++;
}while( feof(ArquivoEntrada)== 0 );
NumeroEspectros = v - 2;
//printf("numero de espectros = %d\n",NumeroEspectros);
for(v=0;v<=NumeroEspectros;v++)
{
j=0;
Espectro = fopen(L[v], "r");
//printf("i=%d %s\n", v, L[i]);
do{
fgets (x[j] , 1000 , Espectro);
//printf("i=%d %s\n", j, x[j]);
if(j>=26)
{
sscanf (x[j],"%f %e %e",&Sx[j],&h[j],&c[j]);
//printf("j=%d %f %e %e\n", j, Sx[j], h[j], c[j]);
}
j++;
}while( feof(Espectro)== 0 );
PontosSpec = j - 27;
printf("pt = %d\n",PontosSpec);
filtro_solo(Sx, h, Cor, PontosSpec, v);
for (q=0; q<=4; q++)
{
printf("%s Fluxo total = %f\n",L[v],Cor[v][q]);
printf("pt = %d\n",PontosSpec);
}
/*
for (q=0; q<=4; q++)
{
if (q==1)
{
printf("v=%d Fluxo total em U = %f\n",v,Cor[v][q]);
}
if (q==2)
{
printf("v=%d Fluxo total em G = %f\n",v,Cor[v][q]);
}
if (q==3)
{
printf("v=%d Fluxo total em R = %f\n",v,Cor[v][q]);
}
if (q==4)
{
printf("v=%d Fluxo total em I = %f\n",v,Cor[v][q]);
}
if (q==5)
{
printf("v=%d Fluxo total em Z = %f\n",v,Cor[v][q]);
}
}
*/
}
fclose(ArquivoEntrada);
fclose(Espectro);
return 0;
}
funcao.o
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
//#include "function.h"
#define N 4000
void filtro_solo( float Sx[], float h[], float Cor[][4], int PontosSpec, int v )
{
int i,j,q,NumeroPontosS, NumeroPontos;
float y[N+1],p[N+1], o[N+1],l[N+1],z[N],x[N+1],a,b, Sy[N];
FILE *ArquivoEntrada;
//FILE *ArquivoEntradaS;
//FILE *a1;
PontosSpec = PontosSpec + 1;
for(q=1;q<=5;q++)
{
for(i=1;i<=(NumeroPontos);i++)
{
y[i]=0.0;
p[i]=0.0;
o[i]=0.0;
l[i]=0.0;
x[i]=0.0;
}
for(j=1;j<=(NumeroPontosS);j++)
{
z[j]=0.0;
}
if(q==1)
{
ArquivoEntrada = fopen("u.dat", "r");
//a1= fopen("EspFiltr_u.dat", "w");
}
if(q==2)
{
ArquivoEntrada = fopen("g.dat", "r");
// a1= fopen("EspFiltr_g.dat", "w");
}
if(q==3)
{
ArquivoEntrada = fopen("r.dat", "r");
// a1= fopen("EspFiltr_r.dat", "w");
}
if(q==4)
{
ArquivoEntrada = fopen("i.dat", "r");
// a1= fopen("EspFiltr_i.dat", "w");
}
if(q==5)
{
ArquivoEntrada = fopen("z.dat", "r");
// a1= fopen("EspFiltr_z.dat", "w");
}
//printf("filtro = %f", Filtro);
i=1;
do{
fscanf(ArquivoEntrada,"%f %f %f %f %f",&x[i],&p[i],&o[i],&y[i],&l[i]);
//printf("i=%d %f %f\n", i, x[i],y[i]);
i++;
}while( feof(ArquivoEntrada)==0 );
NumeroPontos = i - 2;
//printf("Num pontos Filtro=%d\n", NumeroPontos );
for(j=2;j<=PontosSpec;j++)
{
for(i=1;i<=NumeroPontos;i++)
{
if(Sx[j]>x[i] && Sx[j]<x[i+1])
{
//printf("j=%d %f \n", j,Sx[j]);
a=(y[i]-y[i+1])/(x[i]-x[i+1]);
b=((x[i]*y[i+1])-(y[i]*x[i+1]))/(x[i]-x[i+1]);
Sy[j]=a*Sx[j]+b;
z[j]=Sy[j]*h[j];
//printf("j=%d a=%f b=%f \n", j, a, b);
//fprintf(a1,"%f %f \n",Sx[j],z[j]);
//printf("%f %f \n",Sx[j],z[j]);
if(j<PontosSpec)
{
//printf("%f %f \n",Sx[j],z[j]);
//********** Cálculo do fluxo total na banda desejada através do método dos trapézios. **********
Cor[v][q]+=(z[j]+z[j+1])*(Sx[j+1]-Sx[j])/2;
}
}
}
}
fclose(ArquivoEntrada);
}
} ta ai, desconsiderar o que estiver comentado.