Anda di halaman 1dari 75

Accelerat ing t he world's research.

Laporan Akhir Algoritma &


Pemrograman II
Mergina Larasati

Related papers Download a PDF Pack of t he best relat ed papers 

Modul Prakt ikum St rukt ur Dat a


Wahju T. Saput ro

Algorit ma dan Pemrograman 2 Pert emuan Ke-1 Array (Larik


Muhammad Ramdani

Modul St rukt ur Dat a Lengkap


Irfan Fahrurrozi
Nilai Paraf

PRAKTIKUM

ALGORITMA DAN PEMROGRAMAN II

LAPORAN AKHIR

Disusun Oleh:

Ketua : Ari Saeful Rahman (201512015)


Anggota 1 : Mergina Larasati (201512034)
Anggota 2 : Sri Ayu Purwanti (201512093)
Kelas : Pagi 1
Dosen : Daniel Alexander O. T., S.T.

PROGRAM STUDI TEKNIK INFORMATIKA

SEKOLAH TINGGI TEKNOLOGI BONTANG

KALIMANTAN TIMUR

2016
HALAMAN PENGESAHAN

LAPORAN AKHIR

ALGORITMA DAN PEMROGRAMAN II

Disusun oleh :

Ari Saeful Rahman (201512015)


Mergina Larasati (201512034)
Sri Ayu Purwanti (201512093)

Telah diperiksa dan disetujui oleh Dosen

Pada tanggal : Juni 2016

Mengetahui,

Dosen Pengampu

Daniel Alexander O. T., S.T.

NUPN. 9911621977

i
KATA PENGANTAR

Puji syukur penulis panjatkan kehadirat Tuhan Yang Maha Esa atas
limpahan rahmat dan kasih karunia-NYA sehingga penulis dapat menyelesaikan
laporan akhir praktikum Algoritma Dan Pemrograman II.
Selama penyusunan laporan akhir ini,tidak lepas dari dukungan berbagai
pihak dan mengucapkan terima kasih kepada:
1. Tuhan YME yang selalu senantiasa memberikan nikmat, kekuatan dan
kesehatan selama penyelesaian tugas akhir ini.
2. Orang Tua yang memberikan semangat, do’a dan dukungan.
3. Dosen yang telah memberikan pengarahan dan penjelasan dalam praktikum
ini.
Penulis menyadari bahwa dalam penyusunanlaporan akhir ini masih banyak
kekurangan dan jauh dari sempurna. Untuk itu penulismengharapkan kritik dan
saranyang membangun.
Semoga apa yang didapat dari laporan akhir ini dapat bermanfaat bagi
penulis dan para pembaca.Semoga Tuhan Yang Maha Esa selalu membimbing
kita dalam menyelami dan mengamalkan ilmu-Nya untuk menuju kehidupan yang
lebih baik.

Bontang, Juni 2016

Penulis

ii
DAFTAR ISI

HALAMAN PENGESAHAN ................................................................................ i


KATA PENGANTAR ........................................................................................... ii
DAFTAR ISI ......................................................................................................... iii
LAPORAN HARIAN I ........................................................................................ vi
BAB I PENDAHULUAN ...................................................................................... 1
1.1.Latar Belakang Masalah ...................................................................................... 1
1.2.Rumusan Masalah ............................................................................................... 1
1.3.Batasan Masalah ................................................................................................. 2
1.4.Tujuan Praktikum ................................................................................................ 2
BAB II DASAR TEORI ........................................................................................ 3
2.1.Array .................................................................................................................... 3
A.Array Berdimensi Satu ........................................................................................... 3
B.Array Berdimensi Dua ............................................................................................ 4
C.Array Berdimensi Banyak ....................................................................................... 6
D.Array Sebagai Parameter ....................................................................................... 8
BAB III PEMBAHASAN.................................................................................... 11
3.1.Array Dua Dimensi ............................................................................................ 11
3.2.Tampilan Row Major Order & Column Major Order Pada Array Dua Dimensi. 13
3.3.Menginputkan Nilai Array Oleh User Pada Array Dua Dimensi ........................ 14
3.4.Menginputkan Nilai Ordo Oleh User Pada Array Dua Dimensi ......................... 16
3.5.Mengoprasikan Aritmatika (Penjumlahan, Pengurangan, Dan Perkalian
Kedalam Matriks (Array Dua Dimensi))................................................................... 17
BAB IV PENUTUP ............................................................................................. 21
4.1.Kesimpulan ........................................................................................................ 21
4.2.Saran ................................................................................................................. 21
LAPORAN HARIAN II...................................................................................... vii
BAB I PENDAHULUAN .................................................................................... 21
1.1.Latar Belakang Masalah .................................................................................... 21
1.2.Rumusan Masalah ............................................................................................. 22
1.3.Batasan Masalah ............................................................................................... 22
1.4.Tujuan Praktikum .............................................................................................. 22

iii
BAB II DASAR TEORI ...................................................................................... 23
2.1.Record ............................................................................................................... 23
2.2.Ciri Khas Fungsi Rekursif ................................................................................... 23
2.3.Kekurangan fungsi rekursif ............................................................................... 23
2.4.Secara umum gunakan penyelesaian rekursif hanya jika: ................................ 23
2.5.Konsep Rekursif................................................................................................. 23
BAB III PEMBAHASAN.................................................................................... 25
3.1.Record ............................................................................................................... 25
3.2. Tampilan Data Mahasiswa menggunakan Record / Struct oleh User .............. 26
3.3.Menginputkan data mahasiswa menggunakan Record/Struck dengan
menginputkan jumlah data ..................................................................................... 27
3.4.Menginputkan data mahasiswa menggunakan Record/Struck dengan
menginputkan jumlah data, Kode Pelajaran, jurusan dan nilai. ............................. 30
3.5.Rekursif ............................................................................................................. 32
BAB IV PENUTUP ............................................................................................. 36
4.1 Kesimpulan ........................................................................................................ 36
4.2 Saran.................................................................................................................. 36
LAPORAN HARIAN III ................................................................................... viii
BAB I PENDAHULUAN .................................................................................... 37
1.1.Latar Belakang Masalah .................................................................................... 37
1.2.Rumusan Masalah ............................................................................................. 40
1.3.Batasan Masalah ............................................................................................... 40
1.4.Tujuan Praktikum .............................................................................................. 40
BAB II DASAR TEORI ...................................................................................... 41
2.1.Searching ........................................................................................................... 41
2.1.Sorting ............................................................................................................... 41
A.Metode pengurutan langsung ............................................................................. 40
B.Metode pengurutan tidak langsung .................................................................... 40
BAB III PEMBAHASAN.................................................................................... 42
3.1.Perangkat Yang Digunakan ............................................................................... 42
3.2.Definisi Searching .............................................................................................. 42
3.3.Pencarian Sequential (Sequential Search) ........................................................ 42
3.4.Pencarian Biner (Binary Search) ........................................................................ 43

iv
3.5.Definisi Sorting .................................................................................................. 46
3.6.Metode Pengurutan Data ................................................................................. 46
a.Bubble Sort ........................................................................................................... 46
b.Insertion Sort........................................................................................................ 46
c.Selection Sort........................................................................................................ 47
d.Shell Sort .............................................................................................................. 50
e.Quick Sort ............................................................................................................. 50
f.Merge Sort ............................................................................................................ 50
BAB IV PENUTUP ............................................................................................. 61
4.1 Kesimpulan ........................................................................................................ 61
4.2 Saran.................................................................................................................. 61
KESIMPULAN UMUM ...................................................................................... ix
DAFTAR PUSTAKA ........................................................................................... xi

v
PRAKTIKUM ALGORITMA DAN PEMROGRAMAN II

LAPORAN HARIAN I

PROGRAM STUDI TEKNIK INFORMATIKA

SEKOLAH TINGGI TEKNOLOGI BONTANG

KALIMANTAN TIMUR

2016

vi
BAB I

PENDAHULUAN

1.1.Latar Belakang Masalah


Ilmu Teknik Informatika adalah suatu ilmu yang sangat berhubungan erat
dengan teknologi informasi, dimana penerapannya mengarah kepada kemajuan
teknologi masa depan.Perkembangan dunia teknologi informasi saat inisangat
cepat karena di dorong oleh kebutuhan data dan informasi. Data dan informasi
dibutuhkan untuk kelangsungan produksi perusahaan, lembaga maupun kemajuan
sebuah instansi. Apalagi di era globalisasi teknologi informasi sangat menunjang
kehidupan di dunia global. Dan persaingan di dunia kerja pun menjadi sangat
ketat. Dan seiring perkembangan zaman lingkungan yang semakin luas dan
banyak diminati, juga dapat digunakan untuk menghasilkan uang adalah dunia
pemrograman komputer.
Dalam dunia pemrograman komputer, dikenal algoritma dan banyak bahasa
pemrograman, seperti C++, Pascal, Basic, Java, dan lain-lain. Oleh karena itulah,
yang akan dibahas dalam makalah ini adalah Algoritma dan Pemrograman dalam
c++ khususnya Array. Dengan adanya kemajuan Tekhnologi di dunia ini akal
pikiran manusia semakin mahir dalam menciptakan sesuatu yang bermanfaat bagi
kehidupan mereka, salah satunya dalam pembuatan program – program yang
sangat membantu mereka dalam menyelesaikan pekerjaan mereka dengan cepat,
baik dan memuaskan, maka dari itu makalah ini menyusun mengenai array. Array
merupakan salah satu bagian dari kemajuan zaman yang betul betul terlihat
manfaatnya.Array bisa juga disebut sebagai salah satu program yang terlahir dari
dunia teknologi lewat pola pikir manusia yang bermanfaat untuk menyelesaikan
suatu penghitungan.

1.2.Rumusan Masalah
Berdasarkan latar belakang masalah tersebut, maka rumusan masalah dari
percobaan ini adalah :
1. Apa yang dimaksud dengan Array dua berdimensi?

1
2. Bagaimana tampilan rowmajor order & column major order pada Array dua
dimensi?
3. Bagaimana cara menginputkan nilai array oleh user pada Array dua dimensi?
4. Bagaimanacara menginputkan nilai ordo oleh user pada Array dua dimensi?
5. Bagaimana cara mengoprasikan aritmatika (penjumlahan, pengurangan, dan
perkalian kedalam matriks (Array dua dimensi) ?

1.3.Batasan Masalah
Mengingat banyaknya materi tentang Array, maka dibuatlah beberapa batasan
masalahnya sebagai berikut:
1. Praktikum ini hanya membahas aturan dasar Array khususnya Array
berdimensi dua dengan lanngkah – langkah pengerjaanya.
2. Praktikum ini hanya mempraktekkan penggunaaan Array khususnya Array
berdimensi dua dalam operasi aritmatika dengan menggunakan aplikasi C++.

1.4.Tujuan Praktikum
Tujuan dari praktikum ini adalalah sebagai berikut :
1. Sebagai syarat memenuhi tugas praktikum Mata kuliah Algoritma dan
Pemrograman 2
2. Sebagai bahan pembelajaran mengenai Array
3. Dapat memahami dan mengerti:
a. Definisi array itu sendiri
b. Aturan – aturan dasar Array dalam bahasa pemrograman C++
c. Jenis – jenis tipe data Array
d. Menggunakan array 2 dimensi dalam berbagai macam pengolahan data
matriks.

2
BAB II

DASAR TEORI

2.1.Array
Dalam beberapa literatur, array sering disebut (diterjemahkan) sebagai larik.
Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan tertentu
yang menggunakan sebuah nama yang sama. Nilai-nilai data di suatu array
disebut dengan elemen-elemen array.Letak urutan dari elemen-elemen array
ditunjukkan oleh suatu subscript atau indeks.Array bisa berupa array berdimensi
satu, dua, tiga atau lebih. Array berdimensi satu (one-dimensional array)
mewakili bentuk suatu vektor. Array berdimensi dua (twodimensional array)
mewakili bentuk dari suatu matriks atau table. Array berdimensi tiga (three-
dimensional array) mewakili bentuk suatu ruang.

A. Array Berdimensi Satu


Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa :
tipe_data nama_var[ukuran];
dengan :
 tipe_data : untuk menyatakan tipe dari elemen array, misalnya int, char,
float.
 nama_var : nama variabel array
 ukuran : untuk menyatakan jumlah maksimal elemen array.
Contoh pendeklarasian array :
float nilai_tes[5];
menyatakan bahwa array nilai_tes mengandung 5 elemen bertipe float.
 Mengakses Elemen Array Berdimensi Satu
Pada C, data array akan disimpan dalam memori yang berurutan. Elemen pertama
mempunyai indeks bernilai 0. Jika variabel nilai_tes dideklarasikan sebagai
array dengan 5 elemen, maka elemen pertama memiliki indeks sama dengan 0,
dan elemen terakhir memiliki indeks 4. Bentuk umum pengaksesan array adalah
sbb :
nama_var[indeks]

3
sehingga,untuk array nilai_tes, maka :
nilai_tes[0] => elemen pertama dari nilai_tes
nilai_tes[4] => elemen ke-5 dari nilai_tes
Contoh :
nilai_tes[0] = 70;
scanf(“%f”, &nilai_tes[2]);
Contoh pertama merupakan pemberian nilai 70 ke nilai_tes[0]. Sedangkan
contoh 2 merupakan perintah untuk membaca data bilangan dari keyboard dan
diberikan ke nilai_tes[2]. Pada contoh 2 ini
&nilai_tes[2]
berarti “alamat dari nilai_tes[2]”. Perlu diingat bahwa scanf() memerlukan
argumen berupa alamat dari variabel yang digunakan untuk menyimpan nilai
masukan.
 Inisialisasi Array Berdimensi Satu
Sebuah array dapat diinisialisasi sekaligus pada saat dideklarasikan.Untuk
mendeklarasikan array, nilai-nilai yang diinisialisasikan dituliskan di antara
kurung kurawal ({}) yang dipisahkan dengan koma.
int jum_hari[12] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 Beberapa Variasi dalam Mendeklarasikan Array
Ada beberapa variasi cara mendeklarasikan sebuah array (dalam hal ini
yang berdimensi satu), di antaranya adalah sebagai berikut :
 int numbers[10];
 int numbers[10] = {34, 27, 16};
 int numbers[] = {2, -3, 45, 79, -14, 5, 9, 28, -1, 0};
 char text[] = "Welcome to New Zealand.";
 float radix[12] = {134.362, 1913.248};
 double radians[1000];

B. Array Berdimensi Dua


Array berdimensi satu dapat disimpan pada sebuah array berdimensi dua.
Pendeklarasian array berdimensi dua adalah sebagai berikut :
int data_lulus[4][3];
Nilai 4 untuk menyatakan banyaknya baris dan 3 menyatakan banyaknya kolom.

4
Gambar 2.1 memberikan ilustrasi untuk memudahkan pemahaman tentang array
berdimensi dua.

Gambar 2.1.Array dimensi dua


Sama halnya pada array berdimensi satu, data array aka ditempatkan pada memori
yang berurutan. Perhatikan Gambar 2.1
 Mengakses Elemen Array Berdimensi Dua
Array seperti data_lulus dapat diakses dalam bentuk data
lulus[indeks pertama, indeks kedua] :
(1) data_lulus[0][1] = 540;
merupakan instruksi untuk memberikan nilai 540 ke array data_lulus untuk indeks
pertama = 0 dan indeks kedua bernilai 1.
(2) printf(“%d”,data_lulus[2][0]);
merupakan perintah untuk menampilkan elemen yang memiliki indeks pertama =
2 dan
indeks kedua = 0.
Perhatikan contoh potongan program di bawah ini.
/* Memberikan data ke array */
 data_lulus[0][0] = 80;
 data_lulus[0][1] = 540;
 data_lulus[0][2] = 1032;
INT HURUF_A[8][8] = {
{ 0, 1, 1, 1, 1, 1, 0, 0 } ,
{ 0, 1, 0, 0, 0, 1, 0, 0 } ,
{ 0, 1, 0, 0, 0, 1, 0, 0 } ,
{ 1, 1, 1, 1, 1, 1, 1, 0 } ,

5
{ 1, 1, 0, 0, 0, 0, 1, 0 } ,
{ 1, 1, 0, 0, 0, 0, 1, 0 } ,
{ 1, 1, 0, 0, 0, 0, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0 }
};
atau bisa juga ditulis sebagai berikut :
int huruf_A[8][8] =
{ 0, 1, 1, 1, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0
};

C. Array Berdimensi Banyak


memungkinkan untuk membuat array yang dimensinya lebih dari dua. Bentuk
umum pendeklarasian array berdimensi banyak :
tipe nama_var[ukuran 1][ukuran2}…[ukuranN];
sebagai contoh :
int data_huruf[2][8][8];
merupakan pendeklarasian array data_huruf sebagai array berdimensi tiga. Sama
halnya dengan array berdimensi satu atau dua, array berdimensi banyak juga bisa
diinisialisasi. Contoh inisialisasi array berdimensi tiga :

int data_huruf [2][8][8] =


{{ { 0, 1, 1, 1, 1, 1, 0, 0 } ,
{ 0, 1, 0, 0, 0, 1, 0, 0 } ,
{ 0, 1, 0, 0, 0, 1, 0, 0 } ,
{ 1, 1, 1, 1, 1, 1, 1, 0 } ,
{ 1, 1, 0, 0, 0, 0, 1, 0 } ,

6
{ 1, 1, 0, 0, 0, 0, 1, 0 } ,
{ 1, 1, 0, 0, 0, 0, 1, 0 } ,
{ 0, 0, 0, 0, 0, 0, 0, 0 }
},
{ {1, 1, 1, 1, 1, 1, 0, 0 } ,
{1, 0, 0, 0, 0, 1, 0, 0 } ,
{1, 0, 0, 0, 0, 1, 0, 0 } ,
{1, 1, 1, 1, 1, 1, 1, 0 } ,
{1, 1, 0, 0, 0, 0, 1, 0 } ,
{1, 1, 0, 0, 0, 0, 1, 0 } ,
{1, 1, 1, 1, 1, 1, 1, 0 } ,
{0, 0, 0, 0, 0, 0, 0, 0 }
} };
atau bisa juga ditulis menjadi
int data_huruf [2][8][8] = {
0, 1, 1, 1, 1, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0, 0,
0, 1, 0, 0, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 0, 0,
1, 0, 0, 0, 0, 1, 0, 0,
1, 0, 0, 0, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
1, 1, 0, 0, 0, 0, 1, 0,
1, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0 };

7
int i, j, k;
int data_huruf[2][8][8] =
{ {{ 0, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 1, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 } },
{{1, 1, 1, 1, 1, 1, 0, 0 },
{1, 0, 0, 0, 0, 1, 0, 0 },
{1, 0, 0, 0, 0, 1, 0, 0 },
{1, 1, 1, 1, 1, 1, 1, 0 },
{1, 1, 0, 0, 0, 0, 1, 0 },
{1, 1, 0, 0, 0, 0, 1, 0 },
{1, 1, 1, 1, 1, 1, 1, 0 },
{0, 0, 0, 0, 0, 0, 0, 0 } } };

D. Array Sebagai Parameter


Array juga dapat dilewatkan sebagai parameter fungsi.Sebagai contoh
ditujukan pada program sorting.c. Program digunakan untuk memasukkan
sejumlah data, kemudian data tersebut diurutkan naik(ascending) dan dicetak ke
layar.
Untuk melakukan sorting (proses pengurutan data), cara yang dipakai yaitu
metode buble sort (suatu metode pengurutan yang paling sederhana, dan memiliki
kecepatan pengurutan yang sangat lambat). Algoritma pada metode pengurutan
ini adalah sebagai berikut :
1. Atur i bernilai 0
2. Bandingkan x[i] dengan x[j], dg j berjalan dari i + 1 sampai dengan n-1.
3. Pada setiap pembandingan, jika x[i] > x[j], maka isi x[i] dan x[j] ditukarkan
4. Bila i < (n – 1), ulangi mulai langkah 2.

8
Catatan:
i = indeks array
x = nama array untuk menyimpan data
n = jumlah data
Algoritma diatas berlaku untuk pengurutan menaik (ascending). Untuk
pengurutan menurun (descending), penukaran dilakukan jika x[i] < x[j].
Penjelasan proses pengurutan terhadap 5 buah data ditunjukkan pada gambar 10.3
Data semula (sebelum pengurutan) adalah : 50,5 30,3 20,2 25,2 31,3
Setelah pengurutan menaik (secara ascending), hasil yang diharapkan berupa :
20,2 25,2 30,3 31,3 50,5

9
int i, j;
float smtr;
for(i=0; i<jumlah-1; i++)
for(j=i+1; j<jumlah; j++)
if(x[i] > x[j]) /* penukaran data */ {
smtr =x[i]; x[i] = x[j]; x[j] = smtr; }

10
BAB III

PEMBAHASAN

3.1. Array Dua Dimensi


Array dua dimensi merupakan array yang terdiri dari m buah baris dan n
buah kolom. Bentuknya dapat berupa matriks atau table
Pada perinsipnya matriks hampir sama dengan array. Matriks adalah
sekumpulan informasi bertipe sama yang setiap individu elemennya terdefinisi
berdasarkan dua indeks (yang biasanya dikonotasikan dengan baris dan kolom).
Indeks pada matriks harus mempunyai batasan dan sifat yang sama dengan
indeks pada array satu dimensi.
Sering dikatakan bahwa matriks adalah array dua dimensi, tapi patut
diperhatikan bahwa pengertian berdimensi dua (baris dan kolom) adalah dalam
pemikiran kita (penyajian logika).
Pengaturan letak elemen matriks dalam memori compute selalu tetap sebagai
deretan “sel yang linear”. Pengertian dua dimensi ini hanya untuk mempermudah
programmer dalam merancang programnya.
Secara umum dimensi dan banyaknnya elemen Array/Matriks sebenarnya
tidak dibatasi oleh Compiler, tetapi dibatasi oleh keterbatasan RAM yang
disediakan.
Karena matriks menggunakan memory internal.Struktur data ini praktis
untuk dipakai, namun memori yang dipakai besar.
Tabel 3.1 Tabel Perangkat yang digunakan
PERANGKAT KETERANGAN
ASUS Laptop
DEV C++ Software Editor
C++ Bahasa Pemrograman

Program menginput nilai (bilangan) ke dalam array dimensi dua dan


menampilkannya.
#include <iostream>
using namespace std;
main(){
int baris, kolom;
int matrik[2][3] ={{1,2,3}, {4,5,6}};

11
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<3; kolom++){
cout<< matrik[baris][kolom];
}
cout<<"\n";
}
}
Modul Program 3.1 ScriptMethod untuk Mengeksekusi array Dimensi Dua (Baris dan
kolom)

Output :

Gambar 3.1Output array Dimensi Dua (Baris dan kolom)

Penjelasan :
ScriptMethoddari modul program 3.1membahas tentang array Dimensi Dua
(Baris dan Kolom). Dalam script tersebut berguna untuk menampilkan nilai
matrik baris dan kolom berapapun nilai yang ingin kita inputkan asalkan sesuai
dengan dengan memasukkan program array int matrik [2] berarti baris dan [3]
berarti kolom dengan artian baris kebawah bernilai 2, dan kolom ke samping
bernilai 3 dan untuk scriptfor (baris=0; baris<2; baris++) berfungsi sebagai
batasan bahwa baris yang diberikan kurang dari 2, artinya tidak bisa melebihi 2
karena nilai masukkan yang diberikan untuk baris kebawah adalah 2. Dan untuk
scriptfor (kolom=0; kolom<3; kolom++) berfungsi sebagai batasan bahwa kolom
yang diberikan kurang dari 3, artinya tidak bisa melebihi dari nilai kolom yang
telah diberikan yaitu bernilai 3.

12
3.2. Tampilan Row Major Order & Column Major Order Pada Array Dua
Dimensi
Dalam komputasi,urutan baris utama dan kolombesar agar menjelaskan
metode untuk mengatur array multidimensi dalam penyimpanan linear seperti
memori. Dalam rangka barisutama,unsur-unsur berturut-turut dari baris array
bersebelahan di memori, dalam rangka kolombesar,unsur-unsur berturut-turut dari
kolom yang bersebelahan.Tata letak Array sangat penting untuk benar melewati
array antara program yang ditulis dalam bahasa yang berbeda. Hal ini juga
penting untuk kinerja saat melintasi sebuah array karena mengakses elemen array
yang bersebelahan di memori biasanya lebih cepat daripada mengakses elemen
yang tidak,karena caching. Dalam beberapa media seperti tape atau NAND flash
memory,mengakses secara berurutan adalah lipat lebih cepat daripada akses
nonsequential.
Program menginput nilai (bilangan) Row Major Order & Column Major
Order pada array dua dimensi.
#include <iostream>
using namespace std;
main(){
int baris, kolom;
int matrik[2][3] ={{1,2,3}, {4,5,6}};
cout<< "\nRow Major Order" << endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<3; kolom++){
cout<< matrik[baris][kolom];
}
cout<<"\n";
}
cout<<"\nColomn Major Order" << endl;
for (kolom=0; kolom<3; kolom++){
for (baris=0; baris<2; baris++){
cout<< matrik[baris][kolom] <<" ";
}
cout<< "\n";
}
}
Modul Program 3.2 ScriptMethod untuk Mengeksekusi Row Major Order & Column
Major Order pada Array Dimensi Dua

13
Output :

Gambar 3.2 Output Row & Column Major Order

Penjelasan :
ScriptMethoddari modul program 3.2membahas tentang Row Major Order &
Column Major Order. Dalam script tersebut berguna untuk menampilkan nilai
yang telah diinputkan sesuai dengan format yang diinginkan, script ini berfungsi
untuk membuat kolom kesamping dengan bernilai 3 dan baris kebawah bernilai 2
for (baris=0; baris<2; baris++){for (kolom=0; kolom<3; kolom++){cout<<
matrik[baris][kolom]; dan scriptini berfungsi untuk membuat kolom kesamping
bernilai 2 dan baris kebawah bernilai 3 for(kolom=0; kolom<3; kolom++){for
(baris=0; baris<2; baris++){cout<< matrik[baris][kolom] <<" ";}

3.3. Menginputkan Nilai Array Oleh User Pada Array Dua Dimensi
Pada dasarnya Program dibuat untuk mempermudah manusia untuk
melakukan suatu kegiatan, atau dalam artian membantu manusia untuk
mengerjakan tugas manusia agar menjadi mudah, maka itu program yang akan
dibahas adalah melakukan penginputan Nilai Array oleh user (Manusia) pada
Array Dua Dimensi, berikut scriptyang akan digunakan :
#include <iostream>
using namespace std;
main()
{
int baris, kolom;
int matrik[2][3];
cout<< "\n Input Nilai Matriks = " << endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<3; kolom++){

14
cout<< "matrik[" << baris <<"] [" << kolom <<"]=";
cin>> matrik[baris][kolom];
}
cout<<"\n";
}
cout<< "\n Row Major Order" << endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<3; kolom++){
cout<< matrik[baris][kolom];
}
cout<<"\n";
}
cout<<"\n Colomn Major Order" << endl;
for (kolom=0; kolom<3; kolom++){
for (baris=0; baris<2; baris++){
cout<< matrik[baris][kolom] <<" ";
} cout<< "\n";
}
}
Modul Program 3.3 ScriptMethod untuk Menginputkan Nilai Row Major Order &
Column Major Order Oleh User Pada Array Dua Dimensi

Output :

Gambar 3.3Output nilai Row Major Order & Row Major Order dengan input oleh user

Penjelasan :
Script yang digunakan sama saja, hanya yang membedakan adalah program
tersebut menggunakan input oleh user dengan scriptcout<< "\n Input Nilai
Matriks = " << endl;for (baris=0; baris<2; baris++){for (kolom=0; kolom<3;
kolom++){cout<< "matrik[" << baris <<"] [" << kolom <<"]=";cin>>
matrik[baris][kolom]; terlihat pembedanya hanya menggunakan cout << dan
untuk masukkan menggunakan cin>>.

15
3.4. Menginputkan Nilai Ordo Oleh User Pada Array Dua Dimensi

cout << "\nInput Nilai Matriks a" << endl;


for (i=0; i<barisa; i++){
for(j=0; j<koloma; j++){
cout << "\nElemen ke ["<< i <<"] ["<< j <<"]= ";
cin >> a [i][j];
}
cout << "\n";
}
cout << "masukan ordo matriks b: " << endl;
cout << "-------------------------" << endl;
cout << "Jumlah baris" << endl;
cin >> barisb;
cout << "jumlah kolom" << endl;
cin >> kolomb;
cout << "\nInput Nilai Matriks b" << endl;
for (i=0; i<barisb; i++){
for(j=0; j<kolomb; j++){
cout << "elemen ["<< i <<"] ["<< j <<"]= ";
cin >> b[i][j];}
cout << "\n";
}
cout << "\nTampilan Matrik a" << endl;
for (i=0; i<barisa; i++){
for(j=0; j<koloma; j++){
cout << a [i][j] << " ";
}cout << "\n";
}
cout << "\nTampilan Matrik b" << endl;
for (i=0; i<barisb; i++){
for(j=0; j<kolomb; j++){
cout << b [i][j] << ” ”;
jout << ”\n”;
}
}
Modul Program 3.4 ScriptMethod untuk Menginputkan Nilai ordo oleh user kedalam
array dimensi dua

16
Output :

Gambar 3.4Output Input nilai ordo oleh user kedalam array dimensi dua

Penjelasan:
Program yang dibahas berbeda dengan Array, karena materi tersebut
hanya menginput nilai Ordo kedalam Array dimensi dua, atau hanya
menentukan nilai ordo nya saja

3.5. Mengoprasikan Aritmatika (Penjumlahan, Pengurangan, Dan Perkalian


Kedalam Matriks (Array Dua Dimensi))

Program dibawah ini adalah Operasi Aritmatika kedalam matriks menggunakan


Array dua dimensi, berikut scriptMethod yang dibahas :
#include <iostream>
using namespace std;
main(){
int baris,kolom,a;
int matrik1[2][2];
int matrik2[2][2];
int matrik3[2][2];
int matrik4[2][2];
int matrik5[2][2];
cout<<"\nInput Nilai Matriks 1"<<endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
cout<<"matrik["<<baris <<"]["<<kolom <<"]=";
cin>> matrik1[baris][kolom];
}

17
cout<< "\n";
}

cout<<"\nInput Nilai Matriks 2"<<endl;


for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
cout<<"matrik["<<baris <<"]["<<kolom <<"]=";
cin>> matrik2[baris][kolom];
}
cout<< "\n";
}

//proses Penjumlahan Matriks


for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2; kolom++){
matrik3[baris][kolom]=matrik1[baris][kolom]+matrik2
[baris][kolom];
}
}
//proses pengurangan matriks
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
matrik4[baris][kolom]=matrik1[baris][kolom] -
matrik2[baris][kolom];
}
}
//proses perkalian matriks
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
matrik5[baris][kolom]=0;
for (a=0; a<2; a++){
matrik5[baris][kolom]+=matrik1[baris][a]*matrik2[a][kolom];
}
cout<<endl;
}
}
cout<<"\nTampilan Matriks 1"<<endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
cout<<matrik1[baris][kolom]<<" ";
}
cout<<"\n";
}
cout<<"\nTampilan Matriks 2"<<endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
cout<<matrik2[baris][kolom]<<" ";
}
cout<<"\n";
}
cout<<"\nHasil penjumlahan matriks "<<endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
cout<<matrik3[baris][kolom];
}
cout<<"\n";
}
cout<<"\nHasil Pengurangan Matriks"<<endl;
for (baris=0; baris<2; baris++){

18
for (kolom=0; kolom<2;kolom++){
cout<<matrik4[baris][kolom];
}
cout<<"\n";
}
cout<<"\nHasil Perkalian Matriks"<<endl;
for (baris=0; baris<2; baris++){
for (kolom=0; kolom<2;kolom++){
cout<<matrik5[baris][kolom];
}
cout<<"\n";
}

}
Modul Program 3.5script Operasi Aritmatika(Penjumlahan, Pengurangan, Dan Perkalian
Kedalam Matriks (Array Dua Dimensi))

Output :

19
Gambar 3.5 output Operasi Aritmatika(Penjumlahan, Pengurangan, Dan Perkalian
Kedalam Matriks (Array Dua Dimensi))

Penjelasan :
Script yang digunakan dari program diatas adalah
matrik3[baris][kolom]=matrik1[baris][kolom]+matrik2[baris][kolom]; untuk
melakukan proses pertambahan, dan untuk operasi pengurangan bisa
menggunakan matrik4[baris][kolom]=matrik1[baris][kolom]-
matrik2[baris][kolom]; untuk operasi perkalian dapat menggunakan
matrik5[baris][kolom]+=matrik1[baris][a]*matrik2[a][kolom]; dengan
menggunakan ketentuan ketentuan script diatas.

20
BAB IV

PENUTUP

4.1 Kesimpulan
Array adalah sekumpulan elemen dengan tipe data yang sama pada
memori yang lokasinya berurutan, namun dapat diakses secara terpisah dengan
menggunakan index sebagai penunjuk lokasi memori larik. Antara satu variabel
dengan variabel lain di dalam array dibedakan berdasarkan subscript( berupa
bilangan yang terdapat didalam kurung siku). Contoh Program diatas adalah
Array Dimensi dua, dalam Array dimensi dua array harus didefinisikan terlebih
dahulu, setelah itu dilakukan perulangan setiap dimensi dan terakhir perulangan
untuk menampilkan inputan. Sebenarnya array dimensi satu dan array dimensi
tidak jauh berbeda hanya saja array berdimensi dua terdiri dari beberapa baris dan
kolom yang bertipe data sama.
- Array dapat digunakan untuk menyimpan banyak data yang mempunyai
data sejenis.
- Data yang jenisnya berbeda tidak dapat ditempatkan pada satu array yang sama.
- Umumnya indeks array diawali dari indeks ke-0, sehingga jika ingin mengakses
data ke-1 pada array bisa kita aksesmenggunakan indeks data ke-0 pada array dan
seterusnya - Sebelum menggunakan array, perlu membuatnya dan
mendeklaraskannya terlebih dahulu.
- Array satu Dimensi mempunyai 1 nama tetapi memiliki banyak tempat dan
setiap tempat harus dibedakan, untuk membedakannya dibutuhkan penunjuk,
pentunjuk dapat berupa karakter(char) atau integer.
- Array yang sudah disimpan dalam penunjuk yang sama(berbentuk indeks),
isinya tidak akan hilang kecuali indeksnya diisi oleh nilai yang lain.

4.2 Saran
Saran yang dapat diberikan untuk pengembangan sistem ini selanjutnya adalah
sebagai berikut :
 Sebaiknya dalam membuat kode program perhatikan huruf besar dan huruf
kecilnya, karena C++ bersifat case sensitive. Selain itu, kita juga harus

21
memperhatikan compiler yang digunakan untuk menjalankan program
tersebut agar program berjalan sesuai keinginan kita tanpa adanya kesalahan-
kesalahan.
 Berikan kami saran atas laporan kami ini sehingga dilaporan berikutnya akan
lebih baik dari laporan ini.

22
PRAKTIKUM ALGORITMA DAN PEMROGRAMAN II

LAPORAN HARIAN II

PROGRAM STUDI TEKNIK INFORMATIKA

SEKOLAH TINGGI TEKNOLOGI BONTANG

KALIMANTAN TIMUR

2016

vii
BAB I

PENDAHULUAN

1.1.Latar Belakang Masalah


Ilmu Teknik Informatika adalah suatu ilmu yang sangat berhubungan erat
dengan teknologi informasi, dimana penerapannya mengarah kepada kemajuan
teknologi masa depan.Perkembangan dunia teknologi informasi saat inisangat
cepat karena di dorong oleh kebutuhan data dan informasi. Data dan informasi
dibutuhkan untuk kelangsungan produksi perusahaan, lembaga maupun kemajuan
sebuah instansi. Apalagi di era globalisasi teknologi informasi sangat menunjang
kehidupan di dunia global. Dan persaingan di dunia kerja pun menjadi sangat
ketat. Dan seiring perkembangan zaman lingkungan yang semakin luas dan
banyak diminati, juga dapat digunakan untuk menghasilkan uang adalah dunia
pemrograman komputer.
Dalam dunia pemrograman komputer, dikenal algoritma dan banyak bahasa
pemrograman, seperti C++, Pascal, Basic, Java, dan lain-lain. Oleh karena itulah,
yang akan dibahas dalam laporan ini adalah Algoritma dan Pemrograman dalam
c++ khususnya Record dan Fungsi Rekursif. Dengan adanya kemajuan
Tekhnologi di dunia ini akal pikiran manusia semakin mahir dalam menciptakan
sesuatu yang bermanfaat bagi kehidupan mereka, salah satunya dalam pembuatan
program – program yang sangat membantu mereka dalam menyelesaikan
pekerjaan mereka dengan cepat, baik dan memuaskan, maka dari itu laporan ini
menyusun mengenai Record dan Fungsi Rekursif. Untuk membuat program
biasanya dibutuhkan tipe data yang banyak dan bermacam-macam tipe. Seiring
dengan berjalanya waktu ditemukanya record yang berfungsi untuk
mengumpulkan beberapa tipe data yang berbeda (field) menjadi satu tipe yang
disebut dengan record. Kehadiran record dalam dunia pascal dianggap sebagai
berkah karena record dapat menyederhanakan beberapa tipe yang berbeda
sehingga akan menjadi lebih efisien dalam beberapa hal.

21
1.2.Rumusan Masalah
Berdasarkan latar belakang masalah tersebut, maka rumusan masalah dari
percobaan ini adalah :
1. Apa yang dimaksud dengan record?
2. Apa yang dimaksud dengan rekursif?
3. Bagaimanacara membuat record mahasiswa dan matakuliah?
4 Bagaimana cara membuat menu rekursif?

1.3.Batasan Masalah
Mengingat banyaknya materi tentang Record/rekursif, maka dibuatlah
beberapa batasan masalahnya sebagai berikut:
1. Praktikum ini hanya membahas aturan dasar Record dan Fungsi Rekursif
dengan lanngkah – langkah pengerjaanya.
2. Praktikum ini hanya mempraktekkan penggunaaan Record dan Fungsi
Rekursif dengan menggunakan aplikasi C++.

1.4.Tujuan Praktikum
Tujuan dari praktikum ini adalalah sebagai berikut :
1. Sebagai syarat memenuhi tugas praktikum Mata kuliah Algoritma dan
Pemrograman II
2. Sebagai bahan pembelajaran mengenai Record dan Fungsi Rekursif
3. Dapat memahami dan mengerti:
a. Definisi Record dan Fungsi Rekursif itu sendiri
b. Aturan – aturan dasar Record dan Fungsi Rekursif dalam bahasa
pemrograman C++.
c. Jenis – jenis tipe data Record dan Fungsi Rekursif.
d. Mampu membuat program menggunakan Reord.

22
BAB II

DASAR TEORI

2.1.Record
Record adalah elemen larik yang bertipe terstruktur. Dengan menggunakan
tipe data record, beberapa item data yang masing-masing dapat mempunyai tipe
data berbeda-beda dapat dikumpulkan. Masing-masing item data disebut dengan
field. Jadi record terdiri dari kumpulan field yang dapat berbeda tipe. Biasanya
suatu record berisi beberapa field untuk sebuah subyek tertentu.

2.2. Ciri Khas Fungsi Rekursif


 Fungsi rekursif selalu memiliki kondisi yang menyatakan kapan fungsi

tersebut berhenti. Kondisi ini harus dapat dibuktikan akan tercapai ,


karena jika tidak tercapai maka kita tidak akan dapat membuktikan bahwa
fungsi akan berhenti, yang berarti algoritma tidak benar
 Fungsi rekursif selalu memanggil dirinya sendiri sambil mengurangi atau
memecahkan data masukan setiap panggilannya. Hal ini penting, karena
tujuan utama dari rekursif adalah memecahkan masalah dengan
mengurangi masalah tersebut menjadi masalah-masalah kecil.

2.3. Kekurangan fungsi rekursif


 Memerlukan memory yang lebih banyak untuk menyimpan activation

record dan variabel lokal. Activation record diperlukan waktu proses


kembali kepada pemanggil
 Memerlukan waktu yang lebih banyak untuk menangani activation record.

2.4. Secara umum gunakan penyelesaian rekursif hanya jika:


 Penyelesaian sulit dilaksanakan secara iteratif.

 Efisiensi dengan cara rekursif sudah memadai.


 Efisiensi bukan masalah dibandingkan dengan kejelasan logika program

2.5. Konsep Rekursif


 Rekursif adalah suatu proses yang memanggil dirinya sendiri

 Fungsi Rekursif adalah sebuah fungsi yang memanggil dirinya sendiri.

23
 Perbedaan rekursif dengan fungsi/prosedur adalah bahwa rekursif bisa
memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil
lewat pemanggil prosedur atau fungsi.

24
BAB III

PEMBAHASAN

3.1.Record
Keuntungan record
 Record dapat mengumpulkan beberapa tipe data yang berbeda menjadi
satu kesatuan.
 Tipe data record juga dapat memiliki field berupa tipe data record yang
lainnya.
 Biasanya suatu record berisi beberapa field untuk sebuah subyek tertentu.
Tabel 3.1.Tabel Perangkat yang digunakan
PERANGKAT KETERANGAN
ASUS Laptop
DEV C++ Software Editor
C++ Bahasa Pemrograman

Program menampilkan data mahasiswa menggunakan Record / Struct :


#include <iostream>
#include <string.h>
using namespace std;
main(){
typedef struct{
char nim[10],nama[30],jurusan[20];
}mahasiswa;
mahasiswa mhs;
strcpy(mhs.nim,"201512093");
strcpy(mhs.nama,"sri ayu purwanti");
strcpy(mhs.jurusan,"teknik informatika");
cout<<"\ntampilan data mahasiswa"<<endl;
cout<<"NIM:"<<mhs.nim<<endl;
cout<<"\Nama:"<<mhs.nama<<endl;
cout<<"\Jurusan:"<<mhs.jurusan<<endl;
}
Modul Program 3.1. ScriptMethod untuk Menampilkan data mahasiswa menggunakan
record / struct

25
Output :

Gambar 3.1.Output menampikan data dengan record / struct

Penjelasan :
Script diatas akan menghasilkan output diatas, dengan memasukkan type data
typedefstruct{char nim[10],nama[30],jurusan[20];}mahasiswa dan memanggil
dengan menggunakan strcpy yang berarti string copy, untuk mengcopykan string
tersebut agar dipanggil dan ditampilkan.

3.2.Tampilan Data Mahasiswa menggunakan Record / Struct oleh User

Pada pembahasan ini, akan membahas tampilan data mahasiswa


menggunakan record / struct yang di inputkan oleh User atau penggunanya dan
sangat berguna untuk kehidupan manusia, contohnya saja adalah melakukan input
nilai Mahasiswa oleh dosen di sebuah kampus.
Program menginput data mahasiswa menggunakan Record / Struct oleh User
#include <iostream>
#include <string.h>
using namespace std;
main(){
typedef struct{
char nim[10],nama[30],jurusan[20];
}mahasiswa;
mahasiswa mhs;
cout<<"\ntampilan data mahasiswa"<<endl;
cout<<"NIM:";
cin.getline(mhs.nim,sizeof(mhs.nim));
cout<<"\Nama:";
cin.getline(mhs.nama,sizeof(mhs.nama));
cout<<"\Jurusan:";

26
cin.getline(mhs.jurusan,sizeof(mhs.jurusan));
cout<<"\n";
cout<<"\ntampilan data mahasiswa"<<endl;
cout<<"NIM:"<<mhs.nim<<endl;
cout<<"\Nama:"<<mhs.nama<<endl;
cout<<"\Jurusan:"<<mhs.jurusan<<endl;
}
Modul Program 3.2. ScriptMethod untuk program menginput data mahasiswa
menggunakan Record / Structoleh User

Output :

Gambar 3.2.Output Record/struck oleh User

Penjelasan :
Pada pembahasan ini sama saja dengan script dengan yang sebelumnya, hanya
sajayang membedakan adalah dengan menginputkan data oleh pengguna atau
user. Dengan menambah cin.getline(mhs.nim.sizeof(mhs.nim)); maka akan bisa
melakukan menginputan. Itu sangat berfungsi untuk kepentingan user atau
manusia.

3.3.Menginputkan data mahasiswa menggunakan Record/Struck dengan


menginputkan jumlah data

Pada pembahasan ini, akan membahas tampilan data mahasiswa


menggunakan record / struct yang di inputkan oleh User atau penggunanya dan
ditambahkan menginputan jumlah data yang diinginkan, berikut script yang akan
dibahas :
#include <iostream>

27
#include <string.h>
using namespace std;
#define max 100
main(){
typedef struct{
char nim[10],nama[30],jurusan[20];
}mahasiswa;
mahasiswa mhs[max];
int i, j;
cout<<"input jumlah data mahasiswa:";
cin>>j;
cin.ignore();
for(i=0; i<j; i++){
cout<<"\input data mahasiswa ke-"<< i+1 <<endl;
cout<<"NIM:";
cin.getline(mhs[i].nim,sizeof(mhs[i].nim));
cout<<"\Nama:";
cin.getline(mhs[i].nama,sizeof(mhs[i].nama));
cout<<"\Jurusan:";
cin.getline(mhs[i].jurusan,sizeof(mhs[i].jurusan));
cout<<"\n";
}
cout<<"\n=======================================";
for(i=0; i<j; i++){
cout<<"\ntampilan data mahasiswa ke-"<< i+1 <<endl;
cout<<"NIM:"<<mhs[i].nim<<endl;
cout<<"\Nama:"<<mhs[i].nama<<endl;
cout<<"\Jurusan:"<<mhs[i].jurusan<<endl;
}
}
Modul Program 3.3. ScriptMethod untuk Menginputkan data mahasiswa menggunakan
Record/Struct dengan menginputkan jumlah data

28
Output :

Gambar 3.3.OutputRecord / Structdata mahasiswa dengan menginputkan jumlah


data

Penjelasan :
Masih sama dengan pembahasan sebelumnya, hanya saja pada pembahasan ini
script atau program record ditambahkan inputan dengan tampilan jumlah data.
Dengan itu kita sebagai user bebas menginputkan berapapun jumlah data yang
ingin dimasukkan, tetapi cukup sesuai dengan kebutuhan. Script yang
ditambahkan adalahfor(i=0; i<j; i++){ cout<<"\input data mahasiswa ke-"<<
i+1<<endl; dengan begitu I akan terus bertambah sesuai dengan perulangan yang
telah ditambahkan.

29
3.4.Menginputkan data mahasiswa menggunakan Record/Struck dengan
menginputkan jumlah data, Kode Pelajaran, jurusan dan nilai.

Program ini berfungsi agar memberikan informasi yang jelas kepada


penggunanya, atau sedetail detailnya dalam memberikan informasi lengkap
dengan contoh data mahasiswa. Dengan menginputkan nama, nim dan jurusan
akan muncul nilai dan kode mata pelajaran. Berikut ini script yang akan dibahas :
#include <iostream>
#include <string.h>
using namespace std;
#define max 100
main(){
typedef struct{
char kode[7],nama[20];
int nilai;
}matakuliah;
typedef struct{
char nim[10],nama[30],jurusan[20];
matakuliah mk[max];
}mahasiswa;
mahasiswa mhs[max];
int i, j, k, l;
int jmk[max];
cout<<"Input Jumlah Data Mahasiswa:";
cin>>j;
cin.ignore();
for(i=0; i<j; i++){
cout<<"\nInput Data Mahasiswa ke-"<< i+1 <<endl;
cout<<"NIM:";
cin.getline(mhs[i].nim,sizeof(mhs[i].nim));
cout<<"Nama:";
cin.getline(mhs[i].nama,sizeof(mhs[i].nama));
cout<<"Jurusan:";
cin.getline(mhs[i].jurusan,sizeof(mhs[i].jurusan));
cout<<"\nMasukan Jumlah Matakuliah:";
cin>>k;
jmk[i]=k;
cin.ignore();
for(l=0; l<jmk[i]; l++){
cout<<"\nInput Data Matakuliah ke-"<< l+1 <<endl;
cout<<"kode:";

cin.getline(mhs[i].mk[l].kode,sizeof(mhs[i].mk[l].kode));
cout<<"Nama:";

cin.getline(mhs[i].mk[l].nama,sizeof(mhs[i].mk[l].nama));
cout<<"Nilai:";
cin>>mhs[i].mk[l].nilai;
cin.ignore();
}
}

cout<<"\n=======================================";

for(i=0; i<j; i++){

30
cout<<"\nTampilan Data Mahasiswa ke-"<< i+1 <<endl;
cout<<"NIM:"<<mhs[i].nim<<endl;
cout<<"Nama:"<<mhs[i].nama<<endl;
cout<<"Jurusan:"<<mhs[i].jurusan<<endl;
for(l=0; l<jmk[i]; l++){
cout<<"\nTampilan Data Matakuliah"<<endl;
cout<<"Kode MK:"<<mhs[i].mk[l].kode <<endl;
cout<<"Nama MK:"<<mhs[i].mk[l].nama <<endl;
cout<<"Nilai:"<<mhs[i].mk[l].nilai <<endl;
}
}

Modul Program 3.4 ScriptMethod untuk Menginputkan data mahasiswa menggunakan


Record/Struck dengan menginputkan jumlah data, Kode Pelajaran, jurusan dan nilai.

Output :

Gambar 3.4Output Record/Struct dengan menginputkan jumlah data, Kode Pelajaran,


jurusan dan nilai.

31
Penjelasan:
Pada pembahasan ini inputan jumlah data mahasiswa akan diinputkan dan
dipersilakan untuk mengisinya, kemudian akan muncul jumlah mata kuliah dan
dipershilakan untuk menginputnya. Isi dari data matakuliah adalah kode, nama
dan nilai lalu akan ditampilkan output atau hasilnya. Script program ini berfungsi
untuk melakukan input nilai perkuliahan oleh dosen dengan data nilai para
mahasiswanya.

3.5.Rekursif
Rekursif merupakan alat untuk memecahkan masalah dalam suatu fungsi atau
procedure yang memanggil dirinya sendiri.Mengapa kita memerlukan rekursif?
Karena ada beberapa kasus yang akan jauh lebih mudah diselesaikan jika
menggunakan rekursif. Secara teori semua masalah yang dapat dipecahkan
dengan rekursif dapat dipecahkan dengan tanpa rekursif.Meskipun dalam
kenyataan ini, rekursif sangat bermanfaat sebab beberapa masalah mempunyai
solusi yang sulit tanpa menggunakan rekursif.
Penggunaan rekursif kadang-kadang harus mengorbankan efisiensi dan
kecepatan, disamping itu ada masalah yang sering muncul dalam rekursif, yaitu
eksekusi yang tidak pernah berhenti, akibatnya memori tumpukan akan habis dan
computer hang.
Pada dasarnya rekursif sering digunakan dalam perhitungan matematika,
sebagai contoh pertimbangan fungsi Factorial dan juga bilangan Fibonacci.
berikutscriptMethodyang dibahas :
#include <iostream>
#using namespace std;
int FPB (int n, int r);
int Faktorial (int n);
int Fibonacci (int n);
int Permutasi(int n, int r);
int Kombinasi(int n, int r);
main(){
int n, r, pilih;
menu:
cout<<"======================================="<<endl;
cout<<"Program Menu Rekursif"<<endl;
cout<<"======================================="<<endl;
cout<<"1. FPB"<<endl;
cout<<"2. Faktorial"<<endl;
cout<<"3. Fibonacci"<<endl;
cout<<"4. Permutasi"<<endl;
cout<<"5. Kombinasi"<<endl;

32
cout<<"6. Keluar"<<endl;
cout<<"======================================="<<endl;
cout<<"Masukkan Pilihan:";
cin>>pilih;
switch(pilih){
case 1: cout<<"\nProgram FPB"<<endl;
cout<<"***************************"<<endl;
cout<<"Masukkan Bilangan 1:";
cin>>n;
cout<<"Masukkan Bilangan 2:";
cin>>r;
cout<<"FPB("<< n <<" , "<< r
<<")="<<FPB(n,r)<<endl;
break;
case 2: cout<<"\nProgram Faktorial"<<endl;
cout<<"***************************"<<endl;
cout<<"Masukkan Bilangan :";
cin>>n;
cout<<"Faktorial("<< n <<" )="<<Faktorial(n);
break;
case 3: cout<<"\nProgram Fibonacci"<<endl;
cout<<"***************************"<<endl;
cout<<"Masukkan Bilangan :";
cin>>n;
cout<<"Fibonacci("<< n <<" )="<<Fibonacci(n);
break;
case 4: cout<<"\nProgram Permutasi "<<endl;
cout<<"***************************"<<endl;
cout<<"Masukkan Nilai n:";
cin>>n;
cout<<"Masukkan Nila r:";
cin>>r;
cout<<"Permutasi("<< n <<" , "<< r
<<")="<<Permutasi(n,r)<<endl;
break;
case 5: cout<<"\nProgram Kombinasi"<<endl;
cout<<"***************************"<<endl;
cout<<"Masukkan Nilai n:";
cin>>n;
cout<<"Masukkan Nilai r:";
cin>>r;
cout<<"Kombinasi("<< n <<" , "<< r <<")="<<Kombinasi(n,r)<<endl;
break;
case 6:cout<<"\nTerimakasih telah menggunakan program
ini."<<endl;
exit(0);\
break; default:cout<<"\nPilihan yang
anda masukkan salah."<<endl;
cout<<"Ulangi lagi."<<endl;
goto menu;
break;
}
}
int FPB (int n, int r){
int hasil;
if (r==0){
hasil=n;
}else{
hasil = FPB (r, (n%r));

33
}
return (hasil);
}
int Faktorial (int n){
int hasil;
if (n<=1){
hasil=1;
}else{
hasil=n*Faktorial(n-1);
}
return (hasil);
}
int Fibonacci (int n){
int hasil;
if (n==1 ||n==2){
hasil=1;
}else{
hasil +=Fibonacci(n-1)+Fibonacci (n-2);

} return (hasil);
}
int Permutasi (int n, int r){
int hasil;
if (n>r){
hasil=0;
}else{
hasil=Faktorial(n)/Faktorial(n-r);
}
return (hasil);
}
int Kombinasi (int n, int r){
int hasil;
if (n<r){
hasil=0;
}else{
hasil=Faktorial(n)/(Faktorial(r)*Faktorial(n-r));
}
return (hasil);
}
Modul Program 3.5ScriptMethod untuk Menginputkan Rekursif

34
Output :

Gambar 3.5 output Rekursif

Penjelasan :
Definisi rekursif harus tergantung kondisi, yang harus ada keadaan dimana
kita dapat menghentikannya. Selama eksekusi program pada semua program yang
menggunakan rekursif, system tersebut akan membangun suatu daftar nilai, yang
disebut Stack (Tumpukan), sehingga ketika rekursi tersebut berakhir, program
tersebut dapat kembali kelokasi yang tepat untuk melengkapi perhitungan tersebut
yang untuk sementara telah dikesampingkan.

35
BAB IV

PENUTUP

4.1 Kesimpulan
Dari kegiatan praktikum diatas dapat disimpulkan bahwa record dapat
mengumpulkan beberapa tipe data yang berbeda menjadi satu kesatuan. Masing-
masing item data disebut dengan field. Jadi record terdiri dari kumpulan field
yang dapat berbeda tipe. Biasanya suatu record berisi beberapa field untuk sebuah
subyek tertentu. Record sebaiknya digunakan pada saat kita ingin menggabungkan
beberapa tipe data (field) menjadi satu kesatuan.

4.2 Saran
Saran yang dapat diberikan untuk pengembangan sistem ini selanjutnya
adalah sebagai berikut :
 Sebaiknya dalam membuat kode program perhatikan huruf besar dan huruf
kecilnya, karena C++ bersifat case sensitive. Selain itu, kita juga harus
memperhatikan compiler yang digunakan untuk menjalankan program
tersebut agar program berjalan sesuai keinginan kita tanpa adanya
kesalahan-kesalahan.
 Berikan kami saran atas laporan kami ini sehingga dilaporan berikutnya
akan lebih baik dari laporan ini.
 Kepada asisten praktikum sebaiknya konsisten terhadap kelonggaran
waktu yang telah ditentukan dan disiapkan dulu semua atau bahan yang
mendukung kegiatan praktikum.
 Untuk praktikan sebaiknya datang tepat waktu.

36
PRAKTIKUM ALGORITMA DAN PEMROGRAMAN II

LAPORAN HARIAN III

PROGRAM STUDI TEKNIK INFORMATIKA

SEKOLAH TINGGI TEKNOLOGI BONTANG

KALIMANTAN TIMUR

2016

ix
BAB I

PENDAHULUAN

1.1.Latar Belakang Masalah


Algoritma merupakan kumpulan perintah yang memiliki daya guna yang
sangat besar bagi masyarakat.Algoritma biasanya digunakan sebagai kumpulan
perintah untuk menyelesaikan suatu masalah.Algoritma ini memiliki aplikasi yang
bermacam-macam dalam setiap masalah yang ada. Contohnya saja adalah
algoritma cara menyelesaikan suatu aritmatika yang rumit, algoritma untuk
menghitung luas penampang dari suatu kabel, atau bahkan untuk menghitung
bayaran parkir di setiap mal. Salah satu aplikasi bentuk pemrograman ini adalah
dalam bahasa permrograman yang disebut bahasa C++. Dimana bahasa C++ ini
memiliki suatu aturan-aturan tertentu yang sangat penting sehingga dalam
penggunaanya kita harus memperhatikan cara menggunakan aturan tersebut.
Salah satu cara penggunaannya adalah dengan array. Dimana array ini merupakan
suatu data struktur yang berkoneksi satu sama lain dengan tipe yang sama.
Aplikasi array ini banyak sekali, contohnya saja adalah menghitung golongan dari
umur yang berjumlah 25 tahun hingga 55 tahun.Array ini juga bisa digunakan
untuk mencari suatu elemen nilai dalam suatu struktur data, selain itu array ini
juga bisa digunakan untuk mengurutkan data-data yang tidak berurutan.Hal –hal
yang telah disebutkan disebut sebagai searching array dan sorting array.
Sorting array merupakan salah satu aplikasi yang paling penting dalam suatu
sistem aplikasi perhitungan data.Biasanya suatu bank memiliki komputasi sorting
array yang sudah biasa digunakan dalam aplikasinya sehari-hari. Bahkan
telephone juga mengurutkan suatu list yang terdiri dari nama akhir, nama awal
agar bisa memudahkan dalam perhitungan dalam mencari nomor telephone.
Searching array juga memiliki tak kalah pentingnya dibandingkan dengan
sorting array.Pada searcing array kita biasa menggunakannya pada data yang
sangat banyak.Sehingga sangat sulit bila kita ingin mencari suatu data atau suatu
angka didalamnya satu per satu. Aplikasi searching array memudahkan kita dalam

37
mencari suatu data atau angka yang kita inginkan dengan hanya memasukkan
nilai input pada suatu data yang diisikan.

1.2.Rumusan Masalah
Berdasarkan latar belakang masalah tersebut, maka rumusan masalah dari
percobaan ini adalah :
1. Apa yang dimaksud dengan searching?
2. Apa yang dimaksud dengan pencarian sequential (sequential search) ?
3. Apa yang dimaksud dengan pencarian biner (binary search) ?
4. Apa yang dimaksud dengan sorting ?
5. Apa yang dimaksud dengan metode pengurutan data (bubble sort, insertion
sort,selection sort, shell sort, quick sort, dan merge sort) ?
6. Bagaimana membuat program menu sorting?

1.3.Batasan Masalah
Mengingat banyaknya materi tentang Sorting dan Searching, maka dibuatlah
beberapa batasan masalahnya sebagai berikut:
1. Praktikum ini hanya membahas aturan dasarSearching dan Sorting dengan
lanngkah – langkah pengerjaanya.
2. Praktikum ini hanya mempraktekkan penggunaaan Sorting dan
Searchingdengan menggunakan aplikasi C++.

1.4.Tujuan Praktikum
1. Tujuan dari praktikum ini adalalah sebagai berikut :
2. Sebagai syarat memenuhi tugas praktikum Mata kuliah Algoritma dan
Pemrograman 2
3. Sebagai bahan pembelajaran mengenai Searching dan Sorting.
4. Dapat memahami dan mengerti:
a. Definisi Searching dan Sortingitu sendiri
b. Algoritma pencarian (linear search dan binary search)
c. Menerapkan algoritma pencarian kedalam pemrograman
d. Algoritma pengurutan (insertion sort, selection sort, bubble sort, merge
sort)
e. Menerapkan algoritma pengurutan kedalam pemrograman
f. Mampu membuat program Searching dan Sorting.

38
BAB II

DASAR TEORI

2.1.Searching
Pencarian (searching) adalah tindakan untuk mendapatkan suatu data dalam
kumpulan data. Untuk keperluan pencarian data, terdapat beragam algoritma
pencaraian (search algorithm). Menurut Tenenbaum dan Augenstein, algoritma
pencaraian yaitu algoritma yang menerima sebuah argumen X dan mencoba untuk
menemukan sebuah rekaman yang memiliki kunci X. Sebagai contoh pencarian
data mahasiswa dengan NIM 201612016, maka hasilnya adalah record yang berisi
data mahasiswa tersebut yang didalamnya kemungkinan berisi nama, alamat,
tempat tanggal lahir, dan program studi.
Pencarian dibagi menjadi beberpa bagian, yaitu :
a. Pencarian internal adalah pencarian data yang berada di dalam memory
komputer.
b. Pencarian eksternal adalah pencarian data yang berada di dalam server lain
yang berasal dari luar komputer.
Contoh kasus pencarian dalam kehidupan sehari-hari :
 Mencari istilah dalam kamus
 Mencari nomor teman yang berada dalam buku telepon
Mencari data mahasiswa, dll.

2.2.Sorting
Sorting adalah suatu poses pengurutan data yang sebelumnya disusun secara
acak atau tidak teratur menjadi urut dan teratur menurut suatu aturan tertentu.
Biasanya pengurutan terbagi menjadi dua yaitu:
1. Ascending (pengurutan dari karakter /angka kecil ke karakter/angka besar)
2. Descending (pengurutan dari karakter/angka besar ke karakter/ angka kecil)
Untuk melakukan proses pengurutan dapat menggunakan beberapa metode antara
lain:
1.Metode pengurutan langsung:

39
a. Metode penukaran (exchange selection) / gelembung (bubble sort)
b.Metode seleksi (straight selection sort)
c. Metode penyisipan langsung (straight insertion sort)
2.Metode pengurutan tidak langsung:
a. Shell short
b. Quick sort
c. Merge sort
A. Metode pengurutan langsung :
1) Metode penukaran(exchange selection) gelembung (bubble sort)
 metode pertama yang paling banyak dipelajari pemrogram.
 Sederhana
 bubble soret tidak efisien dan menyita banyak waktu prosessor lebih
banyak daripada tekanik sorting yang lain.
 tidak lebih dari 30 atau kurang dari 30 elemenpenggunaan bubble sort
masih sangat baik
 metode gelembung / penukaran adalah metode yang mendasarkan
penukara 2 buah elemen untuk mencapai keadaan urut yang diinginkan.
2) Metode penyisipan langsung (straight insertion sort)
Dapat dibagi menjadi 2 bagian
- Bagian sebelah kiri data sudah terurut (tujuan)
- Bagian sebelah kanan data belum terurut (sumber)
3) Metode seleksi (straight selection sort)
Selection sort dimulai dengan menyelesaikan elemen array (misalnya
elemen pertama). Kemudian sorting mencari keseluruhan array hingga
menemukan nilai yang terkecil.Sorting menempatkan nilai terkecil pada
elemen tersebut, memilih elemen kedua dan mencari elemen terkecil
kedua.
4) Metode penyisipan langsung (straight insertion sort)
Dapat dibagi menjadi 2 bagian
- Bagian sebelah kiri data sudah terurut (tujuan)
- Bagian sebelah kanan data belum terurut (sumber)
B. Metode pengurutan tidak langsung :

40
Untuk melakukan proses pengurutan tidak langsung dapat menggunakan beberapa
metode :
1.) Shell Sort
Disebut juga istilah metode “pertambahan menurun (dimishing
increment)” dari Donald L.Shell.Metode ini memanfaatkan penukaran
sepasang elemen untuk mencapai keadaan urut.Dua buah elemen
ditukarkan dengan jarak tertentu.
Rumus :
- Jarak pertama = N div 2
- Jarak berikutnya = jarak sebelumnya div 2
1 3 5 7 9 2 4 6 8
A[1] A[2] A[3] A[4] A[5] A[6] A[7]A[8] A[9]
Sehingga :
- Jarak pertama = 9 div 2 = 4
- Jarak kedua = 4 div 2 = 2
- Jarak ketiga = 2 div 2 = 1
2.) Quick Sort
Sering disebut dengan “partion exchange” sort.
3.) Merge Sort
Ide metode merge sort :
- Pembagian array data menjadi dua bagian (bagian kiri dan bagian
kanan) mengulangi langkah tersebut secara rekursi terhadap kedua
bagian tersebut, sampai tiap subarray terdiri dari satu elemen.
- Menggabungkan masing – masing bagian tersebut sekaligus
mengurutkannya, sesuai pohon yang terbentuk saat membagi array,
sampai membentuk array pertama saat sebelum diulang lalu ulangi
langkah ini secara rekursi pula.

41
BAB III

PEMBAHASAN

3.1.Perangkat Yang Digunakan

Tabel 3.1. Tabel Perangkat yang digunakan


PERANGKAT KETERANGAN
ASUS Laptop
DEV C++ Software Editor
C++ Bahasa Pemrograman

3.2.Definisi Searching
Pencarian (Searching) merupakan proses yang fundamental dalam
pemrograman, guna menemukan data (nilai) tertentu di dalam sekumpulan data
yang bertipe sama. Fungsi pencarian itu sendiri adalah untuk memvalidasi
(mencocokkan) data.

3.3.Pencarian Sequential (Sequential Search)


Pencarian sekuensial (sequential search) adalah model pencarian yang
sederhana yang dilakukan terhadap suatu kumpulan data. Nama lain dari metode
pencarian sekuensial adalah pencarian lurus (linear search). Terdapat L yang
merupakan larik (array) yang berisi n buah data (L[0],L[1],…..,L[n-1]) dan k
adalah data yang dicari.
Rumus : L[i]=k
i adalah bilangan index terkecil yang memenuhi kondisi 0 < k < n-1
Contoh kasus :
L [10, 9, 6, 4, 7, 5, 4, 1]
i=[0, 1, 2, 3, 4, 5, 6, 7]
Misalkan elemen data yang dicari adalah 4 (untuk posisi pertama). Dalam hal ini
k=4 dan k ditemukan diposisi di index ke 3. Subrutin (perintah) tersebut
merupakan implementasi algoritma secara sekuensial, dalam hal ini menghasilkan
nilai balik berupa :
a. -1 jika data yang dicari tidak ditemukan

42
b. b. Bilangan antara 0 sampai dengan n-1 (dengan n adalah jumlah elemen
larik) jika data yang dicari telah ditemukan.

3.4.Pencarian Biner (Binary Search)


Pencarian biner merupakan algoritma yang digunakan untuk kebutuhan
pencarian data dengan waktu yang cepat.Contoh pencarian data yang dengan
algoritma biner dalam kehidupan sehari-hari yaitu ketika melakukan pencarian
arti kata tertentu didalam kamus bahasa inggris. Kita tidak akna membuka kamus
dari halam awal sampaia akhir satu pesatu saat mencari arti kata tertentu, namun
kita akan mencarinya dengan cara membelah atau membagi halaman kamus
tersebut. Jika kata yang dicari tidak terletak di halaman pertengahan itu, maka kita
dapat mencari dibagian belahan sebelah kiri atau belhan sebelah kanan dengan
cara membagi dua belhan yang dimaksud. Begitu seterusnya sampai akhir kata
yang dicari ditemukan.
Prinsip pencarian dengan menggunakan metode biner atau membagi menjadi
dua bagian mengilhami algoritma pencarian bagi dua.Data yang tersimpan di
dalam larik harus sudah dlam keadaan terurut.
Misalkan index kiri adlah I dan index kanan adalah j. pada mulanya
diinisialisasi I dengan 1 dan j dengan n.
Misalkan diberikan larik L dengan delapan buah elemen yang sudah terurut :
L [10, 9, 7, 6, 5, 4, 3, 1]
I =1 2 3 4 5 6 7 j=8
berikutscript searching yang akan dibahas :
#include <iostream>
#define true 1
#define false 0
#define max 100
using namespace std;
main ()
{
int X[max];
bool found;
int i, y, a, b;

jdata :
cout<< "\nMasukkan jumlah data [maksimal 100] : ";
cin>> b;

if (b > max) {
cout<< "\nJumlah data melebihi batas maksimal" <<
endl;

43
cout<< "Input kembali" << endl;
goto jdata;
}

cout<< "\nInput Data Anda" << endl;


for(a=0; a<b; a++){
cout<< "Data Ke-" << a+1 << " = ";
cin>> X[a];

while(X[a]<= X[a-1]){
cout<< "\nData yang Anda masukkan sama
dengan/lebih kecil data sebelumnya." <<endl;
cout<< "Input kembali." <<endl;
cout<< "\nData Ke-" << a+1 << " = ";
cin>> X[a];
}
}
cout<< "\n====================================="<< endl;

cout<< "\nTampilan Data Anda : " << endl;


for(a=0; a<b; a++){
cout<<X[a] << " ";
}
cout<< endl;
cout<< "\nNilai yang dicari = ";
cin>> y;
found=false;
i=0;
while ((i<b) & (!found)){
if (X[i]==y)
found=true;
else
i = i + 1;
}
if (found)
cout<< y <<" ditemukan pada data ke-"<< i;
else
cout << y <<" tidak ada dalam data tersebut";
}
Modul Program 3.2. ScriptMethod Searching sequential dan binary search

44
Output :

Gambar 3.2.OutputSearching sequential dan binary search

Penjelasan :

Pada gambar output program diatas pertama akan muncul “masukkan


jumlah data maximal 100 lebih dari ini maka program akan menampilkan “Jumlah
Data Melebihi Makximal” kemudian dia akan meminta untuk diinputkan kembali
sampai tidak melebihi batas maximal. Setelah itu akan muncul perintah “Inputkan
Data Anda :”, setelah diinputkan akan tampil “Data Anda :”, dan “nilai yang
Dicari :” pada perintah ini kita harus menginputkan data yang dicari lalu setelah
dinputkan maka akan tampil “ Ditemukan pada Data Ke- “.

45
3.5.Definisi Sorting
sorting adalah sebuah metode untuk pengurutan data, misalnya dari data yang
terbesar ke data yang terkecil. Dengan cara program yang dibuat harus dapat
membandingkan antar data yang di inputkan. Artinya jika ada deretan data, maka
data yang pertama akan membandingkan dengan data yang kedua.

3.6.Metode Pengurutan Data

a. Bubble Sort
Bubble Sort merupakan salah satu dari banyak teknik pengurutan (sort)
yang paling sering dan palingsederhana. Seperti namanya, bubble yang berarti
gelembung, teknik ini diibaratkan seperti gelembung.Ia menggeser nilai terkecil
atau terbesar (tergantung jenisnya, ascendingatau descending) ke ujung.
Algoritma Bubble Sort ini cukup simpel, semisal pengurutansecara ascending
(kecil ke besar)ia membandingkan nilai petama dengan nilai kedua, apabila nilai
pertama lebih kecil berarti tidak ada perubahan. Namun apabila nilai kedua lebih
kecil daripada nilai pertama,maka nilai kedua pindah ke nilai pertama dan nilai
pertama pindah ke urutan kedua. Setelah melakukan pengecekan, berlanjut ke
pengecekan nilai kedua dan ketiga dengan carayang sama dengan diatas, begitu
seterusnya.
 Kelebihan Bubble Sort
Metode bubble sort merupakan metode yang paling simple.
Metode bubble sort mudah dipahami algoritmanya.
 Kekurangan Bubble Sort
Meskipun simple metode Bubble Sort merupakan metode pengurutan yang
paling tidak efisien. Kelemahan Bubble Sort adalah pada saat mengurutkan data
yang sangat besar akan mengalami kelambatan luar biasa, atau dengan kata lain
kinerja memburuk cukup signifikasn ketika data yang diolah jika data cukup
banyak. Kelemajan lain adalah jumlah pengulangan akan tetap sama jumlahnya
walaupung data sesungguhnya sudah cukup terurut. Hal ini disebabkan setiap data
dibandingkan dengan setiap data yang lain untuk menentukan posisinya.

b. Insertion Sort
Insertio Short adalah salah satu algoritma sorting yang paling sederhana
adalah insertion sort.Idedari algoritma ini dapat dianalogikan seperti mengurutkan

46
kartu. Penjelasan berikut inimenerangkan bagaimana algoritma insertion sort
bekerja dalam pengurutan kartu.
Anggaplah anda ingin mengurutkan satu set kartu dari kartu yang bernilai
paling kecilhingga yang paling besar. Seluruh kartu diletakkan pada meja,
sebutlah meja ini sebagaimeja pertama, disusun dari kiri ke kanan dan atas ke
bawah. Kemudian kita mempunyaimeja yang lain, meja kedua, dimana kartu yang
diurutkan akan diletakkan.
Ambilkartu pertama yang terletak pada pojok kiri atas meja pertama dan
letakkan pada meja kedua.
Ambil kartu kedua dari meja pertama, bandingkan dengan kartu yang
beradapada meja kedua, kemudian letakkan pada urutan yang sesuai setelah
perbandingan.Proses tersebut akan berlangsung hingga seluruh kartu pada meja
pertama telahtelah dile-takkan berurutan pada meja kedua.
Algoritma insertion sort pada dasarnya memilah data yang akan
diurutkanmenjadi dua bagian, yang belum diurutkan (meja pertama) dan yang
sudah diurutkan(meja kedua). Elemen pertama diambil dari bagian array yang
belum diurutkandan kemudian diletakkan sesuai posisinya pada bagian lain dari
array yang telah diurutkan.Langkah ini dilakukan secara berulang hingga tidak
ada lagi elemen yangtersisa pada bagian array yang belum diurutkan.

c. Selection Sort
Jika anda diminta untuk membuat algoritma sorting tersendiri, anda
mungkin akan menemukan sebuah algoritma yang mirip dengan selection sort.
Layaknya insertionsort, algoritma ini sangat rapat dan mudah untuk
diimplementasikan.Mari kita kembali menelusuri bagaimana algoritma ini
berfungsi terhadap satu paket kartu. Asumsikan bahwa kartu tersebut akan
diurutkan secara ascending. Pada awalnya, kartu tersebut akan disusun secara
linier pada sebuah meja dari kiri ke kanan, dan dari atas ke bawah. Pilih nilai
kartu yang paling rendah, kemudian tukarkan posisi kartu ini dengan kartu yang
terletak pada pojok kiri atas meja.Lalu cari kartu dengan nilai paling rendah
diantara sisa kartu yang tersedia.Tukarkan kartu yang baru saja terpilih dengan
kartu pada posisi kedua.Ulangi langkah – langkah tersebut hingga posisi kedua

47
sebelum posisi terakhir dibandingkan dan dapat digeser dengan kartu yang
bernilai lebih rendah.
Ide utama dari algoritma selection sort adalah memilih elemen dengan
nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai
dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1.
d. Shell Sort
Metode ini disebut juga dengan metode pertambahan menurun (diminishing
increment).Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959,
sehingga sering disebut dengan Metode Shell Sort. Metode ini mengurutkan data
dengan cara membandingkan suatu data dengan data lain yang memiliki jarak
tertentu, kemudian dilakukan penukaran bila diperlukan. Proses pengurutan
dengan metode Shell dapat dijelaskan sebagai berikut :
Pertama-tama adalah menentukan jarak mula-mula dari data yang akan
dibandingkan, yaitu N/2. Data pertama dibandingkan dengan data dengan jarak
N/2.Apabila data pertama lebih besar dari data ke N / 2 tersebut maka kedua data
tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang sama
yaitu N/2. Demikian seterusnya sampai seluruh data dibandingkan sehingga
semua data ke-j selalu lebih kecil daripada data ke-(j+N/2).
Pada proses berikutnya, digunakan jarak (N/2)/2 atau N/4. Data pertama
dibandingkan dengan data dengan jarak N/4.Apabila data pertama lebih besar dari
data ke N/4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua
dibandingkan dengan jarak yang sama yaitu N/4. Demikianlah seterusnya hingga
seluruh data dibandingkan sehingga semua data ke-j lebih kecil daripada data ke-
(j+N/4). Pada proses berikutnya, digunakan jarak (N / 4) / 2 atau N / 8. Demikian
seterusnya sampai jarak yang digunakan adalah 1.

e. Quick Sort
Quicksort ditemukan oleh C.A.R Hoare. Seperti pada merge sort, algoritma ini
juga berdasar pada pola divide-and-conquer. Berbeda dengan merge sort,
algoritma ini hanya mengikuti langkah – langkah sebagai berikut :
 Divide
Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r]
dimana setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan

48
setiap elemen pada A[q+1…r] adalah lebih besar atau sama dengan elemen pada
A[q]. A[q] disebut sebagai elemen pivot.Perhitungan pada elemen q merupakan
salah satu bagian dari prosedur pemisahan.
 Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursifPada algoritma
quicksort, langkah “kombinasi” tidak di lakukan karena telah terjadi pengurutan
elemen – elemen pada sub-array
Algoritmanya :
void quickSort(Object array[], int leftIdx, int rightIdx) {
int pivotIdx;
/* Kondisi Terminasi */
if (rightIdx > leftIdx) {
pivotIdx = partition(array, leftIdx, rightIdx);
quickSort(array, leftIdx, pivotIdx-1);
quickSort(array, pivotIdx+1, rightIdx);
}
}

49
Gambar 3.3.e Diagram Quick Sort
f. Merge Sort
Prinsip utama yang diimplementasikan pada algoritma merge-sort seringkali
disebutsebagai pecah-belah dan taklukkan (bahasa Inggris: divide and conquer).
Cara kerjaalgoritma merge sort adalah membagi larik data yang diberikan menjadi
dua bagianyang lebih kecil. Kedua larik yang baru tersebut kemudian akan
diurutkan secaraterpisah. Setelah kedua buah list tersusun, maka akan dibentuk
larik baru sebagai hasilpenggabungan dari dua buah larik sebelumnya.
Beberapa algoritma mengimplementasikan konsep rekursi untuk
menyelesaikan permasalahan. Permasalahan utama kemudian dipecah menjadi
sub-masalah, kemudian solusi dari sub-masalah akan membimbing menuju solusi
permasalahan utama.Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3
langkah.
 Divide =>Memilah masalah menjadi sub masalah
 Conquer
Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah
tersebut cukup ringkas dan sederhana, pendekatan penyelesaian
secara langsung akan lebih efektif.
 Kombinasi
Mengkombinasikan solusi dari sub-masalah, yang akan
membimbing menuju penyelesaian atas permasalahan utama
Seperti yang telah dijelaskan sebelumnya, Merge sort menggunakan pola
divide and conquer. Dengan hal ini deskripsi dari algoritma dirumuskan dalam 3
langkah berpola divide and conquer. Berikut menjelaskan langkah kerja dari
Merge sort.
1. Divide =>Memilah elemen – elemen dari rangkaian data menjadi dua bagian.
2. Conquer =>Conquer setiap bagian dengan memanggil prosedur merge sort
secara rekursif.
3. Kombinasi =>Mengkombinasikan dua bagian tersebut secara rekursif untuk
mendapatkan rangkaian data berurutan.
Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi
bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa

50
pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut
sesuai rangkaian.
Algoritmanya :
void mergeSort(Object array[], int startIdx, int endIdx) {
if (array.length != 1) {
//Membagi rangkaian data, rightArr dan leftArr
mergeSort(leftArr, startIdx, midIdx);
mergeSort(rightArr, midIdx+1, endIdx);
combine(leftArr, rightArr);
}
}

Gambar3.3.f Diagram Merge Sort

berikutscript sorting yang akan dibahas :


#include <iostream>
#include <stdlib.h>
#include <conio.h>
#define max 100

using namespace std;

void bubble_sort (int array[], int size)


{
int temp, i, j;

for (i=0; i<size-1; i++)

51
for (j=0; j<size-1-i ; j++)
if (array[j] > array[j+1]){
temp= array[j]; array[j]= array[j+1];
array[j+1]= temp;
}
}

void straight_inst_sort (int array[], int size)


{
int i, j, k;
int temp;

for (i=1; i<size-1; i++){


temp= array[i];
j=i-1;
while ((temp<array[j])&(j>=0)){
array[j+1]= array[j];
j=j-1;
array[j+1]= temp;
}
}
}

void selection_sort (int array[], int size)


{
int temp, current, j;
for(current=0; current<size; current++)
for (j=current+1; j<size; j++)
if (array[current]> array[j]){
temp = array[current];
array[current] = array[j];
array[j] = temp;
}

void quick_sort (int array[], int first, int last)


{
int temp, low, high, list_separator;
low = first;
high = last;
list_separator = array[(first+last)/2];
do {
while (array[low] < list_separator)
low++;
while (array[high] > list_separator)
high--;
if (low<=high){
temp = array[low];
array[low++] = array[high];
array[high--] = temp;
}
}
while (low<=high);
if (first<high)
quick_sort (array, first, high);

52
if (first<last)
quick_sort (array, low, last);
}

void shell_sort (int array[], int size) {

int temp, gap, i, exchange_occured;

gap= size/2;
do{
do{
exchange_occured= 0;
for (i=0; i<size-gap; i++)
if (array[i] > array[i+gap]){
temp = array[i];
array[i] = array[i+gap];
array[i+gap] = temp;
exchange_occured=1;
}
} while (exchange_occured);
} while (gap=gap/2);
}

void merge(int array[], int l, int pivot, int r)


{
int temp[max];
int w, x, y;

w = 0;
x = l;
y = pivot + 1;

while((x <= pivot) && (y <= r)){


if (array[x] <= array[y])
temp[w++] = array[x++];
else
temp[w++] = array[y++];
}
while(x <= pivot)
temp[w++] = array[x++];
while (y <= r)
temp[w++] = array[y++];

for(x = r; x >= l; x--){


array[x]=temp[--w];
}
}

void merge_sort(int array[], int l, int r)


{
int pivot;

if(l < r)
{
pivot = (l+r) / 2;
merge_sort(array, l, pivot);
merge_sort(array, pivot+1, r);

53
merge(array, l, pivot, r);
}
}
main()
{
int values[max], i, j, k, pilih1, pilih2;

jdata :
system("CLS");
cout << "\nMasukkan jumlah data [maks.100] : ";
cin >> j;
if (j>max){
cout << "\nJumlah data yang Anda masukkan melebihi
batas maksimal" << endl;
cout << "Ulangi lagi. (Batas maksimal 100 data)" <<
endl;
goto jdata;
}

menu:
cout << "\n===============================" << endl;
cout << "\nMenu Pilihan Data" << endl;
cout << "\n===============================" << endl;
cout << "1. Data Random" << endl;
cout << "2. Data diinput user" << endl;
cout << "3. Batal" << endl;
cout << "=================================" << endl;
cout << "Masukkan Pilihan : ";
cin >> pilih1;

switch (pilih1){
case 1 :cout << "\nData Anda ditentukan secara random
" << endl;
for (i=0; i<j; i++) {
values[i] = rand()%100;
}
break;
case 2 :cout << "\nInput Data " << endl;
for (i=0; i<j; i++) {

cout << "Data Ke-" << i+1 << " : ";


cin >> values[i];
}
break;
case 3 :cout << "\nAnda telah batal dan keluar dari
program. " << endl;
cout << "Terimakasih." << endl;
exit(0);
break;
default :cout << "\nAnda salah memasukkan pilihan
menu. " << endl;
cout << "Ulangi lagi." << endl;
goto menu;
break;
}

cout << "\n\nTampilan data Anda yang belum urut : " << endl;

for (i=0; i<j; i++){

54
cout << values[i] << " ";
}

cout << endl;

submenu :
cout << "\n===============================" << endl;
cout << "Menu Pilihan Metode Sorting" << endl;
cout << "===============================" << endl;
cout << "1. Bubble Sort" << endl;
cout << "2. Straight Insertion Sort" << endl;
cout << "3. Straight Selection Sort" << endl;
cout << "4. Merge Sort" << endl;
cout << "5. Shell Sort" << endl;
cout << "6. Quick Sort" << endl;
cout << "7. Kembali ke menu Input Data" << endl;
cout << "8. Keluar" << endl;
cout << "=================================" << endl;
cout << "Masukkan Pilihan : ";
cin >> pilih2;

switch (pilih2){
case 1 :bubble_sort(values, j);
cout << "\nMetode : Bubble sort";
cout << "\nData Anda yang sudah diurutkan
: " << endl;
for (i=0; i<j; i++)
cout << values[i] << " ";
break;
case 2 :straight_inst_sort(values, j);
cout << "\nMetode : Straight Insertion
Sort";
cout << "\nData Anda yang sudah diurutkan
: " << endl;
for (i=0; i<j; i++)
cout << values[i] << " ";
break;
case 3 :selection_sort(values, j);
cout << "\nMetode : Straight Selection Sort";
cout << "\nData Anda yang sudah diurutkan : " << endl;

for (i=0; i<j; i++)


cout << values[i] << " ";
break;
case 4 :merge_sort(values, 0, j);
cout << "\nMetode : Merge sort";
cout << "\nData Anda yang sudah diurutkan
: " << endl;
for (i=0; i<j; i++)
cout << values[i] << " ";
break;
case 5 :shell_sort(values, j);
cout << "\nMetode : Shell sort";
cout << "\nData Anda yang sudah diurutkan
: " << endl;
for (i=0; i<j; i++)
cout << values[i] << " ";

55
break;
case 6 :quick_sort(values, 0, j);
cout << "\nMetode : Quick sort";
cout << "\nData Anda yang sudah diurutkan
: " << endl;
for (i=0; i<j; i++)
cout << values[i] << " ";
break;
case 7 :system ("CLS");
cout << "\nAnda kembali ke Menu Input
Data" << endl;
goto menu;
break;
case 8 :cout << "\nAnda telah keluar dari program." <<
endl;
cout << "Terimakasih." << endl;
exit(0);
break;
default :cout << "\nAnda memasukkan pilihan menu yang
salah . " << endl;
cout << "Ulangi lagi." << endl;
goto submenu;
break;
}
}
Modul Program 3.4 ScriptMethodPengurutan data/Sorting

Output :

56
Gambar 3.4.1 OutputPengurutan data/Sorting

Output :

Gambar 3.4.2 Output Pengurutan data/Sorting

Penjelasan:
Pada output program sorting kita diminta untuk menginputkan jumlah
data, setelah diinputkan jumlah datanya maka akan muncul menu pilhan datanya
lalu diberikan beberapa opsi data random, data dinput user, data1, setelah itu kita
diminta menginputkan pilihannya nanti outputnya akan sesuai dengan pilihan kita,
pada program yang dipilih adalah nomer 2 jadi data harus diinputkan oleh user,
setelah itu akan tampil “Tampilan data anda yang belum urut :” lalu dibawahnya
pun akan muncul data yang belum terurut, selanjutnya akan tampil “Menu Pilihan

57
Metode Sorting” sama dengan yang sebelumnya kita akan diminta untuk
menginputkan pilihannya. Untuk membuat program menu tersebut digunakan
perintah “switch case”.
Pada program gambar output diatas diinputksn pilihsn nomer 2, maka
metode yang dipilih adalah “Straight Inserttion Search” lalu dibwahnya akan
muncul “Data Anda yang sudah diurutkan :”

58
BAB IV

PENUTUP

4.1 Kesimpulan
Ketiga metode pengurutan langsung yang dibahas hanya merupakan
sebagian metode pengurutan langsung lainnya. Banyak metode lain untuk
mengurutkan data. Metode-metode tersebut bertujuan sama yaitu mengurutkan
data, yang berbeda hanya cara yang mempengaruhi kecepatan untuk jumlah data
tertentu.
Pengurutan tidak langsung dapat menggunakan beberapa metode : Shell
sort, Quick sort, dan Merge sort. Metode pengurutan tidak langsung,
implementasinya dapat menggunakan fungsi rekursi.Semua dari metode inisama
yaitu mengurutkan data entah data itu string,chat, atau integer, tetapi
penerapanyang lebih mendalam adalah untuk menyelesaikan masalah berdasarkan
jumlah datanya,tentu hal ini akan teruji efisiensi dari masing-masing metode.
Selain hal tersebut didalam metode terdapat metode pengurutan data dari terkecil
ke data yang terbesar yaituatau sering disebut ascending dan sebaliknya
descending.
Berdasarkan uraian bahasan “searching dan sorting” dapat disimpulkan bahwa :
Pencarian Sekuensial (Sequential Search) adalah model pencarian yang paling
sederhana yang dilakukan terhadap suatu kumpulan data.
Pencarian Biner (Binary Search) adalah algoritma yang digunakan untuk
kebutuhan pencarian data dengan waktu yang cepat.
1. Terdapat banyak algoritma searching dan sorting yang bisa programmer
gunakan sehingga dapat digunakan dalam situasi dan kondisi masalah tertentu.
2. Pembuat algoritma baru dirasakan sangat penting karena setiap masalah akan
memerlukan teknik sorting dan searching yang baik dan sesuai.

4.2 Saran
Saran yang dapat diberikan untuk pengembangan sistem ini selanjutnya
adalah sebagai berikut :

59
Dalam kesempatan-kesempatan berikutnya sebaiknya ditambahkan
kemungkinan algoritma-algoritma baru sehingga ke depannya akan didapt lebih
banyak algoritma yang lebih efisien dan efektif.

60
KESIMPULAN UMUM
Array adalah sekumpulan elemen dengan tipe data yang sama pada
memori yang lokasinya berurutan, namun dapat diakses secara terpisah dengan
menggunakan index sebagai penunjuk lokasi memori larik. Antara satu variabel
dengan variabel lain di dalam array dibedakan berdasarkan subscript( berupa
bilangan yang terdapat didalam kurung siku). Contoh Program diatas adalah
Array Dimensi dua, dalam Array dimensi dua array harus didefinisikan terlebih
dahulu, setelah itu dilakukan perulangan setiap dimensi dan terakhir perulangan
untuk menampilkan inputan. Sebenarnya array dimensi satu dan array dimensi
tidak jauh berbeda hanya saja array berdimensi dua terdiri dari beberapa baris dan
kolom yang bertipe data sama.
- Array dapat digunakan untuk menyimpan banyak data yang mempunyai
data sejenis.
- Data yang jenisnya berbeda tidak dapat ditempatkan pada satu array yang sama.
- Umumnya indeks array diawali dari indeks ke-0, sehingga jika ingin mengakses
data ke-1 pada array bisa kita aksesmenggunakan indeks data ke-0 pada array
dan seterusnya - Sebelum menggunakan array, perlu membuatnya dan
mendeklaraskannya terlebih dahulu.
- Array satu Dimensi mempunyai 1 nama tetapi memiliki banyak tempat dan
setiap tempat harus dibedakan, untuk membedakannya dibutuhkan penunjuk,
pentunjuk dapat berupa karakter(char) atau integer.
- Array yang sudah disimpan dalam penunjuk yang sama(berbentuk indeks),
isinya tidak akan hilang kecuali indeksnya diisi oleh nilai yang lain.
Dari kegiatan praktikum diatas dapat disimpulkan bahwa record dapat
mengumpulkan beberapa tipe data yang berbeda menjadi satu kesatuan. Masing-
masing item data disebut dengan field. Jadi record terdiri dari kumpulan field
yang dapat berbeda tipe. Biasanya suatu record berisi beberapa field untuk sebuah
subyek tertentu. Record sebaiknya digunakan pada saat kita ingin menggabungkan
beberapa tipe data (field) menjadi satu kesatuan.
Ketiga metode pengurutan langsung yang dibahas hanya merupakan
sebagian metode pengurutan langsung lainnya. Banyak metode lain untuk
mengurutkan data. Metode-metode tersebut bertujuan sama yaitu mengurutkan

ix
data, yang berbeda hanya cara yang mempengaruhi kecepatan untuk jumlah data
tertentu.
Pengurutan tidak langsung dapat menggunakan beberapa metode : Shell
sort, Quick sort, dan Merge sort. Metode pengurutan tidak langsung,
implementasinya dapat menggunakan fungsi rekursi.Semua dari metode inisama
yaitu mengurutkan data entah data itu string,chat, atau integer, tetapi
penerapanyang lebih mendalam adalah untuk menyelesaikan masalah berdasarkan
jumlah datanya,tentu hal ini akan teruji efisiensi dari masing-masing metode.
Selain hal tersebut didalam metode terdapat metode pengurutan data dari terkecil
ke data yang terbesar yaituatau sering disebut ascending dan sebaliknya
descending.
Berdasarkan uraian bahasan “searching dan sorting” dapat disimpulkan bahwa :
Pencarian Sekuensial (Sequential Search) adalah model pencarian yang paling
sederhana yang dilakukan terhadap suatu kumpulan data.
Pencarian Biner (Binary Search) adalah algoritma yang digunakan untuk
kebutuhan pencarian data dengan waktu yang cepat.
1. Terdapat banyak algoritma searching dan sorting yang bisa programmer
gunakan sehingga dapat digunakan dalam situasi dan kondisi masalah tertentu.
2. Pembuat algoritma baru dirasakan sangat penting karena setiap masalah akan
memerlukan teknik sorting dan searching yang baik dan sesuai

x
DAFTAR PUSTAKA

http://documents.tips/documents/laporan-praktikum-resmi-array-dimensi-dua.html
(diakses pada tanggal 17 mei 2016)
http://dokumen.tips/documents/laporan-praktikum-resmi-searching.html(diakses
29 mei 2016)
http://dokumen.tips/documents/praktikum-searching.html(diakses29 mei 2016)
http://hacklistweb.blogspot.co.id/2015/06/makalah-bahasa-pemrograman-
c_8.html(diakses pada tanggal 17 mei 2016)
http://jalannyauzanks.blogspot.co.id/2011/06/download-laporan-praktikum-
algoritma.html 22 mei 2016
http://mieke.lecturer.pens.ac.id/bhs-c/prakt-c/p9-array.pdf (diakses pada tanggal
15 mei 2016) Mike Yuliana-PENS ITS
http://newbieitlinux.blogspot.co.id/
http://non-azza.blogspot.co.id/2014/02/laporan-resmi-algoritma-
pemrograman_1735.html
http://syamsiadiz.blogspot.co.id/2013/12/algoritma-dan-pemrograman-
rekursif.html 21 mei 2016

xi

Anda mungkin juga menyukai