ВВЕРХ
ВНИЗ
  • Home
  • Proc
  • Proc 56 - 60

Proc 56 - 60

Proc56 - находим длину отрезка на плоскости по координатам его концов.
Proc57 - находим периметр треугольника по координатам его вершин.
Proc58 - находим площадь треугольника по координатам его вершин.
Proc59 - вычисляем расстояние от точки до прямой на плоскости.
Proc60 - вычисляем высоты треугольника, используя координаты вершин.

Proc56. Описать функцию Leng(xA, yA, xB, yB) вещественного типа, находящую длину отрезка AB на плоскости по координатам его концов:

|AB| = ((xA − xB)2 + (yA − yB)2)1/2

(xA, yA, xB, yB — вещественные параметры). С помощью этой функции найти длины отрезков AB, AC, AD, если даны координаты точек A, B, C, D.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
program proc56;
{ Функция возвращает длину отрезка АВ на плоскости 
по координатам его концов (xA, yA), (xB, yB): }
function Leng(xA, yA, xB, yB: real): real;
begin
  Leng := sqrt(sqr(xA - xB) + sqr(yA - yB))
end;

var { Координаты точек A, B, C и D: }
  xA, xB, xC, xD, yA, yB, yC, yD: real; 

begin
  write('Координаты точки А:  ');
  readln(xA, yA);
  write('Координаты точки B:  ');
  readln(xB, yB);
  write('Координаты точки C:  ');
  readln(xC, yC);
  write('Координаты точки D:  ');
  readln(xD, yD);
  writeln;
  writeln('Результат:');
  writeln(' |AB| = ', Leng(xA, yA, xB, yB):0:2);
  writeln(' |AC| = ', Leng(xA, yA, xC, yC):0:2);
  writeln(' |AD| = ', Leng(xA, yA, xD, yD):0:2);
  readln
end.

Аналогом задачи Proc56, но только без процедур, является задача Begin20 на странице Координаты на плоскости.

Proc57. Используя функцию Leng из задания Proc56, описать функцию Perim(xA, yA, xB, yB, xC, yC) вещественного типа, находящую периметр треугольника ABC по координатам его вершин (xA, yA, xB, yB, xC, yC — вещественные параметры). С помощью этой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
program proc57;

{ Функция возвращает периметр треугольника ABC по 
координатам его вершин (xA, yA), (xB, yB), (xC, yC): }
function Perim(xA, yA, xB, yB, xC, yC: real): real;
  
  { Функция возвращает длину отрезка АВ на плоскости
  по координатам его концов (xA, yA), (xB, yB): }
  function Leng(xA, yA, xB, yB: real): real;
  begin
    Leng := sqrt(sqr(xA - xB) + sqr(yA - yB))
  end;
 
var
  AB, AC, BC: real;
begin
  AB := Leng(xA, yA, xB, yB); //длина стороны АВ
  AC := Leng(xA, yA, xC, yC); //длина стороны АС
  BC := Leng(xB, yB, xC, yC); //длина стороны ВС
  Perim := AB + AC + BC //вычисляем периметр треугольника АВС
end;

var { Координаты точек A, B, C и D: }
  xA, xB, xC, xD, yA, yB, yC, yD: real;

begin
  write('Координаты точки А:  ');
  readln(xA, yA);
  write('Координаты точки B:  ');
  readln(xB, yB);
  write('Координаты точки C:  ');
  readln(xC, yC);
  write('Координаты точки D:  ');
  readln(xD, yD);
  writeln;
  writeln('Результат:');
  writeln(' pABC = ', Perim(xA, yA, xB, yB, xC, yC):0:2);
  writeln(' pABD = ', Perim(xA, yA, xB, yB, xD, yD):0:2);
  writeln(' pACD = ', Perim(xA, yA, xC, yC, xD, yD):0:2)
end.

Proc58. Используя функции Leng и Perim из заданий Proc56 и Proc57, описать функцию Area(xA, yA, xB, yB, xC, yC) вещественного типа, находящую площадь треугольника ABC по формуле

SABC = (p·(p−|AB|)·(p−|AC|)·(p−|BC|))1/2,

где p — полупериметр. С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
{ Функция возвращает площадь треугольника ABC по формуле Герона,
если заданы координаты его вершин (xA, yA), (xB, yB), (xC, yC): }
function Area(xA, yA, xB, yB, xC, yC: real): real;
var
  AB, AC, BC, p: real; //стороны и полупериметр треугольника

 { Функция возвращает длину отрезка АВ на плоскости
 по координатам его концов (xA, yA), (xB, yB): }
 function Leng(xA, yA, xB, yB: real): real;
 begin
   Leng := sqrt(sqr(xA - xB) + sqr(yA - yB))
 end;
 
 { Функция возвращает периметр треугольника ABC по 
 координатам его вершин (xA, yA), (xB, yB), (xC, yC): }
 function Perim(xA, yA, xB, yB, xC, yC: real): real;
 begin
   AB := Leng(xA, yA, xB, yB); //длина стороны АВ
   AC := Leng(xA, yA, xC, yC); //длина стороны АС
   BC := Leng(xB, yB, xC, yC); //длина стороны ВС
   Perim := AB + AC + BC //вычисляем периметр треугольника АВС
 end;

{ тело ОСНОВНОЙ процедуры: }
begin
  p := Perim(xA, yA, xB, yB, xC, yC) / 2; //находим полупериметр
  Area := sqrt(p * (p - AB) * (p - AC) * (p - BC))
end;

var { Координаты точек A, B, C и D: }
  xA, xB, xC, xD, yA, yB, yC, yD: real;

begin
  write('Координаты точки А:  ');
  readln(xA, yA);
  write('Координаты точки B:  ');
  readln(xB, yB);
  write('Координаты точки C:  ');
  readln(xC, yC);
  write('Координаты точки D:  ');
  readln(xD, yD);
  writeln;
  writeln('Результат:');
  writeln(' sABC = ', Area(xA, yA, xB, yB, xC, yC):0:2);
  writeln(' sABD = ', Area(xA, yA, xB, yB, xD, yD):0:2);
  writeln(' sACD = ', Area(xA, yA, xC, yC, xD, yD):0:2)
end.

Вычисление площади треугольника без использования процедур вы можете посмотреть в примере Begin21.

Proc59. Используя функции Leng и Area из заданий Proc56 и Proc58, описать функцию Dist(xP, yP, xA, yA, xB, yB) вещественного типа, находящую расстояние D(P, AB) от точки P до прямой AB по формуле

D(P, AB) = 2·SPAB/|AB|,

где SPAB — площадь треугольника PAB. С помощью этой функции найти расстояния от точки P до прямых AB, AC, BC, если даны координаты точек P, A, B, C.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
{ Функция возвращает расстояние от точки P(xP, yP) до 
отрезка АВ с координатами концов A(xA, yA) и B(xB, yB) }
function Dist(xP, yP, xA, yA, xB, yB: real): real;

  { Функция возвращает длину отрезка АВ на плоскости
  по координатам его концов (xA, yA), (xB, yB): }
  function Leng(xA, yA, xB, yB: real): real;
  begin
    Leng := sqrt(sqr(xA - xB) + sqr(yA - yB))
  end;
 
  { Функция возвращает площадь треугольника ABC по формуле Герона,
  если заданы координаты его вершин (xA, yA), (xB, yB), (xC, yC): }
  function Area(xA, yA, xB, yB, xC, yC: real): real;
  var
    AB, AC, BC, p: real; //стороны и полупериметр треугольника
  
    { Функция возвращает периметр треугольника ABC по 
    координатам его вершин (xA, yA), (xB, yB), (xC, yC): }
    function Perim(xA, yA, xB, yB, xC, yC: real): real;
    begin
      AB := Leng(xA, yA, xB, yB); //длина стороны АВ
      AC := Leng(xA, yA, xC, yC); //длина стороны АС
      BC := Leng(xB, yB, xC, yC); //длина стороны ВС
      Perim := AB + AC + BC //вычисляем периметр треугольника АВС
    end;

  { Реализация функции Area: }
  begin
    p := Perim(xA, yA, xB, yB, xC, yC) / 2; //находим полупериметр
    Area := sqrt(p * (p - AB) * (p - AC) * (p - BC))
  end;

{ Реализация основной подпрограммы Dist: }
begin
  Dist := 2 * Area(xP, yP, xA, yA, xB, yB) / Leng(xA, yA, xB, yB)
end;

var { Координаты точек P, A, B, C: }
  xP, xA, xB, xC, yP, yA, yB, yC: real;

begin
  write('Координаты точки P:  ');
  readln(xP, yP);
  write('Координаты точки А:  ');
  readln(xA, yA);
  write('Координаты точки B:  ');
  readln(xB, yB);
  write('Координаты точки C:  ');
  readln(xC, yC);  
  writeln;
  writeln('Результат:');
  writeln(' D(P, AB) = ', Dist(xP, yP, xA, yA, xB, yB):0:2);
  writeln(' D(P, AC) = ', Dist(xP, yP, xA, yA, xC, yC):0:2);
  writeln(' D(P, BC) = ', Dist(xP, yP, xB, yB, xC, yC):0:2)
end.

Proc60. Используя функцию Dist из задания Proc59, описать процедуру Altitudes(xA, yA, xB, yB, xC, yC, hA, hB, hC), находящую высоты hA, hB, hC треугольника ABC (выходные параметры), проведенные соответственно из вершин A, B, C (их координаты являются входными параметрами). С помощью этой процедуры найти высоты треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
{ Процедура находит высоты hA, hB, hC треугольника АВС, 
проведенные из вершин A(xA, yA), B(xB, yB), C(xC, yC) }
procedure Altitudes(xA,yA,xB,yB,xC,yC: real; var hA,hB,hC: real);

  { Функция возвращает расстояние от точки P(xP, yP) до 
  отрезка АВ с координатами концов A(xA, yA) и B(xB, yB) }
  function Dist(xP, yP, xA, yA, xB, yB: real): real;
  
    { Функция возвращает длину отрезка АВ на плоскости
    по координатам его концов (xA, yA), (xB, yB): }
    function Leng(xA, yA, xB, yB: real): real;
    begin
      Leng := sqrt(sqr(xA - xB) + sqr(yA - yB))
    end;
   
    { Функция возвращает площадь треугольника ABC по формуле Герона,
    если заданы координаты его вершин (xA, yA), (xB, yB), (xC, yC): }
    function Area(xA, yA, xB, yB, xC, yC: real): real;
    var
      AB, AC, BC, p: real; //стороны и полупериметр треугольника
    
      { Функция возвращает периметр треугольника ABC по 
      координатам его вершин (xA, yA), (xB, yB), (xC, yC): }
      function Perim(xA, yA, xB, yB, xC, yC: real): real;
      begin
        AB := Leng(xA, yA, xB, yB); //длина стороны АВ
        AC := Leng(xA, yA, xC, yC); //длина стороны АС
        BC := Leng(xB, yB, xC, yC); //длина стороны ВС
        Perim := AB + AC + BC //вычисляем периметр треугольника АВС
      end;
  
    { Реализация функции Area: }
    begin
      p := Perim(xA, yA, xB, yB, xC, yC) / 2; //находим полупериметр
      Area := sqrt(p * (p - AB) * (p - AC) * (p - BC))
    end;
  
  { Реализация подпрограммы Dist: }
  begin
    Dist := 2 * Area(xP, yP, xA, yA, xB, yB) / Leng(xA, yA, xB, yB)
  end;

{ тело основной процедуры Altitudes: }
begin
  hA := Dist(xA, yA, xB, yB, xC, yC); //рассторяние от А до ВС
  hB := Dist(xB, yB, xA, yA, xC, yC); //рассторяние от В до АС
  hC := Dist(xC, yC, xA, yA, xB, yB)  //рассторяние от С до АВ
end;

var { Координаты точек A, B, C и D и высоты: }
  xA, yA, xB, yB, xC, yC, xD, yD, hA, hB, hC, hD: real;

begin
  write('Координаты точки А:  ');
  readln(xA, yA);
  write('Координаты точки B:  ');
  readln(xB, yB);
  write('Координаты точки C:  ');
  readln(xC, yC);
  write('Координаты точки D:  ');
  readln(xD, yD);
  writeln;
  writeln('Высоты треугольника АВС:');
  Altitudes(xA, yA, xB, yB, xC, yC, hA, hB, hC);
  writeln(' hA = ', hA:0:2);
  writeln(' hB = ', hB:0:2);
  writeln(' hC = ', hC:0:2);
  writeln;
  writeln('Высоты треугольника АВD:');
  Altitudes(xA, yA, xB, yB, xD, yD, hA, hB, hD);
  writeln(' hA = ', hA:0:2);
  writeln(' hB = ', hB:0:2);
  writeln(' hD = ', hD:0:2);
  writeln;
  writeln('Высоты треугольника АСD:');
  Altitudes(xA, yA, xC, yC, xD, yD, hA, hC, hD);
  writeln(' hA = ', hA:0:2);
  writeln(' hC = ', hC:0:2);
  writeln(' hD = ', hD:0:2);
  readln
end.


Яндекс.Метрика