Resolución de problemas con computadora y herramientas de programación Contenido de la segunda parte del curso: •Fases de la resolución de problemas •Programación modular •Programación estructurada •Escritura de algoritmos Fases en 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 programas es esencialmente un proceso creativo, se pueden considerar una serie de fases o pasos comunes, que generalmente deben seguir todos los programadores. Las fases de resolución de un problema con computadora son: •Análisis del problema: El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la empresa o por la persona que se encarga del programa. •Diseño del algoritmo: Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el problema. •Codificación (implementación): La solución se escribe en la sintaxis del lenguaje de alto nivel y se obtiene un programa. •Compilación, ejecución y validación: El programa se ejecuta, se comprueba rigurosamente y se eliminan todos los errores (‘bugs’ en inglés). •Depuración y mantenimiento: El programa se actualiza y se modifica cada vez que sea necesario. •Documentación: Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y referencia. Analisis del problema La primera fase de resolución de un problema con computadora es el análisis del problema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada.Para definir un buen 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? Ejemplo01: Diseñe un algoritmo para para buscar una palabra en el diccionario. Buscar palabra 1.Inicio 2.Ubicar en la parte superior de cualquier hoja del diccionario las primeras tres letras con las que comienza la palabra a buscar. 3.Una vez localizadas, buscar en la columna correspondiente la palabra de arriba-abajo o de abajoarriba. 4.Leer significado. 5.Terminar 1 By: Maxx Ejemplo02: Diseñe un algoritmo para encender la computadora y comenzar a trabajar con Word. Trabajar con Word 1.Inicio. 2.Encender CPU. 3.Encender monitor. 4.Una vez inicializado el sistema, ubicar el acceso directo de Word, o buscarlo en el menú de inicio. 5.Dar clic en el Icono de Word. 6.Esperar a que se cargue en memoria. 7.Comenzar a escribir. 8.Terminar. Ejemplo03: Se desea obtener una tabla con las depreciaciones acumuladas y dos valores reales de cada año de un automóvil comprado en $86,000.00 en el año 1996, durante los seis años siguientes suponiendo que un valor de recuperación o rescate de $6,500.00. Realizar el análisis del problema, conociendo la fórmula de la depreciación anual constante D para cada año de vida útil. D= Costo - Valor de recuperación / Vida útil D= 86,000.00 - 6,500.00 / 6 D= 13,250.00 Entrada Costo original Vida útil Valor de recuperación Proceso Depreciación acumulada Cálculo de la depreciación acumulada por cada año Calculo del valor del automóvil en cada año Salida Depreciación anual por año Depreciación acumulada por año Valor del automóvil en cada año Tabla Solicitada Año Depreciación Depreciación Acumulada Valor Anual 1 2 3 4 5 1996 1997 1998 1999 2000 13,250.00 13,250.00 13,250.00 13,250.00 13,250.00 13,250.00 26,500.00 39,750.00 53,000.00 66,250.00 72,750.00 59,500.00 46,250.00 33,000.00 19,750.00 6 2001 13,250.00 79,500.00 6,500.00 Diseño del algoritmo En la etapa de análisis del proceso de programación se determinaqué hace el programa. En la etapa de diseño se determina cómo hace el programa la tarea solicitada. Los métodos más eficientes para el proceso de diseño se basan elen conocido divide y vencerás. Es decir, la resolución de un problema complejo se realiza dividiendo el problema en subproblemas y a continuación dividir estos subproblemas en otros de nivel más bajo, hasta que pueda ser implementada una solución en la computadora. 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 resuelto mediante un módulo(subprograma) que tiene un solo punto de entrada y un solo punto de salida. 2 By: Maxx Herramientas de programación Las dos herramientas más utilizadas comúnmente `para diseñar algoritmos son: diagramas de flujo y pseudocódigos. •Diagramas de flujo Un diagrama de flujo (flowchart) es la representación gráfica deun algoritmo. Los símbolos utilizados han sido normalizados por elInstituto Norteamericano de normalización (ANSI), y los más frecuentemente empleados se muestran a continuación: Terminal Subprograma E/S Si Decisión No Proceso Conectores Un diagrama de flujo (flowchart) es la representación gráfica deun algoritmo. Los símbolos utilizados han sido normalizados por elInstituto Norteamericano de normalización (ANSI), y los más frecuentemente empleados se muestran a continuación: Pseudocódigo El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al español o al inglés, que facilitan tanto la escritura como la lectura de programas. En esencia, el pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos. El pseudocódigo que resuelve el problema anterior es: Previsiones de depreciación Introducir: Costo, Vida útil y Valor Final de rescate (recuperación) Imprimir: Cabeceras Establecer: El valor inicial del año Calcular: Depreciación mientras número de año <= Vida útil Hacer Calcular depreciación acumulada Calcular valor actual Inicio Imprimir una línea en la tabla Incrementar el valor del año Fin de mientras Costo Vida útil Valor de rescate Valor actual ← Costo Depreciación ← (Costo – Valor de rescate)/Vida útil Año < Vida útil Fin Acumulada ← Acumulada + Depreciación Valor actual ← Valor actual + Depreciación Año ← Año + 1 3 By: Maxx Diseño Descendente Es la descomposición del problema original en subproblemas más simples y a continuación la división de esos subproblemas en otros más simples que pueden ser implementados para su solución en la computadora. Refinamiento del algoritmo Es un proceso que, tras esa primera descripción (top –down), estos se amplían en una descripción más detallada con pasos más especificos. Ejemplo01: El problema del calculo de la circunferencia y superficie de un circulo se puede descomponer en subproblemas más simples: Algoritmo 1.Inicio. 2.Leer datos. 3.Calcular la superficie y la longitud de la circunferencia. 4.Escribir resultados. 5.Fin. Refinamiento 1.Inicio. 2.Leer radio. 3.Calcular circunferencia. 4.Escribir resultados 5.Fin Algoritmo 1.Inicio. 2.Superficie = 3.141592 * radio exp 2 3.Circunferencia = 2 * 3.141592 * radio 4.Escribir radio, superficie y circunferencia. 5.Fin. Diagrama del diseño descendente de la resolución de un problema Cálculo de la superficie y longitud De una circunferencia Entrada de datos Cálculo de la superficie Calculo de la longitud Entrada Radio (R) S= pi * R exp 2 L= pi * R * 2 4 Salida de resultados Salida R Salida S Salida R By: Maxx Ejemplo01: Calcular el valor de la suma 1 + 2 + 3 + … + 100 Algoritmo 1.Inicio 2.Establecer contador a 1 3.Establecer Suma a 0 4.MientrasContador <= 100 hacer Sumar Contador a Suma (Suma ←Suma + Contador) Incrementar Contador en 1 fin mientras 5.Visualizar suma 6.Fin Ejemplo02: Calcular la paga neta de un trabajador conociendo el número de horas trabajadas, la tarifa horaria y tasa de impuestos. Realizar su análisis de Entradas, Procesos y salida, Su pseudocódigo y su diagrama de flujo. Algoritmo 1.Leer Horas, Tarifa y Tasa. 2.Calcular Pago bruto, la fórmula es: Pago bruto = Horas * Tarifa 3.Calcular Impuestos, la fórmula es: Impuestos = Pago bruto * Tasa 4.Calcular Pago neto, la fórmula es: Pago neto = Pago bruto –Impuestos 5.Visualizar Pago bruto, Impuestos y Pago neto. Ejemplo03: Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de datos la ficha del cliente, si el cliente es solvente entonces la empresa acepta el pedido; en caso contrario rechazará el pedido.Redactar el pedido correspondiente. Algoritmo 1.Inicio. 2.Leer el pedido del cliente. 3.Examinar la ficha del cliente. 4.Si el cliente es solvente aceptar el pedido, de lo contrario rechazarlo. 5.Fin. *Ejercicio: realizar el algoritmo refinado (top down) Ejercicios propuestos •Escribir un algoritmo que calcule la superficie de un triángulo en función de la base y la altura. (también diseñe su diagrama de flujo) •Realizar un algoritmo que calcule la suma de los enteros 1 y 10, es decir,1+2+3+4+5+…+10. (también diseñe su diagrama de flujo) •Definir un algoritmo para intercambiar los valores de dos variables numéricas. (también diseñe su diagrama de flujo) •Diseñe un algoritmo para capturar una palabra clave en un sistema. La palabra clave es “UDL”. Si la clave es correcta se accede al sistema, en caso contrario se vuelve a capturar. (también diseñe su diagrama de flujo) 5 By: Maxx