Title: Archivos de Cabecera.
Course: 2025 - LI - Programacion Estructurada 1-1 y 1-2

CREACIÓN DE ARCHIVOS DE CABECERA.

Podemos crear nuestros propios archivos de cabecera para guardar las funciones hechas por nosotros y así crear nuestras propias librerías. Para crear un archivo de cabecera simple, basta con escribir las funciones en el editor y guardarlas en un archivo con la extensión .h. También podemos definir nuestras propias constantes simbólicas, macros y tipos de datos, guardarlas en el archivo de cabecera, lo cual nos evitará tener definir las funciones, constantes y macros en cada programa que hagamos. Aún cuando no es necesario, es recomendable colocar los prototipos de las funciones al principio del archivo de cabecera. Asimismo podemos colocar directivas de inclusión que llamen a su vez a otros archivos de cabecera.

Para tener acceso a nuestros propios archivos de cabecera, basta con llamarlos mediante una directiva de inclusión, tal como se hace con los archivos de cabecera de la librería estándar.

            #include  <archivo.h>

            #include  "archivo.h"

Recuerde que la diferencia entre estas dos formas de declaración, determina en donde buscará el preprocesador el archivo a incluirse. Esto es, si el nombre del archivo está encerrado entre comillas, el preprocesador buscará el archivo a incluirse en el mismo directorio que el del archivo que se está compilando, esto es, el directorio actual de trabajo. Este método se utiliza normalmente para incluir archivos de cabecera definidos por el programador. Por el contrario, si el nombre del archivo está encerrado en corchetes angulares < >, la búsqueda se llevará a cabo en los directorios predefinidos.

Nota: Los archivos de cabecera NO SE CORREN, solo se compilan para verificar que no tengan errores.

A continuación se presenta lo que podría ser un archivo de cabecera al cual podemos llamarlo: "cabecera.h" (puede crearlo y ponerle su nombre o apellido –tamaño máximo 8 caracteres-).

/* Archivo de cabecera: cabecera.h       */

#if  ! defined (CABECERA)

#define CABECERA     /* Estas dos líneas definen el nombre del archivo de cabecera,                                                asegurándose que se incluya sólo una vez */

#include "math.h"

#include "stdio.h"

#include "conio.h"

#include "time.h"                     /* Pueden incluirse otros archivos en un archivo de cabecera */

#include "stddef.h"

#include "stdlib.h"

/* Definiciones de tipos y Macros */

typedef  unsigned  char  byte;           /* Define un nuevo tipo de dato: byte */

typedef  unsigned  int  word;            /* Define un nuevo tipo de dato: word */

#define  PI  3.1415927

#define  E  2.718281828459

#define  radianes(ang)  (ang) * PI / 180.0

/* Prototipos de las funciones definidas en este archivo, no es obligatorio colocarlos. */

double cot (float ang);

double sec (float ang);

double csc (float ang);

int validaEnteros (int menor, int mayor);

long int validaGrandes (long int menor, long int mayor);

float validaReales (float menor, float mayor);

void fecha (void);

double cot (float ang)

{

   return 1.0 / tan (ang);

}

double sec (float ang)

{

   return 1.0 / cos (ang);

}

double csc (float ang)

{

   return 1.0 / sin (ang);

}

int validaEnteros (int menor, int mayor)

/* Valida la entrada de un número entero tipo:  int   */

{

  int entero;

  char cadena[ ]=" ";

  do {

    scanf("%s",cadena);

    fflush(stdin);

    entero = atoi(cadena);

  } while ((entero<menor) && (entero>mayor));

  return  entero;

}

long int validaGrandes (long int menor, long int mayor)

/* Valida la entrada de un número entero largo tipo:  long int   */

{

  long int grande;

  char cadena[ ]=" ";

  do {

    scanf("%s",cadena);

    fflush(stdin);

    grande = atol(cadena);

  } while ((grande<menor) && (grande>mayor));

  return  grande;

}

float validaReales (float menor, float mayor)

/* Valida la entrada de un número real de tipo:  float   */

{

  float real;

  char cadena[ ]=" ";

  do {

    scanf("%s",cadena);

    fflush(stdin);

    real = atof(cadena);

  } while ((real<menor) && (real>mayor));

  return  real;

}

 void fecha (void)

 {

     time_t lt;

     lt = time (NULL);

     printf(ctime (&lt));

 }

long factorial(int a)

 {

   int i=1;

   long f=1;

   for (i = a; i > 1; i--) {

     f *= i;

   }

   return (f);

 }

#endif

Crear el archivo de cabecera con su nombre o apellido, retomando las funciones anteriores y añadirle las siguientes funciones:

Potencia. x^n o x^-n

Calcular el factorial recursivo de un número entero.

Calcular la raíz cuadrada de un número.

Sumar dos números enteros.

Sumar dos números reales.

Restar dos números enteros.

Restar dos números reales.

Multiplicar dos números enteros.

Multiplicar dos números reales.

Dividir dos números enteros.

Dividir dos números reales.

Calcular el módulo de dos números enteros.

Haga un programa que mande llamar (incluya), al menos tres funciones definidas en su archivo de cabecera.

Trabajo individual.

El archivo de cabecera deberán enviarlo todos los alumnos del curso, incluyendo los exentos. 5 puntos.