• Tidak ada hasil yang ditemukan

BAB 11 FUNGSI DAN REKURSI ________________________ 74

B. Soal Latihan BAB 11

1. Relasikan fungsi – fungsi berikut : function abs(x:real) real

{mengembalikan harga mutlak x, Contoh : jika x=-10 maka nilai mutlaknya10, jika x=10 maka nilai mutlaknya 10}

function double(x:real) real

{mengembalikan 2 kali nilai x, Contoh : jika x=5 maka nilai double nya adalah10}

function odd(x:integer) boolean

{mengembalikan true jika x bilangan ganjil dan false jika x bukan ganjil}

2. Buatlah fungsi jarak yang menerima masukan dua buah titik P1(x,y)dan P2(x,y) dan menghitung jarak kedua titik tersebut. Gunakan rumus √

3. Buatlah fungsi phytagoras yang menerima tiga buah bilangan bulat a,b, c dan menentukan apakah ketiga bilangan tersebut merupakan phytagoras. Contoh a=3, b= 4, c=5 adalah tripel phytagoras karena

BAB 12

SORTING

Beberapa metode sorting mengurutkan data yang dikenal antara lain adalah:

1. Bubble Sort (sederhana tetapi lambat) 2. Quick Sort (cepat tetapi rumit)

3. Shell Sort (agak cepat dan tidak terlalu rumit) 4. Selection Sort

5. Insert Sort 6. Merge Sort A. Bubble Sort

Algoritma Bubble Sort adalah salah satu algoritma pengurutan yang paling simple, baik dalam hal pengertian maupun penerapannya. Ide dari algoritma ini adalah mengulang proses pembandingan antara tiap-tiap elemen array dan menukarnya apabila urutannya salah.

Pembandingan elemen-elemen ini akan terus diulang hingga tidak perlu dilakukan penukaran lagi. Algoritma ini termasuk dalam golongan algoritma comparison sort, karena menggunakan perbandingan dalam operasi antar elemennya. Berikut ini adalah gambaran dari algoritma bubble sort.

Teknik ini menyusun data yang diinginkan secara berurutan dengan membandingkan elemen data yang ada, misalkan kita akan meyusun data secara (ascending) cacah naik. Maka lagoritma utamanya adalah seperti ini.

for i:=1 to Jumlah_data-1 do for j:=i+1 to Jumlah_data do if Data[i]>Data[j] then

begin t:=Data[i]; Data[i]:=Data[j]; Data[j]:=t;

end;

B. Quick Sort disebelah kiri pivot, dan di kanan untuk yang lebih besar.

Dimungkinkan bagian kiri dan kanan pivot tidak sama besarnya. Untuk itu tiap bagian di bagi menjadi dua lagi dan mempunyai pivot yang baru .

Quick Sort juga disebut juga dengan partition Exchange sort. Disebut Quick Sort, karena terbukti mempunyai „average behaviour‟ yang terbaik di antara metode pengurutan yang ada. Disebut Partition Exchange Sort karena konsepnya membuat partisi-partisi, dan sort dilakukan per partisi.

Teknik mempartisi tabel:

1. pilih x _ {a1, a2, ..., an} sebagai elemen pivot,

2. pindai (scan) tabel dari kiri sampai ditemukan elemen ap _ x

3. pindai tabel dari kanan sampai ditemukan elemen aq ≤ x

4. pertukarkan ap <-> aq

5. ulangi (ii) dari posisi p+1, dan (iii) dari posisi q-1, sampai kedua pemindaian bertemu di tengah

6. tabel.

Dalam algoritma Quick Sort , pemilihan pivot adalah hal yang menentukan apakah algoritma Quick Sort tersebut akan memberikan performa terbaik atau terburuk. Berikut beberapa cara pemilihan pivot :

1. Pivot = elemen pertama, elemen terakhir, atau elemen tengah tabel. Cara ini hanya bagus jika

2. elemen tabel tersusun secara acak, tetapi tidak bagus jika elemen tabel semula sudah terurut. Misalnya,

jika elemen tabel semula menurun, maka semua elemen tabel akan terkumpul di upatabel kana.

3. Pivot dipilih secara acak dari salah satu elemen tabel. Cara ini baik, tetapi mahal, sebab memerlukan biaya (cost) untuk pembangkitan prosedur acak. Lagi pula, ita tidak mengurangi kompleksitas waktu algoritma.

4. Pivot = elemen median tabel. Cara ini paling bagus, karena hasil partisi menghasilkan dua bagian tabel yang berukuran seimbang (masing-masing = n/2 elemen). Cara ini memberkan kompleksitas waktu yang minimum.

Masalahnya, mencari median dari elemen tabel yang belum terurut adalah persoalan tersendiri.

Algoritmanya adalah sebagai berikut : pusat:=A[(awal+akhir) div 2];

kiri:=awal;

kanan:=akhir;

While kiri<=kanan Do Begin

While A[kiri]<pusat Do Inc(kiri);

While A[kanan]>pusat Do Dec(kanan);

If kiri<=kanan Then Begin Ganti(A[kiri],A[kanan]);

Inc(kiri);

Dec(kanan);

Inc(baca); End;

End;

If kanan>awal Then Urut(awal,kanan); If akhir>kiri Then

Urut(kiri,akhir);

C. Shell Sort

Prinsipnya hampir sama dengan Bubble Sort tetapi dioptmisisasi sehingga lebih cepat. Ditemukan oleh Donald Shell. prinsipnya adalah membandingkan data

dengan jarak tertentu dalam array. Algoritma utamanya adalah sebagai berikut :

baca:=0;

For i:= (m Div 2) Downto 1 Do For j:= 1 To m-i Do

If A[j]>A[j+i] Then Begin Ganti(A[j],A[j+i]); Inc(baca);

End;

D. Selection Sort

Algoritma utamanya adalah sebagai berikut : baca:=0;

For i:= 1 To m-1 Do Begin

tempat:=i;

For j:= i+1 To m Do If A[tempat]>A[j] Then tempat:=j;

Ganti(A[i],A[tempat]);

Inc(baca);

End;

E. Insert Sort

Algoritma utamanya adalah sebagai berikut : baca:=0;

For i:= 2 To m Do Begin G:=A[i];

j:=i-1;

A[0]:=G;

While G<A[j] Do Begin A[j+1]:=A[j]; Dec(j); Inc(baca);

End;

A[j+1]:=G; End;

F. Merge Sort

Algoritma utamanya Begin i:=awal; k:=awal;

j:=tengah+1; Repeat

If A[i]<A[j] Then

Begin B[k]:=A[i]; Inc(i);

End Else

Begin B[k]:=A[j]; Inc(j);

End;

Inc(k); Inc(baca);

Until (i>tengah) Or (j>akhir); If i>tengah Then For t:= j To akhir Do

Begin

B[k+t-j]:=A[t]; End

Else End;

For t:= i To tengah Do Begin

B[k+t-i]:=A[t]; End;

Soal Latihan

1. Jelaskan Alur logika (dengan disertai contoh data) metode sorting data di atas?

2. Buatlah program pascal untuk mengurutkan data dengan metode sorting data di atas!

BAB 13

MATRIKS

A. Definisi Matriks

Matrik merupakan sekumpulan informasi yang setiap individu elemenya diacu dengan menggunakan dua buah indeks (baris dan kolom).

Dua buah indeks menunjukkan dimensi matriks Elemen dari Tipe terstruktur seperti larik dapat distrukturkan lagi titik sebuah larik yang setiap elemennya adalah larik lagi disebut matriks dalam kurung matriks matriks sudah dikenal secara luas dalam berbagai bidang ilmu terutama dalam bidang matematika titik matriks identitas adalah contoh matriks yang dikenal secara umum karena diagonalnya bernilai 1 sedangkan elemen lainnya nol.

Sebuah sistem persamaan lanjar yang terdiri dari empat persamaan berikut :

Dapat ditulis dalam bentuk persamaan matriks Ax=b yang dalam hal ini A adalah matriks koefisien dari ruas kiri persamaan, x adalah matriks kolom peubah dan b adalah matrik kolom ruas kanan persamaan :

Masih banyak lagi penggunaan matriks dalam matematika seperti matriks transformasi, matriks permutasi, dan sebagainya. Tetapi matriks tidak hanya dikenal dalam matematik. Matriks juga digunakan luas pada bidang seperti ekonomi, teknik dan lain-lain.

B. Mendeklarasikan Matriks

Sebelum matriks digunakan untuk menyimpan data, terlebih dahulu matriks harus dideklarasikan.

Mendeklarasikan matriks artinya menentukan nama matriks, tipe data dan elemen – elemannya, dan ukurannya. Pendeklarasian matriks di dalam teks algoritma didalam bagian DEKLARASI. Kata kunci yang dipakai untuk matriks tetap array.

Ada beberapa cara mendeklarasikan matriks:

1. Sebagai nama peubah.

Contoh :

DEKLARASI

M: array[1..5,1..4] of integer 2. Sebagai tipe bentukan

Contoh :

DEKLARASI

Type Mat: array[1..5,1..4] of integer

3. Mendefeniksikan ukuran maksimum matriks sebagai sebuah konstanta

Contoh :

DEKLARASI

constNbarisMaks=20{jumlah baris maksimum}

constNkolomMaks=20{jumlah kolom maksimum}

M: array[1..NbarisMaks,1..NkolomMaks] of integer

Contoh Algoritma Matriks

Procedure BacaMatriks1(var M: MatriksInt;Nbar,Nkol :integer):

(mengisi elemen matriks M[1..NbarisMaks,1..NkolomMaks]

dari papan ketik) Var

i: integer: {indeks baris}

j: integer: {indeks kolom}

begin

for i := 1 to Nbar do begin

write („Ketikkan elemen M[„,i,‟,j,‟,]:‟):

readln (M[i,j]);

end;

end;

end;

{seluruh elemen matriks M sudah berisi nilai yang dibaca dari papan ketik}

Contoh pemanggilan prosedur diatas : Writln(„Memasukkan data ukuran matriks:‟);

Write(„Berapa jumlah baris(1-20)?‟);readln(p);

Write(„Berapa jumlah kolom(1-20)?‟);readln(q);

BacaMatriks (M,p,q);

C. Mencetak Matriks PSEUDO-CODE

Procedure CetakMatriks(input M: MatriksInt, inputNbar,Nkol: integer)

{Mencetak elemen –elemen matriks M[1..Nbar,1..Nkol] ke layar}

DEKLARASI

i:integer{indeks baris}

j:integer{indeks kolom}

ALGORITMA:

for i 1 toNbar do for j 1 toNkol do

write{M[i,j]}

end for end for

{seluruh elemen matriks M tercetak di layar.}

Procedure TulisMatriks(input M: MatriksInt, inputNbar,Nkol: integer) :

{Mencetak elemen matriks M[1..Nbar,1..Nkol] ke layar}

var

i:integer{indeks baris}

j:integer{indeks kolom}

begin

for i := 1 toNbar do begin

for j := 1 toNkol do begin

write{M[i,j],‟ „};

end;

writein: ( pindahkan kursor ke awal baris berikutnya )

end;

end;

{seluruh elemen matriks tertulis di layar.}

D. Menjumlahkan Dua Buah Matriks PSEUDO-CODE

Procedure JumlahDuaMatriks(input A,B: MatriksInt, inputNbar,

Nkol: integer, output C:MatriksInt)

{Menjumlahkan matriks A dan B, yaitu A+B=C}

Procedure TulisMatriks(input M: MatriksInt, inputNbar,Nkol: integer) :

{Mencetak elemen matriks M[1..Nbar,1..Nkol] ke layar}

var

i:integer{indeks baris}

j:integer{indeks kolom}

begin

for i := 1 toNbar do begin

for j := 1 toNkol do begin

C[i,j] :=A[i , j ] + B[i , j ] ; end;

end;

end;

{matriks C berisi hasil penjumlahan A dan B}

E. Latihan BAB 13

1. Rancanglah algoritma untuk mencetak elemen diagonal dari matriks.

2. Rancanglah algoritma transpose matriks, mengubah baris I menjadi elemen kolom

BAB 14

CONTOH SOAL DAN PENYELESAIAN

Soal

Misalkan sebuah string s telah berisi rangkaian karakter. Tulislah prosedur dalam bahasa Pascal dan bahasa C/C++ untuk membalikkan susunan karakter di dalam s. Misalnya jika s berisi string „sate‟, maka hasil pembalikan s adalah string „etas‟

Penyelesaian

String adalah sebuah larik karakter . Prinsip algoritma untuk masalah ini adalah mempertukarkan elemen

“depan” dengan elemen “ belakang”. Jadi kita mulai memindai dari depan (i) dan dari belakang (j) , setiap kali pemindaian kita pertukarkan elemennya. Pada mulanya i=1 dan j=lenghts(s). Setiap kali memindai larik , i dinaikkan satu dan j dikurangi 1.

PASCAL :

Procedure Balikkan(var s : string) ;

{Membalikkan susunan karakter di dalam string s}

{* DEKLARASI*}

i :=1+1 ;

/ * Membalikkan susunan karakter di dalam string s */

{

/* DEKLARASI */

Persoalan Membaca Data Dari Arsip

Misalkan N buah titik – titik (x,y) di simpan didalam sebuah arsip teks. Susunan data di dalam arsip tersebut adalah sebagai berikut : baris pertama berisi nilai N, sedangkan baris – baris berikutnya berisi setiap titik, setiap baris terdiri dari nilai x dan nilai y, masing – masing nilai dipisahkan oleh spasi.Sebagai contoh, misalkan arsip titik.txt sudah berisi datayang telah disusun sesuai dengan format yang dispesifikasikan di atas:

misalnya baris pertama adalah titik (6,5), baris kedua titik (7,2), dan seterusnya

Tulislah dua buah prosedur, masing – masing dalam

bahasa Pascal dan bahasa C, prosedur pertama membaca data dari arsip danmenyimpan titik – titik kedalam larik P, sedangkan prosedur kedua mencerminkan setiap titik didalam larik terhadap sumbu y ( dengan pencerminan ini maka titik (a,b) menjadi (-a,b), Titik –titik hasil pencerminan disimpan didalam larik Q.

PENYELESAIAN

type LarikTitik = array [1..Nmaks] of Titik;

Prosedur membaca data dari arsip :

Procedure BacaTitikDariArsip (NamaArsip : string[12];

Var P: LarikTitik;var N : integer)

{ Membaca data titik – titik dari arsip NamaArsip, dan menyimpannya ke dalam larik P yang bertipe LarikTitik. N akan berisi banyaknya titik}

{ * DEKLARASI *}

for i := 1 to N do begin

read ( Fin, P[ i ] . x, P[ i ] . y );

end;

end;

Prosedure pencerminan titik terhadap sumbu – y:

procedure PencerminanSumbu_Y( P : LarikTitik; N ; integer ; var Q : LarikTitik)

{Mencerminkan titik- titik di dalam larik P[ 1.. N] terhadap sumbu –y, Hasil pencerminan disimpan didalam larik Q. } { * DEKLARASI *}

Var i: integer ;

{ * ALGORITMA: *}

begin

for i:=1 to N do begin

Q[ i] . x := - P[ i ] . x;

Q[ i] . y := - P[ i ] . y;

end;

end;

DAFTAR PUSTAKA

, Bahasa Pemrograman Pascal, Universitas

Sebelas Maret, Surakartka,

http://miwan.ueuo.com/materi/Pascal.pdf, Diakses 15 September 2010

Fachrie Lantera, Kompleksitas Algoritma Quick Sort, http://www.informatika.org/~rinaldi/Matdis/2008 -2009/Makalah2008/Makalah0809-019.pdf, Diakses 25 September 2010

Hendarsyah Decky, Kumpulan Program Pascal, http://ilmukomputer.com, Diakses tanggal 20 September 2010

Kadir A, 2002, Pemrograman Pascal Buku 1, Penerbit Andi, Yogyakarta. Kadir A, 2002, Pemrograman Pascal Buku 2, Penerbit Andi, Yogyakarta. Jogiyanto HM, 2002, Turbo Pascal Versi 5.0, Penerbit Andi, Yogyakarta.

Ryan Rheinadi , Analisis Algoritma Bubble Sort, http://webmail.informatika.org/~rinaldi/Matdis/2 009-2010/Makalah0910/MakalahStrukdis0910-032.pdf, Diakses 25 September 2010

Sahid, 2004, Pemrograman Komputer dengan Turbo Pascal versi Windows 1.5 (Edisi Revisi), Lab.

Komputer Jurdik Matematika FMIPA UNY

TENTANG PENULIS

Debora Exaudi Sirait,S.Si.,M.Si lahir pada tanggal 01 Agustus 1993, anak ke-4 dari ke-4 bersaudara. Lulusan S1 program studi Matematika Universitas Sumatera Utara dengan masa studi 3.5 tahun. Lulusan S2 program studi Matematika Universitas Sumatera Utara tahun 2017. Mendapatkan Beasiswa PPA dan BCA selama program sarjana.

Piagam Penghargaan dari LPPM Universitas HKBP Nommensen Pematangsiantar sebagai pemenang Penelitian Kompetitif Nasional (Penelitian Dosen Pemula) tahun 2020. Pengalaman kerja sebagai Kepala Sekolah SD Swasta Kartini Handayani Kota Pematangsiantar dan Dosen Tetap Prodi Matematika FMIPA Universitas HKBP Nommensen Pematangsiantar sampai sekarang.