31.05.2012, 20:49 | #1 (permalink) |
Новичок
Регистрация: 31.05.2012
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Двунаправленные списки
У кого есть желание помочь переписать мне ее,жду ваше сообщение.Заранее спасибо!!! Задание само звучало так:сформировать список из двунаправленных элементов,вывести этот список и удалить в нем первый и последний элемент program Project1; {$APPTYPE CONSOLE} uses SysUtils, Unit1 in 'Unit1.pas'; var Uk1,Uk2,mesto:sv; isk:int; begin Writeln ('Enter a value list: '); formirovanie (Uk1,Uk2); writeln; Writeln ('List: '); Print(Uk1,Uk2); writeln; Write ('Enter the desired value: '); readln(isk); if search_back (Uk2,isk,mesto) then writeln('Element "',mesto^.element,'" is found') else writeln ('not found'); writeln; del(mesto,Uk1,Uk2); writeln; Print(Uk1,Uk2); readln; end. unit Unit1; interface type Int = integer; sv= ^zveno; zveno= Record element: int; sled: sv; pred: sv; end; procedure formirovanie (out Uk1: sv; out Uk2: sv); Procedure print (const Uk1: sv; const Uk2: sv); function search_back (const Uk2:sv; const isk:int; out mesto:sv):boolean; procedure del (mesto: sv; var Uk1:sv; var Uk2:sv); implementation {Формирование двунаправленнного списка Дано: - Найти: Uk1 - указатель на первое звено списка Uk2 - указатель на конец списка Дополнительно: Ukrab - рабочий указатель; elem - вводимый элемент} procedure formirovanie (out Uk1: sv; out Uk2: sv); var Ukrab: sv; elem: int; begin New (Uk1); Uk1^.Sled:=nil; Uk1^.Pred:=nil; Ukrab:=Uk1; readln(elem); while elem<>0 do begin New (Ukrab^.Sled); Ukrab^.Sled^.Pred:=Ukrab; Ukrab^.Element:=Elem; Ukrab:=Ukrab^.Sled; Ukrab^.Sled:=nil; readln(elem); end; Uk2:=Ukrab; end; {Вывод списка на экран в прямом направлении Дано: Uk1 - указатель на первое звено списка Найти: вывести список в прямом направлении Дополнительно: Ukrab - рабочий указатель} procedure print (const Uk1: sv; const Uk2: sv); var Ukrab : sv; begin if (Uk1=nil)and(Uk2=nil) then writeln ('The list is empty!') else begin Ukrab:=Uk1; while Ukrab.sled <> nil do begin Write(Ukrab^.element,' '); Ukrab := Ukrab^.sled end; end; end; {поиск звена с заданнным значение Дано: Uk2 - указатель на конец списка isk - заданное значение Найти: mesto - искомое звено Дополнительно: Дополнительно: Ukrab - рабочий указатель b - логич. переменная, если звено найдено T, иначе F} function search_back (const Uk2:sv; const isk:int; out mesto:sv):boolean; var Ukrab:sv; b:boolean; begin b:=false; Ukrab:=Uk2; mesto:=Nil; While (Ukrab<>nil) and (not b) do begin If Ukrab^.Element=isk then begin b:=true; Mesto:=Ukrab end else Ukrab:=Ukrab^.Pred; end; search_back:=b; end; {Удаляет звено заданного указателем Дано: mesto - удаляемое звено Uk1 - указатель на первое звено списка Uk2 - указатель на конец списка Найти: Uk1 - указатель на первое звено списка Uk2 - указатель на конец списка} procedure del (mesto: sv; var Uk1:sv;var Uk2:sv); begin {Удаляемое звено единственное} if (mesto^.sled^.sled=nil) and (mesto^.pred=nil) then begin Uk1:=nil; Uk2:=nil; dispose(mesto); end; {Удаляемое звено - последнее! } If mesto^.Sled=Nil then begin mesto^.Pred^.Sled:=Nil; Uk2:=Uk2^.Pred; Dispose (mesto); end; {Удаляемое звено - первое (но не последнее!)} if (mesto^.sled^.sled<>nil) and (mesto^.pred=nil) then begin mesto^.sled^.pred:=nil; Uk1:=mesto^.sled; dispose(mesto); end; {Удаляемое звено внутри списка} If (mesto^.sled<>Nil) and (mesto^.pred<>Nil)then begin mesto^.Sled^.Pred:=mesto^.Pred; mesto^.Pred^.Sled:=mesto^.Sled; Dispose (mesto); end; end; end. Срочно |
31.05.2012, 20:49 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Где то я это уже видел Записи и списки в паскале Pascal,ссылки, списки Списки и типизированные файлы. Создание, чтение файла и списки |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|