Проверки за точка

Напишете функции и процедури, които по координатите (X, Y) на точка от равнината определят:

  • дали точката лежи на някоя от осите
  • в кой квадрант се намира
  • разстоянието от нея до координатната ос
  • дали съвпада с друга точка, чиито координати също са подадени като параметър

Да се направи главна програма, която тества тези процедури и функции.

Публикувано в 10в, 11а, 11в с етикети . Постоянна връзка.

2 Responses to Проверки за точка

  1. kaloyan каза:
    procedure Vavedi(out x,y:integer);
      begin
        Write('Vavedi X: '); readln(x);
        Write('Vavedi Y: '); readln(y);
      end;
    
    function Na_abs_or(const x,y:integer):string;
      begin
        if ((x=0) and (y=0)) then result:=''
          else
        if x=0 then result:='Tochkata leji na ordinatata'
          else
        if y=0 then result:='Tochkata leji na abscisata'
          else
        if ((x<>0) and (y<>0)) then result:='Tochkata ne leji na abscisata ili ordinatata'
      end;
    
    function Kvadrant(const x,y:integer):string;
      begin
        if ((x>0) and (y>0)) then result:='I kvadrant'
          else
        if ((x<0) and (y>0)) then result:='II kvadrant'
          else
        if ((x<0) and (y<0)) then result:='III kvadrant'
          else
        if ((x>0) and (y<0)) then result:='IV kvadrant'
          else
        if ((x=0) and (y=0)) then result:='Tochkata e v centara na koordinatnata sistema';
      end;
    
    function Savpada_li_s_dr_tochka(const a,b,x,y:integer):string;
      begin
        writeln('(a;b)=','(',a,';',b,')');
        writeln('(x;y)=','(',x,';',y,')');
        if ((a=x) and (b=y)) then result:='Tochkata (a;b) ne savpada s tochkata (x;y)'
          else
        if ((a<>x) or (b<>y)) then result:='Tochkata (a;b) ne savpada s tochkata (x;y)';
      end;
    
    VAR x,y,a,b:integer;
    BEGIN
    a:=3;
    b:=5;
      Vavedi(x,y);
      writeln(Na_abs_or(x,y));
      writeln(Kvadrant(x,y));
      writeln(Savpada_li_s_dr_tochka(a,b,x,y));
    
    readln;
    END.
    • Данаил каза:

      Браво! Добре си се ориентирал какво трябва да се подаде като параметри и какво да се върне като резултат; и изчисленията във функциите ти са верни. Има обаче нещо, което не сме обсъждали: обикновено функциите се ползват не за отпечатване, а за обработки в главната програма. И (тъй като да се проверяват низове е по-трудно) е по-удачно функциите да връщат като резултат тип integer или изброим тип, а евентуалното отпечатване да се прави в главната програма. Така функциите стават по-универсални и могат да се ползват както за отпечатване, така и за обработка на данни. Ето как ще изглежда програмата ти, реализирана по този начин (направил съм само първата функция, за останалите е аналогично):

      procedure Vavedi(out x,y:integer);
        begin
          Write('Vavedi X: '); readln(x);
          Write('Vavedi Y: '); readln(y);
        end;
      
      function Na_abs_or(const x,y:integer): integer;
        begin
          if ((x=0) and (y=0)) then result:= 0 // Tochkata e v centara
            else
          if x=0 then result:= 1 // Tochkata leji na ordinatata
            else
          if y=0 then result:= 2 // Tochkata leji na abscisata
            else
          result:= 4; // Tochkata ne leji na abscisata ili ordinatata
        end;
      
      function Kvadrant(const x,y:integer):string;
        begin
          if ((x>0) and (y>0)) then result:='I kvadrant'
            else
          if ((x<0) and (y>0)) then result:='II kvadrant'
            else
          if ((x<0) and (y<0)) then result:='III kvadrant'
            else
          if ((x>0) and (y<0)) then result:='IV kvadrant'
            else
          if ((x=0) and (y=0)) then result:='Tochkata e v centara na koordinatnata sistema';
        end;
      
      function Savpada_li_s_dr_tochka(const a,b,x,y:integer):string;
        begin
          writeln('(a;b)=','(',a,';',b,')');
          writeln('(x;y)=','(',x,';',y,')');
          if ((a=x) and (b=y)) then result:='Tochkata (a;b) ne savpada s tochkata (x;y)'
            else
          if ((a<>x) or (b<>y)) then result:='Tochkata (a;b) ne savpada s tochkata (x;y)';
        end;
      
      VAR x,y,a,b:integer;
      BEGIN
      a:=3;
      b:=5;
        Vavedi(x,y);
        // обработваме резултата, връщан от функцията
        case Na_abs_or(x,y) of
        0: WriteLn('Tochkata leji i na abcisata, i na ordinatata - v centura e :-)');
        1: WriteLn('Tochkata leji na ordinatata');
        2: WriteLn('Tochkata leji na abscisata');
        4: WriteLn('Tochkata ne leji na abscisata ili ordinatata');
        end;
      
        writeln(Kvadrant(x,y));
        writeln(Savpada_li_s_dr_tochka(a,b,x,y));
      
      readln;
      END.

      Изглежда че така е повече писане, но ако тази функция се използва на стотина места и на 95 от тях – за проверка, а не за отпечатване, се указва, че това е по-удачен начин. Ако е само за отпечатване, тогава и така както си го направил е удачно.

Вашият коментар