Programación II de febrero de 2009

Slides:



Advertisements
Presentaciones similares
Lic. Juan Gabriel Bernal López
Advertisements

EL TABLERO DE AJEDREZ.
Búsqueda en árboles de juego
Diseño y análisis de algoritmos
CARACTERISTICAS PRINCIPALES DE LOS SISTEMAS EXPERTOS
ANÁLISIS DE REQUERIMIENTOS
Secuencia finita, ordenada y lógica de instrucciones (ó pasos), los cuales permiten realizar una ó varias tareas.
Tipos de Datos Abstractos Modularidad
Introducción a la programación orientada a aspectos.
Combinadores SK.
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
METODO DE JERARQUIZACION
DEFINICIÓN MATEMÁTICA DE UNA FUNCIÓN DE VARIABLE REAL.
2 Acciones y funciones 2.1 Concepto
Recurrencia Programación II 3-4 de febrero de 2009.
Grado en Ingeniería electrónica y comunicaciones Facultad de Físicas Universidad Complutense P1 Fundamentos de Programación.
JUEGOS MATEMÁTICOS. MAGIA NUMERICA
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
Ejercicios de funciones
LOGICA DE PROGRAMACION
Semana 5 Subprogramas..
PROGRAMACIÓN PARALELA Tema 4: Metodología de la programación
Complejidad Programación II de febrero de 2009.
Algoritmos numéricos. Método de “aproximación sucesiva”: se genera una hipótesis sobre la respuesta y en cada iteración se utiliza dicha hipóte- sis para.
Desarrollo Comunitario
ATON Presentación del diseño del juego de mesa Aton.
Fundamentos de programación
Problemas de Decisión y Optimización
TIPOS DE DATOS ABSTRACTOS
Programación II 3-4 de marzo de 2009
Parte I. Estructuras de Datos.
Definición: Reorganizar un conjunto dado de objetos en una secuencia especificada Objetivo: Facilitar la búsqueda de los elementos del conjunto ordenado.
Parte II. Algorítmica. 3. Algoritmos voraces.
PROGRAMACIÓN PROCEDIMENTAL
Búsqueda y ordenación Programación II 7-8 de enero de 2009.
Divide y vencerás 1. Método general.
Diseño de Programas.
Comunicación y Multimedia
Recurrencia Programación II de enero de 2009.
Proyecto Fin de Carrera
Recurrencia Programación II de enero de 2009.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
Planteos Recursivos Resolución de Problemas y Algoritmos
TEMAS PRINCIPALES. ALGORITMOS. CONCEPTOS El algoritmo es un método para resolver un problema mediante una serie de pasos definidos, precisos y finitos.
Parte II. Algorítmica. 4. Programación dinámica.
Metodología para la construcción de programas
BLOQUE IV: COOPERACIÓN Y CONFRONTACIÓN EN ACTIVIDADES PARADÓJICAS
Parte I. Estructuras de Datos.
Objetivo Mostrar los fundamentos de la programación a través de ejemplos y prácticas utilizadas cotidianamente en el desarrollo de aplicaciones.
Quick Sort Estructuras de Datos Universidad Autónoma de Tlaxcala Unidad Académica Multidisciplinaria 14 de Septiembre de 2012.
ALGORITMO QUE ES ??.
Ecuaciones con Radicales
MANUAL DE EXCEL.
Matemáticas para la educación normal
Metodología de la programación
Conalep Coacalco Algoritmos Recursivos
Transacciones seguras  Concurrencia Ing. Yeberth Martinez Programación II.
Inteligencia Artificial
Enseñar con Aprendizaje Basado en Problemas
 Consiste en la elección del mejor movimiento para cada jugador, es decir la máquina para quien programaremos el sistema tratará de maximizar las oportunidades.
6.6 Administración de defectos
Vivenciamos Resolución de Problema con un juego y una narración
Javier Tapia Torres Felipe García Ojeda María Turpín Nevado Francisco Javier Domínguez González José Javier Moreno Osorno Joaquín Velázquez Valverde.
1 Introducción a la Programación Orientada a Objetos Programación Orientada a Objetos Departamento de Sistemas Universidad del Cauca 2006.
Algoritmos Computacionales
PARADIGMA viene del Griego Paradeima = Modelo. Un paradigma es el resultado de los usos, y costumbres, de creencias establecidas de verdades a medias,
La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
ALGORITMOS Y PROGRAMAS. OBJETIVOS  Resolver problemas mediante la especificación algorítmica.  Proporcionar los procedimientos y técnicas para el desarrollo.
Transcripción de la presentación:

Programación II 24-25 de febrero de 2009 Diseño descendente Programación II 24-25 de febrero de 2009

Algunas citas “El tiempo que un ser humano necesita para entender un programa aumenta exponencialmente con su longitud” Edsger Dijkstra “Dividir cada dificultad que se examina en tantos fragmentos como sea posible y que se requieren para mejorar la solución” René Descartes

Organización de programas Normalmente un programa lleva miles de líneas de código Podría poner todo dentro de una función Sin embargo, hay algunas normas de implementación para mejorar la calidad En particular, es buena práctica aplicar diseño descendente y descomposición funcional

Programación spaghetti Lo que uno quiere evitar: funciones muy largas que cada una realiza varias tareas programas difíciles a entender para otros programadores código que no se puede reutilizar con facilidad

Descomposición funcional Descomponer un programa en funciones más sencillas Cada función resuelve una sola tarea Cada tarea es claramente diferenciada de las otras tareas Ayuda en la comprensión del programa Facilita la reutilización de código

Diseño descendente Empezar por el problema a resolver Diseñar una solución intuitiva sin especificar detalles Esta solución representa el primer nivel de abstracción Complementar detalles con funciones de segundo nivel (descender un nivel) Continuar hasta llenar todos los detalles

Ejemplo: QuickSort accion QuickSort(V: vector de natural, i,d: natural) variable x,y,temp: natural; si (i < d) entonces x  i; temp  V[x]; y  d – 1; V[x]  V[d]; mientras (x < y) hacer V[d]  temp; mientras (V[x] < V[d]) hacer QuickSort(V, i, x-1); x  x + 1; QuickSort(V, x, d); fmientras fsi mientras (V[y] ≥ V[d]) hacer faccion y  y - 1; fmientras si (x < y) entonces temp  V[x]; V[x]  V[y]; V[y]  temp; fsi

Ejemplo: QuickSort accion QuickSort(V: vector de natural, i,d: natural) variable p: natural; si (i < d) entonces p  Particionar(V, i, d); QuickSort(V, i, p-1); QuickSort(V, p, d); fsi faccion

Segundo nivel funcion Particionar(V: vector de natural, i,d: natural) devuelve natural variable x,y: natural; x  i; y  d – 1; mientras (x < y) hacer mientras (V[x] < V[d]) hacer x  x + 1; fmientras mientras (V[y] ≥ V[d]) hacer y  y - 1; si (x < y) entonces Intercambiar(V, x, y); fsi Intercambiar(V, x, d); devuelve x; ffuncion

Tercer nivel accion Intercambiar(V: vector de natural, x,y: natural) variable temp: natural; temp  V[x]; V[x]  V[y]; V[y]  temp; faccion

Diseño descendente QuickSort Particionar Intercambiar

Ejemplo Escribir un programa que juega a Tres-en-Raya

Idea Probar todas las posibilidades

Idea Cada jugador intenta maximizar su resultado Por lo tanto, escoge el mejor movimiento desde su perspectiva El tablero es suficientemente pequeño para probar todas las posibilidades

Representación Representar el tablero por un vector de nueve números naturales 0: casilla vacía 1, 2: este jugador ha jugado en la casilla 1 2 3 4 5 6 7 8 9

Acción principal accion TresEnRaya() variable jugador,ganador:natural; T,R:vector de natural; jugador  1; ganador  0; T  InicializarTablero(); MostrarTablero(T); mientras (ganador = 0) hacer R  Mover(jugador,T); T[R[1]]  jugador; jugador  3 – jugador; ganador  DetectarGanador(T); fmientras MostrarGanador(ganador); faccion

Segundo nivel funcion InicializarTablero() devuelve vector de natural variable i:natural; T:vector de natural; para i  1 hasta 9 hacer T[i] = 0; fpara devuelve T; ffuncion accion MostrarGanador(ganador:natural) si (ganador < 3) entonces Mostrar(“Ha ganado el jugador ” + ganador); sino Mostrar(“Ha sido un empate”); fsi faccion

Segundo nivel accion MostrarTablero(T:vector de natural) variable i,j:natural; para i  1 hasta 3 hacer para j  1 hasta 3 hacer Mostrar(Simbolo(T[3*i + j])); fpara Mostrar(‘\n’); fpara faccion funcion Simbolo(jugador:natural) devuelve caracter si (jugador = 1) entonces devuelve ‘X’; sino si (jugador = 2) entonces devuelve ‘O’; sino devuelve ‘ ’; fsi ffuncion

Segundo nivel funcion DetectarGanador(T:vector de natural) devuelve natural variable ganador:natural; ganador  AnalizarFilas(T); ganador  Maximo(ganador, AnalizarColumnas(T)); ganador  Maximo(ganador, AnalizarDiagonales(T)); si (ganador > 0) entonces devuelve ganador; sino si (TableroLleno(T)) entonces devuelve 3; sino devuelve 0; fsi ffuncion

Tercer nivel funcion AnalizarFilas(T:vector de natural) devuelve natural variable i:natural; para i  1 hasta 3 hacer si (Iguales(T[3*i-2], T[3*i-1], T[3*i]) y T[3*i] > 0) devuelve T[3*i]; fsi fpara devuelve 0; ffuncion funcion Iguales(a,b,c:natural) devuelve booleano si (a = b y a = c) entonces devuelve cierto; sino devuelve falso;

Tercer nivel funcion AnalizarColumnas(T:vector de natural) devuelve natural variable i:natural; para i  1 hasta 3 hacer si (Iguales(T[i], T[i+3], T[i+6]) y T[i] > 0) entonces devuelve T[i]; fsi fpara devuelve 0; ffuncion funcion AnalizarDiagonales(T:vector de natural) devuelve natural si (Iguales(T[1], T[5], T[9]) y T[1] > 0) entonces devuelve T[1]; sino si (Iguales(T[3], T[5], T[7]) y T[3] > 0) entonces devuelve T[3];

Tercer nivel funcion TableroLleno(T:vector de natural) devuelve booleano variable i:natural; para i  1 hasta 9 hacer si (T[i] = 0) entonces devuelve falso; fsi fpara devuelve cierto; ffuncion funcion Maximo(a,b:natural) devuelve natural si (a > b) entonces devuelve a; sino devuelve b;

La función Mover funcion Mover(jugador:natural, T:vector de natural) devuelve vector de natural variable i,ganador:natural; res, R:vector de natural; ganador  DetectarGanador(T); si (ganador > 0) entonces devuelve [0, ganador]; fsi res  [0, 0]; para i  1 hasta 9 hacer si (T[i] = 0) entonces T[i]  jugador; R  Mover(3 – jugador, T); T[i]  0; si (R[2] = jugador) entonces devuelve [i, jugador]; sino si (R[2] = 3 o res[1] = 0) entonces res  [i, R[2]]; fsi fsi fpara devuelve res; ffuncion

Diseño descendente TresEnRaya InicializarTablero Mover MostrarGanador MostrarTablero DetectarGanador TableroLleno Simbolo Maximo AnalizarFilas AnalizarColumnas AnalizarDiagonales Iguales