Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Bob1098 en 31 Agosto 2016, 20:22 pm



Título: Suma de angulos. Typedef
Publicado por: Bob1098 en 31 Agosto 2016, 20:22 pm
Estoy implementando un tipo que almacene numeros entre 0 y 255, es decir de 1 byte de tamaño.

Para ello he escrito este codigo en un ejemplo con angulos, pero al ser realmente tipo char obtengo resultados como caracteres, y si hago un casting a int en el cout obtengo resultados numericos pero sin sentido:

Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. typedef char byte;
  7.  
  8. struct stAngulo {
  9. short grados;
  10. byte minutos;
  11. byte segundos;
  12. };
  13.  
  14. stAngulo operator+(stAngulo a1, stAngulo a2); // a1+a2
  15. stAngulo operator-(stAngulo a1, stAngulo a2); // a1-a2
  16.  
  17. int main(int argc, char *argv[]) {
  18. stAngulo angulo1 = { 23, 15, 20 }, angulo2 = { 2, 35, 29 };
  19. stAngulo suma = angulo1 + angulo2;
  20.  
  21. cout << "Grados: " << suma.grados << "\n\nMinutos: " << suma.minutos << "\n\nSegundos: " << suma.segundos << endl;
  22.  
  23. cin.get();
  24. return 0;
  25. }
  26.  
  27. stAngulo operator+ (stAngulo a1, stAngulo a2) {
  28. stAngulo temp = {
  29. a1.grados + a2.grados,
  30. a1.minutos + a2.minutos,
  31. a1.segundos + a2.segundos,
  32. };
  33.  
  34. do {
  35. ++temp.minutos;
  36. temp.segundos -= 60;
  37. } while (temp.segundos >= 60);
  38.  
  39. do {
  40. ++temp.grados;
  41. temp.minutos -= 60;
  42. } while (temp.minutos >= 60);
  43.  
  44. return temp;
  45. }
  46.  
  47. stAngulo operator-(stAngulo a1, stAngulo a2) {
  48. stAngulo temp = {
  49. a1.grados - a2.grados,
  50. a1.minutos - a2.minutos,
  51. a1.segundos - a2.segundos,
  52. };
  53.  
  54. do {
  55. --temp.minutos;
  56. temp.segundos = abs(temp.segundos);
  57. } while (temp.segundos <= 0);
  58.  
  59. do {
  60. --temp.grados;
  61. temp.minutos = abs(temp.minutos);
  62. } while (temp.minutos <= 0);
  63.  
  64. return temp;
  65. }
  66.  

Alguna manera de poder usar int de tamaño 1 byte? Es solo una cuestión de optimización de memoria.


Título: Re: Suma de angulos. Typedef
Publicado por: AlbertoBSD en 31 Agosto 2016, 20:26 pm
Código
  1. int8_t unbyte;

Código
  1. char unbyte;

Código
  1. unsigned char unbyte;

Código
  1. uint8_t unbyte;

En el caso de loa int8_t necesitas la biblioteca de funciones stdint

Tambien tengo que agregar que si quieres usar los char como enteroa tienes que anteponer (int)


Por eso me gusta mas

Código
  1. printf("%i",numero);
  2.  

es mas flexible

saludos


Título: Re: Suma de angulos. Typedef
Publicado por: Bob1098 en 31 Agosto 2016, 20:29 pm
Código
  1. int8_t unbyte;

Código
  1. char unbyte;

Código
  1. unsigned char unbyte;

Código
  1. unit8_t unbyte;

En el caso de loa int8_t necesitas la biblioteca de funciones stdint

Lo he probado, pero continua fallando, el programa sigue imprimiendo los bytes como caracteres D=. Es posible que sea del compilador? Utilizo el de visual studio 2015


Título: Re: Suma de angulos. Typedef
Publicado por: AlbertoBSD en 31 Agosto 2016, 20:31 pm
Edite mi post anterior te falta agregar (int)en el cout


Título: Re: Suma de angulos. Typedef
Publicado por: Bob1098 en 31 Agosto 2016, 20:33 pm
Edite mi post anterior te falta agregar (int)en el cout

Si, pero si agrego (int) se lia parda xD:

Sumando estos dos angulos:

Código
  1. stAngulo angulo1 = { 23, 15, 20 }, angulo2 = { 2, 35, 29 };

Obtengo como salida en consola:

Grados: 30

Minutos: 11

Segundos: 5

Lo cual no tiene mucho sentido...


Título: Re: Suma de angulos. Typedef
Publicado por: AlbertoBSD en 31 Agosto 2016, 20:39 pm
Por que no usas printf??

Código
  1. printf("Grados %i ...",variable);


Título: Re: Suma de angulos. Typedef
Publicado por: Bob1098 en 31 Agosto 2016, 20:41 pm
No tengo problema con printf, pero acostumbrado al cout pues es otra historia. Lo curioso es que con printf() tampoco funciona, debe de ser problema de mi código =S. Gracias por la ayuda  :D