Senin, 22 Juni 2015

Rekursif

Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnya terkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi. Rekursif merupakan teknik pemrograman yang penting, dan beberapa bahasa pemrograman modern mendukung keberadaan proses rekursif ini.

Pemanggilan prosedur atau fungsi ke dirinya sendiri bisa berarti proses yang berulang yang tidak bisa diketahui kapan akan berakhir. Dalam pemakaian sehari-hari, rekursi merupakan teknik pemrograman yang berdaya guna untuk digunakan pada pekerjaan pemrograman dengan mengeksperisikannya ke dalam suku-suku dari program lain dengan menambahkan langkahlangkah sejenis. Contoh paling sederhana dari proses rekursi adalah menghitung nilai faktorial dari bilangan bulat.

Prinsif dan proses rekursi:
  1. Memiliki kasus non rekursi(sederhana)
  2. Kasus awal diarahkan menuju kasus sederhana
  3. Mendefinisikan proses rekursi
Bentuk rekursif :
a. suatu subrutin/fungsi/ prosedur yang memanggil dirinya sendiri.
b. Bentuk dimana pemanggilan subrutin terdapat dalam body subrutin
c. Dengan rekursi, program akan lebih mudah dilihat
Bentuk rekursi bertujuan untuk : b.menyederhanakan penulisan program c.menggantikan bentuk iterasi Syarat bentuk rekursif:  ada kondisi terminal (basis)  ada subroutine call yang melibatkan parameter yang nilainya menuju kondisi terminal (recurrence)

Kelebihan perulangan rekursif
Sangat mudah untuk melakukan perulangan dengan batasan yang luas dalam artian melakukan perulangan dalam skala yang besar
Dapat melakukan perulangan dengan batasan fungsi

Kekurangan perulangan rekursif
Tidak bisa melakukan nested loop atau looping bersarang.
Biasanya membuat fungsi sulit untuk dipahami, hanya cocok untuk persoalan tertentu saja.
Memerlukan stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack dan ada kalaya akan menyebabkan stack tak cukup lagi (Stack Overum).
Proses agak berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk.

sumber : https://zaharaahyesa.wordpress.com/2014/04/10/algoritma-rekursif/
Pengoperasian deret dan faktorial

List Program
unit deret;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function deret(x:integer):integer;
  end;

var
  Form1: TForm1;
  hasil:integer;
  D:real;

implementation

{$R *.dfm}

function TForm1.deret(x:integer):integer;
var
  i:integer;
begin
  i:=1;
  hasil:=0;
  while i<=x do
  begin
    hasil:=hasil+i;
    i:=i+1;
  end;
  deret:=hasil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  DA,DB,DC,A,B,C:integer;
begin
  A:=strtoint(Edit1.Text);
  B:=strtoint(Edit2.Text);
  C:=strtoint(Edit3.Text);
  DA:=deret(A);
  DB:=deret(B);
  DC:=deret(C);

  D:=(DA+DB)/DC;
  Edit4.Text:=floattostr(D);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text:='';
  Edit2.Text:='';
  Edit3.Text:='';
  Edit4.Text:='';
end;

end.

List Program 1

List Program 2

Hasil Running
Hasil dari deret A dijumlahkan dengan hasil dari deret B, kemudian dibagi dengan hasil dari deret C, dan hasilnya terdapat pada bilangan D





Contong pengoperasian menggunakan bilangan berpangkat













List Program
unit tugas4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    txtA: TEdit;
    txtB: TEdit;
    txtC: TEdit;
    txtD: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function pangkat(x,y:integer):integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.pangkat(x,y:integer):integer;
var
  i,c:integer;
begin
  i:=1;
  c:=1;
  while i<=y do
  begin
    c:=c*x;
    i:=i+1;
  end;
  pangkat:=c;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  A2,B3,C3,A,B,C:integer;
  D:real;
begin
  A:=strtoint(txtA.Text);
  B:=strtoint(txtB.Text);
  C:=strtoint(txtC.Text);

  A2:=pangkat(A,2);
  B3:=pangkat(B,3);
  C3:=pangkat(C,3);

  D:=(A2+B3)/C3;
  txtD.Text:=floattostr(D);
end;

end.

Listing Program 1
Listing Program 2

Hasil Running
Bilangan A adalah berpangkat 2
Bilangan B adalah berpangkat 3
Bilangan C adalah berpangkat 3
Bilangan D adalah hasil pengoperasian

Tugas penggunaan Deret







List Program
unit deretpola;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  x,y,z,i:integer;
begin
  x:=strtoint(Edit1.Text);
  Memo1.Clear;
  i:=-1;
  z:=-2;
  while i<=x do
  begin
    y:=i;
    Memo1.Lines.Add(inttostr(y));
    i:=(y+z)*-1;
    z:=z*-1;
  end;
end;

end.
List Program
Hasil Running


Minggu, 21 Juni 2015

Pengurutan data menggunakan Quick Sort



List Program 1
List program 2


List Program
unit quicksorta;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFQuickSort = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    Data:array of integer;
  public
    { Public declarations }
  end;

var
  FQuickSort: TFQuickSort;

implementation

{$R *.dfm}

procedure QuickSort(var A:array of integer;iLo,iHi:integer);
var
  Lo,Hi,Pivot,T:integer;
begin
  Lo:=iLo;
  Hi:=iHi;
  Pivot:=A[(Lo+Hi) div 2];
  repeat
    while A[Lo]<Pivot do Inc(Lo);
    while A[Hi]>Pivot do Dec(Hi);
    if Lo<=Hi then
    begin
      T:=A[Lo];
      A[Lo]:=A[Hi];
      A[Hi]:=T;
      Inc(Lo);
      Dec(Hi);
    end;
  until Lo>Hi;
  if Hi>iLo then QuickSort(A,iLo,Hi);
  if Lo<iHi then QuickSort(A,Lo,iHi);
end;

procedure TFQuickSort.Button1Click(Sender: TObject);
var
  nilai:integer;
begin
  //menambahkan nilai ke listbox
  if TryStrToInt(Edit1.Text,Nilai) then
  ListBox1.Items.Add(IntToStr(nilai));
  //membersihkan komponen inputan nilai
  Edit1.Clear;
  //focus kursor ke inputan nilai
  Edit1.SetFocus;
end;

procedure TFQuickSort.Button2Click(Sender: TObject);
var
  indek:Word;
begin
  //menentukan panjang array
  SetLength(Data,ListBox1.Items.Count);

  //pemasukan nilai ke array
  for indek:=0 to ListBox1.Items.Count-1 do
  Data[indek]:=StrToInt(ListBox1.Items[indek]);
  //proses pengurutan/sorting
  QuickSort(data,Low(Data),High(Data));
  //kosongkan hasil
  ListBox2.Items.Clear;
  //memasukkan nilai hasil
  for indek:=0 to ListBox1.Items.Count-1 do
  ListBox2.Items.Add(IntToStr(data[indek]));
end;

procedure TFQuickSort.Button3Click(Sender: TObject);
begin
  close;
end;

end.

Hasil Running













Categories

Total Tayang

Jam

Kalender Islam

Diberdayakan oleh Blogger.

Popular Posts

Pengikut