Войти

Показать полную графическую версию : Нахождение длины наибольшего отрезка


Snakepower
16-01-2013, 23:14
С помощью матрицы (i=1,2;j=1,…n) на плоскости задано n точек так , что , координаты j-й точки. Точки попарно соединены отрезками. Найдите длину наибольшего отрезка. У меня есть решение данной задачи на паскале. Помогите переделать в Delphi. Вот код:
program matrix;
uses crt;
const n=6;
type matr=array[1..2,1..n] of byte;
var a:matr;
i,k,j,j_max:byte;
max:real;
x,y:real;
b:array[1..n-1] of real;
begin

{SR+}
clrscr;
k:=1;
writeln('исходная матрица');
for i:=1 to 2 do
begin
for j:=1 to n do
begin
a[i,j]:=random(10);
write(a[i,j]:3);
end;
writeln;
end;
begin
for j:=1 to n-1 do
b[j]:=sqrt(sqr(a[1,j]-a[2,j])+sqr(a[1,j+1]-a[2,j+1]));

end;
writeln(' длинны векторов ');
begin
for j:=1 to n-1 do
write( b[j]:5:2 );
end;
writeln;

begin
max:=b[1];
j_max:=1;
for j:=2 to n-1 do
if b[j]>max then
begin
max:=b[j];
j_max:=j;
end;
x:=(a[1,j_max+1]-a[1,j_max]);
y:=(a[2,j_max+1]-a[2,j_max]);
begin
writeln('координаты самого длинного вектора');
writeln( 'X=', x);
writeln( 'Y=', y);
end;
end;
end.

Заранее благодарен

lxa85
17-01-2013, 10:20
Snakepower, Скажи New -> New Project -> New Console Application (такая черная пиктограмма)
"uses crt" исключить, все остальное перенести в новый проект.
"{SR+}" Это я не знаю, что за ключ компилятору, его тоже исключить на всякий случай.
По коду замечания делать или не критично?

Snakepower
17-01-2013, 12:04
От замечании бы тоже не отказался

lxa85
17-01-2013, 12:26
a[i,j]:=random(10); »
Random есть. Randomize нет. Это снижает строгость псевдослучайности чисел. Здесь не критично, но вообще да.b[j]:=sqrt(sqr(a[1,j]-a[2,j])+sqr(a[1,j+1]-a[2,j+1])); »
Извлечение квадратного корня не точная операция, это может привести к ошибке. Например корень из 3 и корень из 3,00000001 дадут почти одинаковый ответ. Разрешимый в рамках квадратов и разрядной сетки. Но не в рамках квадратных корней.
Т.к. числа выбраны в диапазоне 0-255, то самый большой разброс 65535*2=255*sqrt(2). И вот опять. Корень из 2 -- число иррациональное.writeln(' длинны векторов ');
begin
for j:=1 to n-1 do
write( b[j]:5:2 );
end; »
Вас никто не просит печатать длины векторов. Отладочную информацию пожалуйста в комментарии.begin
max:=b[1];
j_max:=1;
for j:=2 to n-1 do
if b[j]>max then
begin
max:=b[j];
j_max:=j;
end;
x:=(a[1,j_max+1]-a[1,j_max]);
y:=(a[2,j_max+1]-a[2,j_max]);
begin
writeln('координаты самого длинного вектора');
writeln( 'X=', x);
writeln( 'Y=', y);
end;
end; »
Почему "for j:=2 to n-1 do", почему "n-1"? Напрашивается просто "n"
Может и правильно, но почему то смущает.
И опять же. Что просят в задании? Найдите длину наибольшего отрезка. »
Причем здесь координаты самого длинного отрезка?

Это как например: какова высота Эйфелевой башни? А ты говоришь -- в Париже!
Мне до лампочки, что она в Париже, мне бы ее высоту узнать.
Понимаешь, о чем я? :)

Snakepower
17-01-2013, 13:22
Полностью с вами согласен.




© OSzone.net 2001-2012