Помощь - Поиск - Пользователи - Календарь
Полная версия: Не могу решить задачу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
6ac9k
Описать процеруду Heights (Ax, Ay, Bx, By, Cx, Cy, hA, hB, hC), находящую высоты hA, hB, hC треугольника ABC, проведенные соответственно из вершин A,B,C. С помощью процедуры найти высоты треугольников ABC, ABD, ACD, если данны координаты точек A, B, C, D.
Я так понимаю координаты нужно ввести с клавиатуры...
volvo
Математически решить задачу сможешь? То есть, в данном тебе треугольнике, вычислишь значение высоты, опущенной на сторону С (если стороне A противолежит угол Alpha, стороне B - угол Beta и стороне С - угол Gamma)?
6ac9k
Ща в алгебре поковыряюсь.. wink.gif

Если даны координаты точек A, B, C, D. -не могу врубить как их создавать sad.gif
volvo
Чего создавать? Координаты? Их вводить надо вообще-то... Запрашивать у пользователя...
6ac9k
ypriamii.gif БЛин нефига н7е получается..все тетради уже обрыЛ..хлам какойто
мисс_граффити
такие формулы знаешь?
1) расстояние между двумя точками
2) формула Герона
3) формула вычисления площади через высоту и основания

чего еще для счастья не хватает?
6ac9k
1) (р*(р-а)*(р-в)*(р-с)) где р-полупериметр
2) корень из (х2-х1)в квадрате + (у2-у1) в квадрате)=длина
3) не помню)
6ac9k
Спасиб кто мне помог..Решил! Правда времени много заняла huh.gif

Вроде правильно, скажите если что не так rolleyes.gif


program zadacha1;

uses crt;

procedure Heights;
var
x1,x2,x3,x4,y1,y2,y3,y4,AB,BC,CA,AD,BD,CD,S,S1,S2,P,P1,P2,Ha,Hb,hc,Hd:
real;
begin
writeln ('vedi coordinati tochki A (x,y)');
readln (x1,y1);
writeln ('vedi coordinati tochki B (x,y)');
readln (x2,y2);
writeln ('vedi coordinati tochki C (x,y)');
readln (x3,y3);
writeln ('vedi coordinati tochki D (x,y)');
readln (x4,y4);
writeln (' A(',x1:2:2,',',y1:2:2,')');
writeln (' B(',x2:2:2,',',y2:2:2,')');
writeln (' C(',x3:2:2,',',y3:2:2,')');
writeln (' D(',x4:2:2,',',y4:2:2,')');

AB:=sqrt(sqr(x2-x1)+sqr(y2-y1));
BC:=sqrt(sqr(x3-x2)+sqr(y3-y2));
CA:=sqrt(sqr(x1-x3)+sqr(y1-y3));
AD:=sqrt(sqr(x4-x1)+sqr(y4-y1));
BD:=sqrt(sqr(x4-x2)+sqr(y4-y2));
CD:=sqrt(sqr(x4-x3)+sqr(y4-y3));

Writeln ('AB=',ab:2:2,' BC=',bc:2:2,' CA=',ca:2:2,' AD=',AD:2:2,'BD=',bd:2:2,' CD=',cd:2:2);

p:=(AB+BC+CA)/2;
p1:=(AB+BD+AD)/2;
p2:=(CA+CD+AD)/2;
S:=sqrt(p*(p-AB)*(p-BC)*(p-CA));
S1:=sqrt(p1*(p1-AB)*(p1-BD)*(p1-AD));
S2:=sqrt(p2*(p2-CA)*(p2-CD)*(p2-AD));
if (s=0) or (s1=0) or (s2=0) then
begin
writeln ('ssory takogo treug ne suchestvuet');
writeln ('proverte pravilnost'' coordinat');
end;

writeln ('ABC');
Ha:=2*s/BC;
Hc:=2*s/AB;
Hb:=2*s/CA;
writeln (' Ha=',ha:2:2);
writeln (' Hc=',hc:2:2);
writeln (' Hb=',hb:2:2);
{abd}
writeln ('ABD');
Ha:=2*s1/BD;
Hb:=2*s1/AD;
Hd:=2*s1/AB;
writeln (' Ha=',ha:2:2);
writeln (' Hb=',hb:2:2);
writeln (' Hd=',hd:2:2);
{acd}
writeln ('ACD');
Ha:=2*s2/CD;
Hc:=2*s2/AD;
Hd:=2*s2/CA;
writeln (' Ha=',ha:2:2);
writeln (' Hc=',hc:2:2);
writeln (' Hd=',hd:2:2);

end;

begin
clrscr;
Heights;
readln;
end.


М
Пользуемся тегами !

мисс_граффити
if (s=0) or (s1=0) or (s2=0) then
begin
writeln ('ssory takogo treug ne suchestvuet');
writeln ('proverte pravilnost'' coordinat');
end;

мне вот это место не нравится.
нельзя число real сравнивать с помощью "равно"
лучше задать какой-то доверительный интервал...
типа так:
if abs(s)<0.001 then...
Гость
rolleyes.gif понял)
6ac9k
rolleyes.gif Еще вопрос..
вот у меня дана задача:

Bokul
6ac9k, прочитай правила форума, особо обрати внимание на пункт 6.

Используй теги и табулируй код, если хочешь чтобы тебе быстрее помогли.
6ac9k
Готово) smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.