Autor Tema: Struct{} dentro de Tablas[]..Como se le hace?  (Leído 2876 veces)

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

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Struct{} dentro de Tablas[]..Como se le hace?
« en: 23 de Marzo de 2008, 22:35:18 »
Hola!

Bueno, me estoy enfrentando a un nuevo prorama y me resulta absolutamente indispensable hacer esto:

Defino un tipo de datos:

Código: [Seleccionar]
typedef struct INFO {
   unsigned char leading;
   unsigned char trailing;
   unsigned char width;   
} INFO;

Luego creo esta tabla:

Código: [Seleccionar]
INFO Tabla[] = {
      { 3, 14,  6},
      { 2,  6,  9},
      { 3, 14, 13},
      { 2, 16, 11},
      { 3, 14, 20},
};

Lo que quiero es que cada posicion de la tabla, sea del tipo creado inicialmente (Info)


Listo, compila bien y todo.

Pero... :? Como pregunto por los datos de la tabla???

Por decir algo, quiero saber el dato de:

Tabla[POS2.leading]...pero el compilador me dice que Tabla no esta definida.  :? No se supone que ya estaba creada antes con los datos de inicializacion.

Como se le hace para modificar o preguntar por los datos en la tabla?

De antemano, Muchisimas gracias!!!!

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #1 en: 23 de Marzo de 2008, 22:40:47 »
La posible solución es:

INFO(Tabla[5]).leading

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #2 en: 23 de Marzo de 2008, 23:15:04 »
Hola Jesus, gracias por responderme !

nada, me sale error, me dice que Info no esta definido como variable..

Si intento hacer esto:

INFO(Tabla[5]).leading=0; Me dice que Info no esta definido.

sera que estoy definiendo mal la estructura?.


Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #3 en: 23 de Marzo de 2008, 23:22:14 »
Vamos por partes:

1º) Creamos la estructura y la probamos:

typedef struct SINFO {
   unsigned char leading;
   unsigned char trailing;
   unsigned char width;   
} INFO;

SINFO estructura;

estructura.leading = 'c';

Y haber si funciona. Fijate que el nombre de la estructura y la variable son distintas (SINFO e INFO).

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #4 en: 23 de Marzo de 2008, 23:35:28 »
Me marco 3 errores:

Espera un parentesis en

Código: [Seleccionar]
SInfo estructura;
Despues me dice "Expecting declaration"


Y luego me marca que estructura no existe.. Ese es ya por el error 1
.

Intente encerrando en parentesis quedando asi:
Código: [Seleccionar]
SInfo (estructura);

Se van los 2 primeros errores, pero el ultimo dice que estructura no existe.. :?



Si les doy el mismo nombre en la creacion de la estructura si funciona, CCS me dice que estructura pertenece al formato Info..

Ahora el cuento es crear una tabla[] donde cada uno de los componentes internos tenga el mismo formato de Info.. Como se le hace?
« Última modificación: 23 de Marzo de 2008, 23:38:25 por PICmouse »

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #5 en: 23 de Marzo de 2008, 23:38:14 »
¿Podrías poner el programa completo para ver donde estas haciendo las declaraciones?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #6 en: 23 de Marzo de 2008, 23:45:49 »
Lo que intento hacer es preoguntar por el valor que esta en :

Table[1.trailing], donde 1 es la posicion 1 del vector o tabla.

« Última modificación: 24 de Marzo de 2008, 00:19:11 por PICmouse »

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #7 en: 23 de Marzo de 2008, 23:48:19 »
¿Esta realizado en CCS?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #8 en: 23 de Marzo de 2008, 23:52:12 »
Sip..  :)

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #9 en: 24 de Marzo de 2008, 00:04:41 »
La única forma que me a permitido compilarlo sin errores es:

struct SINFO {
   unsigned char leading;
   unsigned char trailing;
   unsigned char width;   
} tabla[5];

y al manejar la variable tabla:

tabla[2].leading = 'c';

Pruebalo y me comentas.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #10 en: 24 de Marzo de 2008, 00:13:15 »
La forma correcta de declarar la variable de tipo estructura fuera de esta es:

struct SINFO {
   unsigned char leading;
   unsigned char trailing;
   unsigned char width;   
};

struct SINFO tabla2[5];

Y la forma de utilizarlo como habíamos visto:

tabla2[3].leading = 'c';

Tengo un poco oxidadas la creación de estructuras en c.  :D :D :D :D

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #11 en: 24 de Marzo de 2008, 00:16:59 »
Probado y funsionando!!!  :-/

Muchisimas gracias jesus!!!  :P

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Struct{} dentro de Tablas[]..Como se le hace?
« Respuesta #12 en: 24 de Marzo de 2008, 11:56:03 »
Bueno, pues aprovecho entonces para dejar la forma en como se utilizan las estructuras detro de una tabla, para los proximos que tengan la msma pregunta.


Asi como existen tipos de datos, Int, Int16, Float, Char, etc...

Y para crear una varibale nosotros decimos el tipo de variable y el nombre de ella:

Código: [Seleccionar]
Int     Edad;
Int     Peso;
Char  Nombre;


Nosotros tambien podemos crear tipos de variables. Para ello se usa Typedef.

Ejemplo:

Código: [Seleccionar]
Typedef   Int Entero;
Con lo anterior se ha creado un nuevo tipo de variable y es "Entero", y para usarlo seria:

Código: [Seleccionar]
Entero Edad;
Entero Peso;
Char   Nombre;

Hacer lo anterior es exactamente igual al primer ejemplo.


Ahora bien, tambien podemos crear tipos de variable que encierren muchos mas datos (Usando Structuras). Ejemplo:

Código: [Seleccionar]
Struct{
Int     Edad;
Int     Peso;
Char  Nombre;
} Informacion;

Con lo anterior tenemos un tipo de datos, que encierra dentro 3 datos... :? Complicado?, es mas facil con un ejemplo.


Supongamos que queremos crear una base de datos en donde esten, pero, pablo y juan. A cada uno de los anteriores se debe guardar, Edad, Peso, Nombre:

La forma larga seria:

Código: [Seleccionar]
Struct {
Int     Edad;
Int     Peso;
Char  Nombre;
} Pedro;

Struct {
Int     Edad;
Int     Peso;
Char  Nombre;
} Pablo;

Struct {
Int     Edad;
Int     Peso;
Char  Nombre;
} Juan;


Pero!!! hay otra forma un poco mas corta y que hace lo mismo:


Código: [Seleccionar]
Typedef   Struct Informacion{
Int     Edad;
Int     Peso;
Char  Nombre;
} Informacion;

Informacion Pedro, Pablo, Juan;

Creo que con lo anterior ya se entiende un poco mas la potencia del Typedef.

Cuando se quiera manipular alguno de los datos, solo se hace:

Código: [Seleccionar]
Pedro.peso=80;
Pedro.edad=30;

Pablo.edad=50;

etc, etc, etc.




Ahora combinemos la potencia del typedef, con las estructuras, con las tablas.. :P

No se si este en lo corecto, pero algunos les llaman, Tablas, otros vectores, arregles, etc...

Las tablas son grupos de datos dentro de una misma variables. Como casilleros se puede decir.

Código: [Seleccionar]
Int  Mitabla [25];
Con lo anterior pude crear una variable que dentro de ella hay 25 datos, y que todos los datos de adentro son tipo entero.  :P

si quiero manipular uno de los datos, solo es decir:

Código: [Seleccionar]
Mitabla[6] = 90;

Lo anterior se traduce como: En la posicion numero 6 de Mitabla, guardar el numero 90;



Entonces que tal si lo que queremos es crear una tabla y que cada uno de los datos de la tabla sea una estructura con 3 datos dentro.. :? Mas complicado??. veamos el ejemplo combinando todo lo dicho en este post.


Código: [Seleccionar]
#define  Pedro 0
#define  Pablo  1
#define  Juan   2

Typedef   Struct Informacion{
Int     Edad;
Int     Peso;
Char  Nombre;
} Informacion;

Informacion  Tabla[3]={
{75,25,'P'},
{80,27,'P'},
{90,29,'J'}
};

 :-/

De lo anterior ya tenemos una forma mas facil de manipular toda la base de datos. Lo unico nuevo fue el #define pero eso solo es decirle al compilar que cuando uno escriba Pedro, el lo reempaza por el numero 0, y asi con los demas nombres.

Nueno mi pregunta por la que abri este hilo fue.. ¿Como le hago para manipular los datos de una tabla que tiene dentro estructuras de datos?

Bueno, Jesus me dio la solucion y fue:

Tabla[Pedro].Peso= 90;


Listo, ya tenemos la forma de manipular datos de una forma mas potente.  :P



Saludos a todos y gracias nuevamente Jesus!