steam22-9940
?>

Написать программу для паскаля, которая по трем парам (х, у) введенных с клавиатуры координат определит, находится ли начало координат внутри треугольника, заданного этими тремя вершинами

Информатика

Ответы

Иванов1813
{ входит ли начало координат в треугольник }
type point = record
       x,y: real;
     end;
var s0,s: real;
    pts: array [1..3] of point;
    i: integer;
begin
{ считывание координат точек}
  for i:=1 to 3 do
   begin
     writeln('точка ',i,'  x ',' y ');
     write('         ');
     readln(pts[i].x,pts[i].y);
  end;
  { вычисляем площадь треугольника ABC  через векторное произведение }
  s0:=(pts[2].x-pts[1].x)*(pts[3].y-pts[1].y) - 
      (pts[3].x-pts[1].x)*(pts[2].y-pts[1].y);
  s0:=abs(s0);
{ вычисляем сумму площадей треугольников  из начала координат }
  s:=abs(pts[1].x*pts[2].y - pts[2].x*pts[1].y);
  s:=s+abs(pts[2].x*pts[3].y - pts[3].x*pts[2].y);
{ если  s > s0 , то начало координат вне треугольника }
  if s>s0 then writeln('начало координат вне треугольника')
  else writeln('начало координат внутри треугольника');
end.

На тестовой задаче:
точка 1  x  y 
             -1 -3
точка 2  x  y 
             -3 2
точка 3  x  y 
              4 3
начало координат внутри треугольника

точка 1  x  y
             -2 0
точка 2  x  y
              -3 2
точка 3  x  y
              4 3
начало координат вне треугольника

 
olesya-kwas

#include<iostream>

#include<iomanip>

#define _USE_MATH_DEFINES

#include<cmath>

using namespace std;

 

int main()

{

   double a, b, c, alfa, beta, gamma;

   

   cout <<"a="; cin >> a;

   cout <<"b="; cin >> b;

   cout <<"c="; cin >> c;

   

   if (a+b>c && a+c>b && b+c>a)

   {    

   alfa = acos((b*b+c*c-a*a)/(2*b*c))*180/M_PI;

   beta = acos((a*a+c*c-b*b)/(2*a*c))*180/M_PI;

   gamma = acos((a*a+b*b-c*c)/(2*a*b))*180/M_PI;    

   cout <<"Angles in degrees:\n";

   cout <<setprecision(3)<<fixed<< "alfa=" << alfa << " beta=" << beta << " gamma=" << gamma << endl;

   }

   else cout << "Triangle absent\n";

system("pause");

return 0;

}

Stenenko

const

 AOper: array [0..3] of string = ('+', '-', '*', '/');

var

 a, b, Oper: Integer;

 r: Real;

begin

 Randomize;    // инициализация датчика случайных чисел

 a := Random (1001);

 b := Random (1001);

 Oper := Random (4);

 case Oper of

 0: r := a + b;

 1: r := a - b;

 2: r := a * b;

 3:if b <> 0 then begin

     r := a / b;

   end else begin

     WriteLn ('Произошла ошибка при делении на ноль');

     Exit;

   end

 else r := -1;

 end;

 WriteLn (a);

 WriteLn (b);

 WriteLn (Aoper [Oper]);

 if (r >= 0) and (r - Trunc (r) = 0) then begin   // если в результате получилось положительное целое число

   WriteLn ('yes');

   WriteLn (r :6 :0);

 end else

   WriteLn (' no');

 ReadLn;

end.

Объяснение:

r - Trunc (r) // это выделение дробной части числа

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Написать программу для паскаля, которая по трем парам (х, у) введенных с клавиатуры координат определит, находится ли начало координат внутри треугольника, заданного этими тремя вершинами
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Юрьевич293
pbttehnology
Azat859
Стефаниди
kristina
vera4
tomogradandrey
olgakozelskaa492
kononenko-elena4
igorSvetlana547
ogofman
Ерцкин_Овечкина391
kulagin777
rodsher7740
anytkaakk