Program z2_65;
uses crt;
Label a1,a2,a3,a4,a5,a6,a7;
var a,s,h,rv,ro,p:real;
n:integer;
begin
clrscr;
Writeln('Укажите номер пункта:');
writeln('1. Дана сторона треугольника.');
writeln('2. Дана площадь треугольника.');
writeln('3. Дана высота треугольника.');
writeln('4. Дан радиус вписанной окружности треугольника.');
writeln('5. Дан радиус описанной окружности треугольника.');
read(n);
case n of
1:Begin Write('a=');read(a);goto a1;end;
2:begin Write('s=');read(s);goto a2;end;
3:Begin Write('h=');read(h);goto a3;end;
4:Begin Write('r=');read(rv);goto a4;end;
5:Begin Write('R=');read(ro);goto a5;end;
else
begin
write('Такого номера пункта нет.');
goto a7;
end;
end;
a1: rv:=a/2;
ro:=a/Sqrt(3);
s:=sqrt(3)*sqr(a)/4;
h:=2*s/a;
goto a6;
a2: a:=sqrt(4*s/sqrt(3));
h:=2*s/a;
rv:=a/2;
ro:=a/Sqrt(3);
goto a6;
a3: a:=2*h/sqrt(3);
s:=a*h/2;
rv:=a/2;
ro:=a/Sqrt(3);
goto a6;
a4: a:=2*rv;
ro:=a/Sqrt(3);
s:=sqrt(3)*sqr(a)/4;
h:=2*s/a;
goto a6;
a5: a:=sqrt(3)*ro;
s:=(a*a*a)/(4*ro);
h:=2*s/a;
rv:=a/2;
a6: writeln('a=',a:2:2);
writeln('s=',s:2:2);
writeln('h=',h:2:2);
writeln('R=',ro:2:2);
writeln('r=',rv:2:2);
a7: readkey;
end.
сначала определяем к-во символов в каждой строке
1-1 2-3 3-7 4-15 5-31 6-63 7-127
7-я строка имеет 127 символов и состоит из символа G к которому слева добавлено
две 6-х строки, определяем номера начала и конца каждой строки
6(1-63) 6(64-126) G(127)
видим что нужные символы во 2-й 6-й строке
6-я строка состоит из символа F к которому слева добавлено
две 5-х строки, определяем номера начала и конца каждой строки
5(64-94) 5(95-125) F(126)
нужные символы во 2-й 5-й строке
5-я строка состоит из символа E к которому слева добавлено
две 4-х строки, определяем номера начала и конца каждой строки
4(95-109) 4(110-124) E(125)
и вот мы наконец добрались до уже известной 4-й строки и знаем номера символов в ней,
AABAAB C(116) A(117) A(118) B(119) A(120) A(121) B(122) C(123) D(124)
таким образом нужные символы CAABAA
алгоритм решения такой разбиваем строки на подстроки и узнаем номера начала и конца каждой, пока не дойдем до уже известной строки
// Внимание! Если программа не работает, обновите версию!
type
Point=(real,real);
function ReadPoint(n:integer):Point;
begin
var a,b:real;
Write('Координаты точки ',n,': '); Read(a,b);
Result:=(a,b)
end;
function GetPoints(n:integer):array of Point;
begin
Result:=new Point[n];
for var i:=0 to n-1 do Result[i]:=ReadPoint(i+1)
end;
function Lsqr(a,b:Point):=sqr(b[0]-a[0])+sqr(b[1]-a[1]);
function Diags(a:array of Point; n:integer):array of real;
begin
Result:=new real[n*(n-3) div 2];
var k:=0;
for var i:=0 to n-3 do
for var j:=i+2 to min(n+i-2,n-1) do begin
Result[k]:=Lsqr(a[i],a[j]);
k+=1
end;
end;
begin
var n:=ReadInteger('Количество вершин:');
if n>3 then begin
var a:=GetPoints(n);
Writeln('Длина наибольшей диагонали равна ',sqrt(Diags(a,n).Max):0:5)
end
else Writeln('Диагонали отсутствуют')
end.
Пример
Количество вершин: 5
Координаты точки 1: -3 2.5
Координаты точки 2: 3 5.2
Координаты точки 3: 6.1 1
Координаты точки 4: 2 -7.3
Координаты точки 5: -5 -7
Длина наибольшей диагонали равна 14.58904