Título: Mi proyecto: BaseABase
Publicado por: Mario Olivera en 22 Mayo 2015, 07:04 am
Hola gente, estoy trabajando en un proyecto al cual lo he llamado BaseABase, tiene que pasar bases a cualquier base o sistema, les dejo un adelanto, y me gustaría si alguien pudiera decirme que cambiaria con el tema de el .h y el otro .cpp osea, de la separacion de la interfaz de la implementacion, o si acaso voy bien por el momento. Les dejo el código, Espero respuestas Saludos! :D PD: por ahora solo maneja de binario a decimal, de binario a BCO y de decimal a binario main.cpp#include <iostream> using std::cin; using std::cout; using std::endl; #include <cmath> using std::pow; #include "BaseABase.h" int main() { //CREACION DEL OBJETO APLICACION BaseABase aplicacion; //MENU int opcion=0; int numero; int base; cout <<"Menu: Que tipo de numero desea convertir?\a" <<endl <<endl <<"1 - Binario" <<endl <<"2 - Decimal" <<endl <<endl <<endl <<"salir: -1" <<endl <<"opcion: "; cin >> opcion; while (opcion != -1) { switch (opcion) { ////BINARIO case 1: system("cls"); cout <<"\aSeleccione la base: \n\n" <<"1 - Decimal" <<endl <<"2 - BCO" <<endl <<endl <<endl <<"Menu Principal: -1 " <<endl <<"opcion: "; cin >> base; while ( base != -1) { system("cls"); switch (base) { case 1: cout <<"Numero: "; cin >> numero; aplicacion.convertirBinarioADecimal(numero); cout <<"convert: " <<aplicacion.obtenerDecimal() <<endl; base= -1; cin.get(); cin.get(); system("cls"); break; case 2: system("cls"); cout <<"Numero: "; cin >> numero; aplicacion.convertirBinarioABCO(numero); cout <<"convert: " <<aplicacion.obtenerBCO() <<endl; base= -1; cin.get(); cin.get(); system("cls"); break; } } break; // DECIMAL case 2: system("cls"); cout <<"\aSeleccione la base: \n\n" <<"1 - Binario" <<endl <<endl <<endl <<"Menu Principal: -1 " <<endl <<"opcion: "; cin >> base; while ( base != -1) { system("cls"); switch (base) { case 1: cout <<"Numeroa: "; cin >> numero; aplicacion.convertirDecimalABinario(numero); cout <<"convert: " <<aplicacion.obtenerBinario() <<endl; base= -1; cin.get(); cin.get(); system("cls"); break; } } break; } // RESTAURACION DE VALORES! aplicacion.restaurarValores(); system("cls"); cout <<"Menu: Que tipo de numero desea convertir?\a" <<endl <<endl <<"1 - Binario" <<endl <<"2 - Decimal" <<endl <<endl <<endl <<"salir: -1" <<endl <<"opcion: "; cin >> opcion; } cin.get(); cin.get(); return 0; }
BaseABase.h/* ATENCION: luego de usar las funciones obtener se debe ejecutar la funcion restaurarValores! */ #include <string> using std::string; class BaseABase { public: //Constructor BaseABase(); //funciones convertir void convertirBinarioADecimal(int); void convertirDecimalABinario(int); void convertirBinarioABCO(int); //funciones obtener long int obtenerBinario(); long int obtenerDecimal(); string obtenerBCO(); //funciones restaurar void restaurarValores(); private: long int binario; long int decimal; string BCO; };
BaseABase.cpp#include <iostream> using std::cin; using std::endl; using std::cout; #include <cmath> using std::pow; #include "BaseABase.h" BaseABase::BaseABase() { restaurarValores(); } //Funciones convertir void BaseABase::convertirBinarioADecimal(int numero) { long int auxBinario; int resto; binario= numero; auxBinario= numero; for (int contador=0; pow(10.,contador) <= binario; contador++) { resto= auxBinario % 10; auxBinario/= 10; switch (resto) { case 0: decimal+= (resto * pow(2.0,contador)); break; case 1: decimal+= (resto * pow(2.0,contador)); break; } } } //FIN FUNCION CONVERTIR BINARIO A DECIMAL void BaseABase::convertirDecimalABinario(int numero) { int restoDivision=0; int unidadDivision=0; int iteracionBinaria=0; unidadDivision= numero; while (unidadDivision > 0) { restoDivision= unidadDivision % 2; unidadDivision= unidadDivision / 2; binario+= restoDivision * pow (10.,iteracionBinaria); ++iteracionBinaria; if (numero == 2) { binario+= unidadDivision * pow (10.,iteracionBinaria); } } } void BaseABase::convertirBinarioABCO(int numero) { convertirBinarioADecimal(numero); int digitos= 1; int digito; int auxNumero= decimal; while ((auxNumero / 10) != 0) { auxNumero/= 10; digitos++; } int divisor= pow(10.,digitos-1); for (int i=1; i <= digitos;i++) { digito= decimal / divisor; decimal%= divisor; switch (digito) { case 0: BCO+= " 000"; break; case 1: BCO+= " 001"; break; case 2: BCO+= " 010"; break; case 3: BCO+= " 011"; break; case 4: BCO+= " 100"; break; case 5: BCO+= " 101"; break; case 6: BCO+= " 110"; break; case 7: BCO+= " 111"; break; } divisor/= 10; } } //funciones obtener long int BaseABase::obtenerBinario() { return binario; } long int BaseABase::obtenerDecimal() { return decimal; } string BaseABase::obtenerBCO() { return BCO; } //funciones restaurar void BaseABase::restaurarValores() { binario= 0; decimal= 0; BCO= " "; }
Título: Re: Mi proyecto: BaseABase
Publicado por: ivancea96 en 22 Mayo 2015, 17:40 pm
En vez de una clase, sería más comodo hacer solo una función: bool toBase(string in, uint8_t initialBase, string &out, uint8_t finalBase);
Luego basta tirar false si alguna base se sale del rango [2,36]
Título: Re: Mi proyecto: BaseABase
Publicado por: Mario Olivera en 22 Mayo 2015, 21:01 pm
En vez de una clase, sería más comodo hacer solo una función: bool toBase(string in, uint8_t initialBase, string &out, uint8_t finalBase);
Luego basta tirar false si alguna base se sale del rango [2,36] Hola ivancea96, si bien podria usar una función, no es mejor como lo estoy haciendo? el dia de mañana cuando necesite pasar un binario a por ejemplo octal solamente me fijo el nombre de la funcion miembro inserto el .h y la llamo? aparte de ser mas descriptiva, solo hago uso de las funciones que quiero y no todas juntas, pues asi lo tengo entendido yo, quizas lo haya entendido mal :S Encontré un pequeño error en la funcion: convertirBinarioABCO(int), que al tratarse de un numero por ejemplo 20, que se transformaba en 02, osea 2, el cero ni aparecia, con lo cual arregle eso y al arreglarlo se eliminó la función long int darVueltaNumero() :D
Título: Re: Mi proyecto: BaseABase
Publicado por: ivancea96 en 23 Mayo 2015, 12:56 pm
Tras hacer la función, puedes hacer funciones con el nombre que quieras que hagan de 'puente'. En esas funciones, llamarías a cualquier combinación de bases que quisieras. Así, tienes lo mismo, y un extra de funcionalidad gracias a la función base. el dia de mañana cuando necesite pasar un binario a por ejemplo octal solamente me fijo el nombre de la funcion y la llamo
El día de mañana, cuando quieras pasar de una base a otra, piensas "de base 2, a base 8". Y lo escribes xD Es más, el día de mañana, cuando quieras pasar de cualquier base a cualquier base (pidiendo la base al usuario, por ejemplo), tan solo endrás que pasarle la entrada del usuario a la función, en vez de tener que hacer un arreglo de arreglos de funciones (por ejemplo).
|