Vemos también que debimos incluir esta librería math.h.
En el archivo .h se encuentran los prototipos de las funciones y en el .so o .a se encuentra el binario de la implementación de esas funciones.
Se llama archivo fuente a el código en c que genera esos binarios-y contiene la definición de las funciones-, archivo de cabecera (header) al .h, al archivo .a se le llama librería estática y al .so librería dinámica.
la distribución de esta manera del código se le llama programación modular, es un tipo de diseño de software.
Convirtamos el algoritmo de autovalores en un módulo y su implementación:
autovalores.h
#ifndef AUTOVALORES_H #define AUTOVALORES_H int det(int A[2][2]); int tra(int A[2][2]); double* autovalores(int A[][2]); #endif
autovalores.c
#include"autovalores.h"
#include<math.h>
int det2(int A[2][2])
{
return A[0][0]*A[1][1]-A[0][1]*A[1][0];
}
int tra2(int A[2][2])
{
return A[0][0]+A[1][1];
}
double* autovalores(int A[][2])
{
static double lambda[2];
int tra=tra2(A);
lambda[0]= (tra+sqrt(tra*tra-4*det2(A)))/2;
lambda[1]= (tra-sqrt(tra*tra-4*det2(A)))/2;
return lambda;
}
problema.c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"autovalores.h"
int main()
{
srand(time(NULL));
int a[2][2];
int i,j;
double *lambda;//Se define como puntero pues la función retorna tal.
for(i=0;i<2;i++) {
for(j=0;j<2;j++) {
a[i][j]=rand()%10-5;
printf("%d ",a[i][j]);
}
printf("\n");
}
lambda=autovalores(a);
printf("Los autovalores son %f y %f\n",lambda[0], lambda[1]);
return 0;
}
Y compilamos con.
gcc autovalores.c problema.c -lm -o autovalores
Ejercicios
- Haga una cabecera y un archivo de fuente para las funciones de manejo vectorial y matricial.
No hay comentarios:
Publicar un comentario