program sd; uses crt, graph; Var gb, gm, x,y,a,b,q,p,k : integer; t,m : real; n:boolean; Const grPath='d:\BP\BGI'; Begin gb := detect; InitGraph(gb ,gm ,grPath); {переход в графический режим} t :=0; {установка начальных значений} x:= 0; y := 0; SetTextStyle(0,HorizDir,0); {определяет стиль и размер шрифта} OutTextXY(2,3, 'vvedite_a'); {вывод строки в графическом режиме} gotoXY(13,1); {перемещение курсора в данную точку} read(a); OutTextXY(2,18, 'vvedite_b'); gotoXY(13,2); read(b); OutTextXY(2, 32,'vvedite_p'); gotoXY(13,3); read(p); OutTextXY(2,47,'vvedite_q'); gotoXY(13,4); read(q); {===============================} {проверка первого случая в задании} {b/a - положительное число } m:=b/a; {проверка, чтобы b/a было целым числом} k:=round(m); if m-k=0 then n:=true else n:=false; if ((b/a)>0) and (n=true) and ((p/q)<>(b/a)) then begin Repeat Repeat t := t+pi/3500; x := round((a+b)*cos(t)-a*cos((a+b)*t/a)); y := round((a+b)*sin(t)-a*sin((a+b)*t/a)); Putpixel(340+x, 240+y, 5); until t >= 2*pi; Until keypressed; end; {===================================} {случай второй} if ((b/a)=(p/q)) then begin Repeat Repeat t := t+2*q*pi/3500; x := round((a+b)*cos(t)-a*cos((a+b)*t/a)); y := round((a+b)*sin(t)-a*sin((a+b)*t/a)); Putpixel(340+x, 240+y, 5); until t >= 2*pi; Until keypressed; closegraph; end; {=======================================} readln; end.