El mié, 02-07-2008 a las 10:39 -0400, Alvaro Herrera escribió: > Felipe de Jesús Molina Bravo wrote: > > > I suspect that my error is: > > > > r = obtPadre( &intF->izq, &intF->der ); > > You didn't show obtPadre(). > ok it is: Racional* obtPadre( Racional *li, Racional *ld){ Racional *lip; Racional *tr = NULL; //ap temporal, para hacer el intercambio bool cont; int opAnt; //operacion anterior lip = (Racional *) palloc(sizeof(Racional)); tr = (Racional *) palloc(sizeof(Racional)); cont = true; opAnt = 0; while( cont ){ if ( li->num > ld->num ){ //intercambiamos li <-> ld SWAP_RACIONAL(li, ld ); cont = false; } lip->num = ld->num - li->num; lip->den = ld->den - li->den; if ( cont ){ while( cont ){ //recorremos SWAP_RACIONAL(li, ld ); li->num = lip->num; li->den = lip->den; if ( li->num > ld->num ){ //si hay intercambio ... continua en el ciclo SWAP_RACIONAL(li, ld ); }else{ //si no hay intercambio cont = false; //salimos del ciclo .... } //... pero antes de salir calculamos lip->num = ld->num - li->num; lip->den = ld->den - li->den; } } } return ( lip ); }