• Viernes 8 de Noviembre de 2024, 14:41

Autor Tema:  Comparacion En C  (Leído 2247 veces)

dudesl

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Comparacion En C
« en: Miércoles 28 de Marzo de 2007, 02:04 »
0
 :huh:  :huh:  :huh:

El tema es el siguiente:

   Yo tengo una estructura como la siguiente:

  :comp:  
Código: Text
  1.  
  2.           typedef struct {int dia;
  3.                                int mes;
  4.                                int an; } fecha;/*Fecha*/
  5.  
  6.            typedef struct {char nombre[50];
  7.                                 int codigo;
  8.                                 fecha f;/*Fecha de nacimiento del empleado*/
  9.                                 } emp; /*Empleados*/
  10.  
  11.  
 :comp:

 El tema es el siguiente, tengo que lograr una función que me compare las posiciones de un arreglo de empleados y me diga cual es el empleado mas joven, usando el campo de la fecha de nacimiento.El arreglo de empleados pasa como parametro a la funcion y la misma debe devolver la posicion en la que se encuentra el empleado mas joven   :scream:  Me complica el tema que la fecha sea una estructura ya que debo (lo que yo pienso) comparar primero el año, luego el mes y luego el dia y asi posicion por posicion del arreglo. Es todo un tema. Busco un codigo compacto usando todas las caracteristicas de c (solo de c).

Esto es parte de un trabajo practico que tengo que hacer para la universidad y no es que soy vago, es que me mato, solo pido un poquito de ayuda, aunque sea una guia o un consejo. Desde ya gracias.
 :hola:  :hola:  :hola:  :hola:  :hola:  :hola:  :hola:   :hola: :hola:  :hola:  :hola:

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Comparacion En C
« Respuesta #1 en: Miércoles 28 de Marzo de 2007, 02:33 »
0
Si sabas como trabajar con tipedef no deberias de tener problema alguno.

No te voy a responder directamente (y espero que nadie lo haga) por eso te pregunto a ver si das con la respuesta:

Como llamas un solo elemente de esa estructura?

Es decir; de aqui:
Código: Text
  1.  typedef struct {int dia;
  2. int mes;
  3. int an; } fecha;/*Fecha*
  4.  

Como tomas el valor de mes?

Como y en que porfa podrias usar un bucle en este codigo?

Si no sabes las respuestas:

http://www.learn-programming.za.net/progra..._c_learn09.html

Google it.

[EDT]

Increible, algo tan simple y no saben hacerlo, jovenes...  :no: ( :P )
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Comparacion En C
« Respuesta #2 en: Miércoles 28 de Marzo de 2007, 16:18 »
0
Como menciona su-, no es complicado:

- Recorres el arreglo de estructuras
- GUARDAS en una variable auxiliar el índice del empleado más joven hasta el momento (en la primer iteración toma al primer empleado como el más joven).
- Lo comparas con el siguiente elemento del arreglo.
- Si es más joven, actualizas las variables, si no, continúas con el siguiente.

Cuando termines el ciclo tendrás el índice del más joven.

Suerte.
La imaginación es el límite.
Hardware & Software | Mexchip

dudesl

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Comparacion En C
« Respuesta #3 en: Jueves 29 de Marzo de 2007, 18:02 »
0
pero la comparacion no se trata de un solo campo si no de los 3 campos, o sea tengo que ver cual de los empleados es mas joven dependiendo los años, si son iguales, comparar dependiendo el mes, si son iguales, comparar dependiendo el dia.

Loco, no es que soy un gil, tengo algo de experiencia en esto, pero por eso estoy ESTUDIANDO...... <_<

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Comparacion En C
« Respuesta #4 en: Viernes 30 de Marzo de 2007, 00:19 »
0
Mh, tienes que intentar cosas tú mismo, podrías por ejemplo empezar con dos de tus estructuras y comparar sus elementos:
Código: Text
  1.  
  2. struct emp empleado1, empleado2;
  3.  
  4. // ... código
  5.  
  6. if ( empleado1.fecha.an < empleado2.fecha.an ) {
  7.   // el empleado 1 es más joven
  8. }
  9.  
  10.  

Suerte.
La imaginación es el límite.
Hardware & Software | Mexchip

dudesl

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Comparacion En C
« Respuesta #5 en: Sábado 31 de Marzo de 2007, 21:07 »
0
Miren esto:

Código: Text
  1.  
  2. int MasJoven (empleado emp[]; int Lim){
  3.    
  4.    int aux=0; int Joven=1;
  5.  
  6.    while (aux<Lim){ //Comienzo del modulo
  7.        
  8.        if ((*emp[aux].f.an <*emp[aux+1].f.an) && (*emp[aux].f.mes < *emp[aux+1].f.mes) && (*emp[aux].f.dia < *emp[aux+1].f.dia) ) Joven=aux;
  9.        else Joven=aux+1;
  10.        aux++;}
  11.    return Joven;} //Fin del modulo
  12.  
  13.  

Esta es la estrucutura empleado:
Código: Text
  1.  
  2. typedef struct{
  3.             int dia; int mes; int an;} fecha; //Dia, mes y año
  4.  
  5. typedef struct{
  6.             int codigo; //Codigo del empleado
  7.             char NomAp[35]; // Nombre y apellido
  8.             fecha f; //fecha de nacimiento del empleado
  9.  
  10.  

Ahora, paso a explicar este modulo: Yo necesitaba que me comparara dos estructuras (empleados) y que me devolviera el mas joven. En realidad entraba como parametro un arreglo de empleados y me devolvia la posicion del empleado mas joven.
 No encontraba la forma, hasta que me puse hacer grraaaaaaannndeees tablas de condiciones y cosas por el estilo hasta que me di cuenta que la unica condicion que tenia que cumplir el empleado mas joven es que fuera el año, mes y dia menores al del otro empleado. Entonces es ahi cuando entra esa graaaaan condicion del if donde compara el año, el mes y el dia de los empleados..

Creo que lo logre, ahora queda en ustedes decirme si es correcto lo que hice, si lo puedo encarar de otra forma, si hay forma de reducir esa condicion por que es bastante intimidante.

Citar
su- dijo:   
  Increible, algo tan simple y no saben hacerlo, jovenes...   :no::P )   
 
   que te parece su-?

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Comparacion En C
« Respuesta #6 en: Sábado 31 de Marzo de 2007, 21:43 »
0
Hmmm...

Tienes 3 empleados:
Código: Text
  1.  
  2. Empleado año     mes    dia
  3. Daniel   1997    10     5
  4. Pedro    1976    3      20
  5. Juan     1999    5      10
  6.  

Como sabes si Daniel es mas joven que Juan (segun tu codigo)?

Intenta hacer una metriz para organizarlo por fechas.

 :hola:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Comparacion En C
« Respuesta #7 en: Sábado 31 de Marzo de 2007, 22:19 »
0
Todavía te falta checar algunos casos, por ejemplo cuando el año sea el mismo y entonces debas checar el mes (o el día) :).

Lo mejor es separar las comparaciones y no intentar meterlo todo en una sola:

Toma un empleado, compara el año con el del más joven (para la primer comparación puedes tomar al primer empleado del arreglo como el más joven), si el año es menor avanza con el siguiente, si es mayor actualiza el empleado más joven y avanza, si son iguales procede a comparar el mes de la misma forma.

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Comparacion En C
« Respuesta #8 en: Sábado 31 de Marzo de 2007, 23:17 »
0
Muy largo, yo en Perl lo haria usando un hash y ordenandolos por fechas...

no pongo el codigo (en C) porque no se programar en C (lo puedo hacer pero no le voy a dar tiempo a esto) pero esa es la idea.

usa un hash (año => {mes, dia, nombre_empleado})  asi lo ordenas por año y lo comparas por mes/dia tal como comenta Geo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.