Напишете функции и процедури, които по координатите (X, Y) на точка от равнината определят:
- дали точката лежи на някоя от осите
- в кой квадрант се намира
- разстоянието от нея до координатната ос
- дали съвпада с друга точка, чиито координати също са подадени като параметър
Да се направи главна програма, която тества тези процедури и функции.


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 от тях – за проверка, а не за отпечатване, се указва, че това е по-удачен начин. Ако е само за отпечатване, тогава и така както си го направил е удачно.