Консультация № 106434
23.10.2007, 07:05
0.00 руб.
0 3 3
Здравствуйте! Помогите решить задачу, которую брату задали надом! Она в приложении.

Приложение:
Проверить, может ли быть построен какой-либо треугольник по введённым длинам сторон a, b, c и вывести в окне формы соответствующее сообщение.

Обсуждение

Неизвестный
23.10.2007, 07:48
общий
это ответ
Здравствуйте, Торгов Иван Владимирович!

Идея решения сводится к простым свойствам плоских треугольников:
1) все стороны треугольника имеют положительные длины;
2) длина любой стороны всегда меньше, чем сумма длин двух других сторон.

(Однако следует иметь ввиду, что треугольник, построенный на искривлённой поверхности, второму условию может и не удовлетворять. Пример - сфера: проведите отрезок почти по всему экватору сферы, из концов большого отрезка проведите два маленьких так, чтобы они каждый из отрезков концами примыкал к концам двух других.)

Приложение:
procedure TForm1.TestButtonClick(Sender: TObject); var a, b, c: Double;begin a := StrToFloat(a_Edit.Text); b := StrToFloat(b_Edit.Text); c := StrToFloat(c_Edit.Text); if (a > 0) and (b > 0) and (c > 0) and (a < b + c) and (b < a + c) and (c < a + b) then ShowMessage(‘Построение треугольника возможно‘) else ShowMessage(‘Из таких сторон плоский треугольник построить нельзя‘);end;
Неизвестный
23.10.2007, 07:49
общий
это ответ
Здравствуйте, Торгов Иван Владимирович!
Это простая геометрия
if (c=sqrt(a*a+b*b-2*a*b)) or (a=sqrt(c*c+b*b-2*c*b)) or (b=sqrt(a*a+c*c-2*a*c)) then showmessage (‘Треугольник существует‘);
Неизвестный
23.10.2007, 09:49
общий
это ответ
Здравствуйте, Торгов Иван Владимирович!
Думаю проверку сторон можно оптимизировать но вариант рабочий.


Приложение:
Procedure TForm1.ChekOnNumber(Ob: TEdit);varI : integer;s : string;begins := ob.Text;for I:=1 to length(S) do begin if not(S[I] in [‘0‘..‘9‘]) then begin ShowMessage(‘Íåëüçÿ ââîäèòü íå öèôðû‘); ob.Text:= ‘‘; exit; end; end;end;procedure TForm1.Edit1Exit(Sender: TObject);beginChekOnNumber(edit1);end;procedure TForm1.Edit2Exit(Sender: TObject);beginChekOnNumber(edit2);end;procedure TForm1.Edit3Exit(Sender: TObject);beginChekOnNumber(edit3);end;procedure TForm1.Button1Click(Sender: TObject);vara, b, c, r : integer;begina := strToInt(Edit1.Text);b := strToInt(Edit2.Text);c := strToInt(Edit3.Text);if (a > b) and (a > c) and (a < b+c) then begin r:= a*a - b*b - c*c; if (r < 0) then ShowMessage (‘треугольник остроугольный‘) else if (r = 0) then ShowMessage (‘треугольник прямоугольный‘) else ShowMessage (‘треугольник тупоугольный‘); end else if (b > a) and (b > c) and (b < a+c)then begin r:= b*b - a*a - c*c; if (r < 0) then ShowMessage (‘треугольник остроугольный‘) else if (r = 0) then ShowMessage (‘треугольник прямоугольный‘) else ShowMessage (‘треугольник тупоугольный‘); end else if (c > b) and (c > a) and (c < a+b)then begin r:= c*c - b*b - a*a; if (r < 0) then ShowMessage (‘треугольник остроугольный‘) else if (r = 0) then ShowMessage (‘треугольник прямоугольный‘) else ShowMessage (‘треугольник тупоугольный‘); end else ShowMessage (‘с задаными сторонами ‘+edit1.text+‘ ‘+edit2.text+‘ ‘+edit3.text+‘ нельзя построить треугольник‘);end;
Форма ответа