elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mi proyecto: BaseABase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi proyecto: BaseABase  (Leído 700 veces)
Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
Mi proyecto: BaseABase
« 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
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <cmath>
  7. using std::pow;
  8.  
  9. #include "BaseABase.h"
  10.  
  11.  
  12. int main()
  13. {
  14. //CREACION DEL OBJETO APLICACION
  15. BaseABase aplicacion;
  16.  
  17. //MENU
  18. int opcion=0;
  19. int numero;
  20. int base;
  21.  
  22. cout <<"Menu: Que tipo de numero desea convertir?\a" <<endl <<endl
  23. <<"1 - Binario" <<endl
  24. <<"2 - Decimal" <<endl
  25. <<endl <<endl <<"salir: -1" <<endl <<"opcion: ";
  26.  
  27. cin >> opcion;
  28.  
  29. while (opcion != -1)
  30. {
  31. switch (opcion)
  32. {
  33. ////BINARIO
  34. case 1:
  35. system("cls");
  36. cout <<"\aSeleccione la base: \n\n"
  37. <<"1 - Decimal" <<endl
  38. <<"2 - BCO" <<endl
  39. <<endl <<endl <<"Menu Principal: -1 " <<endl <<"opcion: ";
  40. cin >> base;
  41.  
  42. while ( base != -1)
  43. {
  44. system("cls");
  45.  
  46. switch (base)
  47. {
  48. case 1:
  49. cout <<"Numero: ";
  50. cin >> numero;
  51. aplicacion.convertirBinarioADecimal(numero);
  52. cout <<"convert: " <<aplicacion.obtenerDecimal() <<endl;
  53. base= -1;
  54. cin.get();
  55. cin.get();
  56. system("cls");
  57. break;
  58. case 2:
  59. system("cls");
  60. cout <<"Numero: ";
  61. cin >> numero;
  62. aplicacion.convertirBinarioABCO(numero);
  63. cout <<"convert: " <<aplicacion.obtenerBCO() <<endl;
  64. base= -1;
  65. cin.get();
  66. cin.get();
  67. system("cls");
  68. break;
  69. }
  70. }
  71. break;
  72.  
  73. // DECIMAL
  74. case 2:
  75. system("cls");
  76. cout <<"\aSeleccione la base: \n\n"
  77. <<"1 - Binario" <<endl
  78. <<endl <<endl <<"Menu Principal: -1 " <<endl <<"opcion: ";
  79. cin >> base;
  80.  
  81. while ( base != -1)
  82. {
  83. system("cls");
  84.  
  85. switch (base)
  86. {
  87. case 1:
  88. cout <<"Numeroa: ";
  89. cin >> numero;
  90. aplicacion.convertirDecimalABinario(numero);
  91. cout <<"convert: " <<aplicacion.obtenerBinario() <<endl;
  92. base= -1;
  93. cin.get();
  94. cin.get();
  95. system("cls");
  96. break;
  97. }
  98. }
  99. break;
  100. }
  101. // RESTAURACION DE VALORES!
  102. aplicacion.restaurarValores();
  103. system("cls");
  104. cout <<"Menu: Que tipo de numero desea convertir?\a" <<endl <<endl
  105. <<"1 - Binario" <<endl
  106. <<"2 - Decimal" <<endl
  107. <<endl <<endl <<"salir: -1" <<endl <<"opcion: ";
  108. cin >> opcion;
  109. }
  110. cin.get();
  111. cin.get();
  112. return 0;
  113. }
BaseABase.h
Código
  1. /*
  2.  
  3. ATENCION: luego de usar las funciones obtener se debe ejecutar la funcion restaurarValores!
  4.  
  5. */
  6.  
  7. #include <string>
  8. using std::string;
  9.  
  10. class BaseABase
  11. {
  12. public:
  13. //Constructor
  14. BaseABase();
  15.  
  16. //funciones convertir
  17. void convertirBinarioADecimal(int);
  18. void convertirDecimalABinario(int);
  19. void convertirBinarioABCO(int);
  20.  
  21. //funciones obtener
  22. long int obtenerBinario();
  23. long int obtenerDecimal();
  24. string obtenerBCO();
  25.  
  26. //funciones restaurar
  27. void restaurarValores();
  28.  
  29. private:
  30. long int binario;
  31. long int decimal;
  32. string BCO;
  33. };
BaseABase.cpp
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::endl;
  4. using std::cout;
  5.  
  6. #include <cmath>
  7. using std::pow;
  8.  
  9. #include "BaseABase.h"
  10.  
  11. BaseABase::BaseABase()
  12. {
  13. restaurarValores();
  14. }
  15.  
  16. //Funciones convertir
  17.  
  18. void BaseABase::convertirBinarioADecimal(int numero)
  19. {
  20. long int auxBinario;
  21. int resto;
  22.  
  23. binario= numero;
  24. auxBinario= numero;
  25.  
  26. for (int contador=0; pow(10.,contador) <= binario; contador++)
  27. {
  28. resto= auxBinario % 10;
  29. auxBinario/= 10;
  30.  
  31. switch (resto)
  32. {
  33. case 0:
  34. decimal+= (resto * pow(2.0,contador));
  35. break;
  36.  
  37. case 1:
  38. decimal+= (resto * pow(2.0,contador));
  39. break;
  40. }
  41.  
  42. }
  43.  
  44. } //FIN FUNCION CONVERTIR BINARIO A DECIMAL
  45.  
  46. void BaseABase::convertirDecimalABinario(int numero)
  47. {
  48. int restoDivision=0;
  49. int unidadDivision=0;
  50. int iteracionBinaria=0;
  51.  
  52. unidadDivision= numero;
  53.  
  54.  
  55. while (unidadDivision > 0)
  56. {
  57. restoDivision= unidadDivision % 2;
  58. unidadDivision= unidadDivision / 2;
  59.  
  60. binario+= restoDivision * pow (10.,iteracionBinaria);
  61.  
  62. ++iteracionBinaria;
  63.  
  64. if (numero == 2)
  65. {
  66. binario+= unidadDivision * pow (10.,iteracionBinaria);
  67. }
  68.  
  69. }
  70. }
  71.  
  72. void BaseABase::convertirBinarioABCO(int numero)
  73. {
  74. convertirBinarioADecimal(numero);
  75.  
  76. int digitos= 1;
  77. int digito;
  78. int auxNumero= decimal;
  79.  
  80. while ((auxNumero / 10) != 0)
  81. {
  82. auxNumero/= 10;
  83. digitos++;
  84. }
  85.  
  86. int divisor= pow(10.,digitos-1);
  87.  
  88.  
  89. for (int i=1; i <= digitos;i++)
  90. {
  91. digito= decimal / divisor;
  92. decimal%= divisor;
  93.  
  94. switch (digito)
  95. {
  96. case 0: BCO+= " 000";
  97. break;
  98. case 1: BCO+= " 001";
  99. break;
  100. case 2: BCO+= " 010";
  101. break;
  102. case 3: BCO+= " 011";
  103. break;
  104. case 4: BCO+= " 100";
  105. break;
  106. case 5: BCO+= " 101";
  107. break;
  108. case 6: BCO+= " 110";
  109. break;
  110. case 7: BCO+= " 111";
  111. break;
  112. }
  113.  
  114.  
  115. divisor/= 10;
  116. }
  117. }
  118.  
  119. //funciones obtener
  120. long int BaseABase::obtenerBinario()
  121. {
  122. return binario;
  123. }
  124.  
  125. long int BaseABase::obtenerDecimal()
  126. {
  127. return decimal;
  128. }
  129. string BaseABase::obtenerBCO()
  130. {
  131. return BCO;
  132. }
  133.  
  134. //funciones restaurar
  135. void BaseABase::restaurarValores()
  136. {
  137. binario= 0;
  138. decimal= 0;
  139. BCO= " ";
  140. }


« Última modificación: 22 Mayo 2015, 21:01 pm por Mario Olivera » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: Mi proyecto: BaseABase
« Respuesta #1 en: 22 Mayo 2015, 17:40 pm »

En vez de una clase, sería más comodo hacer solo una función:
Código
  1. 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]


En línea

Mario Olivera

Desconectado Desconectado

Mensajes: 108


Ser loco es pensar diferente.


Ver Perfil
Re: Mi proyecto: BaseABase
« Respuesta #2 en: 22 Mayo 2015, 21:01 pm »

En vez de una clase, sería más comodo hacer solo una función:
Código
  1. 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
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: Mi proyecto: BaseABase
« Respuesta #3 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).
« Última modificación: 23 Mayo 2015, 15:01 pm por ivancea96 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PROYECTO
Diseño Gráfico
kåhjî£ 1 1,468 Último mensaje 30 Julio 2004, 08:00 am
por Morris
Proyecto php « 1 2 ... 11 12 »
Sugerencias y dudas sobre el Foro
programatrix 111 14,624 Último mensaje 18 Septiembre 2005, 12:27 pm
por programatrix
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines