Головна Робота Фото Малюнки Гостьова
До попереднього розділу


Додатки

Програми на мові Паскаль
  1. Програма побудови точок на колі за допомогою цілочисельної арифметики
    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.
    
  2. Програма побудови точок на колі за допомогою піфагорових трійок
    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.
    
  3. Програма для обчислення піфагорової трійки з заданим кутом
    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.
    


До попереднього розділу


Сайт управляется системой uCoz