program triangl;
uses crt;
const N=5;
null=-1;
type TData=integer;
PElem=integer;
PList=record;
data:array [1..3, 1..3] of TData;
Next:PElem;
end;
TList=record;
buffer:array[1..n] of PList;
head:PElem;
free:PElem;
end;
procedure inic(var list:TList );
var
i:byte;
begin
list.head:=null;
list.free:=1;
for i:=1 to n-1 do
list.buffer.next:=i+1;
list.buffer[n].next:=null;
end;
function getfreeelem (var list:TList):PElem;
begin
if list.free<>null then
begin
getfreeelem:=list.free;
list.free:=list.buffer[list.free].next;
end
else
getfreeelem:=null;
end;
function proverka:array[1..3, 1..3] of TData;
var
q:boolean;
i,j:byte;
triangle:array[1..3, 1..3] of integer;
begin
repeat
for i:=1 to 3 do
for j:=1 to 3 do
begin
writeln('ââåäèòå ',i,'-óþ êîîðäèíàòó ',j,'-îé òî÷êè');
readln(triangle[i, j]);
end;
if sqrt((triangle[2, 1]-triangle[1, 1])*(triangle[2, 1]-triangle[1, 1])+
(triangle[2, 2]-triangle[1, 2])*(triangle[2, 2]-triangle[1, 2])+
(triangle[2, 3]-triangle[1, 3])*(triangle[2, 3]-triangle[1, 3]))+
sqrt((triangle[3, 1]-triangle[2, 1])*(triangle[3, 1]-triangle[2, 1])+
(triangle[3, 2]-triangle[2, 2])*(triangle[3, 2]-triangle[2, 2])+
(triangle[3, 3]-triangle[2, 3])*(triangle[3, 3]-triangle[2, 3]))>
sqrt((triangle[1, 1]-triangle[3, 1])*(triangle[1, 1]-triangle[3, 1])+
(triangle[1, 2]-triangle[3, 2])*(triangle[1, 2]-triangle[3, 2])+
(triangle[1, 3]-triangle[3, 3])*(triangle[1, 3]-triangle[3, 3]))
then
q:=true
else
writeln('òðåóãîëüíèê íå ñóùåñòâóåò');
until (q=true);
proverka:=triangle;
end;
function getlastelem(var list:Tlist):Pelem;
var
pointer:Pelem;
begin
pointer:=list.head;
if pointer<>null then
begin
while pointer<>null do
begin
getlastelem:=pointer;
pointer:=list.buffer[pointer].next;
end;
end;
getlastelem:=null;
end;
function insertend(var list:Tlist; data:array[1..3, 1..3] of integer):boolean;
var
lastelem, pointer:Pelem;
begin
lastelem:=getlastelem(list);
pointer:=getfreeelem(list);
if pointer<>null then
begin
if lastelem<>null then
begin
list.buffer[lastelem].next:=pointer;
list.buffer[pointer].data:=data;
list.buffer[pointer].next:=null;
end;
else
begin
list.head:=pointer;
list.buffer[pointer].data:=data;
list.buffer[pointer].next:=null;
end;
insertend:=true;
else
insertend:=folse;
end;
function freeelem(var list:Tlist):boolean;
begin
if list.free<>null then
freeelem:=true;
else
freeelem:=folse;
end;
procedure readlist(var list:Tlist);
var
q:string;
begin
repeat
insertend(list, prov);
writeln('ââåäèòå åù¸ îäèí òðåóãîëüíèê');
readln(q);
until (freeelem(list)=null) or (q='n');
end;
procedure writeelem(data:array[1..3, 1..3] of integer);
var
i, j:byte;
begin
for i=1 to 3 do
begin
writeln;
for j=1 to 3 do
write(data[i, j],' ');
end;
end;
procedure writelist(var list:tlist);
var
pointer:Pelem;
begin
pointer:=list;
while pointer<>null do
begin
writeelem(list).buffer[pointer].data;
pointer:=list.buffer[pointer].next;
end;
end;
Списки на статической пимаяти (Паскаль)
Создать на статической памяти 2 списка треугольников, задаваемых структурой, содержащей координаты 3-х вершин треугольника в 3-х мерном пространстве. Порядок вершин произволен. Треугольники, принадлежащие к одному списку, между собой не совпадают. Реализовать функцию, формирующую из заданных 2-х списков 3-й, содержащий данные из заданных первого списка, отсутствующие во втором.