jueves, 29 de mayo de 2014

I ALGORITMO DFD

DISEÑAS & ELABORAS ALGORITMOS PARA LA SOLCUCION DE PROBLEMAS.

Empezaremos por definir & entender que es un problema. La palabra como tal se refiere a una determinada cuestion o asunto que requiere de una solucion. se trata de algun asunto en particular, que en el momento en que se solucione aportara beneficios. Es una situacion que nos impide lograr un objetivo, una condicion mental que impide llegar al satisfactor. En matematicas es muy comùn este tipo de planteamientos los cuàles permiten orientar & formar una serie de pasos para llevar a la solucion de un objetivo, ya que èsta muy relacionado tambièn con la informatica, pues aqui se manejan algoritmos. Existen problemas tan sencillos que no nos damos cuenta de que son un problema en si; sin embargo, existen otros un poco mas complejos que, por medio de pasos, nos ayudan a encontrar la solucion.


METODOLOGIA DE LA SOLUCION.

La solcion de un problema en informatica requiere de cinco pasos, dispuestos de tal forma que cada uno es dependiente de los anteriores, lo cual indica que se trata de un proceso complementario & por lo tanto cada paso exige el mismo cuidadano en su elaboracion. La metodologia de solucion la podemos definir de la siguiente manera: "conjunto de metodos que se siguen en una investigacion", & consta de cinco pasos.

FASES DE LA METODOLOGIA.

 1.- Identificacion del problema. Esta es la primera fase de la metodologia & consiste en tener una vision muy general de lo que se trata el problema.

2.- Planteamiento de alternativas de solucion. Una vez que se ha comprendido el problema, debemos analizarlo & pensar en diferentes formas de resolverlo.

3.- Elección de alternativa.
 Debemos de pensar en la alternativa que mas nos convenga, hay que tomar en cuenta las características del problema & las habilidades o recursos con los que contamos.

4.- Desarrollo de la solución.
En esta fase se trata de dar la solución, a través del empleo de los algoritmos.

 5.- Evaluacion de la solcion.
Este es el ultimo paso de la metodología & consiste en verificar si el resultado es el esperado, si la solucion fue la correcta o bien este otra forma de realizarlo mas sencilla.

 Ejemplo:
 Se identifica un problema:
*Calcular el total a pagar de 3 articulos.

 Alternativas de solucion:
*Hacerlo con lapiz & papel
 *Utilizar calculadora
*Pedirle a alguien que lo haga por mi Seleccion de una alternativa:
*Hacerlo a lapiz

 Desarollo de soluciones:
*ALGORITMO
*Conocer el precio del articulo 1
*Conocer el precio del articulo 2
*Conocer el precio del articulo 3
*Sumar los 3 puntos
*Escribier el resultado

 Evaluacion de la solucion:
*Verificar que el resultado este correcto.

 DEFINICIÓN DEL PROBLEMA
 En esta sección se debe redactar en forma clara & precisa el problema.

 ANÁLISIS DEL PROBLEMA
Consiste en establecer una serie de preguntas acerca de lo que establece el problema. Para poder determinar si se cuenta con los elementos suficientes para llevar a cabo la solución del mismo.

 ¿CON QUE CUENTO?
¿Cuales son los datos con los que se va a iniciar el proceso, que tenemos que proporcionarle a la computadora & si los datos con los que cuento son suficientes para dar solución al problema?

 ¿QUE HAGO CON ESOS DATOS?
 Una vez que tenemos todos los datos que necesitamos, debemos determinar que hacer con ellos, es decir que formula, cálculos, que proceso o transformación deben seguir los datos para convertirse en resultados. 

¿QUE SE ESPERA OBTENER?
¿Que información deseamos obtener con el proceso de datos & de que forma preséntala?
En caso de que la información obtenida no sea la deseada replantear nuevamente un análisis en los puntos anteriores.
 Es recomendable que nos pongamos en el lugar del usuario quien necesita solucionar el problema & asi también pensar que es lo que puede hacer la computadora; analicemos que es lo que necesitamos que nos ordenen & en que secuencia, para producir los resultados esperados.
 En el análisis debemos encontrar relaciones entre los datos, obtener &/o determinar formulas, obtener lista de posibles variables calculadas ya sean estas proporcionadas por el usuario, verificar si hace falta mas información tal como:

 ¿QUE TENGO? ¿QUE SE? ¿ES POSIBLE DIVIDIR EL PROBLEMA EN PASOS O ETAPAS? RECUERDA SIEMPRE EL DICHO QUE DICE: Divide & venceras

[DEFINICIÓN DEL PROBLEMA] [ANÁLISIS] [INICIO] 

Hasta este momento llevamos tres etapas o pasos para diseño & software las cuales permitirán que emitas un diseño o propuesta de solucion al problema que ha de resolverse.

 DISEÑO DE LA SOLUCIÓN
Una vez definido & analizado el problema se procede a la creación del método el cual consiste en una serie de pasos ordenados que nos proporcione un algoritmo explicito para su solución. Es recomendable la realización de pruebas de escritorio al algoritmo diseñado, para determinar su confiabilidad & detectar los errores que se pueden presentar en ciertas situaciones. Estas pruebas consisten en dar valores a la variable e ir probando el algoritmo paso a paso para obtener una solución & si esta es satisfactoria continuar con el siguiente paso de la metodología; de no se así & de existir errores deben corregirse & volver a hacer las pruebas.

 [DEFINICIÓN DEL PROBLEMA] [ANÁLISIS] [INICIO] [DISEÑO DE LA SOLUCIÓN O PROPUESTA DE SOLUCIÓN] [PRUEBA DE ESCRITORIO]

 ¿Qué es la prueba de escritorio?

Es seguir uno a uno los pasos, verificando que se llegue siempre a resultados válidos, si nos encontrarnos con ambigüedades es necesario revisar nuestra Propuesta de solución.
Esto quiere decir que algo hicimos mal. Y en caso de encontrar error es necesario revisar el proceso desde su Definición.
 Podemos preguntarnos ¿funciona? si o no, aquí no puede haber supuestos.



Codificación

Consiste en escribir la solución del problema en una serie de instrucciones detalladas en un código reconocible por la computadora; es decir, en un lenguaje de programación. A esta serie de instrucciones se le conoce como PROGRAMA.
La codificación va de acuerdo al lenguaje seleccionado y se pueden definir los tipos de datos a usar y declarar las variables necesarias, así como también definir la interface del usuario, establecer el modo de operar el programa siguiendo los pasos definidos, traducir el algoritmo o diagrama al lenguaje de programación elegido.



 Prueba y Depuración

 Prueba es el proceso de identificar los errores que se presenten durante la ejecución del programa; es conveniente que cuando se pruebe un programa se tomen en cuenta los siguientes puntos:
1. Tratar de iniciar la prueba con una mentalidad saboteadora, casi disfrutando la tarea de encontrar un error.
2. Sospechar de todos los resultados que arroje la solución, por lo tanto, se deberán verificar cada uno de ellos.
3. Considerar todas las situaciones posibles, normales y anormales.

La Depuración consiste en eliminar los errores que se hayan detectado durante la prueba para dar paso a una solución adecuada y sin errores.



 Puntos importantes a considerar:

1. Para los errores de sintaxis:
• Leer todos los mensajes de “error” y actuar en consecuencia.
• Usar las estructuras definidas en el lenguaje.
• Repetir el proceso hasta que no haya más mensajes.
• En caso de error lógico, es necesario revisar nuestra Propuesta de Solución.
• Si es necesario usar visores temporales. (Los visores temporales son pantallas de prueba que nos permiten ver si está bien la forma en la que se presenta el programa para resolver el problema, también se toman en cuenta los colores, el tipo de letra, tamaño, etcétera).
• Usar las herramientas de depuración. Se refiere a eliminar los errores que se hayan detectado durante la revisión que se hizo.
• Comparar con los datos de la Prueba de Escritorio. (Ver si lo que escribí es la solución deseada al problema y si es lo que se requería).

 Algoritmo

La importancia de un algoritmo radica en mostrar la manera de llevar a cabo procesos y resolver mecánicamente problemas matemáticos o de otro tipo.
Al igual que las funciones matemáticas, los algoritmos en la informática reciben una entrada, se le llama entrada porque permite alimentar de datos al programa o al sistema y la transforman en una salida, salida porque los datos se convierten en información y pueden visualizarse o imprimirse comportándose como una caja negra. Sin embargo, no toda caja negra que convierta una entrada en una salida se puede considerar un algoritmo.
 Para que un algoritmo pueda ser considerado como tal, debe ser una secuencia ordenada, definida y finita de instrucciones.
De este modo se puede seguir y predecir el comportamiento del algoritmo para cualquier entrada posible. A partir del seguimiento de esa secuencia de instrucciones o comportamiento del algoritmo, y ambigüedades puede seguirse su traza en el resto del mismo.
El concepto de algoritmo, aunque similar y obviamente relacionado, no debe confundirse con el concepto de programa. Mientras el primero es la especificación de un conjunto de pasos (operaciones, instrucciones, órdenes, etcétera), orientados a la resolución de un problema (método), el segundo es ese conjunto de instrucciones especificadas en un determinado lenguaje de programación y para un computador concreto.

El algoritmo permite partir de un estado inicial y tras seguir los pasos propuestos obtener una solución. Suelen estar asociados a las matemáticas pero no siempre implican la presencia de números. El manual de un electrodoméstico o una serie de órdenes del jefe a un empleado para desarrollar una cierta tarea también puede ser un algoritmo.
Un algoritmo es un conjunto ordenado y finito de operaciones que se utilizan para la solución de un problema. Se trata de instrucciones o reglas definidas a través de pasos sucesivos que permiten realizar una actividad. Es una serie de actividades encaminadas todas a resolver el problema en cuestión. La mayoría de los algoritmos involucran métodos para organizar los datos que intervienen en el cómputo.
Cuando un programa de computadora es grande o complejo, éste será desarrollado con mucho esfuerzo, ya que se debe comprender y definir el problema a solucionar, manejando su complejidad, y descomponiéndolo en partes pequeñas que puedan resolverse más fácilmente.
 A menudo, muchos algoritmos, después de la descomposición son triviales al instrumento. En la mayoría de los casos, sin embargo, existen algunos cuyo funcionamiento es crítico porque alguno o varios de los recursos del sistema (memoria, tiempos de uso de procesador, etcétera) pueden agotarse durante su funcionamiento.



 Características de los algoritmos
 El científico de computación Donald Knuth ofreció una lista de cinco propiedades, que son ampliamente aceptadas como requisitos para un algoritmo:

1. Carácter finito.
Un algoritmo siempre debe terminar después de un número finito de pasos.

2. Precisión.
Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a cabo deben ser especificadas de manera rigurosa y no ambigua para cada caso.

3. Entrada.
Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre.
Estas entradas son tomadas de conjuntos específicos de objetos.

4. Salida.
Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las entradas.

5. Eficacia.
También se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a realizar en un algoritmo deben ser suficientemente básicas como para que en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre usando papel y lápiz. Knuth admite que, aunque su descripción pueda ser intuitivamente clara, carece de rigor formal, puesto que no está exactamente claro que significa “precisamente definido”, “de manera rigurosa y no ambigua”, o “suficientemente básicas”, y así sucesivamente. A partir del carácter finito y de la salida se deduce que ante una misma situación inicial o valores de entrada, (esto es, los datos que inventas cuando haces una corrida de escritorio) un algoritmo debe proporcionar siempre el mismo resultado (o salida), con excepción de los algoritmos probabilistas que ya se mencionaron anteriormente.

 Pasos para hacer un algoritmo para diseñar software:

 ETAPA DESCRIPCIÓN

1 Análisis del problema                                                                                                                            
2 Diseño de algoritmo
3 Codificación

Se implementa el algoritmo en un código escrito en un lenguaje de programación. Refleja las ideas desarrolladas en las etapas de análisis y diseño.
Conducen al diseño detallado por medio de un código escrito en forma de un algoritmo.

 4 Compilación y ejecución
5 Verificación
6 Depuración

Traduce el programa fuente a programa en código de máquina y lo ejecuta.
Busca errores en las etapas anteriores y los elimina.


7 Documentación

Son comentarios, etiquetas de texto, que facilitan la comprensión del programa.

 Los pasos para hacer un algoritmo son muy similares a los de la metodología de solución de un problema visto en la sección anterior, esto es porque siempre se trabajan juntos para cualquier cuestión o labor que ejecutes en tu vida cotidiana. El término suele ser señalado como el número finito de pasos para convertir datos en entrada (problema) en una salida (solución).

 Los algoritmos funcionan paso a paso. Cabe destacar que los algoritmos son importantes en la informática ya que permiten representar datos como secuencias de bit. Un programa es un algoritmo que indica a la computadora los pasos específicos que debe seguir para desarrollar una tarea.

 CONCEPTO CARACTERÍSTICAS

 Algoritmo: Es un método para resolver un problema mediante una serie de pasos definidos, precisos y finito.

Preciso: Implica el orden de realización de cada uno de los pasos.

Definido: Si se sigue dos veces, se obtiene el mismo resultado.

 Finito: Tiene un número determinado de pasos, implica que tiene un fin.

 MÉTODOS                                         DESCRIPCIÓN                            EJEMPLOS

 Algorítmico                  Utiliza un algoritmo y puede ser             • Instrucciones para manejar un vehículo.                                          implementado en una computadora.      • Instrucciones para secar grano a granel.                                                                                                      • Instrucciones para resolver ecuaciónes de                                                                                                     segundo grado.

Heurístico                    Se apoya en el resultado obtenido         • Ejemplos de solución de problemas                                              en un análisis de alternativas de              • Ejemplos de solución de problemas físicos                                   experiencias anteriores similares                   o de ciencias exactas.                                                               matemáticos. De las mismas se                                                                                                                   deducen una serie de reglas empíricas                                                                                                           o heurísticas que de ser seguidas,                                                                                                                 conducen a la selección de la mejor                                                                                                             alternativa en todas o la mayoría de las veces.                                                                                            



Diagramas de flujo

Los diagramas de flujo son descripciones gráficas de algoritmos; usan símbolos conectados con flechas para indicar la secuencia de instrucciones. Los diagramas de flujo son usados para representar algoritmos. Por su facilidad de lectura son usados como introducción a los algoritmos, descripción de un lenguaje y de procesos a personas ajenas a la computación.

 Un diagrama de flujo es una forma más tradicional de especificar los detalles algorítmicos de un proceso y constituye su representación. Se utiliza principalmente en programación, economía y procesos industriales, estos diagramas utilizan una serie de símbolos con significados especiales. Son la representación gráfica de los pasos de un proceso que se realiza para entenderlo mejor.

Ventajas de los diagramas de flujo

 Favorecen la comprensión del proceso al mostrarlo como un dibujo.
El cerebro humano reconoce fácilmente los dibujos.
Un buen diagrama de flujo reemplaza varias páginas de texto.
 • Permiten identificar los problemas y las oportunidades de mejora del proceso.
• Son una excelente herramienta para capacitar a los nuevos empleados y también a los que desarrollan la tarea, cuando se realizan mejoras en el proceso.
 • También puede ser utilizados para clases de talleres o de acciones sobre bachilleratos técnicos. Reglas para la construcción de diagramas de flujo
• Cualquier diagrama de flujo debe tener un inicio y un fin.
 • Las líneas utilizadas para indicar la dirección del flujo deben ser rectas, verticales y horizontales.
• Todas las líneas utilizadas para indicar la dirección del flujo deben estar conectadas.
• El diagrama de flujo debe ser construido de arriba hacia abajo y de izquierda a derecha.
 • No pueden llegar más de una línea a un símbolo.

 Existen varios programas y lenguajes de programación para resolver algoritmos. Uno de ellos el es programa DFD con el cual se pueden analizar y desarrollar algoritmos.

 Este programa cuenta con diversas herramientas e instrucciones útiles para la elaboración de algoritmos. 

Solución de problemas

 Ejemplos de problemas y formas de solución

 Simulando la preparación de un pay
A continuación se emplea la metodología de solución de problemas para definir e implementar los pasos necesarios para simular la solución a un problema simple.

 Hornear y servir un pay de fruta
Se puede ofrecer la implementación en el lenguaje de programación llamado C de la solución encontrada, aunque de manera simulada. Esto quiere decir que algunas operaciones no hacen nada en realidad, sino que simulan la ocurrencia de acciones que deben llevarse a cabo.

 1. Definición del problema
 Conceptualización: El problema consiste en preparar un pay de alguna fruta específica, de acuerdo con cierta receta proporcionada, y servirlo a cierta cantidad de comensales.
   Se recibirá como entrada la receta para hornear, es decir, la cantidad de huevos, harina y mantequilla que se empleará, la fruta con que se cubrirá la base y la cantidad correspondiente, así como el tiempo que debe permanecer en el horno. Adicionalmente, se recibe el número de comensales que disfrutarán del producto final, para poder cortarlo y servirlo.

  Objetivo: el objetivo es poder seguir la receta proporcionada de modo que podamos obtener como resultado un pay de fruta que podamos repartir a los comensales.

 Elementos involucrados: el único elemento activo será la persona que llevará a cabo el proceso (el cocinero). Los elementos pasivos involucrados son la receta, sus ingredientes y cantidades (huevos, harina, mantequilla, fruta). En éste caso los comensales podrían considerarse como elementos pasivos, pues no participan de la solución (simplemente esperan, pero existen).




 Conceptualización de la solución

 Descomposición: El proceso de hornear y servir el pay abarca varias etapas. En primera instancia se debe obtener la receta a emplear. Esto consiste en especificar la cantidad de huevos, mantequilla y harina, así como el tipo y la cantidad de fruta que se utilizarán. El segundo paso consiste en preparar la base del pay, mezclando la cantidad especificada de huevos, harina y mantequilla. Luego, la base es horneada durante cierto tiempo (lo cuál también es parte de la receta). El siguiente paso es preparar la fruta con la que se cubrirá la base. Finalmente, una vez determinado el número de comensales, se procede a cortarlo y servirlo. Tareas: A continuación se presentan las tareas involucradas en la solución.  Los parámetros de cada tarea se colocan entre paréntesis.
 • mezclar_base (huevos, harina, mantequilla)
• huevos, harina y mantequilla representan las cantidades apropiadas (en gramos) de cada ingrediente. Este proceso se encarga de mezclar los componentes para lograr la base del pay.
• hornear_base (tiempo_horno)
• tiempo_horno representa la cantidad de minutos que deberá permanecer la base en el horno. Este proceso se encarga de hornear la base del pay durante el tiempo especificado en la receta.
• preparar_fruta (tipo_fruta, fruta)
• tipo_fruta es el nombre de la fruta que se empleará para cubrir la base del pay, y fruta corresponde a la cantidad (en gramos) de dicha fruta que debe emplearse (según la receta). Este proceso prepara la cubierta del pay, a partir de la fruta elegida.
• cortar_servir (comensales, tipo_fruta)
• tipo_fruta es la fruta con que se cubrió el pay y comensales corresponde con el número de invitados a disfrutarlo. Este proceso se encarga de cortarlo en tantos pedazos como comensales haya y lo sirve para que los invitados lo puedan comer. El tipo de fruta es necesario para que al servirlo se les pueda indicar qué tipo de pay van a comer.

 Variables: En el contexto de nuestro problema, será necesario representar como datos de entrada el tipo de fruta que se empleará, las cantidades de cada ingrediente de la receta (huevos, harina, mantequilla, fruta), el tiempo que debe permanecer el pay en el horno, y la cantidad de comensales que lo disfrutarán. Se emplearán nombres para las variables que ayuden a comprender su significado:

• tipo_fruta
• huevos, harina, mantequilla, fruta (cantidades en gramos)
• tiempo_horno
 comensales

 Especificación del algoritmo

 El algoritmo presentado a continuación emplea las operaciones (tareas) definidas anteriormente para resolver nuestro problema. En éste caso no fue necesario emplear operaciones de control de flujo, pues el algoritmo se puede especificar en forma totalmente secuencial.

 Algoritmo:
1. Obtener la receta (huevos, harina, mantequilla, tipo_fruta, fruta y tiempo_horno).
2. Obtener la cantidad de comensales (comensales).
3. mezclar_base (huevos, harina, mantequilla).
4. hornear_base (tiempo_horno).
5. preparar_fruta (tipo_fruta, fruta).
6. cortar_servir (comensales, tipo_fruta).

 Validación del algoritmo

Dominios: Los posibles dominios que existen en el contexto de éste problema se constituyen a partir de los distintos valores de entrada que pueden recibirse del usuario. Es decir, distintos tipos de fruta, distintas cantidades para cada ingrediente, distintos tiempos en el horno y distintas cantidades de comensales.
Validación: Debe ejecutarse el algoritmo para los dominios definidos, es decir, cambiando valores para cada dato de entrada, y verificando que se puede alcanzar el objetivo buscado. Prueba de escritorio Sirve para revisar que el algoritmo soluciona tu problema y lo hace de manera eficiente y efectiva. Prueba de escritorio: Corroboro con datos ficticios si resuelve mi problema paso por paso ejemplo:

 Preparación de un pay

• Cantidad de huevos (unidades): 3.
• Cantidad de harina (gramos): 250.
• Cantidad de mantequilla (gramos): 150.
• Fruta que se desea en la cubierta: frutilla.
• Cantidad de frutilla (gramos): 300.
• Tiempo en el horno (minutos): 10.
• Comensales: 5. • Mezclando 3 huevos, 250 gramos de harina y 150 gramos de mantequilla...
• Horneando la base por 10 minutos...
• Preparando 300 gramos de frutilla...
• Cortando el pay de frutilla en 5 pedazos...
• ¡Listo!

 La finalidad de la solución de problemas es poder codificar en un lenguaje de programación los algoritmos, que previamente se desarrollaron y se esquematizaron en un diagrama de flujo. Como anteriormente se mencionó, existen varios lenguajes de programación que son útiles para esta codificación.
Uno de ellos es el Basic-256, el cual es un editor de código sencillo y amigable por lo básico de sus herramientas. Por lo que utilizaremos este programa para la solución de problemas.

Práctica guiada Basic-256 

Nota: Es importante aclarar que los programas de BASIC-256 consisten en una serie de instrucciones, separadas en líneas distintas, que se ejecutan en el orden en que aparecen.

 Para acceder al programa Basic 256, da doble clic en el icono

 A continuación aparecerá la ventana de trabajo en la cual identificamos tres áreas importantes, que son las siguientes:

En donde:

1. Es la barra de herramientas del programa.
2. Es nuestra área de trabajo (o área de codificación), en la cual tecleamos las instrucciones (código) que se van a ejecutar.
3. Es el área en donde aparecerán los resultados de la ejecución del programa.

A continuación haremos un ejercicio.

Problema: Obtener el promedio de dos calificaciones y mostrar el resultado. 

Como podemos observar, lo que aparece en el área de texto (resultados), es muy ambiguo, no sabemos a simple vista que está sucediendo, vamos a enriquecer nuestro código agregando unas cuantas líneas, quedando de la siguiente forma:

Print "Calificación 1:?"
 Input cal1 Print "Calificación 2:?"
 Input cal2
promedio=(cal1+cal2)/2
Print "Promedio:"

Print promedio

Realiza a tu código las modificaciones indicadas, ejecútalo y compara los resultados. Cuando hay algún error en el código, el Basic nos manda un mensaje en el área de resultados, por ejemplo, vamos a modificar la línea 5 eliminando el numero 1, es decir, quedaría: promedio=(cal+cal2)/2. Efectúa la modificación en la línea mencionada, ejecuta el programa y observa el resultado.

Vamos a poner más interesante la situación, ahora el ejercicio dice:

Problema: Obtener el promedio de dos calificaciones y mostrar un mensaje que indique si el alumno esta aprobado o reprobado, tomando como condición que la calificación mínima aprobatoria es de 6.

Nuestro código quedaría de la siguiente forma:

Print "Calificación 1:?"
Input cal1
Print "Calificación 2:?"
Input cal2 promedio=(cal1+cal2)/2
Print "Promedio:"
Print promedio if promedio>=6 then
print "El alumno esta aprobado"
else print
"El alumno esta reprobado"
endif

En este caso, promedio>=6, es la condición para evaluar que un alumno esta aprobado, en caso contrario, estará reprobado. Realiza las modificaciones indicadas, ejecuta el programa y observa los resultados (prueba ambos casos, promedio aprobatorio y promedio reprobatorio).

No hay comentarios.:

Publicar un comentario