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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 ... 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [67] 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 ... 161
661  Programación / Programación C/C++ / Re: Sistema de reservacion de aerolinea[C] en: 20 Diciembre 2017, 20:02 pm
Se debe a que estudias material muy desfasado.

El primer warning que te lanza es porqué toda función debe declarar el tipo de dato que devuelve. Antes del estándar de 1989 las funciones, si no se declaraba su tipo de dato devuelto, se consideraban int. Actualmente es obligatorio indicar ese dato.

El segundo warning viene de que la función asignar asiento debe devolver un entero, sin embargo se llega hasta el final de ella sin devolver dato alguno. Debe haber una sentencia return con un entero.
662  Programación / Programación C/C++ / Re: error: 1d returned exit status en: 18 Diciembre 2017, 00:17 am
És error del enlazador (linker). Lo que te indica es que no puede encontrar la definición de un símbolo.

Normalmente se da al usar una librería diferente a la estándar pero no se le ha informado al enlazar dónde se encuentra, ya sea cuando se le llama por línea de comandos o a través del IDE. Una librería que forma parte del estándar pero que se debe indicar al explícitamente es la matemática math.h o cmath. Si has usado alguna de sus funciones y no la has incluido en el linker, ese es el fallo.
663  Programación / Programación C/C++ / Re: Matriz dinámica en: 16 Diciembre 2017, 13:17 pm
Te quitarías de problemas si en vez de usar aritmética de punteros lo hicieras con subíndices, como si se tratara de un array. Así solo te tendrías que preocupar del elemento y no de dónde está.

No tengo máquina para probar pero esta línea no me gusta
scanf("%d",((*punmem)+i*columnas+j));

Cuando un poco más arriba lo has hecho de esta forma
*(punmem+i)=(int *)malloc(columnas*sizeof(int));

Fíjate en los paréntesis.
664  Programación / Programación C/C++ / Re: Donde incluir librerías en clases en: 16 Diciembre 2017, 13:01 pm
Y añado más: no incluyas librerías por incluir, es decir, si no vas a usar nada de ellas no escribas los incluyes, como en el caso del mail.cpp y clase.h.

665  Programación / Programación C/C++ / Re: matriz de movimiento del caballo en c++ en: 14 Diciembre 2017, 12:47 pm
De las coordenadas que has dado las tienes que sumar a la posición actual del caballo y comprobar si hay algo allí o que exista esa casilla (que esté fuera del tablero).

En plan, como te han dicho, int esValida(int x, int y); y que regrese 0 si no puede saltar para allá y 1 si puede saltar.

Sea Cx la posición X del caballo y Cy la posición Y del caballo.
Llamas, por ejemplo, esValida(Cx-2, Cy+1) y si te devuelve 1 cambias la posición del caballo: Cx -= 2; Cy++;

Espero que te sirva, estoy desde el móvil y es complicado formatear el texto.
666  Programación / Programación C/C++ / Re: Eliminar numero negativos de una matriz ( sin librerías) en: 14 Diciembre 2017, 12:32 pm
Un array declarado como int array[dimensión] siempre será del tamaño dimensión. Son estáticos y no se pueden redimensionar. Para eliminar deberían ser dinámicos.

De todas formas se te prohíbe el uso de librerías, no de funciones, por lo que supongo que te piden que hagas un array dinámico con las funciones de insertar, eliminar, leer, etc. Pero que te las tienes que hacer.
667  Sistemas Operativos / Windows / Re: Error de redundancia cíclica HDD en: 10 Diciembre 2017, 23:27 pm
Puede que solo sea fallo de las cabezas. Si encuentras uno que sea igual ábrelo y sustituye las cabezas. Siempre con cuidado, no vayas a rayar tu disco o doblar las nuevas.

Date cuenta que en este momento ya has abierto el disco y la superficie se llenará enseguida de polvo, así que haz una copia de seguridad del disco antes de que empiece a fallar de nuevo.
668  Programación / Programación C/C++ / Re: ejercicio de numeros primos en: 10 Diciembre 2017, 20:33 pm
Estas cambiando de C++ a C y este último hasta su estándar C99 no acepta bool,, además de que debes incluir stdbool. Por tanto: debes indicar al compilador que use C99 o superior e incluyendo la librería mencionada. O cambias bool por int e indicas falsedad con el número 0 y trueno con cualquier número diferente a 0.
669  Programación / Programación C/C++ / Re: ayuda basica en: 9 Diciembre 2017, 23:47 pm
El segundo bucle no hace nada más que repetir las mismas operaciones desde 1 hasta deno (a.i.).

Lo más sencillo es que encontraras, mediante el método de Euclides, el MCD del numerador y el denominador y dividieran ambos por éste.
670  Programación / Programación C/C++ / Re: QR en C tipo ASCII en: 9 Diciembre 2017, 20:03 pm
Veo, por otros mensajes, que sigue sin salirte. Sin saber como se trabaja a nivel de bits no podrás resolver este problema.

Te paso un código que he realizado que solo realiza hasta la codificación de la cadena e imprime los recuadros de posición.

El programa es básico pues se puede optimizar bastante más, pero para mejorar la sencillez te lo dejo así, está comentado. Espero que te sirva:

Código
  1. #include <stdio.h>
  2. #include <string.h> // strlen
  3. #include <ctype.h> // isprint
  4.  
  5. #define tamQR 21
  6. #define info "www.elhacker.net"
  7.  
  8. // Ya que la tabla QR es el objeto principal de este programa
  9. // lo hago global, para ahorrarme trabajo con las funciones.
  10. // Cada posición x y guardará un 0, si no ese bit no debe estar
  11. // activo o un valor distino a 0 si ese bit debe tener información.
  12. int QR[tamQR][tamQR];
  13.  
  14. // Nota: Voy a llamar cursor a la posición x e y dentro del QR
  15. // donde se vaya a escribir un dato.
  16.  
  17. // Una ayuda para manejar las cosas dentro de las funciones
  18. typedef enum {
  19.    ABAJO,
  20.    ARRIBA,
  21.    DESDE_ABAJO,
  22.    DESDE_ARRIBA
  23. } DIRECCION;
  24.  
  25. // --------------------------------------------------------------
  26. // TODO ESTO NO CODIFICA TUS BYTES, SOLO REPRESENTA EL
  27. // DIBUJO BÁSICO DEL QR
  28. // Crea el cuadrado exterior de los recuadros de posición
  29. void cuadrado_exterior(int x, int y) {
  30.    // Variables auxiliares para mover el cursor
  31.    // de dibujo por todo el recuadro
  32.    int xc, yc;
  33.  
  34.    // Dibujo las líneas horizontales superior e inferior
  35.    for(xc = x; xc < x+7; ++xc) {
  36.        QR[y][xc] = 1;
  37.        QR[y+6][xc] = 1;
  38.    }
  39.  
  40.    // Dibujo las líneas verticales
  41.    for(yc = y; yc < y+6; ++yc) {
  42.        QR[yc][x] = 1;
  43.        QR[yc][x+6] = 1;
  44.    }
  45. }
  46.  
  47. // Crea el cuadrado interior de los recuadros de posición
  48. void cuadrado_interior(int x, int y) {
  49.    int xc, yc;
  50.  
  51.    for(yc = y; yc < y+3; ++yc)
  52.        for(xc = x; xc < x+3; ++xc)
  53.            QR[yc][xc] = 1;
  54. }
  55.  
  56. // La función que se debe llamar para dibujar los cuadrados
  57. // pasándole la posición de la esquina superior izquierda
  58. void cuadrado(int x, int y) {
  59.    cuadrado_exterior(x, y);
  60.    cuadrado_interior(x+2, y+2);
  61. }
  62.  
  63. void QR_inicializar() {
  64.    int x, y;
  65.  
  66.    // Borrar todo el QR
  67.    for(y = 0; y < tamQR; ++y)
  68.        for(x = 0; x < tamQR; ++x)
  69.            QR[y][x] = 0;
  70.  
  71.    // Escribir en el los recuadros de posición
  72. cuadrado(0, 0);
  73. cuadrado(14, 0);
  74. cuadrado(0, 14);
  75. }
  76.  
  77. void QR_imprimir() {
  78.    int x, y;
  79.  
  80.    // Se escribirá el carácter 219 o el 176 en la consola
  81.    // según si QR[y][x] es no 0 o 0 respectivamente
  82.    for(y = 0; y < tamQR; ++y) {
  83.        for(x = 0; x < tamQR; ++x) {
  84.            char c = QR[y][x]? 219:176;
  85.            printf("%c", c);
  86.        }
  87.        printf("\n");
  88.    }
  89. }
  90. // --------------------------------------------------------------
  91.  
  92. // La idea es que solo hay dos caminos que se repiten de cada grupo de
  93. // cuatro bits:
  94. //  De abajo a arriba (4 pasos)
  95. //    1) ..   2) ..  3) .o  4) o.
  96. //       .o      o.     ..     ..
  97. //
  98. //  De arriba a abajo (4 pasos)
  99. //    1) .o   2) o.  3) ..  4) ..
  100. //       ..      ..     .o     o.
  101. //
  102. // A cada posición le corresponde un bit del nibble (grupo de 4 bits)
  103. // desde el bit de mayor peso al bit de menor peso.
  104. // Además se dejará el cursor a la siguiente posición (la que seguiría
  105. // el patrón si hubiera continuado una vez más) dejándolo preparado
  106. // para que el próximo nibble se escriba en él sin hacer más cálculos
  107. // (cómo se vera esto se consigue de forma natural con el bucle).
  108. void codificar_nibble(int *x, int *y, char nibble, DIRECCION partida) {
  109.    // La máscara sirve para para conseguir trabajar con los bits
  110.    // que quieres dentro de un dato (si eso búscalo en Google para
  111.    // comprender más). En este caso como es un nibble (conjunto de 4 bits)
  112.    // el bit de mayor peso, dentro de un byte está aquí 00001000 en binario
  113.    // (que es igual a 8 decimal).
  114.    char mascara = 8;
  115.    // La bandera cambiará entre falso (0) y cierto (no 0) para controlar el
  116.    // cursor, si debe ir en una dirección u otra.
  117.    int bandera = 0;
  118.  
  119.    // El desplazamiento de bits sobre la máscara (busca que es eso) irá
  120.    // desplazando el 1 hacia la derecha hasta que mascara tendrá todo 0,
  121.    // momento en que mascara valdrá 0 en decimal y el while se detendrá.
  122.    while(mascara) {
  123.        // Escribe donde se encuentre el cursor el dato del bit mascara
  124.        // del nibble
  125.        QR[*y][*x] = nibble & mascara;
  126.        // Muevo el bit de la mascara un lugar a la derecha
  127.        mascara >>= 1;
  128.  
  129.        // Actualizo el cursor para la siguiente posición
  130.        switch(partida) {
  131.            case ABAJO:
  132.                // No se necesita. Usado para evitar el warning del compilador.
  133.                break;
  134.  
  135.            case ARRIBA:
  136.                // No se necesita. Usado para evitar el warning del compilador.
  137.                break;
  138.  
  139.            // Sacado de tus dibujos
  140.            case DESDE_ABAJO:
  141.                if(!bandera)
  142.                    --*x; // A la izquierda
  143.                else {
  144.                    ++*x; // A la derecha
  145.                    --*y; // y a arriba
  146.                }
  147.                break;
  148.  
  149.            case DESDE_ARRIBA:
  150.                if(!bandera)
  151.                    --*x; // A la izquierda
  152.                else {
  153.                    ++*x; // A la derecha
  154.                    ++*y; // Y abajo
  155.                }
  156.                break;
  157.        }
  158.        bandera = !bandera;
  159.    }
  160. }
  161.  
  162. void codificar_byte(int *x, int *y, unsigned char c, DIRECCION direcc) {
  163.    // La siguiente línea tan solo es para depuración. No es necesaria para
  164.    // crear el QR
  165.    printf("x: %2i, y: %2i, c: %3i ( %c )\n", *x, *y, c, isprint(c)? c : ' ');
  166.  
  167.    // Cada byte se compone de 2 nibbles.
  168.    // La expresión c>>4 & 0xF toma los cuatro bits de más peso del byte.
  169.    // La expresión c & 0xF toma los cuatro bits de menos peso del byte.
  170.    // (En verdad, todo esto del trabajo con bits es necesario para hacer
  171.    // este ejercicio).
  172.    switch(direcc) {
  173.        case ABAJO:
  174.            codificar_nibble(x, y, c>>4 & 0xF, DESDE_ARRIBA);
  175.            codificar_nibble(x, y, c & 0xF, DESDE_ARRIBA);
  176.            break;
  177.  
  178.        case ARRIBA:
  179.            codificar_nibble(x, y, c>>4 & 0xF, DESDE_ABAJO);
  180.            codificar_nibble(x, y, c & 0xF, DESDE_ABAJO);
  181.            break;
  182.  
  183.        case DESDE_ABAJO:
  184.            codificar_nibble(x, y, c>>4 & 0xF, DESDE_ABAJO);
  185.            *x -= 2; // Estas dos expresiones para actualizar el cursor son necesarias
  186.            ++*y;    // pues donde lo deja la función codificar_nibble solo sirve para
  187.                     // ABAJO y ARRIBA. Si miras tu dibujo lo comprenderás
  188.            codificar_nibble(x, y, c & 0xF, DESDE_ARRIBA);
  189.            break;
  190.  
  191.        case DESDE_ARRIBA:
  192.            codificar_nibble(x, y, c>>4 & 0xF, DESDE_ARRIBA);
  193.            *x -= 2; // Ídem al caso anterior
  194.            --*y;
  195.            codificar_nibble(x, y, c & 0xF, DESDE_ABAJO);
  196.            break;
  197.    }
  198. }
  199.  
  200. void codificar_cadena(char *cadena) {
  201.     size_t tam = strlen(cadena); // Tamaño de la cadena.
  202.     int x = 20; // Posición de inicio. Se necesita meter en una variable.
  203.     int y = 14; // porqué las mismas funciones lo irán actualizando.
  204.     int pos = 0; // Serve para indicar qué caracter de la cadena estamos operando.
  205.     int i;
  206.  
  207.     if(tam > 17) tam = 17; // Limitar el tamaño de la cadena a los 17 caracteres inicales.
  208.  
  209.     // Se codifican los caracteres dentro del QR
  210.     for(i = 0; i < 2; ++i) {
  211.         codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ARRIBA);
  212.         codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, DESDE_ABAJO);
  213.         codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ABAJO);
  214.         codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ABAJO);
  215.         codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, DESDE_ARRIBA);
  216.         codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ARRIBA);
  217.     }
  218.     codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ARRIBA);
  219.     codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ARRIBA);
  220.     --y; // Necesario para saltar una línea de bits (ver tu dibujo)
  221.     codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ARRIBA);
  222.     codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, DESDE_ABAJO);
  223.     codificar_byte(&x, &y, tam > pos? cadena[pos++] : 0, ABAJO);
  224. }
  225.  
  226. int main() {
  227. QR_inicializar();
  228. codificar_cadena(info);
  229. QR_imprimir();
  230.  
  231. return 0;
  232. }
Páginas: 1 ... 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [67] 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines