Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 11.03.2014, 11:37   #1 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Турбо Паскаль. Тип запись

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

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

Старый 11.03.2014, 11:37
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Очень важно прочитать похожие темы

Помогите составить программу на турбо паскаль
Турбо Паскаль. Рекурсии

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

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

задание: Создать записи определяющие положение точки в декартовой и в полярной системах координат. Описать процедуру, преобразующую координаты точки на плоскости из декартовой в полярные
Легко. Например, так:
Код:
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.
Впрочем, не любой Паскаль понимает функцию-запись. Если Ваш заартачится - напишите, переделаем в процедуру.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.03.2014, 20:21   #3 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

пишет ошибку №34 (Invalid function result type) в этой строчке
Function Cart2Pol(Cr:Cartez):Polar;
как исправить?
Светик123 вне форума   Ответить с цитированием
Старый 11.03.2014, 20:23   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Светик123 Посмотреть сообщение
пишет ошибку №34 (Invalid function result type) в этой строчке
Function Cart2Pol(Cr:Cartez):Polar;
как исправить?
Ну да, так я как раз об этом и предупреждал. Ладно, сейчас переделаю.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.03.2014, 20:29   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Попробуйте такой вариант:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 11.03.2014, 20:37   #6 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

программа работает, спасибо. только что означают переменные R, Fi? положение точки в системе?
Светик123 вне форума   Ответить с цитированием
Старый 11.03.2014, 20:39   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Светик123 Посмотреть сообщение
только что означают переменные R, Fi?
Длина радиус-вектора и угол, отсчитанный от горизонтальной оси, соответственно.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.03.2014, 20:56   #8 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

я все равно до конца не понимаю, что происходит в программе. если Вам не тяжело, вы можете мне объяснить структуру программы и где осуществился перевод? Пожалуйста.
Светик123 вне форума   Ответить с цитированием
Старый 11.03.2014, 21:05   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Света, а скажите честно: Вы представляете себе вообще что такое полярная система координат? Может быть, нужно объяснить?
Vladimir_S вне форума   Ответить с цитированием
Старый 11.03.2014, 21:17   #10 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

представляю. если декартова - оси х,у, то декартова представляет собой окружность (по ней в школе тригонометрию проходят). так?
Светик123 вне форума   Ответить с цитированием
Ads

Яндекс

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


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:02.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.