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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 ... 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 [132] 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 ... 161
1311  Programación / Programación C/C++ / Re: Averiguar valor de variable sin utilizar el identificador de la misma.[C] en: 23 Abril 2016, 10:06 am
Cuando el número es negativo está en complemento a 2 (usado en arquitecturas de PC, otras pueden usar otro tipo de representación). Para que un entero sea negativo el bit de mayor peso debe estar a 1.

Ahora, en cada iteración de tu programa generas un valor, x, que no llega a tener el bit de mayor peso a 1 hasta el final. Por esa razón C interpreta que tiene un número grande todo el rato.
1312  Programación / Programación C/C++ / Re: Bytes escritos al reves en archivo en: 22 Abril 2016, 21:34 pm
Con la función htons. Es una función muy usada en la comunicación por internet ya que acomoda la representación interna, sea cual sea la de la máquina a big endian, que es el estándar de internet, y de paso, la representación que necesitas en tu archivo.
1313  Programación / Programación C/C++ / Re: Eliminacion Árbol Binario en: 22 Abril 2016, 19:04 pm
Para nodos con usa sola rama sí, pero si tienen dos esta solución no es suficiente.
Para el siguiente árbol:
Código:

        5
    3       7
  2   4   6   8

Si se elimina el 3 debe quedar así:
Código:

        5
    2       7
      4   6   8

Pero si se elimina el 5 debe quedar así:
Código:

        3
    2       7
      4   6   8
1314  Programación / Programación C/C++ / Re: Eliminacion Árbol Binario en: 22 Abril 2016, 16:17 pm
Pon, con tus propias palabras, qué quieres conseguir.
1315  Programación / Programación C/C++ / Re: programando en c en: 22 Abril 2016, 15:35 pm
Dice cuando x = 0.
1316  Programación / Programación C/C++ / Re: [AYUDA] retornar un char * valido en: 22 Abril 2016, 14:45 pm
Observa las siguientes funciones, puede que te ayude con lo que buscas.
Código
  1. char* purge_char(const char *buff, char c) {
  2.    /* Genera un nuevo dato en el montón que debe ser liberado
  3.      * con la función free.
  4.      */
  5.    char *retval = NULL;
  6.    int buff_len;
  7.    int i;
  8.    int pos = 0;
  9.  
  10.    if(buff) {
  11.        buff_len = strlen(buff);
  12.        retval = malloc(buff_len + 1);
  13.        if(retval) {
  14.            for(i = 0; i < buff_len; ++i) {
  15.                if(buff[i] != c) {
  16.                    retval[pos] = buff[i];
  17.                    pos++;
  18.                }
  19.            }
  20.        }
  21.        retval[i] = '\0';
  22.    }
  23.    /* La línea de código que viene a continuación es por si
  24.      * prima el espacio a la velocidad. En caso contrario coméntala
  25.      * o bórrala.
  26.      */
  27.    retval = realloc(retval, strlen(retval) + 1);
  28.  
  29.    return retval;
  30. }

Código
  1. void purge_char2(char *buff, char c) {
  2.    /* Modifica el argumento buff para no gastar memoria. Por
  3.      * contrapartida el contenido anterior de buff queda destruido.
  4.      * El tamaño asignado a buff sigue teniendo el tamaño origina.
  5.      * La función no puede ser llamada usando una constante de cadena
  6.      * o va a fallar.
  7.      */
  8.    int i, j;
  9.  
  10.    if(buff) {
  11.        for(i = 0, j = 0; i < strlen(buff); ++i) {
  12.            if(buff[i] != c) {
  13.                buff[j] = buff[i];
  14.                j++;
  15.            }
  16.        }
  17.        buff[j] = '\0';
  18.    }
  19. }
1317  Programación / Programación C/C++ / Re: programando en c en: 22 Abril 2016, 14:38 pm
¿Así?
Código:
&  *
+ ***
+*****
+ ***
+  *

¿O así?
Código:
& *
+***
+****
+***
+ *
1318  Programación / Programación C/C++ / Re: [C] Estructuras con miembros privados. en: 22 Abril 2016, 00:11 am
Si estás detrás de un compilador GCC o parecido este es el makefile:

Código
  1. CC=gcc
  2.  
  3. p: main.o dato.o dato.h
  4. ${CC} main.o dato.o dato.h -o p
  5. dato.o: dato.c dato.h
  6. ${CC} -c dato.c dato.h
  7. main.o: main.c dato.h
  8. ${CC} -c main.c dato.h

Aquí se generan dos objetos que después se enlazan: por un lado el propio del tipo de dato, aquí dato.o, y por otro el del cliente consumidor del tipo de dato, aquí main.o.
dato.o se compila a partir de dato.c, del cual el cliente no sabe nada, y dato.h. Como programador darás el objeto generado y la cabecera dato.h a tu cliente.

Tu cliente hará su propio programa incluyendo la cabecera dato.h a su código (aquí representado por main.c) y enlazando su código objeto, aquí representado por main.o, con el que tu le proporcionas.
Compilado de esta forma no puede acceder al miembro del struct ya que solo ve el dato incompleto de la cabecera. Los datos internos están ocultos en el código objeto.
Lo único que ve el cliente es la interfaz proporcionada por el archivo de cabecera.
1319  Programación / Programación C/C++ / Re: ayuda: programa en lenguaje c en: 22 Abril 2016, 00:04 am
Lo irás viendo con el tiempo pero las funciones deben ser lo más independientes posibles. Deben pasársele los datos mínimos para realizar su trabajo.
Código:
control=MENU(&opcion,   control, intentos);}while(control==1);
por ejemplo, está mal diseñada. Le pasas una variable control para que te la saque otra vez y dentro de la función ésta sirve solo para saber si debe repetir el ciclo. Esto es mucha dependencia y se debe reestructurar.
Le pasas por referencia la 'opcion' pero la usa dentro y no debe variarla. Has gastado tiempo y recursos realizando un trabajo que podría haber hecho la función sola. Y de nuevo has creado una dependencia que se podría haber evitado.
La interfaz de las funciones siempre debe ser lo más simple posible.

Por otra parte has escrito algo sin sentido
Código:
printf("2f\t", dificultad);
Supongo que es una cadena de control para mostrar el dato dificultad. El doble error que hay en ella es que querías hacer %2f, pero resulta que dificultad en un entero, no un real. Tampoco tiene sentido terminarlo en \t, a lo mejor te referirías \n. Su código debería ser
Código:
printf("%2d\n", dificultad);

Como puedes ver la lista de errores, tanto técnicos como de lógica eran muchos y opté por reescribir el código, era más rápido que enumerarlos, de esta forma podrías comparar las dos formas de hacer y que sacaras tus conclusiones al ver las diferencias entre uno y otro.
1320  Programación / Programación C/C++ / [C] Estructuras con miembros privados. en: 21 Abril 2016, 23:45 pm
Como digo esto se trata de C y no de C++.

Es posible emular, en C, el comportamiento de miembros privados de datos definidos por el programador, al estilo de la POO, para que los usuarios de esa estructura no puedan acceder directamente a los datos que hay dentro de ella.

Las ventajas que tiene esta técnica:
1. El usuario no puede modificar los datos directamente y deben pasar por los filtros que imponga el programador.
2. El programador puede cambiar los datos internos que tiene la estructura y su interfaz (funciones getters y setters) sin que el usuario tenga que recompilar todo su código para hacer uso de estas modificaciones.

Los inconvenientes:
1. Sólo se puede situar la estructura en memoria del montón con lo que aparece el problema de la fragmentación de la memoria
2. La memoria se debe liberar ya sea mediante free o una función que proporcione el programador a modo de destructor.

Aquí va el código:


dato.h
Código
  1. #ifndef __DATO_H__
  2. #define __DATO_H__
  3.  
  4. typedef struct __dato__ DATO;
  5.  
  6. DATO* new_dato();
  7. void delete_dato(DATO* objeto);
  8. int get_dato(DATO* objeto);
  9. void set_dato(DATO* objeto, int valor);
  10.  
  11. #endif


dato.c
Código
  1. #include <stdlib.h>
  2. #include "dato.h"
  3.  
  4. struct __dato__ {
  5.    int miembro_privado;
  6. };
  7.  
  8. DATO* new_dato() {
  9.    DATO* d = malloc(sizeof(DATO));
  10.    d->miembro_privado = 0;
  11.    return d;
  12. }
  13.  
  14. void delete_dato(DATO* objeto) {
  15.    free(objeto);
  16. }
  17.  
  18. int get_dato(DATO* objeto) {
  19.    return objeto->miembro_privado;
  20. }
  21.  
  22. void set_dato(DATO* objeto, int valor) {
  23.    objeto->miembro_privado = valor;
  24. }



Ahora el cliente:

main.c
Código
  1. #include <stdio.h>
  2. #include "dato.h"
  3.  
  4. int main() {
  5.    DATO *d;
  6.  
  7.    d = new_dato();
  8.    set_dato(d, 5);
  9.    printf("%i\n", get_dato(d));
  10.  
  11.    /* d->miembro_privado = 4; /* <- Esto va a fallar */
  12.    /* printf("%i\n", get_dato(d)); */
  13.  
  14.    delete_dato(d);
  15.  
  16.    return 0;
  17. }
Páginas: 1 ... 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 [132] 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines