Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cómo acceder a estruturas de datos

Estas en el tema de Cómo acceder a estruturas de datos en el foro de C/C++ en Foros del Web. Tengo una duda para tratar de acceder a una estrutura de datos que no se como hacerlo. Si quisiese comparar el dato pais del concursante ...
  #1 (permalink)  
Antiguo 02/11/2009, 07:13
 
Fecha de Ingreso: junio-2007
Mensajes: 53
Antigüedad: 16 años, 10 meses
Puntos: 0
Cómo acceder a estruturas de datos

Tengo una duda para tratar de acceder a una estrutura de datos que no se como hacerlo.
Si quisiese comparar el dato pais del concursante para comprobar si un pais ha estado en todos los festivales como lo haría, Gracias por adelantado:


Tengo definidas las siguientes estruturas.

typedef struct{
char nombre;
char apellido;
char pais;
char titulo;
bool victoria;
int puntos;
}tParticipante;

typedef struct{
tParticipante concursante[50];
char sede;
int año;
char anfitrion;
}tFestival;

typedef struct{
tFestival historia[60];
}tHistoricoFestival


tHistoricoFestival misFestivales;
char pais;

bool estaentodoslosfestivales(tHistoricoFestival misFestivales, char pais){

int i,j, contador;
i=1;
contador = 0;
while(i <= 60){
j = 1;
while(j <= 50){
if((misFestivales.historia[i].concursante[j].pais) == pais){
contador = contador + 1;
}
j = j + 1;
}
i = i + 1;
}
if (contador == 60){
return true;
}
else
{
return false;
}
}
  #2 (permalink)  
Antiguo 02/11/2009, 09:06
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Cómo acceder a estruturas de datos

Creo que el contador te da un valor elevado no? si es asi, es porque estas contando todos los participantes de un mismo pais, me explico:


Son 5 festivales en total, y tienes 2 participantes en cada festival (y quieres comprobar "españa"):

festival 1
españa
francia

festival 2
españa
alemania

festival 3
españa
españa

festival 4
francia
españa

festival 5
españa
holanda

Lo que estás haciendo en esos bucles, es comparar el pais de todos los participantes de un festival, y si el país coincide es que el país estuvo en el festival, el problema es que no controlas que pueden haber varios participantes del mismo pais en el mismo festival.. el conteo en éste caso te daría 6, y realmente debería ser 5 por el número de festivales.

Solución que te propongo, es el uso de un switch, en el momento que el país de un concursante coincida con el país que quieres comprobar que estuvo en el festival, pues que cambie al siguiente festival, por ejemplo:

Código:
for(i=1;i<=60;i++){
     j=1;
     for(j=1;j<=50;j++){
         if((misFestivales.historia[i].concursante[j].pais) == pais ){
             contador=contador+1;
             j=51; //obligas a cambiar al siguiente festival
         }
     }
     i=i+1;
}
Otra cosa si mal no recuerdo y porsia no lo conoces aun, para que un char sea una cadena de caracteres tendría que ser un array:

char pais[10] = "españa";

y para comparar cadenas (#include <string.h>):

int x = strcmpi(cadena1,cadena2);
//devuelve un entero, si devuelve '0' es que son iguales
if(x==0) printf("Son iguales");

En tu caso seria:

x = strcmpi(misFestivales.historia[i].concursante[j].pais,pais);
if(x==0){
contador=contador+1;
j=51;
}

Y... si esta algo mal pues lo siento, tendría que revisar una que otra cosa en C, ya que he cambiado chip a java y .net xD.. Suerte.
  #3 (permalink)  
Antiguo 02/11/2009, 11:14
 
Fecha de Ingreso: junio-2007
Mensajes: 53
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Cómo acceder a estruturas de datos

Gracias por su rápida respuesta. No, como precondición no puede haber dos participantes del mismo pais. Lo que necesito saber es si el acceso asi es correcto, es decir, es esto correcto como lo hago "misFestivales.historia[i].concursante[j].pais"
Cita:
Iniciado por Annoying Ver Mensaje
Creo que el contador te da un valor elevado no? si es asi, es porque estas contando todos los participantes de un mismo pais, me explico:


Son 5 festivales en total, y tienes 2 participantes en cada festival (y quieres comprobar "españa"):

festival 1
españa
francia

festival 2
españa
alemania

festival 3
españa
españa

festival 4
francia
españa

festival 5
españa
holanda

Lo que estás haciendo en esos bucles, es comparar el pais de todos los participantes de un festival, y si el país coincide es que el país estuvo en el festival, el problema es que no controlas que pueden haber varios participantes del mismo pais en el mismo festival.. el conteo en éste caso te daría 6, y realmente debería ser 5 por el número de festivales.

Solución que te propongo, es el uso de un switch, en el momento que el país de un concursante coincida con el país que quieres comprobar que estuvo en el festival, pues que cambie al siguiente festival, por ejemplo:

Código:
for(i=1;i<=60;i++){
     j=1;
     for(j=1;j<=50;j++){
         if((misFestivales.historia[i].concursante[j].pais) == pais ){
             contador=contador+1;
             j=51; //obligas a cambiar al siguiente festival
         }
     }
     i=i+1;
}
Otra cosa si mal no recuerdo y porsia no lo conoces aun, para que un char sea una cadena de caracteres tendría que ser un array:

char pais[10] = "españa";

y para comparar cadenas (#include <string.h>):

int x = strcmpi(cadena1,cadena2);
//devuelve un entero, si devuelve '0' es que son iguales
if(x==0) printf("Son iguales");

En tu caso seria:

x = strcmpi(misFestivales.historia[i].concursante[j].pais,pais);
if(x==0){
contador=contador+1;
j=51;
}

Y... si esta algo mal pues lo siento, tendría que revisar una que otra cosa en C, ya que he cambiado chip a java y .net xD.. Suerte.
  #4 (permalink)  
Antiguo 02/11/2009, 14:59
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Cómo acceder a estruturas de datos

Cita:
Iniciado por KKarloss Ver Mensaje
Gracias por su rápida respuesta. No, como precondición no puede haber dos participantes del mismo pais. Lo que necesito saber es si el acceso asi es correcto, es decir, es esto correcto como lo hago "misFestivales.historia[i].concursante[j].pais"
Si
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:47.