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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 [2] 3 4
11  Programación / Programación C/C++ / chat con hilos + winsock en C en: 24 Enero 2012, 20:58 pm
Hola a todos:

Les cuento, ya tengo implementado un chat bidireccional hecha en winsok, para ello tuve que hacerlo con hilos de ejecucion, hasta el momento el programa no acepta mas de un cliente. Funciona bien, el problema es que se ve asi:



ocurre que se ve feo que ingrese los datos, y que este ahí mismo el historial de converzación, por eso tengo ganas de el mismo hilo me genere una ventana aparte donde pueda ingresar los datos y una ventana donde pueda ver los datos del historial de converzación, algo asi:



Lo mismo para el cliente.

Se que la existe una funcion llamada CreateProcess() que al pasarle un flag a la funcion, me genera otra ventana, pero lo que yo no quiero es ejecutar desde otro *.exe a otro *.exe. La idea es tener un solo ejecutable nomas. Ojalá alguien pueda ayudarme please!

saludOS!


12  Programación / Programación C/C++ / Re: [AYUDA] VB Split en: 23 Enero 2012, 05:59 am
Si sabes programar en c++ te darás cuenta de que no cambia mucho el asunto.

Enlace

saludos!
13  Programación / Programación C/C++ / Re: Suma triangulo superior matriz en: 22 Enero 2012, 20:52 pm
La verdad es que no le veo el grado de dificultad.

Esto es lo que hace toda la tarea.

Código:
    for(i=0; i<t; i++)
        for(j=0; j<t; j++)
            if ( j > i )
                x += v[i][j];

Acá dejo el code completo

Código
  1. #include <stdio.h>
  2.  
  3. #define MAX 5
  4.  
  5. void leer_matriz (unsigned v[][MAX], unsigned t);
  6. void triangulo_superior (unsigned v[][MAX], unsigned t);
  7.  
  8. int main()
  9. {
  10.    unsigned t, v[MAX][MAX];
  11.  
  12.    do
  13.    {
  14.        printf ( "Cuantos elementos va a tener la matriz?: " );
  15.        scanf ( "%u", &t );
  16.    } while (t < 0 || t > MAX);
  17.  
  18.    leer_matriz (v, t);
  19.    triangulo_superior (v, t);
  20.  
  21.    setbuf (stdin, NULL);
  22.    getchar ();
  23.    return 0;
  24. }
  25.  
  26. void leer_matriz (unsigned v[][MAX], unsigned t)
  27. {
  28.    unsigned i, j;
  29.  
  30.    for (i = 0; i < t; i++)
  31.    {
  32.        for (j = 0; j < t; j++)
  33.        {
  34.            printf ( "Dame el elemento M[%u][%u]: ", (i + 1), (j + 1) );
  35.            scanf ( "%u", &v[i][j] );
  36.        }
  37.    }
  38.  
  39.    for (i = 0; i < t; i++)
  40.    {
  41.        for (j = 0; j < t; j++)
  42.            printf ( "%u\t", v[i][j] );
  43.  
  44.        printf ( "\n" );
  45.    }
  46. }
  47.  
  48. void triangulo_superior (unsigned v[][MAX], unsigned t)
  49. {
  50.    unsigned i, j;
  51.    int x = 0;
  52.  
  53.    for (i = 0; i < t; i++)
  54.        for (j = 0; j < t; j++)
  55.            if (j > i)
  56.                x += v[i][j];
  57.  
  58.    printf ( "La suma es: %d", x );
  59. }
  60.  
  61.  

saludos!
14  Programación / Programación C/C++ / validacion de datos en C + getch() en windows y linux sin conio en: 17 Enero 2012, 16:11 pm
Hola a todos:

Voy hacer mi primer aporte en el foro. Se trata de unas funciones que sirven para validar datos de entradas, y unas cuantas macros. Tambien incluye la implementación del getch() que tanto conocemos, en windows y linux.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #ifdef WIN32
  5.    #include <windows.h>
  6.    #define NEWLINE      13
  7.    #define BACKSPACE    8
  8. #else
  9.    #include <termios.h>
  10.    #define NEWLINE      10
  11.    #define BACKSPACE    127
  12. #endif
  13.  
  14. #define TAM              20
  15. #define SPACE            32
  16. #define MIN_NUM          48
  17. #define MAX_NUM          57
  18. #define MIN_LETRA_MAY    65
  19. #define MAX_LETRA_MAY    95
  20. #define MIN_LETRA_MIN    97
  21. #define MAX_LETRA_MIN    122
  22.  
  23. char getch ( );
  24. void validar_letras (char *);
  25. void validar_numeros (int *);
  26.  
  27. int main (void)
  28. {
  29.  
  30.    char buffer[TAM];
  31.    int numero;
  32.  
  33.    printf ( "ingrese una cadena: " );
  34.    validar_letras (buffer);
  35.  
  36.    printf ( "\nla cadena ingresada es: %s\n", buffer );
  37.  
  38.    setbuf (stdin, NULL);
  39.  
  40.    printf ( "Ingrese un numero: " );
  41.    validar_numeros ( &numero );
  42.  
  43.    printf ( "\nEl numero ingresado es: %d\n", numero );
  44.  
  45.    return 0;
  46.  
  47. }
  48.  
  49. void validar_numeros (int *numero)
  50. {
  51.    int i;
  52.    char p[TAM], tecla;
  53.  
  54.    /*importante inicializar los valores
  55.     ya que la implementacion que sigue lo amerita*/
  56.    i = 0;
  57.    p[0] = '\0';
  58.  
  59.    do
  60.    {
  61.        tecla = getch ();//atrapa un caracter sin dejar un eco
  62.  
  63.        /*BACKSPACE es la tecla para eliminar un caracter
  64.         y el i obligaotiamente tiene que ser mayor que cero
  65.         ya que si entra al if y tiene valor cero, el valor de i
  66.         decrementará y p tendría un subindice -1, "p[-1]"¿?*/
  67.        if ( i > 0 && tecla == BACKSPACE )
  68.        {
  69.            printf ( "\b \b" );
  70.            p[--i] = '\0';
  71.        }
  72.        else
  73.        {
  74.            /*rango de numeros y SPACE es el espacio*/
  75.            if ( (tecla >= MIN_NUM && tecla <= MAX_NUM)  ||
  76.                  tecla == SPACE || tecla == '-' )
  77.            {
  78.                /*obligamos a que no hayan mas de un guion, y que
  79.                 el guion este al principio*/
  80.                if ( tecla == '-' && i == 0 )
  81.                {
  82.                    printf ( "%c", tecla );
  83.                    p[i++] = tecla;
  84.                }
  85.                else
  86.                {
  87.                    if ( tecla != '-' )
  88.                    {
  89.                        printf ( "%c", tecla );
  90.                        p[i++] = tecla;
  91.                    }
  92.                }
  93.            }
  94.        }
  95.    } while ((tecla != NEWLINE || p[0] == '\0') && i < TAM);
  96.    /* NEWLINE inidica el Enter, i tiene que ser menor
  97.     que TAM pues de lo contrario, estaría accediendo
  98.     a memoria no reservada*/
  99.    p[i] = '\0'; /*colocamos el fin de cadena*/
  100.    *numero = atoi (p);
  101.    /*convierte una cadena en un numero
  102.     10 quiere decir que está en base decimal*/
  103.  
  104.    return ;
  105. }
  106.  
  107. void validar_letras (char *p)
  108. {
  109.    int i;
  110.    char tecla;
  111.  
  112.    /*importante inicializar los valores
  113.     ya que la implementacion que sigue lo amerita*/
  114.    i = 0;
  115.    p[0] = '\0';
  116.  
  117.    do
  118.    {
  119.        tecla = getch ();//atrapa un caracter sin dejar un eco
  120.  
  121.        /*BACKSPACE es la tecla para eliminar un caracter o de retroceso
  122.         y el i obligaotiamente tiene que ser mayor que cero
  123.         ya que si entra al if y tiene valor cero, el valor de i
  124.         decrementará y p tendría un subindice -1, "p[-1]"¿?*/
  125.        if ( i > 0 && tecla == BACKSPACE )
  126.        {
  127.            printf ( "\b \b" );
  128.            p[--i] = '\0';
  129.        }
  130.        else
  131.        {
  132.            /*rango de letras mayusculas y minusculas y SPACE es el espacio*/
  133.            if ( (tecla >= MIN_LETRA_MAY && tecla <= MAX_LETRA_MAY)  ||
  134.                 (tecla >= MIN_LETRA_MIN && tecla <= MAX_LETRA_MIN)  ||
  135.                  tecla == SPACE )
  136.            {
  137.                printf ( "%c", tecla );
  138.                p[i++] = tecla;
  139.            }
  140.        }
  141.    } while ((tecla != NEWLINE || p[0] == '\0') && i < TAM);
  142.    /* NEWLINE inidica el Enter, i tiene que ser menor
  143.     que TAM pues de lo contrario, estaría accediendo
  144.     a memoria no reservada*/
  145.  
  146.    p[i] = '\0'; /*colocamos el fin de cadena*/
  147.  
  148.    return ;
  149. }
  150.  
  151. #ifdef WIN32
  152.  
  153. char getch ( )
  154. {
  155.    char car;
  156.    DWORD leidos, modo;
  157.  
  158.    GetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), &modo );
  159.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo &
  160.                     !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT );
  161.    ReadConsole ( GetStdHandle (STD_INPUT_HANDLE), &car, 1, &leidos, NULL );
  162.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo );
  163.    return car;  
  164. }
  165.  
  166. #else
  167.  
  168. char getch ( )
  169. {
  170.  
  171.    struct termios _ter, fuente;
  172.    char car;
  173.  
  174.    if ( tcgetattr (fileno(stdin), &_ter) )
  175.    {
  176.        perror ( "Error para obtener información\n" );
  177.        return -1;
  178.    }
  179.  
  180.    fuente = _ter;
  181.  
  182.    _ter.c_lflag &= ~ICANON;
  183.    _ter.c_lflag &= ~ECHO;
  184.    _ter.c_cc[VMIN] = 1;
  185.    _ter.c_cc[VTIME] = 0;
  186.  
  187.    if ( tcsetattr (fileno(stdin), TCSANOW, &_ter) )
  188.    {
  189.        perror ( " Error para obtener información\n" );
  190.        return -1;
  191.    }
  192.  
  193.    car = getchar ( );
  194.  
  195.    if ( tcsetattr (fileno(stdin), TCSANOW, &fuente) )
  196.    {
  197.        perror ( "Error para obtener información" );
  198.        return -1;
  199.    }
  200.  
  201.    return car;
  202. }
  203. #endif
  204.  
  205.  

ojalá le sirva a alguien.

PD: este code lo publiqué en otro lado, por cualquier cosa.

saludos!



15  Programación / Programación C/C++ / Re: Problema la copiar cadena con strcpy en: 16 Enero 2012, 22:37 pm
Hola: bienvenido al foro. mira, te cuento


Código
  1. /*Creo que aquí me da el error con "strcpy(&argumento1, argv[1]);" y con otros...*/
  2. if (argumento1=="--help")
  3. {
  4. printf("En construcción.\n");
  5. }
  6.  
  7.  
¿Alguien me da la forma de copiar argv[1] en argumento1? Gracias de antemano.

lo que recibe strcpy es una dirección, argumento1 ya es una dirección, asi que no hagas esto "&argumento1". Lo otro, es que argumento1 no tiene memoria reservada, asi que no puedes copiar dentro de esa funcion una cadena determinada.

asi tiene que quedar:

Código
  1. if ( (argumento1  = (char *)malloc (TAM*sizeof (char))) == NULL )
  2. {
  3.    printf ( "Error, no puso asignar memoria\n" );
  4.    return -1;
  5. }
  6.  
  7. strcpy(argumento1, argv[1]);
  8.  

Tampoco puedes comparar cadenas de forma directa

Código:
 if (argumento1=="--help")

tienes que hacerlo con una función que no es para nada dificil de implementar, o simplemente usar la funcion de la string.h llamada strcmp() para hacer comparaciones de cadenas

Yo en particular, compararía la cadena directamente sin necesidad de malgastar memoria, pero supongo que es cosa de gustos.

acá te dejo el codigo:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAM 20
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    char *argumento1;
  10.  
  11.    if ( argc != 2 )
  12.    {
  13.        printf ( "ERROR: debe ingresar un parametro, pida ayuda al comando help\n" );
  14.        printf ( "Ej: c:\\programa.exe --help\n" );
  15.        return -1;
  16.    }
  17.  
  18.    if ( (argumento1  = (char *)malloc (TAM*sizeof (char))) == NULL )
  19.    {
  20.        printf ( "Error, no puso asignar memoria\n" );
  21.        return -1;
  22.    }
  23.  
  24.    //funcion que copia la cadena de argv[1] y lo deja en argumento1
  25.    strcpy (argumento1, argv[1]);
  26.  
  27.    //funcion que compara cadenas
  28.    if ( !strcmp (argumento1,"--help") )
  29.    {
  30.        printf("En construcción.\n");
  31.    }
  32.    return 0;
  33. }
  34.  

16  Programación / Programación C/C++ / Re: validar texto y numero!! Turbo c++ en: 16 Enero 2012, 17:55 pm
Una manera de validar bien mis entradas de datos,  y que me gusta muchisimo, es:

Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. #define TAM 10
  5.  
  6. void validar_letras (char *p);
  7. char getch ( );
  8.  
  9. int main ()
  10. {
  11.    char buffer[TAM];
  12.  
  13.    printf ( "ingrese cadena: " );
  14.    validar_letras (buffer);
  15.  
  16.    printf ( "\n%s", buffer );
  17.  
  18.    setbuf (stdin, NULL);
  19.    getchar ();
  20.    return 0;
  21. }
  22.  
  23. void validar_letras (char *p)
  24. {
  25.    int i;
  26.    char tecla;
  27.  
  28.    /*importante inicializar los valores
  29.     ya que la implementacion que hice lo amerita*/
  30.    i = 0;
  31.    p[0] = '\0';
  32.  
  33.    do
  34.    {
  35.        tecla = getch ();//atrapa un caracter sin dejar un eco
  36.  
  37.        /*8 es la tecla para eliminar un caracter
  38.         y el i obligaotiamente tiene que ser mayor que cero
  39.         ya que si entra al if y tiene valor cero, el valor de i
  40.         decrementará y p tendría un subindice -1, "p[-1]"¿?*/
  41.        if ( i > 0 && tecla == 8 )
  42.        {
  43.            printf ( "\b \b" );
  44.            p[--i] = '\0';
  45.        }
  46.        else
  47.        {
  48.            /*rango de letras mayusculas y minusculas y 32 es el espacio*/
  49.            if ( (tecla >= 65 && tecla <= 95)  ||
  50.                 (tecla >= 97 && tecla <= 122) ||
  51.                  tecla == 32 )
  52.            {
  53.                printf ( "%c", tecla );
  54.                p[i++] = tecla;
  55.            }
  56.        }
  57.    } while ((tecla != 13 || p[0] == '\0') && i < TAM);
  58.    /* 13 inidica el Enter, i tiene que ser menor
  59.     que TAM pues de lo contrario, estaría accediendo
  60.     a memoria no reservada*/
  61.  
  62.    p[i] = '\0'; /*colocamos el fin de cadena*/
  63.  
  64.    return ;
  65. }
  66.  
  67. char getch ( )
  68. {
  69.    char car;
  70.    DWORD leidos, modo;
  71.  
  72.    GetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), &modo );
  73.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo &
  74.                     !ENABLE_ECHO_INPUT & !ENABLE_PROCESSED_INPUT );
  75.    ReadConsole ( GetStdHandle (STD_INPUT_HANDLE), &car, 1, &leidos, NULL );
  76.    SetConsoleMode ( GetStdHandle (STD_INPUT_HANDLE), modo );
  77.    return car;  
  78. }
  79.  

Para que decir con los numeros, es lo mismo.

saludOS!
17  Programación / Programación C/C++ / Re: Calcular días que quedan hasta final de año en: 16 Enero 2012, 00:24 am
Que bueno que te haya servido mi ayuda!

saludOS
18  Programación / Programación C/C++ / Re: Calcular días que quedan hasta final de año en: 15 Enero 2012, 20:14 pm
Te arreglé un poco el codigo. Pero vas a tener que validar otras cosas, como por ejemplo. que cuando te pida el dia. colocas dia 30, despues te pide el mes, y colocas por ejemplo el mes 2, que quiere decir el mes de febrero que tiene 28 dias, tiene que indicarte un error, que te vuelva a pedir el dato. Eso es trabajo tuyo, no es dificil de arreglar ese detalle.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int main ()
  5. {
  6.    int n, d, i, transcurridos, restantes;
  7.    int dias[] = {
  8.        31, 28, 31, 30,
  9.        31, 30, 31, 31,
  10.        30, 31, 30, 31
  11.    };
  12.  
  13.    /*inicialiso los valores para hacer operaciones aritmeticas*/
  14.    transcurridos = 0;
  15.    restantes     = 0;
  16.  
  17.    do
  18.    {
  19.        printf ( "Elige un dia del 1 al 31: " );
  20.        scanf ( "%d", &d );
  21.    } while ( d < 1 || d > 31 );
  22.  
  23.    do
  24.    {
  25.        printf ( "Elige un mes del 1 al 12: " );
  26.        scanf ( "%d", &n );
  27.    } while ( n < 1 || n > 12 );
  28.  
  29.    /*sumo hasta el mes anterior y le sumo la cantidad de dias
  30.     transcurridos*/
  31.    for ( i = 0; i < (n - 1); i++ )
  32.    {
  33.        transcurridos += dias[i];// No existe el dia cero
  34.    }
  35.  
  36.    transcurridos += d;
  37.    restantes = (365 - transcurridos);
  38.  
  39.    printf ( "Dias restantes: %d\n", restantes );
  40.    system ( "pause>nul" );
  41.  
  42.    return 0;
  43. }
  44.  
  45.  

saludos!
19  Programación / Scripting / Re: Expresion regular en Perl en: 11 Enero 2012, 21:16 pm
PD: La fuente por excelencia para hablar de expresiónes de Perl es el perlretut, la documentación oficial de perldoc. La referencia a esto sería esta

Saludos

Gracias por el dato.

saludOS!
20  Programación / Scripting / Re: Expresion regular en Perl en: 11 Enero 2012, 19:49 pm

La otra expresión:
Código
  1. if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/)
lo que hace es verificar que la cadena EMPIECE por 'a' o 'b', pero dará como válido cosas como 'astilla' o 'barco'.

Saludos

Código:
C:\>validar.pl
Ingrese nombre de usuario: barco
No pertenece al lenguaje

C:\>validar.pl
Ingrese nombre de usuario: astilla
No pertenece al lenguaje

C:\>

Lo que dice acá if ($nombre =~ m/[^ab]/ | $nombre =~ m/^$/) es que si encuentra una letra que sea diferende de 'a' ó 'b', o si hay una cadena vacia, que entre al if() de lo contrario, que entre al else, entrando al else me dice que si pertenece al lenguaje. Y los resultados con w = "astilla" y w = "barco", no es cierto de que me da como si perteneciera al lenguaje.

Y lo de la m, ya habia comentado de que no era necesario usarlo, pero no sabia porque, gracias por aclarar eso.

PD:

[^\@ \t] busca cualquier carácter que no sea un @, una tabulación o un espacio. Hay que señalar que \ delante de @ es opcional, ya que el símbolo @ no tiene significados particulares en este contexto, pero funciona también con \@

[^]    indica un conjunto de caracteres que no pueden aparecer

Fuente:

     URL

     URL



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