Arsip: function atau procedure dgn jumlah parameter fleksibel

 
user image
more 13 years ago

mas_kofa

sebelumnya......... saya mengucapkan selamat berpuasa bagi yang berpuasa kepada semua admin, momod,member , dan pengunjung forum.... sesudahnya..........ada yang ingin saya tanyakn... gimana ya caranya membuat suatu procedure atau function yang mempunyai jumlah parameter dinamis (sembarang)....... contoh kasus

function tambah(a,b:integer):integer;
begin
   result := a + b;
end;
dari function di atas kita hanya bisa memasukan dua parameeter (tdk bisa kurang / lebih).... pertanyaannya gmn.......caranya mendeklarasikan.. suatu procedure atau function dengan jumlah parameter fleksibel.....spt ini

    x := tambah(12,23);
   y := tambah(23,34,56,67,89);
   z := tambah(23);
untuk mengakali hal di atas sementara saya memakai satu parameter ber-type string;

    x := tambah('12,23');
   y := tambah('23,34,56,67,89');
   z := tambah('23');
atas pencerahannya . ....hatur nuhun pisan.........(dibaca : matur nuwun sanget, dalam hati : terimaksih banyak)
user image
more 13 years ago

coblongpamor

Bagaimana kalo pake array dinamis...? function Tambah(vBil:array of Integer):Integer; var i:integer; begin Result:=0; for i:=Low(vBil) to High(vBil) do Result:=Result+vBil[i]; end; x:=Tambah([10,12,15]); Semoga membantu..
user image
more 13 years ago

mas_kofa

x:=Tambah([10,12,15]);
mending pake string mas...... x := tambah('10,12,15');
user image
more 13 years ago

coblongpamor

Klo pake string, kita harus memilah-milah lagi angka -angka dalam setring yg dipisahkan oleh koma(apa gak ribet..?). tapi gak masalah sih..., toh hasilnya sesuai dengan yg diharapkan..
user image
more 13 years ago

_lmz

@mas_kofa:
x:=Tambah([10,12,15]);
mending pake string mas...... x := tambah('10,12,15');
Kalau sudah memenuhi kebutuhan anda sih tidak apa-apa. Tapi menurut saya lebih baik pakai array of... karena lebih fleksibel dan lebih banyak pengecekan yang dilakukan saat kompilasi. Contoh: x := tambah('10,abcd,15'); // ==> Exception x := tambah([10,abcd,15]); // ==> Error saat kompilasi (kecuali abcd nama variabel integer) x := tambah('10,1+23,15'); // ==> Susah u/ dibuat x := tambah([10,1+2 3,15]); // ==> Mungkin sekali jalan
user image
more 13 years ago

bagussb

wah.. menarik juga nih... :mrgreen: untuk yang menggunakan array saya setuju banget, ketimbang menggunakan tipe data string yang harus kita parsing dulu... tentunya prosesnya jadi aga lama.. tapi temen2 semua pernah merhatiin procedure WriteLn bawaannya delphi ngga ? itu kan variabel yang dia terima bisa banyak banget plus variatif : contohnya
var
  s: TextFile;
begin
  AssignFile(s,'c:\test.txt');
  Rewrite(s);
  Writeln(s,'test');
  Writeln(s,'test1','test2');
  Writeln(s,'test1','test2','test3');
  CloseFile(s);
end;
procedure ini bisa terima variable 2, 3, 4 atopun 10... mmmm.. gimana yah caranya...
user image
more 13 years ago

_lmz

@bagussb: tapi temen2 semua pernah merhatiin procedure WriteLn bawaannya delphi ngga ? itu kan variabel yang dia terima bisa banyak banget plus variatif :
Writeln adalah "unik" karena merupakan bawaan dari Pascal dan bersifat built-in (termasuk dalam definisi bahasa). Setahu saya tidak ada cara untuk membuat sesuatu yang menerima parameter seperti writeln dalam Pascal/Delphi. Sama seperti anda tidak dapat melakukan passing variabel bertipe file secara pass-by-value, dsb. Ada tembok antara apa yang disediakan oleh bahasa dan apa yang dapat dilakukan oleh programmer. Hal ini tidak seperti C di mana fungsionalitas seperti I/O dasar pun disediakan oleh library.
user image
more 13 years ago

reev

cara ini boleh juga kayaknya. Cuma terbatas di jumlah maksimal parameter. Asumsikan saja jumlah paremeter maks. 10, jadi

function tambah(const nilai1, nilai2, ...... nilai10: integer = 0):Integer;
begin
   Result:=0;
   If nilai1<>0 then inc(result, nilai1);
   //...............................................
   If nilai10<>0 then inc(result, nilai10);
end;
Jadi kalau ada parameter
user image
more 13 years ago

reev

Kalau ada parameter yang ga disebut, nilainya dianggap 0
user image
more 13 years ago

reminder2k1

Ge coba jawab ya??? Gw dah coba dan ternyata bisa & memuaskan. Jadi intinya harus deklarasikan sebanyak mungkin procedure yang sama tapi dengan variabel yang berbeda, memang bakal banyak kerjaan sih, tapi emg harus spt itu kok... Dan jangan lupa di belakang setiap procedure harus di tambahkan keyword OVERLOAD, gw juga ga tau apa artinya keyword ini, tapi itu harus di tulis (mgkn ada yg bisa membantu fungsi dari keyword tsb :mrgreen: ) Contoh simplenya:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button2: TButton;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    b1,b2,b3,b4,b5,b6,hasil: extended;
  public
    { Public declarations }
  end;
function Tambah(Value1,Value2: Extended): Extended; overload;
function Tambah(Value1,Value2,Value3: Extended): Extended; overload;
function Tambah(Value1,Value2,Value3,Value4: Extended): Extended; overload;
function Tambah(Value1,Value2,Value3,Value4,Value5: Extended): Extended; overload;
function Tambah(Value1,Value2,Value3,Value4,Value5,Value6: Extended): Extended; overload;
var
  Form1: TForm1;
implementation
{$R *.dfm}
function Tambah(Value1,Value2: Extended): Extended; overload;
begin
     Result:=Value1+Value2;
end;
function Tambah(Value1,Value2,Value3: Extended): Extended; overload;
begin
     Result:=Value1+Value2+Value3;
end;
function Tambah(Value1,Value2,Value3,Value4: Extended): Extended; overload;
begin
     Result:=Value1+Value2+Value3+Value4;
end;
function Tambah(Value1,Value2,Value3,Value4,Value5: Extended): Extended; overload;
begin
     Result:=Value1+Value2+Value3+Value4+Value5;
end;
function Tambah(Value1,Value2,Value3,Value4,Value5,Value6: Extended): Extended; overload;
begin
     Result:=Value1+Value2+Value3+Value4+Value6;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
     b1:=StrToFloat(Edit1.Text);
     b2:=StrToFloat(Edit2.Text);
     hasil:=Tambah(b1,b2);
     Edit3.Text:=FloatToStr(Hasil);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
     b1:=StrToFloat(Edit4.Text);
     b2:=StrToFloat(Edit5.Text);
     b3:=StrToFloat(Edit6.Text);
     b4:=StrToFloat(Edit7.Text);
     b5:=StrToFloat(Edit8.Text);
     hasil:=Tambah(b1,b2,b3,b4,b5);
     Edit9.Text:=FloatToStr(Hasil);
end;
end.
Moga bisa bantu ya??? :)
more ...
  • Pages:
  • 1
  • 2
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com