Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [pascal] принадлежит ли точка графику


Автор: Samotnik 11.4.2009, 00:37
привет 
помогите пожалуйста решить задачу
Задача на рисунке под буквочкой  Г   (последняя)
http://ipicture.ru/

Автор: t_gran 11.4.2009, 05:29
В Pasca-ca-ле не силён, но вроде работает smile:

Код

function BelongXYa (x, y: real): boolean;
begin
   if (-3 <= x) and (x <= 3) and (y <= -x+3) and (-4 <= y) then
      BelongXYa:= true
   else
      BelongXYa:= false;
end;

function BelongXYb (x, y: real): boolean;
begin
   if (-3 <= x) and (x <= 3) and (y <= (2/3)*x+2) and (-4 <= y) then
      BelongXYb:= true
   else
      BelongXYb:= false;
end;

function BelongXYc (x, y: real): boolean;
begin
   if (2*x-4 <= y) and (y <= 2*x+4) and (-2*x-4 <= y) and (y <= -2*x+4) then
      BelongXYc:= true
   else
      BelongXYc:= false;
end;


Тест:
Код

begin
   writeln (BelongXYa(-3,-4));
   writeln (BelongXYb(3,2));
   writeln (BelongXYc(-3,-4));
end.

Автор: THandle 11.4.2009, 09:23
Вот вариант полной программы:
Код


program ooo;

function A(const AX, AY: Integer): Boolean;
begin
  A := (AX >= -3) and (AX <= 3) and (AY <= (3 - AX)) and (AY >= -4);
end;

function B(const AX, AY: Integer): Boolean;
begin
  B := (AX >= -3) and (AX <= 3) and (AY <= ((2/3)*AX + 2)) and (AY >= -4);
end;

function C(const AX, AY: Integer): Boolean;
begin
  C := (AY >= (2*AX - 4)) and (AY <= (2*AX + 4)) and (AY >= (-2*AX - 4)) and (AY <= (-2*AX + 4));
end;

var
  x, y: Integer;

begin
  ReadLn(x, y);
  if A(x, y) then
    WriteLn('Prinadlegit pervoi oblasti');
  if B(x, y) then
    WriteLn('Prinadlejit vtoroi oblasti');
  if C(x, y) then
    WriteLn('Prinadlejit tretei oblasti');
  ReadLn;
end.

Автор: Samotnik 11.4.2009, 11:33
извиняюсь, забыл сказать - задача 9-го класса  без функций 
только if then else

Автор: THandle 11.4.2009, 11:43
Samotnik, 

Код

program ooo;

var
  AX, AY: Integer;

begin
  ReadLn(AX, AY);
  if (AX >= -3) and (AX <= 3) and (AY <= (3 - AX)) and (AY >= -4) then
    WriteLn('Prinadlegit pervoi oblasti');
  if (AX >= -3) and (AX <= 3) and (AY <= ((2/3)*AX + 2)) and (AY >= -4) then
    WriteLn('Prinadlejit vtoroi oblasti');
  if (AY >= (2*AX - 4)) and (AY <= (2*AX + 4)) and (AY >= (-2*AX - 4)) and (AY <= (-2*AX + 4)) then
    WriteLn('Prinadlejit tretei oblasti');
  ReadLn;
end.


Автор: Samotnik 11.4.2009, 12:39
спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)