Numeral.cpp

Ir a la documentación de este archivo.
00001 // Numeral.cpp (c) 2005 [email protected]
00002 
00003 /** \file  Numeral.cpp
00004     \brief Programa recursivo que obtiene los factores de un numero.
00005 
00006     \author Modificaciones por Cristopher Rojas Salas <[email protected]>
00007     \author Adolfo Di Mare <[email protected]>
00008     \date   2006
00009 */
00010 
00011 /* 
00012    Este programa usa el metodo recursivo numeral el cual recibe un entero largo para buscar
00013    sus divisores (factores del numero ej: 2*2*2=8) y mostrarlos en pantalla. Numeral utiliza un ciclo while para buscar el 
00014    primer divisor exacto del n actual y continua. El programa continua buscando divisores
00015    dividiendo el n actual por su divisor exacto para la siguiente busqueda 
00016 */
00017 
00018 
00019 #include <iostream>
00020 #include "ADH_port.h" // Biblioteca de compatibilidad BC++ v3.1 && MS C++
00021 
00022 using namespace std; // Usamos el namespace std que agrupa todas la entidades de la libreria standard c++
00023 
00024 /// Metodo recursivo que recibe un entero para obtener sus divisores
00025 void Numeral(long n) {
00026     long i = 1;/// entero largo utilizado como contador inicializado en 1
00027     bool esta = false;/// variable booleana que sirve como bandera en el ciclo de busqueda de divisores
00028         
00029         /* ciclo que busca el primer divisor exacto del entero largo n */
00030         while ( (!esta) &&  n>2) {//este ciclo busca un divisor exacto
00031                 //empezando desde 1 y aumentando uno a uno termina cuando lo encuentra
00032         ++i;//aumenta contador
00033         esta = (n % i == 0);//si el entero entrado es multiplo de i o sea al dividirse se obtiene residuo 0
00034                 //entonces el valor devuelto es true de lo contrario es false
00035     }
00036 
00037         if(n==2){//condicion para que no excluya al n = 2 en la division
00038                 esta = true;//excepcion
00039                 i=2;//ponemos el contador en dos para que la proxima entrada sea 
00040                 //dividida entre dos
00041         }
00042         
00043         /* condicion que muestra en pantalla el divisor exacto y continua la busqueda de
00044            mas divisores */
00045     if (esta) {//si lo encontro
00046         cout << i << endl;//muestra en pantalla el valor de i
00047         Numeral(n / i);//luego vuelve a llamarse a si mismo pero con el valor
00048                 // de la division del entero entre el i divisor
00049     }
00050 }
00051 
00052 /// metodo principal donde se prueba el metodo Numeral con varios valores
00053 int main() {
00054     int N;//prueba asignando diferentes valores al n
00055     N =   512; cout << "==>" << endl; Numeral(N);// muestra en pantalla "==>" y llama a Numeral con el valor N
00056     N = 10000; cout << "==>" << endl; Numeral(N);
00057     N =   420; cout << "==>" << endl; Numeral(N);
00058 
00059         system("PAUSE"); /// esta instruccion pausa el programa en este punto
00060     return 0;// salida correcta del programa
00061 }
00062 
00063 // EOF: Numeral.cpp
00064 

Generado el Mon Aug 28 18:18:51 2006 para Numeral por  doxygen 1.4.7
Hosted by www.Geocities.ws

1