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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - 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