presentación de powerpointhilario_sm/slide/programacion_2... · 2018-10-17 · al igual que con el...

Post on 26-Mar-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Lenguaje de Programación Orientado a Objetos Elementos avanzados.

4.1 Tratamiento de excepciones4.2 Desarrollo de ejercicios con tipos de datos

primitivos y abstractos(Pila, Cola y Lista ligada)4.3. Interfaces Gráficas de Usuario4.4 Flujos de Entrada/Salida.4.5 Recursividad

Las excepciones son en realidad errores durante la ejecución. Si uno de esos erroresse produce y no implementamos el manejo de excepciones, el programasencillamente terminará abruptamente. Es muy probable que si hay ficherosabiertos no se guarde el contenido de los buffers, ni se cierren, además ciertosobjetos no serán destruidos, y se producirán fugas de memoria.

4.1 Manejo de excepciones

Manejo de excepciones

El sistema operativo se quejará, y el programa terminará en el momento queintentamos asignar un valor a un elemento del array.Podemos intentar evitar este error, comprobando el valor del puntero después delnew:

El throw se comporta como un return. Lo que sucede es lo siguiente: el valor devuelto por el throw se asigna al objeto del catch adecuado. En este ejemplo, al tratarse de un carácter, se asigna a la variable 'c', en el catch que contiene un parámetro de tipo char

4.2 Desarrollo de ejercicios con tipos de datos primitivos

•Tipos de datos primitivos abstractos•Pila(class, plantilla) •Cola •Lista ligada

Stack

-Tamano_stack:int;

-Arreglo[Tamano_stack];

-top:int;

+Stack( );

+Pop( ):object;

+Push(Object a):void;

+size( ):int;

+isEmpty( ):boolean;

+tope( ) :Object;

3

7

2

5 TOP

STACK

Concepto de Stack

Visto unidad III

Ejemplo 1Suma (interfija, posfija y prefija)

Considere la suma A y B. Pensamos aplicar el operador “+” a los operadores A y B y escribir la suma como A+B. Esta representación particular se denomina interfija. Hay otras dos notaciones para expresar la suma de A y B usando los símbolos A, B y +. Estas son:

posfijaAB+

prefija+AB

Posición del operador

Si tenemos A+(B*C)

A+(BC*)

A(BC*)+

ABC*+

forma posfija

Si tenemos A+(B*C)

A+(*BC)

+A(*BC)

+*ABC

forma prefija

Si tenemos (A+B)*C)

(AB+)*C

(AB+)C*

AB+C*

forma posfija

Prioridad operador

1 $ (exponencial)

2 * y /

3 + y -

Interfija Posfija

A+B AB+

A+B-C AB+C-

(A+B)*(C-D) AB+CD-*

A$B*C-D+E/F/(G+H) AB$C*D-EF/GH+/+

((A+B)*C-(D-E))$(F+G) AB+C*DE- -FG+$

A-B/(C*D$E) ABCDE$*/-

Las operaciones se evalúan Izq der.

Interfija Prefija

A+B +AB

A+B-C -+AB

(A+B)*(C-D) *+AB-CD

A$B*C-D+E/F/(G+H) +-*$ABCD//EF+GH

((A+B)*C-(D-E))$(F+G) $ -*+ABC-DE+FG

A-B/(C*D$E) -A/B*C$DE

Evaluar 6 2 3+-3 8 2 /+* 2 $ 3 +

Estado de la pila

Ejemplo 2suma de los número 592 y 3784 utilizando pilas

295

Oper1- stack1

4873

Oper2- stack2

result- stack3

95 5

873 3

73

6

376

76

4376

592+3784

4376

15

+713

9+8

17

2+4

6

1+3

4

+ 6 + 1 7 + 1 3 + 4

Ejemplos aplicaciones que utilizan pilas

• Recursividad

• Recorrido de árboles

• Conversión de base de un numero

( )a ( )b

• Un ejemplo de pila lo constituye el mecanismo que establecen los lenguajes de programación paragarantizar las llamadas anidadas a subprogramas dentro de una aplicación.

Concepto Cola (fifo)

Al igual que con el TDA pila, una cola se puede implementar tanto con arreglos como con listas enlazadas. A continuación se verá la implementación usando un arreglo

Las variables de instancia necesarias en la implementación son:

•primero: indica el índice de la posición del primer elemento de la cola, es decir,

la posición el elemento a retornar cuando se invoque sacar.

•ultimo: indica el índice de la posición de último elemento de la cola. Si se

invoca encolar, el elemento debe ser insertado en el casillero siguiente al que

indica la variable.

•numElem: indica cuántos elementos posee la cola. Definiendo MAX_ELEM

como el tamaño máximo del arreglo, y por lo tanto de la cola, entonces la cola

esta vacía si numElem==0 y está llena si numElem==MAX_ELEM.

Concepto de FIFO(firstin, firstout) Colas

3

7

2

5 TAILQUEUE

HEADD

equ

eue

queue

-Tamano:int;

-Arreglo[Tamano ]:Object;

-Tail:int;

-Head:int;

+queue( );

+enqueue(Object b):void;

+dequeue( ):Object;

+Size( ):int;

+isEmpty( ):boolean;

DESENCOLANDO (Dequeue)

372 TAIL

Encolando (Enqueue)

ANTES

ENQUEUE(10)372

10

DESPUÉS

10TAIL

3725

TAIL

ANTES

Dequeue( )

3

DESPUÉS

HEAD 725

TAIL

HEAD

Dequeue(2 )

HEAD HEAD

Operaciones Básicas de la Cola

•Inicializar la cola.

•Añadir un elemento al final de la cola.

•Eliminar el primer elemento de la cola.

•Vaciar la cola.

•Verificar el estado de la cola: Vacía / Llena.

Colas usando el concepto de listas ligadas

Ejemplo 1Serie

n

jj

j

j1

1

2

1)1(

4321

4

1

1

24

1

23

1

22

1

21

1

2

1)1(

jj

j

j

4231 24

1

22

1

23

1

21

1

cola1cola2

Ejemplo 2: Checar si una palabra es palíndromo

Palabra

Ejem: ama=ama maria≠airam

a

i

r

a

m

a

i

r

a

m

QueueStack

Ejemplo aplicaciones utilizan colas

• Turno en banco

• Un ejemplo de cola es la cola de impresión en el sistema operativo Windows. Cada usuario de una red deWindows coloca sus trabajos de impresión y el sistema lo imprime en el mismo orden en que fueroninsertados en la cola de impresión.

• Cola de procesos S.O

• Cola de mensajes programación sistemas

• Clientes en una caja de supermercado

• Cola peticiones en un servidor de correo

Si un nodo contiene un campo que hace referencia a otro nodo,entonces se puede hilar varios nodos utilizando sólo una variable (p)para acceder a la secuencia de nodos completa (lista ligada)

Concepto Lista ligadas

fig. 13

Creación de un nodo

Creación de la lista

IntSLLNode p=new IntSLLNode(10);

Esto crea el primer nodo de la lista y hace de la variable p una referencia a este nodo. Esto se hace en cuatro pasos.

1. Se crea un IntSLLNode nuevo (fig 13 a)2. El campo info de este nodo se establece en 10 (fig 13 b)3. El campo next del nodo se establece en null (\) (fig 13 c)4. Convierte p en una referencia al nodo recién creado (fig 13 d)

El segundo nodo se crea con la asignación

p.next=new IntSLLNode(8);

donde p.next es el campo next del nodo señalado por p (fig 13 d) como antes se ejecutan cuatro pasos

1. Se crea un nuevo nodo (fig 13 e)2. El campo info de este nodo se establece en 8 (fig 13 f)3. El campo next del nodo se establece en null (\) (fig 13 g)4. El nodo nuevo se incluye en la lista al convertir el campo next del

primer nodo una referencia al nodo nuevo (fig 13 h)

La lista ligada se amplia al añadir un tercer elemento con la asignación

p.next.next=new IntSLLNode(50);

Sol. mantener dos referencias a la lista ligada: una al primer nodo y una al último.

Listas ligadas simples

Nodo

-Info:Object-next :Nodo

+Nodo(Object a)

Lista

-head:Nodo -tail:Nodo

+Lista( )+estaVacia(): boolean +Insertartail(Object a):void +recorrerlista(): Void

Lista2

+main();

*

1

* 1

Relacion?

figura 3.4

figura 3.5

Eliminación

Arreglo nodos conteniendo 4 listas

ListaMio

+main( );

NodoLista

-Elemento:Object

-Siguiente:NodoLista

+NodoLista(Object h);

+NodoLista(Object h,NodoLista final);

*

1

* 1

Relación?

Lista

-head:NodoLista -tail:NodoLista

+Lista( )+estaVacia( ): boolean +Insertarhead(Object a):void+Insertartail(Object

4.3. Interfaces Gráficas de Usuario

4.4 Flujos de Entrada/Salida.

Concepto de Recursividad

Una función que se llama a sí misma sedenomina recursiva

Diseño de algoritmos recursivos

Siempre debe existir al menos un caso base

Los casos generales siempre deben avanzar hacia un caso base. Esdecir, la llamada recursiva se hace a un subproblema mas pequeñoy, en última instancia, los casos generales alcanzarán un caso base.

Iterativo vs. recursivo

Definición iterativa

0!=1

n!=n*(n-1)*(n-2)*…*(1)*0!

Trabajando con métodos recursivos en C++

Ejecución de un modulo recursivo

2

1

0

1

1*1=1

1*2=2

2*3=6

6

STACK

Traza de algoritmos recursivosSe representan en cascada cada una de las llamadas al módulo recursivo, así como sus respectivas zonas de memoria y los valores que devuelven.

Ejemplo 1

Calcular la raíz cuadrada de un número usando un método iterativo, la función es la siguiente

xx

x n

n

n

n1

12

1

Donde:n es el número a encontrar su raíz cuadrada y n>1

es el valor inicial y esta dado por

es el valor calculado anteriormentexn 1

20

nx x0

Calculo de forma iterativa

Calculo de forma recursiva

Ejemplo 2

Calculo de la potencia

nx1 Si n=0

1 nxx Si n>0

Ejemplo 3

Calcular la siguiente sumatoria

n

n

ii xxxxx

suma1

...1111

2100

Donde:n es el de términos de la sucesión a sumarsuma suma total de los n-esimos términos

Por ejemplo: Si x=2 y n=3

875.12

1

2

1

2

1

2

1

2

13210

3

0

i

isuma

Bibliografía

• http://www.grch.com.ar/docs/unlu.poo/Clases-objetos%20C++.pdf• http://www.udb.edu.sv/udb/archivo/guia/informatica-ingenieria/programacion-

ii/2013/i/guia-9.pdf

top related