implementación del algoritmo terminada