Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L...
Transcript of Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L...
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Números
L [] enteros
<<Constructor>>Numeros(cant:entero)<<Comandos>>establecerNum(i:entero,num:entero)ordenar()<<Consultas>>obtenerNum(i:entero):enteroestaNumero(num:entero):booleanparticionado(pos:entero):booleanmayorNumero():enteroordenado(): booleano
Asume que i es una posición válida
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
estaNumero(num) retorna verdadero si y solo sí L[i]=num para algún i tal que 0<=i<L.length
mayorNumero() retorna num tal que num = L[i] y L[i]>=L[j] para 0<=i<L.length t 0<=j<L.length
ordenado() retorna verdadero si solo sí L[i]<=L[i+1] para 0<=i<L.length-1
parcicionado(pos:entero) decide si L[i] < L [pos] para 0<=i<pos y L[j] > L [pos] para pos<j<L.length
ordenar() reacomoda los elementos de modo que queden ordenados en forma creciente.
Diseñamos e implementamos métodos correctos, legibles y eficientes.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Planteo Iterativo
Comparar cada elemento Li con num
Condición de corte
La comparación es verdadera o se agota la estructura
Algoritmo Iterativopara 0 <= i < n y mientras no encuentre si num = Li encontro el elemento n es la cantidad de elementos
Dado un arreglo L con n elementos L0,L1, …, Ln-1
estaNumero(num) retorna verdadero si uno de los elementos de L es num.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Implementación public boolean estaNumero(int num){int i=0; esta=false; int n=L.length;while ((i<n) && !esta){ if (L[i] == num) esta=true; else i++;}return esta;}
Buscamos soluciones correctas, legibles y eficientes.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Dado un arreglo L con n elementos L0,L1, …, Ln-1
estaNumero(num) retorna verdadero si uno de los elementos de L es num.
Retorna verdadero si el último elemento es num o num está en L0,L1, …, Ln-2
Ln-1=num o num está en L0, …, Ln-2
Una alternativa de solución es generar un nuevo arreglo sin el elemento Ln-1
Es una alternativa natural pero muy ineficiente.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Dado un arreglo L con n elementos L0,L1, …, Ln-1
estaNumero(num) retorna verdadero si uno de los elementos de L es num
estaNum(num,n)
false n<=0
true Ln-1=num
estaNum(num,n-1) en otro caso
Definimos estaNum agregando un argumento que la cantidad de elementos considerados
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Solución Recursivaprivate boolean estaNum (int num, int n){ boolean esta; if (n<=0) esta=false; else if (L[n-1]==num) esta = true; else esta = estaNum(num,n-1); return esta;}
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Solución Recursivaprivate boolean estaNum (int num, int n){ boolean esta; … return esta;}public boolean estaNumero (int num){ return estaNum (num,L.length);}
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Planteo Iterativo
Comenzando con el segundo comparar cada elemento del arreglo con el mayor encontrado entre los anteriores, para la primera comparación asumir que el primero es el mayor.
Algoritmo Iterativomayor = L0
para i=1,2,…,n-1 si Li > mayor
mayor = Li
mayorNumero() retorna el mayor elemento del arreglo
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Planteo Recursivo
Caso trivial: El arreglo tiene un único elemento que es el mayor
Caso recursivo: El mayor elemento del L0,L1, …, Ln-1 es el mayor entre el último y el mayor elemento de L0,L1, …, Ln-2 .
mayorNumero() retorna el mayor elemento del arreglo
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
mayorNumero() retorna el mayor elemento del arreglo
Algoritmo MayorNum DE nsi n = 1 mayor = L0
sino mayor = mayorNum(n-1) si Ln-1> mayor
mayor=Ln-1
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Solución RecursivaPrivate int mayorNum ( int n){ int mayor; … return mayor;}Public int mayorNumero (){ return mayorNum (L.length);}
mayorNumero() retorna el mayor valor almacenado en el arreglo
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
particionado(pos:entero) decide si L[i] < L [pos] para 0<=i<pos y L[j] > L [pos] para pos<j<L.length
Algoritmo iterativoDE posverificatruepara i=0,1,…,L.length-1 y mientras verifica si (i < pos y L[i] > L[pos]) o (i > pos y L[i] < L[pos]) verificafalse
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
particionado(pos:entero) decide si L[i] < L [pos] para 0<=i<pos y L[j] > L [pos] para pos<j<L.length
Algoritmo iterativoDE posverificatruepara i=0,1,…,pos-1 y mientras verifica si (L[i] > L[pos]) verificafalsepara i=pos+1,…,L.length-1 y mientras verifica si (L[i] < L[pos]) verificafalse
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Método de ordenamientoUbicar el menor elemento en la primera posición, el menor elemento entre los restantes en la segunda posición y así siguiendo
Más adelante vamos a proponer otros métodos de ordenamiento
ordenar() reacomoda los elementos de modo que queden ordenados en forma creciente.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Buscar el menor elemento Ubicarlo en la primera posiciónBuscar el menor elemento a partir de la segunda posiciónUbicarlo en la segunda posición…
ordenar() reacomoda los elementos de modo que queden ordenados en forma creciente.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Algoritmo iterativo
para i=0,1,…,n-1 Buscar el menor elemento a partir de la posición i Ubicarlo en la posición i
ordenar() reacomoda los elementos de modo que queden ordenados en forma creciente.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Algoritmo iterativo
para i=n-1,n-2,…,1 m= posicion del mayor elemento (i) intercambiarElementos (i,m)
ordenar() reacomoda los elementos de modo que queden ordenados en forma creciente.
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
ordenar() reacomoda los elementos de modo que queden ordenados en forma creciente.
Algoritmo Recursivo
si el arreglo tiene un elemento está ordenadosino Buscar el mayor elemento Ubicarlo en la última posición Ordenar el arreglo sin considerar el último elemento
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
Palabra
pal [] char
<<Constructor>>Palabra(s:String)<<Comandos>>establecerLetra(i:entero,l:char)<<Consultas>>obtenerLetra(i:entero):charesPrefijo(p:Palabra):booleanesSufijo(p:Palabra):booleanestaContenida(p:Palabra):booleanesPalindrome():booleanhistograma():Numeros
Crea una palabra con elmismo contenido y longitud
que la cadena recibida
Recorridos Iterativos y Recursivos
Introducción a la Programación Orientada a Objetos
histograma():Numeros retorna un objeto de clase Números que mantiene la cantidad de apariciones de cada letra en la palabra.
El subíndice en el arreglo representa una letra (el subíndice 0 representa los caracteres “a” y “A”). El contenido en el arreglo representa la cantidad de apariciones de la letra en la palabra.