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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2010, 22:00   #1
*Натали*
 
Регистрация: 07.04.2010
Сообщений: 3
По умолчанию Списки в статической памяти.

Создать на статической памяти 2 списка треугольников, задаваемых структурой, содержащей координаты 3-х вершин треугольника в 3-х мерном пространстве. Порядок вершин произволен. Треугольники, принадлежащие к одному списку, между собой не совпадают. Реализовать функцию, формирующую из заданных 2-х списков 3-й, содержащий данные из заданных первого списка, отсутствующие во втором.
*Натали* вне форума Ответить с цитированием
Старый 08.04.2010, 09:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: Опороси преподавателя что такое "Статическая память"
Во-вторых: Спроси на каком языке это делать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.04.2010, 20:04   #3
*Натали*
 
Регистрация: 07.04.2010
Сообщений: 3
По умолчанию

Данные статической структуры – это данные, взаиморасположение и взаимосвязи элементов которых всегда остаются постоянными.
Вот кусок программы тут есть ошибки. Помогите дописать

Код:
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[i].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;

Последний раз редактировалось Stilet; 14.04.2010 в 09:38.
*Натали* вне форума Ответить с цитированием
Старый 14.04.2010, 09:55   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это кусок, а где вызовы этих функций?

Я вот тут пример от себя накидал:
Код:
type
 PTTri=^TTri;
 TTri=record y,x:array[1..3] of integer; next:PTTri; end;
var
 t1,t2,t3,cur:PTTri;

 procedure fill(t:PTTri;n:integer);
 var k,i,e:integer;
 begin
   cur:=t;
   for i:=0 to n do begin
   {Заполняем список точками треугольников}
     for k:=1 to 3 do begin
      cur^.x[k]:=i;
      cur^.y[k]:=i;
     end;
      new(cur^.next);
      cur:=cur^.next;
   end;
  cur^.next:=nil;
 end;

 procedure group(q,w:PTTri);
 var h,a,s:PTTri;b:boolean;   z,x:TTri;
   function ok(tri1,trito:PTTri):boolean;
   var k,i:integer;
   begin
    Result:=false;
    while (trito<>nil) do begin
     k:=0;
     for i:=1 to 3 do
      if (tri1^.y[i]=trito^.y[i])and(tri1^.x[i]=trito^.x[i])then inc(k);
     if k=3 then begin
      group:=true;exit;
     end;
     trito:=trito^.next;
    end;
   end;

 begin
  a:=q;s:=w;
  new(t3);   h:=t3;
  while (a<>nil) do begin
   if not ok(a,s) then begin
    t3^.y:=a^.y;
    t3^.x:=a^.x;
    new(t3^.next);
    t3:=t3^.next;
   end;
   a:=a^.next;
  end;
  t3^.next:=nil;
  t3:=h;
 end;

 procedure show(t:PTTri);
 var i:integer;
 begin
  cur:=t;      writeln('List:');
  while cur<>nil do begin write(' ');
   for i:=1 to 3 do write(cur^.x[i]:3);
   writeln;
   cur:=cur^.next;
  end;
  writeln;
 end;

begin
   new(t1);new(t2);
   fill(t1,5);fill(t2,3);
   show(t1);show(t2);
   group(t1,t2);
    show(t3);
  { TODO -oUser -cConsole Main : Insert code here }
  readln;
end.
I'm learning to live...

Последний раз редактировалось Stilet; 14.04.2010 в 10:40.
Stilet вне форума Ответить с цитированием
Старый 14.04.2010, 11:05   #5
*Натали*
 
Регистрация: 07.04.2010
Сообщений: 3
По умолчанию

Это уже на динамической
*Натали* вне форума Ответить с цитированием
Старый 14.04.2010, 11:48   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Посмотри как я сделал процедуру group
Там алгоритм перебора - вот адаптируй его не под указатели а под массивы.
Но учти - задание глупо поставленное. В таком случае тебе нужно обьявить три массива где размер третьего массива будет из суммы двух превых.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объем статической памяти Juffin Общие вопросы Delphi 1 10.11.2009 16:07
Списки С++ Vikylik Помощь студентам 0 08.04.2009 16:31