![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
vano |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
Пожалуйста, помогите с решением вот такой задачки:
Задан треугольник (x1,y1,x2,y2,x3,y3) . Вычислить, какие точки с целыми координатами находятся внутри него и вывести в отдельный файл их количество и координаты. У меня получилось такое: Код Program tochki_treugolnika; uses crt; var f : text; i, j, ymin, ymax, xmin, xmax, x1, y1, x2, y2, x3, y3, x, y, k : integer; function rasst ( x1, x2, y1, y2 : real) : real; begin rasst := sqrt(sqr(x2-x1)+sqr(y2-y1)) end; function Angle ( c, a, b : real) : real; var mycos, mysin : real; begin mycos := (a*a+b*b-c*c)/(a*b)/2; mysin := sqrt (1 - sqr (mycos)); Angle := arctan (mysin/mycos) end; function gde (x1,y1,x2,y2,x3,y3,x,y:real) : boolean; var an1, an2, an3 : real; begin an1 := Angle (rasst (x1, x2, y1, y2), rasst (x1, x, y1, y), rasst (x2, x, y2, y)); an2 := Angle (rasst (x2, x3, y2, y3), rasst (x2, x, y2, y), rasst (x3, x, y3, y)); an3 := Angle (rasst (x3, x1, y3, y1), rasst (x3, x, y3, y), rasst (x1, x, y1, y)); gde := (an1 + an2 + an3 > 2*PI - 0.01) end; begin clrscr; writeln ('Введите x1,y1,x2,y2,x3,y3'); readln (x1,y1,x2,y2,x3,y3); {Assign (f,'c:\Pascal\samples\sample33.txt'); Rewrite (f); } if x3 < x1 then if x2 < x3 then xmin := x2 else xmin := x3 else if x2 < x1 then xmin := x2 else xmin := x1; if x3 > x1 then if x2 > x3 then xmax := x2 else xmax := x3 else if x2 > x1 then xmax := x2 else xmax := x1; if y3 < y1 then if y2 < y3 then ymin := y2 else ymin := y3 else if y2 < y1 then ymin := y2 else ymin := y1; if y3 > y1 then if y2 > y3 then ymax := y2 else ymax := y3 else if y2 > y1 then ymax := y2 else ymax := y1; for x := xmin + 1 to xmax - 1 do for y := ymin + 1 to ymax - 1 do begin if gde (x1,y1,x2,y2,x3,y3,x,y) = false then begin writeln ('Точка (',x,';',y,') находится внутри треугольника '); inc(k); end; end; writeln ('f, '); writeln ( 'f‚ В треугольнике находится ',k,' точек'); { close (f);} repeat until keypressed end. У меня возникает глюк в функции Angle при вычислении то-ли косинуса, то-ли синуса. как мне это исправить? |
![]() ![]() |
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Михаил Густокашин, я здесь уже год, поверь, таких, кто хочет разобрать 1 из 1000 если не меньше ;)
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:51 |