preguntas a a ed
DESCRIPTION
Preguntas a a EdTRANSCRIPT
1.- ¿Que es la abstracción? Tipos de abstracción.
1. Destacar los detalles más relevantes del objeto en estudio.
2. Ignorar los detalles irrelevantes del objeto ( en ese nivel de abstracción).
1. La abstracción operacional: Se basa en el uso de procedimientos y/o funciones sin preocuparnos de
cómo están implementadas. Se destaca que hace y se ignora como se hace.
2. La abstracción de datos: es la técnica de programación que permite inventar o definir nuevos tipos de
datos adecuados a la aplicación que se desea realizar.
3.- ¿Existe alguna relación entre la ocultación de información y la independencia
de la información?
Si, ya que gracias a la ocultación de la información conseguimos que sea independiente su especificación
de su implementación.
6.- ¿Cuándo utilizaremos una representación pesudoestática de un TAD Pila?
Cuando sea conveniente emplear pilas de diferentes tamaños en un programa. En esta representación el
tamaño máximo de una pila no es el mismo para todas las pilas y se fijará en tiempo de ejecución en el
momento de crearla, es decir, se preguntará al usuario el tamaño de la pila que en ese momento vaya a
crear. Pero este tamaño será fijo durante todo el tiempo de la pila.
7.- ¿Cuándo utilizaremos una representación dinámica de un TAD pila?
Cuando no sabemos de antemano el número de elementos que podría tener una pila, es decir, cuando el
tamaño de las pilas creadas en nuestra aplicación sea variable con lo cual se incrementará ó decrementará
su tamaño conforme sea necesario en tiempo de ejecución.
8.- ¿En qué caso utilizaremos una representación estática de un TAD pila?
Cuando el tamaño de todas las pilas que necesitemos en nuestra aplicación sea el mismo. La
representación estática requiere saber el tamaño máximo en tiempo de compilación (de antemano
sabremos la cantidad de elementos que van a tener las pilas empleadas en dicha aplicación).
9.- ¿Por qué en la representación dinámica de un TAD pila se representa la pila como un puntero a
las estructuras de datos diseñadas?
La razón de introducir un puntero es hacer que el paso de parámetros a las operaciones del TAD sea por
referencia, de modo que los cambios en los parámetros formales sean reflejados en los parámetros reales.
10.- ¿Porqué en la representación estática y pseudoestática de un TAD pila, el registro que
representa la pila se pasa por referencia sin ser necesario?
Esto es debido al principio de independencia de la representación. Una forma de hacerlo es definir un
puntero a las estructuras de datos diseñadas. Así se obtienen 2 ventajas:
1. El paso por referencia queda oculto a la implementación del TAD y es transparente para el usuario del
mismo.
2. Se ahorra la memoria de los datos que se duplican mientras que se ejecuta una función debido a que,
cuando se ejecuta la llamada a una función, la transferencia de parámetros se hace siempre por valor, lo
cual provoca que los parámetros reales se copien en los formales.
Al definir el tipo pila como un puntero al registro que representa a la pila, solo se hace una copia de este
puntero y no del registro completo.
12.- ¿Tiene algún sentido representar una pila con una lista doblemente enlazada? ¿Por qué?
No, ya que una lista doblemente enlazada requiere un doble puntero, uno para el elemento siguiente y
otro para el anterior. Esto es un gasto innecesario ya que en la pila solo insertamos o eliminamos por el
Tope. Por lo tanto, con un sólo puntero es suficiente.
Además en una pila no tenemos el concepto de posición, ya que solo podemos insertar por la cima y
eliminar por la misma, mientras que en la lista podemos hacer una inserción ó eliminación en cualquier
posición mientras que , como dijimos antes, en la pila sólo podemos por el tope, ya que es una condición
necesaria del TAD pila.
13.- ¿Y en una representación pseudoestática?
Ventajas: Relativo a la pila estática, la pila pseudoestática nos permite fijar distintos tamaños para las pilas
de la aplicación en tiempo de ejecución por lo que un tamaño inicial no determinará el tamaño de todas
las pilas. Ocupa menos espacio que la implementación del TAD pila mediante celdas enlazadas ya que no
requiere un puntero por elemento.
Inconvenientes: Tamaño constante durante la vida de cada pila, tamaño que tenemos que ir controlando
para no sobrepasarlo.
14.- ¿Cuándo utilizaremos la representación circular del TAD pila?
Tal y como se define el TAD pila, una pila es una secuencia de elementos de un tipo determinado, en la
cual se puede añadir y eliminar elementos sólo por uno de sus extremos llamado tope o cima, por lo tanto,
carecería de sentido utilizar un puntero que se utilizara para apuntar a la base de la pila (primer elemento
que se introduciría en ella). En cualquier caso, ese TAD lo utilizaríamos para obtener el elemento base de la
pila, pero por otra parte, tendríamos que cambiar operaciones del TAD pila como la función FIN(habría que
reimplementarla)..
15.- ¿Para qué se utiliza el nodo cabecera en el TAD Cola, en su implementación con celdas
enlazadas? (TRAMPA)
El nodo cabecera no se utiliza en el TAD cola, es innecesario dado que ésta surge para resolver un
problema de independencia de la representación en el TAD lista, cuando definimos la posición en una lista.
16.-¿Por qué surge el nodo cabecera en las listas?
Cuando implementamos la lista con celdas enlazadas, se nos plantea un problema de independencia de la
representación en lo que se referencia a la utilización de tipo de dato posición.
Por ejemplo, en la operación Insertar del TAD Lista, cuando vamos a insertar en la posición “p”, el elemento
que ocupa dicha posición (si lo hubiera) pasaría a ser la posición “p+1” y el nuevo elemento que vamos a
insertar, obviamente, ocuparía la posición “p”. Ocurre un problema y es que, además de hacer esta
operación, la posición apuntaría al elemento que ocupa la posición “p+1” y esto no debe ser así, es decir,
debería de apuntar a la posición insertada , a la posición “p”. Por esta razón, se debe de modificar dicho
puntero para que apunte donde debería de apuntar y se pasaría en la cabecera de la función como
“posición *p”, y no estaríamos cumpliendo con la especificación del TAD lista.Para arreglar este problema,
hacemos que cada elemento de la lista se referencie mediante su nodo anterior, con lo que acarrea el
problema de que, el primer elemento no tenga anterior, luego se crea el nodo cabecera y, en
consecuencia, también respetaríamos la especificación del TAD lista.
21.- ¿Qué es la especificación semántica?
La especificación semántica van a ser una serie de pautas las cuales van a expresar el significado de cada
una de las operaciones de un TAD.Se puede expresar mediante precondiciones y postcondiciones, es decir,
bajo el cumplimiento de las precondiciones, se puede realizar la operación y después de la ejecución de las
misma, se deben cumplir las postcondiciones.
22.- ¿Qué es la especificación sintáctica?
Se refiere a la definición formal del conjunto de métodos ó procedimientos válidos capaces de acceder de
manera única a los elementos de datos o estructura de datos del tipo de dato abstracto.
25.- Respetando el TAD Lista mediante un vector ¿es posible evitar el coste
O[[n]] para inserciones y borrados en los extremos?
Si en los extremos, podría evitarse añadiendo a la estructura dos campos enteros indicando dónde están
los extremos e inicializarlo a n/2 y (n/2+1) por ejemplo. A medida que se van insertando y borrando, se
actualizan los valores de los extremos. Por ejemplo si quiero insertar al principio de la lista haría:
V[extremoDerecho]=Elemento;
extremoDerecho=extremoDerecho-1;
En todas las operaciones la lista estaría comprendida entre extremoDerecho y extremoIzquierdo y habría
que controlar sus valores. Así para insertar en la posición 3 de la lista sería en extremoDerecho+3, siempre
y cuando este valor esté en los límites adecuados.
28.- Condición que tiene que tener una lista para que la búsqueda sea logarítmica?
¿Cómo vas a hacer en una lista que es una estructura secuencial, una búsqueda logarítmica?. No se puede.
Ya que la inserción no tiene por qué ordenarse además, para poder hacerlo de forma vectorial, el vector no
va a estar lleno porque son las operaciones que están implementadas.
32.- ¿Cómo se podría eliminar un elemento cualquiera de una cola/pila?
No se puede, en la cola se introduce por un extremo y se saca por el otro, en una pila se introduce y se
saca por el mismo extremo.
33.- ¿Por qué es necesaria la función igual en listas?
Para buscar la posición de un elemento compara los elementos, puede ser el tipo del elemento sea tipo
estructurado y no se puedan comparar elementos con el operador ==.
35.- Principio fundamental de los TAD: independencia de la representación.
Independientemente de cómo se represente el TAD, la especificación no cambia. Por ello un usuario puede
usar un TAD sin importarle como está implementado o bien si la implementación cambia no afecta a la
especificación.
36.- ¿Por qué hace falta un doble puntero en la definición del tipo listas?
Porque si se inserta el primer elemento cuando la lista está vacía no se modificaría. Además de ésta forma
se respeta la especificación.
37.- Ante la posibilidad de que no se verifiquen las precondiciones de una operación de un TAD, que
decisiones de diseño puede implementar la operación?
Lo ideal sería que diese un error. Dependiendo de la gravedad que puede derivar el error al resto de la
aplicación, recomendaría que si fuese alto, daría por concluida la continuidad de la aplicación y terminaría
inminentemente con su ejecución.