Array searching sorting_pert_11,12,13,14,15

132
Array yaitu yang berbaris-baris atau berderet-deret. Dalam pemrograman : deretan data yang mempunyai jenis atau tipe data yang sama. Nama Array mewakili deret data dia miliki. Contoh: A:array[1..5] of integer NamaMhs:array[1..12] of string NilaiUjian:array[0..74] of real A , NamaMhs, NilaiUjian adalah nama array Array (Larik)

Transcript of Array searching sorting_pert_11,12,13,14,15

Page 1: Array searching sorting_pert_11,12,13,14,15

Array yaitu yang berbaris-baris atau berderet-deret.

Dalam pemrograman : deretan data yang mempunyai jenis atau tipe data yang sama.

Nama Array mewakili deret data dia miliki.◦ Contoh: A:array[1..5] of integer NamaMhs:array[1..12] of string NilaiUjian:array[0..74] of real

A , NamaMhs, NilaiUjian adalah nama array

Array (Larik)

Page 2: Array searching sorting_pert_11,12,13,14,15

Adalah sebuah peubah (variabel) yang mempunyai struktur data yang dapat menyimpan lebih dari satu nilai yang sejenis (tipe data yang sama), setiap elemen diacu melalui indeksnya.

Elemen array tersusun di memori secara berurutan (sekuensial), oleh sebab itu indeks array(larik) haruslah tipe data yang menyatakan keterurutan, misalnya integer atau karakter.

Definisi Array

Page 3: Array searching sorting_pert_11,12,13,14,15

Elemen ArrayI n d e k s

A

I n d e k s

A1 1 1582 2 1573 3 1624 4 1705 5 163Elemen Array kosong Elemen Array yg sudah disi nilai

A[1], A[2], A[3], A[4], A[5]

Page 4: Array searching sorting_pert_11,12,13,14,15

Variabel array vs variabel biasaVariabel array Variabel biasa

Dapat menyimpan lebih dari satu nilai yg sejenis

Contoh:Deklarasi:A:array[1..5] of integer

Hanya dapat menyimpan satu nilai walaupun sejenis

Contoh :Deklarasi:A1 : integerA2 : integerA3 : integerA4 : integerA5 : integer

Page 5: Array searching sorting_pert_11,12,13,14,15

Sesuatu yang akan digunakan/dipakai dalam suatu program terlebih harus dideklarasikan

Array (Larik) adalah struktur(susunan) data yg statis, artinya elemen larik harus sudah diketahui sebelum program dieksekusi. Jumlah elemen larik tidak dapat diubah (ditambah/dikurangi) selama pelaksanaan program (program running).

Mendeklarasikan larik di dalam bagian deklarasi berarti :◦ mendefinisikan banyaknya elemen larik (memesan

tempat di memori)◦ mendefinisikan tipe elemen larik (menetapkan tipe nilai

yg dapat disimpan oleh larik (array).--> tipe data dapat berupa : tipe dasar/sederhana (integer, real, char, string, Boolean), tipe bentukan (tipe terstruktur :record)

Deklarasi Array

Page 6: Array searching sorting_pert_11,12,13,14,15

Array dari tipe data dasar :DEKLARASI :

A : array[1.50] of integer NamaMhs : array[1..10] of string NilaiUjian : array[1..75} of real

Sebagai tipe bentukan :membuat/medefinisikan tipe dasar dengan nama sebuah

tipe baru DEKLARASI : Type LarikInt : array[1..100] of integer { nama tipe baru} A:LarikInt {A adalah sebuah variable (peubah) array dg 100

elemen dan bertipe integer}

Deklarasi Array -next

Page 7: Array searching sorting_pert_11,12,13,14,15

Sebagai sebuah konstanta :Mendefinisikan ukuran array (larik) sebagai sebuah konstantaDEKLARASI:

Const max= 10N: array[1..max] of realI: integer

ALGORITMA :For i:=1 to max doread(n[i])Endfor

Deklarasi Array -next

Page 8: Array searching sorting_pert_11,12,13,14,15

Sebagai tipe bentukan terstruktur (RECORD) :◦ Tipe yang berbentuk rekaman (record), rekaman disusun oleh

satu atau lebih field. Setiap field menyimpan data dari tipe dasar tertentu.

DEKLARASI :Const NMaks = 100Type Mahasiswa : record< NIM : integer NAMA : String

IPK : real >Type tabmhs : array[1..maks] of mahasiswaMhs : TabMhs Penulisan elemen mhs :Mhs[2] {elemen kedua dari array mhs}Mhs[2].NIM {mengacu field NIM dari elemen kedua dari array Mhs}Mhs[2].IPK {mengacu field IPK dari elemen kedua dari array Mhs} Pengsian Nilai per field :Mhs[i].NIM 102131002Mhs{i].NAMA ‘BUDI UTOMO’Mhs[i].IPK 3.6

Menampilkan hasil per field :Output([Mhs[i].NIM, Mhs[i].NAMA, Mhs[i].IPK)

Deklarasi Array -next

Page 9: Array searching sorting_pert_11,12,13,14,15

Elemen Array diacu melalui indeksnya, Nilai Indeks harus terdefinisi.◦ A[4] mengacu elemen ke 4 dari larik A◦ NamaMhs[2] mengacu elemen ke 2 dari larik namaMhs◦ A[i] mencau elemen ke-I dari larik A, asalkan nilai I

sudah terdefinisi. Memanipulasi elemen array (larik) :

◦ A[4] 10◦ NamaMhs[i] ‘Achmad’

◦ Read(A[i]) If A[i] < 10 then A[i] A[i] + 10 Else .……

Acuan Elemen Array(Larik)

Page 10: Array searching sorting_pert_11,12,13,14,15

Elemen array diproses secara beruntun melalu indeks yang terurut mulai dari elemen pertama sampai elemen terakhir.

Skema umum pemrosesan array:PROGRAM ProsesArray

DEKLARASI:Const max= 10Type LarikInt : array[1..max] of integer

A : LarikIntI: integer {indeks Array}

ALGORITMA :For i:=1 to max do pemrosesan terhadap A[i])Endfor

Pemrosesan pengisian nilai, pembacaan, penulisan, komputasi, dan manipilasi lainnya.

Pemrosesan Array (Larik)

Page 11: Array searching sorting_pert_11,12,13,14,15

Secara Lansung :◦ Contoh

A[i] 10 Inisialisasi :

For I 1 to n do A[i] IEndfor

Dengan pembacaan (dari keyboard) :◦ Contoh :

For I 1 to n do read(A[i])Endfor

Pengisian Elemen Array (Larik) :

Page 12: Array searching sorting_pert_11,12,13,14,15

Jumlah elemen larik sudah ditentukan (statis), tapi belum tentu semua digunakan/dipakai

Jumlah elemen yang dipakai itulah yang disebut dengan ukuran/jumlah efektif array.

Ukuran efektif dapat dicatat di dalam peubah (variabel) tertentu, misalnya n.

Ukuran efektif Array (Larik)

Page 13: Array searching sorting_pert_11,12,13,14,15

1. Jika Jumlah elemen efektif ditentukan di awal

2. Jika Jumkah elemen efektif diketahui di akhir pembacaan

3. Jika Jumlah elemen efektif baru diketahui di akhir pembacaan (variasi dari versi 2)

tiga cara untuk menentukan jumlah elemen efektif dari array(Larik) :

Page 14: Array searching sorting_pert_11,12,13,14,15

Procedure BacaLarik(Output A : LarikInt, input n : integer)

{Mengisi elemen-elemen larik A[1..n] dengan pembacaan}

{K. Awal : n adalah jumlah elemen efektif larik, nilainya terdefinisi}

{ K. Akhir : setelah pembacaan, seluruh elemen larik A berisi nilai-nilai yang dibaca dari piranti masukan (keyboard)}

DEKLARASI i : integer {pencatat indeks larik }

ALGORITMA for i 1 to n do read(A[i]) endfor

Jumlah elemen efektif ditentukan di awal

Page 15: Array searching sorting_pert_11,12,13,14,15

Setiap kali selesai pembacaan satu buah elemen, akan dilakukan konfirmasi apakah masih ada lagi elemen larik yang akan dimasukkan, seperti statement di bawah ini :

Write(‘Lagi? (y/t)’)JIka jawabnya ‘y’ maka pembacaan dilanjutkan, jika ‘t’ maka proses pembacaan dihentikan. Jumlah elemen yang dibaca di catat di dalam suatu variabel (peubah)

Procedure BacaLarik2(Output A: Larikint, Output n: integer){K. Awal : sembarang}{K. Akhir : sebanyak n buah elemen larik A berisi nilai-nilai

yang dibaca; n berisi jumlah elemen larik yang diisi}DEKLARASI

Jawab : charALGORITMA

N 0Repeat n n + 1

Read(A[n])Write(‘Lagi? (y/t)’)Read(jawab)

Until jawab = ‘t’

Jumlah elemen efektif diketahui di akhir pembacaan

Page 16: Array searching sorting_pert_11,12,13,14,15

Proses pembacaan dianggap selesai jika nilai yang dibaca adalah suatu tanda, misalnya 9999.

Procedure BacaLarik3(output A, LArikint, output n : integr){mengisi elemen-elemen larik A[1..n] dg cara pembacaan. Akhir pembacaan ditandai

jika nilai yang dibaca adalah 9999}{K.Awal : sembarang }K. Akhit : sebanyak n buah elemen larik A berisi nilai-nilai yang dibaca; n berisi jumlah

larik yang diisi.}

DEKLARASIx : integer {menyimpan sementara nilai yang di baca}

ALGORITMA n 0 read(x) while x 9999 do

n n +1 A[n] x read(x) endwhile {x = 9999}

Jumlah elemen efektif baru diketahui di akhir pembacaan (variasi dari versi 2)

Page 17: Array searching sorting_pert_11,12,13,14,15

Data yang sudah disimpan di dalam Larik, selanjutnya data tersebut dapat dimanipulasi

Procedure hitungRataRata(input A:Larikint, input n:integer)

DEKLARASII : integerJumlah : real

ALGORITMAI 1 {dimulai dari elemen pertama}Jumlah 0 {jumlah total nilai mula mula} For i 1 to n do jumlah jumlah + A[i]EndforU jumlah/n

Menghitung Nilai Rata-rata

Page 18: Array searching sorting_pert_11,12,13,14,15

PROGRAM Rerata

DEKLARASIconst

NMaks = 100type

LarikInt : array[1..NMaks] of integerA : LArikIntn : integeru : integer { nilai rata-rata }

procedure BacaLarik1(output A : Larikint, input n :integer) { mengisi elemen larik A[1..n] dengan pembacaan }

procedure HitungRataRata(input A : LArikint, input n : integer. Output u : real)

{menghitung nilai rata-rata larik A}

ALGORITMAread(n) {tentukan jumlah elemen larik yang akan digunakan }BacaLarik1(A, n)HitungRataRata(A, n, u)write(u)

Notasi Algoritma – hitung rata rata

Page 19: Array searching sorting_pert_11,12,13,14,15

Untuk menyimpan sejumlah data yang bertipe sama.

Untuk menghindari penggunaan nama-nama peubah(variabel) yang banyak.

Agar penulisan program lebih efisien dalam penulisan kode programnya.

Kapan menggunakan Larik (array):

Page 20: Array searching sorting_pert_11,12,13,14,15

Buatlah algoritma tanpa menggunakan prosedur (sub program) untuk menghitung nilai-nilai rata-rata dari data yang tersimpan pada elemen array(larik) yang bertipe integer.

Konversikan algoritma tersebut ke dalam bahasa pascal.

latihan

Page 21: Array searching sorting_pert_11,12,13,14,15

Nilai yang terkandung di dalam sebuah array dapat bernilai konstan,

artinya nilai-nilai tersebut tidak dapat diubah.

mendeklarasikan array bersangkutan dengan kata kunci CONST.

Bentuk umumnya adalah sbb: Const NamaArray : array[IndekAwal..IndekAkhir]

of tipe_data = (nilai1, nilai2, ...);

ARRAY KONSTAN :

Page 22: Array searching sorting_pert_11,12,13,14,15

Const NamaArray : array[IndekAwal..IndekAkhir]

of tipe_data = (nilai1, nilai2, ...)

Contoh :

Const A: array[1..5] of char = (‘A’, ‘B’, ‘C’, ‘D’, ‘E’)’ Array A di atas bersifat konstan, maka nilai yang ada tidak

digantikan dengan nilai lainnya.Contoh :A[1] ‘V’ { SALAH, Karena elemen A[1] selalu bernilai ‘A’}A[2] ‘W’ {SALAH, Karena elemen A[2] selalu bernilai ‘B’}A[3] ‘X’ { SALAH, Karena elemen A[3] selalu bernilai ‘C’}A[4] ‘Y’ {SALAH, Karena elemen A[4] selalu bernilai ‘D’}A[5] ‘Z’ { SALAH, Karena elemen A[5] selalu bernilai ‘E’}

Bentuk umum array konstan

Page 23: Array searching sorting_pert_11,12,13,14,15

Program ArrayKonstan DEKLARASI :Const BULAN : array[1..12] of string = (‘Januari’,

‘Februari’, ‘Maret’, ‘April’, ‘Mei’, ‘Juni’, ‘Juli’, ‘Agustus’, ‘September’, ‘Oktober’, ‘Nopember’, ‘Desember’)

noBulan : integer;

ALGORITMA : read(noBulan) write(BULAN[noBulan]);

Algoritma penggunaan Array konstan

Page 24: Array searching sorting_pert_11,12,13,14,15

MENCARI NILAI MAKSIMUM ARRAY :

A 158 157 162 169 172 155 170 163

Nilai maksimum pada sebuah variabel Array adalah elemen array yang mempunyai nilai terbesar diantara elemen array lainnya.

1 2 3 4 5 6

7 8

Nilai maksimum adalah : 172 ada pada elemen A[5]

Kalau elemen larik sudah terurut baik secara ascending maupun descending, maka nilai maksimum langsung bisa diperoleh : Ascending pada elemen terakhir,

Descending pada elemen pertama

Permasalahan muncul bila nilai elemen array tesusun secara acak, maka untuk mencari nilai maksimumnya harus mengunjungi seluruh elemen array.

Page 25: Array searching sorting_pert_11,12,13,14,15

Cara 1 :1. Mengasumsikan nilai maksimum sementara

(maks) adalah yang sangat kecil (misal: -9999).2. Selanjutnya array dikunjungi mulai dari elemen

pertama, 3. setiap kali mengunjungi elemen array,

bandingkan elemen tersebut dengan nilai maksimum sementara.

4. Jika elemen array yang sedang dintinjau lebih besar dari nilai maksimum sementara, maka (maks) diganti dengan elemen tersebut.

5. pada akhir kunjungan (setelah seluruh elemen array dikunjungi), nilai maksimum semntara menjadi nilai maksimum sebenarnya.

Tiga versi algoritmauntuk mencari nilai maksimum

Page 26: Array searching sorting_pert_11,12,13,14,15

Ilustrasi untuk maks : -999

A`

158 157 162 169 172 155 170 163

1 2 3 4 5 6 7 8

Asumsi : maks = -9999 (nilai maksimum sementara)

A[1] > maks? Ya maks A[1] (maks=158)A[2] >maks? Tidak maks tidak berubahA[3] > maks? Ya maks A[3] (maks=162)A[4] > maks? Ya maks A[4] (maks=169)A[5] >maks? Ya maks A[5] (maks=172)A[6] > maks? tidak maks tidak berubahA[7] > maks? tidak maks tidak berubahA[8] >maks? Tidak maks tidak berubah (proses pembandingan selesai)Didapat : maks = 172 (nilai maksimum array yang ditemukan)

Page 27: Array searching sorting_pert_11,12,13,14,15

Program NilaiMaksimumDEKLARASI :Const N = 8 A : array[1..N] of integer = (158, 157, 162, 169,

172, 155, 170, 163)I, maks : integer

ALGORITMA : Maks -9999 {nilai maksimum sementara} For i 1 to N do If A[i] > maks then Maks A[i] endif endfor Write(maks)

Algoritma untuk maks = -999

Page 28: Array searching sorting_pert_11,12,13,14,15

1. Nilai maksimum sementara diinisialisasikan dengan elemen pertama array.

2. selanjutnya, arrray dikunjungi mulai dari elemen kedua

3. setiap kali mengunjungi elemen array, bandingkan elemen tersebut dengan nilai maksimum sementara.

4. jika elemen array yang sedang dintinjau lebih besar dari nilai maksimum sementara, maka (maks) diganti dengan elemen tersebut.

5. pada akhir kunjungan (setelah seluruh elemen array dikunjungi), nilai maksimum sementara menjadi nilai maksimum sebenarnya.

Cara 2: Mencari nilai Maksimal

Page 29: Array searching sorting_pert_11,12,13,14,15

Ilustrasi untuk maks : elemen pertamaA`

158 157 162 169 172 155 170 163

1 2 3 4 5 6 7 8

Asumsi : maks = A[1] (nilai maksimum sementara, maks=158)

A[2] >maks? Tidak maks tidak berubahA[3] > maks? Ya maks A[3] (maks=162)A[4] > maks? Ya maks A[4] (maks=169)A[5] >maks? Ya maks A[5] (maks=172)A[6] > maks? tidak maks tidak berubahA[7] > maks? tidak maks tidak berubahA[8] >maks? Tidak maks tidak berubah (proses pembandingan selesai)Didapat : maks = 172 (nilai maksimum array yang ditemukan)

Page 30: Array searching sorting_pert_11,12,13,14,15

Program NilaiMaksumumDEKLARASI :Const N = 8 A : array[1..N] of integer = (158, 157, 162, 169,

172, 155, 170, 163)I, maks : integer

ALGORITMA : Maks A[1] {nilai maksimum sementara} For i 2 to N do If A[i] > maks then Maks A[i] endif endfor Write(maks)

Algoritma untuk maks = Elemen pertama

Page 31: Array searching sorting_pert_11,12,13,14,15

Mencari nilai maksimal berdasarkan nomor indeks array.

Algoritma : idxMaks 1 for I 2 to n do if A[i] > A[idxMaks] then idxMak I endif endfor

Cara 3: Mencari nilai Maksimal

Page 32: Array searching sorting_pert_11,12,13,14,15

Mencari elemen larik yang mempunyai nilai terkecil di antara elemen larik lainnya.

Konsepnya sama dengan Mencari nilai maksimum array

Mencari Nilai Minimum Array (Larik)

Page 33: Array searching sorting_pert_11,12,13,14,15

Buatlah algoritma untuk mencari nilai terbesar dari data yang sudah tersimpan pada elemen array, dimana nilai yang tersimpan pada elemen array tersebut di baca dari inputan eksternal (keyboard).

Konversikan algoritma di atas ke dalam Bahasa Pascal

Latihan

Page 34: Array searching sorting_pert_11,12,13,14,15

A`

158 157 162 169 172 155 170 163

B`

Menyalin Larik (Array)

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

Page 35: Array searching sorting_pert_11,12,13,14,15

Program Salin

DEKLARASI:Const maks=100A:array[1..maks] of integerB:array[1..maks] of integerI,n : integer

ALGORITMA:Read(n) {menentukan jumlah elemen yang akan digunakan} {membaca nilai dari inputan eksternal (keyboard)}For I 1 to n do read(A[i])Endfor

{menyalin Larik A ke Larik B} for I 1 to n do B[i] A[i] endfor

{Menampilkan nilai elemen array B setelah dilakukan penaylinan dari elemen array A}For I 1 to n do write(B[i])endfor

Algoritma Menyalin Larik

Page 36: Array searching sorting_pert_11,12,13,14,15

Dilakukan dengan membandingkan setiap elemen yang berpadanan pada ke dua larik tersebut

Jika ditemukan satu saja elemen yang tidak sama, maka dapat dipastikan dua buah larik tersebut tidak sama.

Apabila semua elemen dari larik itu sama, maka dapat dikatakan dua buah larik itu sama.

Menguji kesamaan dua buah Larik

Page 37: Array searching sorting_pert_11,12,13,14,15

A`

123 130 140 160 180

B`

123 130 140 160 180

Menguji kesamaan dua buah Larik - next

1 2 3 4 5

1 2 3 4 5

Page 38: Array searching sorting_pert_11,12,13,14,15

Program ujiDEKLARASIConst maks=5 A:array[1..maks] of integer=(123,130,140,160,180) B:array[1..maks] of integer=(123,130,140,160,180)I : integerSama : booleanALGORITMA: I 1Sama trueWhile (I ≤ maks) and (sama) do if A[i] = B[i] then I I + 1 {tinjau elemen berikutnya} else sama false endifEndwhile { I > maks or sama=false }{tampilkan hasil}If sama true then write(‘dua larik sama’)Else write(‘dua larik berbeda’)endif

Algoritma menguji kesamaan larik

Page 39: Array searching sorting_pert_11,12,13,14,15

Pengertian array dua dimensi : Array dua dimensi dapat dipandang

sebagai gabungan array satu dimensi. Ilustrasi :Pandanglah tiga buah array satu

dimensi yang dibuat dengan: A1[4], A2[4], A3[4] : dengan tipe data yang sama

ARRAY DUA DIMENSI (MATRIKS)

Page 40: Array searching sorting_pert_11,12,13,14,15

Ketiga buah array satu dimensi di atas, dapat digabung menjadi satu, sehingga terbentuk sebuah array yang disebut array dua dimensi, yang dapat diilustrasikan sebagai berikut :

Dari ilustrasi diatas, terlihat array tersebut terdiri dari 3 baris, dan 4 kolom, dan jumlah elemennya = 3 x 4 = 12 elemen, karena terdiri dari baris (row) dan kolom (column) maka arrray dua dimensi sering disebut MATRIX.

Karena sudah menjadi satu buah array, maka nama array hanya satu buah, Misalnya A[3] [4] yang maksudnya adalah terdiri barisnya ada 3, dan kolomnya ada 4.

ARRAY DUA DIMENSI (MATRIKS)-next

Page 41: Array searching sorting_pert_11,12,13,14,15

Bentuk Umum Array Dua Dimensi

Page 42: Array searching sorting_pert_11,12,13,14,15

Cotoh: Array Dua Dimensi dengan matriks : 3 x 5,

dengan tipe data integer dan char :

Array konstan untuk array dua dimensi (matriks)

Page 43: Array searching sorting_pert_11,12,13,14,15

Diketahui array dua dimensi : A : array[1..3, 1..4] of integer

Untuk keperluan praktis dan keragaman, indeks untuk baris dan kolom menggunakan variabel.

Misal : i untuk baris dan J untuk kolom Algoritmanya : I 2 J 3 A[i, j] 17

Mengisi Elemen Array Dua Dimensi (MATRIKS)

Page 44: Array searching sorting_pert_11,12,13,14,15

Isi Elemen Matriks per baris atau per kolom

Page 45: Array searching sorting_pert_11,12,13,14,15

Algoritmanya :N 1I 1While (i<=3) J 1 While ( j<= 4) A[i, j] N N++ J++ Endwhile I++Endwhile

Pengisian semua elemen Matrikssecara baris perbaris :

Page 46: Array searching sorting_pert_11,12,13,14,15

Algoritmanya : X 1N XJ 1While (J <= 4) i 1 While ( i <= 3) A[i, j] N N+4 i++ Endwhile X++ NX J++Endwhile

Pengisian semua elemen Matrikssecara kolom perkolom :

Page 47: Array searching sorting_pert_11,12,13,14,15

Misalnya Array Dua Dimensi dengan Matrik 3 x 5. isikan nilai kedalam elemen matrik tersebut.

Algoritmanya :I 1While (i<=3) J 1 While ( j<= 5) Read(nilai) A[i, j] nilai J++ Endwhile I++endwhile

Mengisi Elemen Array Dua Dimensi, dengan Nilai yang diinput dari Keyboard :

Page 48: Array searching sorting_pert_11,12,13,14,15

diketahui matriks 3 x4 untuk array dua dimensi, Buatlah algoritma untuk melakukan inisialisasi nilai (nilai konstan) pada array dua dimensi tersebut dengan tipe data integer. Dan cetak/tampilkanlah nilai dari masing-masing elemen dari matriks tersebut di atas.

Transformasikanlah Algoritma di atas ke dalam bahasa pemrogaram PASCAL.

Latihan 1:

Page 49: Array searching sorting_pert_11,12,13,14,15

diketahui matriks 3 x4 untuk array dua dimensi, Buatlah algoritma dengan menginputkan nilai dari inputan eksternal (keyboard) ke dalam masing elemen matriks di atas dengan tipe data integer. Dan cetak/tampilkanlah nilai dari masing-masing elemen dari matriks tersebut.

Transformasikanlah Algoritma di atas ke dalam bahasa pemrogaram PASCAL.

Latihan 2:

Page 50: Array searching sorting_pert_11,12,13,14,15

Algoritmanya :

For i=1 to i<= 3 do For j=1 to j <=4 do B[i,j] A[i,j] EndforEndfor

MENYALIN ISI ARRAY DUA DIMENSI

Page 51: Array searching sorting_pert_11,12,13,14,15

Algoritmanya :TOT 0I 1 While (i<=3) do J 1 While (J <=

4) do TOT TOT +

A[i,j] J++ Endwhile I++ EndwhileWrite (TOT )

MENGHITUNG TOTAL ISI ARRAY DUA DIMENSI

Page 52: Array searching sorting_pert_11,12,13,14,15

Dua buah array Dua Dimensi yang dibuat A[3,4], dan B[3,4] dengan tipe data integer.

Algoritmanya :I 1While (i <= 3 ) do J 1 While ( J <= 4 ) do C[i,j] A[i,j] + B[i,j] J++ Endwhile I++Endwhile

MENAMBAH ISI DUA BUAH ARRAY DUA DIMENSI

Page 53: Array searching sorting_pert_11,12,13,14,15

Dua buah array Dua Dimensi A[2,3] dan B[3,4] yang dibuat dengan tipe data integer :

Catatan : Syarat dua buah matriks dapat dikalikan adalah : Jumlah

kolom matriks ke 1 harus sama dengan jumlah baris matriks ke 2.

Sedangkan hasilnya adalah matriks ke 3, yaitu jumlah baris matriks ke 3 (matriks hasil) sama dengan jumlah baris matriks ke 1, dan jumlah kolomnya (matriks 3) sama dengan jumlah kolom matriks ke 2.

MENGALIKAN ISI DUA BUAH ARRAY DUA DIMENSI :

Page 54: Array searching sorting_pert_11,12,13,14,15

Contoh : A[2,3] x B[3,4] = c[2,4] Ilustrasi proses :2x3+4x2+3x3 =2x2+4x4+3x3 =2x5+4x6+3x2 =2x7+4x3+3x5 =

3x3+2x2+5x3 =3x2+2x4+5x3 =3x5+2x6+5x2 =3x7+2x3+5x5 =

Secara umum 8 persamaan di atas, dapat ditulis sebagai berikut : C[i,j] = ∑ (A[i,k] * b[k,j] ) Dimana : K dipakai untuk : COL pada array A dan ROW pada array B, dan

untuk suatu nilai i dan j, nilai k bergerak 1 sd. 3

Perkalian matriks - next

Page 55: Array searching sorting_pert_11,12,13,14,15

diketahui matriks 3 x4 untuk array dua dimensi, Buatlah algoritma untuk menghitung nilai total dari matriks tersebut sedang nilai didapat dengan melakukan inisialisasi nilai (nilai konstan) pada array dua dimensi tersebut dengan tipe data integer. Dan cetak/tampilkanlah nilai total dari matriks di atas.

Transformasikanlah Algoritma di atas ke dalam bahasa pemrogaram PASCAL.

Latihan 1:

Page 56: Array searching sorting_pert_11,12,13,14,15

diketahui matriks A=2 x3 dan matrisk B=3x4, Buatlah algoritma untuk menghitung hasil perkalian dua buah matriks. Sedang nilai dari dua buah matriks tersebut didapat dengan melakukan inisialisasi nilai (nilai konstan) pada dua matriks tersebut dengan tipe data integer. Dan cetak/tampilkanlah hasil perkalian dua matriks tersebut.

Transformasikanlah Algoritma di atas ke dalam bahasa pemrogaram PASCAL.

Latihan 2:

Page 57: Array searching sorting_pert_11,12,13,14,15

Buatlah tiga jenis algoritma untuk menentukan hasil perkalian dari dua buah matriks. Dengan ketentuan sebagai berikut :◦ Silahkan tentukan sendiri ukuran dari dua buah

matriks tersebut. ◦ Tentukanlah nilai dari dua buah matriks

tersebut dengan menggunakan inisialisasi atau inputan dari keyboard.

◦ Tipe data ke dua matriks tersebut adalah integer.

Konversikanlah tiga jenis algoritma di atas ke dalam bahasa pemrograman Pascal.

TUGAS (dikumpulkan minggu depan, 20 april 2011)

Page 58: Array searching sorting_pert_11,12,13,14,15

Proses pencarian adalah menemukan nilai (data) tertentu dalam sekumpulan data yang bertipe sama (tipe dasar atau tipe bentukan) larik (array)

Pencarian (searching) merupakan proses yg mendasar dalam pengelohana data.◦ Contoh: UPDATE, INSERT.

Algoritma Pencarian

Page 59: Array searching sorting_pert_11,12,13,14,15

Hasil/keluaran dari persoalan pencarian bergantung pada spesifikasi rinci dari persolan tersebut, seperti hasil/keluaran:

◦ Sebuah pesan (message) : ditemukan atau tidak ditemukan di dalam Larik. Contoh : write(‘ditemukan’) atau write(‘ tidak ditemukan’)

◦ Indeks emelen Larik dari data/nilai yg ditemukan, jika tidak ditemukan indeks diisi dg harga khusus, misal:-1

Contoh: x= 76 idx=3, x=100 idx=-1◦ Nilai boolean yg menyatakan status hasil

pencarian : jika ada data/nilai ditemukan, maka peubah/variabel yg bertipe boolean diisi dg true, dan kalau tidak ketemu diisi dengan false. Contoh: x= 76 ketemu=true, x=100 ketemu=

false

Spesifikasi Masalah Pencarian :

Page 60: Array searching sorting_pert_11,12,13,14,15

Apabila data yang dicari terdapat lebih dari satu banyaknya, maka hanya data yang pertama kali ditemukan yang diacu, dan algoritma pencarian selesai.

Contoh :

Larik A mempunyai dua buah nilai 42, maka algoritma selesai ketika nilai 42 pertama ditemukan, yaitu pada elemen ke-6, dan hasilnya adalah idx = 6, atau ketemu = true.

Nilai 42 lainnya tidak dipertimbangkan lagi dalam pencarian.

Pencarian untuk duplikasi data :

Page 61: Array searching sorting_pert_11,12,13,14,15

1. Metode pencarian beruntun (sequantial search)

2. Metode pencarian bagi dua/pencarian biner (binary search)

metode pencarian data di dalam array diklasifikasikan menjadi dua, yaitu :

Page 62: Array searching sorting_pert_11,12,13,14,15

Disebut juga dengan pencarian lurus (linear search)

Proses membandingkan setiap elemen larik(array) satu persatu beruntun, mulai elemen pertama sampai elemen yg dicari ditemukan, atau seluruh elemen sudah diperiksa

Metode pencarian beruntun (sequantial search)

Page 63: Array searching sorting_pert_11,12,13,14,15

Misalkan nilai yang dicari adalah 42 Pemeriksaaan dilakukan terhadap elemen 60, 12, 76, 23, 11, 42

(ditemukan) Ternyata nilai ditemukan pada elemen ke 6 : Indek larik yang dikembalikan : idx 6 Proses pencarian dihentikan.

Misalkan nilai yang dicari adalah 20 Pemeriksaan dilakukan terhadap elemen 60, 12, 76, 23, 11, 42,

18, 42 (tidak ditemukan) Ternyata nilai tidak ditemukan di dalam array, Indeks larik yang dikembalikan : idx -1 Proses pencarian dihentikan.

Contoh : Metode pencarian beruntun (sequantial search)

Page 64: Array searching sorting_pert_11,12,13,14,15

Aksi pembandingan dilakukan sebagai kondisi pengulangan : ◦ Tidak menggunakan peubah (variabel) boolean

dalam proses pencarian. Aksi pembandingan dilakukan di dalam

badan pengulangan :◦ menggunakan peubah (variabel) boolean dalam

proses pencarian.

Dua Versi algoritmapencarian beruntun ( sequential search)

Page 65: Array searching sorting_pert_11,12,13,14,15

Hasil pencarian yg diinginkan: sebuah peubah boolean yg bernilai true bila nilai ditemukan atau bernilai false bila data/nilai tidak ditemukan

Algoritma : Setiap elemen array dibandingkan dengan

nilai/data yg dicari mulai dari elemen pertama Aksi pembandingan dilakukan selama indeks array

belum melebihi banyaknya elemen array (n) dan A[i] tidak sama dengan nilai/data yg dicari.

Aksi pembandingan dihentikan, bila A[i] = nilai/data yang dicari atau i=n.

Elemen terakhir A[i] diperiksa secara khusus. Keluaran yg dihasilkan adalah sebuah peubah

boolean bernilai true jika data ditemukan, atau false jika data tidak ditemukan.

Versi 1:Aksi pembandingan dilakukan sebagai kondisi pengulangan :

Page 66: Array searching sorting_pert_11,12,13,14,15

Prosedur :

Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output ketemu:boolean)

Deklarasi : I : integerAlgoritma :I 1While(i<n) and (A[i] ≠ x) do I I +1EndwhileIf A[i] = x then ketemu true {x

ditemukan}Else ketemu false {x tidak

ada dalam larik A}endif

Fungsi :

Function cariberuntun(input A:Larikint, input n:integer, input x :integer) boolean

Deklarasi: I : integerAlgoritma: I 1While(i<n) and (A[i] ≠ x) do I I +1EndwhileIf A[i] = x then return true {x

ditemukan}Else return false {x tidak ada

dalam larik A}endif

Algoritma versi 1: hasil pencarian sebuah variabel boolean

Page 67: Array searching sorting_pert_11,12,13,14,15

Program PencarianDeklarasi: const Nmaks = 100 type LarikInt : array[1..Nmaks] of integer A: LarikInt x:integer found : boolean n : integer Procedure bacalarik(output A:LarikInt, input n:integer) Deklarasi : I : integer Algoritma: for I 1 to n do read(A[i]) endfor Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output ketemu:boolean) Deklarasi : I : integer Algoritma : I 1 While(i<n) and (A[i] ≠ x) do I I +1 Endwhile If A[i] = x then ketemu true {x ditemukan} Else ketemu false {x tidak ada dalam larik A} EndifALGORITMA : read(n) bacaLarik(A,, n) read (x) cariberuntun(A, n, x, found) if found = true then write(x, ‘ ditemukan’) else write(x, ‘ tidak ditemukan’) endif

Algoritma lengkap u/ panggil prosedur : versi 1

Page 68: Array searching sorting_pert_11,12,13,14,15

Hasil pencarian yg diinginkan: indeks elemen array (larik) yang mengandung nilai/data yang dicari.

Algoritma : Setiap elemen array dibandingkan dengan

nilai/data yg dicari mulai dari elemen pertama Aksi pembandingan dilakukan selama indeks array

belum melebihi banyaknya elemen array (n) dan A[i] tidak sama dengan nilai/data yg dicari.

Aksi pembandingan dihentikan, bila A[i] = nilai/data yang dicari atau i=n.

Elemen terakhir A[i] diperiksa secara khusus. Keluaran yg dihasilkan adalah sebuah peubah

index (misal: idx) yang berisi indeks larik tempat data/nilai yang dicari ditemukan. jika data data tidak ditemukan, idx diisi dengan nilai -1.

Versi 1:Aksi pembandingan dilakukan sebagai kondisi pengulangan :

Page 69: Array searching sorting_pert_11,12,13,14,15

Prosedur :

Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output idx: integer)

Deklarasi : I : integerAlgoritma :I 1While(i<n) and (A[i] ≠ x) do I I +1EndwhileIf A[i] = x then idx i {x ditemukan}Else idx -1 {x tidak ada

dalam larik A}endif

Fungsi :

Function cariberuntun(input A:Larikint, input n:integer, input x :integer) integer

Deklarasi: I : integerAlgoritma: I 1While(i<n) and (A[i] ≠ x) do I I +1EndwhileIf A[i] = x then return i {x ditemukan}Else return -1 {x tidak ada

dalam larik A}endif

Algoritma versi 1: hasil pencarian sebuah Indeks elemen array

Page 70: Array searching sorting_pert_11,12,13,14,15

Tentukan atau lakukan pencarian apakah data/nilai tersebut sudah ada dalam array.

Jika belum ada, maka nilai/data tersebut ditambahkan pada elemen ke n+1.

Penambahan satu elemen baru tidak melampaui ukuran maksimal larik(array) (Nmaks).

Setelah penambahan elemen baru, ukuran larik(array) efektif menjadi n+1.

Kasus : versi 1menambah (append) nilai/data ke dalam larik (array)

Page 71: Array searching sorting_pert_11,12,13,14,15

Program TambahelemenlarikDeklarasi: const Nmaks = 100 type LarikInt : array[1..Nmaks] of integer L: LarikInt x, idx, n :integer Procedure bacalarik(output A:LarikInt, input n:integer) Deklarasi : I : integer Algoritma: for I 1 to n do read(A[i]) endfor Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output idx:integer) Deklarasi : I : integer Algoritma : I 1 While(i<n) and (A[i] ≠ x) do I I +1 Endwhile If A[i] = x then idx i {x ditemukan} Else idx -1 {x tidak ada dalam larik A} EndifALGORITMA : read(n) bacaLarik(A,, n) read (x) cariberuntun(A, n, x, idx) if idx ≠ -1 then write(x, ‘ sudah terdapat di dalam larik’) else n n + 1 { naikkan ukuran larik } A[n] x { tambahkan nilai x} endif

Algoritma :penambah (append) nilai/data ke dalam larik (array)

Page 72: Array searching sorting_pert_11,12,13,14,15

Hasil pencarian yg diinginkan: sebuah peubah boolean yg bernilai true bila nilai ditemukan atau bernilai false bila data/nilai tidak ditemukan

Algoritma : Diperlukan sebuah peubah boolean untuk

menyatakan apakah nilai sudah ditemukan. Peubah boolean (misal. Ketemu) diinisialisasi dg

nilai false. Setiap elemen array dibandingkan dengan

nilai/data yg dicari mulai dari elemen pertama Jika A[i] = nilai/data yang dicari, peubah Ketemu

diisi dengan nilai true, pengulangan dihentikan. Sebaliknya, jika A[i] ≠ nilai yg dicari,

pembandingan dilanjutkan untuk elemen berikutnya.

Keluaran yg dihasilkan adalah nilai yg disimpan di peubah(variabel) ketemu.

Versi 2: Aksi pembandingan dilakukan di dalam badan pengulangan :

(bukan di awal pengulangan)

Page 73: Array searching sorting_pert_11,12,13,14,15

Prosedur :

Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output ketemu:boolean)

Deklarasi : I : integerAlgoritma :Ketemu falseI 1While(I ≤ n) and (not ketemu)

do if A[i] = x then ketemu true {x

ditemukan} else I I +1 endifEndwhile { I > n or ketemu }

Fungsi :

Function cariberuntun(input A:Larikint, input n:integer, input x :integer) boolean

Deklarasi: I : integerAlgoritma:Ketemu false I 1 While(I ≤ n) and (not ketemu)

do if A[i] = x then ketemu true {x

ditemukan} else I I +1 endifEndwhile { I > n or ketemu } return ketemu

Algoritma versi 2: hasil pencarian sebuah variabel boolean

Page 74: Array searching sorting_pert_11,12,13,14,15

Prosedur :

Procedure cariberuntun(input A:larikint, input n: integer, input x:integer, output idx: integer)

Deklarasi : I : integer ketemu : booleanAlgoritma :Ketemu falseI 1While(I ≤ n) and (not ketemu) do if A[i] = x then ketemu true {x

ditemukan} else I I +1 endifEndwhile { I > n or ketemu } if ketemu true then idx 1 else idx -1 endif

Fungsi :

Function cariberuntun(input A:Larikint, input n:integer, input x :integer) integer

Deklarasi: I : integer ketemu : booleanAlgoritma:Ketemu false I 1 While(I ≤ n) and (not ketemu) do if A[i] = x then ketemu true {x ditemukan} else I i +1 endifEndwhile { I > n or ketemu }if ketemu true then return 1 else return -1 endif

Algoritma versi 2: hasil pencarian sebuah indeks elemen larik

Page 75: Array searching sorting_pert_11,12,13,14,15

Data yg belum terurut :◦ Secara umum pencarian Lambat◦ Waktu pencarian sebanding dengan jumlah

elemen larik Data yg sudah terurut :

◦ Dapat meningkatkan kinerja pencarian◦ Karena dapat segera menyimpulkan bahwa data

yg dicari tidak terdapat di dalam larik bila ditemukan elemen larik yg lebih besar dari data yg dicari

Kinerja AlgoritmaPencarian Beruntun (Sequential search)

Page 76: Array searching sorting_pert_11,12,13,14,15

Pencarian beruntun – data yg terurut

Page 77: Array searching sorting_pert_11,12,13,14,15

Algoritma pencarian pada data terurut yang paling efisien (data harus sudah terurut)

Digunakan untuk kebutuhan pencarian dg waktu yang cepat (tidak membaca dari awal sampai akhir)

Mencari data dg cara membagi larik menjadi dua

Dalam proses pencarian diperlukan dua buah indeks larik, yaitu indeks terkecil (indeks ujung kiri larik) dan indeks terbesar (indeks ujung kanan larik).

Metode pencarian bagidua (binary search)

Page 78: Array searching sorting_pert_11,12,13,14,15

Misal indeks kiri = I, indeks kanan j :1. Bagi dua elemen larik pada elemen tengah.

Elemen tengah adalah indeks k = ( I + j ) div 2Elemen tengah A[k] membagi larik menjadi dua bagian :

bagian kiri A[i..k-1] dan bagian kanan A[k+1..j]

2. Periksa apakah A[k] = x(data yg dicari),◦ Jika ya pencarian selesai (x sudah ditemukan)◦ Jika A[k] ≠ x, harus ditentukan apakah pencarian

sebelah kiri atau kanan◦ Jika A[k] < x, maka pencarian dilakukan pada larik

sebelah kanan◦ Jika A[k] > x, maka pencarian dilakukan pada larik

sebelah kiri.3. Ulangi langkah 1

Langkah-langkahpencarian bagidua

Page 79: Array searching sorting_pert_11,12,13,14,15

Misal data yang dicari adalah 22 :

Ilustrasi pencarian bagidua :

Page 80: Array searching sorting_pert_11,12,13,14,15

Algoritma pencarian bagidua :

Page 81: Array searching sorting_pert_11,12,13,14,15

Program CariBagiDua;Uses wincrt;Const A:array[1..14] of integer = (10, 12, 14, 15, 16, 18, 19, 20, 22, 24, 25, 26, 28, 29);Var Idxawal, idxakhir, k, x : integer; Ketemu : boolean;Begin Write('Masukkan nilai yang akan dicari : '); readln(x); {melakukan pencarian} Idxawal := 1; Idxakhir := 14; Ketemu := false; While (not ketemu) and (idxawal <= idxakhir) do begin K := (idxawal + idxakhir) div 2; If A[k] = x then Ketemu := true else If A[k] < x then Idxawal := k+1 else Idxakhir := k-1; End; {memeriksa, ketemu atau tidak } If ketemu then Writeln(x, 'ditemukan pada indeks ke-', k) else begin Writeln(x, ' tidak ditemukan'); End.

Penerapan pencarian bagidua dalam bahasa pascal

Page 82: Array searching sorting_pert_11,12,13,14,15

Untuk kasus terburuk: x tidak diketemukan, atau x ditemukan setelah ukuran larik tinggal 1 elemen). ,misal banyaknya elemen larik=256, maka menghasilkan pembagian larik sebanyak 8 kali, sedang dengan pencarian beruntun melakukan pembandingan sebanyak 256 kali.

Untuk larik yang terurut, algoritma pencarian bagi dua (binary search) jauh lebih cepat daripada algoritma pencarian beruntun (sequential search).

Kinerja pencarian bagidua :

Page 83: Array searching sorting_pert_11,12,13,14,15

Sequential Search

1. Dapat digunakan baik untuk data yg belum terurut maupun data terurut

2. Kinerja lebih lambat

Binary Search

1. Hanya dapat digunakan untuk data yg terurut saja.

2. Kinerja lebih cepat

Algoritma pencarian beruntun atau pencarian bagidua?

Page 84: Array searching sorting_pert_11,12,13,14,15

Pengurutan (sorting) adalah proses mengatur sekumpulan objek menurut urutan atau susunan tertentu.◦ Tersusun secara menurun (ascending):Misal : Array A dengan elemen N

A[1] ≤ A[2] ≤ A[3] ≤ … ≤ A[N]◦ Tersusun secara menaik (descending) :Misal : Array A dengan elemen N A[1] ≥ A[2] ≥ A[3] ≥ … ≥ A[N]

ALGORITMA PENGURUTAN (SORTING)

Page 85: Array searching sorting_pert_11,12,13,14,15

Pengurutan Apung (Bubble Sort)◦ Pertukaran elemen

Pengurutan Seleksi (Selection Sort)◦ Pertukaran elemen

Pengurutan Sisip (Insertion Sort)◦ Geser dan sisip elemen

Pengurutan Shell (Shell Sort)◦ Geser dan sisip elemen

Semua algoritma pengurutan selalu melakukan operasi perbandingan elemen larik untuk mendapatkan urutan yg tepat.

Jenis Metode Algoritma Pengurutan :

Page 86: Array searching sorting_pert_11,12,13,14,15

Pengurutan internal : Pengurutan untuk data yg disimpan di dalam

memori komputer ( pengurutan Array / larik ) Pengurutan eksternal :

Pengurutan untuk data yg disimpan di dalam disk storage ( pengurutan arsip / file )

Klasifikasi pengurutan :

Page 87: Array searching sorting_pert_11,12,13,14,15

Terinspirasi dari gelembung sabun (berat jenis gelembung lebih ringan dari berat jenis air)

Dalam array yg terurut menaik, maka elemen larik yang paling kecil ‘diapungkan’ dengan cara diletakan keujung kiri larik melalui proses pertukaran.

Pengurutan Apung (Bubble Sort)

Page 88: Array searching sorting_pert_11,12,13,14,15

For I 1 to n-1 do for k n downto i+1 do if A[k] < A[k-1] then {pertukarkan A[k] dengan A[k-1]} temp A[k] A[k] A[k-1] A[k-1] temp endif endforendfor

Algoritma pengurutan Apung (bubble sort)

Page 89: Array searching sorting_pert_11,12,13,14,15

Program UrutBubble;Uses wincrt;Const N=6; A:array[1..N] of integer = (25, 27, 10, 8, 76, 21);Var i, k, temp : integer; Begin {menampilkan data sebelum proses pengurutan } Writeln(‘Data sebelum diurutkan’); For i:=1 to N do begin Writeln(‘A[‘, i, ‘] = ‘, A[i]); End; { melakukan proses pengurutan } For i:= 1 to N-1 do begin For k:=n downto i+1 do begin If A[k] < A[k-1] then begin Temp := A[k]; A[k] := A[k-1]; A[k-1] := temp; End; End; End; {menampilkan data setelah proses pengurutan} Writeln; Writeln(‘Data setelah diurutkan’); For i := 1 to N do begin Writeln(‘A[‘, i, ‘] = ‘, A[i]); End; End.

Penarapan bubble sort dg Pascal :

Page 90: Array searching sorting_pert_11,12,13,14,15

Algoritma pengurutan yg tidak efisien Karena, banyaknya operasi pertukaran yg

dilakukan setiap langkah pass (pengapungan)

Waktu lama, maka jarang digunakan Kelebihan, kesederhanaan dan mudah

dipahami.

Kinerja pengurutan apung (bubble sort)

Page 91: Array searching sorting_pert_11,12,13,14,15

Adalah memilih elemen maksimum/ minimum dari Larik

Menempatkan elemen maksimum/ minimum tersebut pada awal/akhir larik (elemen ujung)

Elemen terujung tersebut ‘diisolasi’ dan tidak disertakan pada proses selanjutnya.

Proses yg sama diulang untuk elemen larik yg tersisa

Memilih elemen maksimum/minimum berikutnya dan mempertukarkannya dengan elemen terujung larik sisa.

Pengurutan Seleksi (Selection Sort)

Page 92: Array searching sorting_pert_11,12,13,14,15

For i n downto 2 do {cari elemen maksimum pada A[1..i]} imaks 1 {indeks elemen pertama diasumsikan sebagai elemen maks

sementara}

maks A[1] {elemen maksimum}

for j 2 to I do if A[j] > maks then imaks j maks A[j] endif endfor {pertukaran maks dengan A[i]}

temp A[i] A[i] maks A[imaks] tempendfor

Algoritma pengurutan seleksi (selection sort)

Page 93: Array searching sorting_pert_11,12,13,14,15

Program Urut_seleksi;Uses wincrt;Const N=6; A:array[1..N] of integer = (25, 27, 10, 8, 76, 21);Var i, j, imaks,maks, temp : integer; Begin {menampilkan data sebelum proses pengurutan } Writeln('Data sebelum diurutkan'); For i:=1 to N do begin Writeln('A[', i, '] = ', A[i]); End; { melakukan proses pengurutan } For I := n downto 2 do begin {cari elemen maksimum pada A[1..i]} imaks := 1; {indeks elemen pertama diasumsikan sebagai elemen maks sementara} maks := A[1]; {elemen maksimum} for j := 2 to I do begin if A[j] > maks then begin imaks := j; maks := A[j]; end; end; {pertukaran maks dengan A[i]} temp := A[i]; A[i] := maks; A[imaks] := temp; end; {menampilkan data setelah proses pengurutan} Writeln; Writeln('Data setelah diurutkan'); For i := 1 to N do begin Writeln('A[', i, '] = ', A[i]); End; End.

Penarapan Selection sort dg Pascal :

Page 94: Array searching sorting_pert_11,12,13,14,15

Dibanding pengurutan apung (bubble sort) pengurutan seleksi memiliki kinerja lebih baik.

Karena, pertukaran elemen hanya dilakukan sekali setiap pass (seleksi).

Sehingga lama pengurutannya berkurang dibanding pengurutan gelembung (bubble sort).

Kinerja selection sort

Page 95: Array searching sorting_pert_11,12,13,14,15

Adalah metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang tepat.

Pencarian posisi yg tepat dilakukan dengan menyisir larik (array).

Selama penyisiran dilakukan pergeseran elemen larik.

Metode penyusutan ini cocok untuk persoalan menyisipkan elemen baru ke dalam sekumpulan elemen larik yg sudah terurut.

Pengurutan sisip (insertion sort)

Page 96: Array searching sorting_pert_11,12,13,14,15

Deklarasi :I : integer { pencacah pass (melewati 1 kali larik) }J : integer { pencacah untuk penelusuran/penyisiran larik }Y : integer { peubah bantu agar A[k] sebagai posisi yg tepat untuk disisipkan tidak ditimpa selama

pergeseran} Ketemu : boolean { untuk menyatakan posisi penyisipan ditemukan }

Algoritma :{ elemen A[1] dianggap sudah terurut}For I 2 to n do { mulai dari pass 2 sampai pass N } y A[i] { cari posisi yg tepat untuk y di dalam A[1..i-1] sambil menggeser } j j -1 ketemu false

while ( j ≥ 1 ) and (not ketemu) do if y < A[j] then A[ j + 1] A [ j ] { geser } j j – 1 else ketemu true endif endwhile { J < 1 or ketemu } A[ j + 1 ] y { sisipkan y pada tempat yang sesuai }

endfor

Algoritma pengurutan Sisip (insertion sort)

Page 97: Array searching sorting_pert_11,12,13,14,15

Contoh : Diketahui Larik dengan n=5 dibawah ini

yg belum terurut, larik (array) ini akan diurut menaik (scending) dengan metode pengurutan sisip (insertion sort) :

Page 98: Array searching sorting_pert_11,12,13,14,15

Asumsikan : elemen y = A[1] = 29 dianggap sudah terurut

Pass 2 : ( I = 2)Y = 27 (angka yg akan disisipkan)J = i-1 (mulai penyisiran)J = 2-1= 1Y < A[J] (bandingkan)27 < 29 yesA[J+1] = 29 (geser)A[2] = 29J = J – 1 ( penyisiran )J = 1-1 = 0 (batas penyisiran) A[j+1] = y A[1] = 27 (menempatkan angka yg akan disisipkan di tempat

yg sesuai) Hasil sortir setelah Pass 2 adalah:

Langkah - langkah:

Page 99: Array searching sorting_pert_11,12,13,14,15

Pass 3 : ( I = 3)Y = 10 (angka yg akan disisipkan)J = i-1 (mulai penyisiran)J = 3-1= 2Y < A[J] (bandingkan)10 < 29 yesA[J+1] = A[j] (geser)A[3] = A[2]A[3] = 29J = J – 1 ( penyisiran )J = 2-1 = 1Y < A[j] (bandingkan)10 < A[1]10 < 27 yes A[j+1] = A[j]A[2] =A[1]A[2] = 27J = j – 1 (penyisiran)J = 1 – 1 = 0 (batas penyisiran)A[j+1] = y A[1] = 10 (menempatkan angka yg akan disisipkan di tempat yg sesuai)

Langkah – langkah - next:

Page 100: Array searching sorting_pert_11,12,13,14,15

Pass 4 : ( I = 4)Y = 8 (angka yg akan disisipkan)J = i-1 (mulai penyisiran)J = 4-1= 3Y < A[J] (bandingkan)8 < 29 yesA[J+1] = A[j] (geser)A[4] = A[3]A[4] = 29J = J – 1 ( penyisiran )J = 3-1 = 2Y < A[j] (bandingkan)8 < A[2]8 < 27 yes A[2+1] = A[2]A[3] =A[2]A[2] = 27J = j – 1 (penyisiran)J = 2 – 1 = 1Y < A[j] (bandingkan)8 < A[1]8 < 10 yesA[J+1] = A[j] (geser)A[2] = A[1]A[2] = 10J = j – 1 (penyisiran) J = 1 – 1 = 0 (batas penyisiran)A[j+1] = y A[1] = 8 (menempatkan angka yg akan disisipkan di tempat yg sesuai)

Langkah – langkah - next:

Page 101: Array searching sorting_pert_11,12,13,14,15

Pass 5 : ( I = 5)Y = 76 (angka yg akan disisipkan)J = i-1 (mulai penyisiran)J = 5-1= 4Y < A[J] (bandingkan)76 < 29 noKetemu = true (posisi penyisipan ditemukan)L[j+1] = yA[5] = 76 (menempatkan angka yg akan

disisipkan di tempat yg sesuai)

Langkah – langkah - next:

Page 102: Array searching sorting_pert_11,12,13,14,15

Banyaknya operasi pergeseran yg diperlukan dalam mencari posisi yg tepat untuk elemen larik.(kelemahan)

Pengrutan sisip kurang bagus untuk larik yg berukuran besar atau volume data yg besar.

Metode penyusutan ini cocok untuk persoalan menyisipkan elemen baru ke dalam sekumpulan elemen larik yg sudah terurut.

Kinerja insertion sort

Page 103: Array searching sorting_pert_11,12,13,14,15

Pendahuluan : Rekaman atau record adalah data yang

bertipe sama Misalnya : ada beberapa data yg terdiri dari

bagian-bagian tertentu seperti data nilai mahasiswa pada satu mata kuliah yg terdiri dari NIM, NAMA, NILAI

Arsip Beruntun (Sequential File)

Page 104: Array searching sorting_pert_11,12,13,14,15

Gambar di atas ada tiga buah rekaman yg memiliki kolom nim, nama, dan nilai

Sebuah baris dari setiap kolom disebut dg rekaman (record).

Dalam sebuah arsip beruntun (sequential file) biasanya terdiri dari banyak rekaman.

Sebuah rekaman (record) dapat terdiri dari beberapa kolom data tergantung dari kebutuhan.

Contoh :

Page 105: Array searching sorting_pert_11,12,13,14,15

Adalah sebuah arsip (file) yang berisi kumpulan rekaman (record) dengan kolom-kolom data tertentu sesuai dg kebutuhan.

Dalam arsip beruntun nama-nama kolom tidak ikut disimpan di dalam file

File hanya berisi kumpulan rekaman saja

Contoh :

EOF (end of file) : akhir dari sebuah file (contoh : xxxxxxx xxx x). Merupakan akhir dari sebuah arsip (File).

Rekaman penanda akhir file disebut dg dummy artinya elemen data yg ditambahkan tapi sebenarnya bukan bagian dari data.

Dummy biasa digunakan untuk memudahkan suatu proses.

Pengertian Arsip Beruntun (Sequential File)

Page 106: Array searching sorting_pert_11,12,13,14,15

Pada dasarnya Arsip beruntun adalah file yg dapat ditulisi untuk menyimpan data.

Operasi yg dilakukan terhadap file yaitu : - menulisi file dan ◦ membaca file.

Operasi pada Arsip Beruntun

Page 107: Array searching sorting_pert_11,12,13,14,15

Yg perlu diperhatikan untuk membuat sebuah arsip beruntun adalah :◦ Menulis rekaman yg ingin ditulis

( sebuah arsip beruntun yg tidak kosong harus berisi satu atau lebih rekaman yg memiliki tipe nilai sama).

◦ Menulis rekaman dummy sebagai akhir pembacaan. Jika sebuah arsip beruntun diangap sebagai arsip

kosong maka minimal ada satu buah rekaman dummy sebagai akhir rekaman.

Membuat Arsip Beruntun

Page 108: Array searching sorting_pert_11,12,13,14,15

Sebelum melakukan pemrosesan arsip beruntun, arsip tersebut harus dideklarasikan terlebih dahulu.

DEKLARASI arsip : file of tipe rekaman Tipe rekaman dapat berupa tipe dasar (integer, real, char,

boolean, string) atau tipe terstruktur (record). Setiap rekaman di dalam arsip beruntun harus bertipe sama, baik

tipe dasar maupun tipe betukan.

Tipe bentukan :

DEKLARASI type nama tipe arsip : file of tipe rkaman arsip : nama tipe arsip

Pendeklarasian Arsip dalam Algoritma

Page 109: Array searching sorting_pert_11,12,13,14,15

Arsip (file) Bil yg berisi sekumpulan bilangan bulat.

Setiap rekaman adalah bilangan bulat DEKLARASI Bil : file of integer

Contoh-contoh pendeklarasian arsip beruntun

Page 110: Array searching sorting_pert_11,12,13,14,15

Arsip Mhs yg berisi data mahasiswa (nim, nama, nilai). Setiap rekaman di dalam arsip Mhs bertipe terstruktur

(record).

DEKLARASI { tipe rekaman} Type Datamhs : record < nim : integer nama : string nilai : char > { arsip } Mhs : file of Datamhs

Contoh-contoh pendeklarasian arsip beruntun - next

Page 111: Array searching sorting_pert_11,12,13,14,15

Untuk pemrosesan arsip perlu mendefinisikan beberapa intruksi baku (fungsi yg sudah tersedia).

Instruksi baku itu dinyatakan sebagai fungsi/prosedur pustaka (library function).

Sejumlah intruksi baku untuk pemrosesan arsip beruntun adalah: open, fread, fwrite, close, eof.

Fungsi Pustaka untuk arsip beruntun

Page 112: Array searching sorting_pert_11,12,13,14,15

Fungsi :Membuka asip beruntun untuk siap dibaca/ ditulis.Setelah memanggil fungsi ini, penunjuk arsip (file

pointer) akan menunjuk ke karakter pertama di awal arsip

Sebuah arsip beruntn yg dibuka (open) hanya bisa untuk masukan (dibaca) saja atau sebagai keluaran (ditulis) saja, tidak sekaligus keduanya (dibaca dan ditulis).

Contoh : open(Mhs, 1) { arsip Mhs dibuka untuk dibaca } open(Bil, 2) { arsip Bil dibuka untuk ditulis } open(Kar, 1) { arsip Kar dibuka untuk dibaca }

open

Page 113: Array searching sorting_pert_11,12,13,14,15

Fungsi :Membaca rekaman yang sekarang sedang ditunjuk oleh pointer.Contoh : Fread(Mhs, RekMhs) { RekMhs bertipe DataMhs } Fread(Bil, I) { I bertipe integer }

Fread(Kar, ch) { ch bertipe karakter }

Andai pointer pembacaan sekarang sedang menunjuk ke awal rekaman ke-2, maka hasil perintah Fread adalah :

RekMhs berisi <004,’Shalahudin’,’B’>

Selanjutnya, pointer akan menunjuk ke awal rekaman ke-3, dan siap untuk membaca rekaman tersebut.

Fread

Page 114: Array searching sorting_pert_11,12,13,14,15

Fungsi :Menulis rekaman ke dalam arsip beruntun.Contoh :RekMhs.Nim 456087RekMhs.Nama ‘Andi’RekMhs.Nilai ‘A’Fwrite(Mhs, RekMhs) {simpan RekMhs ke arsip

Mhs}

Fwrite(Bil, 765) {menuliskan nilai 765 ke arsip Bil}

Fwrite(Kar, ‘B’) { menuliskan karakter B ke arsip Kar }

Fwrite

Page 115: Array searching sorting_pert_11,12,13,14,15

Fungsi :Menutup Arsip yang sudah dibuka.

Contoh : close(Mhs) { menutup arsip Mhs } close(Bil) close(Kar)

Arsip sudah ditutup, tidak dapat diproses lagi.

Close

Page 116: Array searching sorting_pert_11,12,13,14,15

Fungsi :Mendeteksi akhir arsip.

EOF (end of file)

Page 117: Array searching sorting_pert_11,12,13,14,15

Arsip hanya dapat diproses jika sudah terdefinisi isinya.

Langkah pembuatan arsip beruntun :◦ Menyiapkan arsip untuk perekaman

(menggunakan perintah open dg kode=2)◦ Membaca data yg akan direkam (misalnya dari

piranti masukan (keyboard))◦ Menuliskan data tersebut ke dalam arsip

(perintah Fwrite).◦ Jika sebuah arsip sudah selesai diisi, arsip

tersebut ditutup dengan perintah Close

Membuat Arsip Beruntun

Page 118: Array searching sorting_pert_11,12,13,14,15

Program BuatArsipBilanganBulat{ contoh program yg memperagakan ara menyimpan data ke

dalam arsip, data dibaca dari papan ketik, tanda akhir arsip adalah 9999}

DEKLARASI Bil : File of integer {arsip bilangan bulat}N : integer {banyaknya bilangan bulat}I : integer { pencacah penguangan }X : integer { variabel bilangan bulat yg dibaca dari

keyboard}ALGORITMA : open(Bil, 2) {buka arsip Bil untuk perekaman} read(n)For I 1 to n do read(x) Fwrite(Bil, x) { rekam bilangan bulat ke arsip Bil }

EndforClose(Bil) {tutup arsip Bil}

Contoh Algoritma membuat arsip beruntun

Page 119: Array searching sorting_pert_11,12,13,14,15

Program BuatArsipMahasiswa{ mebuat arsip data mahasiswa, data mahasiwadari papan ketik, pembacaan

data diakhiri bila NIM yg dimasukkan adalah 9999}

DEKLARASIType DataMhs : record <Nim :Integer, Nama : String, Nilai : Char>Msiswa : DataMhs { variabel untuk menampung pembacaan data

mahasiswa}

Mhs : file of DataMhs { arsip data mahasiswa } ALGORITMA : open(Mhs, 2) {buka arsip Mhs untuk perekaman} read(Msiswa.NIM) { baca NIM mahasiswa pertama, mungkin 9999}

While (Msiswa.NIM ≠ 9999) do read(Msiswa.Nama, Msiswa.Nilai) Fwrite(Mhs, Msiswa) { rekam Msiswa ke dalam arsip Mhs } read(Msiswa.NIM)Endwhile{ Msiswa.NIM = 9999}Close(Mhsl) {tutup arsip Mhs}

Contoh Algoritma membuat arsip beruntun - next

Page 120: Array searching sorting_pert_11,12,13,14,15

Langkah-langkah : Menyiapkan arsip untuk pembacaan (perintah

Open dengan kode=1). Setiap kali akan membaca suatu rekaman

(record) harus dipastikan bahwa tanda akhir arsip (eof) belum dicapai.

Rekaman (record) dibaca satu per satu dari rekaman pertama hingga rekaman yg diinginkan atau seluruh rekaman selesai dibaca.

Karena jumlah data dalam arsip tidak diketahui, maka gunakanlah konstruksi while-do

Membaca Arsip beruntun

Page 121: Array searching sorting_pert_11,12,13,14,15

Program pembacaan arsipDEKLARASI : type rekaman : TipeRekaman Arsip : file of rekaman rek : rekamanAlGORITMA:InisialisasiOpen(Arsip, 1) {buka arsip untuk dibaca}

While not EOF(arsip) do fread(Arsip, rek) proses rekEndwhile { EOF(arsip) }TerminasiClose(arsip)

Skema umum membaca arsip beruntun

Page 122: Array searching sorting_pert_11,12,13,14,15

PROGRAM BacaArsipBilanganBulatDEKLARASI : bil : File of integer x : integer { peubah rekaman }ALGORITMA : open(bil, 1) {baca arsip bil untuk pembacaan} while not EOF(bil) do fread(arsip, x) {baca rekaman pertama} Write(x) endwhile { EOF(bil) }Close(bil) {tutup arsip bil}

Contoh : pembacaan data dari arsip

Page 123: Array searching sorting_pert_11,12,13,14,15

PROGRAM BacaArsipIP

DEKLARASI :

Type DataMhs : record

<NIM : integer

Nama : string

IP : real

>

RekMhs : DataMhs

Mhs : File of DataMhs

Jumlah : integer {variabel (peubah) untuk menampung jumlah IP >2.0}

ALGORITMA :

jumlah 0

open(Mhs, 1) {buka arsip Mhs untuk pembacaan}

while not EOF(mhs) do

fread(Mhs, RekMhs) { baca data }

if RekMhs.IP > 2.0 then

Jumlah Jumlah + 1

endif

endwhile

{ EOF (Mhs) }

Close(Mhs) { tutup arsip Mhs}

Contoh pembacaan : menghitung jumlah mahasiswa yang mempunyai IP > 2.0

Page 124: Array searching sorting_pert_11,12,13,14,15

PROGRAM cariIPTertinggi

DEKLARASI :

Type DataMhs : record <NIM : integer

Nama : string

IP : real >

RekMhs : DataMhs

Mhs : File of DataMhs

Maks : real {variabel (peubah) untuk menampung IP tertinggi}

ALGORITMA :

Maks -9999

open(Mhs, 1) {buka arsip Mhs untuk pembacaan}

while not EOF(mhs) do

fread(Mhs, RekMhs) { baca data }

if RekMhs.IP > maks then

maks RekMhs.IP

endif

endwhile { EOF (Mhs) }

Close(Mhs) { tutup arsip Mhs}

{cetak data mahasiswa yang mempunyai IP tertinggi}

Write(‘NIM :’, RekMhs.NIM)

Write(‘NAMA :’, RekMhs.Nama)

Write(‘IP :’, RekMhs.IP)

Contoh pembacaan : mencari data mahasiswa yg mempunyai IP tertinggi

Page 125: Array searching sorting_pert_11,12,13,14,15

Menggandakan Arsip (file) backup file Penyalian (copy) dapat dilakukan terhadap

◦ seluruh rekaman (record) atau hanya ◦ rekaman (record) tertentu saja.

Manyalin Arsip (file)

Page 126: Array searching sorting_pert_11,12,13,14,15

ALGORITMA :Open (Mhs1, 1) { buka arsip Mhs1 untuk pembacaan

} Open (Mhs2, 2) { buka arsip Mhs2 untuk penulisan }

While not EOF(Mhs1) do fread(Mhs1, RekMhs) { baca rekaman dari arsip

Mhs1 } Fwrite(Mhs2, RekMhs) { salin Rekmhs ke arsip

Mhs2}Endwhile

Close(Mhs1)Close(Mhs2)

Menyalin seluruh rekaman

Page 127: Array searching sorting_pert_11,12,13,14,15

ALGORITMA :Open (Mhs1, 1) { buka arsip Mhs1 untuk pembacaan }

Open (Mhs2, 2) { buka arsip Mhs2 untuk penulisan }

While not EOF(Mhs1) do fread(Mhs1, RekMhs) { baca rekaman dari arsip Mhs1 }

if RekMhs.IP > 2.0 then Fwrite(Mhs2, RekMhs) { salin Rekmhs dg IP > 2.0 ke

arsip Mhs2}

endifEndwhileClose(Mhs1)Close(Mhs2)

Menyalin sebagian data dari arsip(menyalin data mahasiswa yang IP-nya di atas 2.0

Page 128: Array searching sorting_pert_11,12,13,14,15

Menyalin isi dua buah arsip ke dalam sebuah arsip baru

Dilakukan dg cara penyambungan (concatenation), yaitu menyalin isi arsip yg kedua setelah isi arsip pertama.

Manggabung (merge) dua Arsip

Page 129: Array searching sorting_pert_11,12,13,14,15

Contoh :

Page 130: Array searching sorting_pert_11,12,13,14,15

ALGORITMA : Open(Mhs1, 1) Open(Mhs2, 1) Open(Mhs3, 2)While not EOF(Mhs1) do fread (Mhs1, RekMhs) Fwrite(Mhs3, RekMhs)Endwhile

While not EOF(Mhs2) do fread(Mhs2, RekMhs) fwrite(Mhs3, RekMhs)EndwhileClose(Mhs1)Close(Mhs2)Close(Mhs3)

Algoritma Penggabungan Arsip

Page 131: Array searching sorting_pert_11,12,13,14,15

Program CariIPTertinggi;

Uses wincrt;

Type DataMhs : record

NIM : integer;

Nama : string;

IP : real;

end;

var

RekMhs : DataMhs;

Mhs : File of DataMhs;

Begin

assign(Mhs, ‘data.dat’);

rewrite(Mhs);

write(‘NIM : ); readln(RekMhs.NIM);

while (RekMhs .nim <> 9999) do

begin

write(‘NIM : ‘); readln(RekMhs.nim);

write(‘Nama :’); readln(RekMhs.nama);

write(IP :’); readln(RekMhs.IP);

end;

close(Mhs);

Assign(Mhs, ‘data.dat’);

reset(Mhs);

While (RekMhs.NIM <> 999) do

begin

read(Mhs, RekMhs);

if RekMhs.IP > maks then

begin

maks :=RekMhs.IP;

end;

end;

Close(Mhs); { tutup arsip Mhs}

{cetak data mahasiswa yang mempunyai IP tertinggi}

Write(‘NIM :’, RekMhs.NIM);

Write(‘NAMA :’, RekMhs.Nama);

Write(‘IP :’, RekMhs.IP);

end.

Penerapan dg Pascal (cari IP tertinggi dalam Arsip)

Page 132: Array searching sorting_pert_11,12,13,14,15

Buatlah Algoritma lengkap untuk penggabungan 2 buah Arsip (File) data Mahasiswa dengan ketentuan :◦ Arsip (File) pertama berisi 5 Rekaman (record).◦ Arsip (File) kedua berisi 3 rekaman (record)◦ Data Mahasiswa tersebut terdiri dari NIM, NAMA

dan IPK◦ Arsip (File) Gabungan disimpan pada Arsip (File)

ketiga Buatlah Program Komputer dengan

Bahasa Pascal untuk Algoritma di atas.

Tugas dikumpulkan minggu depan (29 Juni 2011)