Anda di halaman 1dari 38

LARIK [ARRAY]

PERTEMUAN 14
DEFINISI
■ Secara umum Array/larik adalah kumpulan data yang bertipe sama yang
menggunakan nama yang sama. Dengan menggunakan array, sejumlah
variabel dapat memakai nama yang sama. Antara satu variabel dengan
variabel lain di dalam array dibedakan berdasarkan nomor elemen
(subscript).
■ Pada pengembangannya larik banyak digunakan untuk mengolah data
yang mempunyai nama dan tipe yang berbeda, seperti hasil ujian
mahasiswa dengan field-field misal NIM, NAMA, NILAI, INDEKS, dsb
sehingga mempunyai tipe yang kompleks.
■ Untuk larik dangan kasus ini kita harus menggunakan tipe bentukan
Record (Structure), agar suatu kumpulan field dengan tipe data yang
berbeda dapat diolah.
■ Tipe larik yang tersusun atas field-field dengan nama dan tipe yang
berbeda disebut sebagai “Larik Terstruktur”.
GAMBARAN LOGIK
Gambaran lojik sebuah larik dapat dijelaskan sebagai berikut:
A A
1 1 80
2 2 75
3 3 60
4 4 82
5 5 59
6 6 76
7 7 87
8 8 71

• Angka di dalam kurung siku menyatakan indeks larik.


• Setiap elemen larik menyimpan sebuah nilai.
• Karena seluruh elemen larik bertipe sama maka nilai yang disimpan oleh setiap elemen
juga harus bertipe sama
Larik dalam Deklarasi

■ Larik adalah struktur data yang statik, artinya jumlah elemen larik harus sudah
diketahui sebelum program dieksekusi. Jumlah elemen larik tidak dapat diubah,
ditambah, atau dikurangi selama pelaksanaan program.
■ Mendefinisikan larik di bagian DEKLARASI berarti:
– Mendefinisikan banyaknya elemen larik, dan
– Mendefinisikan tipe eleman larik
■ Mendefinisikan banyaknya elemen larik berarti memesan sejumlah tempat di
memori sebanyak elemen larik yang bersangkutan. Tipe elemen larik dapat berupa
tipe dasar (integer, real, boolean, string), tipe terstruktur (tipe bentukan seperti
record), atau bahkan bertipe larik lain.
Pendefinisian larik di dalam bagian DEKLARASI:

■ Misal:
– L adalah nama peubah yang mempunyai 5 buah elemen yang bertipe integer.
Indeks larik bertipe integer dimulai dari 1.
– Nama adalah peubah larik yang mempunyai 5 buah elemen bertipe string
dengan panjang string 25.
– Nilai adalah peubah larik yang mempunyai 20 buah elemen yang bertipe real.
Cara Mengacu Elemen Larik
■ Elemen larik diacu melalui indeksnya. Nilai indeks harus terdefinisi.
■ Cara mengacu elemen larik adalah:
■ Misal indeks larik didefinisikan sebagai peubah k bertipe integer, maka cara mengacu
eleman larik tersebut adalah:
– L[k];
– Nama[k];
– Nilai[k]
■ Elemen larik juga dapat diacu melalui isi nilai dari indeks larik tersebut:
– L[4]
#include<iostream>
using namespace std;
int main() {
int data[10];
int elemen;
for (elemen=0;elemen <= 9;elemen++)
{
cout << "Data ke – " << elemen << ": "; cin >> data[elemen];
}
for (elemen=0;elemen<= 9;elemen++)
{
cout << " Data ke – " << elemen << " : " << data[elemen] ;
}
}
#include<iostream>
using namespace std;
int main()
{
int data[5] = {4, 1, 0,-9, 8};
int elemen;
for (elemen=0;elemen <= 4;elemen++)
{
cout << "Data ke– " << elemen << ": " << data[elemen]<<endl;
}
}
#include<iostream>
using namespace std;
int main()
{
int j, k;
int data[5][3]=
{
{3, 4, -1},
{2, 3, 0},
{1, 1, 2},
{5, 9, -4},
{6, 6, 2}
};
for (j = 0; j<=4; j++)
{
for (k = 0; k<=2; k++)
cout << "data[" << j << "]["<< k << "] = "<< data[j][k] << endl;
}
}
#include<iostream>
using namespace std;
int main()
{
char Nama[5][25];
int k;
for(k=0;k<5;k++)
{
cout<<"Nama " <<k<<" = ";
cin >> Nama[k];
}
cout<<"==============="<<endl;
cout<<"Data Nama Mhs" << endl;
cout<<"==============="<<endl;
for(k=0;k<5;k++)
cout<<Nama[k]<<endl;
cout<<"==============="<<endl;
}
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int Nilai[5];
int k; // indeks larik
for (k=1; k<=5; k++)
{
cout<<”Nilai “ <<k<< “ = “;
cin >> Nilai[k];
}
cout<<”===============================”<<endl;
cout<<”Data Nilai Ujian Akhir Semester”<<endl;
cout<<”===============================”<<endl;
for(k=1; k<=5; k++)
cout<< setiosflags(ios::right)<<setw(6)<<Nilai[k]<< endl;
cout<<”===============================”<<endl;
}
INISIALISASI LARIK
■ Menginisialisasikan larik adalah memberikan harga awal untuk seluruh elemen larik.
Seperti halnya variabel biasa, larik juga dapat diberi nilai awal (diinisialisasi) pada saat
didefinisikan.
■ Cara mendeklarasikan elemen larik yang diberi nilai awal adalah:
int jum_hari[12] =
{
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};

31 28 31 30 31 30 31 31 30 31 30 31

■ C++ secara otomatis akan memberi nilai awal nol terhadap larik yang bersifat global.
■ Tidak demikian bila larik didefinisikan secara lokal (diatur sendiri oleh pemrogram).
#include<iostream>
using namespace std;
int main()
{
int i;
int jum_hari[12] =
{
31,28,31,30,31,30,31,31,30,31,30,31
};
for(i=0;i<12;i++)
cout<<"jum_hari["<<i<<"] = "<<jum_hari[i]<<endl;
}
MENCARI NILAI MAKSIMUM
■ Terkadang kita ingin mencari nilai maksimum dari suatu larik, misalnya mencari
juara pertama dari sekumpulan skor sebuah pertandingan, mencari juara kelas dan
sebagainya. Pencarian nilai maksimum pada larik haruslah data bertipe integer
atau real.
■ Bila elemen larik sudah terurut menaik, harga maksimum langsung dapat diperoleh
pada elemen pertamanya. Tetapi bila elemen larik tersusun acak, kita harus
“mengunjungi” seluruh elemen larik satu persatu untuk mendapatkan nilai
maksimum.
PERHATIKAN TABEL BERIKUT
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71
ALGORITMA VERSI 1
■ Algoritma ini mengasumsikan nilai mula-mula (maks) adalah nilai yang sangat kecil,
misalnya dari kumpulan nilai ujian kita definisikan bahwa nilai maksimum mula-
mula adalah –999.
■ Teknik dari versi 1 ini dapat dijabarkan sebagai berikut:
– Larik dikunjungi mulai dari elemen pertama.
– Setiap kali mengunjungi elemen larik, bandingkan elemen tersebut dengan
nilai maksimum sementara.
– Jika elemen larik yang sedang dibandingkan lebih besar dari nilai maksimum
sementara, maka nilai pada elemen tersebut menjadi maksimum sementara
sekarang.
– Pada akhir kunjungan (yaitu setelah seluruh elemen larik dikunjungi, nilai
maksimum sementara menjadi nilai maksimum di seluruh elemen larik.
ALGORITMA VERSI 2
■ Pada algoritma versi dua ini, nilai maksimum sementara diinisialisasi dengan elemen
pertama larik. Selanjutnya, larik dikunjungi mulai dari elemen kedua. Setiap kali
mengunjungi elemen larik, bandingkan elemen tersebut dengan nilai maksimum
sementara. Jika elemen larik yang sedang dibandingkan lebih besar dari nilai maksimum
sementara, maka elemen tersebut menjadi maksimum sementara sekarang. Pada akhir
kunjungan (yaitu setelah seluruh elemen larik dikunjungi), nilai maksimum sementara
menjadi nilai maksimum dari seluruh elemen larik.
■ Algoritma versi 2 lebih umum dan pasti benar untuk nilai larik apapun (baik bernilai positif
ataupun negatif). Algoritma tetap benar meskipun larik hanya berukuran 1 elemen A (yaitu
N = 1).
#include<iostream>
using namespace std;
int main()
{
int nilai[7];
int k,maks;
for (k=1;k<=8;k++)
{
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
maks=nilai[1];
for (k=2;k<=8;k++)
{
if (nilai[k] > maks)
maks=nilai[k];
}
cout<<"Nilai terbesar = "<<maks<<endl;
}
Nilai Minimum Larik
■ Teknik mencari nilai minimum pada larik dikembangkan dengan cara pemikiran yang sama
seperti pencarian harga maksimum larik.

int main()
{
int nilai[5]; //larik dengan data nilai 5 orang mhs
int min,k;
for(k=1;k<=5;k++){
cout<<"Nilai " <<k<<" = ";
cin >> nilai[k];
}
min=nilai[1];
for(k=2;k<=5;k++)
{
if (nilai[k] < min)
min=nilai[k];
}
cout<<"Nilai terkecil = "<<min<<endl;
}
Mencari Nilai tertentu
■ Mencari “sesuatu” di dalam sekumpulan data sering kita lakukan, misalnya mencari No.
Telp di dalam buku telepon, alamat dan sebagainya.
■ Algoritma pencarian merupakan algoritma yang sangat penting, karena program
komputer umumnya berisi proses menyimpan, mencari, memanipulasi dan menulis
data.
■ Sama halnya mencari nilai maksimum dan minimum, pencarian data tertentu di dalam
larik juga merupakan proses mengunjungi elemen larik satu per satu, mulai dari elemen
pertama dengan membandingkan apakah elemen tersebut sama dengan nilai yang
dicari. Jika sama, maka pencarian sukses, dan jika belum sama, maka pencarian
dilanjutkan ke elemen berikutnya. Proses pencarian diteruskan sampai nilai yang dicari
ditemukan atau seluruh elemen larik sudah diperiksa.
Masalah pencarian nilai tertentu pada larik

■ Diketahui sebuah larik integer yang sudah terdefinisi nilai elemen-elemennya.


Diberikan nilai X yang bertipe integer. Carilah apakah nilai X terdapat di dalam larik.
Kalau X ditemukan, ix diisi dengan indeks tempat X berada (hanya kemunculan X
yang pertama kali ditemukan yang dipertimbangkan dalam masalah ini). Sebaliknya
kalau X tidak ditemukan di dalam larik tersebut, ix diisi dengan nilai 0.
PERHATIKAN TABEL BERIKUT
A
1 80
2 75
3 60
4 82
5 59
6 76
7 87
8 71
■ Misal nilai yang dicari adalah X = 76
Pemeriksaan dilakukan terhadap elemen larik berisi nilai 80, 75, 60, 82, dan 59
X ditemukan pada elemen (indeks) ke-6, jadi ix  6
Bila ada dua nilai 76 di dalam elemen larik, hanya elemen yang pertama kali ditemukan
yang dipertimbangkan.
■ Misal nilai yang dicari adalah X = 20
Pemeriksaan dilakukan terhadap elemen 80, 75, 60, 82, 59, 76, 87, 71
X tidak ditemukan di dalam larik , jadi ix 0
Pembandingan tanpa peubah boolean

Hasil: indeks larik tempat X berada:


1. Setiap elemen larik A dibandingkan dengan X.
2. Proses pembandingan terus dilakukan selama elemen
A[k] tidak sama dengan X dan indeks larik belum sama
dengan N.
3. Pembandingan dihentikan bila A[k] = X atau indeks larik
sudah sama dengan N. Nilai yang dikembalikan adalah
indeks larik (ix) tempat X ditemukan.
4. Jika X tidak ditemukan maka ix diisi dengan 0.
Pembandingan dengan peubah boolean

■ Hasil: indeks larik tempat X berada.


■ Pada versi ini, jika X ditemukan di dalam
larik, maka : Sebuah peubah boolean yang
bernama ketemu diisi dengan nilai true, dan
jika X tidak ditemukan, maka ketemu bernilai
false. Nilai yang dikembalikan adalah indeks
larik (ix) tempat X ditemukan. Jika X tidak
ditemukan maka ix diisi 0.
Pengurutan Data
☼ Pengurutan (sorting) adalah proses mengatur sekumpulan obyek menurut urutan atau
susunan tertentu. Urutan obyek tersebut dapat menaik (ascending) atau menurun
(descending).
☼ Bila N buah obyek (data) disimpan di dalam larik A, maka pengurutan menaik berarti
menyusun elemen larik sedemikian sehingga:
A[1]  A[2]  A[3]  … A[N]
☼ Pengurutan menurun berarti menyusun elemen larik sedemikian sehingga:
A[1]  A[2]  A[3]  … A[N]
■ Data yang diurut dapat berupa data bertipe dasar atau tipe rekaman. Jika data bertipe
rekaman, maka harus dijelaskan berdasarkan field apa data tersebut diurutkan. Field yang
dijadikan dasar pengurutan dikenal sebagai field kunci.
■ Metode pengurutan data sesungguhnya terdiri dari banyak jenis, namun yang paling
banyak digunakan adalah:
– Algoritma Pengurutan Gelembung ( Bubble Sort )
– Algoritma Pengurutan Pilih ( Selection Sort )
Bubble Short
■ Metode pengurutan gelembung ( bubble sort ) diinspirasi oleh gelembung sabun
yang berada di atas permukaan air. Karena berat jenis gelembung sabun lebih
ringan dari berat jenis air, maka gelembung sabun selalu terapung ke atas
permukaan. Secara umum, benda-benda yang berat akan terbenam dan benda-
benda yang ringan akan terapung ke atas permukaan.
■ Prinsip pengapungan di atas juga digunakan pada pengurutan gelembung. Apabila
kita menginginkan larik terurut menaik, maka elemen larik berharga paling kecil
“diapungkan”, artinya diangkat ke “atas” (atau ke ujung kiri larik) melalui proses
pertukaran.
■ Proses pengapungan ini dilakukan sebanyak N-1 langkah (pass) dengan N adalah
ukuran larik. Pada akhir setiap langkah ke-I, larik A[1..N] akan terdiri atas dua
bagian yaitu bagian yang sudah terurut, yaitu A[1..I] dan bagian yang belum terurut,
A[I+1..N]. Setelah langkah terakhir, diperoleh larik A[1..N] yang terurut menaik.
Syarat dan langkah-langkah yang harus diperhatikan
pada metode Bubble Sort :

■ Jumlah iterasi sama dengan banyaknya bilangan dikurang 1.


■ Di setiap iterasi, jumlah pertukaran bilangannya sama
dengan jumlah banyaknya bilangan.
■ Dalam algoritma Bubble Sort, meskipun deretan bilangan
tersebut sudah terurut, proses sorting akan tetap dilakukan.
■ Tidak ada perbedaan cara yang berarti untuk teknik
algoritma Bubble Sort Ascending dan Descending.
Kelebihan dan Kekurangan Bubble
Short
■ Kelebihan yang dimiliki oleh algoritma ini:
– Algoritma ini adalah metode paling sederhana untuk mengurutkan data.
– Selain sederhana, algoritma ini juga mudah dipahami.

■ Kekurangan
– Tingkat efisiensinya yang kurang.
– Jumlah pengulangan yang dilakukan oleh algortima ini akan tetap sama
jumlahnya, meskipun data yang diurutkan sudah cukup terurut.
Proses dalam Buble Short

■Asscending

■Descending
Contoh pengurutan Ascending :
■ Berikut ini adalah sebuah deretan bilangan : [5, 12, 3, 19, 1, 47]
■ Iterasi 1:
5, 12, 3, 19, 1, 47 –> Tidak ada pertukaran. (5 < 12 == true)
5, 3, 12, 19, 1, 47 –> Ada pertukaran. (12 < 3 == false)
5, 3, 12, 19, 1, 47 –> Tidak ada pertukaran. (12 < 19 == true)
5, 3, 12, 1, 19, 47 –> Ada pertukaran. (19 < 1 == false)
5, 3, 12, 1, 19, 47 –> Tidak ada pertukaran. (19 < 47 == true)
■ Iterasi 2:
3, 5, 12, 1, 19, 47 –> Ada petukaran. (5 < 3 == false)
3, 5, 12, 1, 19, 47 –> Tidak ada pertukaran. (5 < 12 == true)
3, 5, 1, 12, 19, 47 –> Ada pertukaran. (12 < 1 == false)
3, 5, 1, 12, 19, 47 –> Tidak ada pertukaran. (12 < 19 == true)
3, 5, 1, 12, 19, 47 –> Tidak ada pertukaran. (19 < 47 == true)
■ Iterasi 3:
3, 5, 1, 12, 19, 47 –> Tidak ada pertukaran. (3 < 5 == true)
3, 1, 5, 12, 19, 47 –> Ada pertukaran. (5 < 1 == false)
3, 1, 5, 12, 19, 47 –> Tidak ada pertukaran. (5 < 12 == true)
3, 1, 5, 12, 19, 47 –> Tidak ada pertukaran. (12 < 19 == true)
3, 1, 5, 12, 19, 47 –> Tidak ada pertukaran. (19 < 47 == true)
Cont..
■ Iterasi 4:
1, 3, 5, 12, 19, 47 –> Ada pertukaran. (3 < 1 == false)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (3 < 5 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (5 < 12 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (12 < 19 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (19 < 47 == true)
■ Iterasi 5:
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (1 < 3 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (3 < 5 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (5 < 12 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (12 < 19 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (19 < 47 == true)
■ Iterasi 6:
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (1 < 3 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (3 < 5 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (5 < 12 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (12 < 19 == true)
1, 3, 5, 12, 19, 47 –> Tidak ada pertukaran. (19 < 47 == true)
■ Jadi, hasil akhir deretan bilangan di atas setelah diurutkan dengan algoritma Bubble
Sort secara Ascending ialah [1, 3, 5, 12, 19, 47]
Contoh Descending :
■ Menggunakan deretan bilangan : [5, 12, 3, 19, 1, 47]
■ Iterasi 1:
12, 5, 3, 19, 1, 47 –> Ada pertukaran. (5 > 12 == false)
12, 5, 3, 19, 1, 47 –> Tidak ada pertukaran. (5 > 3 == true)
12, 5, 19, 3, 1, 47 –> Ada pertukaran. (3 > 19 == false)
12, 5, 19, 3, 1, 47 –> Tidak ada pertukaran. (3 > 1 == true)
12, 5, 19, 3, 47, 1 –> Ada pertukaran. (1 > 47 == false)
■ Iterasi 2:
12, 5, 19, 3, 47, 1 –> Tidak ada pertukaran. (12 > 5 == true)
12, 19, 5, 3, 47, 1 –> Ada pertukaran. (5 > 19 == false)
12, 19, 5, 3, 47, 1 –> Tidak ada pertukaran. (5 > 3 == true)
12, 19, 5, 47, 3, 1 –> Ada pertukaran. (3 > 47 == false)
12, 19, 5, 47, 3, 1 –> Tidak ada pertukaran. (3 > 1 == true)
■ Iterasi 3:
19, 12, 5, 47, 3, 1 –> Ada pertukaran. (12 > 19 == false)
19, 12, 5, 47, 3, 1 –> Tidak ada pertukaran. (12 > 5 == true)
19, 12, 47, 5, 3, 1 –> Ada pertukaran. (5 > 47 == false)
19, 12, 47, 5, 3, 1 –> Tidak ada pertukaran. (5 > 3 == true)
19, 12, 47, 5, 3, 1 –> Tidak ada pertukaran. (3 > 1 == true)
Cont…
■ Iterasi 4:
19, 12, 47, 5, 3, 1 –> Tidak ada pertukaran. (19 > 12 == true)
19, 47, 12, 5, 3, 1 –> Ada pertukaran. (12 > 47 == false)
19, 47, 12, 5, 3, 1 –> Tidak ada pertukaran. (12 > 5 == true)
19, 47, 12, 5, 3, 1 –> Tidak ada pertukaran. (5 > 3 == true)
19, 47, 12, 5, 3, 1 –> Tidak ada pertukaran. (3 > 1 == true)
■ Iterasi 5:
47, 19, 12, 5, 3, 1 –> Ada pertukaran. (19 > 47 == false)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (19 > 12 == true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (12 > 5 ==true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (5 > 3 == true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (3 > 1 == true)
■ Iterasi 6:
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (47 > 19 == true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (19 > 12 == true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (12 > 5 == true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (5 > 3 == true)
47, 19, 12, 5, 3, 1 –> Tidak ada pertukaran. (3 > 1 == true)
■ Jadi, hasil akhir deretan bilangan di atas setelah diurutkan dengan algoritma Bubble Sort secara
Descending ialah [47, 19, 12, 5, 3, 1]
Selection Short
■ Digunakan atas dasar gagasan memilih elemen maksimum/minimum dari larik, lalu
menempatkan elemen maksimum /minimum itu pada awal atau akhir larik (elemen
terujung). Selanjutnya elemen terujung tersebut “diisolasi” dan tidak disertakan
pada proses selanjutnya. Proses yang sama diulang untuk elemen larik yang tersisa,
yaitu memilih elemen maksimum/minimum berikutnya dan mempertukarkannya
dengan elemen terujung larik sisa.
■ Sebagaimana halnya pada algoritma pengurutan gelembung, proses memilih nilai
maksimum/minimum dilakukan pada setiap pass. Jika larik berukuran N, maka
jumlah pass adalah N-1.
Misalkan ada data-data sebagai berikut :5,34, 32, 1
Daftar bilangan diatas masih belum urut dari kecil ke besar. Kita ingin melakukan pengurutan dari
yang terkecil sampai yang terbesar dari 3 data tersebut.
Langkah pertama , membandingkan satu persatu sampai dengan yang terkakhir. Langkah-
langkahnya sebagai berikut :
Langkah pertama :
Pembanding Posisi
5<34 1
5<32 1
5<1 4
Tukar data pada posisi 1 dengan data posisi 4
Hasil sementara : 1, 34,32,5
Langkah Kedua :
Pembanding Posisi
34>32 3
32>5 4
Tukar data pada posisi 2 dengan data posisi 4
Hasil akhir : 1, 5, 32, 34
Proses pengurutan data di atas memerlukan 2 kali perulangan.
LATIHAN
■ Jelaskan Algoritma Pencarian kemudian buat program untuk pencarian nilai
tertentu pada Array dengan menggunakan
a. Pembanding dengan peubah Boolean
b. Pembanding tanpa peubah Boolean

■ Jelaskan proses selection berikut ini, dengan algoritma dan program

Anda mungkin juga menyukai