Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2010, 21:53   #1
street_spirit
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию Найти внутренние углы треугольника (Pascal)

Здравствуйте! В программировании я совсем новичок и столкнулся с проблемой.

Перед мной стоит следующая задача: нужно написать программу, которая высчитывает внутренние углы треугольника (пользователь задает координаты вершин треугольника).

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

Написав программу только до одного угла, я понял что она работает неправильно. В частности выдает значение косинуса больше единицы.

Код программы:
Код:
Program prog1;
Var x1, x2, x3, y1, y2, y3, xAB, yAB, xAC, yAC, cosA, arccosA: real;
Begin
Writeln('Vvedite koordinati tochki A (cherez probel)');
Readln(x1,y1);
Writeln('Vvedite koordinati tochki B (cherez probel)');
Readln(x2,y2);
Writeln('Vvedite koordinati tochki C (cherez probel)');
Readln(x3,y3);
Writeln('A(',x1,';',y1,')');
Writeln('B(',x2,';',y2,')');
Writeln('C(',x3,';',y3,')');
xAB:=x2-x1;
yAB:=y2-y1;
xAC:=x3-x1;
yAC:=y3-y1;
Writeln('AB{',xAB,';',yAB,'}');
Writeln('AC{',xAC,';',yAC,'}');
cosA:=(xAB*xAC+yAB*yAC)/((sqrt((xAB*xAB+yAB*yAB)))*(sqrt((xAC*xAC+yAC*yAC))));
Writeln('cosA=',cosA);
xAB:=x2-x1;
yAB:=y2-y1;
xAC:=x3-x1;
yAC:=y3-y1;
Writeln('AB{',xAB,';',yAB,'}');
Writeln('AC{',xAC,';',yAC,'}');
cosA:=(xAB*xAC+yAB*yAC)/((sqrt((xAB*xAB+yAB*yAB)))*(sqrt((xAC*xAC+yAC*yAC))));
Writeln('cosA=',cosA);
arccosA:= ARCTAN(SQRT(1-SQR(cosA))/cosA); 
Writeln('arccosA:=',arccosA);
end.
При тестировании с координатами А(3,2) В(7,7) С(9,3) выходит вот что:


Для наглядности (на всякий случай):


Помогите пожалуйста разобраться в чем моя ошибка. Изначально алгоритм решения задачи неправилен? Ошибка в коде? И еще мне кажется, что я что-то напутал с типом данных для переменных.

Заранее большое спасибо!
street_spirit вне форума Ответить с цитированием
Старый 28.02.2010, 23:55   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Что такое экспоненциальное представление
Writeln('cosA=',cosA:0:10);
eoln вне форума Ответить с цитированием
Старый 01.03.2010, 10:18   #3
Rusat
Пользователь
 
Регистрация: 25.02.2010
Сообщений: 17
По умолчанию

Для нахождения строн треугольника нужно пользоваться следующей формулой: s = ((x2 - x1)^2+(y2-y1)^2)^(1/2), а уже потом можно найти углы
Контактная ин-фа 479-275-762, DmitriK181988@gmail.com
Rusat вне форума Ответить с цитированием
Старый 01.03.2010, 10:24   #4
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

проверь скобки, похоже умножается на последний корень
Namolem вне форума Ответить с цитированием
Старый 02.03.2010, 17:25   #5
street_spirit
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Спасибо! Очень помогло.
street_spirit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закруглить углы? Tonik_A HTML и CSS 1 01.03.2010 22:37
внутренние ссылки скприпта KEV PHP 6 10.05.2009 22:43
Треугольник задан длинами своих сторон: a, b, c. Найти углы треугольника. задача на С++ Wia Помощь студентам 6 13.12.2008 16:13
Внутренние ресурсы - картинка Yogik™ Помощь студентам 3 18.11.2007 15:35