Cronometro en C

24 01 2009

Por fin, hace unos dos dias mientras vagueaba un poco en el canal #ubuntu-es volvi a programar. Todo empezo con un tio que queria saber si habia algun cronometro para ubuntu, estaba resolviendo estos cubos (creo que se llaman rubik) y queria saber cuanto tardaba. Nadie le dio una respuesta satisfactoria y yo me interese en el caso, le dije que no debia ser tan dificil  hacer uno sencillo en C, que me diera un poco de tiempo y yo lo hacia. Bien, tarde unas dos horas porque no tenia ni idea de como hacer para que el tiempo siguiera corriendo mientras se esperaba la respuesta del usuario, despues estaba que el solo tenia que presionar una tecla y el programa tenia que terminar (algo como getch() ). Despues de pasar todo el tiempo del mundo preguntando en #c y leyendo man pages (sudo aptitude install manpages-dev), me salio este codigo:

/*librerias*/
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
int main() {

	struct timeval timeout;

	fd_set rdfs; 

	FD_ZERO(&rdfs);
	FD_SET(0,&rdfs);

	struct termios my_term, old_term;

	my_term.c_lflag &= (~ICANON);
	my_term.c_cc[VTIME] = 0;
	my_term.c_cc[VMIN] = 1;
	tcsetattr(0,TCSANOW,&my_term);
	int total = 0;
	int segundos = 0;
	int minutos = 0;

	while ( total == 0  ) {
		if ( segundos == 60 ) {
			minutos += 1;
			segundos = 0;
			}
		timeout.tv_sec = 1;
		timeout.tv_usec = 0;
		segundos += 1;
		total = select( 1, &rdfs, NULL, NULL, &timeout ) ;
		FD_ZERO(&rdfs);
		FD_SET(0,&rdfs);
		}
	printf("%i seconds and %i minutes!\n",segundos+1, minutos);
	tcsetattr(0,TCSANOW,&old_term);
	return(EXIT_SUCCESS);
	}

No es lo mejor que pude haber hecho, pero es suficiente. Todavia tengo que estudiar un poco sobre termios.h para ver si puedo regresar la terminal a la normalidad despues de cambiar las cosas (old_term parece no funcionar), tambien me han dicho que no es muy portable, ya tendre que solucionar eso tambien. De momento eso es lo que tengo y compilado en mi laptop bajo ubuntu GNU/Linux 8.04 con gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3) funciona bien.





Averiguando el tamaño de un archivo en C

4 07 2008

El otro dia estaba haciendo un programa de broma (Aunque bastante… digamos, desagradable) que llenaba un archivo de texto a base espacios (jj) pero necesitaba una forma de controlarlo y se me ocurrio hacer otro programa que comprobara el tamaño del archivo para no excederme. El programa no utiliza ninguna libreria de sistema o llamada a sistema por lo que pienso que es portable, de todos modos, si encuentran que no es portable en algun SO, me envian un mail, solo utilizo un puntero FILE y lo basico en abrir archivos. El codigo lo dejo aqui: (Es corto)
Leer el resto de esta entrada »





Averiguando si un numero es palindromo

25 06 2008

Hoy estaba de buen humor asi que me puse a revisar capitulos viejos de mi libro de programacion y me encontre con un ejercicio sorbe los palindromos que ya habia resuelto de la manera mas floja posible y me dieron ganas de volverlo a hacer a ver que tal me iba, el resultado fue: un metodo infalible para detectar palindromos de numeros (Quien sabe palabras) en numeros menores de 11 digitos! Dejo la solucion (17 Lineas) y una explicacion porque esta algo engorroso xD:
Leer el resto de esta entrada »





Ejercicio del paseo del Caballo ( En desarrollo ) con heuristica de accesibilidad

28 05 2008

Les dejo el codigo que he estado haciendo desde ayer (Es decir, como dos horas, porque restenle el tiempo de estudiar ^^), si alguien le encuentra como terminarlo, le agradeceria mucho que me lo dijera por los comentarios o a mi correo, aqui esta:
Leer el resto de esta entrada »





Funciones que uso regularmente en C++

28 05 2008

Bueno…. Ya llevaba un largo tiempo sin actualizar, y es que en el liceo nos tienen hasta el tope de tareas y ytrabajos, pero como ya estoy que termino el año, le dedico mas tiempo al blog. Entonces, dejo una lista de las funciones (escritas por mi) que mas uso y algunas que me gustan bastante.
Leer el resto de esta entrada »