title: case..of with function
body: <p>this is my program...  i need help how i can use function CalkaNadmiar for 2: in (case rgMetoda.ItemIndex of) and function CalkaNiedomiar for 3:  </p>
  
  <pre><code>unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, ExtCtrls;
  
  type
    fx= function(x:extended):extended;
    TForm1 = class(TForm)
      Naglowek: TLabel;
      Label1: TLabel;
      Label2: TLabel;
      Label3: TLabel;
      Label4: TLabel;
      Label5: TLabel;
      Label6: TLabel;
      Label7: TLabel;
      edPrzedzialy: TEdit;
      edOd: TEdit;
      edDo: TEdit;
      pnWynik: TPanel;
      Oblicz: TButton;
      rgMetoda: TRadioGroup;
      rb1: TRadioButton;
      rb2: TRadioButton;
      rb3: TRadioButton;
  
      function f1(X: Extended): Extended;
      function f2(X: Extended): Extended;
      function f3(X: Extended): Extended;
      procedure ObliczClick(Sender: TObject);
      procedure edPrzedzialyExit(Sender: TObject);
      procedure edOdExit(Sender: TObject);
      procedure edDoExit(Sender: TObject);
  
  
  
  
    private
           function CalkaNadmiar (odx,dox:extended; n:integer; f:fx):extended;
       function CalkaNiedomiar (odx,dox:extended; n:integer; f:fx):extended;
       function Calka (odx,dox:extended; n:integer; f:fx):extended;
    public
      { Public declarations }
    end;
  
  var
    Form1: TForm1;
  
  implementation
  
  {$R *.dfm}
  
  function TForm1.f1(x: Extended): Extended;
  begin
   Result:=sqr(x)+ 2;
  end;
  
  function TForm1.f2(X: Extended): Extended;
  begin
   Result:=3*x - 8;
  end;
  
  function TForm1.f3(X: Extended): Extended;
  begin
   Result:=sin(x) + Pi;
  end;
  
  
   procedure TForm1.ObliczClick(Sender: TObject);
  var Wynik, h, xi: real;
      i,n: word;
  //h - krok całkowania
  // Wynik - chwilowy lub końcowy wynik danej funkcji
  //xi - x dla kolejnego kroku całkowania
  //n - liczba przedziałów
  //i - obsluga pętli
  begin
   n:=StrToInt(edPrzedzialy.Text);
   h:=(StrToFloat(edDo.Text)-StrToFloat(edOd.Text))/n;
   Wynik:=0;
   case rgMetoda.ItemIndex of
    0: begin //obsługa metody prostok±tów z nadmiarem
     if rb1.Checked then
      begin
       for i:=0 to n-1 do
        begin
         xi:=StrToFloat(edOd.Text)+i*h;
         Wynik:= Wynik + f1(xi)*h;
        end;
       pnWynik.Caption:= FloatToStr(Wynik);
      end;
     if rb2.Checked then
      begin
       for i:=0 to n-1 do
        begin
         xi:=StrToFloat(edOd.Text)+i*h;
         Wynik:= Wynik + f2(xi)*h;
         end;
          pnWynik.Caption:= FloatToStr(Wynik);
        end;
      if rb3.Checked then
        begin
         for i:=0 to n-1 do
          begin
           xi:=StrToFloat(edOd.Text)+i*h;
           Wynik:= Wynik + f3(xi)*h;
        end;
       pnWynik.Caption:=FloatToStr(Wynik);
     end;
     end;
  
  
    1: begin //obsługa metody prostok±tów z niedomiarem
     if rb1.Checked then
      begin
       for i:=1 to n do
        begin
         xi:= StrToFloat(edOd.Text) + i*h;
         Wynik:= Wynik + f1(xi)*h;
        end;
       pnWynik.Caption := FloatToStr(Wynik);
      end;
     if rb2.Checked then
      begin
       for i:=1 to n do
        begin
         xi:=StrToFloat(edOd.Text) + i*h;
         Wynik:= Wynik + f2(xi)*h;
        end;
       pnWynik.Caption:=FloatToStr(Wynik);
      end;
           if rb3.Checked then
        begin
         for i:=0 to n-1 do
          begin
           xi:=StrToFloat(edOd.Text)+i*h;
           Wynik:= Wynik + f3(xi)*h;
        end;
       pnWynik.Caption:=FloatToStr(Wynik);
    end;
  end;
  end;
  end;
  
  
  procedure TForm1.edPrzedzialyExit(Sender: TObject);
  begin
   if (StrToFloat(edPrzedzialy.Text)&lt;10000) or
      (StrToFloat(edPrzedzialy.Text)&gt;100000000)
   then
    begin
     showmessage('Podaj liczbę z przedziału [10000 - 100000000].');
     edPrzedzialy.SetFocus;
    end;
   if Frac(StrToFloat(edPrzedzialy.Text))&lt;&gt;0 then
  {sprawdzamy czy została wprowadzona liczba całkowita}
    begin
     showmessage('Podaj liczbę całkowitą.');
     edPrzedzialy.SetFocus;
    end;
  end;
  
  procedure TForm1.edOdExit(Sender: TObject);
  begin
   if StrToFloat(edOd.Text)&gt;=StrToFloat(edDo.Text) then
    begin
     showmessage('Podaj liczbę mniejsz± niż górna granica całkowania.');
     edOd.SetFocus;
    end;
  end;
  
  procedure TForm1.edDoExit(Sender: TObject);
  begin
  if StrToFloat(edDo.Text)&lt;=StrToFloat(edOd.Text) then
    begin
     showmessage('Podaj liczbę większą niż dolna granica całkowania.');
     edDo.SetFocus;
    end;
    end;
  
    function TForm1.CalkaNadmiar (odx,dox:extended; n:integer; f:fx):extended; //trapez z nadmiarem
  var i:integer;  xi,h,Wynik:extended;
  begin
      Wynik:=0;
      h:=(Dox-Odx)/n;
  for i:= 0 to n-1 do
      begin
          Wynik:=f(xi)*h+Wynik;
          xi:=xi+h;
      end;
      Result:=Wynik;
   end;
  
      function TForm1.CalkaNiedomiar (odx,dox:extended; n:integer; f:fx):extended; //trapez z niedomiarem
  var i:integer;  xi,h,Wynik:extended;
  begin
      Wynik:=0;
      h:=(Dox-Odx)/n;
  for i:= 1 to n do
      begin
          Wynik:=f(xi)*h+Wynik;
          xi:=xi+h;
      end;
      Result:=Wynik;
  end;
  
   function TForm1.Calka (odx,dox:extended; n:integer; f:fx):extended;  //trapez
   var i:integer;  xi,h,Wynik:extended;
  begin
      Wynik:=0;
      h:=(Dox-Odx)/n;
  for i:= 1 to n-1 do
      begin
          Wynik:=f(xi)+Wynik;
          xi:=xi+h;
      end;
      Wynik:=(f(odx) + f(dox) + Wynik)*h/2;
      Result:=Wynik;
  end;
  
  
  end.
  </code></pre>