Додатки
Програми на мові Паскаль
- Програма побудови точок на колі за допомогою цілочисельної арифметики
Program circle;
const
xcentr=256; {relative coordinate x=0}
ycentr=256; {relative coordinate y=0}
radius=128;
var
si,co,cn,sn,den:integer;
x,y,i,xx,yy,rr,gg,bb,col:integer;
re,im:real;
Begin
den:=32768; {common denominator}
sn;=1029; {sine numerator for angle TT/100}
cn:=32752;
si:=0;
co:=32768;
col:=0;
rr:=0;gg:=256;bb:=128;
writeln(sqrt(sqr(cn)+sqr(sn)));
Brush(1,22,25,24);
Pen(1,22,25,24);
For i:=0 to 5000 do
begin
si:=trunc((si*cn+co*sn)/den);
co:=trunc((co*cn-si*sn)/den);
{si:=round((si*cn+co*sn)/den);
co:=round((co*cn-si*sn)/den);}
xx:=trunc(si/128 + xcentr);
yy:=trunc(co/128 + xcentr);
Ellipse( xx-2,yy-2 ,xx+2,yy+2 );
end
end.
- Програма побудови точок на колі за допомогою піфагорових трійок
Program circlr_pyth;
{poworoty po kolu z masstabuwannyam z wywodom grafiky}
Const
nmax = 100000;
xcentr=306;
{:integer:=256;}
ycentr=306;
radius=200;
Var
a,b,c,h,k,l,m,n,d,e,x,y,den,sn,cn,s : integer;
mag,fi:real;
{Rotating triplet (klm)to angle(abc), s-scale factor}
Procedure RotateS(a,b,c,s:integer;Var k,l,m:integer);
var
lt:integer;
Begin
lt:=(l*b - k*a);
k:=round((l*a + k*b)/s);
l:=round(lt/s);
m:=round(m*c/s);
end;
Function Magn(a,b,c:integer):real;
Begin
Magn:=((a*a+b*b)/(c*c+0.000001));
end;
Function Phase(a,b:integer):real ;
Begin
Phase:= Arctan(b/(a+0.0000001));
end;
Begin
den:=36517;
sn:=2292;
{2TT/100}
cn:=36445;
a:=sn;
b:=cn;
c:=den;
k:=0;
l:=32768;
m:=32768;
s:=den;
{SCALE FACTOR}
WriteLn(a,' ',b,' ',c);
Brush( 1,0,0,0 );
For n:=1 to nmax do
begin
RotateS(a,b,c,s,k,l,m);
x:= trunc(radius*k/(m))+ xcentr;
y:= trunc(radius*l/(m))+ycentr;
mag:=magn(k,l,m,);
fi:=Phase(k,l);
{ WriteLn(n,' ,k,' ',l,' ',m,' ',mag,' ,fi );
}
Ellipse( x-1,y-1 ,x+2,y+2 );
end
end.
- Програма для обчислення піфагорової трійки з заданим кутом
Program Triplet_find;
{Znajty Pythagorovy trіjky za zadanym kutom alpha z pochybkoju < errmax}
Const
mmax =1000 ;
errmax=0.003;
Var
a,b,c,m,n : integer;
typ: integer;
alpha,alph,tangent,fm,nr,delta,err,ferr:real;
Procedure Triplet(Var a,b,c:integer; m,n:integer);
Begin
a:=2*m*n;
b:=m*m-n*n;
c:= m*m + n*n;
end;
Begin
WriteLn( 'Введіть кут в градусах - 1,радіанах -2,долях кола -3,
коло подiлити -4, сам кут');
Typ:=1;
Readln( Typ);
ReadLn(alpha);
ferr:=errmax;
Case Typ of
1:
alph:=pi*alpha/180;
2:
alph:=alpha;
3:
alph:=2*pi*alpha;
else
alph:=2*pi/alpha
end;
tangent:=sin(alph)/ cos(alph);
WriteLn('m ','n ','a ', 'b ','c ','Error');
For m:=2 to mmax do
begin
fm:= m*(sqrt(1+sqr(tangent))-1)/tangent;
n:= round(fm);
if (m=2)or (n=0)then
n:=1;
if ( ((m mod 2 =0) and (n mod 2 =1)) or ((m mod 2 =1)
and (n mod 2 =0)) and ( m mod n <>0)) then
begin
Triplet(a,b,c,m,n);
Delta:=arctan(a/b)-alph;
err:=abs(delta);
if err < ferr then
begin
ferr:=err;
WriteLn(m,' ',n, ' ', a, ' ', b,' ',C,' ',Delta);
end
end
end;
if ferr=errmax then
Writeln('Трiйка не знайдена, змінiть кут або збiльшiть mmax');
end.
|