Помогите написать программу в Pascal
Написать программу, которая по заданным трем точкам А(x1,y1), B(x2,y2), C(x3,y3) определяет - будут ли они расположены на одной прямой; если это не так, то вычислить угол ABC.
|
Цитата:
Код:
Program Irina; |
Анжелика, Вы уж не обижайтесь, но я вынужден Вас немного поправить. Проверка принадлежности точек прямой выполнена правильно и оптимально, а вот вычисление угла - увы... Давайте разбираться.
Итак, Вы получили значение величины ug=Cos(B). Вопрос: как из него вытащить В? В математике - просто: B=arccos(ug). Но в Паскале нет функции arccos, есть только arctan, поэтому, как и сделано (к сожалению, неправильно) в Вашей программе, нужно выразить арккосинус через арктангенс, но тут есть подводный камень: дело в том, что эти функции имеют РАЗНЫЕ области изменения: v = arccos(z): 0 ≤ v ≤ π w = arctg(z): -π/2 ≤ w ≤ π/2 Для острых углов это значения не имеет, а вот если искомый угол - тупой, то Ваша программа выдаст неверный результат. Проверьте: x1=-5 y1=1 x2=0 y2=0 x3=5 y3=0. Обходится эта неприятность так: переходим от арккосинуса к арксинусу (благо у арксинуса и арктангенса области изменения совпадают), и уже арксинус выражаем через арктангенс. Вычисляя угол, учтем еще один момент: этот угол не может быть ни нулевым, ни развернутым: оба соответствуют принадлежности трех точек одной прямой. Поэтому ветвление (да еще с - о, ужас! - меткой и goto, хотя можно обойтись обычным else) там абсолютно лишнее. Вот исправленный листинг: Код:
Program Irina; |
Цитата:
|
Ребята спасибо вам огромное)))
|
Часовой пояс GMT +4, время: 21:20. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.