APLICACIONES DE PILAS Estructuras de Datos.

Slides:



Advertisements
Presentaciones similares
ESTRUCTURA DE DATOS Unidad 03 PILAS.
Advertisements

PROF. ING. JULIO CESAR CANO RAMIREZ
Clase 2 Tipos de datos Asignación de valores Estructura IF Ejercicios
Asignatura: Introducción a la programación
Técnico en programación de Software
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Estructuras de control
ESTRUCTURAS DE SECUENCIA
VISUAL BASIC CONSOLA Todas las ordenes o instrucciones se digitan dentro de sub Main() y End Sub ÁREA DE TRABAJO: Las aplicaciones de consola son aquellas.
ÁRBOLES DE EXPRESION.
Ingeniero Anyelo Quintero
Arboles Binarios de expresiones
EXPRESIONES ALGEBRÁICAS
Programación de Computadores
EXPONENTES Y RADICALES
Sistemas de Numeración
Unidad III Elementos del lenguaje C++
DIVISIÓN DE POLINOMIOS 1
La Pila o Stack Programación. La pila (stack) es una estructura ordenada de elementos en la que se pueden insertar o remover elementos por un extremo.
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Licenciatura en Informatica
INGENIERIA EN SISTEMAS COMPUTACIONALES
Estructura de Datos y Algoritmos
Estructura de Datos En C++
ARBOLES ESTRUCTURAS DE DATOS.
ESTRUCTURA DE DATOS ESD-243
Descomposición Factorial Unidad 5
MATEMÁTICA 2013 Unidad 0 Repaso.
7 4 Enteros a. barriga.
AED3: Algoritmos y Estructuras de Datos 3.  Uno de los conceptos mas utiles en computacion es la pila o stack  Es un conjunto de elementos, en la que:
Operaciones combinadas
FORMA INTERNA DE REPRESENTAR
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
Material de apoyo Unidad 4 Estructura de datos
TDA PILA ESTRUCTURAS DE DATOS.
EXPRESIONES Y SENTENCIAS
ETAPAS PARA SOLUCIONAR UN PROBLEMA
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 18/08/2006.
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 15/04/2007.
Introducción a la programación
NÚMEROS REALES.
Elementos básicos para el desarrollo de algoritmos
Tema 4 Polinomios.
LOS NÚMEROS REALES.
Elementos básicos para el desarrollo de algoritmos
Términos algoritmo diseñar algoritmo implementar algoritmo
II.- Algebra Básica Expresión algebraica y sus partes.
Programación Básica con NQC Patricio A. Castillo 12/04/2008.
II Unidad: Lenguaje Algebraico
Operaciones Algebraicas
Presente un cuestionario con los aspectos mas importantes sobre los
Práctica Profesional PHP.
Introducción al lenguaje PROCESSING para ARDUINO
Estructuras de Decisión
Lic. Carla Aguirre Montalvo
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Conceptos Generales Programación I Docente: Ing. Marleny Soria M.
Prefijo Símbolo Decimal Equivalente Potencia de 10 tera- T giga- G mega- M kilo- K hecto-
Para aplicaciones.   Una variable es un espacio de memoria en donde se almacenan datos 1. VARIABLES.
Programación I Docente: Ing. Marleny Soria M..  Es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar.
Suma y resta de monomios
Conceptos Generales PROGRAMACIÓN I DOCENTE: ING. MARLENY SORIA M. 1.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
CONJUNTOS NUMÉRICOS. 1.Números Naturales 1.1 Consecutividad numérica 1.2 Paridad e imparidad 1.3 Números primos 1.4 Múltiplos y divisores 1.5 Mínimo Común.
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
FACTORIZACIÓN POR: Moisés Inostroza C..
Unidad Temática II Algoritmia Elemental Operadores aritméticos: son símbolos que le indican al compilador la operación de cálculo a realizar entre los.
Ing. Barros Rodriguez D. Ronald Introducción a la Programacón.
Transcripción de la presentación:

APLICACIONES DE PILAS Estructuras de Datos

EXPRESIONES Una expresión aritmética: Conjunto de operadores, variables y paréntesis. Ejemplo: A+B Esta forma de escribir las expresiones: NOTACION INFIJA El operador siempre va en medio de los operandos En una expresión, las operaciones se “ejecutan” en un cierto orden A+B*C no es igual que (A+B)*C Cada operador tiene su nivel de precedencia, recordemos: Paréntesis : () Mayor prioridad Potencia : ^ Multiplicación/división: *,/ Suma/Resta : +,-* Menor Prioridad

Ya no se necesitan paréntesis A+B*C NOTACIONES Agrupar como establece la precedencia A+(B*C) Convertir operación por operación La de mayor precedencia primero A+(BC*) La que le sigue en precedencia A(BC*)+ Remover Paréntesis ABC*+ La notación infija es la mas popular No es la única forma, hay dos mas NOTACION PREFIJA(POLACA) +AB Aquí el operador va antes que los operandos NOTACION POSFIJA(POLACA INVERSA) AB+ Aquí el operador va después que los operandos No son nada difíciles, pero Siempre tener en cuenta la precedencia de los operadores Ejemplo. Pasar a postfija las siguientes expresiones: (A+B)*C Agrupar como establece la precedencia (A+B)*C Convertir operación por operación La de mayor precedencia primero (AB+)*C La que le sigue en precedencia (AB+)C* Remover Paréntesis AB+C* Ya no se necesitan paréntesis En postfija, el orden de los operadores es el verdadero orden de ejecución

EJERCICIOS EN CLASE Convertir las siguientes expresiones a postfija y prefija A*B/(A+C) A*B/A+C (A-B)^C+D A^B*C-D+E/F/(G+H) ((A+B) *C-(D-E))^(F+G)

EVALUACION DE EXPRESIONES POSFIJAS Dadas AB+C* ABC*+ Evaluelas, cuando A = 3, B = 4 y C = 5 La primera, resultado : 35 La segunda, resultado: 23 Que algoritmo siguió para evaluar estas expresiones? A20+ ABC*+ 7C* AB+C* A+B -> 7 B*C -> 20 7*C -> 35 20+A -> 23

EVALUACION: ALGORITMO Podría ser un una pila Con lo anterior, ya tenemos una idea de que hacer Deberíamos poder “recordar” c/operando de la expresion Si encontramos un operador Los dos últimos operandos recordados son los usados y “olvidados” El resultado de la operación, debe ser también “recordado” Así, hasta que la expresión termine 2 veces Pop Push del resultado en la pila ABC*+ C * B + A C B C*B A

EN PSEUDOCODIGO Pila s; PilaVacia(s); while(no hayamos revisados toda la expresion) { simbolo = siguiente elemento if(simbolo es un operando) Push(s,simbolo); else{ operando1 = Pop(s); operando2 = Pop(s); valor = resultado de operación simbolo entre operando1 y operando2 Push(s,valor); } return(Pop(s));

EJERCICIO EN CLASE Dada la siguiente expresión: 6 2 3+ - 3 8 2 / + * 2 ^ 3 + Simule la pila, para evaluar esta expresión

CONVERSION DE INFIJA A POSFIJA El operador de mayor precedencia es el primero en aparecer en la expresión A es un operando, es añadido directamente a la nueva expresión en postfija CONVERSION DE INFIJA A POSFIJA El operador de mayor precedencia en la expresión será el primero en aparecer en la conversión A + B * C - D A B C * + D - * Es un operador. Si se compara con el ultimo recordado, el * tiene mayor prioridad. Pero no sabemos si tiene “la” mayor prioridad de todos aun. Mejor guardarlo Pero aun no podemos continuar. Seguimos comparando el – con el de mayor prioridad hasta ahora, el +. Como el – no tiene mayor prioridad que el +, el + ya puede ser añadido a la expresion. Como ya no queda mas en la pila, El – es definitivamente hasta ahora, el de “mayor prioridad”, debemos recordarlo Comparado con el de mayor prioridad hasta ahora(el *), el – no tiene mayor prioridad. Ahora si podemos decir, que el * es el operador de mayor prioridad Podemos añadir el * a la nueva expresion, y “olvidarnos” de el + es un operador, pero, hasta lo que vamos revisando, no es el de mayor prioridad, mejor, guardarlo Aquí terminamos de revisar la expresión, símbolo por símbolo. En la pila, quedan aun operadores. Todos se sacan y se añaden a la nueva expresión Así termina la conversión B * C D - A + * + -

CONVERSION: ALGORITMO Cada símbolo de la expresión es revisado Si el símbolo es un operando, Se añade a la expresión Si el símbolo es un operador El símbolo es evaluado con respecto a su prioridad Si tiene mayor prioridad que el ultimo operador almacenado Aun no se puede decir nada, y se recuerda, es decir, se almacena en un pila Si tiene menor prioridad que el ultimo operador almacenado Quiere decir, que el ultimo operador almacenado es el de mayor prioridad sin lugar a dudas El ultimo operador almacenado, se saca y se añade a la nueva expresión Esto sigue hasta que el operador que estamos revisando sea el de mayor prioridad de todos los almacenados en la pila Una vez revisados todos los símbolos de la expresión Si hay algo almacenado en la pila, se saca y se añade a la nueva expresión

EN PSEUDOCODIGO Pila s; PilaVacia(&s); while(no termine la expresion en infija) { simbolo = siguiente carácter de entrada; if(simbolo es un operando) añadir simbolo a la nueva expresion posfija else{ while(simbolo tenga menor o igual precedencia que el tope de la pila) simb_tope = pop(s); añadir simb_tope a la nueva exp. } push(s,simbolo) /*le da salida a los operadores restantes*/ while(!EstaVacia(s)){ añadir simb_tope a la nueva exp. posfija

Y CON PARENTESIS Lo anterior, es valido para conversión de expresiones sin paréntesis Para resolver este problema, podemos seguir las siguientes reglas: Los paréntesis izquierdos ( Siempre van a ser añadidos a la pila, pase lo que pase Los paréntesis derechos ) Significa que un ambiente de () ha sido terminado, Todos los operadores de la pila, se sacan, hasta encontrar un (

CON PARENTESIS: ALGORITMO Pila s; PilaVacia(s); while(no termine la expresion en infija){ simbolo = siguiente carácter de entrada; if(simbolo es un operando) añadir simbolo a la nueva expresion posfija else{ if(simbolo == ‘)’){ while(TRUE){ simb_tope = pop(s); if (simb_tope == ‘)’ || EstaVacia(s)) break; añadir simb_tope a la nueva exp. } else if(simbolo != ‘(‘){ while(simbolo tenga menor o igual precedencia que el tope de la pila) push(s,simbolo) /*le da salida a los operadores restantes*/ while(!EstaVacia(s)){ añadir simb_tope a la nueva exp. posfija

EJERCICIO EN CLASE Usando el algoritmo, convertir ((A-(B+C))*D^(E+F)