elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Operación unión de pilas en Pascal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Operación unión de pilas en Pascal  (Leído 1,149 veces)
lolaiza

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Operación unión de pilas en Pascal
« en: 23 Abril 2018, 23:26 pm »

Hola, me pide en un ejercicio que cree dos pilas Z y Q y que  calcule en una pila X la operación de unión.
¿Alguien me puede explicar que es?


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 2.701


Ver Perfil
Re: Operación unión de pilas en Pascal
« Respuesta #1 en: 24 Abril 2018, 00:35 am »

Yo te oriento, luego pones de tu parte y lo trasladas a código (además Pascal lo tengo muy oxidado).

Es fácil que los estudiantes confundan pilas con colas. Así que cuanto antes encuentre uno una manera de disnguirlas mejor.
Con una cola, como su nombre indica, podemos fijarnos en la cola del cine... el último que llega se pone a la cola y espera hasta que el toque.
En un pila, es como 'apilar' libros en el suelo... pones uno encima de otro, luego el último en 'llegar' es el primero en salir... los de habla inglesa como les molan tanto las abreviaturas las llaman por eso FILO y FIFO respectivamente (que parece el mote de profes de mates), First In, First Out y First In, Last Out
Igualmente alguien pudo pensarlo al revés y llamarlas
Last In, Last Out (LILO) y Last In, First Out (LIFO)...  :laugh: :laugh: :laugh:

Bueno, pués si tienes dos pilas, imagina dos montones de libros, cómo pasarías un 'montón' al otro?

Código:
Procedmiento Amontonar(pila origen p1, pila destino p2)
    Mientras p1.Items  // Quedán libros en el montón1?, si sí, entonces...
        r = p1.pop  // Toma un libro del montón1 y ponlo en tu mano
            // Toma: no cualquiera, sino el que está arriba del todo.
        p2.push r   // deposita en el monton2, el libro que tienes en la mano.
            // Deposita: no en cualquier parte, si no encima del todo.
    Repetir
fin procedmiento


Bien, el ejercicio previo fue fácil, pués el que te piden es repetir lo mismo primero con una pila y luego con la otra...
Código:
Procedimiento Amontonar2Pilas(pila Z, pila Q, pila X)
    Amontonar (Z, X)
    Amontnar (Q, X)
fin procedimiento

Quizás la pila X esté vacía y deba crearse dentro del propio procedmiento y luego ser devuelto... eso ya es sazonar al gusto...


p.d.:
Realmente de este modo se mueven muchos elementos. Si se trata de que el estudiante practique vale, pero no es eficiente.
Cuando se trata de ser eficiente, si dos pilas íntegramente pasan a formar parte de otra, hay que mirar si la propia pila dispone de métodos propios, para enlazar el principio de un montón con el final del otro, así la unión de 2 pilas, solo supone operar con dos nodos. Clocando el primer nodo de una pila detrás del último de la otra pila...


« Última modificación: 24 Abril 2018, 00:44 am por NEBIRE » En línea

lolaiza

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Operación unión de pilas en Pascal
« Respuesta #2 en: 24 Abril 2018, 03:22 am »

Gracias!!!!

Entonces la operación de unión es poner ambas pilas en una???
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 2.701


Ver Perfil
Re: Operación unión de pilas en Pascal
« Respuesta #3 en: 24 Abril 2018, 17:17 pm »

Perdona, me dejé llevar más por el título...
1 - Informalmente unión, significa reunión... siendo éste caso, todo lo escrito, sería totalmente correcto.

2 - Formalmente, el concepto de Unión 'U', significa "pertecenece a", así: rojo U colores
indica que rojo pertenece al conjunto colores.
En resumen es lo mismo con la salvedad de que no ha de contener elementos repetidos (el conjunto colores, no contiene: verde, azul, rojo, amarillo, blanco, rojo... es decir solo hay una copia de cada uno).

Releyendo que es un ejercicio (posiblemente de un profesor), asumo que será lo segundo.
Aunque la diferencia sea un pequeñísimo detalle, el ejercicio se complica y sobretodo requiere muchísimas más operaciones (solamente, por efectuarse con pilas) en ese caso, porque antes de depositar un elemento en la pila destino, debe quedar claro, que no consta ya... siendo una pila implica revisar todo su contenido (cada vez), extraer y volver a meter.

Sea la pila Q = 1,6,9,3,3,3,7,9  // cada n´mero representa un elemento...
y la pila Z = 2,0,7,9,7,4,1,1,5
la pila x =    (vacía)

Código:
buleano = Funcion Contiene(elemento e, pila X)
    pila aux
    elemento p
    buleano existe = FALSE

    Mientras x.Items   // ir sacando uno a uno los ítems de la pila para ver si los contiene.
        p = x.pop
        aux.push p

        Si x = e
             existe = TRUE
             Salir del bucle
        fin si        
    repetir

    mientras aux.Items  // volver a introducir los ítems sacados de la pila destino.
        p = aux.pop
        x.push p
    repetir

    Devolver existe
fin funcion

Aqui se opera estrayendo cada elemento de la pila Origen, y si no consta en destino, se añade.
Código:
Procedimiento UnionPX(pila O, pila X)
    elemento p

    Mientras O.Items
        p = O.Pop
        Si Contiene(p, X) = FALSE
            X.push p
        fin si
    repetir        
fin procedmiento

Finalmente se opera con cada pila solicitada ...
Código:
Procedimiento UnionZQ(pila Z, pila Q, pila X)
    // Si se considera que la pila X está vacía, puede comenzarse por colocar el primer elemento de la pila Z
    X.Push(Z.Pop)
    // Pero si tampoco se sabe si la pila Z, está o no vacía no sería acertado la anterior línea...

    UnionPX(Z, X)
    UnionPX(Q, X)
Fin procedmiento

Es laborioso, por cuanto la pila X, con cada ítem debe ser revisada entera y cuantos más se añaden más larga serán las siguientes revisiones...

la pila X, por tanto contendrá finalmente: x = 1,6,9,3,7,2,0,4,5  
« Última modificación: 24 Abril 2018, 17:30 pm por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pilas
Electrónica
airam_dark_artist 1 1,744 Último mensaje 18 Abril 2005, 10:29 am
por + enrique ZP
Pilas y Colas Pascal
Programación General
vanchopper 3 5,811 Último mensaje 31 Marzo 2011, 13:27 pm
por Khronos14
Pascal vs C++: Pascal mejor que c++?
Programación General
Bomb-P 4 8,289 Último mensaje 11 Mayo 2013, 20:42 pm
por BlackM4ster
Algoritmos quick union y wighted quick union?
Programación General
carlmycol 1 1,167 Último mensaje 11 Septiembre 2014, 18:05 pm
por rir3760
Pascal-- ayuda con matrizes no compila pascal ide
Programación General
Augusto 0 918 Último mensaje 6 Noviembre 2017, 22:50 pm
por Augusto
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines