Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo...

52
Resolución de problemas IC-1800 Introducción a la programación I semestre, 2017 1

Transcript of Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo...

Page 1: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Resolución de problemas

IC-1800 Introducción a la programación

I semestre, 2017 1

Page 2: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

Una definición bastante usada: Una secuencia de pasos con los que se obtiene un resultado en una cantidad finita de tiempo.

● Cantidad finita de tiempo... ¿por qué?

→ Es una solución particular a un problema.

khwarizmi Dominio Público (Wayiran @ Wikimedia Commons)

Page 3: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

El término viene del nombre del matemático persa: Abu Abdallah Mu ammad ibn Mūsā ḥal-Jwārizmī (780 – 850)

Algoritmo de Euclides

Máximo común divisor de un par de números

Viene del 300 a.C.

khwarizmi Dominio Público (Wayiran @ Wikimedia Commons)

Page 4: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

Una definición bastante usada: Una secuencia de pasos con los que se obtiene un resultado en una cantidad finita de tiempo.

● Cantidad finita de tiempo... ¿por qué?

Google Doodle Turing Machine for Alan Turing Centenary CC BY 2.0 (dulhunk @ flickr)

Page 5: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

Una definición bastante usada: Una secuencia de pasos con los que se obtiene un resultado en una cantidad finita de tiempo.

Representaciones de algoritmos:

● Lenguaje natural

● Diagramas de flujo

● Pseudocódigo

● Lenguaje de programación

→ A manera de ejemplo cotidiano: las recetas de cocina son algoritmos que nos permiten solucionar el problema que surge cuando tenemos hambre.

Page 6: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo: Diagramas de Flujo

En inglés se les conoce como “Flowchart”

Es una técnica visual para representar el “flujo” de las operaciones que se realizan para completar un algoritmo.

LampFlowchart-es Dominio Público (Huhsunqu @ Wikipedia)

Page 7: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo: Diagramas de Flujo

Se utilizan cajas, símbolos y flechas para representar la secuencia de las instrucciones.

¿Cuál es el problema que se está solucionando?

¿Quien o qué resuelve el problema?

LampFlowchart-es Dominio Público (Huhsunqu @ Wikipedia)

Page 8: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo: Pseudocódigo

Es una mezcla entre lenguaje natural y lenguaje de programación.

Es muy flexible pues aprovecha las facilidades de expresión del lenguaje natural y las reglas de los lenguajes de programación de alto nivel.

Si condición P es cierta

instrucciones1

Si no entonces

instrucciones2

Fin

PseudocódigoDiagrama de Flujo

Page 9: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Características de un Algoritmo

Finito

● debe terminar después de una serie de pasos.

Precisión

● cada operación o paso debe ser especificado de una forma clara (sin ambigüedad).

Entradas

● ¿Qué requiere el programa para su ejecución?

(podría ser que “nada”)

Page 10: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Características de un Algoritmo

Salidas

● ¿Qué quiero al finalizar la ejecución? .

Eficacia

● se deben poder seguir las operaciones de forma exacta y en un tiempo finito por una persona utilizando papel y lápiz.

→ Características propuestas por Donald Knuth (The art of programming, 1968)

Page 11: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Un Buen Algoritmo

Idealmente los algoritmo buenos intentan:

● Minimizar el tiempo de ejecución (eficiencia de tiempo)

● Minimizar los recursos utilizados: menor cantidad de memoria y espacio en disco, etc. (eficiencia en consumo de recursos)

● Adaptable / Generalista: debe estar preparado para conjuntos de datos distintos.

His Majesty With His People CC-BY-NC-SA (Bhutan-360 @ flickr)

Suit up CC-BY-ND (JuditK @ flickr)

Page 12: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Un Buen Algoritmo

Idealmente los algoritmo buenos intentan:

● Simple y Elegante: este punto es completamente subjetivo. Normalmente se define culturalmente y en programación se hace mediante estándares.

● Legibilidad: se desea que el algoritmo pueda ser leído y comprendido por otros programadores.

His Majesty With His People CC-BY-NC-SA (Bhutan-360 @ flickr)

Suit up CC-BY-ND (JuditK @ flickr)

Page 13: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Ciclo de solución de problemas

Una serie de pasos que se deben seguir para intentar solucionar un problema por medio de un algoritmo.

● Comprobable: ¿se puede probar que los resultados son correctos?

● Eficaz: ¿son los resultados esperados?, ¿se resuelve el problema?

● Eficiente: ¿cuantos recursos/tiempo consume?

Jeff Schmidt Peralta

Page 14: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 1: Entender el problema

¡Fundamental! Y a la vez una de las principales causas de fallas en la creación de software.

● Las características de un programa son llamadas requerimientos, se obtienen de los usuarios, enunciados (examen) y de la observación de ejemplos.

Jeff Schmidt Peralta

Page 15: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 1: Entender el problema

● 3 Elementos vitales: entradas, salidas y restricciones (o limitaciones) .

● La identificación correcta de los elementos involucrados en el programa es una forma de asegurarnos de estar comprendiendo el problema.

Jeff Schmidt Peralta

Page 16: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Entradas, salidas y restricciones?

Coffe Machine and Grinder CC BY-NC-ND 2.0 (SkeenaValleyGirl @ flickr)

Page 17: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 2: Pensar un algoritmo

● Modelar mentalmente o utilizando alguna herramienta, el problema a solucionar.

Es una destreza que se fortalece con la práctica y el estudio de soluciones a

problemas clásicos.

Jeff Schmidt Peralta

Page 18: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

● Se puede utilizar el análisis por casos: buscar todos los posibles casos y sus soluciones y determinar una solución general.

● Normalmente este proceso requiere pensamiento abstracto, creatividad e ingenio.

Jeff Schmidt Peralta

Page 19: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 3: Formular algoritmo

● Escribir la solución en algún lenguaje de programación. También se le llama proceso de codificación.

● Los algoritmos deben ser independientes del lenguaje de programación, sin embargo según el algoritmo algunos lenguajes son más aptos.

Jeff Schmidt Peralta

Page 20: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 4: Pruebas y evaluación del programa

● En caso de que las pruebas o la evaluación no sea satisfactoria entonces se debe regresar a algún paso anterior para corregir los problemas.

Jeff Schmidt Peralta

Page 21: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Como probar:

● De forma manual

(papel y lápiz)

● En el computador

(vía práctica, pruebas automatizadas)

● Pruebas matemáticas

(inducción)

Aspectos a tomar en cuenta:

Eficiencia → tiempo, CPU, RAM

Jeff Schmidt Peralta

Page 22: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Mantenimiento

Una vez que los programas están listos y se ha comprobado su funcionalidad, se dice que éstos son “puestos en producción” o

sea se ponen en el ambiente real de uso.

Mantenimiento:

Lo normal en el ciclo de vida de los programas es que sea necesario realizar cambios ya sea por un cambio en los requerimientos o por errores que no se detectaron a tiempo.

● Fundamental: las buenas prácticas de programación y la documentación determinarán en gran medida el éxito del proceso de mantenimiento.

Page 23: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Ejercicios: ciclo de solución de problemas

● En parejas: se le presenta como problema “ir a la soda de la universidad a comprar un refresco natural”. Desarrolle la solución y asegúrese de que la solución funciona.

● Individual: describa de forma algorítmica (secuencial) las actividades que usted realiza para ubicar latitud y longitud en un mapa.

● Tarea: Haga un diagrama de flujo para la solución al problema “retirar dinero de un cajero automático”, además enumere cada uno de los pasos. Hágalo desde la perspectiva de la persona primero y luego desde la perspectiva de la aplicación de software (No olvide las validaciones que debe realizar).

Page 24: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Ejemplo: calcule el área de un círculo

Comprenda el problema.

¿qué se requiere?

Determinar:

Piense en el algoritmo.

Diseñe pruebas

Entradas

Salidas

Limitaciones (restricciones)

Corrobore que el algoritmo funciona.

Page 25: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Referencias y Lecturas Complementarias

● Material suministrado por el profesor Jeff Schmidt, Instituto Tecnológico de Costa Rica. I semestre 2011.

Page 26: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

27

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una

Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica.

http://creativecommons.org/licenses/by-sa/3.0/cr/http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*

Page 27: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Resolución de problemas

IC-1800 Introducción a la programación

I semestre, 2017 1

Page 28: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

Una definición bastante usada: Una secuencia de pasos con los que se obtiene un resultado en una cantidad finita de tiempo.

● Cantidad finita de tiempo... ¿por qué?

→ Es una solución particular a un problema.

khwarizmi Dominio Público (Wayiran @ Wikimedia Commons)

El término algoritmo proviene del matemático Muhammad ibn Musa al-Khwarizmi (Abu Abdallah Mu ammad ibn Mūsā al-Jwārizmī)ḥ , que

vivió aproximadamente entre los años 780 y 850 d.C., en la actual nación Irán y que

describió la realización de operaciones elementales en el sistema de numeración decimal.

De al-Khwarizmi se obtuvo la derivación algoritmo.

Algoritmo de euclides (300 a.C): utiliza el algoritmo de la división junto al hecho que el MCD de dos números también divide al resto obtenido de dividir el mayor entre el más pequeño. Por ejemplo, si se divide 60 entre 48 dando un cociente de 1 y un resto de 12, el m.c.d. será por tanto divisor de 12. Después se divide 48 entre 12 dando un resto de 0, lo que significa que 12 es el mcd.

Page 29: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

El término viene del nombre del matemático persa: Abu Abdallah Mu ammad ibn Mūsā ḥal-Jwārizmī (780 – 850)

Algoritmo de Euclides

Máximo común divisor de un par de números

Viene del 300 a.C.

khwarizmi Dominio Público (Wayiran @ Wikimedia Commons)

El término algoritmo proviene del matemático Muhammad ibn Musa al-Khwarizmi (Abu Abdallah Mu ammad ibn Mūsā al-Jwārizmī)ḥ , que

vivió aproximadamente entre los años 780 y 850 d.C., en la actual nación Irán y que

describió la realización de operaciones elementales en el sistema de numeración decimal.

De al-Khwarizmi se obtuvo la derivación algoritmo.

Algoritmo de euclides (300 a.C): utiliza el algoritmo de la división junto al hecho que el MCD de dos números también divide al resto obtenido de dividir el mayor entre el más pequeño. Por ejemplo, si se divide 60 entre 48 dando un cociente de 1 y un resto de 12, el m.c.d. será por tanto divisor de 12. Después se divide 48 entre 12 dando un resto de 0, lo que significa que 12 es el mcd.

Page 30: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

Una definición bastante usada: Una secuencia de pasos con los que se obtiene un resultado en una cantidad finita de tiempo.

● Cantidad finita de tiempo... ¿por qué?

Google Doodle Turing Machine for Alan Turing Centenary CC BY 2.0 (dulhunk @ flickr)

Un sistema computacional debe ser finito.- recursos computacionales son finitos (la espera de

una solución también)- Problemas que no se pueden resolver en tiempo

finito son de una complejidad desmedida

Máquina de Turing: http://www.google.com/doodles/alan-turings-100th-birthday

Ojo: la clase se refiere a algoritmos secuencias y NO paralelos.

Page 31: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo

Una definición bastante usada: Una secuencia de pasos con los que se obtiene un resultado en una cantidad finita de tiempo.

Representaciones de algoritmos:

● Lenguaje natural

● Diagramas de flujo

● Pseudocódigo

● Lenguaje de programación

→ A manera de ejemplo cotidiano: las recetas de cocina son algoritmos que nos permiten solucionar el problema que surge cuando tenemos hambre.

Un sistema computacional debe ser finito.- recursos computacionales son finitos-

Máquina de Turing: http://www.google.com/doodles/alan-turings-100th-birthday

Ojo: la clase se refiere a algoritmos secuencias y NO paralelos.

Page 32: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo: Diagramas de Flujo

En inglés se les conoce como “Flowchart”

Es una técnica visual para representar el “flujo” de las operaciones que se realizan para completar un algoritmo.

LampFlowchart-es Dominio Público (Huhsunqu @ Wikipedia)

¿Cuál es el problema que se está solucionando?- Problema: no tengo luz en una lámpara

¿Quien o qué resuelve el problema?- Un ser humano, ¿Cómo sabemos eso? Por el tipo de

instrucciones que se le están dando

###Esto debo mejorarlo mucho más. El tema de los diagramas de flujo ayuda mucho a comprender como enfrentarse a un problema computacional.

### Hacer más ejercicios de diagramas de flujo y pseudocódigo.

→ Poner énfasis al fin del algoritmo señalado con el círculo rosado.

Page 33: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo: Diagramas de Flujo

Se utilizan cajas, símbolos y flechas para representar la secuencia de las instrucciones.

¿Cuál es el problema que se está solucionando?

¿Quien o qué resuelve el problema?

LampFlowchart-es Dominio Público (Huhsunqu @ Wikipedia)

¿Cuál es el problema que se está solucionando?- Problema: no tengo luz en una lámpara

¿Quien o qué resuelve el problema?- Un ser humano, ¿Cómo sabemos eso? Por el tipo de

instrucciones que se le están dando

###Esto debo mejorarlo mucho más. El tema de los diagramas de flujo ayuda mucho a comprender como enfrentarse a un problema computacional.

### Hacer más ejercicios de diagramas de flujo y pseudocódigo.

→ Poner énfasis al fin del algoritmo señalado con el círculo rosado.

Page 34: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Algoritmo: Pseudocódigo

Es una mezcla entre lenguaje natural y lenguaje de programación.

Es muy flexible pues aprovecha las facilidades de expresión del lenguaje natural y las reglas de los lenguajes de programación de alto nivel.

Si condición P es cierta

instrucciones1

Si no entonces

instrucciones2

Fin

PseudocódigoDiagrama de Flujo

Page 35: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Características de un Algoritmo

Finito

● debe terminar después de una serie de pasos.

Precisión

● cada operación o paso debe ser especificado de una forma clara (sin ambigüedad).

Entradas

● ¿Qué requiere el programa para su ejecución?

(podría ser que “nada”)

Un algoritmo infinito no es una solución adecuada a ningún problema.

La precisión: ejemplo de impreciso “si hace frío póngase abrigo”, algo preciso sería si hace 20° póngase abrigo. Acá es importante tener en cuanta quien o qué ejecuta el algoritmo.

Un algoritmo eficaz es uno que hace lo que tiene que hacer. “Un goleador eficaz”

Page 36: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Características de un Algoritmo

Salidas

● ¿Qué quiero al finalizar la ejecución? .

Eficacia

● se deben poder seguir las operaciones de forma exacta y en un tiempo finito por una persona utilizando papel y lápiz.

→ Características propuestas por Donald Knuth (The art of programming, 1968)

Un algoritmo infinito no es una solución adecuada a ningún problema.

La precisión: ejemplo de impreciso “si hace frío póngase abrigo”, algo preciso sería si hace 20° póngase abrigo. Acá es importante tener en cuanta quien o qué ejecuta el algoritmo.

Un algoritmo eficaz es uno que hace lo que tiene que hacer. “Un goleador eficaz”

Page 37: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Un Buen Algoritmo

Idealmente los algoritmo buenos intentan:

● Minimizar el tiempo de ejecución (eficiencia de tiempo)

● Minimizar los recursos utilizados: menor cantidad de memoria y espacio en disco, etc. (eficiencia en consumo de recursos)

● Adaptable / Generalista: debe estar preparado para conjuntos de datos distintos.

His Majesty With His People CC-BY-NC-SA (Bhutan-360 @ flickr)

Suit up CC-BY-ND (JuditK @ flickr)

→ Eficaz y eficiente son dos cosas distintas!!!

En cuanto al tema de simple y elegante, utilizar las imágenes para ilustrar que es algo cultura. En la imagen superior está el rey de bhutan vestido de la forma más formal y elegante dentro de la cultura de ese país, abajo por otra parte tenemos el concepto de elegancia y formalidad para occidente.

Hay otros factores que se evalúan:- funcionalidad, - modularidad,- mantenibilidad - el tiempo del programador.

Page 38: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Un Buen Algoritmo

Idealmente los algoritmo buenos intentan:

● Simple y Elegante: este punto es completamente subjetivo. Normalmente se define culturalmente y en programación se hace mediante estándares.

● Legibilidad: se desea que el algoritmo pueda ser leído y comprendido por otros programadores.

His Majesty With His People CC-BY-NC-SA (Bhutan-360 @ flickr)

Suit up CC-BY-ND (JuditK @ flickr)

→ Eficaz y eficiente son dos cosas distintas!!!

En cuanto al tema de simple y elegante, utilizar las imágenes para ilustrar que es algo cultura. En la imagen superior está el rey de bhutan vestido de la forma más formal y elegante dentro de la cultura de ese país, abajo por otra parte tenemos el concepto de elegancia y formalidad para occidente.

Hay otros factores que se evalúan:- funcionalidad, - modularidad,- mantenibilidad - el tiempo del programador.

Page 39: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Ciclo de solución de problemas

Una serie de pasos que se deben seguir para intentar solucionar un problema por medio de un algoritmo.

● Comprobable: ¿se puede probar que los resultados son correctos?

● Eficaz: ¿son los resultados esperados?, ¿se resuelve el problema?

● Eficiente: ¿cuantos recursos/tiempo consume?

Jeff Schmidt Peralta

Page 40: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 1: Entender el problema

¡Fundamental! Y a la vez una de las principales causas de fallas en la creación de software.

● Las características de un programa son llamadas requerimientos, se obtienen de los usuarios, enunciados (examen) y de la observación de ejemplos.

Jeff Schmidt Peralta

Page 41: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 1: Entender el problema

● 3 Elementos vitales: entradas, salidas y restricciones (o limitaciones) .

● La identificación correcta de los elementos involucrados en el programa es una forma de asegurarnos de estar comprendiendo el problema.

Jeff Schmidt Peralta

Page 42: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Entradas, salidas y restricciones?

Coffe Machine and Grinder CC BY-NC-ND 2.0 (SkeenaValleyGirl @ flickr)

Haga en listado de las entradas, salidas y restricciones necesarias para resolver el problema de “hacer una taza de café”

Entradas: café, una taza, agua, corriente eléctricaSalidas: café vertido sobre una taza, mensaje indicado

si se está haciendo el café o si hay un error y no se puede hacer el café

Restricciones: debe haber café, agua y corriente eléctrica.

La taza no la pongo entre las restricciones pues en principio una máquina de café hace el café indistintamente de si existe taza o no, pero evidentemente es deseable que exista la taza.

Page 43: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 2: Pensar un algoritmo

● Modelar mentalmente o utilizando alguna herramienta, el problema a solucionar.

Es una destreza que se fortalece con la práctica y el estudio de soluciones a

problemas clásicos.

Jeff Schmidt Peralta

Análisis por casos una forma de “divide y vencerás”, se analizan casos particulares para una solución compleja.

Muchos de los ejercicios al iniciar a programar están pensados específicamente en desarrollar estas destrezas (lo cual puede ser un poco “doloroso”)

Page 44: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

● Se puede utilizar el análisis por casos: buscar todos los posibles casos y sus soluciones y determinar una solución general.

● Normalmente este proceso requiere pensamiento abstracto, creatividad e ingenio.

Jeff Schmidt Peralta

Análisis por casos una forma de “divide y vencerás”, se analizan casos particulares para una solución compleja.

Muchos de los ejercicios al iniciar a programar están pensados específicamente en desarrollar estas destrezas (lo cual puede ser un poco “doloroso”)

Page 45: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 3: Formular algoritmo

● Escribir la solución en algún lenguaje de programación. También se le llama proceso de codificación.

● Los algoritmos deben ser independientes del lenguaje de programación, sin embargo según el algoritmo algunos lenguajes son más aptos.

Jeff Schmidt Peralta

Esta parte se puede decir que es mecánica porque lo fundamental es un diseño adecuado.

Page 46: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Paso 4: Pruebas y evaluación del programa

● En caso de que las pruebas o la evaluación no sea satisfactoria entonces se debe regresar a algún paso anterior para corregir los problemas.

Jeff Schmidt Peralta

●Eficiencia en tiempo, la solución debe darse en un tiempo razonable. Por ejemplo si entramos al correo cuanto tiempo es el prudente para que un usuario espere antes de que se desespere.

Page 47: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

¿Cómo vamos a abordar los problemas?

Como probar:

● De forma manual

(papel y lápiz)

● En el computador

(vía práctica, pruebas automatizadas)

● Pruebas matemáticas

(inducción)

Aspectos a tomar en cuenta:

Eficiencia → tiempo, CPU, RAM

Jeff Schmidt Peralta

●Eficiencia en tiempo, la solución debe darse en un tiempo razonable. Por ejemplo si entramos al correo cuanto tiempo es el prudente para que un usuario espere antes de que se desespere.

Page 48: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Mantenimiento

Una vez que los programas están listos y se ha comprobado su funcionalidad, se dice que éstos son “puestos en producción” o

sea se ponen en el ambiente real de uso.

Mantenimiento:

Lo normal en el ciclo de vida de los programas es que sea necesario realizar cambios ya sea por un cambio en los requerimientos o por errores que no se detectaron a tiempo.

● Fundamental: las buenas prácticas de programación y la documentación determinarán en gran medida el éxito del proceso de mantenimiento.

Page 49: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Ejercicios: ciclo de solución de problemas

● En parejas: se le presenta como problema “ir a la soda de la universidad a comprar un refresco natural”. Desarrolle la solución y asegúrese de que la solución funciona.

● Individual: describa de forma algorítmica (secuencial) las actividades que usted realiza para ubicar latitud y longitud en un mapa.

● Tarea: Haga un diagrama de flujo para la solución al problema “retirar dinero de un cajero automático”, además enumere cada uno de los pasos. Hágalo desde la perspectiva de la persona primero y luego desde la perspectiva de la aplicación de software (No olvide las validaciones que debe realizar).

Page 50: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Ejemplo: calcule el área de un círculo

Comprenda el problema.

¿qué se requiere?

Determinar:

Piense en el algoritmo.

Diseñe pruebas

Entradas

Salidas

Limitaciones (restricciones)

Corrobore que el algoritmo funciona.

Comprender el problema es sumamente sencillo, basta con buscar la fórmula para hacer el cálculo que nos están solicitando, área = π r2

Entradas: radio del círculo, valor de PI (constante, pero debe darse al algoritmo)

Salidas: áreaRestricciones: el radio debe ser mayor a cero. (y pi?)

Algoritmo:1. obtener radio y valor de PI2. Revisar si los valores son mayores a cero. (si es así

devolver un error)3. aplicar la fórmula del área del círculo4. mostrar el resultado.5. Fin del problema

En Python:#Calcular area de un circulo# A = Pi * r **2radio = 10area = 3.141516 * radio ** 2print(area)

#Calcular area de un circulo# A = Pi * r **2def area_circulo(radio): area = 3.141516 * radio ** 2 return area

Page 51: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

Referencias y Lecturas Complementarias

● Material suministrado por el profesor Jeff Schmidt, Instituto Tecnológico de Costa Rica. I semestre 2011.

Page 52: Resolución de problemasausanabria/files/2017IScursos/intro/presentacione… · Un Buen Algoritmo Idealmente los algoritmo buenos intentan: Minimizar el tiempo de ejecución (eficiencia

27

Las presentaciones para el curso IC-1800: "Introducción a la Programación" por Ing. En Computación Alajuela se distribuyen bajo una

Licencia Creative Commons Atribución-Compartir Igual 3.0 Costa Rica.

http://creativecommons.org/licenses/by-sa/3.0/cr/http://creativecommons.org/licenses/by-sa/3.0/cr/ *La licencia de la presentación no cubre las imágenes utilizadas*