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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / campos de bits + punteros + macros en: 24 Octubre 2023, 04:35 am
Hola buenas, tengo que dar mi ultimo parcial y me toman principalmente los temas que puse en el asunto.

al tema de campos de bits ya le agarre la mano pero el de punteros + vector de estructuras se me complica, acá hay un modelo integrador que estoy tratando de hacer.

En una fábrica se desea chequear la eficiencia de 16 robots. Para ello se ingresa la cantidad de tiempo (entre 0 y 500 seg) que empleó en el armado de cada artículo, durante un día.
Los datos ingresan por los ports 0X300 (menos significativo) y 0x301 (más significativo). Se han tomado en total 800 mediciones. Los datos son considerados válidos cuando el bit de sincronismo (S) pasa de 0 a 1.  aca el esquema de los campos. (B es espacio que no se usa)

                  S B B T T T T T  T T T T R R R R
                                  tiempo          robot


Se pide almacenar los datos necesarios en un vector de estructuras que permitan:
a) Calcular el promedio de tiempo por Robot.
b) Generar un vector de punteros al vector de estructuras.
c) Ordenar el vector de estructuras utilizando la MACRO ORDEN que ordena de mayor a
    menor por cantidad de artículos.
d) Utilizar una FUNCIÓN CON PUNTEROS para mostrar el robot que obtuvo el promedio de
    tiempo MÁS BAJO.


principalmente necesitaría ayuda al momento de la carga de datos en una función usando punteros, los datos como el tiempo y el numero de robot se cargan con la función rand.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define max_robots 6
  6.  
  7. struct mapa
  8. {
  9.    unsigned int robot: 4;
  10.    unsigned int tiempo: 9;
  11.    unsigned int : 2;
  12.    unsigned int sincronismo: 1;
  13. };
  14.  
  15. union u_uni
  16. {
  17.    struct mapa bits;
  18.    unsigned empaquetado[2];
  19. };
  20.  
  21. struct s_datos
  22. {
  23.    int robot;
  24.    int tiempo;
  25.    int rep;
  26.    float prom;
  27.  
  28. };
  29.  
  30.  
  31. void ingreso_datos(struct s_datos *[], int);
  32.  
  33. int main()
  34. {
  35.    union u_uni u;
  36.    struct s_datos datos[max_robots], *datos_ptr[max_robots];
  37.  
  38.    ingreso_datos(&datos, max_robots);
  39.  
  40.  
  41.    return 0;
  42. }
  43.  
  44. void ingreso_datos(struct s_datos *dato[], int max)
  45. {
  46.  
  47.  
  48.  
  49.  
  50. }
2  Programación / Programación C/C++ / Re: campos de bits en: 28 Septiembre 2023, 05:23 am
Excelente, ahí hice las correcciones y funciono de maravilla, muchas gracias también por la explicación.
3  Programación / Programación C/C++ / Re: campos de bits en: 28 Septiembre 2023, 01:44 am
Hola, te hago otra consulta.

En código que me pasaste vos lo que hiciste fue como EMPAQUETAR los datos que se van generando correcto ?. Bueno yo lo edite un poco para que me DESEMPAQUETE el numero generado, y el problema es que los valores no verifican. Mando el código y un ejemplo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MAX_PROD 10
  6.  
  7. struct s_producto
  8. {
  9.    unsigned char codigo : 4;
  10.    unsigned short int cantidad: 9;
  11.    unsigned char procedencia: 1;
  12.    unsigned char bas: 2;       // esto seria basura, osea lo que me queda del byte y que no uso
  13.  
  14.  
  15. };
  16.  
  17.  
  18. union u_producto
  19. {
  20.    struct s_producto producto;
  21.    unsigned short int empaquetado;  // el short int mide 2 bytes, el mismo tamaño que el de los campos sumados
  22.  
  23. };
  24.  
  25.  
  26. int main()
  27. {
  28.  
  29.    union u_producto vec[MAX_PROD] = {0};
  30.  
  31.    srand(time(NULL));
  32.  
  33.    printf("tamanno del mapa de bits: %lu bytes\n\n", sizeof(vec->producto));  // acá me arroja mas bytes de lo que debería, es decir, sumando los bytes me dan 16 = 2 bytes y me imprime 6 bytes.
  34.  
  35.  
  36.    // dando datos a los productos
  37.  
  38.    for (size_t i = 0; i < 10; i++)
  39.    {
  40.        vec[i].empaquetado = rand() % 1000;
  41.  
  42.        vec[i].producto.codigo = vec[i].empaquetado;
  43.        vec[i].producto.cantidad = vec[i].empaquetado;
  44.        vec[i].producto.procedencia = vec[i].empaquetado;
  45.  
  46.    }
  47.  
  48.    // visualizando los datos
  49.    for (int  i = 0; i < MAX_PROD; i++)
  50.    {
  51.        printf("numero empaquetado: %04X\n", vec[i].empaquetado);
  52.  
  53.        printf("\ncodigo: %d    cantidad: %d     procedencia:%d\n\n-------------------------\n",
  54.                vec[i].producto.codigo, vec[i].producto.cantidad, vec[i].producto.procedencia);
  55.  
  56.  
  57.  
  58.        puts("");
  59.    }
  60. }
  61.  



Por ejemplo un valor que sale es :  254 = 00FE  = 0000 0000 1111 1110    (2 byte)

entonces, según como declare los campos: código, cantidad, procedencia, basura


código seria: 1110         =   14                                       // son los 4 bits menos significativos

cantidad : 0 0000 1111  =   debería ser 15 pero sale 254  (igual que valor que arrojo el rand)

procedencia: 0

bas: 00



No se si me explique, espero su respuesta y muchas gracias.





4  Programación / Programación C/C++ / Re: campos de bits en: 27 Septiembre 2023, 21:16 pm
Muchas gracias por tomarte el tiempo, ya pude comprender un poco mas el tema.
5  Programación / Programación C/C++ / Re: campos de bits en: 27 Septiembre 2023, 00:49 am
Hola, ahí mande el código con lo que hice hasta ahora ( en comentarios están las dudas)

Código:
[code=c]#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define max_pro 10

struct ss
{
    unsigned char cod: 4;
    unsigned short int cant: 9;     // declaro los bits que necesito para cada item 
    unsigned char bas : 3;

};

union uu
{
    struct ss s;
    unsigned char vec[2];     // creo otra variable y mediante la union entre esta variable y la estructura
                              // se comparten la misma direccion de memoria
   
};

struct datos
{
    int codigo;
    int cantidad;

};


int main()
{
    union uu u;
    struct datos vec[max_pro];

    srand(time(NULL));

    for (int  i = 0; i < 10; i++)
    {

        vec[i].codigo= i;                // lista vacia
        vec[i].cantidad= 0;

        printf("\n\n%d   %d", vec[i].codigo, vec[i].cantidad );

    }

    printf("\n\n");


    for ( int i = 0; i < 10; i++)
    {

        do
        {
            u.vec[0]= rand()%256;     // los guardo en el vector con el que se superpone los campos de bit
            u.vec[1]= rand()%256;


        } while (u.s.cod>10);

        printf("\n\n  para codigo %d       para cant %d   ",u.vec[0], u.vec[1]);  // para ver los numeros generados

        printf("\n\n codigo: %d     cantidad: %d   \n\n", u.s.cod, u.s.cant );   // aca es mi problema
                                                                                //en el primer byte (del vector) tengo 4 bits para el codigo,
                                                                                //entonces cuando por ejemplo en ese byte hay un 85 = 0101 0101
                                                                                // para el codigo corresponderia un 5 Y ESO VERIFICA CUANDO LO IMPRIMO, pero
                                                                                // para la cantidad no, me aparece un numero que se repite en todas las posciones
        vec[u.s.cod].cantidad= u.s.cant;


    }

    printf("\n\nCOn datos");

    for (int  i = 0; i < 10; i++)
    {

        printf("\n\n%d   %d", vec[i].codigo, vec[i].cantidad );

                                            //sale el mismo numero para todas las posciones

    }


    return 0;
}

[/code]
6  Programación / Programación C/C++ / campos de bits en: 26 Septiembre 2023, 03:22 am
Hola buenas, estoy arrancando con el tema de campos de bits y tengo el siguiente problema que no lo estaría entendiendo del todo:

Realizar un programa que permita almacenar la información de 10 los diez
productos que contiene un depósito en stock, por cada uno se debe
almacenar:
 Código (1 a 10)
 Cantidad que puede variar entre 0 y 500
 Si es Nacional o importado
Definir la estructura de forma de optimizar lo más posible el uso de la
memoria.

Espero me puedan ayudar a resolverlo para ver como es que se resuelven gracias.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines