Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Нахождение длины наибольшего отрезка (http://forum.oszone.net/showthread.php?t=251636)

Snakepower 16-01-2013 23:14 2068488

Нахождение длины наибольшего отрезка
 
С помощью матрицы (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 2068648

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

Snakepower 17-01-2013 12:04 2068705

От замечании бы тоже не отказался

lxa85 17-01-2013 12:26 2068718

Цитата:

Цитата Snakepower
a[i,j]:=random(10); »

Random есть. Randomize нет. Это снижает строгость псевдослучайности чисел. Здесь не критично, но вообще да.
Цитата:

Цитата Snakepower
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 -- число иррациональное.
Цитата:

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

Вас никто не просит печатать длины векторов. Отладочную информацию пожалуйста в комментарии.
Цитата:

Цитата Snakepower
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
Найдите длину наибольшего отрезка. »

Причем здесь координаты самого длинного отрезка?

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

Snakepower 17-01-2013 13:22 2068758

Полностью с вами согласен.


Время: 11:11.

Время: 11:11.
© OSzone.net 2001-