program var4;
Const N=5;
Type vec = array [1..N] of integer;
sp = ^spisok;
spisok = record
ind: integer; {индекс}
zn: integer; {коэффициент}
next: sp;
end;
TList = object
ur: sp; {переменная для использования списка}
otv: integer; {свободный член уравнения}
constructor Init; {инициализация списка}
destructor Done; {деструктор объекта}
procedure Add(x: integer); {процедура добавления элемента в список}
procedure Delete(i: integer); {процедура удаления элемента}
function GetKol: integer; {получение количества элементов}
function GetFirst: sp; {получение ссылки на первый элемент}
function Neviazka(var a: vec): integer;
private {ограничение доступа к полям}
first: sp; {первый элемент}
kol: integer; {количество элементов}
end;
sp1 = ^TEq;
TEq = object {список уравнений}
eq: TList;
next: sp1;
constructor Init;
destructor Done;
end;
Var eqs, first: sp1;
a: vec;
m1, m2: integer;
constructor TEq.Init;
begin
next:= nil;
end;
destructor TEq.Done;
begin
eq.Done;
end;
constructor TList.Init;
begin
ur:= nil;
first:= nil;
first^.ind:=1;
kol:= 0;
{writeln(’first=nil’);}
end;
destructor TList.Done;
var t, s:sp;
begin
t:=first;
while t<>nil do begin
s:=t;
t:=t^.next;
dispose (s); end;
end;
procedure TList.Add(x: integer);
var r: sp;
begin
if first=nil then
begin
new (first);
first^.ind:= 1;
first^.zn:= x;
first^.next:= nil;
kol:= 1;
end else
begin
new(r);
r^.ind:= 1;
r^.zn:= x;
r^.next:= nil;
ur:= first;
while ur^.next <> nil do ur:= ur^.next;
ur^.next:= r;
inc (kol);
end;
end;
procedure TList.Delete(i: integer);
var p: sp; h: integer;
begin
if (kol<>0) and (i<=kol) then
begin
if i<>1 then
begin
ur:= first;
while ur^.ind<>i do ur:= ur^.next;
p:= ur^.next;
ur^.next:= p^.next;
dispose (p);
end else
begin
p:= first;
first:= first^.next;
dispose (p);
end;
end;
end;
function TList.GetKol: integer;
begin
GetKol:= kol;
end;
function TList.GetFirst: sp;
begin
GetFirst:= first;
end;
function TList.Neviazka (var a: vec): integer;
var i: integer;
s: integer;
begin
ur:= first;
s:=0;
for i:=1 to N do
begin
s:= s+ a*ur^.zn;
ur:= ur^.next;
end;
Neviazka:= abs (otv-s);
end;
begin {пример использования}
new (first, Init); {выделяется память под первый элемент — первое уравнение системы}
first^.eq.Add(1); {добавяются коэффициенты}
first^.eq.Add(2);
first^.eq.otv:=7;
new (eqs, Init); {выделяется память под следующий элемент, для большого числа уравнений это надо делать в цикле}
eqs^.eq.Add (3);
eqs^.eq.Add (4);
eqs^.eq.otv:=9;
first^.next:= eqs; {ссылка предыдущего элемента указываеи на текущий}
eqs^.next:=nil;
a[1]:=3; {задаём массив корней уранений}
a[2]:=5;
m1:=first^.eq.Neviazka (a); {считаем невязку для первого}
m2:=eqs^.eq.Neviazka(a); {делаем то же для второго}
writeln (m1, ' ', m2); {я просто вывожу на экран, Вам же надо искать максимум}
end.
вылетает с ошибкой на процедуре TList.Add, в чем ошибка?
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ты бы хоть сказал, что за ошибка.
могу предположить, что не объявлена переменная ur. больше там особых огрехов вроде не вижу.
З.Ы. ненавижу паскаль.
ur: sp; {переменная для использования списка} — с этим всё ок.
Но таки придётся сказать, что за ошибка и что за программа