Está en la página 1de 4

Prctica para el primer examen.

Ejercicios. 1. Basado en la clase Person (abajo), cree una clase hija llamada Student. Esta clase tendr como atributos privados el carn del estudiante (int), el nombre de la carrera que cursa (string) y su nota promedio (float). Debe crear un constructor con los parmetros correspondientes para inicializar los atributos carn y nombre de la carrera. La nota promedio debe ser inicializada en cero y debe llamar al constructor de la clase padre (Person). Use listas de inicializacin en el constructor. Adems, Student tendr un mtodo llamado calcula_promedio que recibe dos parmetros: uno para representar la sumatoria de las notas del estudiante (float) y otro para representar la cantidad de cursos del estudiante (int). El mtodo debe calcular el promedio simple usando los parmetros (las notas dividido entre los cursos) y modificar el atributo de la nota promedio del estudiante con el resultado. El mtodo debe validar que ambos datos sean mayores o iguales a cero. class Person { public: string name; int age; Person(string nombre, int edad) : name(nombre), age(edad) {} void set_age(int age) {this->age = age;} int get_age() { return age;} void set_name(string name) {this->name = name;} string get_name() { return name;} }; 2. Haga una funcin de tipo plantilla, llamada ordena, que recibe tres parmetros del tipo plantilla y modifique sus contenidos, de manera que en el primer parmetro quede el valor menor, en el segundo el intermedio y en el tercer valor quede el mayor. La funcin no retorna valor alguno y no imprime ningn mensaje, solamente ordena los valores y los deja en los parmetros. Es importante que al finalizar la funcin, los objetos originales, que pasaron por parmetro, queden modificados. Adems, implemente manejo de excepciones para out_of_range y para los dos casos de excepciones generales vistas en clase. Desglose: a. b. c. d. Encabezado (plantilla) Parmetros Lgica de ordenar los valores Manejo de excepciones 5% 5% 10% 10%

3. Basado en el siguiente cdigo haga dos cosas. Primero, explique por qu el puntero score debe ser pasado a la funcin por referencia. Qu pasara si se pasa por valor? Segundo, modifique este cdigo para manejar excepciones. Al menos debe manejar out_of_range, length_error y logic_error, como casos particulares. void find_first_greater_than(int*& ptr, int nota) { while (*ptr <= nota) { ptr++; } } int main(int argc, char* argv[]) { int exam_scores[] = {74, 74, 64, 77, 68, 59, 58, 89, 74, 88, 70, 95, 71, 81, 89, 54, 76, 83, 88, 67}; int* score = &exam_scores[0]; cout << *score << endl; // Imprime 74 find_first_greater_than(score, 80); cout << *score << endl; // Imprime 89 return EXIT_SUCCESS; } 4. Basado en la clase BankAccount (abajo), cree otra clase llamada DebitAccount que herede de la primera. Esta clase hija debe tener como atributos la tasa de inters (llamada tasa) y el nmero de tarjeta de dbito asociada a la cuenta (tarjeta). Adems, debe tener un atributo adicional para indicar si la cuenta es en colones o dlares (llamada moneda). Finalmente, inclyale un constructor con parmetros para inicializar todos los atributos, un mtodo para retornar el nmero de tarjeta (getTarjeta) y otro para modificar la moneda (setMoneda). class BankAccount { private: double sum; string name; public: BankAccount(string nm) : name(nm), sum(0) {} BankAccount(string nm, double bal) : name(nm), sum(bal) {} double balance() { return sum;} void deposit(double amount) {sum += amount;} void withdraw(double amount) {sum -= amount;} string getName() { return name;} };

5. A continuacin se presentan varias lneas de cdigo. Unas de ellas producen desperdicio de memoria y otras no. Indique cules producen desperdicio y por qu. a. int *P = new int[20]; delete P; b. int *P = new int[50]; P = new int[50]; delete [] P; c. int *P = new int[30]; delete [] P; 6. Separe la siguiente clase en dos partes, una que corresponda a la declaracin (.h) y otra para la definicin (.cpp). En el cuaderno de examen escriba claramente identificado lo que corresponde a cada archivo (Ejemplo: Esto es el .h y luego pone el cdigo y Esto es el .cpp y el cdigo). class Pais{ private: string nombre; int poblacion; string presidente; public: Pais(string n, int pob, string pre) : nombre(n), poblacion(pob), presidente(pre) {} int getPob() { return poblacion;} void setPob(int p) {poblacion = p;} void setPre(string p) { president = p;} string getNombre() { return nombre;} }; 7. Escriba el comando necesario para declarar un puntero de enteros y asignarle un nuevo objeto de tipo entero (usando memoria dinmica). Adems, escriba el comando para asignarle un valor al nuevo objeto y otro para imprimir el valor que contiene (usando cout). 8. Haga una funcin de tipo plantilla, llamada llena_arreglo. La funcin recibir dos parmetros de tipo plantilla. Internamente, la funcin crear un arreglo de 6 posiciones de tipo plantilla usando memoria dinmica. Para esto crear un puntero que guarde la direccin inicial del arreglo. El programa ir recorriendo el arreglo (por medio del puntero usando aritmtica de punteros) y a las posiciones pares (0, 2 y 4) les asignar el primer parmetro y a las impares el segundo parmetro recibido en la funcin. Finalmente, implemente manejo de excepciones en esta funcin, para logic_error y para los dos tipos genricos de excepciones, segn lo visto en clase. Desglose: a. b. c. d. Encabezado de plantilla Creacin del arreglo Lgica llenado del arreglo (aritmtica) Manejo de excepciones 5% 10% 10% 5%

9. Escriba una funcin (de tipo plantilla) llamada funcion1. Esta funcin recibir 3 parmetros, el primero ser un puntero a elementos de tipo plantilla, el segundo parmetro es un elemento independiente tambin de tipo plantilla y el tercer parmetro es un entero que indica el tamao del arreglo al que apunta el puntero (el primer parmetro apunta a un arreglo que fue creado fuera de la funcin y que tiene tamao n). La idea es que tome el segundo parmetro y cuente cuntas veces aparece ese elemento en el arreglo al que apunta el puntero. No se preocupe por el arreglo, porque p ya tiene la direccin del primer elemento. Usted lo que debe hacer es recorrer el arreglo usando aritmtica de apuntadores para determinar cuntas veces existe el segundo parmetro dentro del arreglo. No necesita definir el arreglo en su funcin, porque el puntero sealar inicialmente al mismo en forma indirecta. Al final, la funcin retornar un entero indicando cuntas veces se encontr ese elemento en el arreglo. Desglose: a. Funcin en formato plantilla y parmetros b. Recorrido del arreglo con aritmtica de apuntadores c. Clculo de las apariciones del elemento d. Impresin de resultado 5% 5% 5% 5%

10. Tenemos un sistema con una clase padre llamada Animal, que tiene como atributos el nombre (string), la edad (int) y la raza (string). Esta clase tiene un constructor para inicializar los tres atributos a partir de sendos parmetros. Adems, tendr un mtodo llamado setRaza que recibir un parmetro para modificar el valor del atributo raza. Finalmente, tendr un mtodo polimrfico llamado Edad_Humana, que retornar la edad del animal, pero en su equivalente humana (Por ejemplo, dicen que cada ao de un perro equivale a 7 aos humanos y que cada ao de un gato equivale a 10 humanos). Tambin tenemos dos clases hijas de Animal: Gato y Perro. Para la clase Perro tendremos solamente el constructor y el mtodo polimrfico, que retornar la edad (multiplica el valor del atributo edad por 7). Para la clase Gato tendremos un atributo extra (int) llamado vidas, que indica la cantidad de vidas que todava tiene cada gato. Tendremos un mtodo llamado setVidas, que recibir un parmetro int para modificar el valor del atributo vidas. Finalmente, esta clase Gato tendr el constructor para inicializar todos los atributos y el mtodo polimrfico (en este caso, retornar la edad multiplicada por 10). Desglose: a. Declaracin de las clases y atributos b. Herencia c. Constructores d. Mtodo Edad_Humana (polimrfico) e. Otros mtodos 5% 5% 10% 10% 10%

También podría gustarte