La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación II de febrero de 2009

Presentaciones similares


Presentación del tema: "Programación II de febrero de 2009"— Transcripción de la presentación:

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

2 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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 Diseño descendente QuickSort Particionar Intercambiar

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

13 Idea Probar todas las posibilidades

14 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

15 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

16 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

17 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

18 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

19 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

20 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;

21 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];

22 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;

23 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

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


Descargar ppt "Programación II de febrero de 2009"

Presentaciones similares


Anuncios Google