Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: raag_maand en 9 Mayo 2016, 09:38 am



Título: Consulta de registro de tupla en C
Publicado por: raag_maand en 9 Mayo 2016, 09:38 am
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!




Título: Re: Consulta de registro de tupla en C
Publicado por: MAFUS en 9 Mayo 2016, 10:53 am
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.


Título: Re: Consulta de registro de tupla en C
Publicado por: raag_maand en 9 Mayo 2016, 11:16 am
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++;
     }
     }


Título: Re: Consulta de registro de tupla en C
Publicado por: MAFUS en 9 Mayo 2016, 11:53 am
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.


Título: Re: Consulta de registro de tupla en C
Publicado por: raag_maand en 9 Mayo 2016, 12:47 pm
ok.Perfecto!!


Título: Re: Consulta de registro de tupla en C
Publicado por: AlbertoBSD en 9 Mayo 2016, 14:36 pm
Hola
Código
  1. int LocalizaCliente(coches  taller1,int identificador){
  2.   int i= 0;
  3.   int contador =0;
  4. while(i<MAX_CARS)  {
  5.  
  6.      if(taller_dado.coches[i].clientID==identificador)
  7.     {
  8.       contador++;
  9.     }
  10.     i++;
  11.     }
  12. return contador; //Numero de cochea del cliente
  13. }
  14.  


Título: Re: Consulta de registro de tupla en C
Publicado por: MAFUS en 9 Mayo 2016, 15:10 pm
Siendo tus datos definidos
Código
  1. typedef struct {
  2.    int cocheID;
  3.    int clienteID;
  4. } coche;
  5.  
  6. typedef struct {
  7.    coche coches[MAX_CARS];
  8.    int numcoches;
  9. } tabla_taller;
  10.  

La declaración de la función
Código
  1. void LocalizaCliente(coches  taller1, int identificador)
  2.  
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í:
Código
  1. void LocalizaClientes(coche *lista, size_t size, int identificador)
  2.  

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:
Código
  1. int LocalizaClientes(tabla_taller taller, int identificador)
  2.  

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:
Código
  1. int LocalizaCliente(tabla_taller taller, int identificador) {
  2.    int i;
  3.    int localizador = -1; /* Retornará -1 si no existe dicho cliente
  4.                            * en el taller. */
  5.  
  6.    for(i = 0; i < taller.numcoches; ++i)
  7.        if(taller_dado.coches[i].clienteId == identificador) {
  8.            localizador = i;
  9.            break;
  10.        }
  11.    }
  12.  
  13.    return localizador;
  14. }

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



Título: Re: Consulta de registro de tupla en C
Publicado por: raag_maand en 9 Mayo 2016, 17:24 pm
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!


Título: Re: Consulta de registro de tupla en C
Publicado por: raag_maand en 10 Mayo 2016, 12:22 pm
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!!


Título: Re: Consulta de registro de tupla en C
Publicado por: MAFUS en 10 Mayo 2016, 13:45 pm
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.