![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Буду |
![]()
Сообщение
#1
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Задача наверное покажется лёгкой-лёгкой, кому-то, но я что-то вот никак.
Исходная задача: 1. по данным коэффициентам уравнения прямой линии на плоскости (Ах+Ву+С=0) должен вычисляться угол, образуемый этой прямой с положительным направлением оси оХ (полагается, что А<>0, В<>0). 2. доработать программу так, чтобы выполнялась проверка на допустимость вводимых данных, а так же учитывался случай В=0, при А<>0 и определялось, проходит ли заданная коэффициентами уравнения прямая через начало координат. Формулу нашла для вычисления угла -tg(a/b), вот только если решать дальше, без с, то ничего хорошего не выходит. Помогите, пожалуйста, кто чем может.... |
![]() ![]() |
crazymaster |
![]()
Сообщение
#2
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 240 Регистрация: 9.3.2007 Город: Нефтеюганск Учебное заведение: ТУСУР Вы: студент ![]() |
а угол вычислять в пределах от 0 до 2pi , или от -pi до pi ?
|
Буду |
![]()
Сообщение
#3
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Условия не стоит такого, вообще-то, но мне думается 0 до 2pi.. Хотя опять же, там же прямая и плоскость, а не прямая и окружность..
|
crazymaster |
![]()
Сообщение
#4
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 240 Регистрация: 9.3.2007 Город: Нефтеюганск Учебное заведение: ТУСУР Вы: студент ![]() |
если от 0 до 360 то вот такие условия нужно задать:
если A>0 , B>=0, то угол arctg(B/A)+pi/2 если A<0, B>=0 то угол pi/2-arctg(B/A) если A<0, B<0то угол pi/2+arctg(B/A) если А>0, B<0 то 3pi/2-arct(y/x) если x=0, y<>0 то 0 или 2(pi)n т.е A и B определяют вектор перпендикулярный данной прямой |
Буду |
![]()
Сообщение
#5
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Вот в том то и дело, что условий много. А от нас требуют, чтоб решили всё в одно условие.
Я когда первую часть сдала, сказали, что верно: read(a,b,c): writeln('rad=',-1*(a/b)); но - там с не учитывается вообще т.е. по умолчанию 0, а во второй части уже нужно проверку С делать. Там получится, прям.проходит через нач. коорд., если с=0, а угол в любом случае равен 90 градусов, если в=0 (во всех случаях а<>0), вот только не могу придумать как в одно условие записать это всё...может это вообще не верно.. |
crazymaster |
![]()
Сообщение
#6
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 240 Регистрация: 9.3.2007 Город: Нефтеюганск Учебное заведение: ТУСУР Вы: студент ![]() |
Я когда первую часть сдала, сказали, что верно: read(a,b,c): writeln('rad=',-1*(a/b)); writeln('rad=',-1*(a/b)); - но это же не угол между прямой и осью 0x ? в одно условие что то я не соображу как( Там получится, прям.проходит через нач. коорд., если с=0, ну верно, если c=0, то проходит через начало координат |
Тролль |
![]()
Сообщение
#7
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 2 964 Регистрация: 23.2.2007 Город: Москва Учебное заведение: МГУ ![]() |
Ну вообще-то угол между прямой и положительным направлением оси Ох находится между 0 и pi.
|
crazymaster |
![]()
Сообщение
#8
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 240 Регистрация: 9.3.2007 Город: Нефтеюганск Учебное заведение: ТУСУР Вы: студент ![]() |
ой ..точно, куда меня понесло)))))
тогда pi/2+arctg(B/A) - формула для угла |
Буду |
![]()
Сообщение
#9
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Цитата тогда pi/2+arctg(B/A) - формула для угла а как же С?.. Как тогда условие поставить? |
Тролль |
![]()
Сообщение
#10
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 2 964 Регистрация: 23.2.2007 Город: Москва Учебное заведение: МГУ ![]() |
С не влияет на угол наклона.
|
Буду |
![]()
Сообщение
#11
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Тогда нужно поставить условия:
b=0 and c=0 or b<>0 and c=0 - при этом будет считаться угол и будет написано, что прямая прох.через нач.координат. А в else будет просто рассчёт угла...так? |
creer |
![]()
Сообщение
#12
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
При С=0 прямая проходит через начало координат.
При A=0 и B<>0 прямая параллельна оси Ox. При A<>0 и B=0 прямая перпендикулярна оси Ox. |
Буду |
![]()
Сообщение
#13
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
А по условию всегда не равно 0...
Чёт я теперь вообще запуталась.. |
creer |
![]()
Сообщение
#14
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Код readln(a, b, c); if (a<>0) or (b<>0) then begin if a=0 then writeln(0) else writeln(pi/2+arctan(b/a)); if c=0 then writeln('Прямая пересекает начало координат'); end; Если a=0 и c<>0, то прямая не пересекает Ox, а если a=0 и с=0, то лежит на Ox. |
Буду |
![]()
Сообщение
#15
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Код if (b=0) and (c=0) or (b<>0) and (c=0) then begin Writeln('Pryamaya prohodit cherez nachalo koordinat'); writeln('ugol raven '); writeln('Rad=',pi/2+arctan(b/a)); writeln('Gr=',(((pi/2+arctan(b/a)))/180)); end else begin writeln('ugol raven '); writeln('Rad=',pi/2+arctan(b/a)); writeln('Gr=',(((pi/2+arctan(b/a)))/180)); end; Проверьте, пожалуйста?.. а то как-то там совсем даже не получается, что при b=0 угол равен 90 градусам.. |
creer |
![]()
Сообщение
#16
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Цитата if (b=0) and (c=0) or (b<>0) and (c=0) then Вот здесь точно лишнее условие. Проще написать "if c=0 then" b в любом случае либо равно 0, либо не равно 0. И есть одна ошибочка при переводе в градусы. Нужно поделить на pi и умножить на 180. writeln('Gr=',(((pi/2+arctan(b/a)))/pi*180)); Тогда получится 90 градусов (IMG:style_emoticons/default/smile.gif) Можно даже написать, скажем writeln('Gr=',(((pi/2+arctan(b/a)))/pi*180):5:5); Тогда будет точно видно что это 90 градусов (IMG:style_emoticons/default/smile.gif) |
Буду |
![]()
Сообщение
#17
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
Ваааааа!!!!!!!! СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Правда у этой задачи есть ещё запутанное продолжение..можно спросить?.. |
creer |
![]()
Сообщение
#18
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Спросить конечно можно (IMG:style_emoticons/default/wink.gif)
|
Буду |
![]()
Сообщение
#19
|
Школьник ![]() Группа: Продвинутые Сообщений: 17 Регистрация: 30.9.2008 Город: Калининград Учебное заведение: КГТУ Вы: студент ![]() |
=)
Далее по условию задачи нужно полученную программу модифицировать так, "чтоб автоматически осуществлялись многократные решения задачи при изменении одного из исходных данных в заданном диапазоне. Шаг изменения аргумента должен быть высчитан так, чтобы число повторений цикла лежало в диапазоне от 15 до 20 (исходная переменная, значение которой должно изменяться, определяется студентом самостоятельно). Результаты выводить в виде таблицы: аргумент х0 |Длина |Площадь|Комментарий 1.0 |12.89 |345.77 |точка на окружности 1.2 |17.90 |785.42 |точка вне окружности ... |... |... |... Что-т не пойму с какой стороны её начать решать о_О Вроде бы как через while.. |
creer |
![]()
Сообщение
#20
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 121 Регистрация: 28.10.2007 Город: Екатеринбург Учебное заведение: УГТУ-УПИ Вы: студент ![]() |
Да, нужно сделать примерно так:
db:= 0; //Начало диапазона de:= 10; //Конец диапазона cv:= db; //Текущее значение while (cv<=de) do begin //Сюда вставить Ваш исходный код из 15-го сообщения, который считает для одной точки. //Только вместо одного параметра, например b, написать cv. //Т.е. writeln('Rad=',pi/2+arctan(cv/a)); cv:=cv + (de-db)/20; //Следующий шаг end; |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 19:36 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru