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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2011, 21:53   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию (Pascal) Задача на массив

Помогите найти ошибку.

Условие
Произвольный выпуклый многоугольник задан координатами своих вершин на плоскости. Найдите самую длинную диагональ данного многоугольника.

Код:
const n_max=10;
 
type 
tymple=array [1..n_max] of integer; 
var 
x,y,r:tymple;
    i,j,n:integer;
    d_max,d:real;
begin
  write('Введите кол-во вершин многоугольника: ');
  readln(n);
  while n>n_max do
    begin
      writeln('Ошибка! Повторите ввод!');
      readln(n);
    end;
  for i:=1 to n do
    begin
      writeln('Введите координаты ',i,'-й вершины(x,y)');
      readln(x[i],y[i]);
      writeln;
    end;
end;
begin
  for i:=1 to n do
    r[i]:=trunc(sqrt(sqr(x[i+1]-x[i])+sqr(y[i+1]-y[i]))); //расстояние между точками
end;
begin
  Input(x,y,n);
  SegLen(x,y,d,n);
  for i:=1 to n do
    write(x[i],',',y[i],' ');
  writeln;
  for i:=1 to n do
    write(d[i],' ');
  readln;
 begin
  d_max:=0;
  for i:=1 to n-2 do
    begin
        for j:=1 to n do
        begin
            if ((j-i)>=2) and ((j-i)<(n-1)) then
            begin
                d:=sqrt(sqr(x[j]-x[i])+sqr(y[j]-y[i]));
                if d>d_max then d_max:=d;
            end;
        end;
    end;
 writeln('Самая длинная диагональ: ',d_max:2:1);
 readln;
end.

Последний раз редактировалось Начинающий програм; 23.11.2011 в 21:55.
Начинающий програм вне форума Ответить с цитированием
Старый 23.11.2011, 22:15   #2
McFrey
Форумчанин
 
Аватар для McFrey
 
Регистрация: 15.10.2011
Сообщений: 306
По умолчанию

здесь целая кладезь ошибок...
1) begin
writeln('Введите координаты ',i,'-й вершины(x,y)');
readln(x[i],y[i]);
writeln;
end;
end; - в этом месте последний end лишний
2) Input(x,y,n); это ведь процедура, а каждую процедуру необходимо описывать в самом начале программы.

вот программа твоя, в которой некоторые ошибки отлажены...дальше попробуй сам, там уже все довольно просто)


const
n_max = 10;

procedure input;
type
tymple = array [1..n_max] of integer;
var
x, y, r: tymple;
i, j, n: integer;
d_max, d: real;
begin
write('Введите кол-во вершин многоугольника: ');
readln(n);
while n > n_max do
begin
writeln('Ошибка! Повторите ввод!');
readln(n);
end;
for i := 1 to n do
begin
writeln('Введите координаты ', i, '-й вершины(x,y)');
readln(x[i], y[i]);
writeln;
end;


begin
for i := 1 to n do
r[i] := trunc(sqrt(sqr(x[i + 1] - x[i]) + sqr(y[i + 1] - y[i]))); //расстояние между точками
end;
begin
input(x, y, n);
SegLen(x, y, d, n);
for i := 1 to n do
write(x[i], ',', y[i], ' ');
writeln;
end;
for i := 1 to n do
write(d[i], ' ');
readln;
end;

begin
d_max := 0;
for i := 1 to n - 2 do
begin
for j := 1 to n do
begin
if ((j - i) >= 2) and ((j - i) < (n - 1)) then
begin
d := sqrt(sqr(x[j] - x[i]) + sqr(y[j] - y[i]));
if d > d_max then d_max := d;
end;
end;
end;
writeln('Самая длинная диагональ: ', d_max:2:1);
readln;
end.
Если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое...
McFrey вне форума Ответить с цитированием
Старый 23.11.2011, 22:27   #3
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Я Вам очень благодарен!
Начинающий програм вне форума Ответить с цитированием
Старый 24.11.2011, 18:03   #4
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Чет я немогу найти ошибки в программе
Код:
const n_max=10;
 
type 
tymple=array [1..n_max] of integer; 
var 
x,y,r:tymple;
    i,j,n:integer;
    d_max,d:real;
begin
  write('Введите кол-во вершин многоугольника: ');
  readln(n);
  while n>n_max do
    begin
      writeln('Ошибка! Повторите ввод!');
      readln(n);
    end;
  for i:=1 to n do
    begin
      writeln('Введите координаты ',i,'-й вершины(x,y)');
      readln(x[i],y[i]);
      writeln;
    end;
end;
begin
  for i:=1 to n do
    r[i]:=trunc(sqrt(sqr(x[i+1]-x[i])+sqr(y[i+1]-y[i]))); //расстояние между точками
end;
begin
  Input(x,y,n);
  SegLen(x,y,d,n);
  for i:=1 to n do
    write(x[i],',',y[i],' ');
  writeln;
  for i:=1 to n do
    write(d[i],' ');
  readln;
 begin
  d_max:=0;
  for i:=1 to n-2 do
    begin
        for j:=1 to n do
        begin
            if ((j-i)>=2) and ((j-i)<(n-1)) then
            begin
                d:=sqrt(sqr(x[j]-x[i])+sqr(y[j]-y[i]));
                if d>d_max then d_max:=d;
            end;
        end;
    end;
 writeln('Самая длинная диагональ: ',d_max:2:1);
 readln;
end.
Начинающий програм вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Задача на массив BLackJackxxx Помощь студентам 7 16.04.2011 00:10
Задача Pascal(Массив) AyMosg Помощь студентам 3 29.12.2010 00:16
[Pascal] Задача на массив. Kirimba Помощь студентам 2 05.12.2010 13:47
Задача на массив Pascal shozanah Помощь студентам 5 20.11.2010 23:44