Professional Documents
Culture Documents
5. ARREGLOS DE OBJETOS
7. LISTAS
8. PILAS
9. COLAS
10. RECURSION
11. ÁRBOLES
INTRODUCCION
¿Qué es un objeto?
Un objeto representa alguna entidad de la vida real. Un objeto es una entidad que
encapsula datos (atributos) y acciones o funciones que los manejan (métodos)
Todo objeto (también llamado instancia de una clase), pertenece a alguna clase
Todos los objetos de una clase tienen los mismos atributos y comportamiento. Son
diferentes únicamente en los valores que contienen sus atributos.
Todos los objetos con el mismo estado interno e interfase se agrupan en una
clase.
Las clases son para los objetos lo que los tipos para los datos primitivos. Ejemplo:
Tipo de objetos
Tipo de datos (clase )
Persona
Alfonso Objetos
int Datos
numero_de_dias luisa
dia_del_mes jose_fernando
Atributos
Son los datos o variables que caracterizan al objeto y cuyos valores en un
momento dado indican su estado
Mediante los atributos se define información oculta dentro de un objeto, la cual
es manipulada solamente por los métodos definidos sobre dicho objeto
Métodos
Son las operaciones (acciones o funciones) que se aplican sobre los objetos y
que permiten crearlos, cambiar su estado o consultar el valor de sus atributos.
Las jerarquías entre las clases permiten extender y reutilizar el código existente
sin tener que reescribirlo cada vez que se necesite.
Animal
-color: String
-patas: int
+comer()
+dormir()
Tigre Loro
-bigotes -alas
Agregación (Todo / Parte, Forma parte de) Es una relación que representa a los
objetos compuestos por otros objetos. Indica objetos que a su vez están formados
por otros. El objeto en el nivel superior de la jerarquía es el todo y los que están en
los niveles inferiores son sus partes o componentes.
Como la puerta forma parte del aula, el diamante va pegado a Aula
Composición
Un componente es parte esencial de un elemento. Si el componente es eliminado
o desaparece, la clase mayor deja de existir.
Persona
-nombre: String
+emorcionarse()
+tranquilizarse()
Corazon
-ritmo: int
+cambiarRitmo()
+leerRitmo()
Asociación («uso», usa, cualquier otra relación) Es una asociación que se
establece cuando dos clases tienen una dependencia de utilización, es decir, una
clase utiliza atributos y/o métodos de otra para funcionar
Estudiante Portaminas
Encapsulación: los objetos muestran hacia afuera una interfase, pero ocultan la
implementación y el estado interno.
Cada objeto es de un tipo (es decir pertenece a una clase). Las clases agrupan
objetos que manejan (reciben) el mismo tipo de mensajes.
Cada objeto tiene una interfase, que define el tipo de mensajes que puede recibir.
A su vez, cada objeto tiene una implementación oculta para el resto del mundo
• Un identificador y un nombre.
• Un resumen de la operación.
• Las entradas (datos) que debe dar el usuario para que el programa pueda
realizar la operación.
proceso
entrada salida
Refinamiento iterativo
Ejemplo
Calcule el tiempo que se demora en llenar un tanque de agua con una llave
abierta cuya velocidad es vel (cm3/seg). El tanque tiene dimensiones de radio r
y altura h
Solución
Inicio
real tiempo=0.0
real r=leer (“Digite el valor del radio”)
real h=leer (“Digite el valor de la altura”)
real v=leer (“Digite el valor de la velocidad en cm 3/seg [real]”)
Tanque t= nuevo Tanque ( r, h, vel )
tiempo= t.calcularTiempo ( )
mostrar(“El tiempo que tarda el tanque en llenarse es: + tiempo”)
Fin
4. Modelo de la solución
Refinamiento 1: Diagrama EPS
Refinamiento 2: Algoritmo
real calcularTiempo ( )
Inicio
real vol=0.0
vol =PI*(r*r)*h
t=vol/vel
retorne t
fin
5. Codificación
{
Nombre del método
double vol= Math.PI*r*r*h;
double t=vol/vel;
return t;
}
} Tipo de datos que retorna
6. Pruebas
r h vel vol t
y
¿
por la formula ¿
¿
√¿
Tipos de arreglos
•Arreglos unidimensionales o vectores: una dimensión, 1 índice
•Arreglos bidimensionales o matrices: dos dimensiones, 2 índices
•Multidimensionales: Más de 2 dimensiones.
Declaración de un vector
Nombre
Resumen Permite guardar los puntajes de la competencia
Entradas Puntajes.
Entradas Puntajes.
Entradas puntajes
3. Programa de Prueba
Inicio
objCompetencia.registrarPuntaje(t)
objCompetencia.sumarPuntaje()
Fin
4. Modelo de la solución
Refinamiento 1: Diagrama EPS R1: registrar puntajes
Proceso
Entrada Salida
Cantidad, puntaje de
cada participante A través de un ciclo desde o hasta la
cantidad de participantes, se pide el Puntajes
puntaje obtenido por cada participante registrados
y se registra en el arreglo de
participantes
Refinamiento 2
Algoritmo registrarPuntajes
Inicio
para i =0 hasta que i<cantidad
puntajes[i]=leer(ingrese el puntaje del participante (i+1))
fin para
Fin
Diagrama EPS R2: modificar puntajes
dato, posicion
Se valida que la posición sea válida, es
decir sea mayor que 0 y menor que la puntajes
última posición.
Si es válido se guarda el dato en el arreglo
en la posición indicada
Refinamiento 2
Algoritmo modificarPuntajes
Inicio
Si posición>0 y posicion<posUltimo
puntajes[posicion]=dato
Fin
Diagrama EPS R4: mostrar puntajes
Algoritmo mostrarPuntajes
Inicio
Cadena mensaje
para i =0 hasta que i<posUltimo
mensajes=mensaje + puntajes[i]
fin para
Fin
Diagrama EPS R3: Obtener menor puntaje
Proceso
Refinamiento 2
Algoritmo menorPuntajes
Inicio
menor= puntajes[i]
para i =1 hasta que i<posUltimo
Si puntajes[i]<menor
menor = puntajes[i]
fin para
Fin Diagrama EPS R4: sumar puntajes
Proceso Salida
Entrada
Algoritmo sumarPuntajes
Inicio
suma= puntajes[0]
Hacer para i =0 hasta que i<posUltimo
suma=suma+puntajes[i]
3 3 3<3
falso //fin
ciclo
Pruebas método mostrarPuntajes
mensaje i<posUltimo
“” 0<3 verdadero
puntajes[0]=50 1<3 verdadero
0 0 0<3 verdadero 50 60 70
0+50=50
1 1<3 verdadero
50+60=110
2 2<3 verdadero
110+70=180
3 3<3 falso
Fin ciclo
TALLER ARREGLOS
c)Dado en nombre del menú decir en qué día se prepara este plato.
METODOS DE ORDENAMIENTO USANDO ARREGLO
Método de selección
Método de la Burbuja
• Al final de cada iteración, en la parte final del arreglo están los elementos ya
ordenados, los cuales además son mayores que todos los elementos que
faltan por ordenar.
Inicio
objOrdenamiento.mostrarVector
objOrdenamiento.ordenarSeleccion
objOrdenamiento.ordenarBurbuja
fin
3. Modelo de la solución
Algoritmo ordenamientoSeleccion
Inicio
menor=numeros[i]
pos=i
si numeros[i]<menor
menor=numeros[i]
pos= j
fin si
fin para
aux=numero
numero[i]=menor
numeros[pos]=aux
fin para
fin
Algoritmo burbuja
Inicio
entero temp
si numeros[j]>numeros[j+1]
temp=numeros[j]
numeros[j]=numeros[j+1]
numeros[j+1]=temp
fin si
fin para
fin para
fin
Si son varios
estudiantes, ¿Cómo
se representan?
3. Programa de Prueba
Inicio
objCurso.DarTamaño(t);
objCurso.registrarEstudiantes();
objCurso.definitivaDadoCodigo(cod)
mostrar("los datos son:"+ objCurso.mostrarDatos())
mostrar("El promedio del grupo es:"+ objCurso.calcularPromedio())
mostrar("los datos son:"+ objCurso.mostrarDatos())
4.Modelo de la solución
EPS A partir de R1-Registrar la información de un estudiante
Proceso
Entrada Salida
Algoritmo registrarEstudiante
Inicio
Estudiante objEstudiante=nuevo Estudiante();
Se llenan los datos para ese estudiante
se almacena este estudiante en el arreglo
Fin
Refinamiento 3
Algoritmo registrarEstudiante
Inicio
dsfeses Estudiante objEstudiante=nuevo Estudiante(); //se crea un estudiante
objEstudiante.guardardatos(); // hace un algoritmo para pedir los datos
si posUltimo<tamanho //se verifica que quede espacio en el vector
estudiantes[posUltimo]=objEstudiante; //se guarda el objeto en el vector
posUltimo++;
Fin
Refinamiento 4: Se realiza otro algoritmo para pedir los datos del estudiante
Algoritmo guardarDatos
Inicio
nombre=leer (“Ingrese nombre del estudiante”)
codigo=Leer (“Ingrese el código del estudiante”)
parcial1=Leer “Ingrese la nota del primer parcial”)
parcial2=Leer “Ingrese la nota del primer parcial”)
parcial3=Leer “Ingrese la nota del primer parcial”)
Fin
Refinamiento 2
Refinamiento 3
Algoritmo definitiva
Inicio
notaFinal=parcial1*0.3 + parcial2*0.3+parcial3*0.4
devolver notaFinal
Fin
Proceso
Salida
Entrada
Se lee el nombre de un estudiante,
nom, conjunto de este se busca dentro del conjunto de Nombre, codigo,
estudiantes y cuando se encuentre un
estudiantes. estudiante con este nombre, entonces
parcial1, parcial2,
se muestra la información para ese parcial3
estudiante
Algoritmo mostrarDatos
Inicio
nom=leer (“Ingrese el nombre del estudiante”)
para i desde la posición 0 hasta ultimo dato guardado
si nom=estudiantes[i].nombre
mostrar estudiantes[i].nombre
Fin
EPS A partir de R4 Calcular promedio grupal
Proceso
Entrada Salida
Refinamiento 2
Algoritmo promedio
Inicio
para i desde la posición 0 hasta último dato guardado
suma= suma+ estudiantes[i].definitiva() // se llama al algoritmo anterior
promedio=suma/posUltimo
devolver promedio
Fin
5. Codificación registrarEstudiante
Codificación método guardarDatos
Codificación método definitivaDadoCodigo
Método promedio
0.0+4.1=4.1 1 1<3 v
4.1+4=8.1 2 2<3 v
8.1+3.35=11.45 3 3<3 f
11.45/3=3.81
3 4 5 4.1
4 4 4 4
3.5 5 2 3.35
Nota: Usted puede agregar los métodos que considere necesarios dentro del
programa.
ARREGLOS BIDIMENSIONALES O MATRICES
Definición
Columnas
Posiciones Posiciones
dentro de la
matriz
Declaración e inicialización de la matriz en Java
Ejemplo:
double temperatura [ ][ ]; //declaración
temperatura = new double[2][3]; //Inicialización, con 2 filas y 3 columnas
Ejemplo:
int m [ ][ ];
m= new int[3][]; //se inicializa con dos filas,
TipoDato nombreArreglo[][];
nombreArreglo= new tipoDato[][] {{fila0},{fila1},…};
Ejemplo:
double temperatura[ ][ ];
temperatura = new double[ ][ ] {{20.5, 30.6, 28.3 }, {38.7,10.3,16.2 } };
Lo anterior también se puede hacer asi:
temperatura [0][0] = 20.5; temperatura [0][1] = 30.6; temperatura [0][2] = 28.3;
temperatura [1][0] = 38.7; temperatura [1][1] = 10.3; temperatura [1][2] = 16.2;
NombreArreglo[indiceFila][indiceColumna]
Ejemplo:
System.out.print(temperatura[1][2]); imprime 16,2
Ejemplo de Matrices
Solución
El problema anterior requiere el uso de matrices, ya que si lo resolvemos con
vectores (arreglos en una dimensión), tendríamos que crear vectores uno por cada
día o por cada participante, lo cual es ineficiente, pues requeriría crear muchas
variables.
Para resolver el problema se va a crear una matriz donde las filas representan los
participantes y las columnas representan cada uno de los días.
Entradas puntajes
Entradas puntajes
Resumen
Permite calcular el menor puntaje de todos los
participantes.
Entradas puntajes
3. Programa de prueba
Inicio
Entero cantidadJugadores=0 cantidadJugadores=leer(“Ingrese cantidad de jugadores”)
Competencia objCompetencia=nuevo Competencia(cantidadJugadores)
objCompetencia.registrarPuntaje()
Mostrar (“Los puntajes ingresados son”, objCompetencia.mostrarPuntajes())
Mostrar (“el puntaje promedio es ” , objCompetencia.calcularPromedio())
Mostrar (“El puntaje menor es” , objCompetencia.calcularMenor())
Fin
4. Modelo de la solución
proceso
Refinamiento 2
Inicio
para fil=0 hasta fil<numFilas
para col=0 hasta col<numColumnas
puntajes[fil][col]=leer(“Digite puntaje”, fil, col)
fin para
fin para
fin
Diagrama EPS de R2 Mostrar puntajes
Entrada Proceso
Inicio
cadena mensaje=“ ”
para fil=0 hasta fil<numFilas
para col=0 hasta col<numColumnas
mensaje= mensaje ,fil, col, es, puntaje [fil][col]
fin para
fin para
devolver mensaje
fin
Diagrama EPS de R3 Calcular promedio
Entrada Proceso
Salida
Se recorre la matriz de puntajes a través
de dos ciclos uno para las filas y otro para
puntajes[][] promedio
las columnas, y se va sumando cada uno
de los elementos, Al final se divide el
resultado de la suma entre la cantidad de
puntajes.
Inicio
real promedio=0.0
para fil=0 hasta fil<numFilas
para col=0 hasta col<numColumnas
promedio=promedio+ puntaje [fil][col]
fin para
fin para
promedio=promedio/(numFilas*numColumnas)
devolver promedio
fin
Diagrama EPS de R4 Calcular menor
Proceso
Inicio
real masBajo=0.0
para fil=0 hasta fil<numFilas
para col=0 hasta col<numColumnas
si (puntaje[fil][col]<masBajo)
masBajo=puntaje[fil][col]
fin para
fin para
devolver masBajo
fin
5.Codificación
Método registrarPuntajes()
Método mostarPuntajes
Método calcularPromedio
Método calcularMenor
6.Pruebas
Método registrarPuntajes
Método mostrarPuntajes
Método calcularPromedio
0 0.0 20 30
0 0<2 verdadero 0 0<2 verdadero 20 50 60
1 1<2 verdadero 50
2 2<2 false fin ciclo
1 1<2 verdadero 0 0<2 verdadero 100
2 2<2 falso
2 2<2 falso
fin
Método calcularMenor
TALLER MATRICES
Primer nodo
Ultimo nodo
Los nodos son cada uno de los elementos que conforman la lista enlazada y este
nodo está formado mínimo por los campos: información que es el valor que
almacena y el enlace que indican la ubicación al siguiente nodo. Al primer nodo se
le llama el tope de la lista o cabeza de la lista.
Solución
Inicio
ListaVendedor objLista=nuevo ListaVendedor()
entero cantidad=leer (“¿Cuantos vendedores va a ingresar?”)
objLista.insertarInicio(cantidad)
mostrar (“Los vendedores ingresados son”, objLista.mostrarLista())
mostrar (“La suma total es:”,objLista.totalVentas())
objLista.insertarInicio(cantidad)
mostrar (“Los vendedores ingresados son”, objLista.mostrarLista())
Fin
4.Modelo de la solución
Diagrama EPS de R1-Ingresar vendedor al inicio
Iteracion 2
Iteración 3
Algoritmo pedirDatos
inicio
nombre=leer("Ingrese el nombre del vendedor")
cedula=leer("Ingrese el número de cédula del vendedor")
valorVenta=leer("Ingrese el valor de la venta")
fin
Iteración 2
Algoritmo cadena mostrarLista
inicio
Cadena mensaje=” ”
Vendedor auxiliar=primero
mientras (auxiliar<>null)
mensaje=mensaje+auxiliar.mostarDatos()
auxiliar=auxiliar.enlace
devolver mensaje
fin
Diagrama EPS de R3-Ingresar vendedor al final de la lista
Proceso
Salida
Entrada Dentro de un ciclo que va desde 1
hasta la cantidad de vendedores,
nombreVendedor , Se crea un vendedor vacío y se
piden los datos para este ListaVendedores
cedula, valor de
vendedor, se recorre la lista hasta
venta y Lista llegar al final y se inserta el
Vendedores vendedor al final de la lista,
enlazando el ultimo nodo con el
nuevo vendedor.
piden los
Iteración 2
Salida
Entrada Se crea una variable auxiliar ,
se asigna el primer elemento de
la lista ,se va recorriendo la lista
a través del campo enlace de la suma
ListaVendedor variable auxiliar, mientras que la
variable auxiliar sea diferente de
nulo y cada valor de venta del
nodo vendedor se acumula en la
variable suma.
Algoritmo totalVentas
Inicio
Vendedor auxiliar=primero
doublé suma=0
mientras (auxiliar<>nulo)
suma=suma+auxiliar.valorventa
auxiliar=auxiliar.enlace
fin mientras
return suma
fin
5. Codificación
Método insertarInicio
Método pedirDatos
Método mostrarLista
Método insertarFinal
Método totalventas
6.Prueba
Método mostrar
public ListaEstudiante() {
//constructor
primero = null;
}
c) Dada la fecha mostrar los nombres de los niños nacidos en esa fecha.
.
Una cola es una estructura de datos similar a una lista con restricciones
especiales. Los elementos son agregados en la parte posterior de la cola y
son eliminados por el frente
Solución
3. Programa de prueba
inicio
objColaAVVillas.agregarClientes(cant);
objColaAVVillas.sacarCliente();
fin
4. Modelo de la solución
Proceso
Salida
Entrada Verifica si el primer elemento de la
cola es nulo, en este caso la cola
esta vacía y se devuelve true o false
Cola de clientes
verdadero. En caso contrario se
devuelve falso
Refinamiento 2
Algoritmo esVacia
Inicio
si primero=nulo
devuelve verdadero
si no
devuelve falso
fin si
fin
Salida
Entrada Se hace un ciclo que vaya desde 1 hasta
la cantidad de clientes que se van a crear
nombre, cedula, dentro del ciclo se va creando un cliente cliente
transacción nuevo, luego se pide los datos para ese
cliente y se enlaza el cliente creado a la
cola.
Refinamiento 2
Algoritmo agregarClientes
Inicio
para i=1 hasta i<=cantidad
clienteNuevo=nuevo Cliente()
clienteNuevo.pedirDatos()
si la clienteNuevo.esVacia=verdadero
primero=nuevo
ultimo=nuevo
si no
ultimo.enlace=nuevo
ultimo=nuevo
fin si
fin para
fin
Refinamiento 3
Se implementa el método para pedir los datos del cliente
Algoritmo pedirDatos
Inicio
nombre=leer(“Ingrese el nombre”)
cedula=leer(“Ingrese el número de cedula”)
transaccion=leer(“Ingrese la transacción”)
si transacción=”consulta”
tiempo=2
si no
si transacción=”retiro”
tiempo=3
si no
si transacción=”consignacion”
tiempo=4
fin si
fin si
fin si
fin
Proceso
Refinamiento 2
Algoritmo cadena mostrarCola
inicio
Cliente clienteAux
Cadena mensaje=” ”
clienteAux=primero
mientras (clienteAux<>nulo)
mensaje=mensaje + clienteAux.mostrarDatos
clienteAux=clienteAux.enlace
fin mientras
devolver mensaje
fin
Proceso
Salida
Entrada Verifica si la cola está vacía, si es
así se muestra mensajes de que
Cola de clientes no hay elementos en la cola, en
caso contrario el primer elemento Cola Clientes
lo enlaza con el que esta después
del primero. Si después de esto la
cola queda vacía entones el último
de la cola se debe poner a null
Refinamiento 2
Algoritmo sacarCliente
Si esVacia()=verdadero
si no
auxiliar=primero
primero=primero.enlace
si esVacia=verdadero
ultimo=nulo
devolver auxiliar
fin
5. Codificación
Método esVacia
Método agregarClientes
Método pedirdatos
Método mostrarCola
Método sacarCliente
c) El total de tiempo que tardo la cola. (suma de todos los tiempos de atención
de cada cliente)
Pila (Stack):Es una estructura LIFO (Last In First Out-ultimo en llegar primero en
salir).
Una pila, es una particularización de las listas y se puede definir como una
estructura en la cual los elementos son agregados y eliminados por el tope de la
lista
Actualizar el tope
Pop o sacar Equivale a eliminar por el frente.
Llamada a métodos:
Cuando el código llama a un método, la dirección de la primera instrucción que
sigue a la llamada se inserta en la parte superior de la pila de llamadas del
método actual. Cuando el método llamado ejecuta la instrucción return, se saca la
dirección de la parte superior de la pila y la ejecución continua. Como resultado
una pila “recuerda” las direcciones de retorno de los métodos llamados.
• Almacenamiento temporal de páginas Web: Los navegadores de Internet
almacenan las direcciones de las páginas recientemente visitadas en una
pila.
• Los compiladores utilizan pilas: para evaluar expresiones aritméticas y generar
código en el lenguaje máquina para procesar las expresiones.
• El mecanismo de “deshacer-rehacer” en los editores de texto: Los editores
de texto utilizan usualmente un mecanismo de “deshacer” (undo) que cancela
las operaciones editadas actualmente para volver a las operaciones previas,
para ello se utiliza una pila.
Implementación de Pilas
También es posible implementarla con una lista enlazada, en donde una variable
de referencia, nombrada como tope, referencia el nodo superior de la lista
Dado que se van a implementar sobre listas, veremos que es retomar lo que ya se
había hecho en el capítulo de listas.
A continuación, se presenta un ejemplo de una pila de números enteros.
3. Programa de prueba
Inicio
Pila objPila=nuevo Pila()
objPila.agregar(cantidad)
objPila.sacar)
fin
4. Modelo de la solución
Proceso
Salida
Entrada Se hace un ciclo que vaya desde 1 hasta
la cantidad de elementos que se van a
ingresar, dentro del ciclo se crea un Pila con nuevos
valor nuevo nodo, se pide el valor a elementos
almacenar, se ingresa por el tope de la
pila y se actualiza el tope.
Salida
Entrada A una variable se le asigna el tope de la
pila, se va recorriendo la pila hasta llegar
al último elemento y en una variable Mensaje
Pila de numeros mensaje de tipo string se van
concatenando los valores de la pila
Refinamiento 2
Proceso
Salida
Entrada
A una variable aux se le asigna el tope
de la pila se actualiza el tope de la pila
y se muestra el valor del elemento que aux.informacion
Pila de numeros se elimino
Algoritmo sacar
inicio
Nodo aux=tope
tope=tope.enlace
devolver aux.informacion
Fin
5. Codificación
Método agregar
Método mostraPila
Método sacar
• + A B Notación prefija
• A + B Notación infija
• A B + Notación postfija
13 + 7 *3 - 5 < >
13
<+ >
13 7
<* +>
13 7 3
P - == p + < > 13 7 3 *+
< - > 13 7 3 *+ 5
13 7 3 * + 5 -
13 7 3 * +5 -
<7 13>
<3 7 13>
<13> 3 7 7 *3=21
<13>
< >
<34>
<5 34>
5 34 34 - 5=29
<29>
( + - * /) o es un número.
Condición de
parada
Llamada recursiva
Aplicando la metodología anterior
3.Programa de prueba
Inicio
m= leer(“Ingrese un numero)
Recursion objOperacion =nuevo Recursion(m)
objOperacion.serie(m)
fin
4.Modelo de la solución
Para resolver una función recursiva debemos como tal descubrir cuál es la
condición de parada y tratar de descomponer la solución de un problema en la
solución de un problema más pequeño.
Si n es 1 se muestra 1
Si revisamos nos podemos dar cuenta que calcular serie de 6 es lo mismo que
imprimir el 6 y mostrar la serie de 5. Así mismo calcular la serie de 5 es
equivalente a mostrar el 5 y mostrar o calcular la serie de 4.
En resumen
Proceso
Algoritmo serie(entero n)
Inicio
Si n=1
Imprimir n
devolver 1
Si no
Imprimir n
devolver serie(n-1)
fin si
fin
5.Codificación
6.Prueba
Entradas n
3.Programa de prueba
Inicio
n= leer(“Ingrese un numero)
Recursion objOperacion =nuevo Recursion(n)
objOperacion.sumatoria(n)
fin
4.Modelo de la solución
Para resolver una función recursiva debemos como tal descubrir cuál es la
condición de parada y tratar de descomponer la solución de un problema en la
solución de un problema más pequeño.
Si n es 1 se muestra 1
En resumen
n Que se debe hacer En que se descompone
6 6 + 5+4+3+2+1 sumatoria(6)= 6 + sumatoria(5)
5 5+4+3+2+1 sumatoria (5)= 5 + sumatoria (4)
4 4+ 3+2+1 sumatoria(4)= 4+sumatoria(3)
3 3+2+1 sumatoria(3)= 3 +sumatoria(2)
2 2+1 sumatoria (2)= 2+ sumatoria(1)
1 1 sumatoria (1)= 1
Proceso
Algoritmo sumatoria(entero n)
Inicio
Si n=1
devolver 1
Si no
devolver n+ sumatoria(n-1)
fin si
fin
5.Codificación
Prueba del método sumatoria
sumatoria (n ) n If(n==1) salida
sumatoria(1) 1 If(1==1) 1
verdadero
10
Entradas n
Inicio
n= leer(“Ingrese un numero)
Recursion objOperacion =nuevo Recursion(n)
objOperacion.factorial(n)
fin
4.Modelo de la solución
Para resolver una función recursiva debemos como tal descubrir cuál es la
condición de parada y tratar de descomponer la solución de un problema en la
solución de un problema más pequeño.
Si n es 1 se muestra 1
En resumen
Proceso
5.Codificación
Factorial de la forma 1
x 2 x 3 x ..x n
Ejemplo para determinar si un número es primo o no
Inicio
n= leer(“Ingrese un numero)
Recursion objOperacion =nuevo Recursion(n)
Mostrar(objOperacion.primol(n))
fin
4.Modelo de la solución
Proceso
5.Codificación
Por ejemplo, el cuarto termino (2) se calcula sumando el segundo término (1)
más el tercer término (1).
a) Realizar una función que dado un término muestre el valor del término. Por
ejemplo, si el dato de entrada es 4, quiere decir que se pide el cuarto
término y la función debe retornar 2 (que corresponde al cuarto término en
la sucesión).
2. Realizar una función que calcule el cociente de la división entre dos números
por medio del método se restas sucesivas. (investigar)
Definición
Ejemplo de un árbol
Utilización de los arboles
Nivel de un nodo: es su distancia al nodo raíz. La raíz tiene una distancia cero de
sí misma, por ello se dice que está en el nivel 0.
Nodo interno: es aquel nodo que tiene al menos un descendiente o nodo hijo.
Nodo hoja (externo): nodo que no tiene descendientes o no tiene hijos.
Arboles Binarios
Un Árbol Binario es un conjunto finito de elementos que bien puede estar vacío o
está formado por una raíz con dos árboles binarios llamados subárbol izquierdo y
subárbol derecho.
Recorrido de un árbol
Recorrer un árbol consiste en acceder una sola vez a todos sus nodos.
Tipos de Recorridos
Recorrido preorden
Visitar la raíz
Recorrer el subárbol izquierdo en preorden
Recorrer el subárbol derecho en preorden
Recorrido inorden
Recorrido postorden
Recorrer el subárbol izquierdo en postorden
Recorrer el subárbol derecho en postorden
Visitar la raíz
Preorden: A B C D E F G H S T U J K L
Inorden: D C E B F A T S U H G K J L
Postorden: D E C F B T U S H K L J G A
Ejercicio en clase
La información contenida en el nodo, la cual puede ser un tipo primitivo (int, char,
double) o puede ser cualquier tipo de objeto.
Recorrido en Preorden
Recorrido en Postorden
Árbol binario de búsqueda
• Son arboles binarios que tienen los datos ordenados de tal manera que todos los
datos que están en el subárbol izquierdo son menores que la raíz y todos los
datos que están en el subárbol derecho son mayores o iguales que la raíz
Programación III
Métodos insertarIzquierda e insertarDerecha
Programación III
Método buscarElemento
Anexar un nodo
Programación III
Insertar nodo por la izquierda y por la derecha
Programación III
TALLER SOBRE ARBOLES
52 CARLOS 2520555
11 JUANA 552255
22 CARLOS 887788
44 JAIRO 777997
12 FERNANDO 442232
Programación III
.. …. ….
.. ….. ….
Se necesita guardar los datos de los estudiantes en un árbol binario de búsqueda, los
nodos del árbol deben contemplar el código, nombre y teléfono del estudiante, la llave
principal del árbol es el código del estudiante.
d) Insertar estudiante
e) Consultar estudiante por su código
f) Mostrar los estudiantes(postorden)
g) Actualizar nombre
h) Salir
i) Ingresar empleados
Programación III