Kod Pascal na C różne wyniki


(adami) #1

Co w kodzie w C jest nie tak że są inne wyniki , czy może źle formatuje wynik ? Oblicza to wschód zachód słońca kod pascala znaleziony w internecie.

Function Acos(x:double):double;
begin
 ACos:= ArcTan (sqrt (1-sqr (x)) /x);
End;


Function Asin(x:double):double;
begin
 ASin:= ArcTan (x/sqrt (1-sqr (x)));
End;


function modd(x,y:double):double;
{funkcja zwraca wartosc dzielenia liczb rzeczywistych}
var il:double;
begin
il:=int(x/y);
modd:=x-(il*y);
end;


begin

R:=2015;
M:=12;
D:=12;
Lat:=50.100; {szerokosc geograficzna ujemna - S dodatnia - N}
Long:=21.6167; {dlugosc geograficzna ujemna - W dodatnia - E}
Req:=-0.833; {wysokosc Slonca podczas Wschodu i Zachodu}

{------------------------------------}
J:=367*R-int(7*(R+int((M+9)/12))/4)+int(275*M/9)+D-730531.5;
Cent:=J/36525;
L:=modd((4.8949504201433+628.331969753199*Cent),6.28318530718);
G:=MODD((6.2400408+628.3019501*Cent),6.28318530718);
O:=0.409093-0.0002269*Cent;
F:=0.033423*SIN(G)+0.00034907*SIN(2*G);
E:=0.0430398*SIN(2*(L+F)) - 0.00092502*SIN(4*(L+F)) - F;
A:=ASIN(SIN(O)*SIN(L+F));
C:=(SIN(0.017453293*Req) - SIN(0.017453293*Lat)*SIN(A))/(COS(0.017453293*Lat)*COS(A));

Wsch:=(PI - (E+0.017453293*Long + 1*ACOS(C)))*57.29577951/15;
Tran:=(PI - (E+0.017453293*Long + 0*ACOS(C)))*57.29577951/15;
Zach:=(PI - (E+0.017453293*Long + -1*ACOS(C)))*57.29577951/15;

writeln('Wschod i Zachod Slonca dla');
writeln('Miejscowosci : Sze : ',Lat:0:2,' , Dlu : ',Long:0:2);
writeln;
writeln;
writeln('Czas UT');
writeln;
writeln('Wschod : ',int(Wsch):0:0,':',(60*(Wsch-int(Wsch))):0:3);
writeln('Tranzyt : ',int(Tran):0:0,':',(60*(Tran-int(Tran))):0:3,' - Gorowanie');
writeln('Zachod : ',int(Zach):0:0,':',(60*(zach-int(Zach))):0:3);

C

double acos(double x)
{
return atan(sqrt (1-(x*x)) /x);
}


double asin(double x)
{
return atan (x/sqrt (1- (x*x)));
}


double modd(double x,double y)
{
//{funkcja zwraca wartosc dzielenia liczb rzeczywistych}
double il;
il = (int)x/y;
return x-(il*y);
}


void sloncewz(char wynik[15])
{


	R=2015;
	M=12;
	D=12;
	Lat=50.100; //{szerokosc geograficzna ujemna - S dodatnia - N}
	Long=21.6167; //{dlugosc geograficzna ujemna - W dodatnia - E}
	Req=-0.833; //{wysokosc Slonca podczas Wschodu i Zachodu}
	J=367*R-(int)(7*(R+(int)((M+9)/12))/4)+(int)(275*M/9)+D-730531.5;
	Cent=J/36525;
	L=modd((4.8949504201433+628.331969753199*Cent),6.28318530718);
	G=modd((6.2400408+628.3019501*Cent),6.28318530718);
	O=0.409093-0.0002269*Cent;
	F=0.033423*sin(G)+0.00034907*sin(2*G);
	E=0.0430398*sin(2*(L+F)) - 0.00092502*sin(4*(L+F)) - F;
	A=asin(sin(O)*sin(L+F));
	C=(sin(0.017453293*Req) - sin(0.017453293*Lat)*sin(A))/(cos(0.017453293*Lat)*cos(A));

	Wsch=(PI - (E+0.017453293*Long + 1*acos(C)))*57.29577951/15;
	Tran=(PI - (E+0.017453293*Long + 0*acos(C)))*57.29577951/15;
	Zach=(PI - (E+0.017453293*Long + -1*acos(C)))*57.29577951/15;
	
 sprintf(wynik, "%-.0d:%-2.0f,-%-.0d:%-2.0f",(int)Wsch,(60*(Wsch-(int)Wsch)),(int)Zach,(60*(Zach-(int)Zach)));

 


(Drobok) #2

masz x^2 w asin a pascal ma sqrt :stuck_out_tongue:

Poza tym jaki kompilator pozwala ci na nie deklarowanie zmiennych ?

Ew jeśli je deklarujesz poza cytatem to nie określisz czy masz zły format przy wyświetlaniu


(adami) #3

Zmienne są typu “double”

ArcTan (sqrt (1-sqr (x)) /x);

atan(sqrt (1-(x*x)) /x);

Chodzi o te zapisy 

W sumie to w C jest asin acos więc wywaliłem te funkcje a wynik dalej taki sam 

dla c

Wschod  :  4:20