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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6
11  Programación / Programación C/C++ / (Consulta) Error muy extraño con la salida a consola en C++ en: 10 Octubre 2017, 18:29 pm
Hola, muy buenas. Estoy desarrollando para la facultad una clase llamada Cronologia y otra como FechaHistorica, y tengo problemas con la salida del FechaHistorica. En esta clase, he definido una sobrecarga de operador amigo así:

Código
  1. std::ostream& operator<<(std::ostream &os, const FechaHistorica &fecha) {
  2.    // PRUEBAS
  3.    for(int i = 0; i < (int)fecha.acontecimientos.size(); i++)
  4.        os << fecha.acontecimientos[i] << std::endl;
  5.  
  6.    os << "________________________________" << std::endl;
  7.  
  8.    for(int i = 0; i < (int)fecha.acontecimientos.size(); i++) {
  9.        for(int j = 0; j < (int)fecha.acontecimientos[i].size(); j++)
  10.            os << '(' <<(int)fecha.acontecimientos[i][j] << ',' << fecha.acontecimientos[i][j] << ") ";
  11.  
  12.        os << std::endl << "___" << std::endl;
  13.    }
  14.  
  15.    // CÓDIGO REAL
  16.    os << fecha.año;
  17.  
  18.    for(const std::string &elemento : fecha.acontecimientos)
  19.        os << FechaHistorica::TERMINADOR << elemento;
  20.  
  21.    return os;
  22. }

La parte etiquetada como 'PRUEBAS' significa que no pertenece al código final. FechaHistorica tiene un año (int) y un conjunto de acontecimientos (std::vector de std::string). Pues bien, cuando yo ejecuto ese operador obtengo la siguiente salida:

Citar
Apriori algorithm developed by Rakesh Agrawal and Ramakrishnan Srikant
Nada en especial
Algo
________________________________
(65,A) (112,p) (114,r) (105,i) (111,o) (114,r) (105,i) (32, ) (97,a) (108,l) (103,g) (111,o) (114,r) (105,i) (116,t) (104,h) (109,m) (32, ) (100,d) (101,e) (118,v) (101,e) (108,l) (111,o) (112,p) (101,e) (100,d) (32, ) (98,b) (121,y) (32, ) (82,R) (97,a) (107,k) (101,e) (115,s) (104,h) (32, ) (65,A) (103,g) (114,r) (97,a) (119,w) (97,a) (108,l) (32, ) (97,a) (110,n) (100,d) (32, ) (82,R) (97,a) (109,m) (97,a) (107,k) (114,r) (105,i) (115,s) (104,)  (110,n) (97,a) (110,n) (32, ) (83,S) (114,r) (105,i) (107,k) (97,a) (110,n) (116,t) (13,
___
(78,N) (97,a) (100,d) (97,a) (32, ) (101,e) (110,n) (32, ) (101,e) (115,s) (112,p) (101,e) (99,c) (105,i) (97,a) (108,l)
___
(65,A) (108,l) (103,g) (111,o)
___
#Nada en especial#Algo developed by Rakesh Agrawal and Ramakrishnan Srikant

Como podeis ver, el vector de string contiene los string
  • Apriori algorithm developed by Rakesh Agrawal and Ramakrishnan Srikant
  • Nada en especial
  • Algo

Después he impreso el valor numérico de cada carácter.

El ERROR está en la siguiente parte:
Citar
#Nada en especial#Algo developed by Rakesh Agrawal and Ramakrishnan Srikant

En el código, tengo que se imprima primero el año, y luego el conjunto de sucesos, pero por alguna razón, parece ser que la posición del cursor (columna) vuelve a 0, y sobreescribe los datos de la línea ya impresos. Espero haberme explicado bien.

He probado en cada iteración a hacer un flush de 'os', pero no ha resultado.

Muchas gracias!
12  Programación / Java / (Consulta) Posible BUG en Java en: 2 Octubre 2017, 09:16 am
Hola, buenas.

Estoy haciendo ejercicios de un libro de Java. En un ejercicio, se me pedía el uso de archivos:

Citar
Realiza un programa que nos diga si hay probabilidad de que nuestra pareja
nos está siendo infiel. El programa irá haciendo preguntas que el usuario
contestará con verdadero o falso. Cada pregunta contestada como verdadero
sumará 3 puntos. Las preguntas contestadas con falso no suman puntos. Utili-
za el fichero
test_infidelidad.txt
para obtener las preguntas y las conclusiones
del programa.

El problema que tengo no es de compilación (compila bien), sino de ejecución. Cuando lo ejecuto, se lee la primera línea del archivo, se imprime, y se pausa el programa para la entrada (como es de esperar). El problema es que al introducir un valor de entrada (booleana, por ejemplo, true), en una nueva línea se imprime true y el programa se para de nuevo. Si introduzco la entrada de nuevo, el programa hace lo que debería, pero en cada entrada hay que introducir dos entradas. Ejemplo:

Código:
¿Ha sido fiel a su pareja? true          # Ese true lo introduje por teclado. Pulso enter
true                                      # Se imprime mágicamente
true                                      # Tengo que introducir de nuevo la respuesta
¿Quiere a su pareja?

Los "# [...]" son comentarios que os hago para entender la ejecución.

Este es el código que tengo:

Código
  1. import java.io.RandomAccessFile;
  2. import java.io.IOException;
  3. import java.util.Scanner;
  4.  
  5. public class Ejercicio_16 {
  6.    public static void main(String[] args) {
  7.        try {
  8.            RandomAccessFile archivo =
  9.                new RandomAccessFile ("test_infidelidad.txt", "r");
  10.            Scanner scanner = new Scanner(System.in);
  11.            String linea;
  12.            boolean respuesta_correcta;
  13.            boolean respuesta;
  14.            int puntuacion, puntuacion_maxima;
  15.  
  16.            puntuacion = 0;
  17.            puntuacion_maxima = 0;
  18.  
  19.            while(null != (linea = archivo.readLine())) {
  20.                respuesta_correcta = archivo.readBoolean();
  21.  
  22.                System.out.print(linea + " ");
  23.                respuesta = scanner.nextBoolean();
  24.  
  25.                if(respuesta == respuesta_correcta)
  26.                    puntuacion += 3;
  27.  
  28.                puntuacion_maxima += 3;
  29.            }
  30.  
  31.            System.out.println("Ha sacado " + puntuacion + "/" + puntuacion_maxima + " de puntuación");
  32.  
  33.            archivo.close();
  34.        } catch (IOException e) {
  35.            System.out.println(e);
  36.        }
  37.    }
  38. }

test_infidelidad.txt
Código:
¿Ha sido fiel a su pareja?
true
¿Quiere a su pareja?
true
¿Tiene su pareja o sus hijos algún entrenador personal?
false
¿Pone su pareja excusas para acostarse?
false

Gracias por leer.
13  Foros Generales / Dudas Generales / (Consulta) (Emacs) Navegador de archivos simplista pero efectivo en: 3 Julio 2017, 03:08 am
Hola, muy buenas.

Antes de formatear, tenía, en emacs un paquete que me permitía seleccionar la ruta con las flechas del ratón (ver imagen abajo), pero ahora no encuentro dicho paquete (porque no me acuerdo de su nombre). Si alguien sabe el nombre del paquete, por favor, dígalo. El navegador se puede ver en la parte de abajo

14  Programación / Programación General / (Consulta) Mejor forma de implementar el algoritmo con programación concurrente en: 2 Julio 2017, 15:28 pm
Hola a tod@s. Estoy introduciéndome en el mundo de la programación concurrente usando los hilos de POSIX. Estoy intentando implementar de forma segura lo siguiente:

Thread 1 (hilo POSIX): actualizar framebuffer (búfer de pantalla)
Thread 2 (hilo principal): actualizar imagen con una proveniente de una cámara.

El framebuffer se actualiza con la imagen leida de la cámara. Entonces, una secuencia de ejecución sería algo parecido a:

|-----Actualizar imagen-----|-----Actualizar imagen-----|-----Actualizar imagen-----|
|--------Actualizar framebuffer--------|--------Actualizar framebuffer--------|--------Actualizar framebuffer--------|

Es posible que actualizar el framebuffer ocupe menos tiempo que actualizar la imagen, no se sabe.

Entonces mi pregunta es: ¿cuál creen que es la mejor forma de actualizar el framebuffer sin que haya tearing (se mezcle el frame anterior con el actual)?

Lo ideal sería que fuera lo más eficientemente posible, es decir, que si ya se ha leido una imagen, el actualizador del framebuffer no tenga que esperar a que se lea otra imagen.

No pido que me den código, solo pregunto cual sería la idea de implementación (no sé si me explico)
15  Programación / Programación C/C++ / (Consulta) No entiendo la función libusb_control_transfer en: 22 Junio 2017, 12:28 pm
Hola, muy buenas.

Leyendo el manual de referencia de la librería libusb, no entiendo la función libusb_control_transfer. Podéis verlo aquí: http://libusb.org/static/api-1.0/group__syncio.html#gadb11f7a761bd12fc77a07f4568d56f38

Lo que no entiendo muy bien son los parámetros. Por ejemplo, querría leer datos de un pen drive. Muchas gracias
16  Sistemas Operativos / GNU/Linux / (Consulta) Tratando con Arch Linux y GNOME. Problemas con la posición del cursor en: 10 Junio 2017, 22:12 pm
Hola, muy buenas. Tengo Arch Linux con la arquitectura x86_64 y GNOME 3.22.2. El problema que tengo es que si una aplicación intenta modificar la posición del cursor cuando este es visible, básicamente el sistema operativo/GNOME ignora la orden. Este problema se puede ver en BLENDER o con una sencilla aplicación de OpenGL/GLFW. Si llamo a la función de GLFW glfwSetCursorPos cuando el ratón está visible, la orden se ignora, y cuando la llamo con glfwSetInputMode(ventana, GLFW_CURSOR, GLFW_CURSOR_HIDDEN) entonces si que tiene efecto la función glfwSetCursorPos. Otro caso que reafirma mi teoría es cuando juego a PayDay 2, puesto que la cámara funciona, y para que funcione se tiene que modificar la posición del cursor.

No estoy acostumbrado a solucionar problemas que me ocurren en sistemas Linux, pero me gustaría empezar a solucionarlos por mi mismo. Tengo conocimientos de C/C++, y supongo que GNOME está escrito en C. Entonces, si no saben el error, pero sabrían por dónde empezar, por favor, díganme :D Muchas gracias
17  Programación / Programación C/C++ / (Consulta) [C++] ¿Se puede modificar una constante en la sobrecarga de '='? en: 20 Febrero 2017, 18:02 pm
Hola, muy buenas. Hoy quería preguntar si hay alguna forma de modificar una constante en la sobrecarga del operador igual. Ejemplo:


Código
  1. class Foo {
  2.   private:
  3.      const int VARIABLE;
  4.  
  5.   public:
  6.      [...]
  7.      Foo & operator=(const Foo &foo) {
  8.         VARIABLE = foo.VARIABLE; // Aquí marcaría error
  9.      }
  10.      [...]
  11. };


Muchas gracias
18  Programación / Programación C/C++ / [C++11] (Consulta) El compilador me pide que ponga la palabra typename en: 19 Febrero 2017, 17:39 pm
Hola, muy buenas. Estoy haciendo una clase 'Vector' en C++ (tamaño dinámico, pero se asigna una sola vez). El caso es que uno de los constructores acepta una initializer_list, donde puedes poner todos los componentes del vector. Este es el código:

Código
  1. template<typename TipoComponente>
  2. class Vector {
  3.   [...]
  4.   public:
  5.      [...]
  6.      Vector(const std::initializer_list<TipoComponente> &componentes)
  7.         : Vector(componentes.size())
  8.      {
  9.         typename std::initializer_list<TipoComponente>::const_iterator iterador = componentes.begin();
  10.         int i = 0;
  11.  
  12.         while(iterador != componentes.end()) {
  13.            vector[i] = *iterador;
  14.            i++;
  15.            iterador++;
  16.         }
  17.      }
  18.      [...]
  19. };

LA pregunta es: ¿por qué el compilador me obliga a poner la palabra 'typename' antes de la declaración del iterador? Este es el error que sale si no la pongo:

Código:
||=== Build: Debug in Reversi (compiler: GNU GCC Compiler (x86_64)) ===|
..\Reversi\reversi\herramientas\vector.hpp||In constructor 'Vector<TipoComponente>::Vector(const std::initializer_list<_Tp>&)':|
..\Reversi\reversi\herramientas\vector.hpp|22|error: need 'typename' before 'std::initializer_list<_Tp>::const_iterator' because 'std::initializer_list<_Tp>' is a dependent scope|
..\Reversi\reversi\herramientas\vector.hpp|22|error: expected ';' before 'iterador'|
..\Reversi\reversi\herramientas\vector.hpp|25|error: 'iterador' was not declared in this scope|
..\Reversi\reversi\herramientas\vector.hpp||In instantiation of 'Vector<TipoComponente>::Vector(const std::initializer_list<_Tp>&) [with TipoComponente = float]':|
C:\Users\Carlos\Desktop\Programacion\Proyectos\Reversi\main.cpp|43|required from here|
..\Reversi\reversi\herramientas\vector.hpp|22|error: dependent-name 'std::initializer_list<_Tp>::const_iterator' is parsed as a non-type, but instantiation yields a type|
..\Reversi\reversi\herramientas\vector.hpp|22|note: say 'typename std::initializer_list<_Tp>::const_iterator' if a type is meant|
||=== Build failed: 4 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

No me entero muy bien de lo que me queire decir el compilador. Espero que me puedan ayudar. Muchas gracias!
19  Programación / Programación C/C++ / [C++][Consulta] Error inesperado con destructor en: 3 Febrero 2017, 04:28 am
Hola, muy buenas. Estoy realizando un árbol binario en C++. Lo estoy encapsulando en una clase. Como cualquier árbol binario, este tiene un dato, un puntero a la izquierda y otro a la derecha. El problema es que al llamar al destructor (el cual lo elimina), el programa finaliza brúscamente. El constructor es el siguiente:

Código
  1. template <typename T>
  2. class ArbolBinario {
  3.   private:
  4.      T dato;
  5.      ArbolBinario *izda;
  6.      ArbolBinario *dcha;
  7.  
  8.      void Eliminar(ArbolBinario *rama) {
  9.         if(NULL != rama->izda)
  10.            Eliminar(rama->izda);
  11.  
  12.         if(NULL != rama->dcha)
  13.            Eliminar(rama->dcha);
  14.  
  15.         delete rama;
  16.      }
  17.  
  18.   public:
  19.      [...]
  20.  
  21.      ~ArbolBinario() {
  22.         EliminarRamaIzda();
  23.         EliminarRamaDcha();
  24.      }
  25.  
  26.      [...]
  27.  
  28.      void EliminarRamaIzda() {
  29.         if(NULL != izda) {
  30.            Eliminar(izda);
  31.            izda = NULL;
  32.         }
  33.      }
  34.  
  35.      void EliminarRamaDcha() {
  36.         if(NULL != dcha) {
  37.            Eliminar(dcha);
  38.            dcha = NULL;
  39.         }
  40.      }
  41.  
  42.      [...]
  43. };

Este es la función main:

Código
  1. int main() {
  2.   ArbolBinario<int> arbol;
  3.  
  4.   arbol.SetDato(7, "");
  5.   arbol.ReemplazarRamaIzda(20, "");
  6.   arbol.ReemplazarRamaIzda(5, "0");
  7.   arbol.ReemplazarRamaDcha(7, "00");
  8.   arbol.ReemplazarRamaDcha(4, "0");
  9.   arbol.ReemplazarRamaIzda(1, "01");
  10.   arbol.ReemplazarRamaDcha(2, "01");
  11.   arbol.ReemplazarRamaDcha(8, "");
  12.   arbol.ReemplazarRamaIzda(10, "1");
  13.  
  14.   cout << arbol.ToString();
  15.  
  16.   return 0;
  17. }

Cuando uso el depurador, pongo un punto de ruptura en el destructor, y obtengo lo siguiente:

Código:
Breakpoint 1, ArbolBinario<int>::~ArbolBinario (this=0x28fddc, __in_chrg=<optimized out>) at main.cpp:84
84               EliminarRamaIzda();
(gdb) continue
Continuing.

Breakpoint 1, ArbolBinario<int>::~ArbolBinario (this=0x720fb0, __in_chrg=<optimized out>) at main.cpp:84
84               EliminarRamaIzda();
(gdb) continue
Continuing.

Breakpoint 1, ArbolBinario<int>::~ArbolBinario (this=0x7212f0, __in_chrg=<optimized out>) at main.cpp:84
84               EliminarRamaIzda();
(gdb) continue
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x004099bb in ArbolBinario<int>::Eliminar (this=0x0, arbol=0x726f58)
    at main.cpp:13
13            void Eliminar(ArbolBinario *arbol) {

Lo que no sé es: ¿por qué se llama 3 veces al constructor? En la última llamada, ¿por qué el puntero this vale 0 (supongo que por esto el programa crashea)?

Muchas gracias
20  Informática / Electrónica / (Arduino) ¿Qué estructura de paquete me recomiendan para comunicación serial? en: 29 Enero 2017, 22:26 pm
Hola, muy buenas! Estoy estableciendo una comunicación serial entre mi Arduino y mi PC, pero me doy cuenta de que pierdo a veces algún byte. Entonces creo que usar un sistema de paquetes evitaría este problema en mayor medida (lo he supuesto, no demostrado). Me baso en que la transmisión de datos por red se hace por paquetes.

Entonces la pregunta es: ¿qué estructura de paquete me aconsejan que tenga? Principalmente espero enviar variables tipo entero pero quizás envíe otras cosas.

Sé que la estructura básica (y lógica) de estos es:

Cabecera
Datos
Cola

Lo que no sé es cuantos bytes debería ocupar cada cosa, sobre todo los datos. En la cabecera no tengo ni idea de qué debería incluir, y en la cola tampoco.

Muchas gracias!
Páginas: 1 [2] 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines