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

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

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

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

Купить рекламу на форуме 85 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2022, 18:43   #1
raiinc
Новичок
Джуниор
 
Регистрация: 13.11.2022
Сообщений: 1
По умолчанию Линейный список(помощь с ошибкой)

Код:
const
  maxLength = 100;
 
const
  colors : array [0..7] of String =
    ('чёрный', 'синий', 'зелёный', 'красный', 'голубой', 'оранжевый', 'жёлтый', 'белый');
 
type
  tElement = record
    value : Integer;
    color : String;
  end;
 
procedure printElement(element : tElement);
begin
  Write(element.value, '-', element.color);
end;
  
type
  tList = record
    length : Integer;
    elements : array [1..maxLength] of tElement;
  end;
 
procedure initList(var L : tList);
begin
  L.length := 0;
end;
 
procedure printList(L : tList);
var
  i : Integer;
begin
  if L.length = 0 then
    WriteLn('список пуст')
  else
    begin
      printElement(L.elements[1]);
      for i := 2 to L.length do begin Write(', '); printElement(L.elements[i]); end;
      WriteLn;
    end;
end;
 
function findList(n : Integer; L : tList; var element : tElement) : Boolean;
var
  i : Integer;
begin
  i := 0;
  while i < L.length do
    begin
      inc(i);
      if L.elements[i].value = n then
        begin
          element := L.elements[i];
          findList := True;
          Exit;
        end;
    end;
  findList := False;
end;
 
procedure addListTail(element : tElement; var L : tList);
begin
  if L.length = maxLength then
    begin
      WriteLn('список заполнен');
      Exit;
    end;
  inc(L.length);
  L.elements[L.length] := element;
end;
 
procedure addListBefore(t, V : tElement; var L : tList);
var
  i : Integer;
begin
  if L.length = maxLength then
    begin
      WriteLn('список заполнен');
      Exit;
    end;
  i := L.length;
  while L.elements[i] <> t do
    begin
      L.elements[i + 1] := L.elements[i];
      dec(i);
    end;
  L.elements[i + 1] := L.elements[i];
  L.elements[i] := V;
  inc(L.length);
end;
 
procedure addListAfter(t, V : tElement; var L : tList);
var
  i : Integer;
begin
  if L.length = maxLength then
    begin
      WriteLn('список заполнен');
      Exit;
    end;
  i := L.length;
  while L.elements[i] <> t do
    begin
      L.elements[i + 1] := L.elements[i];
      dec(i);
    end;
  inc(i);
  L.elements[i] := V;
  inc(L.length);
end;
 
procedure removeFromList(t : tElement; var L : tList);
var
  i : Integer;
  m : Boolean;
begin
  if L.length = 0 then
    begin
      WriteLn('список пуст');
      Exit;
    end;
  for i := 1 to L.length do
    if m then
      L.elements[i - 1] := L.elements[i]
    else
      m := L.elements[i] = t;
  if m then
    dec(L.length);
end;
  
var
  L : tList;
  V, t : tElement;
  i : Integer;
begin
  initList(L);
  
  Randomize;
  for i := 1 to 10 do
    begin
      V.value := Random(100);
      V.color := colors[Random(8)];
      addListTail(V, L);
    end;
    
  printList(L);
  
  Write('добавить перед № = '); ReadLn(i);
  if findList(i, L, t) then
    begin
      printElement(t); WriteLn;
      
      V.value := Random(100);
      V.color := colors[Random(8)];
      addListBefore(t, V, L);
    end
  else
    WriteLn('такого значения нет в списке');
  
  printList(L);
 
  Write('добавить после № = '); ReadLn(i);
  if findList(i, L, t) then
    begin
      printElement(t); WriteLn;
      
      V.value := Random(100);
      V.color := colors[Random(8)];
      addListAfter(t, V, L);
    end
  else
    WriteLn('такого значения нет в списке');
 
  printList(L);
  
  Write('удалить № = '); ReadLn(i);
  if findList(i, L, t) then
    begin
      printElement(t); WriteLn;
      
      removeFromList(t, L);
    end
  else
    WriteLn('такого значения нет в списке');
 
  printList(L);
end.
Ошибка вот такая
main.pas(83,23) Error: Operator is not overloaded: "tElement" = "tElement"
main.pas(103,23) Error: Operator is not overloaded: "tElement" = "tElement"
main.pas(127,26) Error: Operator is not overloaded: "tElement" = "tElement"
raiinc вне форума Ответить с цитированием
Старый 16.11.2022, 15:16   #2
Alex314
 
Регистрация: 14.04.2014
Сообщений: 8
По умолчанию

Линейный список на базе статического массива? В 2022 году? При наличии готового линейного списка List<T> ? Слов нет...
Alex314 вне форума Ответить с цитированием
Старый 16.11.2022, 15:38   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,223
По умолчанию

Цитата:
Сообщение от raiinc Посмотреть сообщение
main.pas(83,23) Error: Operator is not overloaded: "tElement" = "tElement"
main.pas(103,23) Error: Operator is not overloaded: "tElement" = "tElement"
main.pas(127,26) Error: Operator is not overloaded: "tElement" = "tElement"
Потому что для структуры типа tElement не определен оператор сравнения. Либо напишите его, либо в трех местах поменяйте код на поэлементное сравнение компонентов структуры и логическую сцепку этих сравнений через or/and/not
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 85 тыс рублей в месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейный список (С++) Mako-chi Помощь студентам 4 30.05.2013 12:23
Линейный список. GripEnemy Visual C++ 0 05.12.2011 22:35
линейный список Nelson1992 Помощь студентам 1 26.11.2011 01:40
C++,линейный список katerunechka Помощь студентам 0 08.10.2011 11:38
Линейный список Black_Ak24 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2008 15:00