12.1 Divisão do código em vários arquivos
É possível quebrar um código em vários arquivos. Basta compilar todos
os códigos juntos.
Exemplo 12.1.1. Implemente um código resolver novamente o exemplo
6.6.2, que consiste em calcular a integral
onde
Use um arquivo para o main e outro com as funções.
O primeiro arquivo foi salvo como main.c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double Boole(double (*f)(double, double),double a,double b, int N,double *param);
double integrando(double tau, double t);
double f(double t,double tau);
void main(void)
{
int N=5;
double I1=0,I2=0,erro=0,a=0,b=1,tol=1e-10,param[1]={0};
I1=Boole(f,a,b,N,param);
int cont=0;
do
{
cont++;
N=2*N-1;
I2=Boole(f,a,b,N,param);
erro=fabs(I2-I1);
I1=I2;
}while (erro>tol);
printf("O valor da integral é %f\n",I2);
}
O segundo arquivo foi salvo como func.c
#include <math.h>
double Boole(double (*f)(double, double),double a,double b, int N,double *param)
{
int i;
double h=(b-a)/(4*N),Int=0,t=param[0];
Int=14./45.*(*f)(a,t);
for(i=0;i<N;i++)
{
Int+=64./45.*(*f)(a+h,t);
Int+=24./45.*(*f)(a+2*h,t);
Int+=64./45.*(*f)(a+3*h,t);
Int+=28./45.*(*f)(a+4*h,t);
a+=4*h;
}
Int-=14./45.*(*f)(a,t);
return h*Int;
}
double integrando(double tau, double t)
{
return sin(t-tau)*exp(-tau*tau);
}
double f(double t,double tau)
{
int N=5;
double I1=0,I2=0,erro=0,a=0,b=t,tol=1e-10,param[1]={t};
I1=Boole(integrando,a,b,N,param);
int cont=0;
do
{
cont++;
N=2*N-1;
I2=Boole(integrando,a,b,N,param);
erro=fabs(I2-I1);
I1=I2;
}while (erro>tol);
return I2;
}
Compilamos com a linha de comando
gcc main.c func.c -lm