Можно заметить, что самый большой угол в треугольнике всегда расположен напротив самой длинной стороны, которую мы обозначим буквой с. Значение такого угла можно найти по теореме косинусов:
В остроугольном треугольнике угол всегда будет меньше 90 градусов, поэтому его косинус всегда будет положительным. В прямоугольном треугольнике косинус будет равен нулю, а в тупоугольном он будет отрицательным. На этом можно построить решение, предварительно определив, какая из сторон является самой длинной. И, само собой разумеется, надо сразу после ввода проверить условие существования треугольника, т.е. чтобы сумма длин двух его любых сторон была больше третьей.
var a,b,c,a1,b1,c1,cosC:real; begin Write('Введите длины сторон треугольника: '); Read(a,b,c); Write('Треугольник '); if (a<(b+c)) and (b<(a+c)) and (c<(a+b)) then begin if a>b then if a>c then begin c1:=a; a1:=c; b1:=b end else begin c1:=c; a1:=a; b1:=b end else if b>c then begin c1:=b; a1:=a; b1:=c end else begin c1:=c; a1:=a; b1:=b end; cosC:=(sqr(a1)+sqr(b1)-sqr(c1))/(2*a*b); if cosC<0 then Writeln('тупоугольный') else if cosC=0 then Writeln('прямоугольный') else Writeln('остроугольный') end else Writeln('построить невозможно') end.
Тестовое решение: Введите длины сторон треугольника: 6 4.1 4 Треугольник тупоугольный
Const n=50; var f:Text; s:string; ss:array of string; a:array[1..n] of string; i,j:integer; begin Assign(f,'input.txt'); Reset(f); j:=0; while not Eof(f) do begin Readln(f,s); ss:=s.Split(' '); for i:=0 to Length(ss)-1 do if Length(ss[i])>1 then if RightStr(ss[i],2)='of' then begin Inc(j); a[j]:=ss[i] end; end; Close(f); for i:=1 to j do Write(a[i],' '); Writeln end.
Тестовое решение: 123of asdfdsof dasof
Есть решение и покороче, но совсем не уровня начинающих: uses System.Text.RegularExpressions; const n=50; var f:Text; s:string; a:array[1..n] of string; i,j:integer; begin Assign(f,'input.txt'); Reset(f); j:=0; while not Eof(f) do begin Readln(f,s); foreach var m:Match in Regex.Matches(s,'\b\S+of\b') do begin Inc(j); a[j]:=m.Value end; end; Close(f); for i:=1 to j do Write(a[i],' '); Writeln end.
Значение такого угла можно найти по теореме косинусов:
В остроугольном треугольнике угол всегда будет меньше 90 градусов, поэтому его косинус всегда будет положительным. В прямоугольном треугольнике косинус будет равен нулю, а в тупоугольном он будет отрицательным. На этом можно построить решение, предварительно определив, какая из сторон является самой длинной. И, само собой разумеется, надо сразу после ввода проверить условие существования треугольника, т.е. чтобы сумма длин двух его любых сторон была больше третьей.
var
a,b,c,a1,b1,c1,cosC:real;
begin
Write('Введите длины сторон треугольника: ');
Read(a,b,c);
Write('Треугольник ');
if (a<(b+c)) and (b<(a+c)) and (c<(a+b)) then begin
if a>b then
if a>c then begin c1:=a; a1:=c; b1:=b end
else begin c1:=c; a1:=a; b1:=b end
else
if b>c then begin c1:=b; a1:=a; b1:=c end
else begin c1:=c; a1:=a; b1:=b end;
cosC:=(sqr(a1)+sqr(b1)-sqr(c1))/(2*a*b);
if cosC<0 then Writeln('тупоугольный')
else
if cosC=0 then Writeln('прямоугольный')
else Writeln('остроугольный')
end
else Writeln('построить невозможно')
end.
Тестовое решение:
Введите длины сторон треугольника: 6 4.1 4
Треугольник тупоугольный
n=50;
var
f:Text;
s:string;
ss:array of string;
a:array[1..n] of string;
i,j:integer;
begin
Assign(f,'input.txt'); Reset(f);
j:=0;
while not Eof(f) do begin
Readln(f,s);
ss:=s.Split(' ');
for i:=0 to Length(ss)-1 do
if Length(ss[i])>1 then
if RightStr(ss[i],2)='of' then
begin Inc(j); a[j]:=ss[i] end;
end;
Close(f);
for i:=1 to j do Write(a[i],' ');
Writeln
end.
Тестовое решение:
123of asdfdsof dasof
Есть решение и покороче, но совсем не уровня начинающих:
uses
System.Text.RegularExpressions;
const
n=50;
var
f:Text;
s:string;
a:array[1..n] of string;
i,j:integer;
begin
Assign(f,'input.txt'); Reset(f);
j:=0;
while not Eof(f) do begin
Readln(f,s);
foreach var m:Match in Regex.Matches(s,'\b\S+of\b') do
begin Inc(j); a[j]:=m.Value end;
end;
Close(f);
for i:=1 to j do Write(a[i],' ');
Writeln
end.