BAHASA PEMROGRAMAN 1
(PERTEMUAN 3)
ARRAY
KUMPULAN SOAL LATIHAN
PREPARED BY CHANDRA 092110187
PENGENALAN ARRAY
Array dari Pesawat
Array dari Serangga
Array dari Kartu
ARRAY
Seperti yang Anda ketahui, variabel
hanya bisa menampung 1 data saja. Jika ingin menampung data lebih banyak,
maka variabel juga di-deklarasikan juga banyak. Oleh karena itu, dapat
digunakan Array.
Array adalah sekelompok data yang bertipe sama.
Array bersifat Static, walaupun bisa diubah jadi Dynamic.
PERATURAN DALAM ARRAY
Peraturan dalam penggunaan array:
Tidak ada assignment.
Gunakan perulangan untuk memasukkan data ke tiap elemen array.
Tidak ada perbandingan.
Gunakan perulangan untuk membandingan antara 2 elemen.
Tidak ada operasi aritmatika.
Gunakan perulangan untuk melakukan operasi aritmatika dalam array.
A[0] = A[1]
A[1] <= A[2]
FORMAT UMUM ARRAY
Format umum:
<tipe data> <nama variabel> [jumlah elemen];
Contoh:
int n [20]; // n bisa menampung
// 20 data (elemen).
char nama [5]; // nama bisa menampung
// 5 elemen. float jumlah [50];
PENGISIAN NILAI ARRAY
Nilai elemen array dapat diisi seperti konstanta.
Contoh:
int n [5]; // deklarasi array
n [0] = 0; // elemen pertama 0
n [4] = 15; // elemen kelima 15
int k [5] = {1,2,3,4}; // pengisian langsung char nama [ ] = “Hello”; // inisialisasi string
PENGAKSESAN NILAI ARRAY
Misalkan Anda telah mendeklarasikan dan mengisi nilai array seperti contoh: int n [5] = {1,2,3,4,5};
Maka untuk mengakses nilai ke-3 dalam variabel n, dapat menggunakan n[2].
(Ingat! indeks array selalu dimulai dari 0)
KETIK PROGRAM (1)
#include <iostream.h> int main()
{
int jarak [ ] = {44, 720, 96, 468, 6};
cout << “Nilai posisi 2 = " << jarak [1] << endl; cout << “Nilai posisi 5 = " << jarak [4] << endl; system(“pause”);
PENGGUNAAN ARRAY DENGAN
PERULANGAN (KETIK PROGRAM)
Pahami dan Apa hasil output dari program dibawah?
#include <iostream.h> int main() { int angka [5] = {4,6,1,7,3}; int k; for (k=0; k<5; k++) cout << angka [k] << “ “; system(“pause”); }
PEMBEDAHAN PROGRAM
int angka [5] = {4,6,1,7,3};
Pendeklarasian variabel angka yang bertipe integer dan memiliki 5 elemen, yang mana indeks 0 bernilai 4 hingga
indeks 4 bernilai 3.
int k;
Variabel k digunakan untuk perulangan. Setiap perulangan, harus bertipe integer.
PEMBEDAHAN PROGRAM
for (k=0; k<5; k++)for merupakan salah satu statement untuk perulangan.
k=0 berarti perulangan dimulai dari 0.
k<5 berarti perulangan berakhir hingga ke-4.
k++ berarti perulangan akan bertambah 1.
cout << angka [k] << “ “;
cout akan mengeluarkan output dari indeks angka yang dihasilkan oleh perulangan (nilai k).
Ketika k bernilai 0, maka akan ditampilkan 4.
FLOWCHART PROGRAM
START int angka [5] int k k=0 k<5? cetak angka [k] k++ END int angka [5] = {4,6,1,7,3}; int k; YES NO for (k=0;k<5;k++) cout << angka [k] << “ “;INTERAKSI DENGAN USER
Kita telah melihat bagaimana pendeklarasian array, cara mengisi nilai array, dan
menampilkan output dari array (menampilkan output merupakan salah satu aspek untuk
berinteraksi dengan user).
Ketika Anda ingin mendapatkan nilai array dari user, pertama sekali tentukan tipe data yang akan digunakan. Selanjutnya, tentukan
seberapa banyak jumlah elemen yang akan dipakai oleh user.
Setiap elemen akan diletakkan di masing-masing index yang telah ditentukan.
KETIK PROGRAM (2)
Perhatikan code listing dibawah!
#include <iostream.h>
int main() {
int page [5];
cout << “Masukkan jumlah halaman dari buku\n“; cout << "Buku 1: "; cin >> page [0];
cout << "Buku 4: "; cin >> page [3]; cout << "\nHasil Input Halaman Buku";
cout << "\nBuku 1: " << page [0] << “ halaman\n"; cout << "\nBuku 4: " << page [3] << " halaman\n"; system (“pause”);
PEMBEDAHAN PROGRAM
int page [5];Pendeklarasian variabel array.
cout << “Masukkan jumlah halaman dari buku\n“;
cout << "Buku 1: "; cin >> page [0];
Program akan menampilkan output “Buku 1: “ yang mana akan menunggu input dari user. Hasil input user akan disimpan di variabel page indeks ke-1 (page [0]).
cout << "Buku 4: "; cin >> page [3];
Sama seperti diatas, namun program akan
menampilkan output “Buku 4: “. Hasil input akan disimpan di indeks ke-4 (page [3]).
PEMBEDAHAN PROGRAM
cout << "\nHasil Input Halaman Buku";
cout << "\nBuku 1: " << page [0] << “ halaman\n"; Program akan menampilkan output “Buku 1: “ yang
disertai hasil input user yang telah disimpan di page [0]
dan diakhiri dengan output “ halaman”.
cout << "\nBuku 4: " << page [3] << " halaman\n";
Sama seperti diatas, namun menampilkan output “Buku 4: “ yang juga disertai input user di page [3] dan diakhiri dengan “ halaman”.
system(“pause”);
ARRAY 2 DIMENSI
Data yang disimpan dalam baris dan kolom biasanya disimpan dalam array 2 Dimensi.
Pendeklarasian array 2 dimensi:
<tipe data> <nama> <jlh baris> <jlh kolom>; char nama [5] [5];
int nilai [10] [10];
CONTOH PENGGUNAAN ARRAY 2
DIMENSI (PENGISIAN & INDEKS)
#include <iostream.h> int main()
{
double distance [2] [4] = {44.14, 720.52, 96.08, 468.78, 6.28, 68.04, 364.55, 6234.12}; cout << "Members of the array";
cout << "\nDistance [0][0]" << ": " << distance[0][0]; cout << "\nDistance [0][1]" << ": " << distance[0][1]; cout << "\nDistance [0][2]" << ": " << distance[0][2]; cout << "\nDistance [0][3]" << ": " << distance[0][3]; cout << "\nDistance [1][0]" << ": " << distance[1][0]; cout << "\nDistance [1][1]" << ": " << distance[1][1]; cout << "\nDistance [1][2]" << ": " << distance[1][2]; cout << "\nDistance [1][3]" << ": " << distance[1][3]; cout << endl;
system(“pause”); }
KETIK PROGRAM (3)
Pahami dan Apa output dari program dibawah?
#include <iostream.h>
int main() {
int bilangan [10] [10];
int baris; int kolom;
for (baris = 0; baris < 10 ; baris++)
for (kolom = 0; kolom < 10; kolom++)
bilangan [baris] [kolom] = (baris+1) * (kolom+1);
for (baris = 0; baris < 10 ; baris++)
for (kolom = 0; kolom < 10; kolom++) cout << bilangan [baris] [kolom] << '\t'; system("pause");
MASALAH UTAMA DALAM ARRAY
1. Kelebihan elemen dalam array.
Kelebihan elemen memakan memory yang cukup banyak.
2. Fixed size.
Kebanyakan array bersifat static, sehingga ukurannya tidak dapat berubah.
3. Buffer overflow.
Jika menambah data yang melebihi elemen array, maka akan terjadi buffer overflow
CONTOH 1
Buatlah program dengan array
untuk menampilkan nilai
seperti format dibawah:
1 2 3 4 5 6 7 8 9 10
CONTOH 2
Buatlah program dengan array untuk
mencetak 5 bilangan yang diinput
oleh user!
Contoh Output: Masukkan Bilangan: 90 Masukkan Bilangan: 70 Masukkan Bilangan: 10 Masukkan Bilangan: 45 Masukkan Bilangan: 1CONTOH 3 ARRAY
Ubahlah algoritma dibawah menjadi
program kecil (tidak ada input user & deklarasi variabel):
for i ← 1 to length [A] do
for j ← length [A] downto i+1 do
if A[j] < A[j-1] then
DALAM BAHASA C / C++
for (i=0; i<n; i++)
for (j=0; j<n-1; j++) if (array [j+1] > array [j]) { temp = array [j]; array [j] = array [j+1]; array [j+1] = temp; }
KUIS ARRAY
1.
Buatlah program dengan array
untuk mencetak 3 nama dan
jurusan dari input user!
2.
Buatlah program dengan array
untuk mencari bilangan
terbesar dari n data yang
diinput oleh user!
KUIS ARRAY
3. Modifikasilah contoh nomor 3 sehingga
BONUS 1 (SELECTION SORT)
Selection Sort merupakan algoritma sorting yang kedua setelah Bubble Sort.
Selection Sort dikenal akan kemudahannya dan juga memiliki kemampuan yang lebih dibanding sorting yang lain dalam situasi tertentu.
Cara kerja selection sort:
1. Cari nilai minimum dalam indeks array. 2. Tukarkan nilainya di indeks pertama.
3. Diulang terus kedua langkah diatas (dimulai dari
posisi indeks kedua dan bertambah 1 setiap kali tukar posisi).
BONUS 1 (SELECTION SORT)
Fakta tentang Selection Sort:
1. Selection sort memiliki kemampuan
yang jauh lebih baik dibanding Bubble Sort dan Gnome Sort, tetapi secara
umum, kalah dari Insertion Sort.
2. Selection Sort kurang mampu
menangani array dalam jumlah besar dan kalah dari Merge Sort.
BONUS 1 (SELECTION SORT)
for (i = 0; i < n - 1; i++) { minIndex = i; for (j = i + 1; j < n; j++) {if (array [j] < array [minIndex]) minIndex = j;
}
if (minIndex != i) {
temp = array [i];
array [i] = array [minIndex]; array [minIndex] = temp; }
BONUS 2 (INSERTION SORT)
Insertion sort merupakan algoritma sorting yang membandingkan elemen yang ada di dalam array hanya 1 kali cek saja.
Cara kerja Insertion Sort:
1. Tentukan index minimum.
2. Bandingkan dengan elemen sebelumnya.
3. Jika elemen sebelumnya lebih besar, maka isi
nilai dengan nilai index minimum.
BONUS 2 (INSERTION SORT)
Fakta tentang Insertion Sort:
1. Lebih efektif untuk menangani data
array yang berjumlah sedikit dan lebih baik dari Bubble Sort & Selection Sort.
2. Langsung dilakukan sorting begitu data
diterima.
3. Kurang efisien dalam data array yang
berjumlah banyak dibanding Quick Sort, Heap Sort, atau Merge Sort.
BONUS 2 (INSERTION SORT)
for (i = 1; i < n; i++) {
j = i;
while (j > 0 && array [j - 1] > array [j]) { temp = array [j]; array [j] = array [j - 1]; array [j - 1] = temp; j--; } }
BONUS 3 (SHELL SORT)
Dikembangkan tahun 1959 oleh Donald
Shell, algoritma shell sort cepat dalam menangani array dan mudah di-coding.
Karena Shell Sort dibuat berdasarkan
Insertion Sort yang telah diperbarui, maka cara kerjanya juga tidak jauh berbeda.
Shell Sort dapat menangani beberapa data sekaligus, sedangkan Insertion Sort hanya satu-persatu untuk pengurutan datanya.
BONUS 3 (SHELL SORT)
BONUS 3 (SHELL SORT)
Fakta tentang Shell Sort:
1. Merupakan pengembangan dari
Insertion Sort.
2. Dapat menangani data hingga 5000
elemen.
3. Masih lambat dalam menangani data
banyak dibanding dengan Quick Sort,
BONUS 3 (SHELL SORT)
d = length; do {
d = (d + 1)/2;
for (i =0; i < (length - d); i++) { if (array[i + d] > array[i]) { tmp = array[i+d]; array[i + d] = array[i]; array[i] = tmp; } } } while(d > 1);
BONUS 4 (HEAP SORT)
Heap Sort merupakan pengembangan dari Selection Sort yang
membandingkan antara tiap elemen.
Heap Sort akan mengecek data terbesar dan mengurutkannya dibagian belakang.
Heap Sort dapat membandingkan data lebih dari 1, sehingga dapat
BONUS 4 (HEAP SORT)
Fakta tentang Heap Sort:
1. Heap Sort selalu bersaing dengan
Quick Sort.
2. Heap Sort kurang handal dalam
menangani data di komputer yang
lambat. Tidak seperti Merge Sort yang mudah beradaptasi dengan
BONUS 4 (HEAP SORT)
# heapify
for i = n/2:1, sink(a,i,n)
→ invariant: a[1,n] in heap order
# sortdown for i = 1:n, swap a[1,n-i+1] sink(a,1,n-i)
→ invariant: a[n-i+1,n] in final position end # sink from i in a[1..n]
function sink(a,i,n):
# {lc,rc,mc} = {left,right,max} child index lc = 2*i
if lc > n, return # no children rc = lc + 1
mc = (rc > n) ? lc : (a[lc] > a[rc]) ? lc : rc if a[i] >= a[mc], return # heap ordered swap a[i,mc]
BONUS 5 (MERGE SORT)
Merge sort adalah algoritma sorting yang bersifat perbandingan. Dalam
pelaksanaannya, sorting ini stabil,
artinya menggantikan input order dari elemen yang sama dalam output yang telah terurut.
Merge Sort dikembangkan oleh John von Neumann tahun 1945.
BONUS 5 (MERGE SORT)
Fakta tentang Merge Sort:
1. Merge Sort baik digunakan untuk
mengurutkan data linked list dibanding
Quick Sort dan Heap Sort.
2. Merge Sort masih lambat dibanding
Quick Sort dalam menangani data yang
bersifat pointer array (RAM-Based Array).
BONUS 5 (MERGE SORT)
# split in half m = n / 2 # recursive sorts sort a[1..m] sort a[m+1..n]# merge sorted sub-arrays using temp array b = copy of a[1..m]
i = 1, j = m+1, k = 1 while i <= m and j <= n,
a[k++] = (a[j] < b[i]) ? a[j++] : b[i++]
→ invariant: a[1..k] in final position
while i <= m,
a[k++] = b[i++]