Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 01:16   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Отображение всех элементов в списке.(Указатели.Delphi)

Не могу никак сделать так, чтобы отображались все элементы, как только не пыталась: то у меня последний элемент не отображает, то у меня зацикливается. Может подскажете что нужно добавить в мой цикл WHILE в процедуре ShowAllElemDec?
Код:
uses
  SysUtils;

type
  TDec = ^Dec;
  Dec = record
    Elem:     Integer;
    NextElem: TDec;
    PrevElem: TDec;
  end;

var
  First  : TDec = nil;
  Last   : TDec = nil;

// Процедура добавления элемента в начало списка
//procedure AddElemBeginDec (var First, Last: TDec; TempElem: Integer);
procedure AddElemBeginDec (var TempElem: Integer);
var
  Current: TDec;
begin
  New(Current);
  Current^.Elem    := TempElem;
  Current^.NextElem:= First;
  Current^.PrevElem:= nil;
  if First<> nil  then First^.PrevElem:= Current
                  else Last:= Current;
  First:= Current;
end;

// Процедура добавления элемента в конец списка
procedure AddElemEndDec (var TempElem: Integer);
var
  Current: TDec;
begin
  New(Current);
  Current^.Elem    := TempElem;
  Current^.NextElem:= nil;
  Current^.PrevElem:= Last;
  if Last<> nil then Last^.NextElem:= Current
                else First:= Current;
  Last:= Current;
end;

// Процедура удаления элемента из начала списка
procedure DelElemBeginDec (var First, Last: TDec);
var
  Current: TDec;
begin
  if First= nil then Exit;
  Current:= First;
  First:= First^.NextElem;
  if First<> nil then First^.PrevElem:= nil
                 else Last:= nil;
  Dispose(Current);
end;

// Процедура удаления элемента из конца списка
procedure DelElemEndDec (var First, Last: TDec);
var
  Current: TDec;
begin
  if Last= nil then Exit;
  Current:= Last;
  Last:= Last^.PrevElem;
  if Last<> nil then Last^.NextElem:= nil
                else First:= nil;
  Dispose(Current);
end;

// Процедура отображения всех элементов списка
procedure ShowAllElemDec (var First, Last: TDec);
var
  Current: TDec;
begin
  Current:=First;
  while Current.NextElem <>Last do
  begin
      Writeln(Current^.Elem);
      Current:=First.NextElem;
  end;

end;

// Процедура удаления всех элементов списка
procedure DelAllElemDec (var First, Last: TDec);
var
  Current: TDec;
begin
  Current:=First;
  while Last<>nil do
  begin
    Current:=First;
    if Current^.NextElem <> nil then
    begin
      First:= Current^.NextElem;
      Dispose(Current);
    end;
  end;
end;

// Процедура отображения количества элементов в списке
procedure ShowAllSumElemDec (var First, Last: TDec);
var
  Current: TDec;
  Kolichestvo: Integer;
begin
  Kolichestvo:=0;
  Current:=First;
  while Last<>nil do
  begin
    Current:=First;
    if Current^.NextElem <> nil then
    begin
      First:= Current^.NextElem;
      Kolichestvo:=Kolichestvo+1;
    end;
  end;
  Writeln(Kolichestvo);
end;

// Основная часть программы
var
  Element: Integer;
  Item:    Char;
begin
// Меню программы
  repeat
  Writeln('Menu:');
  Writeln('1. Dobavlenie v nachalo i konech');
  Writeln('2. Udalenie is nachalo i koncha');
  Writeln('3. Pokasat all');
  Writeln('4. Udalit all');
  Writeln('5. Pokasat kolichestvo elementov');
  Writeln('0. Exit');
  ReadLn(Item);
  case Item of
    '1': begin
           Write('Vvedite element:');
           ReadLn(Element);
           Writeln('Menu:');
           Writeln('1. Dobavit s nachala');
           Writeln('2. Dobavit s koncha' );
           ReadLn(Item);
           case Item of
             '1': begin
                  AddElemBeginDec(Element);
                  Writeln('Element dobavlen v nachalo spiska');
                  end;

             '2': begin
                  AddElemEndDec(Element);
                  Writeln('Element dobavlen v konech spiska');
                  end;
            end;
        end;

    '2': begin
           Writeln('Menu:');
           Writeln('1. Udalit s nachala');
           Writeln('2. Udalit s koncha' );
           ReadLn(Item);
           case Item of
             '1': begin
                  DelElemBeginDec(First,Last);
                  Writeln('Element udalen s nacala spiska');
                end;

             '2': begin
                  DelElemEndDec(First,Last);
                  Writeln('Element udalen s kancha spiska');
                end;
           end;
         end;

    '3': begin
         Writeln('All elements:');
         ShowAllElemDec(First,Last);
       end;

    '4': begin
         Writeln('All elements deleted');
         DelAllElemDec(First,Last);
       end;

    '5': begin
         Write('Kolichestvo elementov v spiske: ');
         ShowAllSumElemDec(First,Last);
       end;
    end;
    until Item = '0';
  Writeln;
  Writeln;
  ReadLn;
end.
zaira001002 вне форума Ответить с цитированием
Старый 24.02.2014, 01:21   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
Current := First;
while Current <> nil do
begin
  Writeln(Current^.Elem);
  Current := Current.NextElem;
end;
Нравится ИУ7?)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 24.02.2014 в 01:27.
BDA вне форума Ответить с цитированием
Старый 24.02.2014, 01:50   #3
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию

ИУ7?Это был мне вопрос?А так спасибо,все работает)))
zaira001002 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить сумму тех элементов списка, значения которых меньше значений всех элементов, непосредственно следующих за ними (Delphi) Liba Помощь студентам 6 30.11.2012 00:34
Указатели.Поиск элементов в списке misery24-7 Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2012 14:26
Свой курсор для всех элементов, и отображение курсора в TIMAGE phphel Мультимедиа в Delphi 46 26.07.2010 15:07
Delphi. Перемещение всех элементов массива с четными значениями в конец массива2. deathz0r Помощь студентам 1 25.05.2010 15:04
Delphi.Как организовывать чтение из файла и отображение его в списке-ListBoxе. FireflyJuillet Помощь студентам 0 20.05.2010 00:54