Anda di halaman 1dari 162

 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

01
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Pengenalan Bahasa C++  Mampu menggunakan IDE Borland C++
 Konstanta dan tipe data dalam C++  Mampu membuat program console
 Mencetak nilai konstanta bilangan integer sederhana dalam Bahasa C++ dan
dan float serta string dalam C++ mencetak konstanta bilangan, karakter dan
 Memberi nilai ke dalam variabel bilangan string dalam Bahasa C++
integer dan float dalam C++  Mampu memberi nilai ke dalam variabel
bertipe data bilangan integer dan float
serta menampilkan nilai variabel bilangan
integer dan float
STRUKTUR DASAR C++
1. Pendahuluan

Algoritma adalah urutan aksi-aksi yang dinyatakan dengan jelas dan tidak rancu
untuk memecahkan suatu masalah dalam rentang waktu tertentu. Setiap aksi harus
dapat dikerjakan dan mempunyai efek tertentu.
Algoritma dapat dituliskan dengan banyak cara, mulai dari menggunakan bahasa
alami yang digunakan sehari-hari, simbol grafik bagan alir, sampai menggunakan bahasa
pemograman seperti bahasa C atau C++.

2. C dan C++

Berbicara tentang C++ biasanya tidak lepas dari C, sebagai bahasa


pendahulunya. Pencipta C adalah Brian W. Kerninghan dan Dennis M. Ritchie pada
sekitar tahun 1972, dan sekitar satu dekade setelahnya diciptakanlah C++, oleh
Bjarne Stroustrup dari Laboratorium Bell, AT&T, pada tahun 1983. C++ cukup
kompatibel dengan bahasa pendahulunya C. Pada mulanya C++ disebut “ a better C “.
Nama C++ sendiri diberikan oleh Rick Mascitti pada tahun 1983, yang berasal dari
operator increment pada bahasa C.

3. Mengenal C++
 C++ merupakan perluasan bahasa C dengan tambahan fasilitas kelas (Class).
 Program C++ berupa sekumpulan fungsi. Bahkan program utama juga berbentuk
fungsi, yaitu fungsi main().
 Kode C++ bersifat case sensitive, artinya membedakan antara huruf kapital dengan
huruf kecil.
 Bahasa C dan C++ merupakan bahasa yang sangat populer dalam dunia
pengembangan perangkat lunak. Kedua bahasa ini digolongkan ke dalam bahasa
tingkat menengah (middle level language).
 Keistimewaan dari bahasa C++ adalah karena bahasa ini mendukung pemrograman
berarah objek atau yang lebih sering dikenal dengan istilah Object Oriented
Programming (OOP).

Mengapa perlu Object Oriented Programming (OOP)?


 Mempermudah programmer menulis program.
 Mempercepat proses pembuatan program
 Mempermudah pemeliharaan program

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
Bahasa C

 Fleksibel: dapat mengakses/mendekati mesin, namun mudah dimengerti oleh


manusia.
 Portabel: dipakai mulai dari komputer mikro sampai superkomputer.
 Bahasa yang paling banyak digunakan dalam ilmu komputer, untuk membuat OS,
aplikasi, dan lain lain.
 Didukung oleh banyak pustaka (libraries)

Bahasa C++

 Merupakan pengembangan bahasa C dan diberi kemampuan OOP.


 C++ merupakan subset dari bahasa C, maka pustaka yang ditulis dalam bahasa C
dapat dipergunakan dalam bahasa C++.

Kerangka program C++

#include <iostream.h>
//Protopype fungsi
tipe_data nama_fungsi(parameter1,parameter2,..);
//Fungsi utama
void main()
{
statemen_yang_akan_dilakukan;
...
return 0;
}
//Implementasi fungsi
tipe_data nama_fungsi(parameter1,parameter2,...)
{
statemen_yang_akan_dilakukan;
...
}

Contoh1 :

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
#include<iostream.h>
int main()
{
cout <<"Selamat menggunakan C++";
return 0;
}
Keterangan:
 #include adalah sebuah prosesor pengarah yang mengatakan kepada kompiler untuk
meletakan kode dari header file iostream.h kedalam program. Fungsi cout memerlukan
file iostream.h.
 Main adalah nama judul fungsi.
 Tanda () digunakan untuk mengapit argumen fungsi yaitu nilai yang akan dilewatkan ke
fungsi.
 Tanda { pada fungsi main() menyatakan awal eksekusi program. Adapun } pada fungsi
main() menyatakan akhir eksekusi program.
 Pemakaian fungsi cout dipakai untuk menampilkan text di layar monitor anda.
 memakai tanda atau symbol <<, yang diketahui sebagai operator pemasukan (insertion
operators). Tanda tersebut mengatakan kepada kompiler agar segera menghasilkan
output sesuai dengan input anda.
 ”Selamat menggunakan C++“ adalah suatu pernyataan yang diapit oleh tanda petik
ganda. Setiap pernyataan harus diakhiri dengan tanda titik koma (;).
 return 0 maksudnya pada baris ini juga ada kode yang memerintahkan fungsi main
kembali ke 0. Pada saat satu kali kembali.
Contoh 2:

#include <iostream.h>
int main()
{
int x, y, z;
cout <<“Masukkan bilangan kesatu:“;
cin >> x;
cout <<“Masukkan bilangan kedua:“;
cin >> y;
z = x + y;
cout << ”Jadi hasil penjumlahannya adalah: ” << z;
return 0;
}

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

1. Komentar :
 Komentar merupakan bagian yang penting dalam program.
 Komentar tidak akan mempengaruhi terhadap jalannya program karena
komentar tidak ikut dieksekusi pada saat proses kompilasi.
 Fungsi komentar antara lain:
1. Menjelaskan tujuan / fungsi program
2. Memudahkan saat program dibuat atau direvisi
3. Menjelaskan keterangan-keterangan lain tentang kegunaan sejumlah
pernyataan dalam program.

a. Menggunakan tanda //
Pada C++ suatu komentar diawali dengan dua tanda garis miring (//). Semua
tulisan yang terletak sesudah tanda // hingga akhir baris dengan sendirinya akan
diperlakukan sebagai keterangan. Tanda ini digunakan untuk menuliskan
komentar yang banyaknya hanya satu baris.
b. Menggunakan tanda /*.....*/
Tanda ini dapat digunakan untuk menuliskan komentar yang banyaknya satu
baris atau lebih. Bentuk ini bermanfaat untuk mengabaikan sejumlah pernyataan
yang telah dibuat oleh pemrograman karena suatu alasan misalnya sedang
melacak kesalahan.

2. Identifier
 Identifier (pengenalan) adalah suatu nama yang biasa dipakai dalam pemrograman
untuk menyatakan variabel, konstanta bernama, tipe data, fungsi, label, objek.
Indentifikasi dilakukan untuk mempermudah proses penanganan data atau nilai.
 Ketentuan penulisan identifier:
a. Tidak boleh berupa angka atau diawali dengan karakter yang berupa angka.
b. Tidak boleh mengandung spasi.
c. Tidak boleh menggunakan karakter-karakter simbol ( #, @, ?, $, dll).
d. Tidak boleh menggunakan kata kunci (keyword) yang terdapat pada C++.

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
e. Nama identifier sebaiknya disesuaikan dengn kebutuhannya artinya jangan
sampai orang lain bingung hanya karena salah satu penamaan identifier.
Contoh identifier:
 int bilangan_bulat;
 long X2;
 int A[5]
 const int MAX=5;
 int A=10, B=15, C=25;

3. Tipe Data
Tipe data berfungsi untuk merepresentasikan jenis dari sebuah nilai yang terdapat dalam
program. Dalam C++ terdapat beberapa tipe data dasar yang telah didefinisikan yaitu:
1. Tipe bilangan bulat (integer)
Digunakan untuk data-data angka yang tidak mengandung angka dibelakang koma.
Misalnya 3, 21, 78.
contoh:
#include <iostream.h>
int main()
{
int x; //mendeklarasikan variabel x dengn tipe data int
x=3; //melakukan assigment terhadap variabel x
cout <<“Nilai x adalah “<<x;
return 0;
}

2. Tipe Bilangan Desimal (floating-point)


 Adalah tipe yang mempresentasikan data-data bilangan yang mengandung
angka dibelakang koma, misalnya 3.16, 21.5, dll.
Tipe data Float = 32, double = 64, dan long double = 80.
Contoh:
#include <iostream.h>
int main()
{
double y;
y = 27.55; //melakukan assigment terhadap variabel y
cout <<“Nilai y adalah “<<y;
return 0;
}

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
3. Tipe Logika (boolean)
Tipe ini merepresentasikan data-data yang hanya mengandung dua buah nilai, yaitu
nilai logika (boolean) yang terdiri dari nilai benar (direpresentasikan dengan nilai 1) dan
nilai salah (direpresentasikan dengan nilai 0).

4. Tipe Karakter / String


Tipe ini merepresentasikan data-data yang berupa karakter, dan dinyatakan dengan
tipe char, sedangkan untuk string dinyatakan dengan pointer dari tipe char yaitu char*.
Contoh :
#include <iostream.h>
int main()
{
char Karakter ='A';
char*nama ="Susi Susanti";
char Jurusan[15]="INFORMATIKA";
cout <<Karakter<<endl;
cout <<nama<<endl;
cout <<Jurusan<<endl;
return 0;
}

5. Tipe data Bentukan


Adalah tipe data yang dibuat sendiri sesuai kebutuhan dalam program yang akan
dimuat.
a. Struktur
Struktur adlah tipe data bentukan yang menyimpan lebih dari satu variabel bertipe
sama maupun berbeda.
Deklarasinya:
Struct nama_struktur
{
Tipe_data variabel1;
Tipe_data variabel2;
......
};
#include<iostream.h>
#include<string.h>
int main()

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
{
struct MAHASISWA
{
char NIM[15];
char Nama[20];
char Alamat[30];
char Kota[15];
}A;
strcpy(A.NIM,"01500024");
strcpy(A.Nama,"Susi Susanti");
strcpy(A.Alamat,"Jl.Raya Meruya Selatan");
strcpy(A.Kota,"Jakarta");
cout<<A.NIM<<endl;
cout<<A.Nama<<endl;
cout<<A.Alamat<<endl;
cout<<A.Kota<<endl;
return 0;
Hasil Eksekusi :

b. Enumerasi
Tipe Enumerasi adalah tipe data yang nilainya terbatas pada nilai-nilai yang telah
didefinisikan saja. Tipe enumerasi digunakan untuk membentuk tipe data yang nilainya
pasti.
Deklarasinya:
enum nama_tipe{nilai1, nilai2,....};
Contoh pendefinisian tipe enumerasi:
enum JENIS_KELAMIN{Pria, Wanita};
enum HARI{Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu};

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
contoh :
#include<iostream.h>
#include<string.h>
enum JENIS_KELAMIN{Pria, Wanita};
int main()
{
struct MAHASISWA
{
char NIM[15];
char Nama[20];
char Alamat[30];
char Kota[15];
JENIS_KELAMIN gender;
}A;
strcpy(A.NIM,"01500024");
strcpy(A.Nama,"Susi Susanti");
strcpy(A.Alamat,"Jl.Raya Meruya Selatan");
strcpy(A.Kota,"Jakarta");
A.gender=Wanita;
cout<<"NIM : "<<A.NIM<<endl;
cout<<"Nama : "<<A.Nama<<endl;
cout<<"Alamat : "<<A.Alamat<<endl;
cout<<"Kota : "<<A.Kota<<endl;
cout<<"Jenis Kelamin : "<<A.gender<<endl;
return 0;
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
Latihan :

1. Buatlah program dengan menggunakan struct dengan hasil eksekusi program


sebagai berikut:
Plat Nomor Kendaraan : B1669OK
Jenis Kendaraan : AVANZA
Nama Pemilik : Bambang Susilo
Alamat : Jl. Meruya raya No 1
Kota : Jakarta

2. Buatlah program dengan tampilan sbb:


Masukkan sebuah huruf = .............
Masukan sebuah kata = .................
Masukkan Angka = ..................
Huruf yang Anda masukkan adalah .............
Kata yang Anda masukkan adalah ..............
Angka yang Anda masukkan adalah ........

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 01 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

02
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Operator || dan && dalam bahasa C++  Mampu menggunakan operator || (OR)
dan && (AND) dan melakukan kombinasi
 Proses konversi dari multi conditions antara berbagai operator tersebut.
menjadi nested if
 Mampu melakukan konversi dari multi
conditions menjadi nested if
OPERATOR C++
 Operator adalah simbol yang mengolah nilai pada operand dan menghasilkan satu nilai
baru.
 Operator dapat dikelompokan menjadi 4 bagian yaitu:
1. Operator Assignment
2. Operator Unary
3. Operator Binary
4. Operator Ternary

1. Operator Assignment
Adalah operator yang berfungsi untuk memasukkan (assign) nilai ke dalam suatu
variabel ataupun konstanta. Operator ini dilambangkan dengan tanda sama dengan (=)
Contoh:
MyChar = 'C';
MyString = "Rahasia C++";
MyInteger = 24;
MyDouble = 22.021;

2. Operator Unary
Adalah operator yang hanya melibatkan sebuah operand. Yang termasuk ke dalam tabel
operator unary antara lain:

Operator Jenis Operasi Contoh

+ Positif +7

- Negatif -7
++ Incremen C++

-- decremen C--

 Increment adalah suatu penambahan nilai yang terjadi pada sebuah variabel.
Operator yang digunakan untuk melakukan increment adalah operator ++.
Ada dua jenis increment dalam C++ yaitu pre-increment dan post-increment.
Pre-increment artinya melakukan penambahan nilai sebelum suatu variabel itu
diproses. Post-incremen artinya melakukan proses terlebih dahulu sebelum
dilakukan penambahan nilai.

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
 Decrement merupakan kebalikan dari proses increment, yaitu menurunkan
(mengurangi) nilai dari suatu variabel. Operator yang digunakan untuk melakukan
decrement adalah operator --. Decrement juga dibagi 2 yaitu pre-decrement dan
post-decrement.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int A; //mendeklarasikan variabel
A = 5;
cout<<"Contoh melakukan pre-increment \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai ++A adalah :"<<++A<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
cout<<"Contoh melakukan pre-decrement \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai --A adalah :"<<--A<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
//mengubah nilai A menjadi 10
A = 10;
cout<<"Contoh melakukan post-increment \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai A++ adalah :"<<A++<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
cout<<"Contoh melakukan post-decrement \n";
cout<<"Nilai A awal adalah : "<<A<<endl;
cout<<"Nilai A-- adalah :"<<A--<<endl;
cout<<"Nilai A akhir adalah:"<<A<<endl;
cout<<'\n'<<endl;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

3. Operator Binary
Adalah operator yang digunakan dalam operasi yang melibatkan dua buah operand.
Operator Binary dikelompokan menjadi 4 jenis yaitu:
a. Operator Aritmatika
b. Operator Logika
c. Operator Relasional
d. Operator Bitwise

a. Operator Aritmatika
Adalah operator yang digunakan untuk melakukan operasi-operasi aritmatika seperti
penjumlahan, pengurangan, dan sebagainya.
Operator Keterangan
* Perkalian
/ Pembagian
% Modulus atau sisa bagi
+ Penjumlahan
- Pengurangan

Contoh :

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int main()
{
int X = 10, Y = 3;
int jumlah, kurang, kali, bagi, sisa_bagi;
jumlah = X + Y;
kurang = X - Y;
kali = X * Y;
bagi = X / Y;
sisa_bagi= X % Y;
cout<<X<<" + "<<Y<<" = "<<jumlah<<endl;
cout<<X<<" - "<<Y<<" = "<<kurang<<endl;
cout<<X<<" * "<<Y<<" = "<<kali<<endl;
cout<<X<<" / "<<Y<<" = "<<bagi<<endl;
cout<<X<<" % "<<Y<<" = "<<sisa_bagi<<endl;
getch();
}

Hasil eksekusi :

b. Operator Logika
Adalah operator yang digunakan untuk melakukan operasi dimana nilai yang
dihasilkan dari operasi tersebut hanya bernilai benar (true / 1) atau salah (false / 0).
Nilai ini biasa disebut dengan boolean. Yang termasuk operator logika antara lain:
1. Operator AND (&&)

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
hanya akan menghasilkan nilai 1 (benar) jika semua operand-nya bernilai benar,
namun jika tidak maka operasi tersebut akan menghasikan nilai 0 (salah).

2. Operator OR (||)
hanya akan menghasilkan nilai 0 (salah) jika semua operand-nya bernilai salah,
namun jika tidak maka operasi tersebut akan menghasilkan nilai 1 (benar).

3. Operator NOT (!)


Nilai yang dihasilkan oleh nilai NOT adalah kebalikan dari nilai yang dikandung di
dalamnya. Jika nilai awal 1 (benar) maka nilai operasi NOT menjadi 0 (salah).
Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
cout<<"Logika AND"<<endl;
cout<<" 1 AND 1 = "<<(1&&1)<<endl;
cout<<" 1 AND 0 = "<<(1&&0)<<endl;
cout<<" 0 AND 1 = "<<(0&&1)<<endl;
cout<<" 0 AND 0 = "<<(0&&0)<<endl;
cout<<endl;
cout<<"Logika OR"<<endl;
cout<<" 1 OR 1 = "<<(1||1)<<endl;
cout<<" 1 OR 0 = "<<(1||0)<<endl;
cout<<" 0 OR 1 = "<<(0||1)<<endl;
cout<<" 0 OR 0 = "<<(0||0)<<endl;
cout<<endl;
cout<<"Logika NOT"<<endl;
cout<<" NOT 1 = "<<(!1)<<endl;
cout<<" NOT 0 = "<<(!0)<<endl;
getch();
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
c. Operator Relasional
Adalah operator yang digunakan untuk menentukan relasi atau hubungan dari dua
buah operand. Operator ini banyak digunakan untuk melakukan pengecekan sebuah
ekspresi (kondisi) dalam struktur percabangan.
OperatorJenis Operasi
> Lebih besar
< Lebih kecil
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
== Sama dengan
!= Tidak sama dengan
Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
int nilai;
//memasukkan bilangan bulat
cout<<" Masukkan sebuah bilangan bulat : ";
cin>>nilai;

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
if (nilai % 2 == 0)
cout<<nilai<<" adalah bilangan Genap"<<endl;
else
cout<<nilai<<" adalah bilangan Ganjil"<<endl;
getch();
}

Hasil eksekusi :

d. Operator Bitwise
Adalah operator yang digunakan untuk melakukan operasi-operasi yang berhubungan
dengan pemanipulasian bit.
Yang termasuk dalam operator bitwise anta lain:
Operator Keterangan
<< Shift left
>> shift right
&& operasi bit AND
|| Operasi bit OR
^ Operasi bit XOR
~ Operasi bit NOT
 Operator & berguna untuk melakukan operasi ”DAN” pada tataran bit.
1001 9
1010 10
1000 8

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
 Operator | berguna untuk melakukan operasi ”ATAU” pada tataran bit.
1001 9
1010 10
1011 11
 Operator ^ berguna untuk melakukan operasi ”ATAU EKSKLUSIF” pada tataran bit.
1001 9
1010 10
0011 3
 Operator ~ memberikan hasil dengan masing-masing bit berupa kebalikan dari bit
operand.
1011 1001
0100 0110
 Operator << (geser kiri) berfungsi untuk menggeser bit-bit ke kiri.
contoh: 29 << 1 memberikan nilai hasil 58
0001 1101 29
0011 1010 58
 Operator << (geser kanan) berfungsi untuk menggeser bit-bit ke kanan.
contoh: 29 << 1 memberikan nilai 14
0001 1101 29
0000 1110 14
Contoh :
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
int x=64;
int y= 1;
cout<<" NOT "<<x<<" = "<< ~x<<endl;
cout<<x<<" OR "<<y<<" = "<<(x|y)<<endl;
cout<<x<<" AND "<<y<<" = "<<(x&y)<<endl;
cout<<x<<" XOR "<<y<<" = "<<(x^y)<<endl;
cout<<x<<" GESER KIRI "<<y<<" = "<<(x<<y)<<endl;
cout<<x<<" GESER KANAN "<<y<<" = "<<(x>>y)<<endl;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
Hasil eksekusi :

4. Operator Ternary

 Adalah operator yang digunakan dalam operasi yang melibatkan tiga buah operand.
Bentuk umum:

Ekspresi1? Ekspresi2: Ekspresi3;

Jika ekspresi1 bernilai benar, maka program akan mengeksekusi ekspresi2.


Sedangkan jika ekspresi1 salah maka yang dieksekusi adalah ekspresi3.

Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int main()
{
int angka;
cout<<"Masukkan bilangan: ";
cin>>angka;
(angka %2 ==0) ? (cout<<angka<<" adalah bilangan Genap \n") :
(cout<<angka<<" adalah bilangan Ganjil \n");
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
Latihan :
1. Buatlah program untuk menentukan bilangan positif atau negatif dengan menggunakan
operator ternary!
2. Buatlah program untuk menentukan nilai mahasiswa lulus atau tidak lulus (nilai lulus jika
>= 65) dengan menggunakan operator ternary!
3. Buatlah program untuk menghitung menghitung luas persegi panjang (panjang * lebar)
dengan inputan dari user
4. Buatlah program untuk menghitung menghitung Keliling lingkaran (2 * PI * jari-jari),
Dengan inputan dari user!

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 02 Pusat Bahan Ajar dan eLearning
  12 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

03
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Struktur Kondisi IF  Mampu menggunakan struktur kondisi
IF dalam bahasa pemrograman C++.
 Struktur Kondisi Switch Case
 Mampu menggunakan struktur kondisi
Switch Case dalam bahasa pemrograman
C++.
PERCABANGAN (DECISION)
 Decision digunakan untuk memilih salah satu alternatif jawaban yang tepat dari pilihan
yang ada.
 Suatu pemilihan statemen yang akan dieksekusi dimana pemilihan tersebut didasarkan
atas kondisi tertentu.
 Statemen yang terdapat dalam sebuah blok percabangan akan dieksekusi jika kondisi
yang didefinisikan terpenuhi (bernilai benar) Artinya jika kondisi tidak terpenuhi (bernilai
salah) maka statemen tersebut tidak ikut dieksekusi atau akan diabaikan oleh compiler.

1. Struktur satu kondisi (perintah IF)


• digunakan untuk menyeleksi suatu kondisi tunggal.
• Bila proses yang diseleksi terpenuhi atau bernilai benar, maka pernyataan yang ada
di dalam blok if akan diproses dan dikerjakan.
Bentuk umum struktur kondisi if adalah:
if(kondisi)
pernyataan;
contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai; //memasukkan bilangan bulat
cout<<"Masukkan sebuah bilangan bulat: ";
cin>>nilai; //menampilkan teks jika nilai yang tersimpan lebih besar dari 0
if (nilai > 0)
cout<<"Nilai yang Anda masukkan adalah bilangan positif";
getch();
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
2. Struktur dua kondisi (perintah if – else)

 Perintah if.....else minimal terdapat dua pernyataan.


 Jika kondisi yang diperiksa bernilai benar atau terpenuhi maka pernyataan pertama
yang dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka pernyataan
yang kedua yang dilaksanakan.
Bentuk Umum :

if (kondisi)
{
statemen_jika_kondisi_terpenuhi;
}
else
{
statemen_jika_kondisi_tidak_terpenuhi;
}

Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai;
cout<<"Masukkan sebuah bilangan bulat: ";
cin>>nilai;
if (nilai %2 == 0)
{
cout<<nilai <<" adalah bilangan genap";
}
else
{
cout<<nilai <<" adalah bilangan ganjil";
}
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
3. Struktur tiga kondisi (perintah multiple if – else)
Percabangan jenis ini merupakan perluasan dari struktur yang memiliki dua
kondisi diatas yaitu dengan menyisipkan satu atau lebih kondisi ke dalamnya.
Bentuk umum:
if (kondisi1)
{
statemen_jika_kondisi1_terpenuhi;
}
else if (kondisi2)
{
statemen_jika_kondisi2_terpenuhi;
}
else if (kondisi3)
{
statemen_jika_kondisi3_terpenuhi;
}
....
else
{
statemen_jika_semua_kondisi_tidak_terpenuhi;
}

Contoh 1:
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
#include <conio.h>
void main()
{
int nilai; //memasukkan bilangan bulat
cout<<"Masukkan sebuah bilangan yang akan diperiksa : ";
cin>>nilai; //pengecek bilangan apakah habis dibagi dua atau tidak
if (nilai > 0)
{
cout<<nilai<< " adalah bilangan positif ";
}
else if (nilai < 0)
{
cout<<nilai<< " adalah bilangan negatif ";
}
else
{
cout<< " Anda memasukkan bilangan NOL ";
}
getch();
}

Hasil Eksekusi :

Contoh 2 :

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai;
char huruf;
cout<<"Masukkan nilai : " ;
cin>>nilai;
if ((nilai>=81) && (nilai<=100))
huruf='A';
else
if ((nilai>=71) && (nilai<=80))
huruf='B';
else
if ((nilai>=61) && (nilai<=70))
huruf='C';
else
if ((nilai>=51) && (nilai<=60))
huruf='D';
else
huruf='E';
cout<<"Jadi nilai huruf yang didapat adalah: "<<huruf;
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
Latihan :
Buatlah program untuk menentukan huruf, dengan ketentuan sebagai
berikut:
 Jika karakter >=’A’ dan karakter <=’Z’ maka Karakter yang Anda masukkan adalah
huruf besar.
 Jika karakter >=’a’ dan karakter <=’z’ maka Karakter yang Anda masukkan adalah
huruf kecil.
 Jika karakter >=’0’ dan karakter <=’9’ maka Karakter yang Anda masukkan adalah
Angka.
 Jika bukan semuanya berarti Karakter yang Anda masukkan adalah bukan
alphanumeric.
Jawab :
#include <vcl.h>
#pragma hdrstop
//Program menentukan karakter
#include <iostream.h>
#include <conio.h>
void main()
{
char karakter;
cout<<"Masukkan sebuah karakter: ";
cin>>karakter;
if (karakter >= 'A' && karakter <= 'Z')
cout<<"Masukkan Anda adalah huruf besar";
else if (karakter >= 'a' && karakter <= 'z')
cout<<"Masukkan Anda adalah huruf kecil";
else if (karakter >= '0' && karakter <= '9')
cout<<"Masukkan Anda adalah angka";
else
cout<<"Masukkan Anda bukan alphanumeric";
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

4. Perintah switch
 Perintah ini memiliki bentuk switch – case yang digunakan untuk pilihan berjumlah
banyak.
 Perintah switch tidak dianjurkan pada pilihan yang melibatkan jangkauan nilai (range)
tetapi dianjurkan pada pilihan berupa konstanta dan banyak misalnya untuk memilih
menu.
Bentuk umum:
switch (pernyataan)
{
case nilai_1:
blok_pernyataan1;
break;
case nilai_2:
blok_pernyataan2;
break;

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
default:
blok_pernyataan_n;
}

Cara kerjanya:
1. switch akan mengevaluasi pilihan dan apabila isinya sama dengan nilai_1,
maka blok pernyataan 1 akan dijalankan sampai menemukan perintah break untuk
kemudian keluar dari blok switch.
2. Bila pilihan tidak sama isinya dengan nilai_1, maka akan dicocokkan lagi dengan
nilai_2. dan apabila isinya sama dengan nilai_2, maka blok pernyataan 2 akan
dijalankan sampai menemukan perintah break untuk kemudian keluar dari blok
switch.
3. Terakhir, apabila isi pilihan tidak sesuai dengan nilai_1, nilai_2 dan seterusnya maka
secara otomatis yang dijalankan adalah blok pernyataan default.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
{
int bil;
cout<<"Masukkan sebuah angka (1 .. 7): ";
cin>>bil;
switch (bil)
{
case 1:
cout<<"Hari ke - "<<bil<<"adalah MINGGU";
break;
case 2:
cout<<"Hari ke - "<<bil<<" adalah SENIN";
break;
case 3:
cout<<"Hari ke - "<<bil<<"adalah SELASA";
break;
case 4:
cout<<"Hari ke - "<<bil<<"adalah RABU";
break;
case 5:
cout<<"Hari ke - "<<bil<<"adalah KAMIS";
break;
case 6:
cout<<"Hari ke - "<<bil<<"adalah JUMAT";
break;
case 7:
cout<<"Hari ke - "<<bil<<"adalah SABTU";
break;

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
default:
cout<<"Kode tidak ada";
}
getch();
}
}

Hasil eksekusi :

Soal Latihan :

1. Buatlah program menggunakan menu :


A. Menentukan karakter
B. Toko Buku
C. Buatlah program untuk menentukan masukkan dari user apakah berupa huruf
vokal atau konsonan!

2. Buatlah program untuk menghitung luas dengan menggunakan menu, dengan


ketentuan sebagai berikut:
1. Menghitung Luas Bujur Sangkar.
2. Menghitung Luas Persegi Panjang.
3. Menghitung Luas Segi Tiga
4. Menghitung Luas Lingkaran.

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 03 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

04
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Struktur perulangan dengan for,    Mampu menggunakan struktur 
do‐while dan while  perulangan dengan for, do‐while dan 
 Pengaplikasian struktur perulangan   while dalam Bahasa Pemrograman C++ 
untuk memecahkan soal‐soal    Mampu memanfaatkan struktur 
matematika dan fisika  perulangan untuk memecahkan soal‐soal 
matematika dan fisika 
 
 
 
 

PERULANGAN (LOOPING)
1. Pernyataan While

Pada pernyataan while, pengecekan terhadap loop dilakukan dibagian awal (sebelum
tubuh loop). Bentuk umum :
while (kondisi)
pernyataan;

Perulangan ini banyak digunakan bila jumlah perulangannya belum diketahui. Proses
perulangan akan terus berlanjut selama kondisinya bernilai benar (true) dan akan
berhenti bila kondisinya bernilai salah.
Contoh :

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int x;
x = 1; /* awal variabel */
while (x <= 10) /* Batas akhir perulangan */
{
cout<<"Bahasa C++ "<<endl;
x ++; /* variabel x ditambah dengan 1 */
}
getch();
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
Keterangan :
 Pada perulangan while, proses atau perintah mencetak kata-kata “BAHASA C++”
akan terus dilakukan selama variabel x masih kurang atau sama dengan 10. Setiap
kali melakukan perulangan, nilai dari variabel x akan bertambah 1.
Contoh 2:

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int i = 0;
while (i != 99)
{
cout<<" Masukkan Sebuah Bilangan : ";
cin>>i;
cout<<"Bilangan Anda adalah= "<<i<<endl;
}
getch();
}

Hasil eksekusi :

Ket :
 Program minta inputan dari user dengan tipe integer
 Selama user belum memasukkan nilai 99 maka program akan terus melooping.
 Looping akan berhenti jika user telah memasukkan angka 99.

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
2. Pernyatan Do .. While…

 Pada pernyataan do-while, tubuh loop berupa pernyataan.


 Pada pernyataan do, mula-mula pernyataan dijalankan.
 Selanjutnya, kondisi diuji. Seandainya kondisi bernilai benar, maka pernyataan
dijalankan lagi, kemudian kondisi diperiksa kembali, dan seterusnya.
 Kalau kondisi bernilai salah, maka pernyataan tidak dijalankan lagi.
 Pada dasarnya struktur perulangan do....while sama saja dengan struktur while, hanya
saja pada proses perulangan dengan while, seleksi berada di while yang letaknya di
atas sementara pada perulangan do....while, seleksi while berada di bawah batas
perulangan. Jadi dengan menggunakan struktur do…while sekurang-kurangnya akan
terjadi satu kali perulangan.
Bentuk umum: do
pernyataan;
while (kondisi)

Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
int x; x = 1;
do
{
cout<<"BAHASA C++ "<<endl; x ++;
}
while(x <= 10);
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
3. Pernyataan For
Struktur perulangan for biasa digunakan untuk mengulang suatu proses yang telah
diketahui jumlah perulangannya. Dari segi penulisannya, struktur perulangan for
tampaknya lebih efisien karena susunannya lebih simpel dan sederhana.
Bentuk umum perulangan for:

for(inisialisasi; syarat; penambahan)


pernyataan;

Inisialisasi : pernyataan untuk menyatakan keadaan awal dari variabel kontrol.


syarat : ekspresi relasi yang menyatakan kondisi untuk keluar dari perulangan.
penambahan : pengatur perubahan nilai variabel kontrol.
Contoh :
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
void main()
{
/* Program perulangan menggunakan for */
int x;
for(x = 1; x<= 10; x++)
{
cout<<"BAHASA C++ "<<endl;
}
getch();
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
4. FOR BERSARANG (NESTED FOR)
For bersarang dapat melibatkan lebih dari satu variabel namun yang jelas satu
diantaranya akan digunakan sebagai indeks perulangan.
Bentuk umum:
for( variabel1=nilai_awal; kondisi1; variabel1++){
for( variabel2=nilai_awal; kondisi2; variabel2++){
for( variabel3=nilai_awal; kondisi3; variabel3++){
Statemen_statemen yang akan diulang;
….
}
}
}

Contoh 1 :
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int x,y; for (x=1; x<=10; x++)
{
for (y=1; y<=10; y++)
{
cout<<setw(4)<<x*y<<" ";
}
cout<<"\n";
}
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
Contoh 2 :
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int x,y ; for (x=1; x<=10; x++)
{
for (y=1; y<=x; y++)
{
cout<<setw(4)<<x*y<<" ";
}
cout<<"\n";
}
getch();
}
Hasil eksekusi :

Contoh 3:

#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int b,a,e;
char u[26]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
cout<<"Masukan Angka : ";
cin>>b;
for(a = b-1; a>=0; a--){
cout<<u[a]<<" ";}
getch();
}

Hasil eksekusi :

Contoh 4 :

#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
int main()
{
int a,b,e;
char u[26]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cout<<"Masukan Angka : ";
cin>>e;
for(b = 0; b< e; b++){
for(a = 0; a<= b; a++){
cout<<u[a]<<" ";}
cout<<endl;}
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
Contoh program faktorial :
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include<conio.h>
using namespace std;
long faktorial(int m)
{
if (m == 0) return 1;
else return m * faktorial(m - 1);
}
int main()
{
int n = 3; cout << n << "! = "
<< faktorial(n) << endl;
n = 6;
cout << n << "! = "
<< faktorial(n) << endl;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
Hasil eksekusi :

Soal Latihan :
1. Buatlah program dengan menggunakan while dengan tampilan sbb:

2. Buatlah program dengan menggunakan nested for dengan tampilan sbb:

3. Buatlah program untuk menampilkan deret bilangan genap antara 2 sampai 30, dengan
menggunakan for
4. Buatlah program untuk menampilkan deret bilangan ganjil antara 11 sampai 50
5. Buatlah program untuk menampilkan deret bilangan genap antara 3 sampai 50

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 04 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

05
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Function Dalam Bahasa C    Mampu membuat program yang 
mengandung void function dan typed 
 
function 
 
 
 
Function (Fungsi)
Fungsi adalah satu blok kode yang dapat melakukan tugas tertentu atau satu blok
instruksi yang dieksekusi ketika dipanggil dari bagian lain dalam suatu program. Sebuah
fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Nama tersebut
selanjutnya dapat dipanggil berkali-kali di beberapa tempat dalam program. Keuntungan
pembuatan fungsi secara umum adalah :

 Program besar dapat dipisah menjadi program-program kecil.


 Dapat dikerjakan oleh beberapa orang sehingga koordinasi mudah.
 Kemudahan dalam mencari kesalahan-kesalahan karena alur logika jelas dan
kesalahan dapat dilokalisasi dalam suatu modul tertentu saja.
 Modifikasi program dapat dilakukan pada suatu modul tertentu saja tanpa
mengganggu program keseluruhan.
 Mempermudah dokumentasi.
Sifat-sifat dari fungsi yang baik adalah :
 Nilai fan-in tinggi, artinya semakin sering suatu fungsi dipanggil oleh pengguna semakin
tinggi nilai fan-in.
 Fan-out rendah, artinya semakin spesifik fungsi suatu modul akan semakin rendah nilai
fan-out.
 Self-contained tinggi, artinya kemampuan untuk memenuhi kebutuhannya sendiri.

Bentuk umum sebuah fungsi adalah:

Tipe_fungsi nama_fungsi (parameter fungsi)


Deklarasi parameter
{
Tubuh fungsi
}

Tipe fungsi digunakan untuk menentukan tipe keluaran fungsi

I. Fungsi Tanpa Nilai Balik

Fungsi tanpa nilai balik (return Value) digunakan untuk melakukan proses-proses yang
tidak menghasilkan nilai, seperti melakukan pengulangan, proses pengesetan nilai
ataupun yang lainnya.
Fungsi semacam ini tipe kembaliannya akan diisi dengan nilai void.

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
Bentuk umumnya:

Void_nama_fungsi(parameter1, parameter2,..)
{
Statemen_yang_akan_dieksekusi;
...
}

Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void tulis(void)
{
int j;
for (j=0;j<10;j++)
{
cout<<"Belajar Bahasa C++"<<endl;
}
}
main(void)
{
tulis();
getch();
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
2. Fungsi Dengan Nilai Balik

Fungsi dengan nilai balik yaitu fungsi yang digunakan untuk melakukan proses-proses
yang berhubungan dengan nilai. Adapun cara pendefinisiannya adalah dengan menuliskan
tipe data dari nilai yang akan dikembalikan didepan nama fungsi.
Bentuk umum:

tipe_data nama_fungsi(parameter1, parameter2,..)


{
Statemen_yang_akan_dieksekusi;
...
return nilai_balik;
}

Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
#include<iostream.h>
LuasBujurSangkar(int sisi)
{
int L;
L = sisi * sisi;
return L;
}
main()
{
int s, Luas;
cout<<"Masukkan nilai sisi : ";
cin>>s;
Luas=LuasBujurSangkar(s);
cout<<"Luas Bujur Sangkar adalah "<<Luas;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

3. Fungsi Dengan Parameter

Parameter adalah suatu variabel yang berfungsi untuk menampung nilai yang akan
dikirimkan ke dalam fungsi. Parameter itu sendiri terbagi dua macam yaitu:
 Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi
fungsi.
 Parameter aktual adalah parameter (tidak selamanya menyatakan variabel) yang
digunakan dalam pemanggilan fungsi.

Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
int TambahSatu(int X)
{
X = X + 1;
return X;
}
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<"Nilai akhirnya adalah "<<TambahSatu(bilangan);
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

Melewatkan Parameter
Ada 2 cara melewatkan Parameter yaitu:
1. Berdasarkan nilai (pass by value).
2. Berdasarkan referensi (pass by reference).
Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void Kali2(int& X)
{
X = X * 2;
cout<<"Nilai didalam fungsi adalah: "<<X<<endl;
}
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<endl;
cout<<"Nilai awal : "<<bilangan<<endl; //memanggil nilai awal
Kali2(bilangan); //memangggil fungsi Kali2
cout<<"Nilai akhirnya adalah "<<bilangan<<endl;
getchar();
}

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

Contoh pass by reference

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void Kali2(int& X)
{
X = X * 2;
cout<<"Nilai didalam fungsi adalah: "<<X<<endl;
}
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<endl;
cout<<"Nilai awal : "<<bilangan<<endl; //memanggil nilai awal
Kali2(bilangan); //memangggil fungsi Kali2
cout<<"Nilai akhirnya adalah "<<bilangan<<endl;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void Kali2(int& X);
main()
{
int bilangan;
cout<<"Masukkan sebuah bilangan : ";
cin>>bilangan;
cout<<endl;
cout<<"Nilai awal : "<<bilangan<<endl; //memanggil nilai awal
Kali2(bilangan); //memangggil fungsi Kali2
cout<<"Nilai akhirnya adalah "<<bilangan<<endl;
getch();
}
void Kali2(int& X)
{
X = X * 2;
cout<<"Nilai didalam fungsi adalah: "<<X<<endl;
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
Soal Latihan :

1. Buatlah suatu fungsi untuk menjumlahkan 2 buah bilangan

Program :

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int Tambah (int a, int b)
{
int r;
r = a + b;
return (r);
}
int main()
{
int z;
z = Tambah(5,3);
cout<<"Hasilnya = " <<z<<endl;
getch();
}

2. Buatlah Program tambah, kurang, kali, bagi dengan menggunakan fungsi

Program :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
float Tambah(float x, float y);
float Kurang(float x, float y);
float Kali(float x, float y);
float Bagi(float x, float y);
int main()
{

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
int x,y;
cout<<"Masukan nilai pertama:"; cin>>x;
cout<<"Masukan nilai kedua:"; cin>>y;
cout<<"Hasil Penjumlahan:"<<Tambah(x,y)<<endl;
cout<<"Hasil Pengurangan:"<<Kurang(x,y)<<endl;
cout<<"Hasil Perkalian:"<<Kali(x,y)<<endl;
cout<<"Hasil Pembagian:"<<Bagi(x,y)<<endl;
getch();
}
float Tambah(float x, float y)
{
return (x+y);
}
float Kurang(float x, float y)
{
return (x-y);
}
float Kali(float x, float y)
{
return (x*y);
}
float Bagi(float x, float y)
{
return (x/y);
}

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
3. Buatlah program menggunakan fungsi untuk menghitung luas persegi panjang dan luas
bujur sangkar!

Program :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
LuasBujurSangkar(int sisi)
{
int L;
L = sisi * sisi;
return L;
}
LuasPersegiPanjang(int panjang, int lebar)
{
int L;
L = panjang * lebar;
return L;
}
main()
{
int s,p,l, Luas;
cout<<"Menghitung Luas Bujur Sangkar"<<endl;
cout<<"Masukkan nilai sisi : "; cin>>s;
Luas=LuasBujurSangkar(s);
cout<<"Luas Bujur Sangkar adalah "<<Luas<<endl;
cout<<endl;
cout<<"Menghitung Luas Persegi Panjang"<<endl;
cout<<"Masukkan panjang : "; cin>>p;
cout<<"Masukkan lebar : "; cin>>l;
Luas=LuasPersegiPanjang(p,l);
cout<<"Luas Bujur Sangkar adalah "<<Luas<<endl;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
Hasil eksekusi

4. Buatlah fungsi tukar dari 2 buah inputan user!

//Program tukar
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void tukar(int& X, int& Y);
main()
{
int a,b;
cout<<"Masukkan bilangan pertama: ";
cin>>a;
cout<<"Masukkan bilangan kedua: ";
cin>>b;
cout<<endl;
cout<<"Sebelum ditukar (): "<<endl;
cout<<"Nilai pertama = "<<a<<endl;
cout<<"Nilai kedua = "<<b<<endl;
cout<<endl;
tukar(a,b);
cout<<"Sesudah ditukar () adalah "<<endl;
cout<<"Nilai pertama = "<<a<<endl;
cout<<"Nilai kedua = "<<b<<endl;
cout<<endl;

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  12 Tim Dosen http://www.mercubuana.ac.id

 
getch();
}
void tukar(int& X, int& Y)
{
int Z;
Z = X;
X = Y;
Y = Z;
}

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  13 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.

2015 Pemrograman Algoritma Struktur Data Modul 05 Pusat Bahan Ajar dan eLearning
  14 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

06
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Fungsi Rekursif    Mampu  menjelaskan  konsep  fungsi 
rekursif 
 
 Mampu  mengimplementasikan  masalah 
 
matematika  yang  solusinya  bersifat 
rekursif  dengan  program  yang 
mengandung fungsi rekursif 
 
 

Fungsi Rekursif
Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif
sebenarnya terkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa
rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat
pemanggil prosedur atau fungsi.
Rekursif merupakan teknik pemrograman yang penting, dan beberapa bahasa
pemrograman modern mendukung keberadaan proses rekursif ini. Pemanggilan prosedur
atau fungsi ke dirinya sendiri bisa berarti proses yang berulang yang tidak bisa diketahui
kapan akan berakhir. Dalam pemakaian sehari-hari, rekursi merupakan teknik pemrograman
yang berdaya guna untuk digunakan pada pekerjaan pemrograman dengan
mengekspresikannya ke dalam suku-suku dari program lain dengan menambahkan langkah-
langkah sejenis. Contoh paling sederhana dari proses rekursi adalah menghitung nilai
faktorial dari bilangan bulat. Nilai faktorial, secara rekursif dapat ditulis sebagai :

0! = 1
N! = N x (N-1)!, Untuk N > 0

yang secara notasi pemrograman bisa ditulis sebagai :

FAKTORIAL (0) = 1 1)
FAKTORIAL (N) = N * FAKTORIAL (N-1) 2)

Persamaan 2) di atas merupakan contoh hubungan rekurens (recurrence relation), yang


berarti bahwa nilai suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang
sama dengan argumen yang lebih kecil.

Persamaan 1) yang tidak bersifat rekursif, disebut nilai awal. Setiap fungsi rekursi paling
sedikit mempunyai 1 (satu) nilai awal; jika tidak, fungsi tersebut tidak bisa dihitung secara
eksplisit.

Contoh program Rekursif

1. Faktorial :

#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
using namespace std;
//mendefinisikan Fungsi Faktorial
int Faktorial(int X)
{
if (X==1)
return (1);
return X * Faktorial(X-1); //memanggil dirinya sendiri
}
// Fungsi Utama
int main()
{
int Bilangan,Hasil;
cout<<"Masukkan Bilangan Yang Akan Dihitung : ";
cin>>Bilangan;
//Memanggil Fungsi Faktorial
Hasil=Faktorial(Bilangan);
//Menampilkan Hasil
cout<<Bilangan<<" ! = "<<Hasil;
getch();
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
2. Faktorial

#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
long factorial(long a)
{
if (a>1)
return (a*factorial(a-1));
else
return(1);
}
int main ()
{
long L;
cout<<"Masukkan nilai : ";
cin>>L;
cout<< "!" << L << " = " << factorial (L);
getch();
}

3. Program Pangkat :

//Pangkat
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
#include <conio.h>
double Pangkat(double A, int N)
{
if (N==0)
return 1;
else
return A * Pangkat(A, N-1);
}
void main ()
{
int A,N;
cout<<"Masukkan nilai = "; cin>>A;
cout<<"Pangkat berapa = "; cin>>N;
cout<<"Hasil Pangkat = "<<Pangkat(A,N);
getch();
}

Hasil Eksekusi :

Latihan :
1. Buat program untuk menghitung deret S = 1+2+3+4+5+….+N menggunakan
Function Rekursi
2. Buat program untuk menghitung deret S = 2+4+6+8+10+….+2N menggunakan
Function Rekursi
3. Buat program untuk menghitung 10 deret Fibonacci dengan menggunakan Function
Rekursi:
1 1 2 3 5 8 13 21 34 55

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
Jawab :

No.1 Program Deret

//Deret
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int S(int n)
{
if (n==1)
return (1);
else
return (n + S(n-1));
}
main ()
{
int n;
cout<<”Masukkan n = “; cin>>n;
cout<<”Deret S = 1 + 2 + 3 + 4 + 5 + …+ n \n”;
cout<<”Jumlah Deret S = “<<S(n);
getch();
}

Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
No. 2

//Deret
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
int S(int n)
{
if (n==1)
return (2);
else
return (2*n + S(n-1));
}
main ()
{
int n;
cout<<"Masukkan n = "; cin>>n;
cout<<"Deret S = 2 + 4 + 6 + 8 + 10 + ...+ n \n";
cout<<"Jumlah Deret S = "<<S(n);
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 06 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

07
  Ilmu Komputer  Tehnik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Array satu dimensi dan    Mampu membuat program untuk
Array dua dimensi   menginisialisasi array satu dimensi
dan array dua dimensi.
   Mampu membuat program untuk
  mengisi elemen array satu dimensi
dan array dua dimensi menggunakan
struktur perulangan.
 
 

ARRAY

Array adalah himpunan elemen (variabel) dengan tipe data yang sama dan disimpan
secara berurutan dalam memori yang ditandai dengan memberikan indeks pada suatu nama
variabel.

1. Array Berdimensi Satu


Gambaran sebuah Array ditunjukkan pada contoh di bawah ini, dimana kita dapat
menyimpan 5 nilai dengan tipe float tanpa harus mendeklarasikan 5 identifier variabel
yang berbeda. Perhatikan contoh di bawah ini :

Elemen-elemen Array

0 1 2 3 4

Nama Array

Gambar 1. Gambaran Sebuah Array

Bagian kosong di atas merepresentasikan elemen array, dalam kasus ini adalah
nilai integer. Angka 0 – 4 merupakan indeks dan selalu dimulai dari 0. Seperti
penggunaan variabel pada umumnya, array harus dideklarasikan terlebih dahulu,
dengan format sebagai berikut :

Type name [elements];

Maka contoh array di atas dideklarasikan sebagai berikut :

Float Suhu [5] ;

Inisialisasi Array

Ketika mendeklarasikan array lokal (didalam fungsi), jika tidak diberikan nilai maka isi
dari array tidak akan ditentukan (undetermined) sampai nilai diberikan. Jika
mendeklarasikan array global array (di luar semua fungsi) maka isi dari array akan
diinisialisasikan sebagai 0 :

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
0 1 2 3 4

Suhu 0 0 0 0 0

Atau dideklarasikan dengan memberikan nilai array yang dituliskan dalam kurung
kurawal :

Float Suhu [5] = { 28.5, 28, 29, 30.5, 27}

Maka elemen array akan berisi :

0 1 2 3 4

Suhu 28.5 28 29 30.5 27

Nilai array dapat di akses secara individual, dengan format :

name [index]

Maka dari contoh sebelumnya nama yang digunakan untuk mengakses masing-masing
elemen :

Suhu[0] Suhu[1] Suhu[2] Suhu[3] Suhu[4]

Suhu

Misalkan akan disimpan nilai 75 pada elemen ke tiga, maka instruksinya : Suhu[2] = 28;
Dan jika nilai elemen ke tiga tadi akan diberikan ke variabel a, maka dapat dituliskan :
a = Suhu[2];
contoh 1:

Buatlah program untuk menampilkan data suatu suhu

//contoh Array
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void contoh()
{
float Suhu[5]= {27.5, 28, 29, 30.5, 27};
for (int i=0; i<5; i++)

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
cout<<"Suhu [" <<i<< "] = "<<Suhu[i]<<endl;
}
void main()
{
contoh();
getchar();
}

Hasil Eksekusi :

Contoh 2:

Buat program nilai dan jumlahkan nilai tersebut, kemudian hitung jumlahnya dan nilai rata-
rata dari 5 buah bilangan yang dimasukkan

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void main()
{
int daf_nilai[5];
int i,jum;
float rata;
for (i=1; i<=5; i++)
{
cout<<"Masukkan nilai tes ke-" <<i<< " : ";
cin>>daf_nilai[i];
}
jum = 0 ;
for (i=1;i<=5;i++)

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
jum = jum + daf_nilai[i];
rata = jum / 5;
cout<<"Jumlah : "<<jum<<endl;
cout<<"Rata-rata : "<<rata<<endl;
getch();
}

Hasil eksekusi :

2. Array Multidimensi

Array multidimensi dapat dianggap sebagai “array dari array”. Contoh array 2
dimensi dapat dibayangkan sebagai table berdimensi 2 yang tersusun dari elemen-
elemennya, semua bertipe sama.

Contoh :

suhu 0 1 2 3 4

Array suhu menyatakan array dua dimensi berukuran 3 x 5 elemen bertipe integer. Cara
mendeklarasikan dalam bahasa C ++ adalah ;

Int suhu [3] [5];

Sedangkan cara untuk menunjuk pada salah satu elemennya bisa dilakukan dengan
menyebutkan nama array diikuti dengan alamat sel menurut baris dan kolomnya,
misalnya :

Suhu [0] [3] atau suhu [2] [1]

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
Array multidimensi tidak hanya terbatas pada array dimensi 2 saja tetapi dapat berupa
array dimensi 3 dan seterusnya.

3. Array Sebagai Parameter

Suatu saat kita mungkin perlu untuk menjadikan array sebagai parameter sebuah
fungsi. Dalam C/C++ tidak memungkinkan untuk mengirimkan nilai seluruh blok memori
sebagai parameter fungsi, tetapi kita dapat mengirimkan alamat awalnya.
Agar sebuah fungsi dapat menerima array sebagai parameter, cara yang dilakukan
adalah menentukan tipe dan nama array (tanpa menentukan banyak elemen) dalam
parameter fungsi saat fungsi dideklarasikan.
Contoh :
Void coba_array (int array1[])
Prosedur acak akan menerima sebuah parameter bertipe integer dengan nama
p_array, untuk mengirimkan sebuah array yang dideklarasikan sebagai :
Int array [40];
Cukup memanggil fungsi dengan statement :
Coba_array (array);
Contoh :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void array (int data[], int panjang)
{
for (int n=0; n<panjang; n++)
cout<< data[n] << " ";
cout<<endl;
}
void main()
{
int array1[]={5,10,15};
int array2[]={2,4,6,8,10};
array(array1,3);
array(array2,5);
getchar();
}

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusi :

Seperti kita lihat pada program di atas, parameter pertama (int data[ ]) menerima
sebarang array yang tipenya int, berapapun panjangnya. Untuk itu perlu ditambahkan
parameter yang kedua untuk memberitahu panjang array yang dikirim. Nilai ini kemudian
dapat dipakai pada statement perulangan for untuk menampilkan elemen array sesuai
banyaknya. Dalam deklarasi fungsi juga diperbolehkan untuk memasukkan array
multidimensi. Format untuk menyertakan array berbeda dengan format parameter array
dimensi satu. Contoh deklarasi parameter array dimensi 3:

Void coba_array ( int array1[ ] [3] [4] )

Perhatikan kurung siku pertama [ ] dibiarkan kosong sementara yang lainnya harus
ditentukan. Hal ini karena compiler dalam fungsi harus dapat menentukan berapa besar
array pada dimensi tambahan.
Untuk bisa mengetahui lebih jelas tentang sifat-sifat array sebagai parameter sebuah
fungsi kita perlu memahami lebih lanjut tentang operasi pointer.
Latihan :
Buat program C++ untuk menampilkan 5 nama Mahasiswa yang diinput melalui keyboard.

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void data_mahasiswa()
{
string nama [5];
int indeks;
for (indeks=1; indeks <=5; indeks++)
{
cout<<"Masukkan nama mahasiswa ke-"<<indeks<<" : ";
cin >> nama[indeks];

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
}
clrscr();
cout <<" Daftar Nama Mahasiswa " << endl;
cout <<"--------------------- " << endl;
cout <<"No | Nama Mahasiswa " << endl;
cout <<"--------------------- " << endl;
for (indeks=1; indeks <=5; indeks++)
{
cout << indeks << '\t' << nama[indeks]<<endl;
}
}
void main()
{
clrscr();
data_mahasiswa();
getch();
}

Jika kita input nama berikut :

Hasil eksekusinya adalah :

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
Soal :

Dari program latihan di atas kembangkan sehingga dapat menyimpan ‘Umur’ dan ‘Jenis
Kelamin’ dari mahasiswa. Untuk umur adalah yang berumur di atas 20 tahun saja.
Kemudian tambahkan program tersebut untuk menghitung rata-rata umur dari semua
mahasiswa yang dimasukkan.

Programnya :

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
void data_mahasiswa()
{
string nama [5];
int umur [5];
char jenis[5];
int indeks;
int x;
float jumlah, rata;
for (indeks=1; indeks <=5; indeks++)
{
cout<<"Masukkan nama mahasiswa ke-"<<indeks<<" : ";
cin >> nama[indeks];
cout<<"Masukkan umur mahasiswa ke-"<<indeks<<" : ";
cin >> umur[indeks];
cout<<"Masukkan jenis mahasiswa ke-"<<indeks<<" : ";
cin >> jenis[indeks];
}
clrscr();
cout <<" Daftar Nama Mahasiswa " << endl;
cout <<"-------------------------- " << endl;
cout <<"No | Nama | Umur | Jenis " << endl;
cout <<"-------------------------- " << endl;
x=umur[0];
for (indeks=1; indeks <=5; indeks++)
if (umur[indeks] > x)

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
x=umur[indeks];
for (indeks=1; indeks <=5; indeks++)
{
if (umur[indeks]>=17)
cout << indeks << '\t' << nama[indeks]<<'\t'<<umur[indeks]<<'\t'<<jenis[indeks]<<endl;
}
jumlah = 0;
for (indeks=1; indeks <=5; indeks++)
jumlah = jumlah + umur[indeks];
rata = jumlah/indeks;
cout<<endl;
cout<<"umur yang paling tua = "<<x<<endl;
cout<<endl;
cout<<"Jumlah Umur = "<<jumlah<<endl;
cout<<"Rata-rata = "<<rata<<endl;
}
void main()
{
clrscr();
data_mahasiswa();
getch();
}

Jika diinput dari keyboard data berikut :

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
Hasil Eksekusinya adalah :

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 07 Pusat Bahan Ajar dan eLearning
  12 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

09
  Ilmu Komputer  Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 Pointer   Mampu  menggunakan  pointer  untuk 
 Linked List  mengalokasikan memori secara dinamis. 
   Mampu menjelaskan konsep linked‐list. 
 Mampu  mengimplementasikan  linked‐
 
list  dalam  sebuah  program  sampai 
 
dengan menambah node‐node baru dan 
list traversal. 
 
 
POINTER dan LINKED LIST
I. POINTER
Pointer adalah tipe data yang digunakan untuk menunjuk ke suatu data. Suatu variabel
yang bertipe pointer (variabel pointer) tidak berisi data, melainkan berisi alamat suatu data.
Di dalam komputer setiap lokasi data mempunyai alamat yang khas. Gambar berikut contoh
suatu pointer yang menunjuk ke suatu data.
Pointer Variabel X

Berisi alamat variabel X


Data

Gambar 1. Gambaran Pointer

Berdasarkan kondisi di atas, dimungkinkan untuk mengakses data pada variabel X melalui
Pointer.
Pointer biasa digunakan sehubungan dengan pembentukan variabel dinamis. Variabel
Dinamis adalah variabel yang bisa dialokasikan di dalam memori atau dihapus dari memori
ketika program dieksekusi. Hal seperti ini banyak dipakai pada struktur data seperti linked
list dan pohon biner.

1.1. MENDEKLARASIKAN VARIABEL POINTER

Bentuk deklarasi variabel pointer : tipe *variabel;

Contoh : double *p; 

p adalah variabel pointer yang menunjuk ke data bertipe double.


menyatakan pointer

double *p; 

variabel pointer yang menunjuk


ke data bertipe double
tipe data yang ditunjuk
oleh variabel pointer p
Gambar 2. Penentuan tipe Pointer
Contoh lain :

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
}
struct RekamanBuku *novel;

Pada contoh ini, novel adalah variabel pointer yang menunjuk ke tipe struktur
RekamanBuku. Gambarannya seperti berikut :

novel judul

pengarang

jumlah

yang ditunjuk oleh novel


bertipe RekamanBuku
gambar 3. Variabel pointer yang menunjuk ke struktur

Supaya suatu variabel pointer menunjuk ke suatu variabel data, penugasan seperti
berikut diperlukan :
Variabel_pointer = &variabel_data

 Simbol & berarti alamat.


 Pernyataan di atas berarti bahwa : variabel_pointer diisi dengan alamat
variabel_data.

1.2. MENGAKSES DATA VIA POINTER

Untuk melihat cara pengaksesan data melalui pointer, cobalah kode novel.cpp berikut :

//kode program novel.cpp


#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>
#include <string>

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
using namespace std;
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
};
int main()
{
struct RekamanBuku *novel, buku;

// Isi data buku


buku.judul = "Badai Pasti Berlalu";
buku.pengarang = "Marga T.";
buku.jumlah = 2;

// Variabel pointer novel diatur menunjuk ke variabel buku


novel = &buku;

// Mengakses data melalui variabel pointer novel


cout << "Judul : " << novel->judul << endl;
cout << "Pengarang : " << novel->pengarang << endl;
cout << "Jumlah : " << novel->jumlah << endl;
getch();
}

Hasil eksekusi program :

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
1.3. MENGGUNAKAN VARIABEL DINAMIS

Beberapa struktur data memanfaatkan variabel dinamis. Variabel dinamis adalah


variabel yang bisa diciptakan ketika program dieksekusi. Menciptakan variabel dinamis
butuh variabel pointer, kuncinya yaitu operator new. Misalnya terdapat variabel pointer
novel yang bertipe pointer. Agar tercipta variabel dinamis yang akan ditunjuk oleh novel,
perintahnya adalah :
Novel = new RekamanBuku;

Gambar berikut menunjukkan keadaan setelah pernyataan tersebut dieksekusi :

novel judul

pengarang

?  jumlah

tanda Tanya menyatakan nilainya


belum ditentukan secara eksplisit
oleh pemrogram
Gambar 4. Keadaan setelah variabel dinamis diciptakan

Kode program berikut ptrdata.cpp memberikan gambaran tentang penciptaan variabel


dinamis dan pengaksesannya. Anda bandingkan dengan kode yang serupa, tetapi tidak
memakai variabel dinamis (yaitu pada program novel.cpp)

//program ptrdata.cpp
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
};
int main()
{

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
struct RekamanBuku *novel;

// Buat variabel dinamis dan atur agar ditunjuk oleh novel


novel = new RekamanBuku;

// Isi data melalui novel


novel->judul = "Meriam Benteng Navarone";
novel->pengarang = "Alistair McClean";
novel->jumlah = 4;

// Mengakses data melalui variabel pointer novel


cout << "Judul : " << novel->judul << endl;
cout << "Pengarang : " << novel->pengarang << endl;
cout << "Jumlah : " << novel->jumlah << endl;

// Bebaskan memori untuk variabel dinamis


delete novel;
getch();
}

Hasil eksekusi program :

1.4. MENGHAPUS VARIABEL DINAMIS

Bila suatu variabel dinamis tidak diperlukan lagi, memori yang digunakannya bisa
dihapus. Perintah yang diperlukan untuk keperluan tersebut berupa prosedur delete.
Perintahnya adalah :
Deletevariabel_pointer;

Dengan cara tersebut, memori yang ditunjuk oleh variabel_pointer dihapus.

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
Keadaan awal :

novel

Setelah delete novel :

novel

Memori untuk data ini dibebaskan


atau didealokasikan
Gambar 5. Gambaran penghapusan variabel dinamis

Contoh penggunaan delete terdapat pada program ptrdata.cpp, yaitu diletakkan setelah
variabel dinamis tidak diperlukan lagi.

1.5. POINTER dan ARRAY DINAMIS

Array juga dapat dipesan secara dinamis melalui new. Contoh kode program
dinamis.cpp

//kode program dinamis.cpp


#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
struct RekamanBuku
{
string judul;
string pengarang;
int jumlah;
};

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
int main()
{
struct RekamanBuku *novel;

// Buat variabel dinamis berupa array dan atur agar ditunjuk oleh novel
novel = new RekamanBuku[5];

// Isi data melalui novel


novel[0].judul = "Meriam Benteng Navarone";
novel[0].pengarang = "Alistair McClean";
novel[0].jumlah = 4;

novel[1].judul = "Octopussy";
novel[1].pengarang = "Ian Flemmings";
novel[1].jumlah = 2;

novel[2].judul = "Badai Pasti Berlalu";


novel[2].pengarang = "Marga T.";
novel[2].jumlah = 2;

novel[3].judul = "Twilight";
novel[3].pengarang = "Stephenie Meyer";
novel[3].jumlah = 3;

novel[4].judul = "Harry Potter Deadly Hallows";


novel[4].pengarang = "JK Rowlings";
novel[4].jumlah = 4;

// Mengakses data melalui variabel pointer novel


for (int j = 0; j < 5; j++)
{
cout << "Judul : " << novel[j].judul << endl;
cout << "Pengarang : " << novel[j].pengarang << endl;
cout << "Jumlah : " << novel[j].jumlah << endl;
cout << endl;
}

// Bebaskan memori untuk variabel dinamis


delete [] novel;
getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
Hasil eksekusi program :

Hal yang terpenting dalam menggunakan array dinamis adalah penyebutan jumlah elemen
array dilakukan dengan menuliskan jumlah elemen dalam tanda [ ]. Pada program di atas :

novel = new RekamanBuku[5];

menyatakan bahwa jumlah elemen array yang diciptakan dan ditunjuk oleh novel sebanyak
5 buah. Gambaran setelah pernyataan di atas dijalankan dapat dilihat pada gambar berikut :
novel

judul pengarang jumlah

novel[0]

novel[1]

novel[2]

novel[3]

novel[4]

Gambar 6. Pengalokasian Array Dinamis

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
II. KONSEP LINKED LIST

1. Mengenal Struktur Data Linked List

Linked List (Senarai Berantai) adalah jenis struktur data yang berisi kumpulan data
yang disusun secara linear dengan setiap data disimpan dalam sebuah simpul dan
antara satu simpul dengan simpul lain dihubungkan melalui pointer.
Struktur data ini mempunyai bentuk dasar dengan sifat data disisipkan ke dalam
senarai melalui salah satu ujungnya. Gambar 7. Menunjukkan keadaan dalam linked list
apabila secara berturut-turut nama Amir, Bakdi, Cintya dan Dhanu dimasukkan ke dalam
linked list.

Contoh linked list :

pertama 

Dhanu Cintya Bakdi Amir null

Gambar 7. Linked List


Perhatikan gambar di atas bahwa Amir sebagai data yang pertama kali dimasukkan
akan berada pada salah satu ujung (ujung kanan). Sedangkan data yang terakhir kali
dimasukkan yaitu Dhanu, justru berada dibagian kiri, yang ditunjuk oleh pointer pertama.
Dengan kata lain, pointer pertama selalu menunjuk ke data yang terakhir kali
dimasukkan. Berbeda dengan stack, penghapusan data dalam linked list bias dilakukan
di mana saja.
Dalam terminologi linked list, setiap data diletakkan dalam sebuah simpul (node).
Pada gambar di atas terdapat 4 buah simpul. Setiap simpul terdiri atas 2 bagian, yaitu
bagian data dan bagian penunjuk ke simpul berikutnya. Pada contoh di atas bagian data
hanya mengandung sebuah data, yaitu nama orang. Namun bagian data bisa saja
mengandung beberapa data. Misalnya bagian data terdiri atas nomor mahasiswa dan
nama mahasiswa seperti contoh berikut :

2010.01.001 Andi Sadewo

Berisi nomor mahasiswa


Dan Nama mahasiswa
 Pointer yang digunakan untuk
menunjuk ke simpul berikutnya.
 Berisi NULL kalau tidak menunjuk
Ke simpul.

Gambar 8. Penjelasan simpul dalam linked list

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
2. Operasi Dasar Dalam Linked List (Senarai Berantai)
Operasi dasar pada Linked List berupa :
 INSERT( ), menyatakan operasi untuk memasukkan data ke dalam linked list
pada posisi yang ditunjuk oleh pointer pertama. Operasi ini biasa dinyatakan
dengan insert(S, d) atau biasa disingkat insert(d). S menyatakan linked list dan d
menyatakan item data yang dimasukkan ke dalam linked list S.
 FIND( ), menyatakan operasi untuk mencari suatu data dalam linked list. Operasi
ini biasa dinyatakan dengan fungsi find(pendahulu, x). nilai baliknya berupa true
kalau data yang dicari (yaitu x) ada; atau false kalau data yang dicari tidak ada.
Pada saat nilai balik bernilai true, pendahulu menunjuk simpul yang berada tepat
sebelum simpul yang berisi data yang dicari.
 REMOVE( ), menyatakan operasi untuk menghilangkan sebuah simpul dari
linked list. Operasi ini biasa dinyatakan dengan remove(S, x) atau remove(x)
saja.

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Abdul Kadir, Teori dan Aplikasi STRUKTUR DATA menggunakan C++, CV. ANDI OFFSET,
Yogyakarta, 2013.

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 08 Pusat Bahan Ajar dan eLearning
  12 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

10
  Ilmu Komputer  Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 List traversal secara rekursif   Mampu membuat program yang secara 
 Penyisipan node di awal dan di tengah  rekursif melakukan list traversal 
linked‐list.   Mampu membuat program yang 
  melakukan penyisipan node di awal dan 
  di tengah linked‐list. 
 
 
LIST TRAVERSAL
Traversal atau kunjungan simpul list sesuai urutan untuk memproses setiap simpul
tepat satu kali. Algoritma traversal, menggunakan variabel penuding PTR untuk menuding
simpul yang sedang di proses saat ini. Karena itu LINK(PTR) akan menuding simpul berikut
dalam list.
Statement PTR := LINK(PTR) akan menggerakkan penuding ke simpul berikutnya.

PTR

   

Gambar 1.

Algoritma Traversal secara rinci :


Mula-mula, kita awali dengan memberi nilai kepada PTR, sama dengan START. Kita
proses INFO(PTR), yakni informasi pada simpul pertama dalam List. Selanjutnya PTR
diperbaharui melalui statement PTR := LINK(PTR). Sekarang proses INFO(PTR), yakni
informasi pada simpul kedua. Demikian seterusnya sampai nilai PTR = NULL, akhir dari
traversal.
ALGORITMA
1. PTR := START.
2. Kerjakan Langkah 3 dan 4 dalam hal PTR <> NULL :
3. Proses INFO(PTR).
4. PTR := LINK(PTR).
5. EXIT.

CARI (SEARCHING) DALAM LINKED LIST


1. Cari dalam list tidak terurut
2. Cari dalam list terurut

CARI DALAM LIST TIDAK TERURUT

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
Melakukan Traversal Simpul list, sambil setiap kali memeriksa apakah informasi dalam
simpul yang tengah dikunjungi tersebut sama dengan ITEM.
Dalam algoritma ini diperlukan 2 buah pemeriksaan pada setiap putaran yaitu :
1. Memeriksa apakah telah sampai pada akhir dari list, yakni dengan memeriksa apakah
PTR = NULL.
2. Memeriksa apakah ITEM telah ditemukan lokasinya, yakni dengan memeriksa apakah
INFO(PTR) = ITEM

ALGORITMA
SEARCH(INFO, LINK, START, ITEM, LOC)
1. PTR := START.
2. Kerjakan langkah 3 dalam hal PTR <> NULL :
3. Jika INFO(PTR) = ITEM, maka :
LOC := PTR, exit.
Bila tidak
PTR := LINK(PTR).
4. LOC := NULL. (Pencarian gagal)
5. Exit.

CARI DALAM LIST TERURUT


Melakukan traversal simpul list, sambil setiap kali memeriksa apakah informasi
dalam simpul yang tengah dikunjungi tersebut sama dengan ITEM. Karena terurutnya list,
tidak perlu melakukan traversal sampai akhir dari list, walau ITEM tidak terdapat dalam list.
Begitu INFO(PTR) > ITEM, hentikan proses pencarian.
Dalam algoritma ini diperlukan 2 buah pemeriksaan pada setiap putaran yaitu :
1. Memeriksa apakah INFO(PTR) sudah lebih besar dari ITEM, berarti ITEM tidak terdapat
dalam list, hentikan proses cari.
2. Memeriksa apakah ITEM telah ditemukan lokasinya, yakni dengan memeriksa apakah
INFO(PTR) = ITEM.

ALGORITMA
SRCHSL(INFO, LINK, START, ITEM, LOC)
1. PTR := START.
2. Kerjakan langkah 3 dalam hal PTR <> NULL :
3. Jika INFO(PTR) < ITEM, maka :
PTR := LINK(PTR).
Bila tidak jika ITEM = INFO(PTR), maka :

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
LOC := PTR, dan exit. (pencarian sukses)
Bila tidak :
LOC := NULL, and exit.
4. LOC := NULL.
5. Exit.
Contoh :

// Contoh senarai berantai (linked list)


#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream>
#include <string>
using namespace std;
class Simpul
{
public:
string kode;
string nama;
Simpul* berikut;

// Konstruktor
Simpul(string xkode, string xnama)
{
kode = xkode;
nama = xnama;
berikut = NULL;
}
void display()
{
cout << kode << " : "
<< nama << endl;
}
};
class SenaraiBerantai
{
private:
Simpul* pertama;

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
public:

// Konstruktor
SenaraiBerantai()
{
pertama = NULL;
}

// Destruktor
~SenaraiBerantai()
{

// Menghapus semua simpul


Simpul* penunjukHapus;
while (pertama != NULL)
{
penunjukHapus = pertama;
pertama = pertama->berikut;
delete penunjukHapus;
}
}

// Memasukkan data ke senarai berantai Nilai balik tidak ada


void insert(string kode, string nama)
{
Simpul* ptrBaru;
ptrBaru = new Simpul(kode, nama);
ptrBaru->berikut = pertama;
pertama = ptrBaru;
}

// Mencari data Nilai balik berupa true kalau yang dicari ketemu
// Dalam hal ini, pendahulu merupakan simpul yang terletak di depan simpul yang dicari
bool find(Simpul* &pendahulu, Simpul* &posisiData, string x)
{
posisiData = pertama;
pendahulu = NULL;
bool ditemukan = false;
while (posisiData != NULL)
{

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
string kode = posisiData->kode;
if (kode.compare(x) == 0)
{
ditemukan = true;
break; // Keluar dari while
}
pendahulu = posisiData;
posisiData = posisiData->berikut;
}
return ditemukan;
}

// Mencari data Nilai balik berupa NULL kalau yang dicari tidak ketemu
Simpul* find(string x)
{
Simpul* pendahulu;
Simpul* posisiData;
bool ditemukan = find(pendahulu, posisiData, x);
if (! ditemukan)
return NULL;
else
return posisiData;
}

// Menghapus simpul yang berisi kode x


// Nilai balik berupa :
// - true kalau data berhasil dihapus
// - false kalau data tidak ada
bool remove(string x)
{
Simpul* pendahulu;
Simpul* posisiData;
bool ditemukan = find(pendahulu, posisiData, x);
if (! ditemukan)
{
cout << "Data yang akan dihapus tidak ditemukan."
<< endl;

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
return false;
}
if (pendahulu == NULL)
{

// Data yang dihapus ditunjuk oleh pertama


pertama = pertama->berikut;
delete posisiData;
}
else
{

// Data yang dihapus tidak ditunjuk oleh pertama


pendahulu->berikut = posisiData->berikut;
delete posisiData;
}
}

// Menampilkan data
void display(void)
{
cout << "Isi senarai berantai:" << endl;
Simpul* penunjuk = pertama;
while (penunjuk != NULL)
{
penunjuk->display();
penunjuk = penunjuk->berikut;
}
}
};
int main()
{
SenaraiBerantai senarai;

// Masukkan 5 buah nama


senarai.insert("AMN", "Aminudin");
senarai.insert("ZAS", "Zaskia");
senarai.insert("RIN", "Rina Melati");
senarai.insert("FAR", "Farhan");

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
senarai.insert("AGN", "Agnes Monica");
cout << "Keadaan awal:" << endl;
senarai.display();
senarai.remove("RIN");
cout << endl;
cout << "Setelah RIN dihapus:" << endl;
senarai.display();

// Cari RIN
string dicari = "RIN";
cout << endl;
cout << "Pencarian " << dicari << endl;
Simpul* posisiData = senarai.find(dicari);
if (posisiData == NULL)
cout << dicari << " tidak ditemukan." << endl;
else
{
cout << "Hasil pencarian:" << endl;
posisiData->display();
}

// Cari FAR
dicari = "FAR";
cout << endl;
cout << "Pencarian " << dicari << endl;
posisiData = senarai.find(dicari);
if (posisiData == NULL)
cout << dicari << " tidak ditemukan." << endl;
else
{
cout << "Hasil pencarian:" << endl;
posisiData->display();
}
getch();
}

Hasil Eksekusi Program :

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

11
  Ilmu Komputer  Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 ADT Stack   Mampu menjelaskan yang dimaksud 
 Implementasi stack dengan array   dengan ADT stack 
 Implementasi stack dengan linked‐list    Mampu membuat program yang 
  mengimplementasikan stack dengan 
array  
 
 
 
ADT STACK

I. STRUKTUR DATA TUMPUKAN

Stack (Tumpukan) adalah struktur data yang memungkinkan penyisipan dan


pengambilan data dilakukan dari satu ujung yang disebut puncak. Sesuai namanya, struktur
data ini digambarkan seperti keadaan tumpukan piring atau tumpukan buku. Cara yang
paling mudah untuk meletakkan piring ke dalam tumpukan yakni dengan menaruhnya di
bagian puncak. Begitu juga kalau Anda ingin mengambil piring. Piring diambil dari data yang
berada di puncak tumpukan.

kosong

A Berisi 3

B Diambil 1

A dari puncak

Gambar 1. Struktur Data Tumpukan

Tumpukan memiliki sifat Last In First Out (LIFO). Artinya, data yang terakhir kali
dimasukkan/disisipkan akan menjadi data yang pertama kali keluar. Pada contoh di atas,
yang berisi tumpukan A, B, dan C jelas terlihat bahwa C adalah data yang terakhir kali
ditumpukkan. Jika terjadi operasi pengambilan data maka C adalah data yang akan keluar
terlebih dulu.

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
II. OPERASI DASAR PADA TUMPUKAN

Operasi dasar pada tumpukan adalah PUSH dan POP.

- PUSH adalah operasi untuk memasukkan data ke dalam tumpukan. Operasi ini
biasa dinyatakan dengan push(T,d). T menyatakan tumpukan dan d menyatakan item
data yang disisipkan ke dalam tumpukan T.

- POP adalah operasi untuk mengambil data dari tumpukan. Operasi ini biasa
dinyatakan dengan pop(T). Dalam hal ini data teratas dari tumpukan T akan
dikeluarkan dan menjadi nilai balik pop. Itulah sebabnya, penggunaan pop sering
dituangkan dalam bentuk pernyataan :

data = pop (T);

Tabel berikut memperlihatkan sejumlah operasi PUSH dan POP

Tabel 1. Ilustrasi PUSH dan POP pada Tumpukan (STACK)

Operasi Penjelasan Hasil tumpukan T

push(T,’Paris’) Paris dimasukkan terlebih


Innsbruck
push(T, ‘Innsbruck’) dulu, baru Innsbruck Paris

pop(T) Innsbruck dikeluarkan,


Geneva
push(T, ‘Amsterdam’) kemudian Amsterdam
Amsterdam
push(T, ‘Geneva’) dimasukkan, dan diikuti Paris
Geneva

push(T, ‘Roma’) Roma dan Vienna


push(T, ‘Vienna’) ditambahkan
Geneva
Amsterdam
Paris
pop(T) Vienna, Roma dan Geneva
London
pop(T) dikeluarkan. Kemudian
Amsterdam
pop(T) London ditambahkan Paris
push(T, ‘London’)

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
III. APLIKASI TUMPUKAN
Aplikasi Tumpukan (Stack) sangat banyak, beberapa penerapan Tumpukan diantaranya
adalah :

 Membalik String.

Jika kita memproses suatu string dimulai dari yang paling kiri dan menaruh ke
tumpukan karakter per karakter maka karakter paling kiri akan berada pada posisi
paling bawah dalam tumpukan. Kalau kemudian, karakter dalam tumpukan diambil
satu persatu dan disusun dari kiri ke kanan maka string akan terbentuk dengan
susunan terbalik terhadap aslinya, seperti diperlihatkan pada gambar di bawah ini.

String asal FERNANDO D

di proses ketumpokan N

di ambil satu persatu dan di susun R


dari kiri ke kanan : ODNANREF E

Gb. Pembalikan string melalui tumpukan

 Mengkonversikan bilangan system decimal ke system biner. Contoh. Bilangan 19


identik dengan bilangan biner : 10011. Algoritma untuk melakukannya adalah seperti
berikut :
1. Tumpukan <---- kosong
2. While Bilangan > 0
3. Digit ---- sisa pembagian bilangan bulat dengan 2
4. Push(Tumpukan, Digit)
5. Bilangan ---- pembagian bilangan bulat dengan 2
6. End-While
7. While (Tumpukan tidak kosong)
8. Digit ---- Pop

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
9. Tampilkan digit
10. End-While

 Mengevaluasi Ekspresi Aritmetika. Misalnya, tumpukan dipakai untuk memproses


perhitungan semacam (2+1)*3+5*2 yang melibatkan berbagai operator dengan
prioritas yang berbeda.

 Memproses pasangan tanda kurung dalam suatu ekspresi. Misalnya, ekspresi


seperti (a(b{c|d}[]) dianggap valid, sedangkan ekspresi (a(b{c|d] dianggap tidak valid.

 Menangani fungsi Rekursif. Secara internal computer menggunakan tumpukan ketika


terjadi pemanggilan fungsi secara rekursif.

4. Implementasi Stack dengan Vektor

Tumpukan dapat dibuat dengan berbagai cara. Salah satu cara yaitu, menggunakan
Vector. Dalam hal ini, jumlah data

Implementasi Stack dengan Vector

#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Tumpukan
{
private:
vector<string> tumpukan;
int puncak;
public:
// Konstruktor
Tumpukan(int ukuran) : puncak(-1)
{
tumpukan.resize(ukuran); // Ukuran vector

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
}

// Memasukkan data ke tumpukan


// Nilai balik berupa false
// kalau tumpukan sudah penuh
bool push(string data)
{
// Periksa kalau tumpukan penuh
if (puncak == (tumpukan.size()-1))
return false;
// Masukkan data ke tumpukan
puncak++;
tumpukan[puncak] = data;
}
string pop(void)
{
if (! empty())
return tumpukan[puncak--];
else
return ""; // String kosong menyatakan
// tumpukan sudah habis
}
bool empty(void)
{
return (puncak == -1);
}
};
int main()
{
int ukuran = 10;
Tumpukan stack(ukuran); // Buat objek
// Masukkan 5 buah nama
stack.push("Aminudin");
stack.push("Zaskia");
stack.push("Rina Melati");
stack.push("Farhan");

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
stack.push("Agnes Monica");
// Kosongkan isi tumpukan dan tampilkan
while (! stack.empty())
{
string nama = stack.pop();
cout << nama << endl;
}
getchar();
}

Hasil Eksekusi Program Tumpukan Dengan Vector

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 09 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

12
  Ilmu Komputer  Teknik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
 
 Mampu membuat program yang 
 Implementasi Stack dengan linked‐list  
mengimplementasikan stack dengan 
 
linked‐list 
   
 
IMPLEMENTASI STACK DENGAN
LINKED LIST

I. Implementasi Aplikasi Linked List untuk membuat tumpukan (Stack)

// Implementasi kelas SimpulTumpukan dan ListTumpukan


// (Aplikasi untuk membalik string)
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
class SimpulTumpukan
{
public:
char data;
SimpulTumpukan* berikut;

// Konstruktor
SimpulTumpukan(char data);
};

class ListTumpukan
{
private:
SimpulTumpukan* puncak;
public:
ListTumpukan();
virtual ~ListTumpukan();
void push(char data);
bool empty();
char pop();
};

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
// Konstruktor
SimpulTumpukan::SimpulTumpukan(char data)
{
SimpulTumpukan::data = data;
SimpulTumpukan::berikut = NULL;
}

ListTumpukan::ListTumpukan()
{
ListTumpukan::puncak = NULL;
}
// Destruktor
ListTumpukan::~ListTumpukan()
{
// Menghapus semua simpul
SimpulTumpukan* penunjukHapus;
while (puncak != NULL)
{
penunjukHapus = puncak;
puncak = puncak->berikut;
delete penunjukHapus;
}
}

// push() (Bersifat publik)


// Untuk memasukkan data ke dalam tumpukan

void ListTumpukan::push(char data)


{
SimpulTumpukan* ptrBaru;

ptrBaru = new SimpulTumpukan(data);


ptrBaru->berikut = puncak;
puncak = ptrBaru;
}

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
// empty() (Bersifat publik)
// Menghasilkan true kalau tumpukan dalam keadaan kosong

bool ListTumpukan::empty()
{
return puncak == NULL;
}

// pop() (Bersifat publik)


// Mengambil sebuah nilai dari tumpukan
char ListTumpukan::pop()
{
if (empty())
{
cout << "Tumpukan sudah kosong. "
<< "Tidak bisa diambil lagi" << endl;
return 0; // Karakter NULL menyatakan tumpukan sudah kosong
}

SimpulTumpukan* ptrData;
char data;
ptrData = puncak;
data = puncak->data;
puncak = puncak->berikut;
delete ptrData;
return data;
}
int main()
{
ListTumpukan tumpukan;
tumpukan.push('A');
tumpukan.push('B');
tumpukan.push('C');
tumpukan.push('D');

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
// Ambil isi tumpukan
cout << "Isi tumpukan dari atas ke bawah:" << endl;
char karakter;
while (! tumpukan.empty())
{
karakter = tumpukan.pop();
cout << karakter << endl;
}

getch();
}

Hasil eksekusi :

II. APLIKASI DOUBLE LINKED LIST (SENARAI BERANTAI GANDA)

Double Linked List adalah jenis linked list yang memiliki 2 buah pointer. Pointer pertama
dipakai untuk menunjuk ke simpul berikutnya dan pointer kedua digunakan untuk
menunjuk ke simpul pendahulunya.

// Contoh untuk menguji senarai berantai ganda


#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <conio.h>
using namespace std;
class SimpulGanda
{
public:

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
char data;
SimpulGanda* berikut;
SimpulGanda* sebelum;
// Konstruktor
SimpulGanda(char data);
};
class ListGanda
{
private:
SimpulGanda* pertama;
SimpulGanda* terakhir;
public:
ListGanda();
virtual ~ListGanda();
void insertFirst(char data);
void insertLast(char data);
bool insertAfter(char kunci, char data);
bool empty();
char removeFirst();
char removeLast();
bool removeKey(char data);
void displayForward();
void displayBackward();
};
// Konstruktor
SimpulGanda::SimpulGanda(char data)
{
// Konstruktor
SimpulGanda::data = data;
SimpulGanda::berikut = NULL;
SimpulGanda::sebelum = NULL;
}
// Konstruktor
ListGanda::ListGanda()
{
// Konstruktor

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
ListGanda::pertama = NULL;
ListGanda::terakhir = NULL;
}
// Destruktor
ListGanda::~ListGanda()
{
// Destruktor
// Menghapus semua simpul
SimpulGanda* penunjukHapus;
while (pertama != NULL)
{
penunjukHapus = pertama;
pertama = pertama->berikut;
delete penunjukHapus;
}
}
// insertFirst() (Bersifat publik)
// Menyisipkan data ke dalam senarai
// sehingga akan ditunjuk oleh pertama
void ListGanda::insertFirst(char data)
{
// Buat simpul baru dan isikan Karakter ke dalam simpul
SimpulGanda* ptrBaru = new SimpulGanda(data);
// Atur penunjuk ke simpul
if (empty())
terakhir = ptrBaru;
else
pertama->sebelum = ptrBaru;
ptrBaru->berikut = pertama;
ptrBaru->sebelum = NULL;
pertama = ptrBaru;
}
// insertLast() (Bersifat publik)
// Menyisipkan data ke akhir senarai
void ListGanda::insertLast(char data)
{

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
// Buat simpul baru dan isikan karakter ke dalam simpul
SimpulGanda* ptrBaru = new SimpulGanda(data);
// Atur penunjuk ke simpul
if (empty())
pertama = ptrBaru;
else
{
terakhir->berikut = ptrBaru;
ptrBaru->sebelum = terakhir;
}
ptrBaru->berikut = NULL;
terakhir = ptrBaru;
}
// insertAfter() (Bersifat publik)
// Menyisipkan data ke sesudah kunci kunci
bool ListGanda::insertAfter(char kunci, char data)
{
char ditemukan = false;
// Cari posisi Key
SimpulGanda* ptrData = pertama;
while (ptrData != NULL)
{
if (ptrData->data == kunci)
{
ditemukan = true;
break;
}
ptrData = ptrData->berikut;
}
// Cek kalau tidak ditemukan
if (! ditemukan)
{
return false;
}
// Buat simpul baru dan isikan data ke dalam simpul
SimpulGanda* ptrBaru = new SimpulGanda(data);

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
// Atur penunjuk ke simpul
if (ptrData == terakhir)
{
ptrBaru->berikut = NULL;
terakhir = ptrBaru;
}
else
{
ptrBaru->berikut = ptrData->berikut;
ptrData->berikut->sebelum = ptrBaru;
}
ptrBaru->sebelum = ptrData;
ptrData->berikut = ptrBaru;
return true;
}
// empty() (Bersifat publik)
// Menghasilkan true kalau senarai kosong atau false kalau tidak kosong
bool ListGanda::empty()
{
return pertama == NULL;
}
// removeFirst() (Bersifat publik)
// Menghapus data pada simpul yang ditunjuk oleh pertama
char ListGanda::removeFirst()
{
if (empty())
{
cout << "Tumpukan sudah kosong" << endl;
return 0;
}
char data = pertama->data;
SimpulGanda* ptrData = pertama;
if (pertama->berikut == NULL)
terakhir = NULL;
else
pertama->berikut->sebelum = NULL;

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
pertama = pertama->berikut;
delete ptrData;
return data;
}
// removeLast() (Bersifat publik)
// Menghapus data pada simpul yang ditunjuk oleh terakhir
char ListGanda::removeLast()
{
if (empty())
{
cout << "Tumpukan sudah kosong" << endl;
return 0;
}
char data = terakhir->data;
SimpulGanda* ptrData = terakhir;
if (pertama->berikut == NULL)
pertama = NULL;
else
terakhir->sebelum->berikut = NULL;

terakhir = terakhir->sebelum;
delete ptrData;
return data;
}
// removeKey() (Bersifat publik)
// Menghapus simpul yang sesuai dengan kunci
// Hasil true kalau data dihapus false kalau tak ada yang dihapus
bool ListGanda::removeKey(char data)
{
SimpulGanda* ptrData = pertama;
while (ptrData->data != data)
{
ptrData = ptrData->berikut;
if (ptrData == NULL)
{
return false;

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
}
}
if (ptrData == pertama)
pertama = ptrData->berikut;
else
ptrData->sebelum->berikut = ptrData->berikut;
if (ptrData == terakhir)
terakhir = ptrData->sebelum;
else
ptrData->berikut->sebelum = ptrData->sebelum;
delete ptrData;
return true;
}
// displayForward() (Bersifat publik)
// Menampilkan isi senarai dari pertama ke terakhir
void ListGanda::displayForward()
{
cout << "Dari pertama ke terakhir: " << endl;
SimpulGanda* ptrData = pertama;
while (ptrData != NULL)
{
cout << ptrData->data;
ptrData = ptrData->berikut;
}
cout << endl; // Pindah baris
}
// displayBackward() (Bersifat publik)
// Menampilkan isi senarai dari terakhir ke pertama
void ListGanda::displayBackward()
{
cout << "Dari terakhir ke pertama: " << endl;
SimpulGanda* ptrData = terakhir;
while (ptrData != NULL)
{
cout << ptrData->data;
ptrData = ptrData->sebelum;

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  11 Tim Dosen http://www.mercubuana.ac.id

 
}
cout << endl; // Pindah baris
}
int main()
{
ListGanda senarai;
senarai.insertFirst('A');
senarai.insertFirst('B');
senarai.insertFirst('C');
senarai.insertFirst('D');
senarai.insertFirst('E');
senarai.displayForward();
cout << "Penyisipan X dan Y: " << endl;
senarai.insertLast('X');
senarai.insertLast('Y');
senarai.displayBackward();
senarai.displayForward();

char karakter = senarai.removeFirst();


cout << "Karakter terkiri yang diambil: " << endl;
senarai.displayForward();

senarai.removeKey('C');
cout << "Setelah C diambil:" << endl;
senarai.displayForward();

karakter = senarai.removeLast();
cout << "Karakter terkanan yang diambil: " << endl;
senarai.displayForward();

cout << "Penyisipan setelah B: " << endl;


senarai.insertAfter('B', 'M');
senarai.displayForward();

getch();
}

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  12 Tim Dosen http://www.mercubuana.ac.id

 
Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  13 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Abdul Kadir, Teori dan Aplikasi Struktur Data Menggunakan C++, Penerbit Andi,
Yogyakarta, 2013

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 11 Pusat Bahan Ajar dan eLearning
  14 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

13
  Ilmu Komputer  Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
   Mampu menjelaskan yang dimaksud 
 ADT Queue  dengan ADT queue 
 Implementasi queue dengan array linear   Mampu membuat program yang 
dan sirkular   mengimplementasikan queue dengan 
 Implementasi queue dengan linked‐list  array linear dan sirkular. 
   Mampu membuat program yang 
mengimplementasikan Queue dengan 
 
linked‐list 
 
ADT (Abstrack Data Type) QUEUE

I. ADT QUEUE

Queue disebut juga antrian dimana data masuk di satu sisi dan keluar di sisi yang
lain. Karena itu, queue bersifat FIFO (First In First Out). Antrian (Queue) merupakan suatu
kumpulan data yang penambahan elemennya (masuk antrian) hanya bisa dilakukan pada
suatu ujung (disebut dengan sisi belakang/rear) atau disebut juga enqueue yaitu apabila
seseorang masuk ke dalam sebuah antrian. Jika seseorang keluar dari antrian/penghapusan
(pengambilan elemen) dilakukan lewat ujung yang lain (disebut dengan sisi depan/front)
atau disebut juga dequeue yaitu apabila seseorang keluar dari antrian.

Jadi, dalam antrian menggunakan prinsip “masuk pertama keluar pertama” atau
disebut juga dengan prinsip FIFO (first in first out). Dengan kata lain, urutan keluar akan
sama dengan urutan masuknya. Contoh : antrian mobil saat membeli karcis di pintu jalan tol,
antrian di bioskop dan sebagainya.

1. Operasi / Prosedur Standar pada QUEUE / ANTRIAN


QUEUE merupakan struktur data dinamis, ketika program dijalankan, jumlah elemennya
dapat berubah secara dinamis sesuai keperluan. Berikut ini operasi-operasi standar pada
queue :
a. Inisialisasi, merupakan prosedur untuk membuat queue pada kondisi awal, yaitu
queue yang masih kosong (belum mempunyai elemen).
b. InQueue, Insert Queue merupakan prosedur untuk memasukkan sebuah elemen baru
pada queue. Jumlah elemen Queue akan bertambah satu dan elemen tersebut
merupakan elemen belakang.
c. DeQueue, Delete Queue merupakan prosedur untuk menghapus/mengambil sebuah
elemen dari queue. Elemen yang diambil adalah elemen depan dan jumlah elemen
queue akan berkurang satu.

Hal lain yang perlu diperhatikan dalam suatu struktur dinamis adalah jumlah elemen
struktur data tersebut. Operasi-operasi yang berhubungan dengan jumlah elemen suatu
queue adalah :

1. Size, yaitu operasi untuk mendapatkan banyaknya elemen queue.


2. Empty, yaitu prosedur untuk mengetahui apakah queue dalam keadaan kosong
atau tidak. Dengan status ini maka dapat dicegah dilakukannya operasi Dequeue

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
dari suatu queue yang kosong.
3. Full, merupakan prosedur untuk mengetahui apakah Queue penuh atau tidak.
Prosedur ini hanya berlaku untuk queue yang jumlahnya terbatas.

II. IMPLEMENTASI QUEUE DENGAN ARRAY LINEAR dan SIRKULAR

Karena antrian merupakan suatu kumpulan data, maka tipe data yang sesuai untuk
menyajikan antrian adalah menggunakan array atau list (senarai berantai).

Perhatikan gambar berikut ini :


depan

keluar masuk
A B C D E F

belakang
gambar 1. Contoh antrian dengan 6 elemen

Gambar di atas menunjukkan contoh penyajian antrian menggunakan array. Antrian


di atas berisi 6 elemen, yaitu A, B, C, D, E dan F. Elemen A terletak di bagian depan antrian
dan elemen F terletak di bagian belakang antrian. Jika ada elemen baru yang akan masuk,
maka elemen tersebut akan diletakkan di sebelah kanan F. Dan jika ada elemen yang akan
dihapus, maka A akan dihapus terlebih dahulu.
Elemen A terletak di bagian depan, kemudian disusul elemen B dan elemen yang
paling akhir atau paling belakang adalah elemen F. Misalkan ada elemen baru yang akan
masuk maka akan terletak di belakang elemen F, sehingga elemen baru akan menempati
posisi yang paling belakang.
Gambar 2 menunjukkan antrian di atas dengan penambahan elemen G dan H,
sehingga gambar 1. Menjadi :
depan

keluar masuk
A B C D E F G H

belakang
gambar 2. Contoh penambahan antrian dengan 2 elemen

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
Gambar 3 menunjukkan antrian dengan penghapusan elemen A dan B, sehingga gambar 1
menjadi :
depan

keluar masuk
C D E F G H

belakang
gambar 3. Contoh penghapusan antrian dengan 2 elemen

Seperti pada tumpukan atau stack di dalam antrian juga dikenal 2 operasi dasar yaitu
menambah elemen baru yang akan diletakkan di bagian belakang antrian dan
menghapus elemen yang terletak di bagian depan antrian. Selain itu kita juga harus
melihat antrian itu mempunyai isi atau masih kosong.
Untuk memahami penggunaan antrian dalam array, kita membutuhkan deklarasi
antrian, misalnya sebagai berikut :

# define MAXN 6
Typedef enum { NOT_OK, OK } Tboolean;
Typedef struct {
Titem array [MAXN];
int first;
int last;
int number_of_items;
} Tqueue

Dengan deklarasi di atas, elemen antrian dinyatakan dalam tipe integer yang semuanya
terdapat dalam struktur. Variabel first menunjukkan posisi elemen pertama dalam array,
dan variabel last menunjukkan posisi elemen terakhir dalam array.

Algoritma dari penggalan program di atas adalah :


1. Tentukan elemen yang akan dimasukkan ke dalam antrian (dalam hal ini adalah 6
elemen).
2. Deklarasikan struktur untuk menampung elemen pada antrian.
3. Selesai.
Untuk menambah elemen baru dan mengambil elemen dari antrian dalam antrian,
diperlukan deklarasi berikut ini :

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
void initialize_queue ( Tqueue *Pqueue)
{
Pqueue -> firs = 0;
Pqueue -> last = -1;
Pqueue -> number_of_items = 0;
}

Tboolean enqueue ( Tqueue *Pqueue, Titem item)


{
if (Pqueue -> number_of_items >= MAXN)
return (NOT_OK);
else {
Pqueue -> last++;
if (Pqueue -> last > MAXN -1)
Pqueue -> = 0;
Pqueue -> array[Pqueue->last] = item;
Pqueue -> number_of_items++;
return (OK);
}
}

Tboolean dequeue (Tqueue *Pqueue, Titem, item)


{
if (Pqueue -> number_of_items == 0)
return (NOT_OK);
else {
*Pitem = Pqueue -> array[Pqueue->first++];
if (Pqueue -> first > MAXN -1)
Pqueue -> first = 0;
Pqueue -> number_of_items--;
return (OK);
}
}

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
Contoh program antrian :

// Contoh antrian
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <conio.h>
#include <vector>
using namespace std;
class Antrian
{
private:
vector<string> data;
int depan, belakang;
int maksElemen;
public:
// Konstruktor
Antrian(int ukuran)
{
depan = 0;
belakang = 0;
maksElemen = ukuran;
data.resize(ukuran); // Ukuran vector
}
// Memasukkan data ke antrian
// Nilai balik tidak ada
void insert(string x)
{
int posisiBelakang;
// Geser belakang ke posisi berikutnya
if (belakang == maksElemen)
posisiBelakang = 1;
else
posisiBelakang = belakang + 1;
// Cek belakang apa sama dengan Depan
if (posisiBelakang == depan)

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
cout << "Antrian penuh" << endl;
else
{
belakang = posisiBelakang;
// Masukkan data
data[belakang] = x;
}
}
string remove(void)
{
if (empty())
{
cout << "Antrian kosong" << endl;
return "";
}
if (depan == maksElemen)
depan = 1;
else
depan = depan + 1;
return data[depan];
}
bool empty(void)
{
if (depan == belakang)
return true;
else
return false;
}
};
int main()
{
int ukuran = 10;
Antrian daftar(ukuran); // Buat objek
// Masukkan 5 buah nama
daftar.insert("Aminudin");
daftar.insert("Zaskia");

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
daftar.insert("Rina Melati");
daftar.insert("Farhan");
daftar.insert("Agnes Monica");
// Kosongkan isi antrian dan tampilkan
while (! daftar.empty())
{
string nama = daftar.remove();
cout << nama << endl;
}
getch();
}

Hasil eksekusi :

III. IMPLEMENTASI QUEUE DENGAN LINKED LIST

Untuk memanipulasi sebuah antrian bisa digunakan dua buah variabel yang
menyimpan posisi elemen paling depan dan elemen paling belakang. Apabila antrian
diimplementasikan menggunakan linked list maka cukup 2 pointer yang bisa dipakai
yaitu elemen paling depan (kepala) dan elemen paling belakang (ekor).
Untuk mengimplementasikan antrian dengan menggunakan pointer, perhatikan
algoritma berikut ini :

1. Tentukan struktur untuk menampung node yang akan dimasukkan pada antrian.
Deklarasi struktur pada penggalan program berikut ini :

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
struct queueNode
{
char data;
struct queueNode *nextPtr;
};
typedef struct queueNode QUEUENODE;
ypedef QUEUENODE * QUEUENODEPTR;
QUEUENODEPTR headPtr = NULL, tailPtr = NULL;

2. Deklarasikan penambahan elemen baru pada antrian, dimana letaknya adalah paling
belakang. Deklarasi penambahan elemen baru tersebut dapat dilihat pada penggalan
program berikut ini :

void enqueue ( QUEUENODEPTR *headPtr, QUEUENODEPTR *tailPtr, char value )


{
QUEUENODEPTR newPtr = malloc ( sizeof ( QUEUENODE ) );
If ( newPtr != NULL )
{
newPtr -> data = value;
newPtr -> nextPtr = NULL;
if ( isEmpty ( *headPtr ) )
*headPtr = newPtr;
else
( *tailPtr ) -> nextPtr = newPtr;
*tailPtr = newPtr;
}

3. Lakukan pengecekan terhadap antrian, apakah antrian dalam kondisi kosong atau
tidak. Kalau kondisi antrian kosong, maka elemen bisa dihapus. Penggalan program
berikut ini akan menunjukkan kondisi tersebut.

int isEmpty ( QUEUENODEPTR headPtr )


{
return headPtr == NULL;
}

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 12 Pusat Bahan Ajar dan eLearning
  10 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

14
  Ilmu Komputer  Teknik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
   Mampu menjelaskan yang dimaksud 
 ADT Binary Tree    dengan ADT Binary Tree 
   Mampu mengimplementasikan binary 
  tree menggunakan linked‐list 
 Mampu mengimplementasikan operasi 
dan manipulasi terhadap binary tree 

 
ADT Binary Tree

I. ADT Binary Tree


Definisi Pohon adalah :
 Susunan dari satu atau lebih simpul (node) yang terdiri dari satu simpul khusus yang
disebut akar (root) sedang sisanya membentuk subtree dari akar.
LEVEL
A
0

B C D 1

E F G H I J 2

K L M 3

Akar dari struktur pohon ini adalah A


Satu simpul akan berisi :
~ Informasi ( misal, A , B, dst)
~ Cabang-cabang (Link) yang menghubungkan Kesimpul simpul yang lain.
Simpul A sebagai akar mempunyai 3 Link yang membentuk SUBTREE B,C, D.
Jumlah SUBTREE dari satu simpul disebut : DERAJAT (DEGREE).
Derajat Simpul : A = 3
B = 2
C = 1
G = 0

Simpul yang mempunyai derajat = 0 disebut : SIMPUL TERMINAL atau DAUN (LEAF)
Contoh simpul daun gambar diatas adalah : K , L, F, G, M, I , J
Struktur Pohon yang terkenal adalah struktur geneologi (silsilah). Dalam struktur tersebut
adanya simpul anak (children) dan orangtua(parent)

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
Contoh anak D adalah H, I, J
Orangtua D adalah A
Anak dari orang tua yang sama (saudara sekandung) disebut sibling misal H,I,J.
DERAJAT (DEGREE) SUATU POHON
Adalah derajat maksimum dari suatu simpul dalam pohon.
Contoh derajat pohon dalam gambar diatas adalah 3.
Nenek Moyang dari dari suatu simpul adalah seluruh simpul-simpul yang ada sepanjang
lintasan dari akar sampai simpul tersebut.
Contoh nenek moyang dari M adalah A, D dan H.

KEDALAMAN (HEIGHT atau DEPTH)


Kedalaman suatu pohon ditentukan oleh level maksimum dari simpul dalam pohon.
Contoh kedalaman pohon dari gambar diatas adalah A.

HUTAN (FOREST)
Adalah susunan dari beberapa pohon.
Bila akar A dihilangkan maka akan diperoleh hutan dengan 3 pohon yaitu :
B(E(K,L),F)
C(G)
D(H(M),I,J)

Ada 2 cara untuk menyatakan struktur pohon yaitu :


1. Gambar
2. Daftar(List)

Pernyataan dengan Gambar adalah seperti terlihat pada Gambar diatas sedangkan kalau
dengan List adalah sebagai berikut :
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
Proses dalam struktur data non linier, bentuk pohon akan lebih mudah digambarkan bila
diketahui :
1. n ( Jumlah Simpul atau Node )
2. k ( Derajat Pohon)

Dari data n dan k maka dapat dihitung :


JUMLAH LINK = n.k

JUMLAH NULL-LINK = n( k - 1)+1

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
JUMLAH NON ZERO LINK = n - 1

STRUKTUR NODE K-ary

DATA

Child-k
Child –1 ……

Pohon 3 - ary :

B
C D

E F G H I J

Dari gambar diatas diket : n = 10 , k = 3


Maka dapat dihitung :
JUMLAH LINK = n . k = 3. 10 = 30
JUMLAH NULL LINK = n(k–1)+1
= 10( 3 – 1 ) + 1
= 21
JUMLAH NON ZERO LINK = n – 1 = 10 – 1 = 9

POHON BINER (BINARY TREE)


 Tipe yang sangat penting dari struktur data
 Dalam struktur pohon biner hanya dikenal SUBTREE KIRI DAN SUBTREE KANAN
saja

Simpul dalam pohon biner adalah :


Susunan dari simpul-simpul yang masing-masing bisa kosong atau terdiri dari akar dan dua
pohon biner yang terpisah dan disebut subtree kiri dan subtree kanan.

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
A

Pohon biner dengan subtree kanan kosong

C
Pohon biner dengan subtree kiri kosong

Complete Binary Tree


B C

D
E

Pohon Biner Penuh ( Full Binary Tree)


Adalah pohon biner yang mempunyai simpul atau node lengkap dari level 1
sampai level ke I
A

 
  B C

D
E F G

Full Binary Tree

Pohon Biner Lengkap ( Complete Binary Tree)

Adalah pohon biner yang mempunyai simpul dengan nomor urut 1 sampai dengan n.

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
i = level Level

Anak terkiri menunjukkan anak Terkanan menujukkan 1


Jumlah simpul 1 jumlah max simpul

i–1 i
2 2 3 2 – 1 2

4 3
5 6 7

8 9 10 12 13 14 15 4
11

LEVEL ANAK ANAK


TERKIRI TERKANAN
1 1 1
2 2 3
3 4 7
4 8 15
5 16 31
6 32 63
7 64 127
8 128 255
9 256 511
10 512 1023
11 1024 2047
12 2048 4095
. . .
. . .
. . .
. . .

No anak kiri (Left Child) = No. Parent * 2


No anak kanan (Right Child) = (No. Parent *2) + 1

No Parent = No Child
2
Pertanyaan
1. Pohon dengan simpul jumlah simpul = 273 merupakan lengkap atau penuh
2. Berapa kedalamannya ?
3. No berapa simpul terkiri dari level tersebut ?
4. berapa jumlah maxsimum simpul level 7
5. No berapa anak kanan dari simpul ke 180 ?…..ada dilevel berapa anak tersebut.
6. No. berapa orang tua dari simpul ke 83 ? … ada dilevel berapa orangtua tsb

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
Kedalaman minimal dari pohon biner adalah :

2 Log n + 1 -- dimana n = jumlah simpul

Contoh bila n = 15
Maka kedalamannya minimal = 2 Log 15 + 1
= Log 15 + 1
Log 2
= 1.17 / 0.3 + 1 = 3 + 1
= 4
SKEWED TREE
Binary Tree yang semua nodenya (kecuali leaf/daun) hanya memiliki satu child.
Adalah Pohon biner yang miring kekiri atau kekanan, atau dengan kata lain pohon biner
dengan subtree kiri kosong atau subtree kanan kosong.

Pohon Biner seperti ini disimpan dalam bentuk


B Array sangat memboroskan

REPRESENTASINYA sebagai berikut :


1 A
2 B
3
4 C
5
6
7
8 D
9 Kosong sebanyak 7 Elemen

15

Berdasarkan full binary tree, pohon jenis diatas memiliki banyak simpul kosong.
Seharusnya dibawah A, terdapat simpul anak yg selevel, namun hanya terdapat 1 simpul
anak yaitu B, dibawah B, seharusnya terdapat 1 simpul anak B, 2 simpul anak lainnya yang
selevel atau 2 simpul anak dari simpul yg selevel dengan B, kosong 3 array.

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
Terlihat dari contoh diatas bahwa penyimpanan data dalam memori dari pohon biner
hanya menguntungkan kalau pohon binernya penuh sehingga tidak memboroskan tempat.
Untuk menanggulangi ini maka perlu menggunakan representasi Linked List, dimana
masing-masing simpul akan mempunyai 3 field yaitu :

LCHILD DATA RCHILD


ATAU
DATA

LCHILD RCHILD

Contoh Representasi Link Pohon Biner Biasa

B C
 

  0 D 0 0 E 0 0 F 0 0 G 0

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  8 Tim Dosen http://www.mercubuana.ac.id

 
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Indra Yatini B, Flowchart, Algoritma, dan Pemrograman Menggunakan Bahasa C++ Builder,
Graha Ilmu, Yogyakarta, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 13 Pusat Bahan Ajar dan eLearning
  9 Tim Dosen http://www.mercubuana.ac.id

 
 

 
MODUL PERKULIAHAN
 

Pemrograman
Algoritma
 
Struktur Data  

Modul Standar untuk


digunakan dalam Perkuliahan
  di Universitas Mercu Buana
 
 

             

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

14
  Ilmu Komputer  Teknik Informatika  87042  Tim Dosen
 

Abstract  Kompetensi 
   Mampu mengimplementasikan traversal 
 ADT Binary Tree    pre‐order, in‐order dan post‐order. 
   Mampu mengimplementasikan program 
  yang melakukan pencarian pada binary tree  

 
ADT Binary Tree
I. PENELUSURAN POHON BINER ( Binary Tree Traversal )

Ada 3 macam Traversal :


1. Inorder Traversal
2. Preorder Traversal
3. Postorder Traversal

1. Inorder Traversal

Akan menghasilkan bentuk INFIX, Bentuknya :


Operand1 Operator Operand2

A + B
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara INORDER.

+ C

A B

Langkah-langkahnya :
1. Telusuri Subtree (sub pohon) Kiri
2. Proses Simpul Akar
3. Telusuri Subtree(Sub pohon) Kanan
maka akan diperoleh persamaan INORDERnya adalah: (A + B) * C

2. Preorder Traversal

Akan menghasilkan bentuk PREFIX, Bentuknya


Operator Operand1 Operand2

+ A B

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
  2 Tim Dosen http://www.mercubuana.ac.id

 
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara PREORDER.

+
C

A
B

Langkah-langkahnya :
1. Proses Simpul Akar
2. Telusuri Subtree(sub pohon) Kiri
3. Telusuri Subtree(Sub pohon) Kanan
maka akan diperoleh persamaan PREORDERnya adalah: * + A B C

3. Postorder Traversal

Akan menghasilkan bentuk POSTFIX, Bentuknya :


Operand1 Operand2 Operator
A B +
Contoh
Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara POSTORDER.

+ C

A B

Langkah-langkahnya :
1. Telusuri Subtree(sub pohon) Kiri
2. Telusuri Subtree(Sub pohon) Kanan
3. Proses Simpul akar
maka akan diperoleh persamaan POSTORDERnya adalah: A B + C *

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
  3 Tim Dosen http://www.mercubuana.ac.id

 
SOAL latihan

1. Buat Persamaan INORDER, PREORDER, DAN POST ORDER dari Tree Berikut :

* /

A - *
+

7 E F G
C D

2. Diket Persamaan POST ORDER :

A B / C * D E ** F / + 2 –

Buat INORDER, PREORDER, dan buat Tree nya.

II. BINARY SEARCH TREE

adalah Binary tree dengan sifat bahwa :

 semua left child harus lebih kecil daripada right child dan parentnya.
 Juga semua right child harus lebih besar daripada left child dan parentnya.

Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu kesulitan
dalam searching atau pencarian node tertentu dalam binary tree.
Contoh binary search tree umum :

18

10 23

5 14 21 25

Pada dasarnya operasi dalam binary search tree sama dengan binary tree biasa, kecuali
pada operasi insert, update dan delete.

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
  4 Tim Dosen http://www.mercubuana.ac.id

 
~ OPERASI INSERT
Pada binary search tree, insert dilakukan setelah ditemukan lokasi yang tepat (lokasi
tidak ditentukan oleh user sendiri).
Misalnya anda diminta memasukkan angka-angka berikut ini ke dalam suatu binary
search tree. Angka-angka tersebut adalah 12, 15, 13, 9, 5, 11, 20
Algoritma dari insert ini adalah :
1. Masukkan sebuah huruf, angka pertama yang masuk akan menjadi root.
2. Kemudian masukkan angka berikutnya ke dalam tree tersebut.
3. Bandingkan angka tersebut dengan angka yang menjadi root, apabila angkanya lebih
besar dari root maka letaknya ada di sebelah kanan. Kalau angkanya lebih kecil,
maka letaknya di sebelah kiri root.
4. Untuk sub root atau child, caranya juga sama dengan langkah 3.

Implementasi dari algoritma di atas dapat dilihat pada ilustrasi gambar berikut ini ;

1. Insert angka 12 12

Masukkan angka 12 ke dalam tree. Karena tree masih kosong maka otomatis angka
12 menjadi root.

2. Insert angka 15
Karena angka 15 lebih besar dari angka 12, maka sesuai dengan aturan yang ada
dalam binary search tree, angka 15 ini berada di sebelah kanan angka 12.

12

15
3. Insert angka13
Karena angka 13 yang dimasukkan lebih besar dari angka 12, maka sesuai dengan
aturan yang berlaku, angka 13 ini harus berada di sebelah kanan angka 12.
Kemudian karena disebelah kanan angka 12 sudah ada angka 15, maka angka 13
ini harus dibandingkan lagi dengan angka 15. Karena angka 13 lebih kecil dari
angka 15, maka posisinya ada disebelah kiri angka 15.
12

15

13

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
  5 Tim Dosen http://www.mercubuana.ac.id

 
4. Insert angka 9
Karena angka 9 yang dimasukkan lebih kecil dari angka 12, maka sesuai dengan
aturan yang berlaku angka 9 ini harus berada di sebelah kiri angka 12.

12

15
9

13

5. Insert angka 5
Karena angka 5 lebih kecil dari angka 12, maka sesuai aturan yang berlaku angka 5
ini harus berada di sebelah kiri angka 12. Kemudian karena di sebelah kiri angka 12
sudah ada angka 9, maka angka 5 ini harus dibandingkan lagi dengan angka 9.
Karena angka 5 lebih kecil dari angka 9, maka posisinya ada di sebelah kiri angka 9.

12

9 15

5
13

6. Insert angka 11
Karena angka 11 lebih kecil dari angka 12, maka sesuai dengan aturan yang
berlaku angka 11 ini harus berada di sebelah kiri angka 12. Kemudian karena di
sebelah kiri angka 12 sudah ada angka 9, maka angka 11 ini harus dibandingkan
lagi dengan angka 9. Karena angka 11 lebih besar dari angka 9, maka posisinya
ada di sebelah kanan angka 9.

12

9 15

5 11 13

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
  6 Tim Dosen http://www.mercubuana.ac.id

 
7. Insert angka 20
Karena angka 20 lebih besar dari angka 12, maka sesuai dengan aturan yang
berlaku angka 20 ini harus berada di sebelah kanan angka 12. Kemudian karena di
sebelah kanan angka 12 sudah ada angka 15, maka angka 20 ini harus
dibandingkan lagi dengan angka 15. Karena angka 20 lebih besar dari angka 15,
maka posisinya ada di sebelah kanan angka 15.

12

9 15

5 11 13 20

~ OPERASI UPDATE

Seperti pada binary tree biasa, namun disini update akan berpengaruh pada posisi node
selanjutnya. Bila setelah diupdate mengakibatkan tree tersebut bukan Binary Search Tree
lagi, maka harus dilakukan perubahan pada tree dengan melakukan rotasi supaya tetap
menjadi Binary Search Tree.

~ OPERASI DELETE

Delete dilakukan setelah ditemukan lokasi yang tepat. (lokasi tidak ditentukan oleh user
sendiri). Misalnya dari angka-angka berikut ini dan sesuai dengan permasalahan pada
operasi insert yaitu 12, 15, 13, 9, 5, 11, 20. Anda diminta untuk menghapus angka 5, 20,
12, 9 dan 15.

Adapun algoritma dari delete ini adalah :


1. Tentukan angka yang akan dihapus.
2. Kalau angka tersebut merupakan leaf, maka bisa langsung dihapus.
3. Kalau angka yang dihapus mempunyai 1 atau lebih cabang, maka posisi angka yang
dihapus dapat digantikan pada angka yang merupakan leaf baik itu berada pada sub
tree kiri atau kanan.

Implementasi dari algoritma di atas dapat dilihat pada ilustrasi gambar berikut ini :

1. Delete angka 5
Karena angka 5 merupakan leaf, maka angka 5 ini langsung dapat dihapus.

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
  7 Tim Dosen http://www.mercubuana.ac.id

 
12

9 15

11 13 20

2. Delete angka 20
Karena angka 20 ini juga termasuk leaf, maka angka ini juga bisa segera dihapus.

12

9 15

11 13

3. Delete angka 12
Karena angka 12 ini mempunyai 2 anak cabang, maka untuk menggantikan angka 12
yang dihapus dapat menggunakan angka yang ada di sebelah kiri subtree bagian
kanan yaitu angka 13.
13

9 15

11

4. Delete angka 9
Karena angka 9 mempunyai 1 cabang di sebelah kiri, maka angka 11 yang merupakan
cabang dari 9 dapat menggantikan angka 9 yang dihapus.

13

11 15

5. Delete angka 15
Karena angka 15 merupakan leaf, maka angka ini dapat segera dihapus.

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
8 Tim Dosen http://www.mercubuana.ac.id
13

Contoh program :
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
class SimpulPohon
{
public:
char data;
SimpulPohon* induk;
SimpulPohon* kiri;
SimpulPohon* kanan;
// Konstruktor
SimpulPohon(char karakter);
};
class PohonBiner
{
private:
SimpulPohon* akar;
bool sisip(SimpulPohon* &ortu, SimpulPohon* ptrBaru);
SimpulPohon* cari(SimpulPohon* &akar, char data);
string inOrder(SimpulPohon* ptrSimpul);
string preOrder(SimpulPohon* ptrSimpul);
string postOrder(SimpulPohon* ptrSimpul);
void hapusSemuaSimpul(SimpulPohon* ptrSimpul);
public:
PohonBiner();
~PohonBiner();
bool sisip(char data);
bool cari(char data);

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
9 Tim Dosen http://www.mercubuana.ac.id
bool hapus(char data);
string inOrder();
string preOrder();
string postOrder();
};
// Konstruktor SimpulPohon
SimpulPohon::SimpulPohon(char data)
{
SimpulPohon::data = data;
SimpulPohon::induk = NULL;
SimpulPohon::kiri = NULL;
SimpulPohon::kanan = NULL;
}
// Konstruktor PohonBiner
PohonBiner::PohonBiner()
{
PohonBiner::akar = NULL;
}
// Destruktor PohonBiner
PohonBiner::~PohonBiner()
{
hapusSemuaSimpul(akar);
}
// sisip (Bersifat privat)
// Untuk menyisipkan simpul ke pohon
// Nilai balik: true = Berhasil disisipkan
// false = Gagal karena data kembar
bool PohonBiner::sisip(SimpulPohon* &ortu, SimpulPohon* ptrBaru)
{
if (ptrBaru->data == ortu->data)
{
delete ptrBaru; // Hapus karena sudah ada
return false;
}
else
if (ptrBaru->data < ortu->data)

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
10 Tim Dosen http://www.mercubuana.ac.id
if (ortu->kiri == NULL)
{
ortu->kiri = ptrBaru;
ptrBaru->induk = ortu;
return true;
}
else
return sisip(ortu->kiri, ptrBaru);
else // Berarti lebih dari
if (ortu->kanan == NULL)
{
ortu->kanan = ptrBaru;
ptrBaru->induk = ortu;
return true;
}
else
return sisip(ortu->kanan, ptrBaru);
}
// sisip (Bersifat publik)
// Untuk menyisipkan data ke pohon
// Nilai balik: true = Berhasil disisipkan
// false = Gagal karena data kembar
bool PohonBiner::sisip(char data)
{
SimpulPohon* ptrBaru = new SimpulPohon(data);
if (akar == NULL)
{
akar = ptrBaru;
return true;
}
else
return sisip(akar, ptrBaru);
}
// cari (Bersifat privat)
// Untuk mencari data data
// Nilai balik: true: ketemu

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
11 Tim Dosen http://www.mercubuana.ac.id
// false: tidak ketemu
// argumen Akar menyatakan akar dari subpohon
// untuk pencarian
SimpulPohon* PohonBiner::cari(SimpulPohon* &akar, char data)
{
if (akar == NULL)
return NULL;
else
if (data == akar->data)
return akar;
else
if (data < akar->data)
return cari(akar->kiri, data);
else
return cari(akar->kanan, data);
}
// cari (Bersifat publik)
// Menghasilkan : true: kalau data ketemu
// false: kalau tidak ketemu
bool PohonBiner::cari(char data)
{
if (cari(akar, data) == NULL)
return false;
else
return true;
}
// hapus (Bersifat publik)
// Nilai balik: false = Data tidak ketemu
// true = Data berhasil dihapus
bool PohonBiner::hapus(char data)
{
SimpulPohon* simpulDihapus = cari(akar, data);
if (simpulDihapus == NULL)
{
return true;
}

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
12 Tim Dosen http://www.mercubuana.ac.id
if (simpulDihapus->kanan == NULL)
if (simpulDihapus->kiri == NULL)
{
// Simpul yang akan dihapus berkedudukan
// sebagai daun (tidak punya anak)
if (simpulDihapus == akar)
akar = NULL;
else
if (simpulDihapus->induk->kiri == simpulDihapus)
// Kalau yang dihapus adalah anak kiri ortunya
simpulDihapus->induk->kiri = NULL;
else
// Kalau yang dihapus adalah anak kanan ortunya
simpulDihapus->induk->kanan = NULL;
}
else
{
// Simpul yang akan dihapus memiliki anak di sebelah kiri saja
if (simpulDihapus == akar)
{
akar = simpulDihapus->kiri;
akar->induk = NULL;
}
else
{
// Kalau bukan akar
if (simpulDihapus->induk->kiri == simpulDihapus)
{
// Merupakan anak kiri dari ortunya
simpulDihapus->induk->kiri = simpulDihapus->kiri;
simpulDihapus->kiri->induk = simpulDihapus->induk;
}
else
{
// Merupakan anak kanan dari ortunya
simpulDihapus->induk->kanan = simpulDihapus->kiri;

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
13 Tim Dosen http://www.mercubuana.ac.id
simpulDihapus->kiri->induk = simpulDihapus->induk;
}
}
}
else
if (simpulDihapus->kiri == NULL)
{
// Simpul yang akan dihapus mempunyai anak di sebelah kanan saja
if (simpulDihapus == akar)
{
akar = simpulDihapus->kanan;
akar->induk = NULL;
}
else // Kalau bukan akar
if (simpulDihapus->induk->kiri == simpulDihapus)
{
// Simpul dihapus adalah anak kiri ortunya
simpulDihapus->induk->kiri = simpulDihapus->kanan;
simpulDihapus->kanan->induk = simpulDihapus->induk;
}
else
{
// Simpul dihapus adalah anak kanan ortunya
simpulDihapus->induk->kanan = simpulDihapus->kanan;
simpulDihapus->kanan->induk = simpulDihapus->induk;
}
}
else
{
// Simpul yang dihapus memiliki dua buah subpohon
// -- Cari pengganti/suksesor simpul yang akan dihapus
SimpulPohon* suksesor = simpulDihapus->kanan;
while (suksesor->kiri != NULL)
suksesor = suksesor->kiri;
// -- Putuskan suksesor dari pohon
if (suksesor->induk->kiri == suksesor)

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
14 Tim Dosen http://www.mercubuana.ac.id
{
// Suksesor sebagai anak kiri dari induknya
suksesor->induk->kiri = suksesor->kanan;
if (suksesor->kanan != NULL)
suksesor->kanan->induk = suksesor->induk;
}
else
{
// Suksesor sebagai anak kanan dari induknya
suksesor->induk->kanan = suksesor->kanan;
if (suksesor->kanan != NULL)
suksesor->kanan->induk = suksesor->induk;
}
// Data pada suksesor disalin ke simpul yang akan dihapus
simpulDihapus->data = suksesor->data;
// Ubah simpul yang ditunjuk oleh suksesor ke SimpulDihapus
simpulDihapus = suksesor;
}
delete simpulDihapus;
return true;
}
// InOrder (bersifat privat)
// Menampilkan data secara inorder
string PohonBiner::inOrder(SimpulPohon* ptrSimpul)
{
string hasil = "";
if (ptrSimpul != NULL)
{
if (ptrSimpul->kiri != NULL)
hasil = hasil + inOrder(ptrSimpul->kiri);
hasil = hasil + ptrSimpul->data;
if (ptrSimpul->kanan != NULL)
hasil = hasil + inOrder(ptrSimpul->kanan);
}
return hasil;
}

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
15 Tim Dosen http://www.mercubuana.ac.id
// InOrder (bersifat publik)
// Menampilkan data secara inorder
string PohonBiner::inOrder()
{
return inOrder(akar);
}
// PreOrder (bersifat privat)
// Menampilkan data secara preorder
string PohonBiner::preOrder(SimpulPohon* ptrSimpul)
{
string hasil = "";
if (ptrSimpul != NULL)
{
hasil = hasil + ptrSimpul->data;
if (ptrSimpul->kiri != NULL)
hasil = hasil + preOrder(ptrSimpul->kiri);
if (ptrSimpul->kanan != NULL)
hasil = hasil + preOrder(ptrSimpul->kanan);
}
return hasil;
}
// PreOrder (bersifat publik)
// Menampilkan data secara preorder
string PohonBiner::preOrder()
{
return preOrder(akar);
}
// PostOrder (bersifat privat)
// Menampilkan data secara postorder
string PohonBiner::postOrder(SimpulPohon* ptrSimpul)
{
string hasil = "";
if (ptrSimpul != NULL)
{
if (ptrSimpul->kiri != NULL)
hasil = hasil + postOrder(ptrSimpul->kiri);

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
16 Tim Dosen http://www.mercubuana.ac.id
if (ptrSimpul->kanan != NULL)
hasil = hasil + postOrder(ptrSimpul->kanan);
hasil = hasil + ptrSimpul->data;
}
return hasil;
}
// PostOrder (bersifat publik)
// Menampilkan data secara postorder
string PohonBiner::postOrder()
{
return postOrder(akar);
}
// HapusSemuaSimpul (Bersifat privat)
// Untuk menghapus semua simpul
void PohonBiner::hapusSemuaSimpul(SimpulPohon* ptrSimpul)
{
if (ptrSimpul != NULL)
{
hapusSemuaSimpul(ptrSimpul->kiri);
hapusSemuaSimpul(ptrSimpul->kanan);
delete ptrSimpul;
}
}
int main()
{
PohonBiner pohon;
string dataNama = "KEBUNMAIYA";
// Memasukkan karakter-karakter yang ada di dataNama ke Pohon
for (unsigned int i = 0; i < dataNama.length(); i++)
{
if (pohon.sisip(dataNama[i]) == false)
cout << "Data " << dataNama[i]
<< " sudah ada" << endl;
else
cout << "Data " << dataNama[i]
<< " disimpan" << endl;

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
17 Tim Dosen http://www.mercubuana.ac.id
}
cout << "InOrder: "
<< pohon.inOrder() << endl;
cout << "PreOrder: "
<< pohon.preOrder() << endl;
cout << "PostOrder: "
<< pohon.postOrder() << endl;
// Menghapus A, N dan K
pohon.hapus('A');
pohon.hapus('N');
pohon.hapus('K');
cout << "Setelah A, N dan K dihapus: " << endl
<< "PreOrder: "
<< pohon.preOrder() << endl;
getch();

Hasil eksekusi :

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
18 Tim Dosen http://www.mercubuana.ac.id
Daftar Pustaka

Andri Kristanto, Algoritma & Pemrograman dengan C++ Edisi 2, Graha Ilmu, Yogyakarta,
2009.

Budi Raharjo, Pemrograman C++, Informatika, Bandung, 2010.

Moh. Sjukani, Algoritma & Struktur Data dengan C, C++ dan JAVA, Mitra Wacana Media,
Bandung, 2004.

2015 Pemrograman Algoritma Struktur Data Modul 14 Pusat Bahan Ajar dan eLearning
19 Tim Dosen http://www.mercubuana.ac.id

Anda mungkin juga menyukai