Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.05.2012, 17:56
Nary Nary вне форума
Прохожий
 
Регистрация: 31.05.2012
Сообщения: 4
Репутация: 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.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025