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 Mensajes
Páginas: 1 ... 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 [121] 122 123 124 125
1201  Programación / Programación C/C++ / Re: Volver a programar en: 4 Julio 2013, 15:04 pm
Aprender a montar en coche no es saber encenderlo y meter primera... hay que dominar muchos más aspectos para poder decir que alguien sabe conducir.

Para aprender a programar en c++ tienes que aprender no solo a manejar la stl, sino también cómo funciona el concepto de clase, qué es el polimorfismo y cómo se explota, como funciona la herencia, de qué formas se pueden sobrecargar operadores, implicaciones del constructor copia y del operador de asignación, responsabilidad de los destructores...

Si te limitas a manejar la stl y todo con lenguaje procedural no estás programando en c++.
1202  Programación / Programación C/C++ / Re: Volver a programar en: 4 Julio 2013, 14:51 pm
c++ es mas facil que c

jejeje

va a ser que no.

En c no tienes que lidiar con sobrecarga de funciones y operadores, polimorfismo, herencia...

En c es más complicado hacer aplicaciones grandes porque no tienes encapsulación y tienes que andar con pies de plomo... pero c, para aprender, es muuuucho más facil.

Lo que pasa es que el que aprende c++ después de aprender c... es casi un paseo.
1203  Programación / Programación C/C++ / Re: Ayuda - Cómo agregar puertos TCPI y UPD en: 4 Julio 2013, 14:49 pm
firewall físico o por software??

Si es físico tendrías que hacerte con la documentación que explique la forma de configurar ( mediante telnet, snmp, etc ) el firewall concreto que vayas a utilizar.

Si es por software... cada firewall tiene su propia interfaz, seguro que en internet vienen las instrucciones para los más comunes.

La parte que no entiendo es qué aporta preparar una aplicación que, a raiz de una instrucción recibida por una segunda, abra los puertos de un router... no sería más sencillo que la primera aplicación los abriese directamente?
 
1204  Programación / Programación C/C++ / Re: Duda con el envío encadenado a través de cout en C++ en: 4 Julio 2013, 11:19 am
wxdevcpp es una versión nueva y actualizada por otro autor.

Aunque personalmente sigo prefiriendo el CodeBlocks

La última release es de hace casi dos años... y el portal no es que registre demasiada actividad desde entonces.
1205  Programación / Programación C/C++ / Re: Ayuda ordenar ejes en: 4 Julio 2013, 09:37 am
Si es un polígono convexo se entiende que debería tener un centro de gravedad (CG)... es decir, un punto central que esté equidistante de todos sus vértices.

Con todo, para que sea convexo, se entiende que si la secuencia de vértices es V1, V2, V3, ..., entonces el ángulo CG^V1 es menor que CG^V2 y este a su vez menor que CG^V3... y así

Es como un reloj, el CG será el eje de las manecillas, si suponemos V0 las 12, V1 la 1, V2 las 2, etc...
CG^V0 = 0
CG^V1 = 360/12 = 30
CG^V2 = 360/6 = 60
CG^V3 = 90
...

Solo habría que ordenar esos ángulos y ya tendrías el orden de los vértices.

Bueno, técnicamente CG^V0 es un vector, lo que tienes que hacer es coger un primer vector como referencia y después calcular el ángulo del resto de vectores con respecto al de referencia.
1206  Programación / Programación C/C++ / Re: Duda con el envío encadenado a través de cout en C++ en: 4 Julio 2013, 08:40 am
De todas formas ya te digo yo que wxdevcpp, devcpp, qtcreator, codeblocks... no son los responsables de que no te funcione un código... no dejan de ser editores de c++.

Al final todo pasa por el compilador de c++ y ese es el que te genera el ejecutable.

Si en uno te compila y en otro no generalmente es porque tienes mal configurado el proyecto.

Y a título personal, procura no usar los devcpp ni derivados, llevan años sin mantenimiento y dan problemas.
1207  Programación / Programación C/C++ / Re: Ayuda - Cómo agregar puertos TCPI y UPD en: 4 Julio 2013, 08:37 am
No tienes muy claros los conceptos sobre sockets. Me explico:

Que un puerto esté abierto significa que hay una aplicación escuchando por ese puerto... si la aplicación se cierra el puerto también.

Esto significa que un puerto no queda abierto indefinidamente porque si... son las aplicaciones las responsables de solicitárselos al sistema operativo y este puede adjudicárselo o denegárselo ( porque el puerto ya esté adjudicado a otra aplicación o sea un puerto reservado ).

Otra cosa diferente es abrir puertos en un router... abrir un puerto en un router significa que has creado una ruta en el router, de tal forma que todas las peticiones que lleguen a través de una interfaz determinada ( generalmente la de internet ) y por un puerto determinado se redirijan a una ip determinada ( generalmente el pc que va a hacer uso de ese puerto ).

Y luego podría aburrirte con varias horas de explicaciones sobre sockets, puertos, redes, paquetes y demás, pero creo que con esto te puedes hacer una idea de cómo funcionan los puertos y replantearte tu aplicación.
1208  Programación / Programación C/C++ / Re: Ayuda! Problema de un menu!!! en: 3 Julio 2013, 17:46 pm
Me refería a algo más o menos así...

Fíjate que mi main tiene unas 40 líneas frente a las 200 del tuyo... aparte de que el mío funciona jejejeje.

Serás capaz de terminarlo??

Hay cosas que habría hecho de forma diferente, pero he intentado mantener el estilo de tu programa.

Código
  1. //* JUEGO CONECTA 4*//
  2.  
  3. /*Librerias utilizadas*/
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7.  
  8. #define LENGTH_JUGADOR    40
  9. #define LENGTH_CEDULA     8
  10. #define MAX_PARTIDAS      20
  11. #define DIM               16 //Constante utilizada para definir la maxima dimension del tablero
  12.  
  13. /* Estructuras */
  14.  
  15. struct jugador
  16. {
  17.  char nom_jug[ LENGTH_JUGADOR + 1 ];
  18.  char ced_jug[ LENGTH_CEDULA + 1 ];
  19. };
  20.  
  21. struct partida
  22. {
  23.  // Para almacenar los datos del jugador1
  24.  struct jugador jugador1;
  25.  
  26.  // Para almacenar los datos del jugador2
  27.  struct jugador jugador2;
  28.  
  29.  // Almacena 1 ( ganador jugador 1 ) o 2 ( ganador jugador 2 ).
  30.  int ganador;
  31. };
  32.  
  33. struct manager_partidas
  34. {
  35.  // Almacena todas las partidas jugadas
  36.  struct partida partidas[ MAX_PARTIDAS ];
  37.  
  38.  // Indica la partida actual
  39.  int num_partida;
  40. };
  41.  
  42. /*PROCEDIMIENTOS Y FUNCIONES*/
  43.  
  44. void pausa( );
  45. int mostrar_menu( int );
  46. int calcula_numero_jugadores( struct partida* );
  47. void pedir_datos_jugador( struct jugador* );
  48. void mostrar_resultados( struct manager_partidas* );
  49.  
  50. void inicializar_tablero(char tablero[][DIM],int);
  51. int juegan_O_(char tabla[][DIM],int,int);
  52. int juegan_X_(char tablero[][DIM],int,int);
  53. int cuatro_en_linea(char tablero[][DIM],int);
  54. int limpiar(char nom_jug[]);
  55.  
  56. int main()
  57. {
  58.  char tablero[ DIM ][ DIM ];
  59.  int numero_jugadores = 0;
  60.  int opcion = -1;
  61.  
  62.  // Se inicializa la estructura de las partidas
  63.  struct manager_partidas manager;
  64.  memset( &manager, 0, sizeof( manager ) );
  65.  
  66.  while ( opcion != 5 )
  67.  {
  68.    // Puntero a la partida actual... para evitar líneas de código
  69.    struct partida* partida_actual = &manager.partidas[ manager.num_partida ];
  70.  
  71.    // Se comprueba el número de jugadores en la partida actual
  72.    numero_jugadores = calcula_numero_jugadores( partida_actual );
  73.  
  74.    opcion = mostrar_menu( numero_jugadores );
  75.  
  76.    switch ( opcion )
  77.    {
  78.      case 1:
  79.        pedir_datos_jugador( &partida_actual->jugador1 );
  80.        break;
  81.  
  82.      case 2:
  83.        pedir_datos_jugador( &partida_actual->jugador2 );
  84.        break;
  85.  
  86.      case 3:
  87.        // Se simula una partida, para ello se elige un ganador
  88.        // y se incrementa el contador de la partida
  89.        partida_actual->ganador = ( manager.num_partida % 2 );
  90.        ++manager.num_partida;
  91.  
  92.        // Jugar
  93.        break;
  94.  
  95.      case 4:
  96.        // Se pasa una referencia para no copiar toda la estructura
  97.        mostrar_resultados( &manager );
  98.        break;
  99.  
  100.      case 5:
  101.        break;
  102.    }
  103.  }
  104. }
  105.  
  106. void pausa( )
  107. {
  108.  printf( "\nPulse una tecla para continuar..." );
  109.  fseek( stdin, 0, SEEK_END);
  110.  getchar( );
  111. }
  112.  
  113. int mostrar_menu( int numero_jugadores )
  114. {
  115.  int ok = 0;
  116.  int opcion = -1;
  117.  
  118.  while ( !ok )
  119.  {
  120.    // Limpiamos el buffer, por si acaso
  121.    fseek( stdin, 0, SEEK_END);
  122.  
  123.    system( "cls" );
  124.    printf( "\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n" );
  125.    printf( "  1) Ingresar datos del primer jugador\n\n" );
  126.    printf( "  2) Ingresar datos del segundo jugador\n\n" );
  127.    printf( "  3) Jugar\n\n" );
  128.    printf( "  4) Listar todos los juegos realizados\n\n" );
  129.    printf( "  5) Salir\n\n\n" );
  130.  
  131.    if ( opcion == 3 )
  132.    {
  133.      printf( "  Error: Antes de jugar debe ingresar los datos de los dos jugadores. \n\n\n" );
  134.      printf( "  REINGRESE SU OPCION: " );
  135.    }
  136.    else if ( opcion != -1 )
  137.    {
  138.      printf( "  Opcion incorrecta \n\n\n" );
  139.      printf( "  REINGRESE SU OPCION: " );
  140.    }
  141.    else
  142.    {
  143.      printf( "INGRESE SU OPCION: " );
  144.    }
  145.  
  146.    scanf( "%d", &opcion );
  147.    if ( opcion == 3 )
  148.      ok = ( numero_jugadores == 2 );
  149.    else
  150.      ok = ( opcion > 0 && opcion < 6 );
  151.  }
  152.  
  153.  return opcion;
  154. }
  155.  
  156.  
  157. int calcula_numero_jugadores( struct partida* partida )
  158. {
  159.  int jugadores = 0;
  160.  
  161.  if ( partida->jugador1.nom_jug[ 0 ] != '\0' )
  162.    ++jugadores;
  163.  
  164.  if ( partida->jugador2.nom_jug[ 0 ] != '\0' )
  165.    ++jugadores;
  166.  
  167.  return jugadores;
  168. }
  169.  
  170.  
  171. void pedir_datos_jugador( struct jugador* jugador )
  172. {
  173.  int ok = 0;
  174.  
  175.  while ( !ok )
  176.  {
  177.    // Se limpia el buffer de entrada.
  178.    fseek( stdin, 0, SEEK_END);
  179.  
  180.    printf( "\n Ingrese su Nombre: " );
  181.    scanf("%40[^\n]", jugador->nom_jug );
  182.    ok = ( jugador->nom_jug[ 0 ] != '\0' );
  183.  
  184.    if ( !ok )
  185.      printf("\n ERROR" );
  186.  }
  187.  
  188.  ok = 0;
  189.  while ( !ok )
  190.  {
  191.    // Se limpia el buffer de entrada.
  192.    fseek( stdin, 0, SEEK_END);
  193.  
  194.    printf( "\n Ingrese su cedula: " );
  195.    scanf("%40[^\n]", jugador->ced_jug );
  196.    ok = ( jugador->ced_jug[ 0 ] != '\0' );
  197.  
  198.    if ( !ok )
  199.      printf("\n ERROR" );
  200.  }
  201.  
  202.  pausa( );
  203. }
  204.  
  205. void mostrar_resultados( struct manager_partidas* manager )
  206. {
  207.  if ( manager->num_partida == 0 )
  208.  {
  209.    printf ( "No se han jugador partidas." );
  210.  }
  211.  else
  212.  {
  213.    int i;
  214.    for ( i=0; i<manager->num_partida; ++i )
  215.    {
  216.      printf( "Partida %d\n", i+1 );
  217.      printf( "\n");
  218.      printf( "Jugador 1: %s\n", manager->partidas[ i ].jugador1.nom_jug );
  219.      printf( "Cedula:    %s\n", manager->partidas[ i ].jugador1.ced_jug );
  220.      printf( "Jugador 2: %s\n", manager->partidas[ i ].jugador2.nom_jug );
  221.      printf( "Cedula:    %s\n", manager->partidas[ i ].jugador2.ced_jug );
  222.      printf( "Ganador jugador %d\n\n", manager->partidas[ i ].ganador );
  223.    }
  224.  }
  225.  
  226.  pausa( );
  227. }
1209  Programación / Programación C/C++ / Re: Ayuda - Cómo agregar puertos TCPI y UPD en: 3 Julio 2013, 16:26 pm
veo que no tienes las ideas muy claras.

.cpp es la extensión utilizada para los archivos de código fuente de c++... no es ejecutable de por si.

Si lo compilas y enlazas ( en windows ) se genera un archivo con extensión .exe que ese sí es ejecutable.

En cualquier caso tendrás alguna idea de c++ no?? o te has lanzado a la aventura ??

si te has lanzado a la aventura, empieza por cosas más sencillas o cambia de lenguaje. Empezar de primeras en c++ manejando estructuras y sockets no es la mejor forma de iniciarse en una aventura... y menos aún si ni tan siquiera sabes qué quieres hacer.

Es simple... si lo haces por diversión y aprender, te gustaría entender lo que estás haciendo hasta el punto de ser capaz de reproducirlo sin ayuda... si lo haces por obligación y quieres que otros lo hagan por ti... hay opciones de pago para los que no quieren esforzarse.

Aún así te voy a dar algunas ideas:

1. si pretendes abrir varios puertos en varias llamadas el método "app -parametros" no te va a funcionar porque por cada llamada crearás una nueva instancia del programa... cada copia del programa manejará los puertos que le hayas indicado en la llamada correspondiente.

2. En base al punto 1, una posibilidad es comunicarse entre las dos aplicaciones por sockets, empleando para ello un puerto conocido por ambas aplicaciones para entablar conversación y que se puedan enviar órdenes... como abrir otros puertos.

3. Si lo de los sockets no te va, se pueden enviar mensajes entre aplicaciones... pero es más engorroso e implica llamadas al sistema y procesos más difíciles de trazar.

4. No hay 4, al menos no de momento mientras no haya más información sobre la mesa.
1210  Programación / Programación C/C++ / Re: necesito ayuda urgente! en: 3 Julio 2013, 16:00 pm
Has tenido suerte, hize una cosa parecida hace unos días:

Eres demasiado bueno dándole la solución... al menos le podías haber puesto un desbordamiento de buffer para que se lo currase un poco jejeje.

Estoy por montar un chiringuito para que el que quiera que le resuelvan las prácticas que pague. Ya que no va a hacer esfuerzo intelectual, al menos que lo haga económicamente....
Páginas: 1 ... 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 [121] 122 123 124 125
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines