option explicit declare sub plotArray( byval addr as single ptr, byval siz as integer, byval xscale as integer, byval yscale as integer, byval col as integer ) type fp as function ( byval x as single ) as single declare function makeArray( byval f as fp ) as single ptr declare sub plotFunc( byval f as fp, byval xscale as integer, byval yscale as integer, byval col as integer ) declare function square( byval x as single ) as single declare function linear( byval x as single ) as single screen 13 plotFunc(@linear, 20, 20, 12) sleep end sub plotArray( byval addr as single ptr, byval siz as integer, byval xscale as integer, byval yscale as integer, byval col as integer ) for i as integer = 0 to 199 pset (0, i*yscale), col next i for i = 0 to 319 pset (i*xscale, 199), col next i for i = 0 to siz line (i*xscale, cint(199-(*(addr + i))*yscale))-((i+1)*xscale, cint(200-(*(addr + i + 1))*yscale)), col next i end sub function makeArray( byval f as fp ) as single ptr dim arr(319) as single for i as integer = 0 to ubound(arr) arr(i) = f(i) next i makeArray = @arr(0) end function sub plotFunc( byval f as fp, byval xscale as integer, byval yscale as integer, byval col as integer ) plotArray(makeArray(f), 319, xscale, yscale, col) end sub 4 function square( byval x as single ) as single square = x^2 end function function linear( byval x as single ) as single linear = x end function