Lógica de Programación: Fundamentos para Analizar y Estructurar Soluciones