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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2016, 22:55   #1
Bafyn
 
Регистрация: 31.05.2016
Сообщений: 3
Вопрос при попытке обращения к ссылке в классе выдается ошибка

Что я делаю не так, при попытке обращения к ссылке в классе выдается ошибка (с двусвязными списками работаю второй день, на паскале не кодил со школы, не судите строго)
Код:
program listexample;
uses CRT;
type
  plist = ^tlist;
  p2list = ^plist;
  tlist = record
    datai:integer;
    next, prev:plist;
  end;
type cc = class
  private
    cclist:plist;
  public
    procedure display();
    procedure addToEnd (list:p2list; d:integer);
    procedure delFromBegin(list:p2list);
    procedure findData(list:p2list; datai:integer);
end;
procedure cc.display();
var
  p:plist;
begin
  if cclist = nil then
    writeLn ('List cleaning')
  else
  begin
    p := cclist;
    while p^.prev <> nil do
      p := p^.prev;
    while p <> nil do
    begin
      if p = cclist then
        write('*', ' ')
      else
        write('  ');
      writeln(p^.datai);
      p := p^.next
    end
  end
end;
procedure cc.addToEnd (list:p2list; d:integer);
var
  prior:plist;
begin
  prior := nil;
  while list^ <> nil do
  begin
    prior := list^;
    list :=  @list^^.next
  end;
  New (list^);
  with list^^ do
  begin
    datai := d;
    next := nil;
    prev := prior
  end
end;
procedure cc.delFromBegin(list:p2list);
begin
  if list^ = nil then
    exit;
  if list^^.next <> nil then
  begin
    list^ := list^^.next;
    list^^.prev := list^^.prev^.prev;
    if list^^.prev <> nil then
      list^^.prev^.next := list^;
  end
  else
    if list^^.prev <> nil then
    begin
      list^ := list^^.prev;
      list^^.next := list^^.next^.next;
      if list^^.next <> nil then
        list^^.next^.prev := list^;
    end
    else
      list^ := nil;
end;
procedure cc.findData(list:p2list; datai:integer);
var
  l:plist;
begin
  if  list^ = nil then
  begin
    exit;
  end;
  while list^^.prev <> nil do
    list^ := list^^.prev;
  l := list^;
  while l <> nil do
  begin
    if l^.datai = datai then
    begin
      list^ := l;
      exit;
    end;
    l := l^.next
  end;
end;
var
  clist:cc;
  i:integer;
begin
  while true do
  begin
    ClrScr;
    writeLn('1 - Add to end');
    writeLn('2 - Find data');
    writeLn('3 - Delete begin');
    writeLn('0 - Exit');
    writeLn('>>>>');
    writeln(#10, 'List: ');
    clist.display();
    gotoxy(5, 5);
    Readln(i);
    case i of
      1:
      begin
        write('Enter number: ');
        readLn(i);
        clist.addToEnd(@clist.cclist, i);
      end;
      2:
      begin
        write('Enter number: ');
        readLn(i);
        clist.findData(@clist.cclist, i);
      end;
      3:
        clist.delFromBegin(@clist.cclist);
      0:
        break;
    end;
  end;
end.
P.S. Заранее благодарю!!!
Bafyn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выдается ошибка при компиляции Алексей_2012 Общие вопросы Delphi 4 16.11.2012 18:06
Ошибка при попытке компиляции demoniqus Общие вопросы C/C++ 15 17.04.2012 13:11
ошибка при попытке билда в masm'e nuevegramodelamor Помощь студентам 2 24.01.2011 19:45
ошибка при попытке запустить программу Fellot Общие вопросы Delphi 3 23.04.2009 21:23