BigNum - Programación 3 - UFM - FISICC

2

Click here to load reader

description

Este proyecto consistió en el diseño en C++ de un módulo de manejo de enteros de precisión infinita, el cual permitir´pa expresar operaciones como: 123456789823642384234 + 2346891790891235 las cuales ningún lenguaje soporta nativamente hasta ahora. Aunque se especifica que es infinito, el límite máximo deberá ser de 1024 d´kigitos. El nombre BigNum fue tomado del New Hacker's Dictionary (MIT Press, 1991) el cual provee una nota histórica del nombre.

Transcript of BigNum - Programación 3 - UFM - FISICC

Page 1: BigNum - Programación 3 - UFM - FISICC

Universidad Francisco Marroquín F.I.S.I.C.C. Programación III 1er semestre 1992 Prof. : Egdares Futch H.

Proyecto #4 BigNum - paquete de manejo de enteros de precisión infinita

Motivación El lenguaje C++ permite crear fácilmente nuevos tipos de datos, que el usuario de éstos puede manipular naturalmente como si fueran parte del lenguaje. Uno de los problemas que se tienen en sistemas de computación es la precisión finita de los números que se manejan; por ejemplo, si se tiene una variable de tipo int, se limita al rango -32,768..32,767, y si se tiene una variable de tipo long, se limita al rango -4,294,967,296..4,294,967,295. En algunos casos, esto no es suficiente, por lo que se plantea como problema el diseño de números enteros de precisión infinita, y su manejo. Cuando se dice precisión infinita no quiere decir que sean números infinitos, sino que el usuario puede definir la precisión que se desea, la que usualmente será mayor que un long. Descripción Este proyecto está orientado a poner en práctica el lenguaje C++ en la construcción de clases que definen sus propias operaciones. BigNum, entonces, es un módulo de manejo de enteros de precisión infinita, el cual permitirá expresar operaciones como 123456789823642384234 + 2346891790891235, las cuales ningún lenguaje soporta hasta ahora. Aunque se especifica que es infinito, el límite máximo deberá ser de 1024 dígitos. El nombre BigNum fue tomado del New Hacker's Dictionary (MIT Press, 1991) el cual provee una nota histórica del nombre. El proyecto consiste entonces en diseñar una clase de C++ que permita el manejo de estos números, y permita hacer operaciones con ellos. Como existe el límite de 1024 dígitos como máximo, la clase BigNum deberá tener chequeo de overflow. Las operaciones disponibles deben ser : - suma (+,+=) - resta (-,-=) - multiplicación (*,*=) - división (/,/=) - incremento/decremento (++,--) - complemento (- unario) - output (salida a cout sobrecargada) Requerimientos El programa a entregar debe cumplir con los siguientes requerimientos : - Escrito en lenguaje C++ - No debe desperdiciar espacio y debe destruir su almacenamiento interno - Modular, capaz de ser utilizado en varios programas (hacer .h y .cpp) - Chequeo de errores (overflow, mal formato, etc.) - Programas de prueba, según lo descrito posteriormente.

Page 2: BigNum - Programación 3 - UFM - FISICC

Programas de prueba Para la entrega de este proyecto, se deberán entregar los siguientes programas de prueba: a) powerof2.cpp calcula el valor de 2^128 b) trek.cpp calcula la distancia recorrida, en metros, por el Enterprise a warp 9 (warp 9 = 1516c ) durante una temporada de Star Trek normal (20 episodios de 4 "días" de duración c/u) c) fib.cpp calcula el valor de fib(30) Fecha de entrega y documentación a entregar La fecha de entrega será el día jueves 9 de abril. NO habrán prórrogas de tiempo puesto que éstas atrasan el curso. La documentación a entregar consistirá en (no folders, no clips) : - Diskette con el proyecto (.CPP,.H, .OBJ y .EXE, 5.25" o 3.5" sin virus) - Carátula con nombre, carnet y nombre de proyecto - Descripción del proyecto (1 hoja máx.) - Funcionamiento del proyecto (1 hoja máx.) - Manual de uso del proyecto (lo necesario) - Descripción de rutinas y procedimientos usados - Comentarios de implementación (opcional, puede mejorar nota) - Listados de programa Hints Como un ejemplo de uso, podría tomarse el siguiente : main() { BigNum a("1231242342124124124124124"),b; b = a; // asignamos b++; // incremento en 1 b += a; // b = b + a cout << b; // imprimimos el contenido de b a *= 4567; // ojo a+=BigNum("29038401275230927345072309455273458923 cout << a; // este si es un BigNum return 0; // salimos }