| | 1. Dada la funcón fun y el programa principal main, suponiendo que todos los includes están declarados correctamente:
void fun(int &e1, int &e2)
{
int c=5;
int tmp=e1;
e1=e2;
e2=tmp;
c=c+1;
return;
}
void main(void)
{
int a=1;
int b=4;
int c=5;
fun(a,b);
cout << a << "," << b << "," << c << endl;
}
la salida del programa será: |
| | 4,1,5 |
| | Error de compilación en la llamada fun |
| | 1,4,5 |
| | 1,4,6 |
| | No contesto... |
| |
| | 2. Dada la función fun y el programa principal main, suponiendo que todos los includes están declarados correctamente:
void fun(int e1, int e2)
{
int c=5;
int tmp=e1;
e1=e2;
e2=tmp;
c=c+1;
return;
}
void main(void)
{
int a=1;
int b=4;
int c=5;
fun(a,b);
cout << a << "," << b << "," << c << endl;
}
la salida del programa será: |
| | 4,1,5 |
| | Error de compilación en la llamada fun |
| | 1,4,5 |
| | 1,4,6 |
| | No contesto... |
| |
| | 3. Dada la función fun y el programa principal main, suponiendo que todos los includes están declarados correctamente:
void fun(int *e1, int *e2)
{
int tmp=e1;
e1=e2;
e2=e1;
return;
}
void main(void)
{
int a=1;
int b=4;
fun(a,b);
cout << a << "," << b << endl;
}
la salida del programa será: |
| | 4,1,5 |
| | Error de compilación en la llamada fun |
| | 1,4,5 |
| | 1,4,6 |
| | No contesto... |
| |
| | 4. Dada la clase siguiente y el programa principal (main), decidir que constructor xxx(xx) es el correcto:
class Interger
{
int i;
public:
xxx(xx)
void print( ) { cout << i << ''; }
}
int main( )
{
Interger i[5];
for(int j=0;j < 5;j++)
i[j].print();
}
|
| | Interger(int ii):i(ii){ } |
| | Interger(int ii=0):i(ii){ } |
| | Interger(int ii) { i=ii; } |
| | Interger(int &ii) { i=ii; } |
| | No contesto... |
| |
| | 5. La organización de un vector en memoria: |
| | Garantiza que los objetos en posiciones consecutivas del vector serán almacenados en posiciones consecutivas de memoria física. Si no hay suficiente espacio consecutivo se produce |
| | La relación entre posiciones del vector y las direcciones de memoria física dependerán de la gestión de memoria que se utilice |
| | Garantiza que los objetos en posiciones consecutivas del vector serán almacenados en posiciones consecutivas de memoria pero si no hay suficiente espacio consecutivo se utilizan fr |
| | Ninguna de las anteriores |
| | No contesto... |
| |
| | 6. Una lista simplemente enlazada: |
| | Garantiza que la velocidad de las inserciones de nodo no dependen de la posición donde se inserta |
| | Para acceder a un nodo es necesario pasar por todos los anteriores |
| | Garantiza que la velocidad de borrado de nodo no depende de las posiciones donde se borra |
| | Todas las anteriores son correctas |
| | No contesto... |
| |
| | 7. La relación que existe entre un puntero y un vector normal de cpp (clase): |
| | El nombre de un vector es también un puntero que señala la primera posición del vector |
| | Se puede utilizar un puntero para recorrer un vector |
| | Se puede utilitzar un puntero para leer o escribir elementos en un vector |
| | Todas las anteriores |
| | No contesto... |
| |
| | 8. En una clase sus funcniones miembro pueden leer y modificar variables que se encuentren en la zona: |
| | privada de la clase |
| | protegida de la clase |
| | pública de la clase |
| | todas las anteriores |
| | No contesto... |
| |
| | 9. Las funciones no miembro de una clase pueden leer y modificar variables que se encuentren en la zona |
| | privada de la clase |
| | protegida de la clase |
| | pública de la clase |
| | todas las anteriores |
| | No contesto... |
| |
| | 10. ¿ Cuándo es necesario codificar el constructor de copia de una clase ? |
| | Siempre |
| | Nunca (no es necesario porque el lenguaje ya los proporciona) |
| | Cuando en la clase existan punteros y se realize gestión de memoria |
| | Cuando en la clase haya variables de tipo double |
| | No contesto... |
| |
| | 11. Un árbol es: |
| | Una estructura de datos que por su definición recursiva puede tener un conjunto finito o infinito de nodos |
| | Una estructura de datos que consiste en nodos conectados donde cada nodo excepto las hojas del árbol tiene por lo menos un nodo descendiente |
| | Una estructura de datos tal que si para algún nodo sus subárboles no son disjuntos hablamos de árbol cíclico |
| | Un tipo de datos abstractos que consiste en nodos y ramas donde para cada nodo existe una rama hacia su padre |
| | No contesto... |
| |
| | 12. El grado de un nodo de un árbol |
| | Es igual al número de subárboles de este nodo |
| | Es igual al número de ramas que tiene un nodo |
| | Es igual al número de hijos que tiene un nodo |
| | A y C |
| | No contesto... |
| |
| | 13. Sobre los árboles binarios: |
| | Son óptimos porque, entre otras características, minimizan el número de campos hijos igual a 0 comparados con los árboles de cualquier grado |
| | Un árbol binario completo de n nodos tiene menos profundidad que un árbol completo de grado 3 y que contiene n nodos |
| | Permite definir los algoritmos principales relacionados con árboles como son el recorrido del árbol, inserción y borrado de un nodo, y luego estos algoritmos genéricos se pueden ap |
| | A y C |
| | No contesto... |
| |
| | 14. Sobre la representación de árboles binarios: |
| | Utilitzaría la representación con enlaces si mi problema donde se utiliza la estructura árbol necesita muchas inserciones y borrados de nodos porque es la representación que evita |
| | las formas típicas son: con nodos enlazados, con vectores o matrices |
| | Es recomendable usar la representación vectorial si el árbol tiene pocos nodos (un árbol esparcido) porque permite concentrarlos al principio del vector |
| | Siempre es mejor usar la representación con enlaces porque es la única forma de encontrar cual es el hijo izquierdo e hijo derecho de un nodo |
| | No contesto... |
| |
| | 15. Sobre los recorridos de un árbol binario, el algoritmo siguiente:
void arbol::recorrer(node *n)
{
if (n)
{
recorre(n->izquierda);
cout << n->info << " ";
recorrer(n->derecha);
}
}
|
| | Realiza un recorrido en preorden |
| | Para obtener un recorrido en postorden hemos de visitar el nodo n (en este caso imprimir su información) antes de las llamadas recursivas |
| | Dado un árbol de búsqueda binaria, si utilizo el algoritmo para recorrer sus nodos se obtiene una secuencia ascendente |
| | Ninguno de los anteriores |
| | No contesto... |
| |
| | 16. Dados los prototipos de las clases nodo y arbol con sus definiciones respectivamente:
class nodo
{
int info;
nodo *l;
nodo *r;
...
};
class arbol
{
nodo *raiz;
public:
arbol( );
arbol(arbol &A);
arbol &operator =(arbol &A);
bool operator==(arbol &A);
};
Un objeto B de tipo árbol, y las siguientes operaciones:
arbol A(B);
arbol C;
C=B;
if(C==B)
cout << "Los árboles B y C son iguales";
|
| | Falta definir el destructor de la clase árbol porque la clase árbol utiliza memoria dinámica |
| | No hace falta definir el constructor por defecto y el constructor de copia dado que están definidos por defecto |
| | La expresión C==B necesita que el operador == se defina como una función global friend y no como una función miembro de la clase árbol. Al ser definido como función m |
| | Ninguno de los anteriores |
| | No contesto... |
| |
| | 17. La inserción: |
| | En un árbol enhebrado asegura que el árbol seguirá siendo balanceado |
| | En un árbol heap asegura que el árbol seguirá siendo balanceado |
| | En un árbol heap consiste en insertar a la raíz e ir bajándolo hasta encontrar un sitio donde será mayor que sus hijos y menor que su padre |
| | En una posición concreta (nodo *n) de un árbol enhebrado consiste en mover físicamente todos los nodos del subarbol con raíz (*n) un nivel hacia abajo |
| | No contesto... |
| |
| | 18. En un grafo: |
| | La potencia de orden k de la matriz adyacente nos da los caminos de longitud k-1 del grafo |
| | La potencia de orden k de la matriz adyacente nos da todos los caminos de longitud hasta k-1 del grafo |
| | El algoritmo de Warshall nos permite encontrar los nodos conectados (la matriz de los caminos) de un grafo de una forma más óptima que el método de las potencias de la matriz adyac |
| | El problema de Koninberg se puede resolver utilizando una estructura de datos que puede ser de tipo grafo o de tipo árbol; sin embargo usando grafos es más rápido encontrar la solu |
| | No contesto... |
| |
| | 19. Problema: Dado el árbol de búsqueda bianria:
(20)
/ \
(15) (40)
/ \
(30)(60)
\
(32)
\
(38)
/
(36)
Si borramos el nodo 40 sustituyéndolo con su predecesor y leemos el árbol en preorden obtenemos la secuencia: |
| | 20,15,30,32,60,38,36 |
| | 20,15,38,30,32,36,60 |
| | 20,15,36,30,60,32,38 |
| | Ninguna de las anteriores |
| | No contesto... |
| |
| | 20. Problema: Dado el siguiente algoritmo de recorrido de una estructura de nodos:
void estructura:recorrido()
{
bool *visitado=new bool[n]; // n - numero de nodos de la estructura de datos
for (int i=0;i
visitado[i]=false;
queueq;
q.push(0);//guarda el primer nodo
while(!q.empty())
{
int t=q.front();
q.pop();
cout << t << " ";
visitado[t]=true;
queue ad=adyacentes(t); // busca los nodos adyacentes del nodo t
while(!ad.empty())
{
int na=ad.front();
ad.pop();
if(!visitado[na])
q.push(na);
}
}
delete []visitado;
}
|
| | Realiza un recorrido en amplitud de un árbol |
| | Realiza un recorrido en profundidad de un árbol |
| | Realiza un recorrido en amplitud de un grafo |
| | Realiza un recorrido en profundidad de un grafo |
| | No contesto... |
| |