I. Objetos y Clases. Programación avanzada 2004

Programación avanzada – 2004 I. Objetos y Clases 1. Considere un problema en el cual se deban realizar cálculos sobre figuras geométricas planas simp
Author:  Diego Ruiz Ortiz

8 downloads 88 Views 140KB Size

Recommend Stories


Modulo 11. Clases y Objetos en Java
El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, “Introduction to Programming 1”, no pretende en ningún mome

Tema: Clases y Objetos en C++. Parte II
Programación II. Guía 4 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C++. Parte II. Objetivos

Clases y Objetos en Python. Introducción a la Computación Clase 23 Patricia Borensztejn
Clases y Objetos en Python Introducción a la Computación Clase 23 Patricia Borensztejn Tipos en Python • Ya vimos que tenemos un conjunto importante

Story Transcript

Programación avanzada – 2004

I. Objetos y Clases 1. Considere un problema en el cual se deban realizar cálculos sobre figuras geométricas planas simples, tales como rectángulos. Escriba una clase (cRect) que contenga los siguientes miembros: privados: - lado mayor (lama) y lado menor (lame): reales. públicos: - un constructor void, tal que inicialice los lados en cero. - un constructor que reciba los valores de los dos lados del rectángulo. - un constructor que reciba un cRect y lo clone en uno nuevo. - [mod_lados] un método que modifique ambos lados. - [mod_lmenor] un método que modifique el lado menor. - [mod_lmayor] un método que modifique el lado mayor. - [perimetro] un método que evalúe el perímetro de rectángulo. - [area] un método que evalúe el área del rectángulo. - [muestra] un método que muestra los lados mayor y menor. 2. Suponga que le piden realizar operaciones aritméticas exactas entre fracciones enteras, para lo cual Ud. debe construir una clase que lo permita. Diseñe y escriba una clase (cFrac) tal que oculte los enteros (p, q) que definen la fracción y habilite al usuario realizar las siguientes operaciones en otras clases y en la funciones main en programas: - que el constructor void defina la fraccion (0,1). - un constructor que reciba dos valores enteros a y b y los copie a p y q. - un constructor de copia que reciba como argumento un cFrac. - [suma(cFrac) ] un método que sume otra fracción. - [resta(cFrac) ] un método que reste otra fracción. - [multiplica(cFrac) ] un método que multiplique por otra fracción. - [cociente(cFrac) ] un método que divida entre otra fracción. (Los cuatro métodos anteriores deben regresar una cFrac) - [mayor(cFrac) ] un método que indica si la fracción es mayor que otra. - [menor(cFrac) ] un método que indica si la fracción es menor que otra. - [igual(cFrac) ] un método que indica si la fracción es igual a otra. - [escribe(const char *let) ] escribe la fracción en el formato “p/q” antecedida del letrero ‘let = ‘. Donde let es la cadena de entrada al método escribe. En caso de llamarse al método sin parámetros debe usar como parámetro por default ‘F = ’. Las fracciones siempre deben presentarse y manejarse simplificadas, es decir si existen factores enteros comunes entre el numerador y denominador deben ser eliminados, de tal forma que la fracción se maneje en su forma más simple. Por ejemplo, si se define cFrac(12,18 ), entonces a nivel interno p = 2 , q = 3, ya que 12/18 = (6*2)/(6*3) = 2/3. El método de simplificación debe estar encapsulado en la clase como privado y debe llamarse luego de usar el segundo constructor propuesto y después de cada operación entre fracciones.

1

Programación avanzada – 2004 Escriba una aplicación usando fracciones de la clase cFrac que permita resolver un sistema de dos ecuaciones lineales cuyos coeficientes sean fracciones y dé el resultado para cada incógnita sin aproximaciones. 3. Piense que Ud. trabaja en una empresa donde se hace software para paneles con letreros luminosos de matriz de LED’s. Y se desea presentar en el panel la hora y algunas operaciones horarias, como son: suma, resta, compara (menor → -1, igual → 0, mayor → 1 ) y una bandera de carry en caso que haya un exceso o déficit de un día. Es decir, no podrá haber horas negativas, ni valores de hh mayores a 23. Con este fin se le pide a Ud. diseñe una clase que tome la hora del reloj de una computadora y la separe de la manera tradicional hh:mm:ss. (hh = 0 … 23, mm = 0 … 59, ss = 0 … 59) Escriba una clase que permita manejar datos de tipo hora (cHora). De tal manera que los elementos hh, mm y ss se oculten a los consumidores de la clase. Diseñe constructores y métodos adecuados al problema. Suponga que existe un función llamada NOW(), que regresa la hora del reloj en el formato HHMMSS en forma de cadena. Donde cada elemento se da con dos caracteres toda vez que la función se llama, así por ejemplo si NOW() se llama a las 8 horas con 9 minutos y 3 segundos la cadena que envía la función es: 080903. Construya la función NOW() a partir de la función clock() que incluye la biblioteca time descrita en el header time.h de C estándar. 4. Un aficionado a la criptografía que está acostumbrado a usar bibliotecas de clases quiere implementar una aplicación que cifre textos usando la tabla ASCII restringida (0…127, es decir solo se usarán caracteres y símbolos cuyos códigos se encuentran en éste intervalo). El problema es que el aficionado no sabe escribir una clase, por lo tanto lo contrata a Ud. a cambio de una retribución. Las reglas que el usuario pide para el cifrado son las siguientes, dado un texto escrito con símbolos de la tabla ASCII restringida compuesto por N caracteres, debe implementarse una clase que permita instanciar objetos tales que: • lea el texto desde un archivo en algún medio auxiliar de almacenamiento. [lee_archi(nom_archivo)]. • cifra el texto. [cifra()]. • descifra el texto [descifra()]. • salva el texto a un archivo [salva_cifrado(nom_archivo)]. • muestra el texto cifrado en pantalla [muestra_cif()]. • muestra el texto descifrado en pantalla [muestra_des()]. El método de cifrado que el usuario pide se implemente es el siguiente: Dado el texto original (texto claro) de longitud N: - Los 3 primeros caracteres del archivo cifrado (a, b, c) son tales que

2

Programación avanzada – 2004

-

-

N = a*b+c, donde a, b no son nulos. El cuarto carácter del archivo cifrado es el primero (x1) del texto claro. El carácter siguiente del archivo cifrado tiene el valor o z = ((xk+d) % 128) o con d = (rand() % 128), previo llamado a srand(xk-1), o donde xk corresponde al k-ésimo carácter del texto claro. El paso anterior se aplica al resto del texto claro. Se introducen (N % xn) caracteres al azar al final del archivo.

Finalmente, se le pide que construya Ud. el método de descifrado a partir del método de cifrado propuesto y la estructura del archivo de salida especificada. Use instancias de las clases ifstram y ofstream para la entrada y salida de los archivos. 5. Escriba una clase que contenga como miembros privados una tercia de números enteros no negativos, los cuales representan un ángulo (cAngulo) en grados sexagesimales (0:0:0 – 359:59:59), la tercia puede ser de la forma (g, m, s), correspondientes su valor en grados, minutos y segundos, donde g = 0 … 359, m = 0 …59, s = 0 … 59. Implemente métodos que permitan ejecutar las siguientes acciones: -

Crear un objeto con los parámetros (gg, mm , ss). Con valores por omisión (0, 0, 0). Sumar dos ángulos. Restar dos ángulos. Multiplicar un ángulo por un número real [0,1]. Dividir un ángulo entre un entero [2, 30]. Incrementa un segundo. Decrementa un segundo. Incrementa un minuto. Decrementa un minuto. Incrementa un grado. Decrementa un grado. Escribe ángulo actual a pantalla

Recuerde que en todos los casos el dato interno para la tercia (g, m, s) debe mantenerse en los rangos correctos, es decir: (0, 10, 50) + (2, 30, 32) = (2, 41, 12) (3, 22, 33) + (4, 44, 30) = (8, 7, 3) En caso que una suma exceda el límite superior, entonces se reinicia la numeración en cero respetando el remanente, es decir:

3

Programación avanzada – 2004 (340, 10, 20) + (40, 30, 30) = (20, 40, 50) En el caso de la resta, el producto y la división debe utilizarse una lógica similar. Escriba una interfase que permita probar y verificar el funcionamiento de los métodos de la clase cAngulo, para diferentes valores de los ángulos, valor del real para la multiplicación y del entero para la división. 6. Escriba una clase que permita hacer gráficos simples en pantalla, usando el modo texto y la regla de escalamiento. La clase debe poder leer los datos de un archivo de texto, el archivo contendrá los valores de las ordenadas de una función o tabla de datos con diferencia de abscisas uniforme. Organice Ud. clase según mejor le parezca. El máximo de datos a leerse será de 100 y éstos serán en general números reales. La gráfica deberá utilizar las columnas de la pantalla como coordenada Y y los renglones como coordenada X. Esta salida debe poderse enviar a un archivo de texto. El máximo de la función se deberá alinear a la orilla derecha de la pantalla y el mínimo con la izquierda. Los métodos sugeridos son: -

leer_datos (nom_arch) mostrar_grafica(); salvar_grafica(nom_arch) define_char_de pintado(char)

Implemente un programa que muestre el funcionamiento de su clase con varias funciones, para esto escriba un programa auxiliar que evalúe una función y envíe sus valores a un archivo de texto, un dato por renglón. 7. Escriba una clase llamada cTimer que implemente una espera de K segundos a partir de la función clock() de C. Los miembros mínimos de esta clase deben ser: - [privado] int tiempo_espera - define_espera (int n) // donde n esta en segundos y n > 0. - espera() // realiza una espera de tiempo_espera Para construir el método espera(), considera usar un while que termina cuando el reloj del sistema ha avanzado tiempo_espera segundos luego de registrar la hora corriente. Luego escribe una clase (cRect) que defina un rectángulo (perimetral, no sólido) de lados A, B (Altura y Base), con vértice izquierdo superior ubicado en la coordenada (x, y) de una matriz de 80x24 caracteres LIENZO[79][24], donde la esquina izquierda inferior de la matriz corresponde a la coordenada (1,1) del plano. Con la siguiente estructura 4

Programación avanzada – 2004

cRect Private: int A, B; public: cRect(int alt, int bas, int px, int py, char w) pinta() modif_d(int new_alt, int new_bas) modif_v(int new_px, int new_py) modif_p(char new_w) Luego escribe una clase llamada cEspacio que contiene a la matriz LIENZO antes descrita con la siguiente estructura cEspacio Private: char LIENZO[79][24]; public: limpia() // llena de espacios LIENZO muestra() // presenta en pantalla LIENZO Finalmente escribe los siguientes programas: {g_uno} Este debe permitir leer los datos de un rectángulo de manera interactiva mediante un menú y luego lo puede mostrar en pantalla. Use dos objetos: un cRect y un cEspacio. {g_dos} Este debe definir un arreglo de hasta 10 objetos de tipo cRect y con un objeto cEspacio poder mostrarlos en pantalla. El menú debe contener las opciones mínimas para: agregar un rectángulo, eliminar un rectángulo, mostrar LIENZO y limpiar LIENZO. {g_tres} Este debe permitir leer un cRect, un tespera para un cTimer, un entero N (número de pasos) en el intervalo [5, 10], una dirección de movimiento de tipo char con algún valor en la lista {‘n’,’e’,’s’,’o’} y mediante un cEspacio: crear un efecto de animación moviento el cRect en la dirección de movimiento indicada el número de pasos dado, donde entre escena y escena habrá un tiempo tespera en segundos. {g_cuatro} Repita el ejercicio anterior con una nueva de opción: que se puedan definir 3 cRect y 3 direcciones de movimiento (cada una asociada a un cRect). 8. Escriba una clase madre (cArtista) para modelar la obra musical de un artista mediante una tupla con los siguientes datos: -

nombre_artista genero

Implemente los métodos

5

Programación avanzada – 2004 -

constructor(un_nom_art, un_gen) modif_gen(new_gen) modif_nom_art(new_na) muestra() // muestra nombre del artista y genero.

Luego extiende esta clase a dos nuevas clases hijas de ella, las cuales deben contener: cArtista_Clasico private: int siglo char pais[] public: constructor(un_nom, un_gen, un_siglo, un_pais) modif_siglo(int) modif_pais(char *) muestra()

cArtista_Moderno private: char banda[] int num_discos_editados public: constructor(un_nom, un_gen, una_banda, un_pais) modif_banda(char *) modif_num_dis_ed(int) muestra() Utiliza los constructores de la clase madre para crear los constructores de las clases derivadas. Aprovecha el método muestra de la clase base para escribir los métodos muestra de cada clase derivada. Escribe un programa que permita: -

Leer un archivo de Artistas Clásicos y otro de Artistas Modernos y los pase a arreglos (de hasta 100 elementos). Mostrar la lista de Artistas Clásicos en orden alfabético Mostrar la lista de Artistas Modernos en orden alfabético Mostrar la lista de todos los Artistas en orden alfabético Mostrar la lista de Artistas Clásicos ordenados por siglo Mostrar la lista de Artistas Modernos ordenados por banda Modificar algún datos de un Artista Clásico Modificar algún datos de un Artista Moderno Agregar un Artista Clásico Agregar un Artista Moderno

6

Programación avanzada – 2004 -

Salvar los Cambios realizados a los archivos de origen.

9. Un astrónomo luego de entender que los números enteros tienen un tamaño máximo dependiendo del número de bits que se utilicen para representarlos, ha decidido darle una beca a Ud. para escriba una clase que maneje números enteros “astronómicos”, es decir números decimales mucho muy grandes. Para esto el astrónomo ha concluido que debe manejar cantidades decimales enteras de hasta 30 dígitos y requiere de métodos solo para sumar y multiplicar. Es claro que luego de hacer una multiplicación entre dos números de este tamaño, el resultado podría alcanzar hasta 60 dígitos. Implemente una clase (cGranint) que permita hacer las operaciones solicitadas. Utilice las tablas de suma y multiplicación manuales y una representación de cadenas para los números. Escriba un programa de ejemplo para demostrar que su clase opera correctamente y en consecuencia el astrónomo le pague la beca que la ha prometido. 10. Escriba una clase con un método sobrecargado que permita realizar sumas de objetos heterogéneos y en todos los casos el método regrese un número real (float). Diseñe Ud. los detalles de la clase según convenga Los parámetros que debe aceptar el método suma_todo (p1, p2) podrán ser: p1 int int int cadena

p2 int float cadena cadena

11. Diseñe una función sobrecargada que calcule el área de una figura cerrada de lados rectos, no degenerada (su área no es cero y dos de sus lados no se cruzan, solo se tocan a lo mas en un punto = “vértice”). En todos los casos los argumentos son de tipo float, excepto en el último Prototipo area(a,b) area( a, b, c) area( a, b, c, d) area(a, b, c, d, e) area(a, b, c, d, e) area(int n, float a)

Modela rectángulo (o cuadro) triángulo trapecio pentágono regular hexágono regular polígono regular de n lados y lado a

12. Escriba una clase que factorice un número entero positivo (0

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.