Código: Seleccionar todo
function mayor(lista:TipoLista):integer;
VAR n:integer; q:TipoLista;
begin
IF lista <> nil
THEN BEGIN
q := lista^.sig; {que va a estar uno más adelante que lista}
n := lista^.info; {asigno el primer valor a n}
WHILE q <> nil DO {y hasta que que llegue al valor nil...}
begin
IF lista^.info > q^.info {empiezo con las comparaciones}
THEN IF lista^.info > n
THEN n := lista^.info
ELSE IF q^.info > n
THEN n := q^.info;
lista := lista^.sig; {ahora avanzan las listas que y lista lugar}
q := q^.sig
END;
mayor := n {una vez que llegó a nil, le asigno el n resultante a la función
END
END;
Código: Seleccionar todo
function mayor(lista:TipoLista):integer;
VAR n:integer; q:TipoLista;
procedure comparavanza(lista:TipoLista;var n:integer);
begin
IF q <> nil
THEN BEGIN
IF lista^.info > q^.info
THEN IF q^.info > n
THEN n := lista^.info
ELSE IF q^.info > n
THEN n := q^.info;
lista := lista^.sig;
q := q^.sig;
comparavanza(lista,n)
END
END;
begin
IF lista <> NIL
THEN BEGIN
q := lista^.sig;
n := lista^.info;
comparavanza(lista,n);
mayor := n
END
end;
Dejo el programa entero para que puedan probarlo:
Código: Seleccionar todo
Uses Crt;
TYPE
TipoLista = ^nodo;
nodo = record
info:integer;
sig:TipoLista
end;
procedure insertar(var lista : TipoLista; x: integer);
var p : TipoLista;
begin
new(p);
p^.info:= x;
p^.sig:= lista;
lista:= p
end;
procedure insertarf(var lista: TipoLista; x: integer);
VAR nuevo,p,anterior :TipoLista;
begin
new(nuevo);
nuevo^.info := x;
nuevo^.sig := nil;
anterior := nil;
IF lista = NIL
THEN lista := nuevo
ELSE BEGIN
p := lista;
while (p^.sig <> nil) do p := p^.sig;
p^.sig := nuevo;
END;
end;
procedure imprimir(listar:TipoLista);
Begin
If listar <> Nil Then
Begin
Write(' (',listar^.Info,') ');
listar := listar^.sig;
Imprimir(listar);
End;
End;{
procedure imprimir(listar:TipoLista);
Begin
WHILE listar <> NIL DO
BEGIN
writeln(listar^.info);
listar := listar^.sig;
END;
END;
}
procedure borrar(var lista:TipoLista;n:integer);
VAR p,s,menor: TipoLista; d,t:integer;
Begin
If lista^.info = n
THEN BEGIN p := lista;
lista := lista^.sig;
dispose(p)
END
ELSE BEGIN
new(p);
p := lista;
new(s);
s := p^.sig;
WHILE s <> NIL DO
IF s^.info = n
THEN BEGIN
p^.sig := s^.sig;
dispose(s);
p := p^.sig;
s := s^.sig;
END
ELSE BEGIN
p := p^.sig;
s := s^.sig;
END
END
END;
procedure borrarHasta(var lista:TipoLista;n:integer);
VAR q,aux:TipoLista; s,t:integer;
begin
IF lista <> nil THEN
IF (n = lista^.info )
THEN BEGIN
q := lista;
lista := q^.sig;
dispose(q);
end
ELSE BEGIN
aux := lista; s := 1; {el contador y la lista auxiliar para el WHILE}
WHILE (aux <> nil) and (n <> aux^.info) DO {busca el número en la lista}
BEGIN aux := aux^.sig; s := s + 1 END; {su posición será "s"}
IF aux <> NIL
THEN
FOR t := 1 to s DO {hasta esa posición borrar todo}
BEGIN
q := lista;
lista := lista^.sig;
dispose(q);
end
ELSE BEGIN
writeln(' ');
writeln('El ',n,', No se encuentra en la lista');
readkey;
END
end
end;
function menor(lista:TipoLista):integer;
VAR n:integer; q:TipoLista;
procedure comparavanza(lista:TipoLista;var n:integer);
begin
IF q <> nil
then begin
IF lista^.info > q^.info
THEN IF lista^.info < n
THEN n := lista^.info
ELSE IF q^.info < n
THEN n := q^.info;
lista := lista^.sig;
q := q^.sig;
comparavanza(lista,n)
end
end;
BEGIN
IF lista <> nil
THEN begin
q := lista^.sig;
n := lista^.info;
comparavanza(lista,n);
menor := n
end;
end;
{
function mayor(lista:TipoLista):integer;
VAR n:integer; q:TipoLista;
procedure comparavanza(lista:TipoLista;var n:integer);
begin
IF q <> nil
THEN BEGIN
IF lista^.info > q^.info
THEN IF q^.info > n
THEN n := lista^.info
ELSE IF q^.info > n
THEN n := q^.info;
lista := lista^.sig;
q := q^.sig;
comparavanza(lista,n)
END
ELSE IF n < lista^.info
THEN n := lista^.info
END;
begin
IF lista <> NIL
THEN BEGIN
q := lista^.sig;
n := lista^.info;
comparavanza(lista,n);
mayor := n
END
end;
}
function mayor(lista:TipoLista):integer;
VAR n:integer; q:TipoLista;
begin
IF lista <> nil
THEN BEGIN
q := lista^.sig;
n := lista^.info;
WHILE q <> nil DO
begin
IF lista^.info > q^.info
THEN IF lista^.info > n
THEN n := lista^.info
ELSE IF q^.info > n
THEN n := q^.info;
lista := lista^.sig;
q := q^.sig
END;
mayor := n
END
END;
VAR
lista:TipoLista;
i,j,k,m,n:integer;
BEGIN
lista := NIL;
REPEAT
ClrScr;
write('* '); IF lista = NIL THEN write(' ¡No hay numeros! ') ELSE imprimir(lista); writeln(' *');
writeln(' ');
writeln('Seleccione opcion...');
writeln('-----------------------------------');
writeln('1) Insertar al inicio');
writeln('2) Insertar al final ');
IF lista = NIL THEN BEGIN
writeln('3) eliminar numero (No disponible)'); END ELSE writeln('3) eliminar numero ');
writeln('4) eliminar hasta... ');
writeln('5) Menor ');
writeln('6) Mayor ');
writeln('7) Ordenar ');
writeln('. ');
writeln('. ');
writeln('. ');
writeln(' ');
writeln('9) Salir ');
writeln('-----------------------------------');
CASE k of
0 : writeln(' ');
5 : writeln('El menor de la lista es: ',n);
6 : writeln('El mayor de la lista es: ',n);
1,2,7 : writeln('Actualizando lista..');
3,4 : IF lista = nil THEN ELSE writeln('eliminando, actualizando lista...');
9 : writeln('Saliendo...')
ELSE writeln('¡Opcion incorrecta!, vuelva a intentarlo')
END;
writeln(' ');
write('Opcion: ' );
Readln(k);
writeln(' ');
CASE k of
1 : BEGIN
write('1) Cantidad de celdas a agregar: ');
j := 1;
readln(i);
writeln('-----------------------------------');
WHILE i >= j DO
BEGIN
writeln('Inserte un numero: ');
readln(m);
insertar(lista,m);
j := j + 1;
END
END;
2 : BEGIN
write('1) Cantidad de celdas a agregar: ');
j := 1;
readln(i);
writeln('-----------------------------------');
WHILE i >= j DO
BEGIN
writeln('Inserte un numero: ');
readln(m);
insertarf(lista,m);
j := j + 1;
END;
END;
3 : IF lista <> NIL
THEN BEGIN write('Numero a eliminar: ');
read(i);
borrar(lista,i);
writeln('Actualizando lista...');
imprimir(lista)
END;
4: BEGIN write('¿Hasta donde borrar? -> ');
read(i);
borrarHasta(lista,i)
END;
5: n := menor(lista);
6: n := mayor(lista);
9 : write('saliendo');
END;
writeln;
UNTIL k = 9
END.
Saludos.