Tengo un problema en pascal de una program que implemnta listas y no se como hacerlo! Acá te dejo el enunciado fíjate si me podes ayudar.. Estaría muy agradecido! ""Se tiene una lista ordenada en forma ascendente, se desea eliminar de ella el elemento del medio y retornar la lista original sin el mismo. Implementar con Punteros.""
1 respuesta
Respuesta de elrata
1
1
elrata, Soy tecnico programador/Analista de sistemas
Tienes algo hecho así no me mato escribiendo... Sino, te lo puedo armar para mañana o pasado...
Hola acá te dejo lo que yo había echo es lo básico, carga elprimerelemnto dela lista después y dps en otro procedure cargo los demás elementos en forma ordenada! Y luego en otro procedure la recorro yla imprimo con los valores que tiene! Me falta el procedure que elemine el elemento del medio de la lista y luego retorne la misma pero sin ese elemento! Mi problema es que no se como buscar el elemento del medio y eliminarlo! Lo que te mando corre bárbaro! Fíjate si podesllegar a hacerlo para el viernes en lo posible te lo agradecería mucho! Desde ya muchas gracias! Saludos! Esteban Program eje7tp3; type puntero= ^nodo; nodo=record num:integer; sig:puntero; end; Procedure CrearLista(var lista:puntero; elem:integer); var nue:puntero; begin new(nue); writeln('Ingrese el primer elemto de la lista'); read(elem); nue^.num:=elem; nue^.sig:=nil; lista:=nue; end; Procedure InsertarDemasElementos(var lista:puntero; elem:integer); var nue, act, ult:puntero; begin new(nue); writeln('Ingrese los demas elemtos a cargar'); readln (elem); nue^.num:=elem; nue^.sig := nil; act:=lista; ult:=lista; while ( (act<>nil) and (act^.num < nue^.num)) do begin ult:=act; act:=act^.sig; end; if (act=ult) then lista:=nue else ult^.sig:=nue; nue^.sig:=act; end; procedure imprimirLista (var a : puntero); var aux : puntero; begin aux := a; while (aux <> nil) do begin writeln ('Elemento: ', aux^.num); aux := aux^.sig; end; end; var lista:puntero; elem, opcion:integer; begin CrearLista(lista, elem); repeat writeln; writeln ('Seleccione una opcion'); writeln ('1 - Ingresar elemento'); writeln ('2 - Salir'); write ('Su opcion: '); readln (opcion); if opcion = 1 then InsertarDemasElementos(lista, elem); until opcion = 2; imprimirLista (lista); readln; end.
Si, lo acepto, te lo modifique un poquito... pero fíjate ajjajaj Program eje7tp3; type puntero= ^nodo; nodo=record num:integer; sig:puntero; end; Procedure Insertar(var lista:puntero); var nue, act:puntero; begin new(nue); writeln('Ingrese el elemento a cargar'); readln (nue^.num); nue^.sig := nil; act:=lista; if (act = nil) then lista := nue else begin if (act^.num > nue^.num) then begin nue^.sig := lista; lista := nue; end else Begin while ( (act^.sig<>nil) and (act^.num < nue^.num)) do act:=act^.sig; nue^.sig:=act^.sig; act^.sig := nue; end; end; end; procedure imprimirLista (a : puntero); begin if (a = nil) then WriteLn('La lista esta vacia') else Begin while (a <> nil) do begin writeln ('Elemento: ', a^.num); a := a^.sig; end; end; end; procedure Eliminar (var a : puntero); var elem:Integer; aux, ant:Puntero; Begin write('Ingrese el elemento a eliminar:'); readln (elem); aux:=a; ant:=a; While ((aux <> Nil) and (aux^.num <> elem)) Do Begin ant:=aux; aux:=aux^.sig; End; if (aux^.num = elem) Then Begin WriteLn('Elemento eliminado'); if (ant = aux) then a:=a^.sig else ant^.sig:=aux^.sig; End Else WriteLn('Elemento no encontrado'); End; var lista:puntero; opcion:integer; begin new(lista); lista := nil; repeat repeat writeln; writeln ('Seleccione una opcion'); writeln ('1 - Ingresar elemento'); writeln ('2 - Eliminar elemento'); writeln ('3 - Mostrar lista'); writeln ('0 - Salir'); write ('Su opcion: '); readln (opcion); until ((opcion >= 0) and (opcion <=3)); case opcion of 1: Insertar(lista); 2: Eliminar(lista); 3: imprimirLista (lista); End; until opcion = 0; end.
Hola de nuevo! Che el programa anda genial muchísimas gracias! Te hago una ultima pregunta y no te molesto más a si dps te punteo..., a mi el enunciado me pide lo siguiente: ""Se tiene una lista ordenada en forma ascendente, se desea eliminar de ella el elemento del medio y retornar la lista original sin el mismo. Implementar con Punteros"" ¿Me gustaría saber como hago una ves que cargue elementos en la lista para el eliminar el elemento que tenga en el medio? ¿Es eso solo y nada más! Si no podes o no tienes tiempo todo bien no hay problema! Muchas gracias un saludo! Esteban!
Haha, no me di cuenta de eso. Una de las formas, pude ser poner un contador para que cuente los elementos insertados y luego, al momento de eliminar el medio, solo recorres (como si estuvises por imprimir, pero sin imprimir) y cuando llegas al n/2, eliminas ese elemento