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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Suma de angulos. Typedef
« 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.


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.647

🏴 Libertad!!!!!


Ver Perfil WWW
Re: Suma de angulos. Typedef
« Respuesta #1 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


« Última modificación: 31 Agosto 2016, 20:32 pm por AlbertoBSD » En línea

Publickey: 03b8b1bf1830c8d407870001ec0e7badb7a6632255fb0051284b14f53791bd6087
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Suma de angulos. Typedef
« Respuesta #2 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
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.647

🏴 Libertad!!!!!


Ver Perfil WWW
Re: Suma de angulos. Typedef
« Respuesta #3 en: 31 Agosto 2016, 20:31 pm »

Edite mi post anterior te falta agregar (int)en el cout
En línea

Publickey: 03b8b1bf1830c8d407870001ec0e7badb7a6632255fb0051284b14f53791bd6087
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Suma de angulos. Typedef
« Respuesta #4 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...
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.647

🏴 Libertad!!!!!


Ver Perfil WWW
Re: Suma de angulos. Typedef
« Respuesta #5 en: 31 Agosto 2016, 20:39 pm »

Por que no usas printf??

Código
  1. printf("Grados %i ...",variable);
En línea

Publickey: 03b8b1bf1830c8d407870001ec0e7badb7a6632255fb0051284b14f53791bd6087
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW
Bob1098

Desconectado Desconectado

Mensajes: 87


Ver Perfil
Re: Suma de angulos. Typedef
« Respuesta #6 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
« Última modificación: 31 Agosto 2016, 20:45 pm por Bob1098 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Graficacion en C#, Como se obtiene la distancia y los angulos de una imagen
.NET (C#, VB.NET, ASP)
warrio666999 1 5,481 Último mensaje 3 Octubre 2008, 14:07 pm
por KJD
[C]Duda, typedef.
Programación C/C++
Binary_Death 2 2,247 Último mensaje 15 Agosto 2010, 07:42 am
por Binary_Death
Duda sobre el typedef en las clases
Programación C/C++
class_OpenGL 7 2,670 Último mensaje 21 Abril 2016, 08:38 am
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines