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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 00:16   #1
Alexsey1991
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 32
По умолчанию Подпрограмма на паскале

Код:
type
 TMatrix = array[1..3,1..3] of real;
var
 x:TMatrix;
 i,k:integer;
function rastoianie(x1,y1,x2,y2:real):real;
begin
   rastoianie:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;
procedure tochki(z:TMatrix);
var
  b,min,max:real;
  i,k:integer;
  c,a:array[1..2,1..2] of real;
begin
  min:=0; max:=0;
  for i:=1 to 4 do
  for k:=i+1 to 5 do
  begin
    b:=rastoianie(z[i,1],z[i,2],z[k,1],z[k,2]);
    if min=0 then
    begin
      min:=b;
      c[1,1]:=z[i,1];
      c[1,2]:=z[i,2];
      c[2,1]:=z[k,1];
      c[2,2]:=z[k,2];
    end;
    if max<b then
    begin
      max:=b;
      a[1,1]:=z[i,1];
      a[1,2]:=z[i,2];
      a[2,1]:=z[k,1];
      a[2,2]:=z[k,2];
    end;
    if min>b then
    begin
      min:=b;
      c[1,1]:=z[i,1];
      c[1,2]:=z[i,2];
      c[2,1]:=z[k,1];
      c[2,2]:=z[k,2];
    end;
  end;
  writeln('samaia dlinoe rastoianie megdu tockami koordinate',a[1,1],a[1,2],' I ',a[2,1],a[2,2]);
end;
begin
  writeln('Vedite 5 tochek');
  for i:=1 to 5 do
  for k:=1 to 2 do
  begin
    writeln('vedite ',i,' tochku');
    writeln(k,' koordinate');
    readln(x[i,k]);
    tochki(x);
  end;
end.
Задача:на плоскости задано 5 точек своими координатами.Выяснить какие точки на максимальном и минимальном расстояние.Программу оформит в виде процедуры ,в которую в качестве параметра передается массив точек,составить ещё и функцию вычисления расстояния между точек.Что смог то написал прошу пожалуйста прокоментировать код и сказать в чем ошибка?????
Alexsey1991 вне форума Ответить с цитированием
Старый 22.04.2010, 00:23   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Цитата:
Что смог то написал прошу пожалуйста прокоментировать код
если б сам написал, комментарии бы не спрашивал )
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 22.04.2010, 00:23   #3
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Цитата:
если б сам написал, комментарии бы не спрашивал )
Верное замечание.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 22.04.2010, 04:42   #4
Alexsey1991
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 32
По умолчанию

не реально сам написал да вот не работает???
Alexsey1991 вне форума Ответить с цитированием
Старый 22.04.2010, 08:00   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то мне твой код ну никак ниразу совсем не ненравится чтоб быть хорошим...
Посему прикладываю свой на основе твоего:
Код:
 type
 TMatrix = array[1..5,1..2] of real;
var
 x:TMatrix;
 i,k,q,w:integer;
 max:real;

function rastoianie(x1,y1,x2,y2:real):real;
begin
   Result:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;

procedure go(m:TMatrix);
begin
  for i:=1 to 5 do begin
   for k:=i+1 to 5 do begin
     if max<rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]) then begin
      max:=rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]);
      q:=i;w:=k;
     end;
   end;
  end;
  { TODO -oUser -cConsole Main : Insert code here }
  writeln; writeln(max:5:2,' between (',x[q,1]:-5:2,',',x[q,2]:5:2,')-','(',x[w,1]:5:2,',',x[w,2]:5:2,')');
end;

begin
  for i:=1 to 5 do begin
   for k:=1 to 2 do  begin
    x[i,k]:=random(100); write(x[i,k]:10:2);
   end; writeln;
  end;
  go(x);
  readln;
end.
Цитата:
прокоментировать код и сказать в чем ошибка
Посмотри как у меня сравниваются дистанции какждой точки с каждой точкой.
А после сравнения я лишь запоминаю номера точек, а ты еще что-то делаешь. Ненужные левые условия какие-то...
I'm learning to live...

Последний раз редактировалось Stilet; 22.04.2010 в 08:04.
Stilet вне форума Ответить с цитированием
Старый 22.04.2010, 19:26   #6
Alexsey1991
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
 type
 TMatrix = array[1..5,1..2] of real;
var
 x:TMatrix;
 i,k,q,w:integer;
 max:real;

function rastoianie(x1,y1,x2,y2:real):real;
begin
   Result:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;

procedure go(m:TMatrix);
begin
  for i:=1 to 5 do begin
   for k:=i+1 to 5 do begin
     if max<rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]) then begin
      max:=rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]);
      q:=i;w:=k;
     end;
   end;
  end;
  { TODO -oUser -cConsole Main : Insert code here }
  writeln; writeln(max:5:2,' between (',x[q,1]:-5:2,',',x[q,2]:5:2,')-','(',x[w,1]:5:2,',',x[w,2]:5:2,')');
end;

begin
  for i:=1 to 5 do begin
   for k:=1 to 2 do  begin
    x[i,k]:=random(100); write(x[i,k]:10:2);
   end; writeln;
  end;
  go(x);
  readln;
end.
почему минимальное растояние не вычитывается?
Код:
type
 TMatrix = array[1..5,1..2] of real;
var
 x:TMatrix;
 i,k,q,w,a,b:integer;
 max,min:real;

function rastoianie(x1,y1,x2,y2:real):real;
begin
   Result:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;

procedure go(m:TMatrix);
begin
  for i:=1 to 4 do begin
   for k:=i+1 to 5 do begin
     if max<rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]) then begin
      max:=rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]);
      q:=i;w:=k;
     end;
   end;
  end;
   for i:=1 to 4 do begin
    for k:=i+1 to 5 do begin
      if min>rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]) then begin
       min:=rastoianie(x[i,1],x[i,2],x[k,1],x[k,2]);
       a:=i;b:=k;
      end;
    end;
   end;
  writeln; writeln(max:5:2,' максимальное растояние между точками, с координатами первой точки(x=',x[q,1],',y=',x[q,2],') и второй точки с координатами','(x=',x[w,1],',y=',x[w,2],')');
  writeln; writeln(min:5:2,' минимальное растояние между точками, с координатами первой точки(x=',x[a,1],',y=',x[a,2],') и второй точки с координатами','(x=',x[b,1],',y=',x[b,2],')');
end;

begin
  for i:=1 to 5 do begin
   writeln('vedite ',i,' точку');
   for k:=1 to 2 do  begin
    writeln(k,' координат');
    readln(x[i,k]);
   end; writeln;
  end;
  go(x);
  readln;
end.
Alexsey1991 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подпрограмма с графикой Alexsey1991 Помощь студентам 4 13.04.2010 18:18
Подпрограмма Maks6169 Помощь студентам 4 13.02.2010 12:30
Подпрограмма на Турбо паскале daemoon1 Помощь студентам 9 14.12.2009 00:36
Паскаль--Подпрограмма Lyf4ever Помощь студентам 5 13.05.2009 14:09
подпрограмма alex1313 Паскаль, Turbo Pascal, PascalABC.NET 2 02.04.2009 21:13