Programa completo, falta probarlo a fondo y añadir comentarios