Uncategorized

Programando en C: Libreria de tiempo

Capítulo 16: Libreria de tiempo

Control del tiempo

Dentro de la mayoría de los programas, la gestión del tiempo juega un papel fundamental.

Por ejemplo, cuando usamos registros, cuando un programa trabaja con registros que en un momento dado escribimos y que más adelante queremos leer, muchas veces es necesario introducir elementos tales como por ejemplo la fecha en la que ese registro quedó escrito.

de esta forma, en la gran mayoría de lenguajes de programación, junto al núcleo, es costumbre disponer de una librería específica de tratamiento del tiempo, que a su vez se suele dividir en dos librerías, una de tratamiento de la fecha, y otra de tratamiento del tiempo.

esto puede diferir a lo largo de los lenguajes de programación, pero generalmente, hay una serie de operaciones para tratar con años, meses, ideas, y hay otras operaciones para trabajar con horas, minutos, y segundos.

Adicionalmente, en cada una de las librerías, puede haber instrucciones adicionales tales como por ejemplo las que permiten contabilizar los números de días de cada mes, el número de semanas del año, los años bisiestos, etc.

en el caso del lenguaje de programación C, lo primero que tenemos que hacer para trabajar con fechas, es importar la siguiente librería.

main.c
#include <stdio.h>#include <time.h>
int main(int argc, char *argv[]) {    }


A continuación, y solo a partir de ese momento, es cuando podemos crear variables cuyo tipo de datos corresponde con la librería que acabamos de importar:

main.c


#include <stdio.h>#include <time.h>
int main(int argc, char *argv[]) {    time_t tiempo;}

A continuación se describe un sencillo programa que se encarga de devolver en pantalla la fecha actual.

main.c

#include <stdio.h>#include <time.h>
int main(int argc, char *argv[]) {    time_t tiempo;    char* tiempoCadena;    tiempo = time(NULL);    tiempoCadena = ctime(&tiempo);        printf(«El tiempo actual es: %s \n»,tiempoCadena);}

Clicks de ejecución de procesador

A través del ejemplo anterior hemos sido capaces de obtener la lectura del tiempo del sistema, en un formato preestablecido y estandarizado.

 en este ejemplo, usando la misma librería de tiempo, utilizamos una variable llamada clock, que nos permite obtener el número de clicks que han sido ejecutados por el reloj del procesador, desde que el programa está en funcionamiento

 los clics no se miden en tiempo, sino en operaciones, en instrucciones ejecutadas por el procesador

 este tipo de medida puede ser de utilidad para realizar comparaciones de rendimiento entre diferentes arquitecturas, en un mismo programa 

main.c
#include <stdio.h>#include <time.h>
int main() {     clock_t t1;      t1 = clock();    printf(«El reloj es: %li \n «,t1);}

Tiempo

Volviendo al primer ejemplo ilustrado en este capítulo, es posible que, en un momento dado, nos interese o tener una marca de tiempo en un formato más personalizado

 de esta forma, el siguiente ejemplo sigue usando la librería de tiempo, pero desglosa la información en 6 unidades principales, que son el año, el mes, el día, la hora, el minuto, y el segundo

 como podremos comprobar, mediante el almacenaje de estos datos en variables, más adelante, podemos formatear una fecha de una forma completamente personalizada 

main.c
#include <stdio.h>#include <time.h>
int main() {    time_t t = time(NULL);    struct tm tm = *localtime(&t);    printf(        «tiempo: %d-%d-%d %d:%d:%d\n»,         tm.tm_year + 1900,         tm.tm_mon + 1,         tm.tm_mday,         tm.tm_hour,         tm.tm_min,         tm.tm_sec        );}

Proyecto del curso

A continuación, aplicamos lo que hemos aprendido en esta unidad al ejercicio que estamos desarrollando a lo largo de la publicación

 la aplicación de la librería de tiempo, en este caso, sucede de forma que, en el menú principal, cada vez que lo ejecutamos, obtenemos un desglose del momento exacto en el que estamos ejecutando nuestro programa. nueva línea

 disfrutamos, una vez más, de la aplicación de la filosofía de divide y vencerás, al haber externalizado cada una de las funciones en un archivo de código de fuente diferente

 de esta forma, ahora no tenemos que ir arriba y abajo en un largo programa principal, buscando exactamente la línea en la que se encuentra el código que creemos modificar.

 como podemos comprobar en el listado de archivos a continuación, únicamente tenemos que modificar aquellos archivos donde intervenga la entrada del tiempo, como es el archivo principal, una nueva función creada a propósito para este efecto, y el archivo del menú principal. el resto de archivos de funciones, quedan completamente intacto 

dameFecha.c
#include <stdio.h>#include <time.h>
void dameFecha() {    time_t t = time(NULL);    struct tm tm = *localtime(&t);    printf(        «hoy es: %d-%d-%d %d:%d:%d\n»,         tm.tm_year + 1900,         tm.tm_mon + 1,         tm.tm_mday,         tm.tm_hour,         tm.tm_min,         tm.tm_sec        );}

agenda.c
/* Programa agendapor Jose Vicente Carratala */#define NOMBREPROGRAMA «Programa agenda»#define VERSION «1.0»#define AUTOR «Jose Vicente Carratala»#include <stdio.h>#include <string.h>#include «libAgenda/datos.c»#include «libAgenda/dameFecha.c»#include «libAgenda/listadoRegistros.c»#include «libAgenda/introducirRegistro.c»#include «libAgenda/eliminarRegistro.c»#include «libAgenda/buscarRegistro.c»#include «libAgenda/actualizarRegistro.c»#include «libAgenda/guardarDatos.c»#include «libAgenda/recuperarDatos.c»#include «libAgenda/menuPrincipal.c»
int main(int argc, char *argv[]) {
    // Primer registro    printf(«\033[2J»);    strcpy(agenda[1].nombre,»Jose Vicente»);    strcpy(agenda[1].telefono,»12345678″);    strcpy(agenda[1].email,»info@josevicentecarratala.com»);        // Segundo registro    strcpy(agenda[2].nombre,»Juan»);    strcpy(agenda[2].telefono,»53254″);    strcpy(agenda[2].email,»juan@josevicentecarratala.com»);    // Tercer registro    strcpy(agenda[3].nombre,»Jaime»);    strcpy(agenda[3].telefono,»64566″);    strcpy(agenda[3].email,»jaime@josevicentecarratala.com»); printf(«\033[2J»);    menuPrincipal(); return 0;}

menuPrincipal.c
void menuPrincipal(){ printf(«\033[2J»);     // Mensaje de bienvenida printf(«%s v%s \n»,NOMBREPROGRAMA,VERSION); printf(«%s \n»,AUTOR); dameFecha(); printf(«\t 1 – Listado de registros \n»); printf(«\t 2 – Introducir un registro \n»); printf(«\t 3 – Eliminar un registro \n»); printf(«\t 4 – Buscar un registro \n»); printf(«\t 5 – Actualizar un registro \n»); printf(«\t 6 – Guardar datos en un archivo \n»); printf(«\t 7 – Recuperar datos desde un archivo \n»); printf(«Tu opcion: «); char opcion = getchar(); printf(«La opción que has seleccionado es: %c \n»,opcion); switch(opcion){     case ‘1’:         listadoRegistros();         break;        case ‘2’:         introducirRegistro();         break;        case ‘3’:         eliminarRegistro();         break;        case ‘4’:         buscarRegistro();         break;     case ‘5’:         actualizarRegistro();         break;       case ‘6’:         guardarDatos();         break;       case ‘7’:         recuperarDatos();         break;        default:            printf(«La opción que has introducido no es válida»);             printf(«Pulsa Enter para volver al menú principal \n»);     getchar();     getchar();     printf(«\033[2J»);     menuPrincipal();                        break; }}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *