Título: ordenar estructuras en c Publicado por: javieer en 12 Abril 2018, 09:59 am Hola,
me podeis ayudar con este programa ? tengo creada una estructura asi con persona 1, persona 2 i no se como ordenarlas a traves de una función: en caso de que las dos personas sean "ALTO" comparar el nombre, si el nombre es igual comparar el apellido i si son iguales el dni,comparando persona 1 con persona 2 (0´si son iguales,-1 si persona 1 es inferior a persona 2 i 1 si es superior) lo podria hacer con un for? typedef struct{ char nombre[20]; char apellido[20]; altura alt; char dni[20] }persona; gracias. Título: Re: ordenar estructuras en c Publicado por: MAFUS en 12 Abril 2018, 13:50 pm Yo iniciaría con un int llamado comparación a 0.
Un if comparando las alturas: si p1 es mayor 'comparación' a -1, si p2 es mayor 'comparación' a 1. Si los dos son iguales 'comparación' seguirá a 0. El segundo if: si 'comparación' vale 0: Comparar el nombre. Como antes. Si los dos nombres son iguales 'comparación' seguirá a 0. El tercer if: si 'comparación' vale 0: Compara los apellidos.... Supongo que ya has pillado el algoritmo pues se repite para todas las decisiones. Al final devuelves 'comparación'. Título: Re: ordenar estructuras en c Publicado por: Serapis en 12 Abril 2018, 16:34 pm Como te dice Mafus... te concreto un poquito más
La función general... nos paramos en el detalle de la comparación de dos elementos. Donde se invoca una segunda función (básicamente sería sobrecargar el operador, pero bueno, aquí la llamamos EsMenor). Código: Funcion OrdenarMetodoX(Array de Estructura Persona P() ) Si es mayor o igual, no pasa nada, pero podría ser al revés, según lo que convenga. Código: Buleano = Funcion EsMenor( Persona p1, Persona p2) Compara cadenas y Devuelve -1, 0 ó 1 para 'es mayor, igual o menor respectivamente (puede cambiarse si se precisa). Código: Entero Funcion CadenaEsMenor(string p1, string p2) Título: Re: ordenar estructuras en c Publicado por: javieer en 13 Abril 2018, 11:50 am muchas gracias a los dos por contestar!! , aqui estoy luchando con los if ;-) :laugh:
Título: Re: ordenar estructuras en c Publicado por: Kenji-chan en 13 Abril 2018, 15:36 pm yo he echo una versión algo diferente.
ya que según la definición de javieer si en la comparación de el primer parámetro es mayor retornamos si es menor retornamos pero si son iguales pasamos a comparar el segundo parámetro de modo que: Citar //funcion que devuelve -1 si a > b, 1 si a < b y 0 si a == b int cmpPersona(_persona a, _persona b){ si a.altura > b.altura return -1; sino a.altura == b.altura /*hacemos lo mismo con los demas parametros /*cuando lleguemos al ultimo parámetro y los dos son iguales entonces las dos estructuras son iguales por lo tanto retornamos 0*/ sino a.dni == b.dni return 0 finsi finsi /*a qui solo llegaremos si un parámetro de a es menor que b return 1; } ahora en el main nos quedaría comparar las dos estructuras para saber cual de las dos es mayor Citar switch(cmpPersona(a,b)){*/ case -1: fprintf(stdout, "a es > b\n"); break; case 1: fprintf(stdout, "a es < b\n"); break; case 0: fprintf(stdout, "a es == b\n"); break; } y si lo que queremos es ordenar una lista de (TDA)personas usaríamos un algoritmo de ordenación ya conocido para el ejemplo usara el método de la burbuja Citar void burbuja(_persona* array){ int i, j; _persona aux; for(i=1; i<max; i++){ for(j=0; j<max-i; j++){ if(cmpPersona(array[j], array[j-1]) > 0){ aux = array[j+1]; array[j+1] = array[j]; array[j] = aux; } } } } Título: Re: ordenar estructuras en c Publicado por: javieer en 16 Abril 2018, 12:00 pm gracias por la respuesta! me ha servido bastante la verdad ;-)
|