Fases en la Resolución
de Problemas
INDICADORES DE LOGROS CONTENIDOS
▪ Explica brevemente las etapas del ciclo 4.1. Análisis del Problema
de programación para resolver proble- 4.2. Diseño del Algoritmo
mas con la ayuda del computador. • Herramientas de Diseño
• Diagrama de Flujo (FlowChart)
▪ Representa las etapas para el desarro- • Pseudocódigo
llo de problemas utilizando el compu- 4.3. Codificación del Programa
tador como herramienta de trabajo. 4.4. Compilación y Ejecución
4.5. Depuración y Verificación
4.6. Documentación y Mantenimiento
La principal razón para que las personas aprendan lenguajes de programación es utilizar la
computadora como una herramienta para la resolución de problemas.
El proceso de resolución de un problema con una computadora conduce a la escritura de
un programa y a su ejecución en la misma. Aunque el proceso de diseñar y codificar programas
es “esencialmente” un proceso técnico y creativo, se puede considerar una serie de fases o pa-
sos comunes, que generalmente deben seguir todos los programadores. Las fases o etapas pue-
den variar un poco de acuerdo al autor, pero en general son las mismas.
Las fases de resolución de un problema por computadora son:
1. Análisis del problema.
2. Diseño del algoritmo.
3. Codificación del programa.
4. Compilación y Ejecución.
5. Depuración y Verificación.
6. Documentación y Mantenimiento.
4.1. Análisis del Problema
La primera fase de la resolución de un problema con computadora es el análisis del pro-
blema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe
hacer el programa y el resultado o solución deseada.
Dado que se busca una solución por computadora, se precisan especificaciones detalla-
das de entrada y salida para poder conseguir una solución efectiva y eficaz. La Figura 6.1
muestra los requisitos que se deben definir en el análisis.
~11~
12 Desarrollo Lógico y Algoritmo -10°
Análisis del
problema
Definición del Datos de Salida
Datos de Entrada
problema = resultados
FIGURA 6.1. Análisis del problema
Para poder definir bien un problema es conveniente responder a las siguientes preguntas:
• ¿Qué entradas se requieren? (tipo y cantidad).
• ¿Cuál es la salida deseada? (tipo y cantidad).
• ¿Qué método produce la salida deseada?
Veamos un ejemplo sencillo:
Ejemplo 6.1
Una persona ha trabajado 40 horas en una semana y gana a razón de 4.25 balboas la
hora. La tasa de impuestos del Estado es del 5% de su salario bruto. Se desea saber cuál es
su salario bruto, el impuesto a pagar al Estado y el salario neto del trabajador.
Con estos datos se debe obtener toda la información solicitada. En resumen, se tiene:
Entrada Salida
Horas trabajadas: 40 Salario Bruto:
Impuesto: 5% Impuesto a Pagar:
Pago Hora: B/.4.25 Salario Neto:
Proceso
Salario Bruto = Horas Trabajadas * Pago Hora
Impuesto a Pagar = Salario Bruto * Impuesto
Salario Neto = Salario Bruto – Impuesto a Pagar
En el ejemplo 6.1 se puede apreciar como se identifican todos los datos de Entrada, los
resultados o datos de Salida que pide el problema, y luego se procede a escribir las fórmulas
necesarias para procesar los datos de Entrada y producir los Resultados (Salida).
4.2. Diseño del Algoritmo
En la fase de análisis del problema se determina qué debe hacer el programa que se va
a codificar. En la etapa de diseño del algoritmo se determina los pasos lógicos debe seguir el
programa para realizar la tarea solicitada. Los métodos más eficaces para el proceso de diseño
se basan en el conocido como: divide y vencerás. Es decir, la resolución de un problema com-
plejo se realiza dividiendo el problema en subproblemas y a continuación dividir estos subpro-
blemas en otros de nivel más bajo, hasta que pueda ser implementada una solución en la compu-
tadora.
Profesor Claudio J. Varela A.
Tema 4: Fases en la Resolución de Problemas 13
Este método se conoce técnicamente como diseño descendente (top-down) o modular.
El proceso de romper el problema en cada etapa y expresar cada paso en forma más detallada
se denomina refinamiento sucesivo.
Cada subprograma es resuelto mediante un módulo (subprograma) que tiene un solo
punto de entrada y un solo punto de salida.
Cualquier programa bien diseñado consta de un programa principal (el módulo de nivel
más alto) que llama a subprogramas (módulos de nivel más bajo) que a su vez pueden llamar a
otros subprogramas. Los programas estructurados de esta forma se dice que tienen un diseño
modular y el método de romper el programa en módulos más pequeños se llama programación
modular. Los módulos pueden ser planeados, codificados, comprobados y depurados indepen-
dientemente (incluso por diferentes programadores) y a continuación combinarlos entre sí. El
proceso implica la ejecución de los siguientes pasos hasta que el programa se termina:
1. Programar un módulo.
2. Comprobar el módulo.
3. Si es necesario, depurar el módulo.
4. Combinar el módulo con los módulos anteriores.
El proceso que convierte los resultados del análisis del problema en un diseño modular
con refinamientos sucesivos que permitan una posterior traducción a un lenguaje se denomina
diseño del algoritmo.
El diseño del algoritmo es independiente del lenguaje de programación en el que se
vaya a codificar posteriormente el programa.
A continuación, en la figura 6.2, se muestra el diseño descendente de un problema que
desea calcular la superficie de un rectángulo, dada la base y la altura.
Problema Superficie de
un Rectángulo
Entrada de Salida de
Cálculos resultados
datos
Entrada ALTURA SUPERFICIE = BASE * Salida ALTURA
ALTURA
Entrada BASE Salida BASE
Salida
SUPERFICIE
FIGURA 6.2. Diseño descendente y refinamiento sucesivo del problema.
Bachiller en Tecnología Informática
14 Desarrollo Lógico y Algoritmo -10°
El diseño descendente es un método para resolver el problema que posteriormente se
traducirá a un lenguaje comprensible por la computadora. En el diseño descendente se co-
mienza con una descripción general del problema; a continuación, se descompone en subpro-
blemas y se refinan las sucesivas operaciones hasta que la solución está detallada de modo que
pueda ser traducida a un lenguaje de programación. Todo este procedimiento se denomina di-
seño del algoritmo.
Muchos programadores principiantes no comprenden la necesidad de diseñar un algo-
ritmo antes de escribir un programa y tratan de omitir este proceso, solucionando el problema
con la codificación del programa directamente, pensando que así ahorrará tiempo. No es así. La
experiencia demuestra que es necesario realizar el proceso completo para simplificar la solu-
ción y reducir el tiempo, evitando cometer muchos errores y perder tiempo resolviéndolos.
5.1.1. Herramientas de Diseño
Aunque existes varias herramientas para el diseño de algoritmos, las dos herramientas
más utilizadas por la mayoría de programadores, son: diagramas de flujo, y pseudocódigos.
➢ Diagramas de flujo
Un diagrama de flujo (flowchart) es una representación gráfica de un algoritmo. Los sím-
bolos utilizados han sido normalizados por el Instituto Norteamericano de Normalización
(ANSI). En la Figura 6.3 se representa el diagrama de flujo que calcula la superficie de un rec-
tángulo.
INICIO
LEER
Altura, Base
Superficie Base * Altura
IMPRIMIR
Altura, Base,
Superficie
FIN
FIGURA 6.3. Diagrama de flujo. Cálculo de la superficie de un rectángulo.
➢ Pseudocódigo
El pseudocódigo es una herramienta de programación en la que las instrucciones se escri-
ben en palabras similares al inglés o español, que facilitan tanto la escritura como la lectura de
Profesor Claudio J. Varela A.
Tema 4: Fases en la Resolución de Problemas 15
programas. En esencia, el pseudocódigo se puede definir como un lenguaje de especificacio-
nes de algoritmos.
Ejemplo de un pseudocódigo que calcula la superficie de un rectángulo.
1. Algoritmo: Superficie de un rectángulo
2. Leer (Altura, Base)
3. Superficie Base * Altura
4. Escribir (Altura, Base, Superficie)
5. Fin
FIGURA 6.4. Pseudocódigo. Cálculo de la superficie de un rectángulo.
4.3. Codificación del Programa
Codificación es la escritura en un lenguaje de programación de la representación del al-
goritmo desarrollada en las etapas precedentes. Dado que el diseño de un algoritmo es indepen-
diente del lenguaje de programación utilizado para su implementación, el código puede ser es-
crito con igual facilidad en un lenguaje o en otro.
Para realizar la conversión del algoritmo en programa, se deben sustituir las palabras
reservadas en español por sus homónimos en inglés, y las operaciones/instrucciones indicadas
en lenguaje natural expresarlas en el lenguaje de programación correspondiente.
A continuación, podrás observar algunos ejemplos de código fuente de un programa que
calcula la superficie de un rectángulo en diferentes lenguajes de programación.
Program Superficie; {Calculo de la superficie de un rectángulo}
Use Crt;
Var Altura, Base, Superficie: Real;
Begin
Readln (Altura, Base);
Superficie := Altura * Base;
Writeln (Altura, Base, Superficie);
End.
Figura 6.5: Código fuente en Pascal
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
Dim a As Double
Dim b As Double
Dim area As Double
a = TextBox1.Text
b = TextBox2.Text
area = a * b
TextBox3.Text = Trim(area)
End Sub
End Class
Figura 6.6: Código fuente en Visual Basic
Bachiller en Tecnología Informática
16 Desarrollo Lógico y Algoritmo -10°
#include <iostream>
using namespace std;
int main(){
double a,b,area;
cout<<"ingrese ancho del rectangulo"<<endl;
cin>>a;
cout<<"ingrese alto del rectangulo"<<endl;
cin>>b;
area=a*b;
cout<<area;
return 0;
}
Figura 6.7: Código fuente en C++
# Programa que calcula la superficie de un rectángulo
a=float(input("ingrese ancho de rectángulo\n"))
b=float(input("ingrese alto de rectángulo\n"))
area=a*b
print(“El área del rectángulo es: “, str(area))
Figura 6.8: Código fuente en Python
4.4. Compilación y Ejecución de un Programa
Una vez que el algoritmo se ha convertido en un programa fuente, es preciso introducirlo
en memoria mediante el teclado y almacenarlo posteriormente en un disco. Esta operación se
realiza con un programa editor, posteriormente el programa fuente se convierte en un archivo
de programa que se guarda (graba) en disco.
El programa fuente debe ser traducido a lenguaje máquina, este proceso se realiza con
el compilador y el sistema operativo que se encarga prácticamente de la compilación.
Si tras la compilación se presentan errores (errores de compilación) en el programa
fuente, es preciso volver a editar el programa, corregir los errores y compilar de nuevo. Este pro-
ceso se repite hasta que no se producen errores, obteniéndose el programa objeto que todavía
no es ejecutable directamente.
Figura 6.9: Pasos en la Compilación de un Programa
Suponiendo que no existen errores en el programa fuente, se debe instruir al sistema
operativo para que realice la fase de montaje o enlace (link), carga del programa objeto con las
librerías del programa del compilador. El proceso de montaje produce un programa ejecutable.
Profesor Claudio J. Varela A.
Tema 4: Fases en la Resolución de Problemas 17
Cuando el programa ejecutable se ha creado, se puede ya ejecutar (correr) desde el sis-
tema operativo con sólo teclear su nombre (en el caso de DOS) o hacer doble clic sobre el pro-
grama ejecutable (en el caso de Windows). Suponiendo que no existen errores durante la ejecu-
ción (llamados errores en tiempo de ejecución), se obtendrá la salida de resultados del programa.
4.5. Depuración y Verificación de un Programa
La depuración es el proceso de encontrar los errores del programa y corregir o eliminar
dichos errores.
Cuando se ejecuta un programa, se pueden producir tres (3) tipos de errores:
1. Errores de compilación. Se producen normalmente por un uso incorrecto de las reglas
del lenguaje de programación y suelen ser errores de sintaxis. Si existe un error de sin-
taxis, la computadora no puede comprender la instrucción, no se obtendrá el programa
objeto y el compilador desplegará una lista de todos los errores encontrados durante la
compilación.
2. Errores de ejecución. Estos errores se producen por instrucciones que la computadora
puede comprender, pero no ejecutar. Ejemplos típicos son: división por cero y raíces
cuadradas de números negativos. En estos casos se detiene la ejecución del programa
y se despliega un mensaje de error.
3. Errores lógicos. Se producen en la lógica del programa y la fuente del error suele ser
el diseño del algoritmo. Estos errores son los más difíciles de detectar, ya que el pro-
grama puede funcionar y no producir errores de compilación ni de ejecución, y sólo
puede advertir el error por la obtención de resultados incorrectos. En este caso se debe
volver a la fase de diseño del algoritmo, modificar el algoritmo, cambiar el programa
fuente y compilar y ejecutar una vez más.
La verificación de un programa es el proceso de ejecución del programa con una amplia
variedad de datos de entrada, llamados datos de test o prueba, que determinarán si el pro-
grama tiene errores in («bug»). Para realizar la verificación se debe desarrollar una amplia gama
de datos de prueba: valores normales de entrada, valores extremos de entrada que comprueben
los límites del programa y valores de entrada que comprueben aspectos especiales del pro-
grama.
Figura 6.10: Depuración y Verificación de un Programa con Datos de Prueba
Bachiller en Tecnología Informática
18 Desarrollo Lógico y Algoritmo -10°
4.6. Documentación y Mantenimiento
La documentación de un problema consta de las descripciones de los pasos a dar en el
proceso de resolución de un problema. La importancia de la documentación debe ser destacada
por su decisiva influencia en el producto final.
Programas pobremente documentados son difíciles de leer, más difíciles de depurar y
casi imposibles de mantener y modificar.
La documentación de un programa puede ser interna y externa. La documentación in-
terna es la contenida en líneas de comentarios. La documentación externa incluye análisis,
diagramas de flujo y/o pseudocódigos, manuales de usuario con instrucciones para ejecutar el
programa y para interpretar los resultados.
La documentación es vital cuando se desea corregir posibles errores futuros o bien cambiar
el programa. Tales cambios se denominan mantenimiento del programa. Después de cada
cambio la documentación debe ser actualizada para facilitar cambios posteriores. Es práctica
frecuente numerar las sucesivas versiones de los programas 1.0, 1.1, 2.0, 2.1, etc. (Si los cam-
bios introducidos son importantes, se varía el primer dígito [1.0, 2.0, ...], en caso de pequeños
cambios sólo se varía el segundo dígito [2.0, 2.1 ...].)
Figura 6.11. Documentación Interna y Externa
El mantenimiento del programa surge cuando se descubre que es preciso hacer algún cam-
bio, ajuste o perfeccionar el programa para que siga trabajando de manera correcta. El motivo
puede ser por la variación del método de hacer un proceso, por el descubrimiento de algún error
o simplemente para mejorar el diseño visual del programa.
Para realizar la tarea de mantenimiento es necesario que el programa esté terminado, se
cuente con el programa fuente (código) y, además, que esté debidamente documentado para
facilitar su actualización.
Explica con tus palabras ¿cuál es la importancia de documentar los programas?
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
_________________________________________________________________.
Profesor Claudio J. Varela A.