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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6 7
11  Programación / Java / ¿Cómo detectar varias teclas por teclado simultáneamente? en: 12 Julio 2016, 23:14 pm
Verán, actualmente estoy programando un juego bastante simple en Java, pero hay una cosa. Cuando yo presiono la tecla de la flecha izquierda(por ejemplo) la nave empieza a moverse (lógicamente) hacia la izquierda, pero si mientras la tengo presionada, presiono espacio (para disparar), la nave se detiene.

Lo que quiero es que me orienten en cómo hacer que eso no suceda, es decir, que la nave no deje de moverse mientras tenga la tecla presionada independientemente si presiono espacio.

Es decir, me muevo, presiono espacio, que dispare, y si no he soltado la tecla, que no se detenga sino que siga moviéndome hasta que la suelte (en este ejemplo, la izquierda).
12  Programación / Programación C/C++ / [DUDA] Polimorfismo. en: 11 Junio 2016, 01:37 am
Buenas a todos. Necesito que me expliquen algo que me está confundiendo un poco.

Tengo un código que me he sacado de C ConClase.
El código es el siguiente.
Código
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. class Persona {
  6.  public:
  7.   Persona(const char *n) { strcpy(nombre, n); }
  8.   Persona(const Persona &p);
  9.   virtual void VerNombre() {
  10.      cout << nombre << endl;
  11.   }
  12.   virtual Persona* Clonar() { return new Persona(*this); }
  13.  protected:
  14.   char nombre[30];
  15. };
  16.  
  17. Persona::Persona(const Persona &p) {
  18.   strcpy(nombre, p.nombre);
  19.   cout << "Per: constructor copia." << endl;
  20. }
  21.  
  22. class Empleado : public Persona {
  23.  public:
  24.   Empleado(const char *n) : Persona(n) {}
  25.   Empleado(const Empleado &e);
  26.   void VerNombre() {
  27.      cout << "Emp: " << nombre << endl;
  28.   }
  29.   virtual Persona* Clonar() { return new Empleado(*this); }
  30. };
  31.  
  32. Empleado::Empleado(const Empleado &e) : Persona(e) {
  33.   cout << "Emp: constructor copia." << endl;
  34. }
  35.  
  36. class Estudiante : public Persona {
  37.  public:
  38.   Estudiante(const char *n) : Persona(n) {}
  39.   Estudiante(const Estudiante &e);
  40.   void VerNombre() {
  41.      cout << "Est: " << nombre << endl;
  42.   }
  43.   virtual Persona* Clonar() {
  44.      return new Estudiante(*this);
  45.   }
  46. };
  47.  
  48. Estudiante::Estudiante(const Estudiante &e) : Persona(e) {
  49.   cout << "Est: constructor copia." << endl;
  50. }
  51.  
  52. int main() {
  53.   Persona *Pepito = new Estudiante("Jose");
  54.   Persona *Carlos = new Empleado("Carlos");
  55.   Persona *Gente[2];
  56.  
  57.   Carlos->VerNombre();
  58.   Pepito->VerNombre();
  59.  
  60.   Gente[0] = Carlos->Clonar();
  61.   Gente[0]->VerNombre();
  62.  
  63.   Gente[1] = Pepito->Clonar();
  64.   Gente[1]->VerNombre();
  65.  
  66.   delete Pepito;
  67.   delete Carlos;
  68.   delete Gente[0];
  69.   delete Gente[1];
  70.  
  71.   return 0;
  72. }
  73.  
  74.  

La duda que tengo es la siguiente:
Si mal no tengo entendido el puntero "this" hace referencia al objeto desde cual se está llamando a una función (por ejemplo).

Entonces, al llamar a la función "clonar", tengo lo siguiente:
Código
  1. virtual Persona* Clonar() {
  2.      return new Estudiante(*this);
  3.   }
  4.  

Se supone que el parámetro "*this" hace referencia al objeto desde cuál se está llamando, que es de tipo "Persona*", pero el constructor de Estudiante, recibe un estudiante como parámetro y no una Persona. ¿Por qué es válido a hacer eso?

Sé que por polimorfismo, una persona puede ser igual a un estudiante, siempre y cuando estudiante herede de persona. Pero, ¿por qué si la función recibe un parámetro de tipo estudiante puede recibir uno de tipo persona? Es decir, estoy haciendo un estudiante igual a una persona (lo opuesto a lo que mencioné primeramente). Eso debería ser incorrecto, pero no lo es, ¿alguien me puede explicar por favor por qué?

Me estoy ahogando en un vaso de agua, lo sé. xD
13  Programación / Programación C/C++ / [Estructuras] ¿Por qué me muestra basura? en: 22 Mayo 2016, 22:57 pm
Verán, el programa que tengo que hacer es el siguiente.
Leer N cantidad de estudiantes, y dentro de otra estructura sus notas (parte teórica y parte práctica), como un máximo de 5 calificaciones para cada alumno. Es decir, si digo que son 3 notas prácticas serán 3 notas prácticas para todos los alumnos, lo mismo para la parte teórica.

En fin, todo chévere, pero cuando intento mostrar las calificaciones que ingresé previamente, me muestra valores basura.

¿Alguien podría echarme una mano? El programa lo estoy haciendo en Code::Blocks.
Acá les dejo el código fuente que llevo hasta ahora:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. //Variables globales para la cantidad de prácticos y parciales.
  7. int nPracticos, nParciales;
  8.  
  9. struct Notas {
  10.    int practicos[];
  11.    int parciales[];
  12.    float promedio;
  13. };
  14. typedef struct Notas Notas;
  15.  
  16. struct Estudiante {
  17.    char nombre[25];
  18.    char apellido[35];
  19.    char cedula[10];
  20.    char sexo;
  21.    int edad;
  22.    Notas notas;
  23. };
  24. typedef struct Estudiante Estudiante;
  25.  
  26. int leerEstudiantes();
  27. int leerEvaluaciones(char tipo[]); //Para leer la cantidad de practicos y parciales.
  28.  
  29. void llenarEstudiante(Estudiante& estudiante, int id);
  30. void mostrarEstudiante(const Estudiante& estudiante, int id);
  31.  
  32. int main() {
  33.    int nEstudiantes;
  34.    nEstudiantes = leerEstudiantes();
  35.    nPracticos   = leerEvaluaciones((char*)"Practicos");
  36.    nParciales   = leerEvaluaciones((char*)"Parciales");
  37.  
  38.    system("cls");
  39.  
  40.    Estudiante estudiante[nEstudiantes];
  41.  
  42.    //Llenando cada uno de los estudiantes.
  43.    for(int est = 0; est < nEstudiantes; est++) {
  44.        llenarEstudiante(estudiante[est], est);
  45.    }
  46.  
  47.    system("cls");
  48.  
  49.    //Mostrar datos de los estudiantes.
  50.    for(int est = 0; est < nEstudiantes; est++) {
  51.        mostrarEstudiante(estudiante[est], est);
  52.    }
  53.  
  54.    return 0;
  55. }
  56.  
  57. int leerEstudiantes() {
  58.    int nEstudiantes;
  59.  
  60.    do {
  61.        cout << "Introduzca la cantidad de estudiantes: ";
  62.        cin >> nEstudiantes;
  63.  
  64.        if(nEstudiantes <= 0) {
  65.            cerr << "Cantidad de estudiantes invalida." << endl;
  66.        }
  67.    }while(nEstudiantes <= 0);
  68.  
  69.    return nEstudiantes;
  70. }
  71.  
  72. int leerEvaluaciones(char tipo[]) {
  73.    int cantidad;
  74.  
  75.    do{
  76.        cout << "Ingrese la cantidad de " << tipo << ": ";
  77.        cin >> cantidad;
  78.  
  79.        if(cantidad <= 0 || cantidad > 5) {
  80.            cerr << "Cantidad incorrecta." << endl;
  81.        }
  82.    }while(cantidad <= 0 || cantidad > 5);
  83.  
  84.    return cantidad;
  85. }
  86.  
  87. void llenarEstudiante(Estudiante& estudiante, int id) {
  88.    //Variables para calcular el promedio.
  89.    int pPracticos = 0, pParciales = 0;
  90.  
  91.    //Lectura de datos generales.
  92.    cout << "Ingrese nombre de estudiante [" << (id + 1) << "]: ";
  93.    cin >> estudiante.nombre;
  94.    cout << "Ingrese apellido de estudiante [" << (id + 1) << "]: ";
  95.    cin >> estudiante.apellido;
  96.    cout << "Ingrese cedula de estudiane [" << (id + 1) << "]: ";
  97.    cin >> estudiante.cedula;
  98.    cout << "Ingrese edad de estudiante [" << (id + 1) << "]: ";
  99.    cin >> estudiante.edad;
  100.    cout << "Ingrese sexo de estudiante [" << (id + 1) << "] (M/F): ";
  101.    cin >> estudiante.sexo;
  102.  
  103.    //Lectura de notas prácticas.
  104.    for(int pr = 0; pr < nPracticos; pr++) {
  105.        do {
  106.            cout << "Ingrese nota del practico [" << (pr + 1) << "]: ";
  107.            cin >> estudiante.notas.practicos[pr];
  108.  
  109.            if(estudiante.notas.practicos[pr] < 0 || estudiante.notas.practicos[pr] > 10) {
  110.                cerr << "Nota incorrecta." << endl;
  111.            }
  112.        }while(estudiante.notas.practicos[pr] < 0 || estudiante.notas.practicos[pr] > 10);
  113.    }
  114.  
  115.    //Lectura de notas parciales.
  116.    for(int pa = 0; pa < nParciales; pa++) {
  117.        do {
  118.            cout << "Ingrese nota del parcial [" << (pa + 1) << "]: ";
  119.            cin >> estudiante.notas.parciales[pa];
  120.            if(estudiante.notas.parciales[pa] < 0 || estudiante.notas.parciales[pa] > 10) {
  121.                cerr << "Nota incorrecta." << endl;
  122.            }
  123.        }while(estudiante.notas.parciales[pa] < 0 || estudiante.notas.parciales[pa] > 10);
  124.    }
  125.  
  126.    //Calculando el promedio del estudiante:
  127.    //Sumatoria de Prácticos
  128.    for(int pr = 0; pr < nPracticos; pr++) {
  129.        pPracticos += estudiante.notas.practicos[pr];
  130.    }
  131.    //Sumatoria de Parciales
  132.    for(int pa = 0; pa < nParciales; pa++) {
  133.        pParciales += estudiante.notas.parciales[pa];
  134.    }
  135.    //Cálculo del promedio.
  136.    estudiante.notas.promedio = pPracticos/nPracticos*0.20 + pParciales/nParciales*0.50;
  137. }
  138.  
  139. void mostrarEstudiante(const Estudiante& estudiante, int id) {
  140.    cout << "Nombre de estudiante [" << (id + 1) << "]: " << estudiante.nombre << endl;
  141.    cout << "Apellido de estudiante [" << (id + 1) << "]: " << estudiante.apellido << endl;
  142.    cout << "Cedula de estudiante [" << (id + 1) << "]: " << estudiante.cedula << endl;
  143.    cout << "Sexo de estudiante [" << (id + 1) << "]: " << estudiante.sexo << endl;
  144.    cout << "Edad de estudiante [" << (id + 1) << "]: " << estudiante.edad << endl;
  145.  
  146.    for(int j = 0; j < nPracticos; j++) {
  147.        cout << "Nota del practico [" << (j + 1) << "] del estudiante [" << (id + 1) << "]: " << estudiante.notas.practicos[j] << endl;
  148.    }
  149.  
  150.    for(int j = 0; j < nParciales; j++) {
  151.        cout << "Nota del parcial [" << (j + 1) << "] del estudiante [" << (id + 1) << "]: " << estudiante.notas.parciales[j] << endl;
  152.    }
  153.  
  154.    cout << "Promedio del estudiante [" << (id + 1) << "]: " << estudiante.notas.promedio << endl;
  155.    cout << "-------------------" << endl;
  156. }
  157.  
14  Programación / Programación C/C++ / [Sockets] Conexiones múltiples de clientes a servidor. en: 22 Enero 2016, 23:48 pm
Verán, estoy aprendiendo sobre sockets y hasta ahora todo bien. El problema es que sólo puedo manejar una conexión a la vez, ¿cómo podría manejar conexiones múltiples? Leí un tema que se logra a través de un Thread, pero estoy un poco confundido.

Estos son los códigos que llevo hasta ahora:

Servidor:
Código
  1. #ifndef WIN32_LEAN_AND_MEAN
  2. #define WIN32_LEAN_AND_MEAN
  3. #endif
  4.  
  5. #include <windows.h>
  6. #include <WinSock2.h>
  7. #include <WS2tcpip.h>
  8. #include <IPHlpApi.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12. #pragma comment(lib, "Ws2_32.lib")
  13.  
  14. #define DEFAULT_PORT "27016"
  15. #define DEFAULT_BUFLEN 516
  16.  
  17. int main() {
  18. WSADATA wsaData;
  19. int iResult;
  20.  
  21. char recvbuf[DEFAULT_BUFLEN];
  22. int recvbuflen = DEFAULT_BUFLEN;
  23. int recvBytes;
  24.  
  25. iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
  26. if (iResult != 0) {
  27. printf("WSAStartup failed with error: %d\n", iResult);
  28. return 1;
  29. }
  30.  
  31. struct addrinfo *result = NULL,
  32. hints;
  33.  
  34. ZeroMemory(&hints, sizeof(hints));
  35. hints.ai_family = AF_INET;
  36. hints.ai_socktype = SOCK_STREAM;
  37. hints.ai_protocol = IPPROTO_TCP;
  38. hints.ai_flags = AI_PASSIVE;
  39.  
  40. iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
  41. if (iResult != 0) {
  42. printf("getaddrinfo error: %d\n", iResult);
  43. WSACleanup();
  44. return 1;
  45. }
  46.  
  47. SOCKET ListenSocket = INVALID_SOCKET;
  48.  
  49. ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
  50.  
  51. if (ListenSocket == INVALID_SOCKET) {
  52. printf("Error at socket(): %ld\n", WSAGetLastError());
  53. freeaddrinfo(result);
  54. WSACleanup();
  55. return 1;
  56. }
  57.  
  58. iResult = bind(ListenSocket, result->ai_addr, result->ai_addrlen);
  59. if (iResult == SOCKET_ERROR) {
  60. printf("Error at bind: %d\n", iResult);
  61. freeaddrinfo(result);
  62. closesocket(ListenSocket);
  63. WSACleanup();
  64. return 1;
  65. }
  66.  
  67. freeaddrinfo(result);
  68.  
  69. if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR) {
  70. printf("Listen failed with: %ld\n", WSAGetLastError());
  71. closesocket(ListenSocket);
  72. WSACleanup();
  73. return 1;
  74. }
  75.  
  76. SOCKET ClientSocket = INVALID_SOCKET;
  77.  
  78. ClientSocket = accept(ListenSocket, NULL, NULL);
  79. if (ClientSocket == INVALID_SOCKET) {
  80. printf("accept failed with error: %d\n", WSAGetLastError());
  81. closesocket(ListenSocket);
  82. WSACleanup();
  83. return 1;
  84. }
  85.  
  86. printf("A CONNECTION HAS BEEN FOUND!!\n");
  87.  
  88. iResult = shutdown(ClientSocket, SD_SEND);
  89. if (iResult == SOCKET_ERROR) {
  90. printf("shutdown failed with error: %d\n", iResult);
  91. closesocket(ClientSocket);
  92. WSACleanup();
  93. return 1;
  94. }
  95.  
  96. do {
  97. recvBytes = recv(ClientSocket, recvbuf, recvbuflen, 0);
  98. if (recvBytes > 0) {
  99. printf("Client >> ");
  100. for (int i = 0; i < recvBytes; ++i) {
  101. printf("%c", recvbuf[i]);
  102. }
  103. //printf("Bytes received: %d\n\n", recvBytes);
  104. }
  105. else if (recvBytes == 0) {
  106. printf("Connection closing...\n");
  107. }
  108. else {
  109. printf("recv failed: %d\n", WSAGetLastError());
  110. closesocket(ClientSocket);
  111. WSACleanup();
  112. return 1;
  113. }
  114. } while (recvBytes > 0);
  115.  
  116. closesocket(ClientSocket);
  117. WSACleanup();
  118.  
  119. system("pause>nul");
  120.  
  121. return 0;
  122. }
  123.  

Cliente:
Código
  1. #ifndef WIN32_LEAN_AND_MEAN
  2. #define WIN32_LEAN_AND_MEAN
  3. #endif
  4.  
  5. #include <windows.h>
  6. #include <WinSock2.h>
  7. #include <WS2tcpip.h>
  8. #include <IPHlpApi.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12. #pragma comment(lib, "Ws2_32.lib")
  13.  
  14. #define DEFAULT_PORT "27016"
  15. #define DEFAULT_BUFLEN 516
  16.  
  17. int main() {
  18. WSADATA wsaData;
  19. int iResult;
  20.  
  21. char sendbuf[DEFAULT_BUFLEN];
  22. int iSendResult;
  23.  
  24. iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
  25. if (iResult != 0) {
  26. printf("WSAStartup failed with error: %d\n", iResult);
  27. return 1;
  28. }
  29.  
  30. struct addrinfo *result = NULL,
  31. *ptr = NULL,
  32. hints;
  33.  
  34. ZeroMemory(&hints, sizeof(hints));
  35. hints.ai_family = AF_UNSPEC;
  36. hints.ai_socktype = SOCK_STREAM;
  37. hints.ai_protocol = IPPROTO_TCP;
  38.  
  39. iResult = getaddrinfo("127.0.0.1", DEFAULT_PORT, &hints, &result);
  40. if (iResult != 0) {
  41. printf("getaddrinfo failed with error: %d/n", iResult);
  42. WSACleanup();
  43. return 1;
  44. }
  45.  
  46. SOCKET ConnectSocket = INVALID_SOCKET;
  47.  
  48. ptr = result;
  49.  
  50. ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
  51.  
  52. if (ConnectSocket == INVALID_SOCKET) {
  53. printf("Error at socket(): %ld\n", WSAGetLastError());
  54. freeaddrinfo(result);
  55. WSACleanup();
  56. return 1;
  57. }
  58.  
  59. iResult = connect(ConnectSocket, ptr->ai_addr, ptr->ai_addrlen);
  60. if (iResult == SOCKET_ERROR) {
  61. closesocket(ConnectSocket);
  62. ConnectSocket = INVALID_SOCKET;
  63. }
  64.  
  65. freeaddrinfo(result);
  66.  
  67. if (ConnectSocket == INVALID_SOCKET) {
  68. printf("Unable to connect to server!\n");
  69. WSACleanup();
  70. return 1;
  71. }
  72.  
  73. do {
  74. printf("Send a message to the server: ");
  75. fgets(sendbuf, DEFAULT_BUFLEN, stdin);
  76.  
  77. iSendResult = send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0);
  78. if (iSendResult == SOCKET_ERROR) {
  79. printf("send failed: %d\n", WSAGetLastError());
  80. closesocket(ConnectSocket);
  81. WSACleanup();
  82. return 1;
  83. }
  84. //printf("Bytes sent: %d\n\n", iSendResult);
  85. } while (iSendResult > 0);
  86.  
  87. iResult = shutdown(ConnectSocket, SD_SEND);
  88. if (iResult == SOCKET_ERROR) {
  89. printf("shutdown failed: %d\n", iResult);
  90. closesocket(ConnectSocket);
  91. WSACleanup();
  92. return 1;
  93. }
  94.  
  95. closesocket(ConnectSocket);
  96. WSACleanup();
  97.  
  98. system("pause>nul");
  99.  
  100. return 0;
  101. }
  102.  

Estoy trabajando en Visual Studio Community 2015.
15  Programación / Programación C/C++ / [C++] Liberación de memoria dinámica. en: 18 Noviembre 2015, 02:32 am
Vean, estaba haciendo una especie de "juego", y a la hora de programar la rutina de las balas me ha surgido un problema, podemos disparar las veces que queramos y no pasará nada, pero en el momento cuando la última bala llega al tope, el programa deja de funcionar.

El error está (creo) en la liberación de la memoria dinámica, no sé qué estoy haciendo mal. Verán, esta es la parte:

Código
  1.        for(it = balas.begin(); it != balas.end(); ++it) {
  2.            (*it)->borrar_bala((*it)->GetX(),(*it)->GetY());
  3.            if(!(*it)->rng_fuera()) {
  4.                (*it)->mod_pos_bala((*it)->GetY());
  5.                (*it)->pintar_bala();
  6.            }
  7.            else {
  8.                delete (*it);
  9.                balas.erase(it);
  10.            }
  11.        }
  12.  

La función rng_fuera() retorna un valor booleano, retorna true si la bala ha llegado al tope, es decir, cuando y = 0. Y false en caso contrario.

Entonces yo, como se muestra arriba, borro de la pantalla la posición actual de la bala, si ha llegado al tope, pues libero la memoria y borro ese elemento del vector, en caso contrario modifico la posición actual de la bala a la nueva posición y la pinto. Pero algo sucede y no puedo encontrar el error.

Si necesitan el código completo para entenderlo mejor, pídanmelo y lo publico en los comentarios. :)
16  Programación / Programación C/C++ / [Ayuda] Librería dinámica. en: 14 Noviembre 2015, 13:34 pm
Bueno, iré al grano, me puse a crear una librería dinámica y para ser honesto no sé si estoy haciendo bien la importación/exportación.

Acá el código:

// main.h
Código
  1.  
  2. #ifndef __MAIN_H__
  3. #define __MAIN_H__
  4.  
  5.  
  6. #ifndef DLL_MATH
  7.    #define DLL_MATH __declspec(dllimport)
  8. #else
  9.    #define DLL_MATH __declspec(dllexport)
  10. #endif
  11.  
  12. int DLL_MATH suma(int a, int b);
  13. int DLL_MATH resta(int a, int b);
  14. int DLL_MATH multip(int a, int b);
  15.  
  16. #endif //__MAIN_H__
  17.  
  18.  

// main.cpp
Código
  1.  
  2. #include "main.h"
  3.  
  4. int DLL_MATH suma(int a, int b) {
  5.    return (a + b);
  6. }
  7.  
  8. int DLL_MATH resta(int a, int b) {
  9.    return (a - b);
  10. }
  11.  
  12. int DLL_MATH multip(int a, int b) {
  13.    return (a*b);
  14. }
  15.  
  16.  

Como verán es bastante simple, hasta ridículo. Si cambio el orden, es decir, de esta forma:

//main.h
Código
  1.  
  2. #ifndef __MAIN_H__
  3. #define __MAIN_H__
  4.  
  5.  
  6. #ifndef DLL_MATH
  7.    #define DLL_MATH __declspec(dllexport)
  8. #else
  9.    #define DLL_MATH __declspec(dllimport)
  10. #endif
  11.  
  12. int DLL_MATH suma(int a, int b);
  13. int DLL_MATH resta(int a, int b);
  14. int DLL_MATH multip(int a, int b);
  15.  
  16. #endif //__MAIN_H__
  17.  
  18.  

Sí funciona, pero a lo mejor he captado mal de dónde he leído, ¿no se suponía que si la macro no estaba definida se debía importar en la DLL, y una vez definida, exportar hacia el programa con el cual la estemos corriendo? Corregidme acá, por favor. :)
17  Programación / Programación C/C++ / ¿Alguna mano con programas Cliente/Servidor [Sockets] en C++? en: 1 Octubre 2015, 01:57 am
Verán, quiero empezar a programar sockets pero no tengo ni idea de qué hacer o cómo empezar. He buscado información en internet pero he encuentro código y más código ya hecho, y obviamente no entiendo nada. O sea, no explican línea por línea para qué sirve 'X' cosa o qué hace exactamente. Por eso vengo a pedirles si alguno tiene un libro o algo para empezar desde cero. Porque como dije, no tengo ni idea de cómo empezar.

Se los agradecería un montón. :)
18  Programación / Programación C/C++ / [Problema] Incorrecta selección del Switch. en: 30 Septiembre 2015, 02:15 am
Verán, estoy haciendo un programa que lo que hace es que si escribes cierta cantidad en números, este los traslada a letras, por ejemplo: 16 - "dieciséis".

Por ahora sólo estoy con decenas, ya luego lo haré con números mayores, pero tengo un problema, hay valores que sí funcionan, y otros que no. Por ejemplo, 54, 88, 19, y otros con los que no funcionan. Por ejemplo, 18, 87, 84. Al escribir esos números (y otros varios) me manda a la condición incorrecta y escribe lo que no debería.

Las 2 líneas que están en comentario fueron de una prueba para asegurarme que le estaba pasando el parámetro correcto a la función, y ver qué valor tomaba la variable lAux, que efectivamente en algunos casos, toma el incorrecto, por ejemplo, a veces cuando le paso 7 me devuelve un "seis".

Acá les dejaré el código que llevo:

Código
  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. string lNumero(int i);
  7. void decimas(int num);
  8.  
  9. int main(void) {
  10.  
  11.    int num = 0;
  12.  
  13.    cout << "Escribe un numero: ";
  14.        cin >> num;
  15.  
  16.    decimas(num);
  17.    cout << endl;
  18.  
  19.    return 0;
  20. }
  21.  
  22. void decimas(int num) {
  23.    float aux = (float)num/10;
  24.    num /= 10;
  25.    aux = (aux - num) * 10;
  26.  
  27.    string lAux = lNumero(aux);
  28.    //cout << lAux << endl;
  29.    //cout << aux << endl;
  30.  
  31.    switch(num) {
  32.    case 0:
  33.        cout << lAux;
  34.    break;
  35.    case 1:
  36.        switch((int)aux) {
  37.            case 0: cout << "diez"; break;
  38.            case 1: cout << "once"; break;
  39.            case 2: cout << "doce"; break;
  40.            case 3: cout << "trece"; break;
  41.            case 4: cout << "catorce"; break;
  42.            case 5: cout << "quince"; break;
  43.            default: cout << "dieci" << lAux; break;
  44.        }
  45.    break;
  46.    case 2:
  47.        if (aux == 0) cout << "veinte";
  48.        else cout << "veinti" << lAux;
  49.    break;
  50.    case 3:
  51.        if (aux == 0) cout << "treinta";
  52.        else cout << "treinta y " << lAux;
  53.    break;
  54.    case 4:
  55.        if (aux == 0) cout << "cuarenta";
  56.        else cout << "cuarenta y " << lAux;
  57.    break;
  58.    case 5:
  59.        if (aux == 0) cout << "cincuenta";
  60.        else cout << "cincuenta y " << lAux;
  61.    break;
  62.    case 6:
  63.        if (aux == 0) cout << "sesenta";
  64.        else cout << "sesenta y " << lAux;
  65.    break;
  66.    case 7:
  67.        if (aux == 0) cout << "setenta";
  68.        else cout << "setenta y " << lAux;
  69.    break;
  70.    case 8:
  71.        if (aux == 0) cout << "ochenta";
  72.        else cout << "ochenta y " << lAux;
  73.    break;
  74.    case 9:
  75.        if (aux == 0) cout << "noventa";
  76.        else cout << "noventa y " << lAux;
  77.    break;
  78.    }
  79. }
  80.  
  81. string lNumero(int i) {
  82.    switch(i) {
  83.    case 1: return "uno";
  84.    case 2: return "dos";
  85.    case 3: return "tres";
  86.    case 4: return "cuatro";
  87.    case 5: return "cinco";
  88.    case 6: return "seis";
  89.    case 7: return "siete";
  90.    case 8: return "ocho";
  91.    case 9: return "nueve";
  92.    }
  93.    return "cero";
  94. }
  95.  
  96.  
19  Programación / Programación C/C++ / Pregunta sobre condicional If. en: 29 Julio 2015, 00:47 am
Miren, intento hacer un programa que agarre el segundo argumento que se le pase desde la línea de comandos y luego este imprima un mensaje si es el correcto:
Algo por ejemplo así:

programa.exe argumento.

Luego dentro del programa se comparará si ese argumento es el que está dentro ya establecido o otro, de ser así imprimirá un mensaje en la pantalla.
Pero no sé qué estoy haciendo mal, este es el código que llevo:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(int argc, char* argv[])
  6. {
  7.    /*
  8.     cout << "Cantidad de argumentos: " << argc << endl;
  9.  
  10.     for(int i = 0; i < argc; i++) {
  11.         cout << argv[i] << endl;
  12.     }*/
  13.  
  14.    //cout << argv[1] << endl;
  15.    if(argv[1] == (char*)"123") {
  16.        cout << "Argumento correcto." << endl;
  17.    }
  18.  
  19.    cin.get();
  20.    return 0;
  21. }
  22.  

Gracias de antemano. :D
20  Programación / Programación C/C++ / ¿Cómo evitar almacenamientos no deseados? en: 26 Junio 2015, 02:18 am
Me gustaría saber cómo podría hacer para evitar que los usuarios ingresaran valores que no corresponden al tipo de variable. Por ejemplo, supongamos que tengo un código bastante sencillo como este:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main(void)
  5. {
  6.     int n;
  7.     cin >> n;
  8.  
  9.     if(n > 10) cout << "Es mayor que 10" << endl;
  10.     else cout << "Es menor a 10" << endl;
  11.  
  12.     cin.get();
  13.     return 0;
  14. }
  15.  

Pero, ¿cómo podría hacer para prever una situación donde en lugar de un número introduzca un caracter o una cadena de caracteres y realizar otra acción?

Sé que es algo bastante simple y hasta ridículo, pero igual me gustaría saberlo.

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