Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L...

21
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):entero estaNumero(num:entero):boolean particionado(pos:entero):boolean mayorNumero():entero ordenado(): booleano Asume que i es una posición válida

Transcript of Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L...

Page 1: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 2: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 3: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 4: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 5: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 6: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 7: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 8: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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);}

Page 9: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 10: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 11: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 12: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 13: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 14: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 15: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 16: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 17: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 18: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.

Page 19: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 20: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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

Page 21: Recorridos Iterativos y Recursivos Introducción a la Programación Orientada a Objetos Números L [] enteros > Numeros(cant:entero) > establecerNum(i:entero,num:entero)

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.