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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Temas
Páginas: [1] 2 3
1  Programación / Programación C/C++ / 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.
2  Programación / Programación C/C++ / Duda sobre sobrecarga y compilador en: 31 Agosto 2016, 19:49 pm
Tenía una dudilla sobre que es más rápido y/o fácil para el compilador.

Si tengo una función que opere con unos datos de entrada (una suma por ejemplo), es mejor sobrecargar los distintos tipos (int, float, double...) o dejar que el compilador los convierta por si solo?. Según creo es mejor hacer una sola función con float o double que es más "generico".

Gracias de antemano.
3  Programación / Programación C/C++ / Problema linker VS (C++ y SDL) en: 13 Agosto 2016, 16:47 pm
Hola a todos. Resulta que estaba instalando las librerias de SDL2 en Visual Studio 2015 y tuve un error del linker:

Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado de supresión
Error   LNK2019   símbolo externo _SDL_main sin resolver al que se hace referencia en la función _main_utf8   PruebasSDL   D:\Documentos\Programacion\C++\Proyectos\PruebasSDL\PruebasSDL\PruebasSDL\SDL2main.lib(SDL_windows_main.obj)   1   


Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado de supresión
Error   LNK1120   1 externos sin resolver   PruebasSDL   D:\Documentos\Programacion\C++\Proyectos\PruebasSDL\PruebasSDL\Debug\PruebasSDL.exe   1



He añadido las bibliotecas tanto al linker como al compilador, al igual que los archivos de cabecera. He leido por ahi que peude deberse a un nombre mal escrito o usado, pero he comprobado todo y esta bien. Alguna idea?
4  Programación / Java / Interfaces en Java en: 6 Enero 2016, 23:45 pm
Hola, me preguntaba cual es el uso real y práctico de las interfaces en java, es decir, únicamente se utilizan para hacer una "esquemilla" de las clases en java?. No comprendo el sentido que tienen, no es más rápido y cómodo definir los métodos directamente en la clase en lugar de declararlos (no definirlos) previamente en una interfaz?

Espero que alguien pudiera resolverme esta dudilla tonta.

Un saludo.
5  Programación / Programación C/C++ / Mas problemas con Win32 en: 11 Septiembre 2015, 19:54 pm
Bueno, siento ser tan pesado con este tema pero es que ahora no se que me falla...

He hecho una librería con una clase para agilizar el proceso de creación de la ventana, aquí dejo los códigos:

Win32Lib.h
Código
  1. #include <Windows.h>
  2.  
  3. namespace Win32
  4. {
  5. class Window
  6. {
  7. public:
  8. HWND hWnd;
  9.  
  10. Window();
  11.  
  12. bool center();
  13.  
  14. void create(int height, int width, int x, int y,
  15. DWORD dwStyle, HBRUSH color, HCURSOR cursor, HICON icon, HINSTANCE hInstance, HWND hwnd, HWND hwndParent,
  16. LPCWSTR CLASS_NAME, LPCWSTR menu, LPCWSTR windowName, WNDPROC winProc);
  17. void show(int nCmdShow);
  18.  
  19. };
  20. }
  21.  

Win32Lib.cpp

Código
  1. #include "Win32Lib.h"
  2.  
  3. namespace Win32
  4. {
  5. Window::Window() {};
  6.  
  7. bool Window::center()
  8. {
  9. int x, y;
  10. RECT rc;
  11.  
  12. GetWindowRect(hWnd, &rc);
  13. x = (GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2;
  14. y = (GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 2;
  15.  
  16. return SetWindowPos(hWnd, 0, x, y, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
  17. }
  18.  
  19. void Window::create(int height, int width, int x, int y,
  20. DWORD dwStyle, HBRUSH color, HCURSOR cursor, HICON icon, HINSTANCE hInstance, HWND hwnd, HWND hwndParent,
  21. LPCWSTR CLASS_NAME, LPCWSTR menu, LPCWSTR windowName, WNDPROC winProc)
  22. {
  23. WNDCLASS wc;
  24.  
  25. hWnd = hwnd;
  26. wc.hbrBackground = color;
  27. wc.hCursor = cursor;
  28. wc.hIcon = icon;
  29. wc.hInstance = hInstance;
  30. wc.lpfnWndProc = winProc;
  31. wc.lpszClassName = CLASS_NAME;
  32. wc.lpszMenuName = menu;
  33. RegisterClass(&wc);
  34.  
  35. hwnd = CreateWindowEx(0, CLASS_NAME, windowName, dwStyle, x, y, width, height, hwndParent, NULL, hInstance, NULL);
  36. }
  37.  
  38. void Window::show(int nCmdShow)
  39. {
  40. ShowWindow(hWnd, nCmdShow);
  41. }
  42. }
  43.  

Y bueno, aquí esta el código de la aplicación, el caso es que en cuanto declaro la clase con un constructor vacio me dice: "Error (activo) no existe ningún constructor adecuado para convertir de "Win32::Window *" a "Win32::Window"   Win32Testing   d:\Documentos\Programacion\C++\Proyectos\Win32Testing\Win32Testing\Main.cpp   19"

Código
  1. #ifndef UNICODE
  2. #define UNICODE
  3. #endif
  4.  
  5. #include <Windows.h>
  6. #include <Win32Lib.h>
  7.  
  8. using namespace Win32;
  9.  
  10. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  11.  
  12. int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
  13. {
  14. HWND hwnd = NULL;
  15. LPCWSTR CLASS_NAME = L"MainWindow";
  16. Window mainWindow = new Window();
  17.  
  18. MSG msg = {};
  19.  
  20. mainWindow.show(nCmdShow);
  21.  
  22. while (GetMessage(&msg, NULL, 0, 0))
  23. {
  24. TranslateMessage(&msg);
  25. DispatchMessage(&msg);
  26. }
  27. return 0;
  28. }
  29.  
  30. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  31. {
  32. switch (uMsg)
  33. {
  34. case WM_DESTROY:
  35. PostQuitMessage(0);
  36. return 0;
  37. }
  38.  
  39. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  40. }
  41.  
  42.  

A que se puede deber? =S
6  Programación / Programación C/C++ / [DUDA] Manejo de varias ventanas Win32 en: 10 Septiembre 2015, 22:55 pm
Buenas, mi duda consiste en como puedo crear varias ventanas utilizando la API de windows. Por ejemplo, creo las dos ventanas, y una llama a la otra desde un menu. He intentado hacer algo pero ni si quiera compila (si compila, pero en realidad no me compila nada por lo que no se cual es error...). Agradecería muchísimo que alguien "veterano" en el tema me pueda ayudar...

Código
  1. // Main File
  2. // Build Date: 10-09-2015
  3.  
  4. #ifndef UNICODE
  5. #define UNICODE
  6. #endif
  7.  
  8. #include <Windows.h>
  9.  
  10. LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM);
  11. LRESULT CALLBACK ParentWindowProc(HWND, UINT, WPARAM, LPARAM);
  12.  
  13. int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
  14. {
  15. const wchar_t MAIN_CLASS_NAME[] = L"MainWindow";
  16. const wchar_t PARENT_CLASS_NAME[] = L"ParentWindow";
  17. HWND mainHwnd, parentHwnd;
  18. WNDCLASS mainWc = {}, parentWc = {};
  19. MSG msg = {};
  20.  
  21. //MainHwnd
  22. mainWc.hbrBackground = (HBRUSH)COLOR_WINDOW;
  23. mainWc.hInstance = hInstance;
  24. mainWc.lpfnWndProc = MainWindowProc;
  25. mainWc.lpszClassName = MAIN_CLASS_NAME;
  26. RegisterClass(&mainWc);
  27.  
  28. mainHwnd = CreateWindowEx(0, MAIN_CLASS_NAME, L"Ventana principal", WS_OVERLAPPEDWINDOW, 100, 100, 800, 600, NULL, NULL, hInstance, NULL);
  29. if (!mainHwnd) return 1;
  30. //ParentHwnd
  31. parentWc.hbrBackground = (HBRUSH)COLOR_WINDOWTEXT;
  32. parentWc.hInstance = hInstance;
  33. parentWc.lpfnWndProc = ParentWindowProc;
  34. parentWc.lpszClassName = PARENT_CLASS_NAME;
  35. RegisterClass(&parentWc);
  36.  
  37. parentHwnd = CreateWindowEx(0, PARENT_CLASS_NAME, L"Ventana secundaria", WS_OVERLAPPEDWINDOW, 300, 300, 800, 600, NULL, NULL, hInstance, NULL);
  38. if (!parentHwnd) return 2;
  39.  
  40. ShowWindow(mainHwnd, nCmdShow);
  41.  
  42. while (GetMessage(&msg, NULL, 0, 0))
  43. {
  44. TranslateMessage(&msg);
  45. DispatchMessage(&msg);
  46. }
  47.  
  48. return 0;
  49. }
  50.  
  51. LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  52. {
  53. switch (uMsg)
  54. {
  55. case WM_DESTROY:
  56. PostQuitMessage(0);
  57.  
  58. return 0;
  59. }
  60.  
  61. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  62. }
  63.  
  64. LRESULT CALLBACK ParentWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  65. {
  66. switch (uMsg)
  67. {
  68. case WM_DESTROY:
  69. PostQuitMessage(0);
  70.  
  71. return 0;
  72. }
  73.  
  74. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  75. }
  76.  

Si compilo esto me pone "Compilación correcta" en VS 2015 pero luego no me encuentra el archivo ejecutable lo que indica que no se compiló...

Un saludo y gracias de antemano.
7  Programación / Programación C/C++ / Duda con memoria dinámica y arrays en: 6 Septiembre 2015, 17:22 pm
Estoy revisando el tema de los punteros y la memoria dinámica en C, y me han surgido algunas dudas. Si declaro un array de int estático de digamos, 100 elementos, y no le doy ningún valor, ese array estará ocupando 400 bytes en la memoria según mi código:

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5. int array[100];
  6.  
  7. printf("%i", sizeof(array));
  8. getch();
  9. return 0;
  10. }
  11.  

Es decir independientemente de que el array estático este lleno o no, siempre va ocupar 400 bytes. Ahora bien, supongo que para eso existe la memoria dinámica. Si quiere tener un array que puede tener como máximo 100 elementos, lo puedo hacer con este código:

Código
  1.        int *array = (int*)malloc(400);
  2.  

Sin embargo, si quiero averiguar su tamaño en memoria siempre me va a dar 4 bytes, ya que un puntero de tipo int siempre va a ocupar 4 bytes. Entonces, ¿cómo sé que esos 400 bytes solo están reservados y no se están ocupando?

Agradecería una respuesta clara y bien explicada, gracias.
8  Programación / .NET (C#, VB.NET, ASP) / Sockets a través de internet C# en: 11 Agosto 2015, 14:36 pm
Buenas, estuve probando un poco el tema de los sockets y logre conectar dos aplicaciones desde 2 pc distintos en la misma red local, utilizando la ip (192.168.0.x). Quisiera saber si es esto posible haciendo que la conexión sea a través de internet utilizando la ip publica.
9  Programación / Programación C/C++ / Duda sobre manejo de mensajes Win32 en: 2 Agosto 2015, 22:05 pm
Lo que pretendo hacer es que el botón del menu "Salir", haga la misma función que si intento cerrar la aplicación, sin tener que repetir el código. Quiero saltar directamente al mensaje WM_CLOSE.

MainWindow.cpp:
Código
  1. // MainWindow
  2. // Build Date: 02-08-2015
  3.  
  4. #ifndef UNICODE
  5. #define UNICODE
  6. #endif
  7.  
  8. #include <Windows.h>
  9. #include "Resources.h"
  10.  
  11. #define SCREEN_HEIGHT 600
  12. #define SCREEN_WIDTH 800
  13.  
  14. LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
  15.  
  16. int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
  17. {
  18. PCWSTR CLASS_NAME = L"MainWindow";
  19.  
  20. HWND hwnd;
  21. MSG msg;
  22. WNDCLASS wc = {};
  23.  
  24. wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  25. wc.hInstance = hInstance;
  26. wc.lpfnWndProc = WindowProc;
  27. wc.lpszClassName = CLASS_NAME;
  28. wc.lpszMenuName = MAKEINTRESOURCE(ID_MENU);
  29. RegisterClass(&wc);
  30.  
  31. hwnd = CreateWindowEx(0, CLASS_NAME, L"Pruebas Win32", WS_OVERLAPPEDWINDOW, 200, 200, SCREEN_WIDTH, SCREEN_HEIGHT,
  32. NULL, NULL, hInstance, NULL);
  33. if (!hwnd) return 0;
  34.  
  35. ShowWindow(hwnd, nCmdShow);
  36.  
  37. while (GetMessage(&msg, NULL, 0, 0))
  38. {
  39. TranslateMessage(&msg);
  40. DispatchMessage(&msg);
  41. }
  42.  
  43. return 0;
  44. }
  45.  
  46. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  47. {
  48. switch (uMsg) {
  49. case WM_CLOSE:
  50. if (MessageBox(hwnd, L"¿Realmente desea salir?", L"Salir", MB_OKCANCEL) == IDOK) DestroyWindow(hwnd);
  51.  
  52. return 0;
  53.  
  54. case WM_COMMAND:
  55. switch (LOWORD(wParam))
  56. {
  57. case ID_EXIT:
  58. // Aqui quiero que salte a WM_CLOSE
  59.  
  60. return 0;
  61. }
  62.  
  63. return 0;
  64. case WM_DESTROY:
  65. PostQuitMessage(0);
  66.  
  67. return 0;
  68. }
  69.  
  70. return DefWindowProc(hwnd, uMsg, wParam, lParam);
  71. }

Resources.h
Código
  1. #define ID_MENU 100
  2.  
  3. //File
  4. #define ID_NEW 101
  5. #define ID_OPEN 102
  6. #define ID_SAVE 103
  7. #define ID_CLOSE 104
  8. #define ID_EXIT 105
  9.  

Resources.rc
Código:
#include "Resources.h"

ID_MENU MENU
BEGIN
POPUP L"Archivo"
BEGIN
MENUITEM L"Nuevo" ID_NEW
MENUITEM L"Abrir" ID_OPEN
MENUITEM L"Guardar" ID_SAVE
MENUITEM L"Cerrar" ID_CLOSE
MENUITEM SEPARATOR
MENUITEM L"Salir" ID_EXIT
END
END

Se me ocurre la solcion de aplicar una sentencia goto dentro de WM_CLOSE, pero me parece un poco perrenco. Alguna otra idea?
10  Programación / Java / Importar librerias en Eclipse en: 3 Abril 2015, 17:35 pm
Hola, espero que puedan resolverme esta duda. Tengo una librería llamada "Algoritmos.jar" con el siguiente código:

Código:
public class Algoritmos {
public void Burbuja(int lista[], boolean ascendente) {
int aux;

if(ascendente) {
for(int i=1; i<lista.length; i++) {
for(int j=0; j<lista.length-1; j++) {
if(lista[j] > lista[j+1]) {
aux = lista[j];
lista[j] = lista[j+1];
lista[j+1] = aux;
}
}
}
}
else {
for(int i=1; i<lista.length; i++) {
for(int j=0; j<lista.length-1; j++) {
if(lista[j] < lista[j+1]) {
aux = lista[j];
lista[j] = lista[j+1];
lista[j+1] = aux;
}
}
}
}
}
}


Supuestamente ya he incluido dicha librería en Eclipse, dentro del proyecto en una carpeta llamada "Referenced Libraries", ya que la he incluido como una librería externa. Mi duda es: ¿Cómo la utilizo en mi programa? Sé que tengo que utilizar el comando import, pero no se muy bien como...

Gracias de antemano. Un saludo.
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines