Está en la página 1de 14

INSTITUTO TECNOLOGICO DE OAXACA

ESTRUCTURA DE DATOS

ALUMNA: SUSANA SOFIA MIGUEL BERNARDINO

PASE A LA EVALUACION

AULA: I6

HORA: 11:00 - 12:00

FECHA DE ENTREGA: 10 DE OCTUBRE DEL 2011

1- Dado el siguiente fragmento de cdigo static final double N = 2; static final double PREC = 1e-6; static double f (double x) { return x*x-N; } static double bisect (double min, double max) { double med = (min+max)/2; if (max-min<PREC) { return med; } else if (f(min)*f(med)<0) { return bisect (min,med); } else { return bisect (med,max); } public static void main(String arg[]) { System.out.println("Funcion 1, R: "+bisect(0,2)); } }

a) Qu calcula la llamada a la funcin recursiva bisect(0,N)?

b) Si cambiamos el valor de N, qu estaramos calculando?

c) Y si cambisemos la funcin f(x)?

2. Dado el siguiente algoritmo recursivo:

public int f(int x){ if(x>100) return (x-10); else return (f(f(x+11)));

Cual es el resultado de esta funcin para distintos valores de x. Para nmeros menores o iguales que 100 regresa 91 Para valores mayores que 100 regresa el numero-10 3- Implemente, tanto de forma recursiva como de forma iterativa, una funcin que nos devuelva el mximo comn divisor de dos nmeros enteros utilizando el algoritmo de Euclides. ALGORITMO DE EUCLIDES Dados dos nmeros enteros positivos m y n, tal que m > n, para encontrar su mximo comn divisor (es decir, el mayor entero positivo que divide a ambos): - Dividir m por n para obtener el resto r (0 r < n) - Si r = 0, el MCD es n. - Si no, el mximo comn divisor es MCD(n,r).

RECURSIVO
public static int MCD (int m, int n){ if(n==0) return m; else return MCD (n,m%n); }

ITERATIVO: while(true) { if(m<n) { aux=m; m=n; n=aux; } else if(m%n==0) { System.out.println("MCD: "+n); break; } else if(n==0) { System.out.println("MCD: "+1); break; } else { aux=m; m=n; n=aux%n; } }

4- Problema de las 8 reinas: Se trata de buscar la forma de colocar 8 reinas en un tablero de ajedrez de forma que ninguna de ellas amenace ni se vea amenazada por otra reina. Algoritmo: - Colocar la reina i en la primera casilla vlida de la fila i - Si una reina no puede llegar a colocarse en ninguna casilla, se vuelve atrs y se cambia la posicin de la reina i-1 - Intentar colocar las reinas restantes en las filas que quedan. public class Reinas { private static int tablero[][]; private static int reinas; public Reinas(int n) { tablero = new int[n][n]; reinas = n; } private boolean vertical(int j) { int i = 0; while(i < reinas) { if(tablero[i][j] == 1) return false; i++; } return true; } private boolean diagonalIzq(int i, int j) { int m = i - 1; int n = j - 1; while(m >= 0 && n >= 0) { if( tablero[m][n]==1)

return false; m--; n--; } m = i + 1; n = j + 1; while(m < reinas && n < reinas) { if( tablero[m][n]==1) return false; m++; n++; } return true; } private boolean diagonalDer(int i, int j) { int m = i - 1; int n = j + 1; while(m >= 0 && n < reinas) { if( tablero[m][n]==1) return false; m--; n++; } m = i + 1; n = j - 1; while(m < reinas && n >= 0) { if( tablero[m][n]==1) return false; m++; n--; } return true; }

public boolean colocar(int r) { int i = r; int j; boolean OK = true; for(j = 0;j < reinas && i< reinas; j++) { if(vertical(j) && diagonalIzq(i,j) && diagonalDer(i,j)) { tablero[i][j] = 1; OK = true; } else { tablero[i][j] = 0; OK = false; } if(OK) { if(colocar(r+1)) break; else { tablero[i][j] = 0; OK = false; } } } return OK; } public String toString() { String s = ""; int i,j; for(i = 0; i < reinas; i++) for(j = 0; j < reinas; j++) if(tablero[i][j] == 1) s+= "Reina "+(i+1)+" x: "+(i+1)+" y:"+(j+1)+"\n"; return s; }

} import javax.swing.JOptionPane; public class ReinasPrueba { public static void main(String arg[]) { int n = 0; Reinas r; do { try { n = Integer.parseInt(JOptionPane.showInputDialog(null,"Dame el numero de reinas","N-Reinas",JOptionPane.QUESTION_MESSAGE)); if(n<1) JOptionPane.showMessageDialog(null,"No puedes insertar numeros negativos", "N-Reinas",JOptionPane.WARNING_MESSAGE); else if(n<4) JOptionPane.showMessageDialog(null,"Debes insertar al menos 4 reinas", "N-Reinas",JOptionPane.WARNING_MESSAGE); } catch(NumberFormatException e) { JOptionPane.showMessageDialog(null,"Solo puedes insertar numeros enteros", "N-Reinas",JOptionPane.WARNING_MESSAGE); } }while(n<3); r = new Reinas(n); r.colocar(0); JOptionPane.showMessageDialog(null,"Las posiciones de las reinas son:\n"+r.toString(), "N-Reinas",JOptionPane.INFORMATION_MESSAGE); } }

5. Salida de un laberinto: Se trata de encontrar un camino que nos permita salir de un laberinto definido en una matriz NxN. Para movernos por el laberinto, slo podemos pasar de una casilla a otra que sea adyacente a la primera y no est marcada como una casilla prohibida (esto es, las casillas prohibidas determinan las paredes que forman el laberinto). Algoritmo: - Se comienza en la casilla (0,0) y se termina en la casilla (N-1, N-1) - Nos movemos a una celda adyacente si esto es posible. - Cuando llegamos a una situacin en la que no podemos realizar ningn movimiento que nos lleve a una celda que no hayamos visitado ya, retrocedemos sobre nuestros pasos y buscamos un camino alternativo.

public class Laberinto { private int posX; private int posY; private String laberinto[][]; private int tamanioCol; private int tamanioFil; private String nada; private String pared; private String camino;

public Laberinto(int m,int n,String a, String b, String c) { laberinto = new String[n][n]; tamanioFil = m; tamanioCol = n; posX = 0; posY = 1; camino = a; nada = b; pared = c; } public Laberinto(int n,String a, String b, String c) {

laberinto = new String[n][n]; tamanioCol = tamanioFil = n; posX = 0; posY = 1; camino = a; nada = b; pared = c; } private void giroIzq() { if(posX == 0 && posY == 1) { posX = 1; posY = 0; } else if(posX == 1 && posY == 0) { posX = 0; posY = -1; } else if(posX == 0 && posY == -1) { posX = -1; posY = 0; } else { posX = 0; posY = 1; } } private void giroDer() { giroIzq(); giroIzq(); giroIzq(); } private boolean paredFrente(int i, int j) { i = i + posY;

j = j + posX; if(i < 0 || i == tamanioFil || j < 0 || j == tamanioCol) return true; if(laberinto[i][j].equals(pared)) return true; return false; } private boolean paredIzquierda(int i, int j) { giroIzq(); if(paredFrente(i,j)) { giroDer(); return true; } giroDer(); return false; } public void caminar(int i, int j) { laberinto[i][j] = camino; if(i == tamanioFil-1 && j == tamanioCol-1) return; if(paredIzquierda(i,j)) { if(!paredFrente(i,j)) { if(laberinto[i+posY][j+posX].equals(camino)) //Si ya pasamos borra nuestro rastro laberinto[i][j] = nada; caminar(i + posY, j + posX); } else { giroDer(); caminar(i,j); } } else {

giroIzq(); if(laberinto[i+posY][j+posX].equals(camino)) //Si ya pasamos borra nuestro rastro laberinto[i][j] = nada; caminar(i + posY, j + posX); } } public void cargar(String l[][]) { laberinto = l; } public String toString() { int i,j; String s = "El camino a seguir en el laberinto es:\n\n"; s = s + pared + camino; for(j = 1; j <= tamanioCol; j++) s = s + pared; s = s + "\n"; for(i = 0; i < tamanioFil; i++) { s = s + pared; for(j = 0; j < tamanioCol; j++) s = s + laberinto[i][j]; s = s + pared + "\n"; } for(j = 0; j < tamanioCol; j++) s = s + pared; s = s + camino + pared; s = s + "\n\nLeyenda:\n"+camino+ " Camino\n"+pared+" Pared\n" +nada+" Espacio vacio"; return s; } }

import javax.swing.JOptionPane; public class LaberintoPrueba { public static void main(String arg[]) { int filas = 11; int colum = 19; Laberinto l; String c = ""; String b = "__"; String o = ""; /* String p[][]={ {b,b,b,o,b,b,b,b}, {o,o,b,o,b,o,b,o}, {b,b,b,o,b,o,b,b}, {b,o,b,o,b,o,o,b}, {b,o,b,o,b,b,o,b}, {b,o,o,o,o,b,o,b}, {b,o,b,b,b,b,o,b}, {b,b,b,o,b,b,o,b}}; */ /* String p[][]={ {b,o,b,b,b,b,b,b}, {b,o,b,o,b,o,o,b}, {b,b,b,o,b,b,o,b}, {b,o,o,o,o,b,o,b}, {b,b,b,b,o,o,o,b}, {o,o,o,b,o,b,b,b}, {b,b,b,b,o,b,o,o}, {b,o,o,o,o,b,b,b}}; */ String p[][]={ {b,b,o,b,o,b,o,b,o,b,b,b,o,b,b,b,b,b,b}, {o,b,o,b,b,b,o,b,b,b,o,b,o,b,o,b,b,o,b}, {b,b,b,b,o,b,o,o,o,b,o,b,o,b,o,o,b,o,b}, {b,o,o,o,o,b,o,b,o,b,o,b,o,o,o,b,b,o,b}, {b,b,b,o,b,b,o,b,o,b,o,b,b,b,b,b,o,o,b},

{b,o,o,o,o,o,o,b,o,b,o,o,b,o,b,b,b,b,b}, {b,b,b,b,b,b,b,b,b,b,b,o,b,o,b,o,o,b,o}, {o,o,o,o,o,o,o,o,o,o,b,o,b,o,b,b,o,b,o}, {b,b,b,b,b,b,b,o,b,b,b,o,o,o,o,o,o,b,o}, {b,o,o,o,o,o,b,b,b,o,o,o,b,o,b,b,b,b,b}, {b,b,o,b,b,b,b,o,b,b,o,b,b,b,b,o,o,o,b}}; l = new Laberinto(filas,colum,c,b,o); l.cargar(p); JOptionPane.showMessageDialog(null,l.toString(), "Laberinto",JOptionPane.INFORMATION_MESSAGE); l.caminar(0,0); JOptionPane.showMessageDialog(null,l.toString(), "Laberinto",JOptionPane.INFORMATION_MESSAGE); } }

También podría gustarte