Napisałem taki program:
program Project3;
{$APPTYPE CONSOLE}
uses
SysUtils;
Type wektor=Array[1..10] of Real;
var x,y: wektor;
var i,n,l,c,r: integer;
function azymut(p,k:integer; x,y:wektor):real;
var dx,dy,az: real;
begin
dx:=x[k]-x[p];
dy:=y[k]-y[p];
IF (dx>0) AND (dy=0) THEN az:=0 ELSE
IF (dx=0) AND (dy>0) THEN az:=100 ELSE
IF (dx<0) AND (dy=0) THEN az:=200 ELSE
IF (dx=0) AND (dy<0) THEN az:=300 ELSE
IF (dx<>0) AND (dy<>0) THEN
BEGIN
az:=arctan(Abs(dy/dx));
az:=az*200/Pi;
END;
IF (dx>0) AND (dy>0) THEN az:=az;
IF (dx<0) AND (dy>0) THEN az:=200-az;
IF (dx<0) AND (dy<0) THEN az:=200+az;
IF (dx>0) AND (dy<0) THEN az:=400-az;
IF az<0 THEN az:=-az;
writeln('Azymut wynosi',az:9:4,' gradow');
end;
function kat(l,c,r:integer; x,y:wektor):real;
var azl,azp,a: real;
begin
azl:=azymut(l,c,x,y);
azp:=azymut(r,c,x,y);
a:=azl-azp;
writeln('Kat wynosi ',a:9:4,' gradow');
end;
begin
writeln('PROGRAM LICZACY FUNKCJE GEODEZYJNE:');
writeln;
write('Podaj ilosc punktow: ');
Readln(n);
writeln;
for i:=1 to n do
begin
write('Podaj wspolrzedna X',i,': ');
readln(x[i]);
write('Podaj wspolrzedna Y',i,': ');
readln(y[i]);
end;
writeln;
writeln('Obliczanie kata ze wspolrzednych');
write('Podaj punkt lewy: ');
readln(l);
write('Podaj punkt centralny: ');
readln(c);
write('Podaj punkt prawy: ');
readln(r);
kat(l,c,r,x,y);
readln;
end.
Program ma w założeniu obliczyć kąt ze współrzędnych. Mój problem pojawia się w 40 linijce ( a:=azl-azp; ), ponieważ w tym momencie powinien odjąć od wartości azymutu lewego wartość azymutu prawego, czego program nie robi i nie mam pojęcia dlaczego.
Zresztą wpiszcie sobie takie dane (wpisywać po kolei, zatwierdzając enterem):
3 0 24 11 25 6 14 3 1 2
Powinno dać kąt równy: 71.3674
A daje 0.0000