• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Турбо Паскаль. Тип запись

Светик123

Новые
Регистрация
2 Мар 2014
Сообщения
32
Реакции
0
Баллы
0
Турбо Паскаль. Тип запись

Помогите,пожалуйста, создать программу. Совершенно не поняла как использовать "тип запись"

задание: Создать записи определяющие положение точки в декартовой и в полярной системах координат. Описать процедуру, преобразующую координаты точки на плоскости из декартовой в полярные
 
Помогите,пожалуйста, создать программу. Совершенно не поняла как использовать "тип запись"

задание: Создать записи определяющие положение точки в декартовой и в полярной системах координат. Описать процедуру, преобразующую координаты точки на плоскости из декартовой в полярные
Легко. Например, так:
Код:
Type
 Cartez=Record
         x,y:real;
        end;
 Polar=Record
        R,fi:real;
       end;

Function Cart2Pol(Cr:Cartez):Polar;
begin
 Cart2Pol.R:=SQRT(SQR(Cr.x)+SQR(Cr.y));
 with Cr do
  if (x>0) and (y>=0) then Cart2Pol.fi:=Arctan(y/x) else
  if (x=0) and (y>0) then Cart2Pol.fi:=Pi/2 else
  if (x<0) and (y>=0) then Cart2Pol.fi:=Pi+Arctan(y/x) else
  if (x<0) and (y<0) then Cart2Pol.fi:=-Pi+Arctan(y/x) else
  if (x=0) and (y<0) then Cart2Pol.fi:=-Pi/2 else
  if (x>0) and (y<0) then Cart2Pol.fi:=Arctan(y/x) else
  Cart2Pol.fi:=10;
end;

Var
 C:Cartez;

Begin
 Write('x= ');
 Readln(C.x);
 Write('y= ');
 Readln(C.y);
 Writeln('R= ',Cart2Pol(C).R:0:2);
 if Cart2Pol(C).fi=10 then
  Writeln('Fi: not determined')
 else
  Writeln('Fi= ',Cart2Pol(C).fi/Pi*180:0:2,' deg.');
 Readln
End.
Впрочем, не любой Паскаль понимает функцию-запись. Если Ваш заартачится - напишите, переделаем в процедуру.
 
пишет ошибку №34 (Invalid function result type) в этой строчке
Function Cart2Pol(Cr:Cartez):Polar;
как исправить?
 
Попробуйте такой вариант:
Код:
Type
 Cartez=Record
         x,y:real;
        end;
 Polar=Record
        R,fi:real;
       end;

Procedure Cart2Pol(Cr:Cartez; var Pl:Polar);
begin
 Pl.R:=SQRT(SQR(Cr.x)+SQR(Cr.y));
 with Cr do
  if (x>0) and (y>=0) then Pl.fi:=Arctan(y/x) else
  if (x=0) and (y>0) then Pl.fi:=Pi/2 else
  if (x<0) and (y>=0) then Pl.fi:=Pi+Arctan(y/x) else
  if (x<0) and (y<0) then Pl.fi:=-Pi+Arctan(y/x) else
  if (x=0) and (y<0) then Pl.fi:=-Pi/2 else
  if (x>0) and (y<0) then Pl.fi:=Arctan(y/x) else
  Pl.fi:=10;
end;

Var
 C:Cartez;
 P:Polar;

Begin
 Write('x= ');
 Readln(C.x);
 Write('y= ');
 Readln(C.y);
 Cart2Pol(C,P);
 Writeln('R= ',P.R:0:2);
 if P.fi=10 then
  Writeln('Fi: not determined')
 else
  Writeln('Fi= ',P.fi/Pi*180:0:2,' deg.');
 Readln
End.
 
программа работает, спасибо. только что означают переменные R, Fi? положение точки в системе?
 
я все равно до конца не понимаю, что происходит в программе. если Вам не тяжело, вы можете мне объяснить структуру программы и где осуществился перевод? Пожалуйста.
 
Света, а скажите честно: Вы представляете себе вообще что такое полярная система координат? Может быть, нужно объяснить?
 
представляю. если декартова - оси х,у, то декартова представляет собой окружность (по ней в школе тригонометрию проходят). так?
 
я ошиблась. во втором случае: то полярная - окружность
 
Нет, конечно. Ладно, сейчас расскажу. Перекурю вот только.
 
я ошиблась. во втором случае полярная
 
Итак, смотрим на рисунок:
Polar.webp
Здесь показана плоскость с проведенными вертикальной и горизонтальной осями, разбивающими её на 4 квадранта (обозначены римскими цифрами). На плоскости имеется точка А. Вначале, для простоты, поместим ее в I квадрант.
Для того, чтобы определить положение точки на плоскости, в декартовой системе задаются две координаты: X и Y. В полярной системе - тоже две координаты: расстояние между началом координат (точкой О) и точкой А, или длина радиус-вектора R, и угол φ, отсчитываемый от горизонтальной оси.
Как перейти от декартовой системы к полярной?
Что касается R, то с ним - всё просто: его длину находим по теореме Пифагора:
R² = X² + Y².
А вот с углом - сложнее. Прежде всего, договоримся, что угол будет положительным, если точка находится в верхней полуплоскости, и отрицательным - если в нижней. Идём дальше. Если точка находится в I или IV квадрантах, то всё просто. Имеем:
tg(φ) = Y/X, откуда
φ = Arctg(Y/X).
Для квадрантов II и III - сложнее. Дело в том, что область изменения функции arctg - от -π/2 до +π/2, а нам надо от до . Поэтому для второго квадранта
φ = π + Arctg(Y/X) (арктангенс в этом случае отрицательный!),
а для третьего
φ = -π + Arctg(Y/X).
Кроме того, нужно отдельно рассмотреть ситуации, когда точка находится на оси Y. В этом случае X=0, и арктангенс вычислить невозможно, ибо на ноль делить нельзя.
Все эти варианты и расписаны в процедуре Cart2Pol.
Особый случай - когда точка А сидит в начале координат (X=Y=0). Тогда, ясное дело, R=0, а вот угол φ неопределен, его значение может быть абсолютно любым. В программе для начала координат чисто условно присваивается φ=10, и при выводе результата если φ=10, то пишется "угол неопределенный".

Уф, осталось только с записями разобраться. Но тут я хочу Вас для начала адресовать к любому учебнику по Паскалю. Впрочем, если что непонятно - спрашивайте.
 
а что означают переменные C,Cr, P,Pl?
Они означают записи, содержащие декартовы (x,y) и полярные (R,φ) координаты, соответственно. При этом Cr и Pr - это формальные параметры процедуры, а C и P - фактические параметры программы, подставляемые на место формальных при обращении к процедуре.

Вообще, как мне кажется, Вам хорошо бы позаниматься Паскалем, в частности, четко уяснить следующие разделы:

1. Тип "запись". Имя, поля записи, как записи описываются, как обращаться к полям записи, оператор "with" и т.п.

2. Организация процедур и функций. Формальные, фактические параметры, структура этих подпрограмм.

На самом деле, тут (уж поверьте) ничего сложного нет. Я же, к сожалению, не могу средствами общения на форуме заменить курс лекций и учебник. Но, повторяю, на конкретные вопросы ответить - пожалуйста.

Успехов!
 
Назад
Сверху