Bueno, eso. Alguno tiene una imagen o un copy-past del codigo en pascal o en diagrama de este procedimiento de la cátedra?
Lo necesitaria para antes del sábado, si me hacen la gauchada
Gracias che
Es lo mismo que con un solo campo, solo que le tenés que agregar una condición más para el otro. Quizá viste otro insertaNodo, esta es la versión de Alejandro Frankel , esta buena, no tiene ifs anidados.
procedure InsertaNodo(var lista:tlista;info:tinfo)
var nuevo,ant,aux:tlista;
begin
new(nuevo);
nuevo^.info:=info;
aux:=lista;
while( (aux<>nil) AND (aux^.info.campo1<info.campo1) AND (aux^.info.campo2<info.campo2) ) do
begin
ant:=aux;
aux:=aux^.sig
end;
/*el siguiente al nuevo nodo siempre va a ser aux, por mas que este sea NIL*/
nuevo^.sig:=aux;
/*Si aux es igual a lista, es decir, es el primer nodo o la lista esta vacía, entonces el nuevo nodo va a ir primero, sino va después de lo que esté antes de aux.*/
if(aux=lista) then lista:=nuevo else ant^.sig:=nuevo;
end.
Yo también doy el final el sábado.
(08-12-2010 20:53)Anirus escribió: [ -> ]Es lo mismo que con un solo campo, solo que le tenés que agregar una condición más para el otro. Quizá viste otro insertaNodo, esta es la versión de Alejandro Frankel , esta buena, no tiene ifs anidados.
procedure InsertaNodo(var lista:tlista;info:tinfo)
var nuevo,ant,aux:tlista;
begin
new(nuevo);
nuevo^.info:=info;
aux:=lista;
while( (aux<>nil) AND (aux^.info.campo1<info.campo1) AND (aux^.info.campo2<info.campo2) ) do begin
ant:=aux;
aux:=aux^.sig
end;
nuevo^.sig:=aux;
if(aux=lista) then lista:=nuevo else ant^.sig:=nuevo;
end.
Yo también doy el final el sábado.
Sisis uso la de frankel yo tambien, es genial
bueno ahora me las "ingenio" y de ultima lo subo a ver si le sirve a alguien
gracias
che,una cosa:
puede ser q en tu codigo
procedure InsertaNodo(var lista:tlista;info:tinfo)
var nuevo,ant,aux:tlista;
begin
new(nuevo);
nuevo^.info:=info;
aux:=lista;
while( (aux<>nil) AND (aux^.info.campo1<info.campo1) AND (aux^.info.campo2<info.campo2) ) do begin
ant:=aux;
aux:=aux^.sig
end;
nuevo^.sig:=aux;
if(aux=lista) then lista:=nuevo else ant^.sig:=nuevo;
end.
la parte de
while( (aux<>nil) AND (aux^.info.campo1<info.campo1) AND (aux^.info.campo2<info.campo2) ) do begin
puede ser que sea??
while( (aux<>nil) AND
((aux^.info.campo1<info.campo1) OR (aux^.info.campo1=info.campo1) )AND (aux^.info.campo2<info.campo2) ) do begin[/code]
es decir que cuando agregue se fije en el priemr campo qeu sea menor O IGUAL
porque hice una prueba de escritorio y de esa forma funcionaria si por ejemplo tenemos una lista con nodos de dos campos y si estos son
1 | 1
1 | 4
2 | 2
y quiero agregar uno que sea 1|3
si es con mayor lo agregaria atras del 1|1 pero si fuera mayor igual lo agregaria bien
espero haber sido claro jje
Qué bueno que te diste cuenta, yo estaba convencida de que era así y me estaba acordando mal xD, igual me parece que ahora están mal los paréntesis, porque en cuanto el segundo campo fuera menor, no se cumpliria la condicion, sin importar si el primero es mayor o no.
1 | 1
1 | 2
1 | 3
1 | 4
2 | 3
Si quiero agregar 2|2 al pasar por el tercer nodo, hay una parte que no se cumple:
while( (aux<>nil) AND ((aux^.info.campo1<info.campo1) OR (aux^.info.campo1=info.campo1) )AND
(aux^.info.campo2<info.campo2) )
Entonces queda while( V & (V v F) & F) y se sale del ciclo y lo pondría así:
1 | 1
1 | 2
2 | 2
1 | 3
1 | 4
2 | 3
Me parece que era así, que solo se fije lo del segundo campo cuando el 1ro es igual:
while( (aux<>nil) AND ( (aux^.info.campo1<info.campo1) OR ((aux^.info.campo1=info.campo1)AND (aux^.info.campo2<info.campo2)) ) )do begin
GENIAL
lo estoy probrando con distintos datos andan todos! te mereces un punto mas en la reputacion
(09-12-2010 01:45)Teteban escribió: [ -> ]GENIAL
lo estoy probrando con distintos datos andan todos! te mereces un punto mas en la reputacion
O uno menos por mandarme una burrada en la primera respuesta xD por suerte revisás las cosas.
(08-12-2010 21:02)Anirus escribió: [ -> ]Para el final del sabado pasado había (o al menos lo resolví así) que ordenar una lista por el resultado de la suma de dos de sus campos, es lo mismo pero haciendo (aux^.info.campo1 + aux^.info.campo2)< (info.campo1 + info.campo2)
(solo que iba > porque era descendiente)
No intentes resolver el final pensando en eso que lei mal esa parte del enunciado y pensé que en la lista iba la suma de los extranjeros en vez de los del 2009.