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 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 161
291  Programación / Programación C/C++ / Re: [C++] Qué son las estructuras union y enum? en: 10 Noviembre 2018, 22:20 pm
El comportamiento es el mismo. Si en C has designado un valor a un doble y lo vayas a leer desde un entero, por ejemplo, el valor que se conseguirá será muy extraño.
De igual forma si uno de los miembros es un puntero asignado con malloc y se hace una asignación a un char sin haber liberado la memoria con free, esa memoria continuará capturada pero sin referencia para liberarla.
292  Programación / Programación C/C++ / Re: [C++] Qué son las estructuras union y enum? en: 10 Noviembre 2018, 13:18 pm
ENUM: sirve para crear constantes bajo un nombre que las agrupe. Por defecto el primer elemento de la enumeración vale 0. Las siguientes irán sumándose una unidad.

Código
  1. #include <stdio.h>
  2.  
  3. enum dia {
  4.    LUNES,
  5.    MARTES,
  6.    MIERCOLES,
  7.    JUEVES,
  8.    VIERNES,
  9.    SABADO,
  10.    DOMINGO
  11. };
  12.  
  13. int main() {
  14.    enum dia entrada = LUNES;
  15.  
  16.    printf("%d", entrada);
  17. }
  18.  

Prueba este código cambiando LUNES, dentro de main, por otro de los días.
Se puede cambiar el valor de la constante indicándole el nuevo que puede tener, por ejemplo MIERCOLES = 20 dentro de la enumeración. En ese momento MARTES valdrá 1, MIERCOES 20, JUEVES 21, pues sigue la regla de que el siguiente identificador vale uno más que el anterior.

Hay que diferenciar que una enumeración en C es una simple constante mientras que en C++ es un tipo de dato, con las restricciones que esto supone.



UNION:
Las uniones sirven para dar a una misma posición de memoria diferentes nombres y comportamientos. Es decir en la misma posición de memoria puede empezar un int, un char, un double, un array de 8 floats, una estructura, etc. El tamaño intrínseco de la unión es el mismo que la del dato que ocupa más tamaño, por ejemplo si una unión está constituida como te he explicado antes y el array de 8 floats es quien ocupa más, el tamaño de toda la unión ocupará lo mismo que el array de 8 floats.
Ahora la unión no tiene mucha utilidad, pero antes cuándo los ordenadores no tenían mucha memoria esta era una buena forma de reutilzar la memoria teniendo diferentes identificadores que se usaban en diferentes momentos pero sin ocupar más.

Un ejemplo de su uso:
Código
  1. #include <stdio.h>
  2.  
  3. union var {
  4.    int entero;
  5.    double real;
  6.    char caracter;
  7. };
  8.  
  9. int main() {
  10.    union var mi_dato;
  11.  
  12.    puts("Caracteristicas de mi_dato:");
  13.    printf("Direccion de inicio: %p\n", &mi_dato);
  14.    printf("Tamanyo: %I64d\n\n", sizeof(mi_dato));
  15.  
  16.    // USOS
  17.    mi_dato.entero = 5;
  18.    printf("%d\n", mi_dato.entero);
  19.  
  20.    // ...
  21.  
  22.    mi_dato.real = 14.54;
  23.    printf("%f\n", mi_dato.real);
  24.  
  25.    // ...
  26.  
  27.    mi_dato.caracter = 'c';
  28.    printf("%c\n", mi_dato.caracter);
  29. }

Una forma de usar una unión en estos días podría ser la siguiente:
Código
  1. #include <stdio.h>
  2.  
  3. union por_partes {
  4.    int entero;
  5.    unsigned char trozo[sizeof(int)];
  6. };
  7.  
  8. int main() {
  9.    union por_partes mi_numero;
  10.  
  11.    mi_numero.entero = 4789432;
  12.  
  13.    // Simula enviar por bytes un dato
  14.    puts("Dato a enviar: ");
  15.    printf("%X\n\n", mi_numero.entero);
  16.  
  17.    puts("Enviando byte a byte:");
  18.    for(int i = 0; i < sizeof(mi_numero); ++i) {
  19.        printf("%X\n", mi_numero.trozo[i]);
  20.    }
  21. }

Este programa es dependiente al endiandness de la máquina, pero eso ya es harina de otro costanl
293  Programación / Programación C/C++ / Re: Ayuda C++ suma de digitos hasta un solo digito. en: 10 Noviembre 2018, 12:35 pm
Con log10(x)+1 sabes de cuántos dígitos se compone x. Tendrás que repetir tu función hasta que ese valor sea 1.

Otra opción es que cuentes cuántas veces repites el bucle dentro de tu función.
294  Programación / Programación C/C++ / Re: Grafos en: 7 Noviembre 2018, 19:26 pm
Tienes razón. Voy con desgana.  :-(
295  Programación / Programación C/C++ / Re: Grafos en: 7 Noviembre 2018, 17:07 pm
Una imagen vale mas que mil palabras:
Es en Java, pero la explicación es válida para cualquier lenguaje.
https://www.youtube.com/watch?v=X5hR5iLWBeU
296  Programación / Programación C/C++ / Re: Guardar una linea de enteros separados por un espacio en C en: 6 Noviembre 2018, 20:05 pm
Intenta con strtok
297  Programación / Programación C/C++ / Re: funcion gotoxy en: 21 Octubre 2018, 21:10 pm
Antes de que aparezca el mensaje mueve el cursor de la pantalla donde quieras. No sé si va a funcionar. Inténtalo.
298  Programación / Programación C/C++ / Re: Código que no funciona en: 17 Octubre 2018, 16:06 pm
Esto es sólo lo básico que te ha puesto el profesor. Tienes que terminar la función y además escribir una función main para poder usarla.
299  Programación / Programación C/C++ / Re: Crear un Programa en C que almacene N datos en un arreglo en: 15 Octubre 2018, 15:31 pm
Se sigue declarando un array con una variable y esto depende del compilador que funcione.
Para hacerlo acorde al estándar usas un array grande, suficiente para cubrir tus necesidades, o usas la memoria dinámica con malloc.
300  Programación / Programación C/C++ / Re: Crear un Programa en C que almacene N datos en un arreglo en: 14 Octubre 2018, 23:44 pm
No se puede declarar un array estático usando una variable para dimensionarlo.
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines