UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa...

18
Metodología de resolución de problemas Ing. Norberto A. Logusso U. T. N. F. R. B. A. Versión 2011

Transcript of UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa...

Page 1: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Metodología de resolución de problemas

Ing. Norberto A. LogussoU. T. N. F. R. B. A.

Versión 2011

Page 2: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

1er. EXAMEN PARTCIAL

1.- Búsqueda de máximos y/o mínimos.

2.- Buscar valores mínimos no nulos o dentro de una gama de valores o ambos.

3.- Buscar mínimo y segundo mínimo.

4.- Repeticiones: Cuantas veces un valor cumple una condición; cantidad máxima de veces que

se cumple ininterrumpidamente una condición.

5.- Búsqueda secuencial de un elemento dentro de un conjunto (no se exigirá búsqueda

dicotómica).

6.- Ordenamiento de arreglos, con o sin arrastre; permutación de elementos.

7.- Ingreso de lotes de datos con o sin separadores (corte de control).

8.- Ingreso de elementos de un vector al azar (ordenamiento en lectura).

9.- Pruebas de escritorio.

10.- Validación de datos de ingreso.

11.- Tipos de datos estándar y definidos por el usuario: Arrays; Registro; Enumerados; Sub rango.

12.- Apareo de vectores ya ordenados.

13.- Presentar una carpeta de trabajos prácticos con los ejercicios de la guía (NO TEORÍA) se

hayan resuelto o no en clase, conteniendo enunciados, diagramas y codificación.

14.- Valorización de exámenes:

Diagrama de lógica: 60 %;

Codificación: 50 % del diagrama, (max.: 30 %);

Presentación: 10 %.

CAPÍTULO I

Page 3: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

COMO LOGRAR RESOLVER PROBLEMAS:

GeneralidadesUna persona enfrenta un problema cuando desea satisfacer cierto objetivo y no conoce inmediatamente que acción o serie de acciones deberá tomar o ejecutar para conseguirlo.Si además de eso, dichas acciones serán ejecutadas por otro, debe asegurarse que el receptor de las instrucciones las comprenda, y tenga las habilidades adecuadas para poder ejecutarlas y llevarlas a cabo. La imposibilidad de resolver el problema inmediatamente se debe muchas veces a:

*La existencia de formas alternativas de alcanzar ese objetivo.-*Las dudas acerca del mejor curso de acción a tomar.-

Las decisiones que se tomen influirán en la efectividad y eficiencia de la resolución del problema.La naturaleza del objetivo puede variar desde algo tangible, como un objeto físico (fabricar un cerámica), hasta algo abstracto como puede ser la demostración de un teorema.-Del mismo modo, las acciones necesarias para la obtención del objetivo deseado pueden incluir tanto actividades físicas (como ajustar una tuerca) como actividades puramente mentales (juicios de semejanza).-Identificaremos entonces los siguientes componentes, que determinan la existencia de un problema:

* Objetivo o meta a alcanzar.-* Existencia de un conjunto de acciones alternativas, cuya ejecución produce los resultados requeridos (una solución).* Una situación inicial, sobre la que es posible actuar para lograr el objetivo deseado.

En la vida diaria resolvemos problemas continuamente, sin prestar atención al proceso que estamos realizando.

En un ambiente de aprendizaje, se brinda normalmente la información necesaria que consiste en:

1) Una definición más o menos clara del problema.2) Entrada dada.3) Salida requerida.

Y además, planteamos el problema y proporcionamos un método de resoluciones.La idea general es que se puedan llegar a diseñar los procedimientos de resolución de los problemas y dejar para la computadora el trabajo (tedioso) de resolverlos.

Ocurre que la computadora tiene una limitada cantidad de habilidades:

- Desde el punto de vista matemático:

Page 4: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

SumaRestaMultiplica Divide

- Desde el punto de vista lógico:

Responde “si” o “no” a una pregunta lógica.(Puede decir si un número es mayor, menor o igual a otro, comparando de a dos)

- Se comunica con los periféricos que tiene a su disposición.

Teclado, Pantallas, Impresoras, memorias auxiliares…

Este bajísimo nivel de habilidades de nuestro “interlocutor”, requiere un esfuerzo adicional por parte de quien encara la solución de un problema, utilizando una computadora:

Tiene que saber, primero que nada como se resuelve el problema, ya que difícilmente pueda dar las instrucciones elementales para hacerlo, si no lo sabe hacer.

En nuestro trabajo diario, frecuentemente debemos realizar nosotros mismos la definición de los problemas, diseñar los procedimientos de resolución, y determinar y proponer el resultado que se obtendrá.

METODOLOGÍA PARA LA RESOLUCIÓN DE PROBLEMAS

Para tener éxito en el logro del objetivo (resolver un problema), es conveniente respetar la siguiente secuencia de acciones:

* Entender el problema. * Diseñar una estrategia* Desarrollar un algoritmo (mediante un diagrama de flujo).* Probar el algoritmo (prueba de escritorio).* Optimizarlo.* Codificarlo* Ejecutarlo.* Evaluar los resultados obtenidos. (Muy importante).

ENTENDER EL PROBLEMA

En una primera etapa se trata de plantear los problemas sin prejuicios, generalizando para todos los datos posibles, reales y significativos.

La comprensión y análisis de un problema requieren mucho más tiempo del que suele llevar una explicación.

ES LA ESENCIA DEL PROCESO DE PROGRAMAR.

Page 5: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Es imprescindible NO COMENZAR a desarrollar un método de resolución sin antes haber comprendido bien el problema.La comprensión puede facilitarse si empleamos algunas de las siguientes estrategias de análisis:

1- Leer cuidadosamente el enunciado del problema hasta familiarizarse con el contenido.

2- Escribir preguntas en los márgenes, destacar parte del texto, o cualquier otra forma de señalización que indique que la tarea no está lo suficientemente clara.

3- Hacerse alguna o varias de las siguientes preguntas:

¿Cuales son los datos?¿Cuál es la apariencia de los datos?¿En qué soporte se encuentran?¿Cuántos datos hay?¿Cuál es la secuencia de ingreso de los datos?¿Cómo se sabe cuándo todos los datos fueron procesados?¿Cuál debe ser el aspecto de las salidas?¿Cuál es la secuencia de la salida?¿Qué condiciones especiales de error pueden aparecer?

4- También podrá:

Redefinir el problema Introducir una notación adecuadaRealizar esquemas o dibujos.Fraccionar el problema en partes.

DISEÑAR UNA ESTRATEGIA

Una de las acepciones del diccionario de la Real Academia Española para la palabra estrategia es:“En un proceso regulable, el conjunto de las reglas que aseguran una decisión óptima en cada momento.”

En este caso, la utilizaremos para describir sucintamente que herramientas deberíamos utilizar, la secuencia, etc.Generalmente en esta parte del análisis, responderemos a la pregunta ¿Qué hay que hacer?

DESARROLLAR UN ALGORITMO:

Se suele definir algoritmo como: El conjunto finito de instrucciones que, ejecutadas en determinado orden, permiten resolver una tarea dada.

Page 6: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Todo algoritmo debe satisfacer:

* Que haya cero o más datos provistos externamente.* Debe producir al menos una información. (Resultado).* Cada instrucción debe ser clara y sin ambigüedades.* Para cualquier caso particular de los datos, el algoritmo debe tener un número

finito de pasos.* Toda instrucción debe ser lo suficientemente elemental como para que una

persona pueda llevarla a cabo con lápiz y papel.

Generalmente en esta parte del análisis, responderemos a la pregunta:

¿Cómo hay que hacer cada cosa?

DIAGRAMA DE LÓGICA

¿Qué es un diagrama de lógica?

Es la representación gráfica de la secuencia de operaciones necesarias para completar un trabajo.

El diagrama de un programa es una construcción gráfica de la concepción lógica de la solución de un problema.De acuerdo a esta definición, podemos deducir que un diagrama no está limitado a describir el trabajo de un computador. De hecho, los diagramas de lógica se han utilizado, y se siguen utilizando para documentar toda clase de labores.

Para lograrlo se utilizan técnicas de estructuración.Las disciplinas estructuradas que hoy se consideran indiscutiblemente exitosas a lo largo del proceso de desarrollo de sistemas dan gran importancia a estas técnicas, ya que permiten su mantenimiento y modificación a un costo relativamente bajo.

ESTRUCTURACIÓN

Lo más importantes de las técnicas estructuradas es fraccionar un problema extenso en subsistemas más pequeños y simples.En lo que conocemos como desarrollo tradicional, podemos identificar los siguientes pasos:

DISEÑAR UN PROGRAMA ENTERODEFINIR LAS INTERFASESESCRIBIR TODA LA CODIFICACIÓNPRUEBA Y DEPURACIÓNINTEGRACIÓN

Los problemas que presentan estas técnicas son:

1- Las inconsistencias en la codificación no se encuentran hasta la integración.

Page 7: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

2- Es difícil aislar problemas.3- No es un producto viable hasta el fin del proyecto.

En cambio, las técnicas estructuradas utilizan procedimientos “TOP DOWN”, que consisten en:

1- Identificar las funciones principales.2- Fraccionarlas en sub funciones.3- Escribir la codificación paralela al diseño.4- Probar la codificación de “Alto Nivel” utilizando fragmentos.

En el proceso de desarrollo de un programa es necesario primero identificar las funciones, luego las sub funciones de aquellas, diferenciando las que están controladas por decisiones, de las que son iterativas.

En este proceso de identificar funciones y sub funciones radica el éxito del programa. A medida que son identificadas, se va armando un diagrama de estructura en el que se van mostrando las diferentes jerarquías entre sus componentes.

DIAGRAMAS DE LÓGICA DE PROGRAMAS

Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema específico.

¿Qué es un programa de computadora?

Es un conjunto de instrucciones secuenciales que ordenan el comportamiento de un computador.

Podríamos distinguir dos tipos de programas:

a) El Diagrama de Lógica de las FUNCIONES PRINCIPALES DEL PROGRAMA

b) El Diagrama de Lógica DETALLADO DEL PROGRAMA

Cada uno de ellos se traza con el mismo formato y mediante el mismo juego de símbolos.UN EJEMPLO PODRÍA SER:

Page 8: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

1

DIAGRAMA DE LÓGICA DE LAS FUNCIONES PRINCIPALES DEL PROGRAMA

Este diagrama representa la lógica principal del problema, identifica las funciones principales y el orden de ejecución del dentro de la lógica del programa. El nivel de detalle de éste diagrama de lógica es bajo, tal que un símbolo de proceso puede representar toda una serie de operaciones relacionadas, las cuales pueden identificarse como una función mayor del programa o una rutina completa.-

Durante el desarrollo del diagrama detallado del programa, éste diagrama de funciones principales sirve como un plan de base para organizar los elementos del diagrama de lógica de detalles, el cual será trazado después de que el programador identifique los pasos más importantes del proceso.

DIAGRAMA DE LÓGICA DE DETALLE DEL PROGRAMA

Este tipo de diagrama de lógica ilustra el orden de ejecución de los pasos individuales de un programa; muestra las trasferencias de datos, las operaciones aritméticas, funciones, decisiones, entrada y salida de datos, condiciones de bifurcación, que se encuentran en la lógica de un programa.El tamaño físico de un diagrama de lógica de detalle está limitado solo por la complejidad del problema que se plantea.

METODOLOGÍA PARA LA RESOLUCIÓN DE PROBLEMAS

Entre los que se consideran formas adecuadas para la resolución de problemas, encontramos una denominada: “Top-Down”.

Page 9: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Esto es una forma de encarar la resolución de un problema desde lo más complejo a lo más sencillo, dicho en otras palabras, a medida que se avanza en la solución, se completan más detalles de la misma.Para nuestros cursos utilizaremos los siguientes elementos para confeccionar los diagramas:

PROGRAMACIÓN MODULAR

La programación modular es uno de los métodos de diseño más potentes y flexibles para mejorar la productividad de un programa.En este tipo de programación, el programa se divide en módulos (partes independientes), cada una de las cuales tiene una única entrada y una única salida, y ejecuta una única actividad o tarea, independientemente de otros módulos.Esto permite analizar, probar, codificar y poner a punto cada módulo por separado.Cada programa puede contener un módulo denominado Programa Principal que controla todo lo que sucede, transfiere el control a sub módulos (denominados Procedimientos o Funciones) de forma que cada uno pueda ejecutar las tareas indicadas, este, a su vez finalizada la ejecución de la tarea, devuelve el control al módulo principal.

Dentro de la metodología propuesta para encarar la solución de los problemas utilizando éstos mecanismos, se encuentra la de describir en nuestro propio lenguaje, (Español) los “bloques” de tareas que debe ejecutar cada módulo, teniendo presente que cada uno de ellos solo debe tener una entrada y una salida.Esta simple consideración facilita enormemente las cosas ya que a cada “bloque” se lo puede considerar, analizar, probar, codificar, etc., independientemente de los demás.Con ésta simple técnica se analiza cada “bloque” en forma independiente y una vez alcanzado el nivel de detalle requerido (esto dependerá fundamentalmente del lenguaje utilizado para la codificación del programa), se reemplaza el nuevo diagrama por el “bloque” en el diagrama original.

Page 10: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Este mecanismo finalizará cuando todos los “bloques” se encuentren descritos con el nivel de detalle requerido por el lenguaje.Con esta técnica se pueden colocar durante el desarrollo del programa, “Puntos de Control” entre módulos de forma tal de poder controlar que las entradas y las salidas planeadas a cada bloque se cumplen; en caso de no ser así, se puede deducir fácilmente cual es el módulo que falla, revisarlo, corregirlo, o reemplazarlo totalmente de ser necesario.La programación estructurada significa escribir un programa bajo las siguientes reglas:

* Diseño modular* Cada módulo se diseña de modo descendente.* Cada módulo se codifica utilizando las tres estructuras básicas.

El término Programación Estructurada se refiere a un conjunto de técnicas que han estado evolucionando desde los primeros trabajos de Edsgar Dijtra. La programación estructurada utiliza un número limitado de estructuras de control que minimiza la complejidad de los programas y por consiguiente reducen los errores; además estos programas son más fáciles de escribir, verificar, leer, y mantener.La programación Estructurada es entonces el conjunto de técnicas que incorporan:

RECURSOS ABSTRACTOSDISEÑO DESCENDENTE (Top-Down)ESTRUCTURAS BÁSICAS.

Recursos Abstractos:

La programación Estructurada se auxilia de recursos abstractos que consisten (según Dijtra) en descomponer una acción compleja en términos de un número de acciones más simples, capaces de ser ejecutadas en una computadora.

Diseño Descendente (Top-Down):

El diseño descendente es un proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos.

La metodología descendente consiste en lograr una relación entre las sucesivas etapas de estructuración de modo de relacionarlas unas con otras mediante entradas y salidas de información.

De esta forma se parte de la base de determinar para cada estructura en una primera etapa: ¿Que Hace? y en futuros niveles de refinamiento: ¿Como lo Hace?

Estructuras Básicas

En Mayo de 1966, Corrado Böhm y Giuseppe Jacopini enunciaron un Teorema de la Programación Estructurada, demostrando que un programa propio puede ser escrito, utilizando solamente tres tipos de estructuras de control:

Secuencia (o Concatenación), Selección (o Decisión)

Page 11: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Repetición (o Iteración).

Un programa se define como propio si cumple con las siguientes características:

* Posee un único punto de entrada y uno de salida o fin.* Todas las instrucciones son ejecutables. (Instrucciones elementales)* No existen ciclos infinitos (sin fin o "loops").* Deben existir caminos desde la entrada hasta la salida que se pueden seguir y

que pasen por todos las partes del programa.

Veremos algunos ejemplos:

Analizaremos el siguiente enunciado:

Leer dos valores A y B, calcular su suma, S, e imprimirla.

Este diagrama representa una secuencia o concatenación de órdenes

Analizaremos ahora una variante del enunciado anterior:

Leer dos valores A y B, calcular su suma, S, si A es mayor a B o la diferencia, B - A en caso contrario, e imprimirla.

Page 12: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

Cuando una decisión se ejecuta, se evalúa la expresión lógica y se actúa en función del resultado.Convengamos en que si la expresión es verdadera, se ejecutarán las acciones que se encuentren a la izquierda, cumplidas estas, se transfiere el control a la primer instrucción que esta codificada fuera de la decisión, en caso de ser falsa la expresión, se ejecutarán las acciones que están a la derecha, si es que hay alguna y cumplidas, también se transfiere el control a la primer instrucción que esta codificada a continuación.

El nuevo diagrama que resulta es:

Otro enunciado en el que se apliquen ciclos podría ser:

Leer dos valores A y B, calcular su producto por sucesión de sumas.

Esto significa que debemos realizar B veces la sumatoria de A, es decir SUM = A + A + ... +A (tantos A como sea el valor de B), o bien A veces la suma de B, es decir SUM = B + B

Page 13: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

+ ... +B (tantos B como sea el valor de A), reflejaremos en el diagrama la primer alternativa.Utilizaremos un ciclo Mientras, seguido por una expresión lógica, (While (expresión lógica) DO sentencia/s; y que se comporta de la siguiente forma:Cuando se alcanza el ciclo, la primer acción que se ejecuta es: evaluar la expresión lógica; si es verdadera, se transfiere el control a la primer sentencia indicada dentro del ciclo, cumpliéndose secuencialmente todas las demás sentencias; luego de cumplir la última, vuelve a evaluar la expresión lógica. Y así continúa, hasta que la expresión lógica sea falsa.Esto nos obliga a verificar que el valor de verdad de la expresión lógica se modifique dentro del ciclo, ya que de no se así, una vez que ingreso, nunca saldría del ciclo, (loop).De esa manera, incluimos en la siguiente solución propuesta, la variable INI, que comenzando desde el valor cero, antes de ingresar al ciclo, se va incrementando en una unidad (1) a cada paso, de forma tal que en algún momento, se superará el valor de B, y saldrá del ciclo.Veamos como queda la solución propuesta:

Para comprender mas claramente este diagrama llevaremos a cabo una tarea que denominaremos "Prueba de Escritorio" con la que podremos determinar si nuestro diagrama funciona.La prueba consiste en escribir los nombres de cada una de las variables que aparecen en nuestro diagrama en columnas y colocando los valores paso a paso, uno debajo del otro, representando el último valor de cada uno de ellos, el valor actual contenido en la memoria.Hay que recordar, que cada memoria puede contener un solo valor por vez, y que en cada

Page 14: UNIDAD TEMÁTICA NRO 5:€¦ · Web view2011/06/05  · Un diagrama de lógica de un programa ilustra el flujo de los datos de alimentación, procesamiento y emisión de un problema

oportunidad que asignamos o leemos un nuevo valor, este destruye el anterior, decimos entonces que: el alojamiento en memoria es destructivo. Por esa razón, en la sentencia: INI := INI + 1 los valores que va tomando sucesivamente INI son 0, 1, 2, ... razón por la cual a ese tipo de sentencia, ¡ que no es una igualdad matemática ! , la denominamos: Contador.Las sentencias de asignación, son instrucciones del tipo:

Identificador de Variable := Expresión

que se cumplen siguiendo varios pasos: (4)1º Se evalúa la Expresión .2º Se analiza el tipo de Variable.3º Se ajusta el resultado de la expresión al tipo de variable (si es posible)4º Se guarda el resultado de la expresión (ajustada) en la memoria indicada por el identificador de variable.

En tanto que S := S + A, va sumando los valores de A con cada paso, comenzando con el valor cero (neutro en una suma), la denominamos: Acumulador

Imaginemos entonces que deseamos multiplicar los valores 3 * 4, por lo que A tomará el valor 3 y B el valor 4.

Paso A B INI S COMENTARIOS1 3 4 Al cumplirse la orden de lectura se ingresaron y almacenaron los dos valores2 0 Se asigna a INI el valor cero.3 0 Se asigna a S el valor cero.

4Al alcanzar el ciclo MIENTRAS, se valoriza la expresión, si es verdadera, se ingresa al ciclo, se cumplen todas las instrucciones y luego se vuelve a verificar. Si es falsa, se pasa a cumplir la primera instrucción fuera del ciclo.

5 3 Como es verdadera, se cumple la instrucción, sumando a S el valor de A y se guarda el resultado en S (0 + 3).

6 1 Se incrementa en 1 el valor de INI y se guarda el resultado en INI. (0 + 1)

7 6Cumplido el paso anterior se verifica nuevamente el valor de la expresión del ciclo MIENTRAS, y por ser aun verdadera, se ingresa al ciclo, cumpliendo la instrucción que incrementa el valor de S en A (3+3)

8 2 Se incrementa en 1 el valor de INI y se guarda el resultado en INI. (1 + 1)

9 9Cumplido el paso anterior se verifica nuevamente el valor de la expresión del ciclo MIENTRAS, y por ser aun verdadera, se ingresa al ciclo, cumpliendo la instrucción que incrementa el valor de S en A (6+3)

10 3 Se incrementa en 1 el valor de INI y se guarda el resultado en INI. (2 + 1)

11 12Cumplido el paso anterior se verifica nuevamente el valor de la expresión del ciclo MIENTRAS, y por ser aun verdadera, se ingresa al ciclo, cumpliendo la instrucción que incrementa el valor de S en A (9+3)

12 4 Se incrementa en 1 el valor de INI y se guarda el resultado en INI. (3 + 1)

13Cumplido el paso anterior se verifica nuevamente el valor de la expresión del ciclo MIENTRAS, y por ser falsa (INI no es menor a 4), se transfiere el control a la primer instrucción fuera del ciclo. Que solicita se imprima el contenido de la memoria S, 12. (igual a 4*3)