EJERCICIOS TEMA 1 1. Supongamos el siguiente fragmento de

Anuncio
EJERCICIOS TEMA 1
1. Supongamos el siguiente fragmento de código:
int unidades;
unidades=leerUnidades();
if(unidades<20)
{
float precio_final=unidades*140;
}
else
{
float precio_final=unidades*120;
}
cout<<”El precio final es:”<<precio_final;
¿Es correcta la utilización de las variables?
2. Tenemos una variable de tipo int llamada unidades, y queremos pasarla como
parámetro a una función llamada modificarUnidades, la cual cambiará el valor
del parámetro. Escribe la llamada a la función y su cabecera en los siguientes
dos casos:
a) Con un paso de parámetros mediante punteros.
b) Con un paso de parámetros mediante referencias.
3. Dada la siguiente variable:
struct Pieza
{
int codigo;
int precio;
} nueva_pieza;
Escribe una función que reciba como parámetro un struct Pieza y pida al usuario
los valores de sus campos. Escribe también la llamada a dicha función pasándole
la variable nueva_pieza. Escribe dos versiones, una con punteros, y otra con
referencias.
4. ¿Cuál de las siguientes funciones es incorrecta?
int funcion1 (int x, float f=6.0) { …. }
int funcion2 (int x=1, float f) { … }
5. Dada la siguiente función:
inline float distanciaEuclidea(float x0, float y0, float x1, float y1)
{
return sqrt(pow(x0-x1, 2)+pow(y0-y1, 2));1
}
¿cómo se transformaría la siguiente instrucción al expandir el compilador la
función inline?
distancia = distanciaEuclidea (p0.x, p0.y, p1.x, p1.y);
1
La función pow eleva el primer parámetro a la potencia indicada por el segundo parámetro.
6. ¿Cuál de las siguientes respuestas es correcta a cerca de la sobrecarga de
funciones? La sobrecarga de funciones consiste en:
a. Definir varias funciones con el mismo nombre y los mismos parámetros.
b. Definir varias funciones con el mismo nombre, pero con diferentes
parámetros.
c. Definir varias funciones con el mismo nombre y los mismos parámetros,
pero con distinto tipo de retorno.
d. Definir varias funciones con distinto nombre, pero con los mismos
parámetros.
7. ¿Cómo definirías (crearías) con memoria dinámica una variable de tipo Pieza
(ver ejercicio 3)? ¿Y un vector dinámico de Piezas con tamaño 10? ¿Cómo
serían las instrucciones que liberarían las anteriores reservas de memoria?
8. Dados los siguientes tipos de datos:
struct NodoLista
{
string nombre;
nodoLista *sig;
};
struct ListaPersonal
{
NodoLista *cap; // Cabeza de la lista
};
¿Cómo completarías la siguiente función para que permitiese insertar un nuevo
nombre de persona al principio de la lista ListaPersonal?
void insercionInicio (ListaPersonal &l, string name)
{…}
12. Completa la siguiente función para que muestre por la salida estándar el
contenido de una variable de tipo ListaPersonal:
void mostrar (const ListaPesonal & l)
{…}
13. Completa la siguiente función para que se libere el contenido de una variable de
tipo ListaPersonal:
void liberar (const ListaPesonal & l)
{…}
14. Dados los tipos de datos NodoLista y ListaPersonal, y el siguiente programa:
…// Declaración de tipos de datos y prototipos
int main ()
{
ListaPersonal l1, l2; // Declaración de dos listas
insercionInicio (l1, “Juan García”);
insercionInicio (l1, “Luis Montoya”);
copiarLista (l2, l1); // Hace un duplicado de l1 sobre l2
liberar (l1);
mostrar (l2);
return 0;
}
void copiarLista ( ListaPersonal &ld, const ListaPersonal &lo)
{
ld.cap=lo.cap;
}
a. ¿Crees que falta hacer algo antes de llamar a la función insercionInicio?
b. ¿Qué sucedería al ejecutar la instrucción mostrar(l2)?
c. ¿Crees que la siguiente función copiarLista sería correcta? ¿Por qué?
void copiarLista ( ListaPersonal &ld, const ListaPersonal
{
NodoLista *nuevo;
NodoLista *aux;
ld.cap=NULL;
aux=ld.cap;
nuevo = new NodoLista;
for (NodoLista *t=lo.cap; t!=NULL; t=t->sig)
{
nuevo->nombre=t->nombre;
nuevo->sig=NULL;
if(aux==NULL)
aux=nuevo;
else
{
aux->sig=nuevo;
aux=aux->sig;
}
}
}
&lo)
d. ¿Crees que la siguiente función copiarLista sería correcta? ¿Por qué?
void copiarLista ( ListaPersonal &ld, const ListaPersonal
{
NodoLista *nuevo;
NodoLista *aux;
ld.cap=NULL;
aux=ld.cap;
for (NodoLista *t=lo.cap; t!=NULL; t=t->sig)
{
nuevo = new NodoLista;
nuevo->nombre=t->nombre;
nuevo->sig=NULL;
if(ld.cap==NULL)
ld.cap=aux=nuevo;
else
{
aux->sig=nuevo;
aux=aux->sig;
}
}
}
&lo)
Descargar