Can I use "Uses Math;" in pascal? I got Crash (ACCESS_VIOLATION)
Here is my program.
{No.1043 Cover an Arc.}
Uses
Math;
Var
X1,Y1,X2,Y2,X3,Y3,A1,A2,B1,B2,C1,C2:LongInt;
D,DX,DY:Real;
CX,CY,R,Up1,Down1,Left1,Right1,Theta1,Theta2,Theta3,Real1:Real;
Up,Down,Left,Right:LongInt;
Begin
ReadLn(X1,Y1); ReadLn(X2,Y2); ReadLn(X3,Y3);
A1:=2*(X1-X2); A2:=2*(X2-X3);
B1:=2*(Y1-Y2); B2:=2*(Y2-Y3);
C1:=X1*X1+Y1*Y1-X2*X2-Y2*Y2;
C2:=X2*X2+Y2*Y2-X3*X3-Y3*Y3;
D:=A1*B2-A2*B1;
DX:=C1*B2-C2*B1;
DY:=A1*C2-A2*C1;
CX:=DX/D; CY:=DY/D;
R:=Sqrt(Sqr(CX-X1)+Sqr(CY-Y1));
Theta1:=Arccos((X1-CX)/R);
If Y1<CY Then Theta1:=2*pi-Theta1;
Theta2:=Arccos((X2-CX)/R);
If Y2<CY Then Theta2:=2*pi-Theta2;
Theta3:=Arccos((X3-CX)/R);
If Y3<CY Then Theta3:=2*pi-Theta3;
If Theta1>Theta2 Then
Begin
Real1:=Theta1; Theta1:=Theta2; Theta2:=Real1;
End;
If (Theta1-Theta3)*(Theta3-Theta2)<0 Then
Begin
Real1:=Theta1;
Theta1:=Theta2-2*pi;
Theta2:=Real1;
End;
If (0>Theta1) And (0<Theta2) Then
Right1:=CX+R
Else Begin
If X1>X2 Then Right1:=X1 Else Right1:=X2;
End;
If (pi/2>Theta1) And (pi/2<Theta2) Then
Up1:=CY+R
Else Begin
If Y1>Y2 Then Up1:=Y1 Else Up1:=Y2;
End;
If (pi>Theta1) And (pi<Theta2) Then
Left1:=CX-R
Else Begin
If X1>X2 Then Left1:=X2 Else Left1:=X1;
End;
If (pi/2*3>Theta1) And (pi/2*3<Theta2) Then
Down1:=CY-R
Else Begin
If Y1>Y2 Then Down1:=Y2 Else Down1:=Y1;
End;
Up:=Trunc(Up1);
Down:=Trunc(Down1);
Left:=Trunc(Left1);
Right:=Trunc(Right1);
If Up1-Trunc(Up1)>1E-7 Then Inc(Up);
If Trunc(Down1)+1-Down1<1E-7 Then Inc(Down);
If Right1-Trunc(Right1)>1E-7 Then Inc(Right);
If Trunc(Left1)+1-Left1<1E-7 Then Inc(Left);
WriteLn((Up-Down)*(Right-Left));
End.
ArcSin and ArcCos thru ArcTan for David.
Hi David!
As you know, Pascal has only 3 trigonometrical functions - Sin(), Cos
() and ArcTan().
So, you can calculate ArcSin and ArcTan as follows:
ArcSin(x)=ArcTan(x/sqrt(1-sqr(x))) and
ArcCos(x)=ArcTan(sqrt(1-sqr(x))/x).
This is it.
Good Luck!