program RK1;
    (* A simple program in Pascal for Runge-Kutta's method for a
       first order differential equation.
                dy/dx = x^2 + sin(xy)
                y(1) = 2                                 *)
var     number, i : integer;
        h, k1, k2, k3, k4, x, y : real;
        function f(x,y : real) : real;
            begin
                        f := x*x + sin(x*y)
            end;
begin
        number := 1;
        while number > 0 do
        begin
            x := 1.0;
            y := 2.0;
            writeln(' Give the number of steps ');
            read(number);
            if number >= 1 then
                begin
                        writeln(' Give the step length ');
                        read(h);
                        writeln('       x              y');
                        writeln(x, y);
                        for i := 1 to number do
                        begin
                                k1 := h*f(x,y);
                                k2 := h*f(x+0.5*h,y+0.5*k1);
                                k3 := h*f(x+0.5*h,y+0.5*k2);
                                k4 := h*f(x+h,y+k3);
                                x  := x + h;
                                y  := y + (k1+2*k2+2*k3+k4)/6;
                                writeln(x, y);
                        end;
                end;
        end;
end.
