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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 125
51  Programación / Programación C/C++ / Re: Ayuda .cpp Snippet en: 6 Marzo 2015, 11:11 am
El código por sí solo no hace nada... necesita ser convertido en código ejecutable para que la máquina sepa interpretar las órdenes (una excepción son los lenguajes interpretados como PERL, javascript o PHP, en este caso necesitas un intérprete que reconozca ese lenguaje y lo sepa procesar).

En cualquier caso, ese "using" me da a entender que el código que tienes entre manos no es C++, sino C#. C# pertenece a la plataforma .NET y no es directamente portable a C++ nativo, ya que las librerías son diferentes y en C# hay multitud de utilidades inexistentes en C++.

Entiendo que el archivo que tienes que abrir con Matlab es el binario que contiene la captura de kinect.
52  Programación / Programación C/C++ / Re: lista enlazada ayudita en: 6 Marzo 2015, 08:12 am
por que este codigo por ejemplo :
Código
  1. void add( int d )
  2.  {
  3.    if ( _next == 0 )
  4.      _next = new LinkList( d );
  5.    else
  6.      _next->add( d );
  7.  }
  8.  

por que  add si agrega 'd' cuando _next != 0 ?

En este caso se supone que vas a crear una lista de elementos tal que (el número entre paréntesis es el valor de ese nodo):

LinkList(0) -> LinkList(10) -> LinkList(34) -> null

Entonces, si tu al primer elemento de la lista le dices que quieres añadir un nuevo valor, éste se ha de añadir al final de la lista. Lo que hace ese código es verificar si el elemento actual es el último de la lista, si es así añade el nuevo elemento a continuación, en caso contrario le pasa el valor al siguiente elemento de la lista... en algún momento un elemento será el final de la lista y el nuevo valor se insertará a continuación.

Es decir, suponiendo la lista que te he puesto antes, y yo llamo a LinkList(0)->add(2) se ejecutarán las siguientes acciones:

* LinkList(0)->_next, que es LinkList(10), no es nulo, por lo que realizo la llamada LinkList(0)->_next->add(10), es decir LinkList(10)->add(10)
* LinkList(10)->_next, que es LinkList(34), no es nulo, ejecuto por tanto LinkList(10)->_next->add(10), es decir, LinkList(34)->add(10)
* LinkList(34)->_next es nulo, por lo que voy a crear un nuevo elemento con valor 2 y hago que _next apunte a dicho elemento: LinkList(34)->_next = LinkList(2)

y lo mismo con 
Código
  1. void Print( )
  2.  {
  3.    std::cout << "Dat Value : " << _value << std::endl;
  4.  
  5.    if ( _next )
  6.      _next->Print( );
  7.  }
  8.  

por que transversa las lista ? o por que los imprime todos ?

Como te he comentado, tienes una colección de objetos LinkList, de tal forma que el primero sabe llegar al segundo, el segundo al tercero y así. Si yo llamo al método "Print" de cualquiera de esos elementos puedo hacer dos cosas:

* Un bucle que recorra todos los elementos desde el actual hasta el final
* Presentar el valor actual y llamar al método "Print" del siguiente elemento (si existe)

En cualquiera de los dos casos se imprimirá la lista al completo. Intenta seguir el código haciéndote un esquema en papel. Te ayudará a entenderlo mejor.

53  Programación / Programación C/C++ / Re: Error al crear punteros a estructuras. en: 5 Marzo 2015, 16:55 pm
Código
  1. //         (*nuevo) = (Primero)malloc(sizeof(struct Array));

Debería ser

Código
  1.         nuevo = (Primero)malloc(sizeof(struct Array));

Si tienes esa línea comentada no se va a reservar memoria para los elementos que siguen al primero y eso solo puede resultar desastroso para tu programa.

Por otro lado, "Primero" no parece un nombre demasiado apropiado para un alias de "puntero a estructura".

Código complicado sin necesidad:

Código
  1. struct Array {
  2.   int valor;
  3.   int tam;
  4.   Primero* sig;
  5. };

"Primero", como hemos dicho, es un puntero. Dado que no es necesario que "sig" sea un puntero doble, se puede dejar únicamente como "Primero sig". Lo de "Primero" lo voy a respestar, aunque insisto que no es un nombre del que debas estar orgulloso :)

Código
  1. Primero *ant = primero;
  2.    int i;
  3.    for(i=1; i<n; i++) {
  4.        Primero nuevo;
  5.         (*nuevo) = (Primero)malloc(sizeof(struct Array));
  6.        nuevo->valor=0;
  7.        nuevo->tam = (*primero)->tam;
  8.        nuevo->sig = NULL;
  9.        (*ant)->sig = &nuevo;
  10.        ant = (*ant)->sig;
  11.    }

Otro puntero doble "ant" innecesario. Si le quitamos ese doble puntero el código queda más legible:

Código
  1. Primero ant = *primero;
  2.    int i;
  3.    for(i=1; i<n; i++) {
  4.        Primero nuevo = (Primero)malloc(sizeof(struct Array));
  5.        nuevo->valor=0;
  6.        nuevo->tam = (*primero)->tam;
  7.        nuevo->sig = NULL;
  8.        ant->sig = nuevo;
  9.        ant = ant->sig; // o ant = nuevo, como prefieras
  10.    }

54  Programación / Programación C/C++ / Re: ¿procesos y memoria virtual en windows? en: 4 Marzo 2015, 08:08 am
El mejor diccionario en estos casos es la propia experiencia. Dudo que haya un diccionario específico para traducir este tipo de términos.

Un saludo.
55  Programación / Programación C/C++ / Re: Como probar una conexion UDP en: 4 Marzo 2015, 08:07 am
Ordenar paquetes quizás no tenga sentido en el caso que comentas. Lo que puedes hacer es poner un contador incremental en cada paquete. Entonces, lo que tienes que hacer es almacenar el id del último paquete recibido... si recibes un paquete con un identificador anterior, lo descartas sin miedo.

También puedes, para evitar desbordamientos del contador, usar una ventana de descartes. Por ejemplo, si recibo el identificador X se que he de descartar automáticamente los 10.000 mensajes anteriores, si recibo un mensaje con cualquier otro id entonces lo tomo como válido.

Otra opción para evitar el desbordamiento es usar la fecha y la hora en lugar de un contador, pero esta solución implica algo más de código.

Por otro lado, si no pasa nada porque se pierda algún paquete es preferible usar UDP, ya que es mucho más versátil y lo puedes adaptar a cualquier necesidad. Además, piensa que, en general, un paquete se perderá únicamente si hay sobrecarga en la red, lo cual no suele ser algo tan extremadamente común.

Un saludo.
56  Programación / Programación C/C++ / Re: Como probar una conexion UDP en: 3 Marzo 2015, 13:52 pm
Los protocolos con conexión, por ejemplo tcp, tampoco garantizan nada de eso, sería un caos si cada vez que tu creas una conexión tuvieses poder sobre los protocolos de enrutamiento,  sobre los recursos, etc,  del resto de Internet...

Con TCP los paquetes no se "pierden" porque entonces eso significa que la conexión se ha cortado. Así mismo, TCP garantiza el orden en el que llegan los paquetes porque crea una conexión persistente y única por la que van a viajar todos los mensajes que se transmitan por esa conexión. Es por este motivo que una conexión TCP es, por definición, mucho más pesada y lenta que una conexión UDP.

Al menos así es como lo recordaba.
57  Programación / Programación C/C++ / Re: lista enlazada ayudita en: 3 Marzo 2015, 13:47 pm
1. Si creas un elemento nuevo no tiene sentido que, este elemento cree otro nuevo, porque este a su vez creará otro nuevo y así hasta el infinito:
Código
  1.   LinkList(int t =0) :dat(t)
  2.   {
  3.         nxt = new LinkList(0);
  4.   }

Lo suyo es que, en este caso, "nxt" no apunte a ningún sitio:

Código
  1.   LinkList(int t =0) :dat(t), nxt(0)
  2.   {
  3.   }

2. También tienes un fallo en el método "add":

Código
  1.   void add(LinkList *ll,int d){
  2.      nxt = ll;
  3.      dat =d;
  4.   }
  5.  

Si añades un elemento no debes modificar el valor del elemento actual, sino añadir un elemento nuevo. ¿Qué sucede si nxt ya apuntaba a un elemento válido? crearás lagunas de memoria y perderás información.

Lo suyo sería que add recibese únicamente uno de los dos parámetros que recibe actualmente, ya que un objeto de tipo LinkList ya tiene el valor que facilitas en 'd':

* Si pasas un objeto de tipo LinkList, la idea es buscar el lugar correcto para insertar el elemento. En este caso 'd' te sobra

* Si pasas el valor de 'd', creas un objeto de tipo LinkList y lo insertas donde mejor te convenga.

3.Y, para terminar, comando "Print":

Código
  1.   void Print(){
  2.      while(nxt != NULL)
  3.      {
  4.          cout <<"Dat Value : "<< dat<<std::endl;
  5.          nxt = nxt->nxt;
  6.  
  7.      }    
  8.   }
  9.  

Si modificas la variable interna "nxt", vuelves a perder información. Si tienes X elementos en la lista y llamas a "Print", después de la llamada "nxt" va a valer 0... has perdido la lista!!!

4.Y, bueno, esto así a bote pronto. Si analizas un poco más en detalle tu código te darás cuenta de que es un poco bizarro. Resulta que LinkList no es realmente una lista enlazada, sino que además representa a cada nodo de la lista.... un poco raro.

Si tu idea es que LinkList represente una lista enlazada de enteros lo suyo sería, bien tener dos objetos diferentes (uno representa la lista y otro los nodos), bien hacer que los diferentes LinkList que van a estar en la lista aprendan a delegar unos de otros:

Opción 1: dos objetos:

Código
  1. #include <cstdlib>
  2. #include <cstdlib>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. struct Node
  8. {
  9.    int value;
  10.    Node* next;
  11.  
  12.    Node( int val )
  13.      : value( val ),
  14.        next( 0 )
  15.    {
  16.    }
  17.  
  18.    ~Node( )
  19.    {
  20.      delete next;
  21.    }
  22. };
  23.  
  24. class LinkList
  25. {
  26.   Node* _first;
  27.  
  28.  public:
  29.  
  30.  ~LinkList( )
  31.  {
  32.    delete _first;
  33.  }
  34.  
  35.  LinkList( )
  36.    : _first( 0 )
  37.  {
  38.  }
  39.  
  40.  void add( int d)
  41.  {
  42.    Node* newNode = new Node( d );
  43.  
  44.    if ( _first == 0 )
  45.      _first = newNode;
  46.    else
  47.    {
  48.      Node* last = _first;
  49.  
  50.      while( last->next )
  51.        last = last->next;
  52.  
  53.      last->next = newNode;
  54.    }
  55.  }
  56.  
  57.  void Print( )
  58.  {
  59.    Node* node = _first;
  60.    while( node != 0 )
  61.    {
  62.      cout <<"Dat Value : " << node->value << std::endl;
  63.      node = node->next;
  64.    }
  65.  }
  66. };
  67.  
  68. int main(int, char **)
  69. {
  70.   LinkList f;
  71.   f.add(7);
  72.   f.add(6);
  73.   f.Print();
  74.  
  75.   system("PAUSE");
  76.   return EXIT_SUCCESS;
  77. }

Opción 2: Objetos enlazados:

Código
  1. #include <cstdlib>
  2. #include <cstdlib>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. class LinkList
  8. {
  9.   LinkList* _next;
  10.   int _value;
  11.  
  12.  public:
  13.  
  14.  ~LinkList( )
  15.  {
  16.    delete _next;
  17.  }
  18.  
  19.  LinkList( int d )
  20.    : _next( 0 ),
  21.      _value( d )
  22.  {
  23.  }
  24.  
  25.  void add( int d )
  26.  {
  27.    if ( _next == 0 )
  28.      _next = new LinkList( d );
  29.    else
  30.      _next->add( d );
  31.  }
  32.  
  33.  void Print( )
  34.  {
  35.    std::cout << "Dat Value : " << _value << std::endl;
  36.  
  37.    if ( _next )
  38.      _next->Print( );
  39.  }
  40. };
  41.  
  42. int main(int, char **)
  43. {
  44.   LinkList f(0);
  45.   f.add(7);
  46.   f.add(6);
  47.   f.Print();
  48.  
  49.   system("PAUSE");
  50.   return EXIT_SUCCESS;
  51. }

Un saludo.
58  Programación / Programación C/C++ / Re: Como convertir código php a c++ en: 3 Marzo 2015, 13:25 pm
http://en.wikipedia.org/wiki/HipHop_for_PHP

Es un proyecto que aparcaron hace un par de años.
59  Programación / Programación C/C++ / Re: Como probar una conexion UDP en: 3 Marzo 2015, 09:40 am
Tengo algo asi como una aplicacion de consola, un cliente y un server, la idea es establecer una conexion UDP y poder testear la velocidad de la conexion

UDP no garantiza ni la entrega ni el orden de los paquetes. Si bien esto permite que éste protocolo sea, de base, más ligero que TCP, estas características traen problemas con los que no hay que lidiar en el caso de TCP. Por ejemplo, dado que no se mantiene una conexión persistente, cada paquete puede viajar por un camino diferente y, en consecuencia, el tiempo que tardan en llegar dos paquetes diferentes puede ser radicalmente diferente. Salvo que estés en una red local y el camino para comunicar ambos equipos sea único, es posible que la medida de tiempos no sea especialmente útil.

La pregunta seria: ¿como? Como hago para saber el tiempo exacto que demoro en llegar un dato de un pc al otro?

Aún así, si quieres testear el tiempo tienes que tener en cuenta lo siguiente:

* Si el tiempo a medir es únicamente en una dirección, es decir, únicamente te interesa el tiempo que tarda el paquete en ir de A a B, necesitas que ambos equipos tengan la hora perfectamente sincronizada. Si no es así, dado que estamos hablando de plazos de, normalmente, una centésima o menos, los cálculos de tiempo que realices tendrán un margen de error bastante amplio. Para contar el tiempo en este caso necesitas enviar en el mensaje la hora exacta del equipo A en el momento de enviar el mensaje; el equipo B recibe la hora, la compara con su hora interna y calcula la diferencia.

* Si el tiempo a medir es el de una petición y una respuesta, has de tener en cuenta que hay mensajes que se pueden perder y, los que no se pierdan, pueden tener tiempos de respuesta bastante dispares. El cálculo de tiempo en este caso es similar al anterior: el equipo A empaqueta la hora en el mensaje y lo envía, el equipo B recibe el mensaje, recupera la hora y se la envía de vuelta al equipo A. Ahora el equipo A calcula la diferencia entre la hora recibida y la hora actual y con eso obtienes el tiempo de respuesta.

Lo suyo sería hacer un envío de varios mensajes diferentes para intentar calcular un tiempo medio, pero imagino que ya has pensado en eso.

Un saludo.
60  Programación / Programación C/C++ / Re: Alguien me explica este codigo en: 3 Marzo 2015, 08:32 am
Yo pensaba que el día de los inocentes era en diciembre.

¿En serio pretendes que nos estudiemos ese código para dártelo mascado?
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 125
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines