USE GRAPHICS

graphmode:=0

PROC firkant(l,g)
  a:=l*COS(g/180*PI); b:=l*SIN(g/180*PI)
  draw(a,b)
  draw(-b,a)
  draw(-a,-b)
  draw(b,-a)
ENDPROC firkant

PROC graf(f OF Fnc,xmin,xmax,ymin,ymax)
  LOCAL x
  window(xmin,xmax,ymin,ymax)
  pencolor(2)
  moveto(xmin,0)
  drawto(xmax,0)
  moveto(0,ymin)
  drawto(0,ymax)
  moveto(xmin,f(xmin))
  pencolor(2)
  FOR x:=xmin TO xmax STEP 0.05 DO drawto(x,f(x))
  pencolor(1)
ENDPROC graf

FUNC f(x)
  RETURN x/(1+x*x)
ENDFUNC f

FUNC g(x)
  RETURN (x*x-6*x)/(x*x+2*x+2)
ENDFUNC g

PROC ramme(v,h,u,o)
  window(xmin,xmax,ymin,ymax)
  viewport(v,h,u,o)
  clear
  pencolor(2)
  moveto(xmin,ymin)
  drawto(xmax,ymin)
  drawto(xmax,ymax)
  drawto(xmin,ymax)
  drawto(xmin,ymin)
  pencolor(1)
  viewport(v+5,h-5,u+5,o-5)
ENDPROC ramme

PROC roset
  window(0,1,0,1)
  moveto(0.5,0.5)
  FOR i:=0 TO 360 STEP 10 DO firkant(0.3,i)
ENDPROC roset

graphicscreen(graphmode)

MaxY:=height-1; MaxX:=width-1
xmin:=0; xmax:=1; ymin:=0; ymax:=1

clear
background(1);ramme(50,0.75*MaxX,5,0.65*MaxY);background(0)
graf(f(),-9,9,-1,1)
WAIT 4

viewport(0,MaxX,0,MaxY)
clear
background(3);ramme(50,0.75*MaxX,5,0.65*MaxY);background(0)
graf(g(),-10,7,-2,12)
WAIT 5

viewport(0,MaxX,0,MaxY)
clear
background(7);ramme(5,0.5*MaxX,5,0.65*MaxY);background(0)
graf(g(),-10,7,-2,12)
background(13);ramme(0.55*MaxX,0.9*MaxX,5,0.45*MaxY);background(0)
graf(f(),-7,7,-1,1)
WAIT 5

viewport(0,MaxX,0,MaxY)
clear
background(11);ramme(5,0.45*MaxX,5,0.65*MaxY);background(0)
pencolor(2)
roset
pencolor(1)
WAIT 4

background(4);ramme(0.48*MaxX,0.77*MaxX,5,0.42*MaxY);background(0)
pencolor(1)
roset
pencolor(1)
WAIT 3

background(9);ramme(0.80*MaxX,MaxX-1,5,0.32*MaxY);background(0)
pencolor(3)
roset
pencolor(1)
WAIT 5

background(15);ramme(0.4*MaxX,0.9*MaxX,0.2*MaxY,0.75*MaxY);background(0)
graf(g(),-10,7,-2,12)
WAIT 5

background(13);ramme(20,0.5*MaxX,15,0.5*MaxY);background(0)
graf(f(),-7,7,-0.7,0.7)

WHILE KEY$="" DO WAIT
textscreen

TYPE Fnc=FUNC(FLOAT) OF FLOAT
