Показать сообщение отдельно
Старый 04.06.2014, 09:48   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Madara Посмотреть сообщение
Я с ума сойду
Я с Вами тоже.

Название: offtopic.gif
Просмотров: 185

Размер: 925 байтЗнаете, был такой анекдот:
- Подсудимый, ваше последнее слово!
- Ну вы, блин, даёте...

Ведь вот дана была хорошая, отлаженная программка - нет, хочу по-своему! Прекрасно. Вообще-то заслуживает всяческого уважения, куда большего, чем "ничего не знаю, дайте - я скатаю". Но всё-таки надо же представлять себе смысл простейших операторов языка!
Вот вы решили вместо массива записей (как у меня), каждая из которых содержит полную информацию о координатах одной точки, сделать единую запись с полями-массивами. Чудесно (хотя, по-моему, это доставание правого уха через-под левое колено, поскольку смысла в такой записи при наличии массивов координат - ровно ноль, ну да Вам виднее - можно и так). И что Вы делаете дальше? Вместо того, чтобы проверять истинность утверждения о том, что конкретная точка сидит в первом квадранте, Вы в функцию First_Quadr за каким-то хреном врабатываете цикл ПО ВСЕМ ТОЧКАМ, причем, вопреки всем правилам и здравому смыслу, используете один и тот же идентификатор (i) и как формальный параметр функции, и как переменную внутреннего цикла! Бедный Паскаль... Даже если он и продерётся через такую конструкцию, то в итоге на выходе функции появится информация о принадлежности к первому квадранту ТОЛЬКО ПОСЛЕДНЕЙ ТОЧКИ!
Короче говоря, первое, что нужно - выкинуть цикл из функции: нечего ему там делать!!!
Должно быть как-то так:
Код:
Function First_Quadr(i:integer; z:Coord):boolean; 
begin 
 if (z.x[i]>=0) and (z.y[i]>=0) then 
  First_Quadr:=true 
 else 
  First_Quadr:=false; 
end;
Идём дальше. Вот Вы объявили переменную Point с этими чудовищными полями-массивами. Но где присвоение ей какого-то значения? Откуда основная программа узнает, что полями этой Вашей Point являются заданные константы-массивы? Нет уж, будьте любезны об этом позаботиться. Например, так:
Код:
Point.x:=x;
Point.y:=y;
Между прочим, одинаковое обозначение поля записи и константы-массива (х,у) - идея до крайности неудачная. Хоть формально и разрешено, но вместо ожидаемой наглядности вносит большую путаницу.
Поехали дальше.
Постановка операторных скобок begin..end внутри программы имеет смысл только тогда, когда ими выделяется тело какого-либо оператора. Выделение просто куска (блока) программы - бессмысленно. Поэтому "begin" после b:=true; и соответствующий ему "end" нужно убрать.
Далее. Ну зачем же при наличии точек вне первого квадранта выводить заголовок 'Координаты точек не попавших в первый квадрант: ' перед выводом координат КАЖДОЙ из этих точек?! Некрасиво. Кроме того, вывод самих координат следует, естественно, сделать форматным. Опять же для красоты.

Я тут нарисовал тестовый вариант без модуля (лень было с ним дрызгаться). Советую взять за основу.

Код:
Const
 n=5;

Type
 mass = array[1..n] of real;
 Coord=Record
        x,y:mass;
       End;

Const
 x:mass=(2, -3, 6, 7, 8);
 y:mass=(0, 1, -2, 9, 3);

Var
 i:byte;
 b:boolean;
 Point:Coord;
 R:real;

Function First_Quadr(i:integer; z:Coord):boolean;
begin
 if (z.x[i]>=0) and (z.y[i]>=0) then
  First_Quadr:=true
 else
  First_Quadr:=false;
end;

Begin
 Point.x:=x;
 Point.y:=y;
 R:=0;
 b:=true;
 for i:=1 to n do
  if not First_Quadr(i, Point) then
   begin
    b:=false;
    writeln('Point coordinates out of first quadrant: ');
   end;
 if not b then
  begin
   for i:=1 to n do
    if not First_Quadr(i, Point) then
      writeln('x = ',Point.x[i]:0:3,'      y = ',Point.y[i]:0:3);
  end
  else
  begin
   for i:=1 to n do
    if Sqrt(Sqr(Point.x[i])+Sqr(Point.y[i]))>R then
         R:=Sqrt(Sqr(Point.x[i])+Sqr(Point.y[i]));
  end;
 if b then
  begin
   writeln('All points belong to first quadrant. ');
   writeln('Rmax = ',R:0:3);
  end;
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070