Consulta de registro de tupla en C

Iniciado por raag_maand, 9 Mayo 2016, 09:38 AM

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

raag_maand

Buenas, no soy muy experto y tengo una consulta que quizás sea muy tonta y estaría muy agradecido si me pudieran resolver porque me estoy volviendo un poco loco.

tengo definidas dos estructuras relacionadas

typedef struct {
   int cocheID;
   int clienteID;
} coche;

typedef struct {
;
   coche coches[MAX_CARS];
   int numcoches;
} tabla_taller;

tengo que crear una función que insertando un tipo de datos taller y el cliente me diga el numero de coches que tiene.

He probado varias formas, pero en el while o en el if cuando igualo

      if(taller_dado.coche.clienteId==cliente

MIl gracias por adelantado!



MAFUS

En la sentencia del if haces referencia al tipo de dato coche cuándo deberías hacerla a la variable array coches, y poner el subíndice para acceder al dato que guarda dicho array.

raag_maand

Buenas ,
No mandó el post completo, lo que quería decir es que
cuando uso  esa igualdad me falla indicando que no es un array(value is neither array nor pointer nor vector)

void LocalizaCliente(coches  taller1,int identificador){
   int i;
   int contador;
   contador =0;

if(taller_dado.coches.clienteId==cliente){

while(i<=99)  {
      i++;
      if(taller_dado.coches.coches.clientID==identificador
     {
       contador++;
     }
     }

MAFUS

Encierra tu código entre etiquetas [code=c] y [/code], será más legible.

Ahora, si me das cosa de media horita de repondo bien, que estoy con el móvil y mis capacidades de edición son reducidas, o muy tediosas.


AlbertoBSD

Hola

int LocalizaCliente(coches  taller1,int identificador){
   int i= 0;
   int contador =0;
while(i<MAX_CARS)  {

      if(taller_dado.coches[i].clientID==identificador)
     {
       contador++;
     }
     i++;
     }
return contador; //Numero de cochea del cliente
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

MAFUS

Siendo tus datos definidos

typedef struct {
   int cocheID;
   int clienteID;
} coche;

typedef struct {
   coche coches[MAX_CARS];
   int numcoches;
} tabla_taller;


La declaración de la función

void LocalizaCliente(coches  taller1, int identificador)

es errónea.

coches es una variable del tabla_taller, no un tipo de dato. Si quisieras pasar a la función el dato coches deberías declarar un puntero a coche o un array. Al pasar un array o un puntero deberás pasarle también las dimensiones de éste porqué ese dato no acompaña a un array.
Debería quedarte así:

void LocalizaClientes(coche *lista, size_t size, int identificador)


Pero dentro de la función veo que quieres hacer uso del tipo de dato tabla_taller y, por otra parte, supongo que quieres que la función regrese el subíndice del coche que pertenece al cliente así que la declaración de la función debe ser:

int LocalizaClientes(tabla_taller taller, int identificador)


Dentro de la función mejor si haces un for (porqué básicamente iteras en una lista) que vaya desde 0 hasta el máximo número de coches. Actualmente lo haces hasta 99 y puede superar las dimensiones del array de coches del taller.

Una solución para hacer toda la función podría ser la siguiente:

int LocalizaCliente(tabla_taller taller, int identificador) {
   int i;
   int localizador = -1; /* Retornará -1 si no existe dicho cliente
                          * en el taller. */
   
   for(i = 0; i < taller.numcoches; ++i)
       if(taller_dado.coches[i].clienteId == identificador) {
           localizador = i;
           break;
       }
   }
   
   return localizador;
}


He pasado la estructura por referencia porqué desconozco si habéis estudiado pasar parámetros por referencia a las funciones.


raag_maand

Buenas, genial!!
Lo había probado también con el bucle for, pero el fallo era que la estaba insertando la i en talleres ...y supongo que evidentemente esto no me da nada.

Ha sido de gran ayuda .
Saludos y muchísimas gracias!

raag_maand

Buenas, perdona que moleste otra vez,, tengo una pregunta relacionada con la consulta de ayer,
En el mismo contexto si quisiera saber si existe algún cliente con que tenga 5 coches en el mismo taller como se haría? Estoy intentando el bucle con dos variables pero me falla.Como recorrería todo el vector?

Mil gracias!!

MAFUS

Modificando solo un poco la función anterior para que, en vez de pararse en cuando encuentre un cliente, actualice un contador que vaya desde 0 para arriba y la función devuelva el valor de dicho contador. Así deberías llamar a esta función por cada cliente que tuviera el taller. Después ya si encuentras un cliente con 5 coches ya haces el trabajo.