UTNianos

Versión completa: Duda Algoritmos FINALES
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Gente , recien estuve viendo algunos finales , y en el acceso a archivos dice:

Accesos al archivo TALARCHIVO: busqueda binaria.

y en un final ni dan espacio para arrays.

yo tenia entendido que la busqueda binaria es solo en arrays... y al no haber arrays para hacerlo... entonces que se hace?

recien vi otro , que tiene espacio para arrays y tmb dice

Accesos al archivo TALARCHIVO busqueda binaria + otra cosa.

no entiendo como se puede hacer una busqueda binaria en un .dat.

alguien sabria responder?

gracias.
(17-12-2010 14:43)Heidad escribió: [ -> ]Gente , recien estuve viendo algunos finales , y en el acceso a archivos dice:

Accesos al archivo TALARCHIVO: busqueda binaria.

y en un final ni dan espacio para arrays.

yo tenia entendido que la busqueda binaria es solo en arrays... y al no haber arrays para hacerlo... entonces que se hace?

recien vi otro , que tiene espacio para arrays y tmb dice

Accesos al archivo TALARCHIVO busqueda binaria + otra cosa.

no entiendo como se puede hacer una busqueda binaria en un .dat.

alguien sabria responder?

gracias.
La busqueda binaria la podes hacer tanto en archivos como en arrays, mientras esten ordenados por tal campo.. es casi igual que en vectores(bah, tiene diferencias) usas dos topes, inicial y final los inicializas junto a la posicion, el tope inicial en 0 y el final en filesize(archivo)-1.. inicializas la posicion que queres tener en no se.. -1 ponele y un encontro en falso.
despues haces un while con las condiciones not encontro and Ti(tope inicial) <= tope final.
Adentro calculas el tope medio asi: TM<- (TI+TF)/2 seekeas al tope medio osea seek(archivo, TM) lees el registro y comparas si el dato que buscas es el que estaba en esa posicion (con un if), si lo es haces que te devuelta esa posicion con un pos<-filepos(archivo)-1 (cuando leiste el puntero avanzo uno por eso, tambien pudiste poner a TM) y para que termine de ciclar pones un encontro <- true.
Si no es lo que buscabas (y aca viene la importancia de que este ordenado) comparas con un if si el dato es mayor o menor al que buscabas, si encontraste en esa posicion un dato mayor cambias el tope final mas arriba asi TF<-TM-1 si encontraste un dato menor cambias el tope incial mas adelante asi TI<- TM+1

Creo que quedo medio quilombo igual =P
nono , perfecto , me imaginaba que habia un seek por ahi.

muchas gracias.
otra cosita , con respecto a ordenar una lista por 2 tipos ( primero por nro de legajo , despues por año inscripto , descendiente , ponele).

en el insertar nodo , en donde (Lista = nil o LEGAJO < lista^.info.Legajo) es falso , pongo:

Q <- lista.
y un while con [ (Q^Sigu =/ nil )and (LEGAJO > Q^.Sigu^.Info.LEGAJO)] ->
Q <- Q^.sigu

hasta ahi es el insertar nodo normal , pero ahroa para poner el 2do tipo seria:
un while con [ (Q^.info.Legajo = Legajo) and (ANIOINSCRIPTO > Q^.info.ANIOINSCRIPTO)] ->
Q <- Q^.sigu

lo de recien es que : mientras sea el mismo legajo , y ya habia otro con menor anio inscripto , paso al siguiente.

y despues temrino con

P^.Sigu <- Q^.sigu
Q^.sigu <- P.


es asi?

muchas gracias
Me parece que lo que preguntas es esto >> http://www.utnianos.com.ar/foro/showthread.php?tid=5127 no?

Igual habria que ver el ejercicio, capaz tenes que armar un vector de listas y ahi ya tenes un ordenamiento por el vector y despues un inserta nodo comun, o lo que dice en el otro post.
URLs de referencia