Autor Tema: Operaciones con estructuras  (Leído 1579 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Operaciones con estructuras
« en: 15 de Noviembre de 2022, 07:49:20 »
¡Saludos al foro!

Estoy intentando hacer un código y me simplificaría muchísimo el poder hacer operaciones lógicas y de asignación con estructuras.

Por ejemplo, defino las variables Variable_A y Variable_B como estructuras del tipo Mi_Estructura de la siguiente forma:

struct   Mi_Estructura {
     int       mi_Var_A;
     float    mi_Var_B;
     long    mi_Var_C;
}Variable_A;                                             

typedef struct Mi_Estructura  Variable_B;

Este código compila sin problemas en CCS. Pero ahora me gustaría (Si es que se puede hacer de alguna manera) algo como lo siguiente:

if (Variable_A != Variable_B) {
     Variable_B = Variable_A;
}

Estas líneas no me las deja compilar. Sé que se puede hacer creando funciones que realicen las operaciones con los elementos de la estructura pero tal vez exista un método más directo. ¿Alguien me puede dar alguna pista?

¡¡ Gracias de antemano !!


Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Re:Operaciones con estructuras
« Respuesta #1 en: 15 de Noviembre de 2022, 08:13:06 »
¡ Vaya !

Decía en el post anterior que:

struct   Mi_Estructura {
     int       mi_Var_A;
     float    mi_Var_B;
     long    mi_Var_C;
}Variable_A;                                             

typedef struct Mi_Estructura  Variable_B;

se compilaba sin problemas pero... No es así. Yo pensaba que se creaban dos variables: Variable_A y Variable_B pero por lo que veo sólo se crea Variable_A.
Tal vez el problema se reduzca a cómo crear dos o más variables de un  tipo "struct" determinado.

¡ Gracias de antemano !

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Operaciones con estructuras
« Respuesta #2 en: 15 de Noviembre de 2022, 09:07:58 »
No está bien usado el typedef, debió ser:

Código: [Seleccionar]
typedef struct {
     int     mi_Var_A;
     float   mi_Var_B;
     long    mi_Var_C;
} Mi_Estructura ;

Mi_Estructura Variable_A;                                             
Mi_Estructura Variable_B ;

De todas maneras, CCS no te acepta una comparación (u operación aritmética) sobre la estructura completa.

Sí te acepta una asignación
Código: [Seleccionar]
Variable_B = Variable_A;

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Operaciones con estructuras
« Respuesta #3 en: 15 de Noviembre de 2022, 10:39:41 »
¡Saludos al foro!

Estoy intentando hacer un código y me simplificaría muchísimo el poder hacer operaciones lógicas y de asignación con estructuras.

Por ejemplo, defino las variables Variable_A y Variable_B como estructuras del tipo Mi_Estructura de la siguiente forma:

struct   Mi_Estructura {
     int       mi_Var_A;
     float    mi_Var_B;
     long    mi_Var_C;
}Variable_A;                                             

typedef struct Mi_Estructura  Variable_B;

Este código compila sin problemas en CCS. Pero ahora me gustaría (Si es que se puede hacer de alguna manera) algo como lo siguiente:

if (Variable_A != Variable_B) {
     Variable_B = Variable_A;
}

Estas líneas no me las deja compilar. Sé que se puede hacer creando funciones que realicen las operaciones con los elementos de la estructura pero tal vez exista un método más directo. ¿Alguien me puede dar alguna pista?

¡¡ Gracias de antemano !!

Me parece que C no permite comparar estructuras, tal vez deberías hacer una función para tal cosa, algo así:

Código: C
  1. typedef   struct{
  2.     int       mi_Var_A;
  3.     float    mi_Var_B;
  4.     long    mi_Var_C;
  5.     }Mi_Estructura;
  6.  
  7. int main()
  8. {
  9.    
  10.    
  11.    
  12.     ....
  13.    
  14.     Mi_Structura Variable_A, Variable_B;
  15.    
  16.     if (sonIguales (&Variable_A,&Variable_B))
  17.     {
  18.         //Son iguales
  19.     }
  20.     else
  21.     {
  22.         //No son iguales
  23.     }
  24.    
  25.    
  26.    
  27. }
  28. bool sonIguales (Mi_Estructura* uno, Mi_Estructura* dos)
  29. {
  30.    return (*uno.mi_Var_A == *dos.mi_Var_A && *uno.mi_Var_B == *dos.mi_Var_B && *uno.mi_Var_C == *dos.mi_Var_C);
  31. }
« Última modificación: 15 de Noviembre de 2022, 11:59:43 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 236
Re:Operaciones con estructuras
« Respuesta #4 en: 15 de Noviembre de 2022, 13:45:57 »
¡¡ Muchas gracias por las respuestas !!

Lo de asignar varias variables (valga la redundancia) a la estructura lo había conseguido de esta forma:

struct   Mi_Estructura {
     int       mi_Var_A;
     float    mi_Var_B;
     long    mi_Var_C;
}Variable_A, Variable_B;

Pero evidentemente es mucho más elegante la solución publicada.

He comprobado que funciona la asignación y efectivamente no funciona la comparación.

¡ Gracias de nuevo !


 

anything