ST202W - Lenguaje de Programacin Estructurado Prctica Calificada #4 (4 puntos) P1 - Unin de reas Desarrolle un programa que lea dos crculos (x1, y1, r1), (x2, y2, r2) y calcule el rea de la unin de ambos. Escriba todos sus clculos en el cuadernillo.
Input 1 005 12 0 10 Output 1 375.689282
Input 2 005 0 0 10 Output 2 314.159265
Input 3 005 20 0 10 Output 3 392.699082
(8 puntos) P2 - Nmeros Gigantes
En C++, ningn tipo de dato primitivo puede almacenar con precisin enteros de ms de 20 dgitos. Cuando se necesita trabajar con nmeros muy grandes, es comn representarlos internamente como cadenas e implementar funciones aritmticas (o utilizar algunas libreras especiales). Desarrolle un programa que permita hacer operaciones con nmeros gigantes. a. Defina una estructura que permita almacenar nmeros con una cantidad arbitraria de dgitos. Internamente utilice arreglos dinmicos, listas, pilas o colas para almacenar los dgitos. b. Implemente las siguientes funciones aritmticas y demuestre su uso en el programa principal. // Crear un NumeroGigante a partir de un numero de 64 bits NumeroGigante convertir(long long N); // Calcular la suma de dos NumeroGigante NumeroGigante sumar(NumeroGigante A, NumeroGigante B); // Calcular el producto de dos NumeroGigante NumeroGigante multiplicar(NumeroGigante A, NumeroGigante B); // Imprimir en pantalla un NumeroGigante void imprimir(NumeroGigante X);
UNIVERSIDAD NACIONAL DE INGENIERA
Facultad de Ingeniera Industrial y de Sistemas (4 puntos) P3 Nmeros Racionales Algunos nmeros racionales como 1/7, o 1/9, no pueden ser almacenados con precisin en tipos primitivos reales de C++. Cuando se desea trabajar con exactitud con nmeros racionales, es necesario implementar funciones manualmente o utilizar algunas libreras especiales. Desarrolle un programa que permita hacer operaciones con nmeros racionales cuyos numeradores y denominadores sean arbitrariamente grandes (nmeros gigantes). c. Defina una estructura que permita almacenar nmeros racionales, almacenando el numerador y denominador, ambos con una cantidad arbitraria de dgitos. Internamente utilice arreglos dinmicos, listas, pilas o colas para almacenar los dgitos. d. Implemente las siguientes funciones aritmticas y demuestre su uso en el programa principal. // Crear un NumeroRacional a partir dos numeros de 64 bits NumeroRacional convertir(long long numerador, long long denominador); // Crear un NumeroRacional a partir dos NumeroGigante NumeroRacional convertir(NumeroGigante numerador, denominador);
NumeroGigante
// Calcular la suma de dos NumeroRacional
NumeroRacional sumar(NumeroRacional A, NumeroRacional B); // Calcular el producto de dos NumeroRacional NumeroRacional multiplicar(NumeroRacional A, NumeroRacional B); // Imprimir en pantalla un NumeroRacional void imprimir(NumeroRacional X); (2 puntos) P4 - MCD Gigante (Bonus) Implemente el algoritmo de Euclides para nmeros gigantes (necesitar tambin implementar la operacin de sustraccin) y modifique el programa P3 para mantener fracciones irreductibles.