Cronómetro desarrollado para C

Cronómetro desarrollado para C

Para estudiar la eficiencia de los algoritmos, a menudo, es necesario contar con un cronómetro. En éste artículo os dejaré el código fuente del crono que utilicé cuando estudiaba la asignatura de teoría de algoritmos en la Universidad de Jaén. De ésto hace ya un pico de años. Espero que éste artículo le sirva a los estudiantes de informática, ya sea de grados, formación profesional o universitarios.

El código que os dejo es realmente muy sencillo, pero eficiente. Sirve para ejecutarlo en consola. Así que, para los que desarrollan en sistemas linux es perfecto. No creo que tengáis ningún problema para los que trabajais habitualmente con windows -especialmente en sus últimas versiones- o mac.

Más adelante dejaré un artículo en el que explicaré cuáles son mis entornos de desarrollo favoritos, en cualquier sistema que empleeis. Esta información, estoy seguro, os vendrá bien.

Como habitualmente hago, os dejo primero el fichero .h con las estructuras de datos y las cabecera de las funciones.

#ifndef CRONO
#define CRONO

	struct time *cronostart(struct time *t);
	struct time *cronostop (struct time *t2);
	unsigned long int cronodifcent(struct time *t, struct time *t2);

#endif

A continuación os dejo la librería que podéis incluir en vuestros desarrollos en c. Como podéis apreciar, tan sólo hay tres funciones. Evidentemente se podría simplificar mucho más, no obstante, este programita es bastante claro para un estudiante de programación en C.

#include   <stdio.h>
#include   <dos.h>
#include   <conio.h>


/*-------------------------------------------------------------------------*/

struct time *cronostart (struct time *t){

	gettime (t);
	printf ("La hora inicial es: %2d:%02d:%02d.%02d\n",
					t->ti_hour, t->ti_min, t->ti_sec, t->ti_hund);
	return (t);
}

/*-------------------------------------------------------------------------*/

struct time *cronostop (struct time *t2){

	gettime(t2);
	printf ("La hora final es: %2d:%02d:%02d.%02d\n",
					t2->ti_hour, t2->ti_min, t2->ti_sec, t2->ti_hund);
	return (t2);
}

/*-------------------------------------------------------------------------*/

unsigned long int cronodifcent(struct time *t, struct time *t2){
	/*struct time taux;*/
	unsigned long int ti_hund;
	unsigned long int ti_sec;
	unsigned long int ti_min;
	unsigned long int ti_hour;
	int carry = 0;
	int sumar = 0;
	int valor;
	unsigned long int devuelve;

	if ((valor=(t2->ti_hund) - (t->ti_hund)) < 0){
		sumar = 100;
		carry = 1;
	}

	ti_hund= valor + sumar;

	if ((valor=(t2->ti_sec) - (t->ti_sec) - carry) < 0){
		sumar = 60;
		carry = 1;
	}
	else{
		sumar = 0;
		carry = 0;
	}
	ti_sec = valor + sumar;

	if ((valor=(t2->ti_min) - (t->ti_min) - carry) < 0){
		sumar = 60;
		carry = 1;
	}
	else{
		sumar = 0;
		carry = 0;
	}
	ti_min = valor + sumar;

	if ((valor=(t2->ti_hour) - (t->ti_hour) - carry) < 0)
		sumar = 24;
	else sumar = 0;

	ti_hour = valor + sumar;
	/*de haber un fallo est  en la ss. l¡nea */
	devuelve = 360000*ti_hour + 6000 *ti_min + 100*ti_sec + ti_hund;
	return (devuelve);
}

Este es el primer artículo de una serie de códigos de algorítmica que tenía guardados y que me gustaría compartir con todos vosotros. Si alguno de mis lectores desea que le mande el código en ficheros de texto, no tenéis más que escribirme a mi correo info@antoniogarciaprats.es.

Con todo, me gustaría que dejárais en la sección de comentarios vuestras aportaciones, código fuente y comentarios.

No Comments

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.