uses 
  graphabc;
const
  x0 = 150;
  y0 = 200;
  w = 100;
  step = 120;
  n = 3;
  kv1 = 0;
  kv2 = 1;
  kv3 = 2;


procedure astroida(r: integer);
var
  rr, xc, yc, x1, y1: integer;
  x, y, t: real;
  s: string;
begin
  clearwindow;
  setfontsize(10);
  SetWindowSize(400, 400);
  xc := WindowWidth div 2;
  yc := WindowHeight div 2;
  line(0, yc, 2 * xc, yc);
  line(xc, 0, xc, 2 * yc);
  t := 0;
  while t <= 2 * pi do
  begin
    x := r * (sqr(cos(t)) * cos(t));
    y := r * (sqr(sin(t)) * sin(t));
    x1 := xc + round(x);
    y1 := yc - round(y);
    putpixel(x1, y1, clGreen);
    t := t + 0.001;
  end;
  //SetBrushColor(clGreen);
  //setfillstyle(6, 12);
  //floodfill(xc, yc, clGreen);
  textout(50, 40, 'Astroida');
  textout(50, 60, 'x=r*cos^3(t) y=r*sin^3(t)');
  str(r, s);
  textout(50, 80, 'pri R=' + s);
  redraw;
end;

var
  f, r: integer;
  Q: array[1..3] of string = ('Нарисовать астроиду', 'Справка', 'Выход');
  b: boolean;

procedure menu(f: integer);
var
  i: integer;
begin
  SetWindowSize(640, 500);
  lockdrawing;
  for i := 1 to 3 do
  begin
    setfontsize(25);
    if f = i then setfontcolor(clred) else setfontcolor(clgreen);
    textout(50, i * 50, Q[i]);
  end;
  redraw;
end;

procedure choose;
begin
  case f of
    1: begin astroida(r); end;
    2: 
      begin
        textout(1, 250, 'Астроида это кривая, которую описывает');
        textout(1, 290, 'фиксированная точка круга, с середины');
        textout(1, 330, 'касаясь неподвижного круга раза');
        textout(1, 370, 'большего радиуса, и катится по нему без');
        textout(1, 410, 'скольжения.');
        redraw;
      end;
    3: halt;
  end;
end;

procedure up;
begin if f = 1 then f := 3 else f := f - 1;clearwindow;menu(f); end;

procedure down ;
begin if f = 3 then f := 1 else f := f + 1;clearwindow;menu(f); end;

procedure KeyDown(Key: integer);
var
  r: integer;
begin
  case Key of
    VK_Up: up;
    VK_Down: down;
    VK_Enter: choose;
  end;
end;

begin
  f := 1;
  menu(f);
  OnKeyDown := KeyDown; 
  textout(1, 400, 'Vvedite radius [50..200] r=');
  redraw;
  repeat
    readln(r);
    if(r in [50..200]) then begin clearwindow;menu(f);redraw; end;
  until r in [50..200];
end.
