Laboratorium Software Engineering
Institut Teknologi Telkom Surabaya Jl. Gayungan PTT No.17-19 Surabaya
MODUL MATA KULIAH PRAKTIKUM
ALGORITMA DAN PEMROGRAMAN
Penulis :
Dewi Rahmawati, S.Kom., M.Kom.
PROGRAM STUDI S1 LABORATORIUM SOFTWARE ENGINEERING
INSTITUT TEKNOLOGI TELKOM SURABAYA
Jl. GAYUNGAN PTT No.17-19
KATA PENGANTAR
Puji Syukur kehadirat Allah SWT atas segala limpahan Rahmat dan Hidayah-Nya hingga Modul
Praktikum Algoritma dan Pemrograman untuk perkuliahan Institut Teknologi Telkom Surabaya
tahun akademik 2018/2019 bisa diselesaikan dengan baik. Penulis menyampaikan terima kasih
kepada semua pihak yang telah membantu penyusunan modul ini.
Modul Praktikum Algoritma dan Pemrograman ini disusun dengan menggunakan Java
Development Kit 8 dan CodeBlocks versi 16.01. Modul ini terdiri dari 14 bab materi mengenai
Pengenalan CodeBlocks ID dan Bahasa Pemrograman C++ hingga pada materi algoritma
searching dan sorting dan ditambah dengan soal latihan, tugas serta soal troubleshooting sebagai
bahan latihan mandiri bagi mahasiswa. Tiap bab materi dilengkapi dengan latihan tambahan di
akhir bab.
Harapan penulis semoga buku ini bisa memberikan manfaat kepada seluruh mahasiswa Institut
Teknologi Telkom Surabaya dalam mempersiapkan diri memasuki dunia kerja.
Surabaya, 6 September 2018
Penulis
TATA TERTIB PRAKTIKUM
1. Mahasiswa peserta praktikum berpakaian sopan dan pantas, dan tidak diperkenankan
memakai alas kaki ke dalam ruang praktikum,
2. Sebelum kegiatan praktikum dimulai mahasiswa diharapkan untuk mempersiapkan diri
terlebih dahulu perihal materi perkuliahan yang akan dibahas.
3. Mahasiswa dilarang untuk memasuki ruangan sebelum dijinkan oleh dosen / instruktur /
asisten / staff / kepala laboratorium komputer.
4. Mahasiswa masing-masing menempati komputer yang telah disediakan
5. Mahasiswa menyiapkan buku modul praktek yang telah dibagikan
6. Mahasiswa mengerjakan materi dan tugas praktikum sesuai modul praktek
7. Mahasiswa dilarang berbicara, bercakap-cakap apabila tidak diperintahkan oleh Dosen /
Instruktur Laboratorium Komputer baik sebelum maupun selama kegiatan berlangsung,
8. Mahasiswa mengisi absensi kehadiran praktikum yang telah disediakan (maksimal 10 kali
pertemuan)
9. Selama kegiatan perkuliahan berlangsung mahasiswa diwajibkan untuk menjaga ketertiban di
dalam ruangan laboratorium komputer, mahasiswa mematikan komputer setelah selesai
kegiatan perkuliahan lab.
10. Mahasiswa peserta praktikum dilarang main game, arogan, merokok, makan atau minum di
dalam ruangan laboratorium komputer, mahasiswa yang main game, arogan, makan, atau
minum akan langsung dikeluarkan dari laboratorium komputer.
11. Mahasiswa dilarang mengoperasikan (menggunakan, memindahkan peralatan laboratorium),
sebelum mendapat izin dari dosen / instruktur / asisten / staff / kepala laboratorium komputer.
12. Apabila mahasiswa tidak mengerti cara mengoperasikan alat yang tersedia, agar menanyakan
kepada Dosen / Instruktur / Asisten / Staff Laboratorium Komputer.
13. Mahasiswa tidak mengganggu kegiatan belajar-mengajar. (Seperti : mengobrol, atau
menggunakan Telepon Seluler), keluar dan masuk Laboratoirum Komputer tanpa meminta
ijin terlebih dahulu kepada dosen yang bersangkutan.
14. Apabila kegiatan Laboratorium sudah selesai, mahasiswa diharuskan untuk mengembalikan
semua peralatan pada posisi semula,
15. Apabila terjadi kerusakan peralatan, agar mahasiswa segera melaporkan kepada Dosen /
Instruktur / Asisten / Staff / Kepala Laboratorium Komputer, adapun jika kerusakan
disebabkan oleh kelalaian mahasiswa maka yang bersangkutan diharuskan mengganti
kerusakan tersebut,
16. Apabila mahasiswa tidak mengikuti ketentuan diatas maka akan dikenakan sanksi baik
administrasi maupun akademik.
~ 4 ~
DAFTAR ISI
BAB 1.............................................................................................................................................................6
Pengenalan CodeBlocks IDE dan Bahasa Pemrograman C++ ......................................................................6
I. DASAR TEORI ...................................................................................................................................6
II. LATIHAN............................................................................................................................................9
BAB 2...........................................................................................................................................................16
Translasi Pseudocode ke Struktur Bahasa C++............................................................................................16
I. DASAR TEORI .................................................................................................................................16
II. LATIHAN..........................................................................................................................................22
III. TROUBLESHOOTING.....................................................................................................................23
IV. TUGAS ..............................................................................................................................................24
BAB 3...........................................................................................................................................................25
Konstruksi Dasar Runtutan (Sequence)........................................................................................................25
I. DASAR TEORI .................................................................................................................................25
II. LATIHAN..........................................................................................................................................30
III. TROUBLESHOOTING.....................................................................................................................31
IV. TUGAS ..............................................................................................................................................31
BAB 4...........................................................................................................................................................32
Konstruksi Dasar Pemilihan (Selection) ......................................................................................................32
I. DASAR TEORI .................................................................................................................................32
II. LATIHAN..........................................................................................................................................45
III. TROUBLESHOOTING.....................................................................................................................46
IV. TUGAS ..............................................................................................................................................47
BAB 5...........................................................................................................................................................49
Konstruksi Dasar Pengulangan (Repetition) ................................................................................................49
I. DASAR TEORI .................................................................................................................................49
II. LATIHAN..........................................................................................................................................56
III. TROUBLESHOOTING.....................................................................................................................57
IV. TUGAS ..............................................................................................................................................58
BAB 6...........................................................................................................................................................60
Larik (Array)................................................................................................................................................60
I. DASAR TEORI .................................................................................................................................60
II. LATIHAN..........................................................................................................................................69
III. TROUBLESHOOTING.....................................................................................................................70
IV. TUGAS ..............................................................................................................................................71
~ 5 ~
BAB 7...........................................................................................................................................................73
Fungsi dan Prosedur.....................................................................................................................................73
I. DASAR TEORI .................................................................................................................................73
II. LATIHAN..........................................................................................................................................82
III. TROUBLESHOOTING.....................................................................................................................83
IV. TUGAS ..............................................................................................................................................84
BAB 8...........................................................................................................................................................86
Tipe Data Bentukan......................................................................................................................................86
I. DASAR TEORI .................................................................................................................................86
II. LATIHAN..........................................................................................................................................94
III. TROUBLESHOOTING.....................................................................................................................96
IV. TUGAS ..............................................................................................................................................96
BAB 9...........................................................................................................................................................97
Rekursif........................................................................................................................................................97
I. DASAR TEORI .................................................................................................................................97
II. LATIHAN 1.......................................................................................................................................98
III. LATIHAN 2.......................................................................................................................................99
IV. TUGAS ............................................................................................................................................100
BAB 10.......................................................................................................................................................102
Searching (Pencarian) ................................................................................................................................102
I. DASAR TEORI ...............................................................................................................................102
II. LATIHAN 1.....................................................................................................................................105
III. LATIHAN 2.....................................................................................................................................105
BAB 11.......................................................................................................................................................106
Sorting (Pengurutan) ..................................................................................................................................106
I. DASAR TEORI ...............................................................................................................................106
II. LATIHAN........................................................................................................................................114
~ 6 ~
BAB 1
Pengenalan CodeBlocks IDE dan Bahasa Pemrograman C++
Tujuan :
1. Mahasiswa dapat memahami Dasar Teori mengenai Pemrograman C++..
2. Mahasiswa dapat melakukan Instalasi dan Pemrograman C++ menggunakan Code Blocks
IDE.
I. DASAR TEORI
A. CodeBlocks
Integrated Development Environtment (IDE) adalah suatu aplikasi komputer yang
digunakan untuk mengembangkan aplikasi berdasarkan bahasa pemrograman tertentu.
1
IDE
biasanya terdiri dari Graphical User Interface builder, text atau code editor, compiler atau
interpreter, serta debugger.
2
Melalui bantuan compiler, program yang ditulis dalam bahasa pemrograman (seperti
C/C++) diterjemahkan menjadi kode mesin sehingga bisa dijalankan oleh komputer. Sebelum
merilis program yang dibuat, diperlukan proses debugging, yaitu melacak lokasi kesalahan (bug)
pada program kemudian memperbaikinya. Alat untuk melakukan debugging dinamakan
debugger. Dengan debugger memungkinkan programmer untuk menghentikan program yang
sedang running di titik-titik tertentu (breakpoint).
Contoh IDE untuk bahasa pemrograman C/C++ adalah CodeBlocks, Dev C++, Borland
C++, Visual Studio, dan sebagainya. IDE yang akan digunakan pada praktikum ini adalah
CodeBlocks versi 16.01.
3
IDE ini bersifat open source dan tidak memerlukan lisensi berbayar.
1
Sumber: https://www.techopedia.com/definition/26860/integrated-development-environment-ide. Diakses pada
tanggal 31 Agustus 2016.
2
Sumber: http://www.webopedia.com/TERM/I/integrated_development_environment.html. Diakses pada tanggal 31
Agustus 2016.
3
Unduh dari: http://sourceforge.net/projects/codeblocks/files/Binaries/16.01/Windows/codeblocks- 16.01mingw-
setup.exe
~ 7 ~
B. Bahasa Pemrograman C++
Setiap program C++ mempunyai bentuk umum seperti di bawah, yaitu:
Penjelasan :
1. Include
Adalah salah satu pengarah prepocessor directive yang tersedia pada C++.
Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Bentuk
umumnya:
tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu bentuk
pernyataan, tetapi merupakan prepocessor directive. Baris tersebut menginstrusikan
kepada kompiler yang menyisipkan file lain dalam hal ini file yang berakhiran .h(file
header) yaitu file yang berisi sebagai deklarasi contohnya:
- : diperlukan pada program yang melibatkan objek cout
- : diperlukan bila melibatkan clrscr(), yaitu perintah untuk
membersihkan layar.
- : diperlukan bila melibatkan setw() yang bermanfaat untuk
mengatur lebar dari suatu tampilan data.
- : diperlukan pada program yang menggunakan operasi
sqrt() yang bermanfaat untuk operasi matematika kuadrat.
#prepocessor directive
void main()
{
// Batang Tubuh Program Utama
}
#include <nama_file>
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <math.h>
~ 8 ~
2. Fungsi main ()
Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama judul
fungsi. Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh
program utama berada didalam fungsi main( ). Berarti dalam setiap pembuatan program
utama, maka dapat dipastikan seorang pemrogram menggunakan minimal sebuah fungsi.
Pembahasan lebih lanjut mengenai fungsi akan diterangkan kemudian. Yang sekarang
coba ditekankan adalah kita menuliskan program utama kita didalam sebuah fungsi
main().
3. Komentar
Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis
komentar, yaitu:
Jenis 1 : /* Komentar anda diletakkan di dalam ini
Bisa mengapit lebih dari satu baris */
Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa perbaris )
4.Tanda Semicolon
Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap
pernyataan harus diakhiri dengan sebuah tanda semicolon.
5. Mengenal cout(dibaca : Cout)
Pernyataan cout merupakan sebuah objek di dalam C++, yang digunakan untuk
mengarahkan data ke dalam standar output (cetak pada layar)
Contoh :
Tanda “ << “ merupakan sebuah operator yang disebut operator “penyisipan/peletakan”
#include <iostream.h>
void main()
{
cout << "Hai, Selamat Menggunakan C++";
}
~ 9 ~
II. LATIHAN
A. Pembuatan File Program C++
1. Jalankan program CodeBlocks
2. Klik menu File – New – Project
3. Pilih “Console Application” dan Klik tombol “Go”
4. Klik “Next”
~ 10 ~
5. Pilih “C++”, kemudian klik “Next”
6. Isi kolom Project Title nama project, folder to create project in lokasi penyimpanan project
(buat folder khusus di komputer masing-masing untuk Praktikum Algoritma dan
Pemrograman) Project Filename nama project Resulting filename alamat lengkap project
disimpan di dalam harddisk Kemudian klik “Next”.
~ 11 ~
7. Pilih compiler yang akan digunakan (Pada praktikum ini menggunakan GNU GCC
Compiler). Checklist “Create Debug Configuration” dan “Create Release Configuration”.
Kemudian klik “Finish”.
8. Jika sudah klik Finish Code:Blocks akan membuat Project baru di dalam Workspace kita.
~ 12 ~
9. Double Click file main.cpp, maka akan tampil code editor. Secara default isi dari main.cpp
adalah aplikasi Hello World
10. Untuk menjalankan program tersebut klik icon berwarna hijau berikut:
~ 13 ~
11. Jika tidak ada kesalahan maka akan tampil terminal sebagai output dari program tersebut
12. Namun jika ada kesalahan maka Code:Blocks akan menampilkan daftar kesalahan yang
mungkin terjadi. Contoh, misalkan simbol titik-koma (;) pada baris ke-3 dihilangkan, maka
CodeBlocks akan menampilkan pesan kesalahan seperti berikut:
B. Proses Debugging pada CodeBlocks
Debugging adalah proses melacak kode langkah demi langkah (step by step) sehingga
dapat diketahui di mana letak kesalahan dalam program dan dapat diketahui sebab program tidak
berjalan dengan benar. Kesalahan dalam membuat program bisa terjadi karena kesalahan logika
atau algoritmanya, dan kesalahan penulisan sintaks. CodeBlocks telah menyediakan perangkat
untuk melakukan debugging pada menu “Debug”. Dengan debugger memungkinkan programmer
menghentikan program sementara dan melihat (watch) apa yang terjadi.
1. Jalankan CodeBlocks dan buat project baru dengan nama “Test Debugging”,
2. Buka main.cpp dan ganti kode default-nya dengan kode di bawah ini:
3. Klik menu Debug – Step Into, atau bisa juga dengan menekan tombol Shift+F7.
Selanjutnya CodeBlocks akan menjalankan secara langkah demi langkah dari program yang
ditulis.
#include <iostream.h>
using namespace std;
int main()
{
int x=5, y=2, z;
z = x + y;
cout << z << end1;
return 0;
}
~ 14 ~
4. Untuk melihat nilai dari variable, buka jendela Watches dengan cara klik menu Debug –
Debugging windows – Watches
5. Pada langkah ini program mendefinisikan variable x, y, dan z, serta compiler memberikan
nilai acak untuk ketiga variable tersebut.
6. Tekan Shift+F7 (step into) untuk melanjutkan ke langkah berikutnya. Pada langkah ini nilai
variable x dan y telah terisi.
7. Tekan Shift+F7 untuk melanjutkan ke langkah berikutnya.
#include <iostream.h>
using namespace std;
int main()
{
int x=5, y=2, z;
z = x + y;
cout << z << end1;
return 0;
}
#include <iostream.h>
using namespace std;
int main()
{
int x=5, y=2, z;
z = x + y;
cout << z << end1;
return 0;
}
#include <iostream.h>
using namespace std;
int main()
{
int x=5, y=2, z;
z = x + y;
cout << z << end1;
return 0;
~ 15 ~
8. Tekan Shift+F7 untuk melanjutkan ke langkah berikutnya.
9. Tekan Shift+F7, program menuju ke akhir baris dari fungsi main. Variabel telah dihapus
dari memori
10. Tekan Shift+F7, program selesai di eksekusi Tekan Shift+F7, program exit.
#include <iostream.h>
using namespace std;
int main()
{
int x=5, y=2, z;
z = x + y;
cout << z << end1;
return 0;
}
~ 16 ~
BAB 2
Translasi Pseudocode ke Struktur Bahasa C++
Tujuan :
1. Mahasiswa dapat memahami variabel, record, I/O, assignment dan operator.
2. Mahasiswa dapat melakukan translasi pseudocode ke struktur bahasa C++.
I. DASAR TEORI
Pseudocode merupakan kode yang mirip dengan bahasa pemrograman. Pseudocode
berasal dari kata Pseudo yang berarti imitasi, mirip atau menyerupai dan code yang berarti
instruksi program. Pseudocode terdiri dari tiga bagian, yaitu judul, kamus (deklarasi), dan
algoritma. Ketiga bagian pada pseudocode tersebut dapat ditranslasikan ke bentuk bahasa C++
dengan cara sebagai berikut:
A. Judul
Berisi nama program dan spesifikasi program dengan struktur pada pseudocode
sebagai berikut:
Program Nama_Program
{
Penjelasan terkait variable input, proses, dan/atau variable output
yang digunakan pada algoritma. Diawali dan diakhiri dengan tanda
kurung kurawal
}
Hasil translasi ke bentuk Bahasa C++:
// Program Nama_Program
/*
Penjelasan terkait variable input, proses, dan/atau variable output yang
digunakan pada algoritma. Diawali dan diakhiri dengan tanda kurung kurawal
*/
Judul pada pseudocode ditranslasikan ke dalam Bahasa C++ sebagai sebagai komentar
atau keterangan. Komentar merupakan bagian dari program yang tidak dieksekusi. Komentar bisa
ditulis dengan dua cara, yaitu:
• Single Line
Penulisan komentar didahului dengan menuliskan simbol //. Komentar hanya bisa
dituliskan pada baris dimana simbol tersebut dituliskan.
• Multi Line
Penulisan komentar didahului dengan menuliskan simbol /* dan diakhiri dengan menuliskan
*/. Komentar bisa dituliskan pada semua baris yang berada di antara kedua simbol tersebut.
~ 17 ~
Logika: boolean
Angka : integer
Pecahan: real
Huruf : char
Kata : string
bool Logika ;
int Angka ;
real Pecahan ;
char Huruf ;
string Kata ;
B. Kamus
Berisi pendefinisian tipe data dan/ atau pendeklarasian variabel, konstanta, dan fungsi/ prosedur
yang digunakan pada bagian algoritma dengan struktur pada pseudocode sebagai berikut :
Variabel : Tipe_Data
Hasil translasi ke bentuk Bahasa C++ :
Tipe_Data Variabel;
Contoh:
Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai
tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai
dari suatu variabel bisa diubah-ubah sesuai kebutuhan. Untuk memperoleh nilai dari suatu
variabel digunakan pernyataan penugasan (assignment statement), yang mempunyai sintaks
sebagai berikut.
variabel = ekspresi ;
Nama dari suatu variabel dapat ditentukan sendiri oleh pemrogram dengan aturan sebagai
berikut.
1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf. Bahasa
C ++ bersifat case-sensitive artinya huruf besar dan kecil dianggap berbeda. Jadi antara
nim, NIM dan Nim dianggap berbeda.
2. Tidak boleh mengandung spasi.
3. Tidak boleh mengandung simbol-simbol khusus, kecuali garis bawah (underscore). Yang
termasuk simbol khusus yang tidak diperbolehkan antara lain : $, ?, %, #, !, &, *, (, ), -,
+, =, dsb.
4. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.
~ 18 ~
Contoh penamaan variabel yang benar :
NIM, a, x, nama_mhs, f3098, f4, nilai, budi, dsb.
Contoh penamaan variabel yang salah :
%nilai_mahasiswa, 80mahasiswa, rata-rata, ada spasi, penting!, dsb.
Tipe data dapat dikelompokkan menjadi atas dua macam, yaitu tipe data dasar dan tipe data
bentukan.
1. Tipe Data Dasar
Dalam C++ terdapat beberapa jenis tipe data dasar yang digolongkan ke dalam tipe bilangan bulat
(integer), bilangan riil (floating-point), tipe logika (boolean), tipe karakter/teks (character/
string).
a. Tipe Bilangan Bulat
Yaitu untuk data-data angka yang tidak mengandung angka di belakang koma. Tipe data
yang termasuk kategori ini adalah:
Tabel 1 Tipe Bilangan Bulat
Tipe Dasar Keterangan
Char
Menyatakan sebuah karakter seperti A, f, 9.
Ukuran memori 1 byte. Jangkauan nilai -128 hingga +127.
Int
Menyatakan bilangan bulat.
Ukuran memori 2 byte. Jangkauan nilai -32768 hingga +32767.
Long
Menyatakan bilangan bulat namun jumlahnya nilainya lebih
banyak dari pada biasanya, contohnya pada long int yaitu
2147483648 – 2147483647.
Ukuran memory 4 byte.
Short
Menyatakan bilangan bulat namun dengan nilai yang normal,
contohnya pada short int yaitu antara -32768 - 32767.
b. Tipe Bilangan Rill
Yaitu untuk data-data angka yang mengandung angka di belakang koma. Tipe data yang
termasuk kategori ini adalah:
Tabel 2 Tipe Bilangan Riil
Tipe Dasar Keterangan
Float
Menyatakan bilangan real dengan ketelitian rendah (7 digit).
Ukuran memory 4 byte. Jangkauan nilai 3,4E-38 hingga
3,4E38
Double
Menyatakan bilangan real dengan ketelitian tinggi (15 digit).
Ukuran memory 8 byte. Jangkauan nilai 1.7E-308 hingga
1.7E308
Long double
Menyatakan bilangan real dengan ketelitian tinggi (19 digit).
Ukuran memory 10 byte. Jangkauan nilai 3.4E-4932 hingga
1.1E4932.
~ 19 ~
c. Tipe data Boolean
Boolean adalah salah satu tipe data yang memiliki dua pilihan, yaitu True (1) atau False
(0). Tipe data ini biasanya digunakan untuk memberikan kepastian dan memastikan
kebenaran dari sebuah operasi atau kondisi program.
2. Tipe Data Bentukan
Merupakan tipe yang dibentuk dari tipe dasar seperti tipe struktur, yaitu suatu tipe data yang
merupakan kumpulan dari tipe data lainnya. Struktur terdiri dari data yang disebut field. Field -
field tersebut digabungkan menjadi satu tujuan untuk kemudahan dalam operasi.
Algoritma
Berisi langkah - langkah penyelesaian dari program seperti pembacaan input, assigment
(penugasan), dan menampilkan output dengan struktur pseudocode sebagai berikut.
1. Pembacaan Input
input (variable)
Hasil translasi ke bentuk Bahasa C++ :
cin >> variable ;
Contoh:
input (nama) cin >> variable ;
cin adalah perintah yang digunakan untuk menerima standar input (masukan) pada C++. Stream
ini dihubungkan dengan operator overloaded operator extraction (>>) lalu diikuti dengan
variabel penyimpan data. Contoh di atas maksudnya adalah user diminta memasukkan nama
menggunakan keyboard yang akan ditampung oleh variabel nama. Setelah masukkan
diberikan, tekan tombol ENTER.
2. Assignment (Penugasan)
variable ← nilai atau ekspresi
Hasil translasi ke bentuk Bahasa C++ :
variable = nilai atau ekspresi ;
~ 20 ~
Contoh :
a  10
Hasil  a + b
a = 10;
Hasil = a + b;
Penugasan digunakan untuk mengeset suatu variabel dengan suatu nilai. Penugasan dapat
dilakukan secara langsung dengan nilai tertentu seperti ditunjukkan pada contoh pertama atau
secara tidak langsung dengan menggunakan suatu ekspresi seperti pada contoh kedua.
3. Menampilkan Output
output (variable)
Hasil translasi ke bentuk Bahasa C++ :
cout << variable ;
Contoh :
output (“Hello”)
output (nama)
cout << “Hello”;
cout << nama;
cout adalah perintah yang digunakan untuk menampilkan hasil pada layar monitor. Stream
ini dihubungkan dengan operator overloaded << (sepasang tanda “less than”). Contoh
pertama akan memunculkan tulisan Hello di layar monitor, sedangkan contoh kedua akan
memunculkan nilai yang tersimpan pada variabel nama di layar monitor.
Hasil translasi pseudocode ke dalam bentuk Bahasa C++ dapat dijalankan dengan menambahkan
preprocessor directive dan fungsi main() pada struktur Bahasa C++ seperti berikut.
//Tempat judul
#preprocessor directive
int main()
{
//Tempat Kamus
//Tempat Algoritma
return 0;
}
~ 21 ~
Preprocessor directive adalah baris pada program yang didahului dengan tanda pagar (#).
Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Salah satu
preprocessor directive adalah include yang memiliki bentuk umum :
#include <nama_library>
Baris tersebut akan menginstruksikan pada kompiler untuk memanggil library berupa header file
ke dalam program. Header file adalah file dengan ekstensi .h yang di dalamnya terdapat
instruksi C++, contoh :
Fungsi main () adalah fungsi yang wajib ada pada struktur Bahasa C++ karena fungsi ini menjadi
titik awal dan titik akhir eksekusi program. Tanda { pada awal fungsi menyatakan awal tubuh
fungsi dan sekaligus awal eksekusi program, sedangkan tanda } di akhir fungsi merupakan akhir
tubuh fungsi dan sekaligus adalah akhir eksekusi program. Perintah return 0 digunakan untuk
menyatakan hasil keluaran pada fungsi main() adalah 0 dan sekaligus menyatakan bahwa program
berakhir dengan normal.
Contoh untuk dicoba pada praktikum:
Berikut hasil translasi pseudocode ke dalam struktur Bahasa C++ secara lengkap.
(a) Pseudocode
iostream.h : di dalamnya memuat perintah I/O standar seperti cin dan cout
~ 22 ~
//JUDUL
/************************************************
Program Penjumlahan
Program ini digunakan untuk melakukan penjumlahan
*************************************************/
#include <iostream>
using namespace std;
int main()
{
//KAMUS
int a,b;
int hasil;
//ALGORITMA
a = 10;
cout << a << " + ";
cin >> b;
hasil = a + b;
cout << "Hasil = " << hasil << endl;
return 0;
}
(b) Struktur Bahasa C++
II. LATIHAN
Diberikan pseudocode seperti berikut :
Program Konversi_Suhu
{
Program untuk mengkonversi suhu dari celcius ke satuan
yang lain (Fahrenheit, Reamur, dan Kelvin
Fahrenheit = (9/5)* Celcius + 32
Reamur = (4/5)* Celcius
Kelvin = Celcius + 273
}
KAMUS :
Celcius : integer
Fahrenheit : real
Reamur : real
Kelvin : integer
ALGORITMA :
input (Celcius)
Fahrenheit = (9/5)* Celcius + 32
Reamur = (4/5)*Celcius
Kelvin = Celcius
output (Celcius + " = " + Fahrenheit + " = " + Reamur + " = " + Kelvin)
~ 23 ~
Pertanyaan:
• Translasikan pseudocode berikut ke dalam struktur Bahasa C++!
• Bagaimana hasilnya outputnya?
• Lakukan analisa step by step per baris sehingga dapat diperoleh hasil tersebut dengan proses
debugging!
III. TROUBLESHOOTING
Perhatikan kode program berikut.
//JUDUL
/************************************************
Program Mengitung Rata-rata
Program untuk menghitung rata-rata dari tiga buah
bilangan yagn nilainya diinputkan oleh user dan
hasil rata-ratanya kaan ditampilkan pada layar
monitor
*************************************************/
#include <iostream>
using namespace std;
int main()
{
//KAMUS
int angka1, angka2, angka3;
float jumlah;
int 2rata;
//ALGORITMA
cout << "Masukkan angka pertama = ";
cin >> angka1;
cout << "Masukkan angka kedua = ";
cin >> angka2;
cout << "Masukkan angka ketiga = ";
cin >> angka3;
jumlah = angka1 + angka2 + angka3;
2rata = jumlah/3;
cout << "Rata-rata = " << 2rata << endl;
return 0;
}
Pertanyaan:
● Ada berapa kesalahan dari program di atas dan sebutkan apa saja kesalahan dari program di
atas?
● Mengapa kesalahan tersebut dapat terjadi?
● Bagaimana cara penyelesaiannya?
~ 24 ~
IV. TUGAS
1. Buatlah flowchart dan pseudocode untuk menghitung luas permukaan tabung dengan
ketentuan sebagai berikut :
• Nilai jari-jari diambil dari dua digit terakhir NIM
• Nilai tinggi ditentukan oleh use melalui input keyboard
2. Translasikan ke dalam struktur Bahasa C++ sehingga hasil outputnya menjadi seperti pada
gambar berikut:
Catatan :
- Tambahkan identitas diri (NAMA dan NIM) di baris paling atas
- Kode program cukup di-screenshot (tidak perlu ditulis ulang)
- Hasil output di-screenshot
3. Tunjukkan hasil translasi pseudocode ke dalam struktur Bahasa C++ baris demi baris dan
lakukan analisa step by step per baris tersebut dengan proses debugging sehingga hasil yang
diperoleh bisa terbukti secara perhitungan manual!
Catatan :
Pada setiap penjelasan translasi pseudocode ke dalam struktur Bahasa C++ dan analisa
step by step per baris, proses debugging pada Codeblocks dapat dimasukkan dengan
screenshot
~ 25 ~
Assignment 2
Assignment 1
Assignment 3
BAB 3
Konstruksi Dasar Runtutan (Sequence)
I. DASAR TEORI
Salah satu konstruksi dasar yang digunakan untuk membangun sebuah algoritma adalah Runtutan
(Sequence). Sebuah runtutan terdiri dari satu atau lebih assignment (penugasan) yang dikerjakan
secara berurutan. Jika digambarkan dalam bentuk flowchart, konstruksi dasar runtutan dapat
digambarkan sebagai berikut.
Assignment digunakan untuk mengeset suatu variabel dengan suatu nilai. Assignment dapat
dilakukan secara langsung dengan nilai tertentu atau secara tidak langsung dengan menggunakan
suatu ekspresi. Pada Modul 1 sudah dijelaskan bahwa assignment (penugasan) memiliki struktur
pseudocode sebagai berikut.
variable ← nilai atau ekspresi
Hasil translasi ke bentuk Bahasa C++:
variable = nilai atau ekspresi
Contoh:
a  10
Hasil  a + b
a = 10;
Hasil = a + b;
Nilai adalah besaran dari tipe data yang terdefinisi (tipe dasar atau tipe bentukan). Nilai dapat
berupa data yang disimpan di dalam variabel atau konstanta seperti pada contoh pertama.
~ 26 ~
Ekspresi merupakan transformasi nilai menjadi keluaran yang dilakukan melalui perhitungan
(komputasi) seperti pada contoh kedua. Ekspresi terdiri dari operan dan operator. Operan adalah
objek yang dioperasikan dan operator adalah simbol yang digunakan untuk memanipulasi
operan, seperti +, -, *, div, mod. Beberapa operator yang dapat digunakan untuk membentuk suatu
ekspresi adalah sebagai berikut:
A. Operator Aritmatika
Operator Deskripsi Contoh
+ Penjumlahan (Add) n + m
- Pengurangan (Subtract) n - m
* Perkalian (Multiply) n * m
/ Pembagian (Divide) n / m
% Sisa Pembagian Integer (Modulus) n % m
~ Negasi (Negate) ~m
Tabel 3 Operator Aritmatika
Operator +, -, *, /, dan % membutuhkan dua operan. Pada contoh, m dan n berlaku sebagai
operan. Berbeda halnya dengan operator negasi (~), operator tersebut hanya membutuhkan satu
buah operan, dikenal juga dengan unary operator. Cara lain penulisan dengan menggunakan
operator aritmatika:
m = m + n m += n
m = m - n m -= n
m = m * n m *= n
m = m / n m /= n
m = m % n m %= n
~ 27 ~
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int m, n;
m = 27;
n = 5;
cout << "m + n = " << m + n << endl;
cout << "m - n = " << m - n << endl;
cout << "m x n = " << m * n << endl;
cout << "m / n = " << m / n << endl;
cout << "m % n = " << m % n << endl;
cout << "~m = " << ~m << endl;
return 0;
}
Contoh Program 1 04
B. Operator Naik dan Turun (Increment dan Decreament)
Operator Diskripsi
++ Increament (Naik)
-- Decreament (Turun)
Tabel 4 Operator Naik dan Turun
Operator naik dan turun juga termasuk unary operator, yaitu operator dengan satu buah operan.
Operator tersebut dapat diletakkan sebelum operan ataupun setelah operan. Contoh:
Operator pre-increment dan post-increment memiliki akibat yang sama, yaitu menambah nilai
satu pada m dan memasukkan nilai tersebut kembali ke m (m=m+1). Hal yang sama juga terjadi
pada operator pre-decrement dan post-decrement yang memberikan akibat yang sama, yaitu
mengurangi nilai satu dari n (n=n-1). Tetapi bila digunakan sebagai sub-ekspresi, operator post-
increment dan pre-increment ataupun pre-drecreament dan post-decreament menunjukkan hasil
yang berbeda.
--m (pre-decreament)
m-- (post-decreament)
++m (pre-increament)
m++ (post-increament)
~ 28 ~
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int m=66, n;
n = ++m;
cout << "m = " << m << ", n = " << n << endl;
n = m++;
cout << "m = " << m << ", n = " << n << endl;
cout << "m = " << m++ << endl;
cout << "m = " << m << endl;
cout << "m = " << ++m << endl;
return 0;
}
Output:
Penjelasan:
1. Dalam assignment yang pertama, m adalah pre-increment, menaikkan nilainya menjadi 67,
yang selanjutnya dimasukkan ke n.
2. Dalam assignment kedua, m adalah post-increment, sehingga 67 dimasukkan dahulu ke n baru
kemudian nilai m-nya dinaikkan, itu sebabnya mengapa nilai m = 68 dan n = 67.
3. Dalam assignment ketiga, m adalah post-increment, sehingga nilai m ( = 68 ) ditampilkan
dahulu ( ke layar ) baru kemudian nilai m dinaikkan menjadi 69.
4. Dalam assignment ke-empat, m adalah pre-increment, sehingga nilai m dinaikkan dahulu
menjadi 70 baru kemudian ditampilkan ke layar.
C. Operator Bitwise
Seluruh operator bitwise hanya bisa dikenakan pada operan bertipe data int atau char, yang
terdapat pada tabel tersebut.
Operator Diskripsi Contoh
<< Geser n bit ke kiri ( left shift ) m << n
>> Geser n bit ke kanan ( right shift ) m >> n
& Bitwise AND m & n
| Bitwise OR m | n
^ Bitwise XOR m ^ n
~ Bitwise NOT ~m
~ 29 ~
Berikut ini diberikan tabel kebenaran untuk operator logika:
AND OR XOR
A B P A B P A B P
0 0 0 0 0 0 0 0 0
0 1 0 0 1 1 0 1 1
1 0 0 1 0 1 1 0 1
1 1 1 1 1 1 1 1 0
Contoh Program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int m, n;
m = 12;
n = 2;
cout << "m >> n = " << (m>>n) << endl;
cout << "m << n " << (m<<n) << endl;
cout << "m & n = " << (m&n) << endl;
cout << "m | n = " << (m|n) << endl;
cout << "m ^ n = " << (m^n) << endl;
cout << "~m = " << (~m) << endl;
return 0;
}
D. Operator Logika
Operator logika digunakan untuk menghubungkan dua atau lebih ungkapan menjadi sebuah
ungkapan berkondisi benar atau salah (true atau false).
Operator Deskripsi Contoh
= = Sama dengan m == n
!= Tidak sama dengan m != n
> Lebih besar m > n
< Lebih kecil m < n
>= Lebih besar atau sama dengan m >= n
<= Lebih kecil atau sama dengan m <= n
&& logic AND (m<100) && (m>80)
|| logic OR (m>100) || m<0)
! logic NOT !(m == n)
P = A operator B
~ 30 ~
Contoh untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int m, n;
cout << "Masukan nilai m = ";
cin >> m;
cout << "Masukan nilai n = ";
cin >> n;
cout << "m = n --> " << (m==n) << endl;
cout << "m != n --> " << (m!=n) << endl;
cout << "m > n --> " << (m>n) << endl;
cout << "m < n --> " << (m<n) << endl;
cout << "m >= n --> " << (m>=n) << endl;
cout << "m <= n --> " << (m<=n) << endl;
return 0;
}
II. LATIHAN
Tentukan nilai akhir dari variabel A dan B dari algoritma berikut:
Pertanyaan:
• Lakukan analisa step by step per baris sehingga dapat diperoleh hasil tersebut sehingga
diperoleh hasil tersebut!
~ 31 ~
III. TROUBLESHOOTING
Perhatikan kode program berikut.
#include <iostream>
using namespace std;
int main()
{
int a=10, b=5, c=2;
int d;
d = a/b*c+a;
cout << "Nilai d = " << d << endl;
return 0;
}
Pertanyaan:
Nilai variabel d yang diinginkan sebenarnya adalah 24, tapi jika program di atas dijalankan maka
akan didapat hasil yang berbeda. Dengan melakukan analisa pada baris 9 (line – 9) program
tersebut, jawablah:
● Penulisan rumus yang benar pada program
● Jelaskan jawaban anda dengan melakukan perhitungan secara manual step-by- step
sehingga didapat hasil tersebut!
IV. TUGAS
Misalkan X, Y, dan Z adalah peubah bertipe boolean, X bernilai true, Y bernilai false, dan Z
bernilai true,tentukan hasil dari:
Operasi logika Hasil
(X and Y) or Z ?
X and (Y or Z) ?
Not (X and Z) ?
(Y Xor Z) and Y ?
• Buatlah dalam satu flowchart dan satu pseudocode!
• Tunjukkan translasi dari pseudocode ke bentuk C++!
• Tunjukkan hasil output-nya!
• Lakukan analisis baris per baris sehingga diperoleh hasil tersebut.
~ 32 ~
BAB 4
Konstruksi Dasar Pemilihan (Selection)
I. DASAR TEORI
Selain runtutan (sequence), konstruksi dasar lain yang dapat digunakan untuk membangun sebuah
algoritma adalah pemilihan (selection) yang berfungsi untuk mengendalikan/mengontrol arah dari
sebuah proses. Dengan kata lain, konstruksi dasar pemilihan digunakan untuk memilih langkah
apa yang harus diambil/dilakuka n selanjutnya apabila memenuhi sebuah kondisi pada langkah
sebelumnya. Dengan adanya pemilihan tersebut, maka program seolah-olah dapat mempunyai
pikiran bercabang karena mampu mengambil keputusan selanjutnya berdasarkan kondisi tertentu.
Oleh karena itu, konstruksi dasar pemilihan sering disebut juga dengan percabangan atau
pengambilan keputusan.
Sebuah kondisi pada pemilihan terdiri dari operasi logika yang hanya bernilai true – false dan
dikatakan terpenuhi jika menghasilkan nilai true dari operasi logika tersebut. Pada Modul 2,
sudah disampaikan terkait operator yang dapat digunakan untuk operasi logika seperti
ditunjukkan pada tabel berikut.
Operator Deskripsi Contoh
= = Sama dengan m == n
!= Tidak sama dengan m != n
> Lebih besar m > n
< Lebih kecil m < n
>= Lebih besar atau sama dengan m >= n
<= Lebih kecil atau sama dengan m <= n
&& logic AND (m<100) && (m>80)
|| logic OR (m>100) || m<0)
! logic NOT !(m == n)
Review Operator Logika:
#include <iostream>
using namespace std;
int main()
{
int m, n;
cout << "Masukan nilai m = ";
cin >> m;
cout << "Masukan nilai n = ";
cin >> n;
cout << "m = n --> " << (m==n) << endl;
cout << "m != n --> " << (m!=n) << endl;
~ 33 ~
IF (kondisi) THEN
Proses/instruksi
ENDIF
cout << "m > n --> " << (m>n) << endl;
cout << "m < n --> " << (m<n) << endl;
cout << "m >= n --> " << (m>=n) << endl;
cout << "m <= n --> " << (m<=n) << endl;
return 0;
}
Apakah hasil dari masing- masing operasi logika pada kode program di atas?
Konstruksi dasar pemilihan dapat dibagi menjadi empat jenis, yaitu pemilihan tunggal, pemilihan
ganda, dan pemilihan majemuk (lebih dari dua), dan pemiliha n bersarang.
A. Pemilihan Tunggal
Pemilihan tunggal digunakan untuk menjalankan proses yang ada pada satu kondisi saja.
Jika kondisi terpenuhi (bernilai true) maka proses yang ada di dalam kondisi tersebut akan
dijalankan dan jika kondisi tidak terpenuhi (bernilai false), maka tidak akan ada proses yang
dijalankan (proses tersebut dilewati). Bentuk flowchart untuk pemilihan tunggal adalah sebagai
berikut:
Sedangkan bentuk pseudocode untuk pemilihan tunggal adalah sebagai berikut.
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
if (kondisi)
{
Proses/instruksi;
}
~ 34 ~
Contoh untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int usia;
cout << "Berapa Usia Anda? ";
cin >> usia;
if (usia<17)
{
cout << ”Anda tidak boleh menonton bioskop” << end1;
}
return 0;
}
Identifikasi kode program:
- Apa yang terjadi ketika memasukkan angka 10 dan angka 35?
- Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam
kondisi tersebut?
B. Pemilihan Ganda
Pemilihan ganda digunakan untuk menjalankan proses yang ada pada salah satu kondisi
dari kemungkinan dua kondisi yang ada. Jika kondisi pertama terpenuhi (bernilai true), maka
hanya proses yang ada di kondisi pertama saja yang akan dijalankan, sedangkan proses yang
ada di kondisi kedua akan dilewati. Namun sebaliknya, jika kondisi pertama tidak terpenuhi
(bernilai false), maka proses pada kondisi pertama yang akan dilewati dan proses yang ada pada
kondisi kedua yang akan dijalankan. Bentuk flowchart untuk pemilihan ganda adalah sebagai
berikut:
Sedangkan bentuk pseudocode untuk pemilihan ganda adalah sebagai berikut.
~ 35 ~
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
IF (kondisi)
THEN
Proses/instruksi-1
ELSE
Proses/instruksi-2
ENDIF
if (kondisi)
{
Proses/instruksi-1;
}
else
{
Proses/instruksi-2;
}
~ 36 ~
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa yang terjadi ketika memasukkan angka 100000 dan 5000?
- Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam setiap
kondisi tersebut?
C. Pemilihan Majemuk
Pemilihan majemuk digunakan untuk menjalankan proses yang ada pada salah satu
kondisi dari banyak kondisi yang ada. Jika kondisi pertama terpenuhi (bernila i true), maka
hanya proses yang ada di kondisi pertama saja yang akan dijalanka n, sedangkan proses yang ada
di kondisi yang lain akan dilewati. Namun, jika kondisi pertama tidak terpenuhi (bernilai false),
maka kondisi berikutnya akan diperiksa sampai diperoleh kondisi yang diminta terpenuhi dan
proses yang ada pada kondisi tersebut akan dijalankan, sedangkan proses yang ada di kondisi
yang lain akan dilewati. Bentuk flowchart untuk pemilihan majemuk adalah sebagai berikut:
~ 37 ~
~ 38 ~
if (kondisi-1)
{
Proses/instruksi-1;
}
else if (kondisi-2)
{
Proses/instruksi-2;
}
else if (kondisi-3)
{
Proses/instruksi-3;
}
…………
else if (kondisi-m)
{
Proses/instruksi-m;
}
else
{
Proses/instruksi-n;
}
Sedangkan bentuk pseudocode untuk pemilihan majemuk adalah sebagai berikut.
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
IF (kondisi-1)
THEN
Proses/instruksi-1
ELSE IF (kondisi-2) THEN
Proses/instruksi-2
ELSE IF (kondisi-3) THEN
Proses/instruksi-3
………….
ELSE IF (kondisi-m)
THEN Proses/instruksi-m
ELSE
Proses/instruksi-n
ENDIF
~ 39 ~
Contoh program untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa yang terjadi ketika memasukkan angka 150000, 50000, 30000, dan 10000?
- Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam setiap
kondisi tersebut?
Selain menggunakan struktur IF – ELSE IF – ELSE, pemilihan majemuk juga dapat
dilakukan dengan menggunakan struktur SWITCH – CASE sebagai alternatifnya. Namun,
struktur SWITCH – CASE hanya dapat digunakan untuk kondisi yang membandingkan sama atau
tidak (= =), tidak dapat digunakan untuk kondisi yang membandingkan >, >=, <, atau <=. Selain
itu, struktur SWITCH – CASE hanya tergantung pada satu variabel saja dan kondisi yang
diperiksa harus berupa data integer karakter atau boolean. Oleh karena itu, tidak semua bentuk IF
– ELSE IF – ELSE dapat diubah menjadi SWITCH-CASE, tetapi semua bentuk SWITCH –
CASE dapat diubah menjadi bentuk IF – ELSE IF – ELSE. Bentuk pseudocode untuk pemilihan
majemuk dengan menggunakan struktur SWITCH – CASE adalah sebagai berikut.
~ 40 ~
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
SELECT CASE
(variabel) CASE
Konstanta-1:
Proses/Instruksi-1;
CASE
Konstanta-2:
Proses/Instruksi-
2;
………….
CASE
Konstanta-m:
Proses/Instruksi-m;
CASE ELSE:
Proses/Instruksi-
n END SELECT
switch (variabel)
{
case
konstanta-1:
Proses/Instruksi-
1; break;
case
konstanta-2:
Proses/Instruksi-
2; break;
………………
case
konstanta-m:
Proses/Instruksi-m;
break;
default:
Proses/Instruksi-n;
break;
}
~ 41 ~
Contoh program untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa yang terjadi ketika memasukkan angka 1 dan 10?
- Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam kondisi
tersebut?
~ 42 ~
D. Pemilihan Bersarang
Pemilihan bersarang terjadi ketika struktur pemilihan juga terdapat pada instruksi yang
ada di dalam suatu kondisi pemilihan. Dengan kata lain, terdapat struktur IF di dalam struktur
IF sebelumnya (nested if). Jika kondisi IF sebelumnya (kondisi 1) terpenuhi (bernilai true), maka
struktur IF yang ada di dalamnya (kondisi 2) akan diperiksa dan instruksi di dalam kondisi 2
yang terpenuhi akan dijalankan. Bentuk flowchart untuk pemilihan bersarang adalah sebagai
berikut:
Sedangkan bentuk pseudocode untuk pemilihan majemuk adalah sebagai berikut:
IF (kondisi-1) THEN
IF (kondisi-2)
THEN
Proses/instruksi-11
ELSE
Proses/instruk
si-12 ENDIF
ELSE
Proses/instruksi-2
~ 43 ~
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
Contoh untuk dicoba pada praktikum:
if (kondisi-1)
{
If (kondisi-2)
{
Proses/instruksi-
11;
}
else
{
Proses/instruksi-
12;
}
}
else
{
Proses/instruksi-2;
}
~ 44 ~
Identifikasi kode program:
- Apa yang terjadi jika kedua input diisi dengan Y atau T untuk semua kemungkinan?
- Bandingkan output yang dihasilkan dari kode program di atas dengan kode program berikut:
~ 45 ~
II. LATIHAN
Buatlah kode program untuk menentukan jumlah hari dari suatu bulan berdasarkan
flowchart berikut.
Pertanyaan:
Lakukan analisa step by step per baris berdasarkan inputan yang diberikan sehingga dapat
diperoleh hasil!
Mulai
Nomor Urut
Bulan
Tahun
Bulan =
1,3,5,7,8,10,12
Y
Hari = 31
N
Bulan = 4,6,9,11?
Y
Bulan = 2?
Y
Tahun Kabisat?
Y
N
“Bulan tidak
ada”
N
Hari
Selesai
Hari = 30
Hari = 29
Hari = 28
~ 46 ~
III. TROUBLESHOOTING
Perhatikan kode program berikut.
Pertanyaan:
1. Ketika kode program di atas dijalankan, program tidak dapat mengidentifika s i dengan benar
nilai kecepatan yang diinputkan. Apa yang salah dengan hasil program tersebut? Mengapa
demikian dan bagaimana seharusnya yang benar?
2. Perbaikan dapat dilakukan hanya dengan mengubah urutan yang ada di kode program
tersebut tanpa menambahkan kode apapun. Bagaimana cara memperbaikinya agar program
dapat berjalan dengan benar sesuai dengan yang seharusnya?
3. Tunjukkan kode program yang sudah diperbaiki dan hasil outputnya?
~ 47 ~
MasukanMasukan pemakaianpemakaian
rekeningrekening listriklistrik ::
100100
Masukan pemakaian rekening listrik : 100 Biaya
pemakaian : 100000
IV. TUGAS
1. Rancanglah sebuah program dengan pemilihan ganda, dimana dapat menentukan apakah
sebuah Huruf yang dimasukan user termasuk Huruf Vokal atau Konsonan. Dengan tampilan
output sebagai berikut:
2. Rancanglah sebuah program dengan pemilihan majemuk, untuk menentukan besarnya
rekening listrik yang harus dibayar oleh seorang pelanggan PLN bila besarnya rekening
listrik ditentukan dengan aturan sebagai berikut:
Pemakaian Biaya
Pemakaian <= 100kWh 100000
100 < Pemakaian <= 500
kWh
100000 + 1500 per kWh untuk setiap
kelebihannya
Pemakaian > 500 kWh 700000 + 200 per kWh untuk setiap
kelebihannya
Dengan tampilan output sebagai berikut:
3. Rancanglah sebuah program pemilihan bersarang (nested if) dengan menggunaka n struktur
IF dan struktur SWITCH untuk mengidentifikasi biaya operasi suatu penyakit. Tabel
penyakit dan biayanya tertera dalam table berikut:
Nama Operasi Jenis Penyakit Biaya
(1) Operasi Mata (1) Katarak Rp. 7.500.000
(2) Plus / Minus Rp. 5.000.000
(3) Silinder Rp. 4.000.000
(2) Operasi Jantung (1) Jantung Koroner Rp. 500.000.000
(2) Katup Jantung Rp. 350.000.000
(3) Otot Jantung Rp. 450.000.000
Masukan sebuah Huruf : U
U adalah salah satu huruf vokal
~ 48 ~
<< MENU MENGHITUNG BIAYA OPERASI >>
Hitung Biaya Operasi Mata
Hitung Biaya Operasi Jantung
Masukkan Pilihan Anda : 1
JENIS PENYAKIT MATA
Katarak
Plus/Minus
Silinder
Masukkan jenis penyakit mata : 3
Biaya Operasi Mata Silinder = Rp. 4.000.000
Program dalam bentuk menu pilihan dimana awalnya user memasukkan nomor operasinya lalu
selanjutnya user memasukkan nomor penyakitnya, maka akan keluar jumlah biayanya.
Dengan tampilan output sebagai berikut:
Catatan:
 Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program
+ hasil program
 Variabel yang digunakan setiap praktikan tidak boleh sama
~ 49 ~
BAB 5
Konstruksi Dasar Pengulangan (Repetition)
I. DASAR TEORI
Konstruksi dasar pengulangan (repetition) merupakan konstruksi dasar yang digunakan
dalam suatu algoritma untuk menjalankan satu atau beberapa pernyataan/instruksi yang sama
sebanyak beberapa kali. Secara umum, struktur flowchart dari konstruksi dasar pengulangan
adalah sebagai berikut :
Berdasarkan struktur flowchart tersebut, konstruksi dasar pengulangan terdiri dari tiga bagian,
yaitu:
- Kondisi pengulangan: berisi operasi logika untuk menentukan awal dan akhir dari suatu
pengulangan. Selama kondisi masih terpenuhi (bernilai true), pengulangan dapat terus
dilakukan.
- Badan pengulangan: deretan instruksi yang akan diulang-ulang pelaksanaannya. Instruksi
tersebut dapat berupa konstruksi dasar runtutan, konstruksi dasar pemilihan atau bahkan
konstruksi pengulangan yang lain.
- Pencacah (counter): suatu variabel yang digunakan untuk membatasi jumlah pengulangan
yang dapat dilaksanakan. Nilai variabel perlu diatur bertambah (increament) atau berkurang
(decreament) pada setiap pengulangan dan akan berhenti bertambah/berkurang jika nilainya
sudah melebihi batas nilai akhir yang sudah ditentukan. Namun, pada beberapa kondisi
tertentu, pencacah tidak diperlukan (opsional) karena pembatasan pengulangan tidak
dilakukan oleh pencacah, melainkan oleh variabel dari suatu instruksi.
Cou nter ← awal
TO akh ir
Badanloop
Increament/
Decreament
Proses/instruksi
selanjutnya
~ 50 ~
Konstruksi dasar pengulangan terdiri dari empat struktur, yaitu struktur For –To, struktur While
– Do, struktur Do – While, dan struktur pengulangan bersarang.
A. FOR - TO
Struktur FOR – TO digunakan untuk melakukan pengulangan sejumlah kali yang telah
dispesifikasi nilai awal dan nilai akhir/kondisi stop-nya. Dengan kata lain, jumlah pengulangan
struktur FOR – TO sudah diketahui sebelumnya atau dapat ditentukan sebelum eksekusi
program. Bentuk pseudocode untuk struktur FOR - TO adalah sebagai berikut.
1. Strukur FOR – TO Meningkat
2. Strukur FOR – TO Menurun
Jika ditranslasikan ke struktur Bahasa C++ menjadi sebagai berikut.
Keterangan:
- [Counter] diisi dengan variabel yang berfungsi sebagai pencacah pengulangan
- [Nilai Awal] dan [Nilai Akhir] diisi dengan nilai yang sudah ditentukan dimana
[Nilai Akhir] ≥ [Nilai Awal]
- [Increament/Decreament] diisi dengan operasi aritmatika (+, -, ×, /) untuk membuat nilai
pada variabel [Counter] bertambah/berkurang. Pada pseudocode, [Increament/Decreament]
tidak perlu dituliskan karena nilai pada variabel [Counter] diasumsikan selalu
bertambah/berkurang satu secara otomatis pada setiap pengulangan.
FOR [Counter] [Nilai Awal] TO [Nilai Akhir]
DO
Proses/instruksi {Badan Pengulangan}
ENDFOR
FOR [Counter] [Nilai Akhir] DOWNTO [Nilai Awal]
DO
Proses/instruksi {Badan Pengulangan}
ENDFOR
for ([Counter]=[Nilai Awal]; [Counter]<=[Nilai Akhir];[Increament/Decreament])
{
Proses/instruksi; //Badan Pengulangan
}
~ 51 ~
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int counter;
for (counter=0; counter<10; counter=counter+1)
{
cout << counter << " " << counter*counter << endl;
}
return 0;
}
Identifikasi kode program:
- Apa nama variabel yang berfungsi sebagai [Counter]?
- Berapa [Nilai Awal] dan [Nilai Akhir] pada pengulangan tersebut?
- Operasi aritmatika apa yang digunakan pada [Increament/Decreament] dan berapa
kenaikannya untuk setiap pengulangan?
- Variasikan variabel [Counter], [Nilai Awal], [Nilai Akhir], dan [Increament/Decreament]
kemudian amati apa yang terjadi pada hasilnya?
- Ubah struktur FOR – TO meningkat di atas menjadi FOR – TO menurun dan amati
perbedaannya!
B. WHILE - DO
Bentuk pseudocode untuk struktur WHILE – DO adalah sebagai berikut.
[Counter] [Nilai awal]
{Opsional} WHILE ([kondisi stop =
TRUE]) DO
Proses/instruksi {Badan
Pengulangan} [Increament/Decreament]
{Opsional}
END WHILE
~ 52 ~
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
Berbeda dengan struktur FOR – TO yang mempunyai nilai awal dan nilai akhir/kondisi stop,
struktur WHILE – DO hanya mempunyai nilai akhir/kondisi stop saja. Namun, struktur
WHILE – DO juga dapat ditambahkan dengan nilai awal sebagai inisialisasi, yaitu pada bagian
sebelum masuk pada struktur WHILE – DO.
Sebelum melakukan pengulangan, kondisi stop akan diperiksa terlebih dahulu apakah terpenuhi
(bernilai true) atau tidak (bernilai false). Ketika kondisi tersebut masih terpenuhi,
instruksi/proses yang ada di dalam badan pengulangan akan dikerjakan berulang kali sampai
kondisi stopnya sudah tidak terpenuhi lagi.
Jika dibandingkan dengan struktur FOR – TO, struktur WHILE – DO dapat digunakan sebaik
penggunaan FOR – TO pada kasus-kasus dimana jumlah pengulangan sudah diketahui di awal
program. Namun, struktur WHILE – DO memiliki keunggulan yang tidak dimiliki oleh FOR –
TO, yaitu untuk kasus dimana jumla h pengulangannya tidak dapat ditentukan di awal sehingga
Kondisi Stop tidak bergantung dari proses increament/decreament lagi. Pada kasus tersebut,
struktur WHILE – DO dapat mengatasi Kondisi Stop tersebut melalui suatu proses/instruksi
yang ada pada badan pengulangan.
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int data;
data = 0;
while (data < 10)
{
cout << "Masukan nilai data:";
cin >> data;
}
data = 0;
while (data < 10)
{
cout << data << endl;
data++;
}
return 0;
}
[Counter] = [Nilai Awal] //Opsinal
while ([kondisi stop = TRUE])
{
Proses/instruksi; //Badan
Pengulangan
[Increament/Decreament]; //Opsional
}
~ 53 ~
Identifikasi kode program:
- Dari dua pengulangan menggunakan struktur WHILE – DO tersebut, kapan pengulangan
pertama akan berhenti dan kapan pengulangan kedua akan berhenti?
- Manakah struktur WHILE – DO yang penggunaannya sebaik atau dapat digantikan dengan
penggunaan FOR – TO?
C. REPEAT - UNTIL
Bentuk pseudocode untuk struktur REPEAT – UNTIL adalah sebagai berikut.
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
Struktur REPEAT – UNTIL dapat dikatakan sebagai kebalikan dari kondisi WHILE –
DO. Jika pada struktur WHILE – DO, Kondisi Stop dicek di awal pengulangan (sebelum Badan
Pengulangan dijalankan), maka pada struktur REPEAT - UNTIL, Kondisi Stop akan dicek di
akhir pengulangan (setelah Badan Pengulangan dijalankan sekali). Badan Pengulangan kembali
dijalankan sampai Kondisi Stop tidak terpenuhi (Bernilai false). Dengan kata lain, perbedaan
antara struktur REPEAT – UNTIL dan struktur WHILE – DO adalah Badan Pengulangan pada
struktur REPEAT - UNTIL akan dijalankan minimal satu kali, sedangkan pada struktur WHILE
– DO tidak akan pernah dilaksanakan bila kondisi stop pertama kali tidak terpenuhi (bernila i
false).
[Counter] [Nilai Awal] {Opsional}
REPEAT
Proses/instruksi {Badan
Pengulangan} [Increament/Decreament]
{Opsional}
UNTIL ([Kondisi Stop = TRUE])
[Counter] = [Nilai Awal] //Opsional
do
{
Proses/instruksi; //Badan
Pengulangan
[Increament/Decreament]; //Opsional
}
while ([Kondisi Stop = TRUE]);
~ 54 ~
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int x, S;
S = 0;
x = -1;
do
{
S = (S+1)/x;
cout << "S = " << S << endl;
cout << "x = " << x << endl;
}
while (x != -1);
return 0;
}
Identifikasi kode program:
- Variabel apa yang menentukan kondisi Stop pada kode program tersebut?
- Berapa nilai awal dari Variabel tersebut dan kapan Pengulangan tersebut berhenti?
- Jika nilai awal variabel sudah tidak memenuhi Kondisi Stop (bernilai false), mengapa tetap
ada output dari pengulangan tersebut?
Pengulangan Bersarang
Pengulangan bersarang terjadi ketika terdapat struktur pengulangan di dalam struktur
pengulangan sebelumnya (nested loop). Jika kondisi stop pada pengulangan sebelumnya (kondisi-
1) terpenuhi (bernilai true), maka Kondisi Stop pada pengulanga n di dalamnya (kondisi-2) akan
diperiksa dan jika terpenuhi (bernilai true) maka instruksi/proses yang ada di dalamnya akan
diulang sampai kondisi-2 tidak terpenuhi (bernilai false). Pengulangan Bersarang biasanya
digunakan untuk data yang melibatkan koordinat baris dan kolom (dua dimensi) seperti matriks
berikut:
[ ]
Terdapat kombinasi struktur pengulangan yang dapat digunakan, seperti kombinasi struktur yang
sama (FOR – TO dengan FOR – TO, WHILE – DO dengan WHILE – DO, dan REPAT – UNTIL
dengan REPEAT – UNTIL) dan kombinas i struktur yang berbeda (FOR – TO dengan WHILE –
DO, FOR – TO dengan REPEAT - UNTIL, dan WHILE – DO dengan REPEAT – UNTIL).
Bentuk pseudocode untuk Pengulangan Bersarang dengan kombinasi FOR – TO dengan FOR –
~ 55 ~
for ([Counter1]=[Nilai Awal]; [Counter1]<=[Nilai Akhir];[Increament/Decreament])
{
for ([Counter2]=[Nilai Awal]; [Counter2]<=[Nilai Akhir];[Increament/Decreament])
{
Proses/instruksi; //Badan Pengulangan
}
}
TO adalah sebagai berikut.
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int main()
{
int i, j;
for (i=1; i<=5; i++)
{
for (j=0; j<=5; j++)
{
cout << "(" << i << "," << j << ") ";
}
}
cout << endl;
return 0;
}
Identifikasi kode program:
- Hapus fungsi cout << endl yang terdapat pada baris ke-14 dan amati apa yang terjadi. Apa
fungsi dari cout << endl tersebut?
- Pada kombinasi dua FOR – TO di atas, struktur FOR – TO yang manakah yang menentukan
baris dan yang manakah yang menentukan kolom?
FOR [Counter1] [Nilai Awal] TO [Nilai Akhir]
DO
FOR [Counter2] [Nilai Awal] TO [Nilai Akhir]
DO
Proses/instruksi {Badan Pengulangan}
ENDFOR
ENDFOR
~ 56 ~
II. LATIHAN
Buatlah kode program untuk menentukan bilangan yang diinputkan adalah bilangan prima atau
bukan berdasarkan flowchart berikut.
selesai
Prima
Counter = Counter + 1
Prima = 0
N
Bilangan%Counter = 0?
Counter <- 2 TO Bilangan
Prima = 1
Bilangan
mulai
~ 57 ~
Pertanyaan :
Lakukan analisa algoritma untuk step by step per baris dan simpulkan bagaimana prinsip kerja
dari menentukan suatu bilangan yang diinputkan apakah prima atau bukan berdasarkan flowchart
dan kode program tersebut!
III. TROUBLESHOOTING
Kode Program berikut adalah kode program untuk mencari hasil pembagian dan sisa pembagian
dengan cara melakukan pengurangan berturut-turut sampai sisa bagi kurang dari pembaginya.
#include <iostream>
using namespace std;
int main()
{
int Bilangan, Pembagi, SisaBagi, HasilBagi;
cout << "Masukan Bilangan : ";
cin >> Bilangan;
cout << "Masukan Pembagi : ";
cin >> Pembagi;
SisaBagi = Bilangan;
HasilBagi = 0;
while (SisaBagi >= Pembagi)
{
SisaBagi = SisaBagi - Pembagi;
HasilBagi ++;
}
cout << "Hasil Bagi : " << HasilBagi << endl;
cout << "Sisa Bagi : " << SisaBagi << endl;
return 0;
}
Pertanyaan:
• Kode program tersebut dapat dijalankan dengan baik menggunakan struktur WHILE – DO.
Dengan mengidentifikasi [Counter], [Nilai Awal], [Nilai Akhir], [Increament/Decreament]
pada program di atas, apakah pengulangan dengan struktur WHILE – DO di atas dapat
digantikan dengan struktur pengulangan yang lain?
• Jika bisa, struktur pengulangan apa yang dapat menggantikan struktur WHILE – DO tersebut
dan tunjukkan bagaimana kode programnya! Jika tidak bisa, jelaskan alasannya mengapa!
~ 58 ~
Masukkan nilai N = 6
Output:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
IV. TUGAS
1. Rancanglah sebuah program pengulangan dengan mengunakan struktur WHILE - DO untuk
menghitung hasil pangkat suatu bilangan dengan cara melakuka n penjumlahan berturut-turut
seperti contoh berikut.
2. Rancanglah sebuah program pengulangan dengan menggunakan struktur DO - WHILE
membuat menu dapat dijalankan berulang-ulang dengan contoh output seperti berikut.
3. Rancanglah sebuah program pengulangan bersarang dengan menggunakan kombinasi dua
struktur FOR – TO untuk menampilkan output sebagai berikut.
Input Bilangan: 4
Input Pencacah: 3
Hasil Pangkat: 64
MENU
Ulang
Keluar
Pilihan :
1
MENU
Ulang
Keluar
Pilihan :
1
MENU
Ulang
Keluar
Pilihan :
2
~ 59 ~
Catatan:
- Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode
program+hasil program
- Variabel yang digunakan setiap praktikan tidak boleh sama
~ 60 ~
BAB 6
Larik (Array)
I. DASAR TEORI
Larik adalah struktur data di memori yang terdiri dari sekumpulan elemen bertipe sama.
Karena seluruh elemen larik bertipe sama, maka nilai yang disimpan oleh setiap elemen juga
harus bertipe sama. Larik umumnya digunakan ketika terdapat sejumlah data yang perlu
disimpan sementara untuk diproses selanjutnya. Keuntunga n menggunakan larik adalah dapat
menghindari penggunaan nama-nama peubah yang banyak hanya untuk data dengan tipe yang
sama dan proses yang sama. Contohnya adalah ketika terdapat lima buah data yang akan
diproses. Jika tidak menggunak an larik, maka akan dibutuhkan lima buah variabel untuk
menampung masing- mas ing nilai data tersebut seperti data1, data2, data3, data4, dan data5.
Namun, jika menggunakan larik, maka variabel yang dibutuhkan hanya satu, yaitu data.
Hal yang perlu diperhatikan dalam menggunakan/mendeklarasikan larik pada suatu
program adalah jumlah elemennya karena jumlah elemen larik harus sudah terdefinisi dari awal
dan jumlahnya tidak dapat diubah, ditambah atau dikurangi selama pelaksanaan program. Namun,
walaupun jumlah elemen larik sudah ditentukan dari awal, ada kemungkinan tidak semua
elemen digunakan. Banyaknya elemen larik yang digunakan disebut dengan ukuran efektif larik,
sedangkan jumlah elemen larik yang sudah ditentukan disebut dengan ukuran maksimal larik.
Contohnya adalah ketika larik A sudah ditentukan sebanyak 100 elemen, tetapi ketika program
dijalankan, hanya 70 elemen, makan 70 elemen tersebut disebut ukuran efektif larik dan 100
elemen disebut dengan ukuran maksimal larik.
Suatu larik dapat dideklarasikan ke dalam larik satu dimensi atau larik multidimensi (dua
dimensi, tiga dimensi sampai n-dimensi).
A. LARIK SATU DIMENSI
Sebuah larik satu dimensi dapat dibayangkan sebagai sekumpulan kotak yang terurut
seperti pada gambar berikut.
A
1 2 3 4 5 6
158 157 162 169 170 170
Gambar di atas menunjukkan sebuah larik satu dimensi yang bernama A yang mempunyai enam
buah elemen dengan tipe integer. Bentuk pseudocode untuk pendeklarasian larik satu dimensi
adalah sebagai berikut.
<NamaLarik> : array [<idx_awal>…<idx_akhir>] of <tipe_data>
~ 61 ~
A : array [1..6] of integer Int A [6] ;
Jika ditranslasikan ke dalam struktur Bahasa C++, nilai dari <idx_awal> dan <idx_akhir>
didefinisikan dengan <ukuran maksimal> yang diperoleh dari nilai (<idx_akhir> - <idx_awal> +
1) sehingga menjadi sebagai berikut.
Contoh berdasarkan gambar di atas:
Setiap elemen di dalam larik yang ada di antara <idx_awal> sampai <idx_akhir> dapat
dimanipulasi secara langsung dengan mengakses indeksnya. Pada pseudocode, indeks elemen
larik satu dimensi dituliskan dengan satu subscript seperti berikut.
Contoh:
Pada struktur Bahasa C++, nilai <idx_awal> selalu bernilai 0 sehingga ketika pseudocode
tersebut ditranslasikan ke Bahasa C++, maka indeks elemen lariknya harus dikurangi dengan nilai
awal. Aturan penulisannya adalah sebagai berikut:
Berdasarkan contoh pseducocode di atas, indeks elemen yang diakses adalah 4 dengan nilai
<idx_awal> adalah 1 maka indeks elemen larik pada Bahasa C++ menjadi 4-1 = 3 sehingga
penulisannya menjadi sebagai berikut:
Contoh untuk dicoba pada praktikum:
<tipe_data> <NamaLarik> [<ukuran_maksimal>]
Ai{Mengakses elemen ke-i dari larik bernama A}
A4 {Mengakses elemen ke-4 dari larik bernama A}
A [i - <idx_awal>]
A [3]
~ 62 ~
FOR (i 1 TO 6) DO Proses
manipulasi Ai
ENDFOR
for (i = 0;i <= 5;i++)
{
Proses manipulasi A[i];
}
Identifikasi kode program:
- Apa <NamaLarik> pada kode program di atas? Apa <Tipe_Data>-nya?
- Berapa ukuran efektif dan ukuran maksimum lariknya?
- Berapa nilai <idx_awal> dan <idx_akhir>-nya?
- Pada kode program tersebut, indeks larik ke-berapa yang nilainya ditampilkan pada output
program?
- Variasikan indeks larik tersebut kemudian tentukan nilai untuk masing-masing
- elemen larik tersebut!
- Dari mana masing- masing elemen larik tersebut mempunyai nilai?
Selain dapat dimanipulasi secara terpisah dengan mengakses masing-mas in g indeksnya,
elemen larik juga dapat dimanipulasi secara beruntun dengan menggunak an struktur pengulangan
karena elemen larik selalu tersusun secara beruntunan. Pengaksesan indeks dilakukan dengan
menempatkan variabel <counter> pada struktur pengulangan sebagai indeks larik. Bentuk
pseudocode untuk memanipulasi elemen larik dengan menggunakan struktur pengulangan FOR
– TO adalah sebagai berikut:
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut:
Contoh:
FOR (<counter> <idx_awal> TO <idx_akhir>)
DO Proses manipulasi <NamaLarik><counter>
ENDFOR
for (<counter> = <idx_awal>;<counter> <= <idx_akhir>;<counter>++)
{
Proses manipulasi <NamaLarik>[<counter>];
}
~ 63 ~
Identifikasi kode program:
- Modifikasi kode program pertama dengan menggunakan struktur FOR - TO sehingga semua
nilai dapat ditampilkan pada output program!
- Selanjutnya, modifikasi kembali kode program tersebut dengan menggunaka n struktur FOR
– TO sehingga nilai dari setiap elemen larik dapat ditentukan dari user!
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
Bagaimana proses yang terjadi sehingga diperoleh hasil seperti pada output program?
~ 64 ~
A : array [1..4][1..7] of integer Int A [4][7];
B. LARIK MULTIDIMENSI
Salah satu contoh larik multidimensi yang banyak digunakan adalah larik dua dimensi.
Sebuah larik dua dimensi dapat dibayangkan dengan sebuah tabel seperti pada gambar berikut.
A
1 2 3 4 5 6 7
1
2
3
4
Untuk dapat mendeklarasikan dan memanipulasi larik dua dimensi, dibutuhkan dua
buah indeks/subscript. Indeks yang pertama digunakan untuk menunjukkan baris dan indeks
yang kedua digunakan untuk menunjukkan kolom. Bentuk pseudocode untuk pendeklarasian
larik dua dimensi adalah sebagai berikut:
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut:
Contoh:
Bentuk pseudocode untuk memanipulasi elemen larik dua dimensi dengan indeks pada
baris ke-i dan kolom ke-j adalah sebagai berikut:
Dengan konsep yang sama seperti larik satu dimensi, hasil translasi ke struktur Bahasa C++
adalah sebagai berikut.
10 20 30 40 50 60 70
80 90 100 110 120 130 140
150 160 170 180 190 200 210
220 230 240 250 260 270 280
<NamaLarik> : array [<baris_awal>…<baris_akhir>] [<kolom_awal>…<kolom_akhir>] of <tipe_data>
<tipe_data> <NamaLarik> [Ukuran_Baris][Ukuran_Kolom] ;
Ai ,j {Mengakses elemen pada baris ke-i dan kolom ke-j dari larik bernama A}
~ 65 ~
A2,5 A [1] [4]
for (<counter_baris> = <baris_awal>;<counter_baris><= <baris_akhir>;<counter_baris>++)
{
for (<counter_kolom> = <kolom_awal>;<counter_kolom> <=
<kolom_akhir>;counter_kolom>++)
{
Proses manipulasi<NamaLarik>[counter_baris][]counter_kolom];
}
}
Contoh:
Elemen larik dua dimensi dapat dimanipulasi secara beruntun dengan menggunakan struktur
pengulangan bersarang dimana struktur pengulangan luar digunakan sebagai indeks baris dan
struktur pengulangan dalam digunakan sebagai indeks kolom. Bentuk pseudocode untuk
menggunakan struktur pengulangan bersarang dengan kombinasi dua FOR – TO adalah sebagai
berikut.
Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut.
FOR (<counter_baris> <baris_awal> TO <baris_akhir>) DO
FOR (<counter_kolom> <kolom_awal> TO <kolom_akhir>) DO Proses
manipulasi <NamaLarik><counter_baris>,<counter_kolom>
ENDFOR ENDFOR
A [i – baris_awal] [j – kolom_awal];
~ 66 ~
Contoh program untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa <NamaLarik> pada kode program di atas?
- Berapa ukuran maksimal dan ukuran efektif pada larik tersebut?
- Pada kode program tersebut, indeks larik ke-berapa yang nilainya ditampilka n pada output
program?
- Ubah ukurannya menjadi matriks 6 x 2 dan modifikasi kode program tersebut dengan
menggunakan struktur FOR - TO sehingga semua nilai dapat ditampilkan pada output
program dengan ukuran matriks 6 x 2!
- Selanjutnya, modifikasi kembali kode program tersebut dengan menggunaka n struktur FOR –
TO sehingga nilai dari setiap elemen larik dapat ditentukan dari user!
FOR (i 1 TO 6) DO
FOR (j 1 TO 6) DO
Proses
manipulasi Ai ENDFOR
ENDFOR
~ 67 ~
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
- Operasi matriks apa yang dihasilkan dari kode program tersebut?
- Bagaimana proses yang terjadi sehingga diperoleh hasil seperti pada output program?
Pada dasarnya, untuk mendeklarasikan dan memanipulasi sebuah larik n-dimensi, dibutuhkan
n buah indeks dan n struktur pengulangan.
~ 68 ~
Contoh program untuk dicoba pada praktikum:
Identifikasi kode program:
• Berapa dimensi dari larik yang dideklarasikan pada kode program tersebut?
• Berapa ukuran dari larik tersebut?
• Variabel apa saja yang digunakan sebagai indeks dari larik tersebut pada struktur
pengulangan?
• Gantilah datanya untuk membentuk inisial masing- masing!
~ 69 ~
JUDUL:
PROGRAM Mengurutkan_Bilangan
{
Program untuk mengurutkan 5 bilangan yang diinputkan user secara menaik ( ascending) dengan
ketentuan:
Input : 5 buah bilangan bulat yang diinputkan user secara acak Output : 5 buah bilangan bulat yang
sudah urut menaik (ascending)
}
KAMUS :
i : integer
j: integer
Temp: integer
X : array [1..5] of integer
ALGORITMA :
FOR (i 1 TO 5) DO
input (Xi)
ENDFOR
I 0
FOR (i 1 TO 5) DO
FOR (j i+1 TO 5) DO IF (Xi > Xj) THEN
Temp = Xi Xi = Xj
Xj = Xi
ENDIF
ENDFOR
ENDFOR
FOR (i 1 TO 5) DO
output (Xi)
ENDFOR
II. LATIHAN
Buatlah kode program untuk mengurutkan lima buah bilangan dengan pseudocode berikut.
Pertanyaan:
• Lakukan analisa step by step per baris dari kode program yang dibuat!
• Simpulkan bagaimana prinsip kerja dari algoritma untuk mengurutkan bilangan tersebut
berdasarkan pseudocode dan kode programnya!
~ 70 ~
III. TROUBLESHOOTING
Perhatikan kode program untuk menampilkan Inisial pada contoh kode program yang terakhir.
Dengan mengganti cout << endl pada baris 25 dengan cout << “ “ serta memodifikasi urutan
struktur perulangan dan urutan variabel yang digunakan sebagai indeks larik, dapat diperoleh
hasil output sebagai berikut.
Pertanyaan:
• Tunjukkan kode program sesudah dimodifikasi dan output programnya (gunakan inisial
masing- masing)!
• Sebutkan pada bagian/baris mana saja yang perlu diubah (selain baris 25) dan jelaskan
mengapa bagian/baris tersebut yang diubah?
• Simpulkan bagaimana prinsip kerjanya sehingga dapat menghasilkan output seperti itu!
~ 71 ~
IV. TUGAS
1. Rancanglah sebuah program untuk membaca sebuah larik satu dimensi berukuran 20
elemen dengan tipe karakter „a‟ – „z‟, kemudian menghitung frekuensi kemunculan tiap
karakter tersebut. Contoh output adalah sebagai berikut:
Masukkan karakter ke-1 : a
Masukkan karakter ke-2 : l
Masukkan karakter ke-3 : g
Masukkan karakter ke-4 : o
Masukkan karakter ke-5 : r
Masukkan karakter ke-6 : i
Masukkan karakter ke-7 : t
Masukkan karakter ke-8 : m
Masukkan karakter ke-9 : a
Masukkan karakter ke-10 : p
Masukkan karakter ke-11 : e
Masukkan karakter ke-12 : m
Masukkan karakter ke-13 : r
Masukkan karakter ke-14 : o
Masukkan karakter ke-15 : g
Masukkan karakter ke-16 : r
Masukkan karakter ke-17 : a
Masukkan karakter ke-18 : m
Masukkan karakter ke-19 : a
Masukkan karakter ke-20 : n
Output:
a = 4
e = 1
g = 2
i = 1
l = 1
m = 3
n = 1
o = 2
p = 1
r = 3
t = 1
~ 72 ~
Masukkan nilai untuk matriks 3 x 1:
12
20
7
Masukkan nilai untruk matriks 1 x 3:
4
10
3
Hasil perkalian matriks:
48 12036
80 20060
28 7021
2. Rancanglah sebuah program perkalian silang (cross product) antara matriks 3 x 1 dengan matriks
1 x 3 sehingga diperoleh matriks 3x3.
Catatan:
 Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program + hasil
program
 Variabel yang digunakan setiap praktikan tidak boleh sama
~ 73 ~
BAB 7
Fungsi dan Prosedur
I. DASAR TEORI
Fungsi dan prosedur adalah suatu bagian dari program (subprogram) yang digunakan
untuk menjalankan suatu tugas tertentu dan letaknya terpisah dari program yang
menggunakannya. Suatu fungsi atau prosedur dipanggil/digunakan dengan tujuan khusus, yaitu
untuk mengerjakan suatu tugas tertentu dimana tugas tersebut dapat berupa tugas input
(menyimpan hasil ke dalam suatu larik atau file) dan/atau output (menampilkan hasil di layar
monitor) ataupun melakukan penyeleksian dan perhitungan. Fungsi dan prosedur banyak
digunakan pada pemrograman dengan tujuan:
a. Program menjadi terstruktur sehingga mudah dipahami dan mudah dikembangkan. Dengan
memisahkan langkah-langkah detail ke satu atau lebih fungsi- fungsi (modularisasi), maka
fungsi utama (main()) menjadi lebih pendek, jelas, dan mudah dimengerti.
b. Dapat mengurangi pengulangan (duplikasi) kode. Langkah-langkah program yang sama dan
dipakai berulang-ulang di program dapat dituliskan sekali saja secara terpisah dalam bentuk
fungsi- fungsi. Selanjutnya, bagian program yang membutuhkan langkah-langkah ini tidak
perlu selalu menuliskannya, tetapi cukup memanggil fungsi- fungsi tersebut.
c. Mempermudah dalam menemukan kesalahan (debug) program dan menghemat ukuran
program.
Pada flowchart, keduanya memiliki bentuk yang sama, yaitu:
Walaupun keduanya sering dianggap sama, prosedur dan fungsi mempunyai struktur yang
sedikit berbeda dalam penggunaannya.
A. FUNGSI
Di dalam matematika, fungsi biasanya dituliskan seperti pada contoh berikut.
( )
( )
<Nama
Fungsi/
Prosedur>
~ 74 ~
<Tipe_Data> <Nama_Fungsi> (<Tipe_Data> <Parameter_Input>)
{
//DEKLARASI (JIKA ADA)
<Tipe_Data> <Variabel_Lokal>;
//ALGORITMA, berisi Badan Fungsi
return <Return_value>;
}
Pada kedua contoh di atas, f dan H adalah nama fungsi, sedangkan x dan y adalah parameter
fungsi yang bersangkutan. Nilai yang dihasilkan oleh suatu fungsi bergantung pada masukan
parameter. Misalkan:
( )
( )
Di dalam pemrograman, fungsi tersebut dapat dideklarasikan menjadi subprogram tersendiri
dengan struktur dalam bentuk pseudocode sebagai berikut.
FUNCTION <Nama_Fungsi> (INPUT <Parameter_Input>:<Tipe_Data>) <Tipe_Data>
{spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang dikembalikan fungsi}
DEKLARASI
{semua variabel yang hanya digunakan di dalam fungsi (variabel lokal)}
ALGORITMA
{badan fungsi}
➔ Return value
ENDFUNCTION
Berdasarkan struktur tersebut, sebuah fungsi mempunyai struktur yang terdiri dari:
1) Bagian header, berisi nama fungsi, argumen (parameter input-nya beserta tipe data setiap
parameter tersebut), tipe data dari nilai yang akan dihasilkan/ dikembalikan oleh fungsi dan
spesifikasi tentang fungsi tersebut
2) Bagian deklarasi/ kamus, berisi pendeklarasian variabel yang hanya dapat digunakan pada
fungsi tersebut (variabel lokal)
3) Badan fungsi, berisi instruksi-instruksi untuk menghasilkan return value (nilai yang akan
di-output-kan/ dikembalikan oleh fungsi) dan tanda return () yang menunjuk pada nilai yang
akan di-output-kan/ dikembalikan oleh fungsi.
Jika ditranslasikan ke dalam struktur Bahasa C++, struktur fungsi menjadi sebagai berikut.
~ 75 ~
Contoh deklarasi fungsi pada pseudocode dan hasil translasi ke struktur Bahasa C++:
Pendeklarasian fungsi tersebut dilakukan di bagian KAMUS/DEKLARASI UTAMA agar
fungsi tersebut dapat diakses oleh subprogram yang lain ataupun oleh bagian ALGORITMA
UTAMA. Fungsi diakses dengan cara memanggil namanya diikuti dengan urutan parameter
aktualnya. Karena fungsi menghasilkan sebuah nila i, maka diperlukan sebuah peubah/variabel
yang memiliki tipe data sama dengan tipe data fungsi untuk menampung nilai dari fungsi
dipanggil tersebut. Cara pemanggila n fungsi dalam bentuk pseudocode adalah sebagai berikut.
Hasil translasi ke dalam struktur Bahasa C++ adalah sebagai berikut.
FUNCTION Persamaan_Kuadrat (input x: real) → real
{Mengembalikan nilai f(x) = 2x
2
+ 5x
+ 8} DEKLARASI
{tida
k ada}
ALGORITMA
→ (2*x*x) + (5*x) + 8
ENDFUNCTION
float Persamaan_Kuadrat (float x)
{
//DEKLARASI
//tidak ada
//ALGORITMA
return (2*x*x) +
(5*x) + 8;
<Variabel> ← <Nama_Fungsi> (<Parameter>)
<Variabel> = <Nama_Fungsi> (<Parameter>);
~ 76 ~
Contoh pemanggilan fungsi dalam pseudocode dan hasil translasi dalam Bahasa C++:
Selain itu, fungsi juga dapat langsung dimanipulasi oleh suatu instruksi seperti contoh berikut.
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int fungsi_kuadrat (int x , int y)
{
return (x*x)+(y*y);
}
int main()
{
int x1, x2;
cout << "Masukan nilai x1 : ";
cin >> x1;
cout << "Masukan nilai x2 : ";
cin >> x2;
cout << "Hasil : " << fungsi_kuadrat(x1,x2) << endl;
return 0;
}
Identifikasi kode program:
- Apa <Nama_Fungsi> yang dideklarasikan pada kode program tersebut? Apa
- <Tipe_Data> untuk nilai dikembalikan oleh fungsi tersebut?
- Apa saja <Parameter_Input> yang ada dalam fungsi tersebut dan apa tipe datanya?
- Adakah variabel lokal pada fungsi tersebut? Jika ada, sebutkan apa saja dan apa tipe
datanya?
- Pada baris ke-berapa fungsi tersebut dipanggil? Apakah fungsi dipanggil dengan cara
menggunakan variabel atau langsung dimanipulasi? Modifikasi kode program tersebut
Hasil Persamaan_Kuadrat (data)
Hasil = Persamaan_Kuadrat (data)
output (Persamaan_Kuadrat(data))
cout << Persamaan_Kuadrat(data);
~ 77 ~
agar fungsi dipanggil dengan cara yang satunya lagi!
- Agar nilai yang dikembalikan oleh fungsi ketika dipanggil menjadi pecahan (real),
bagian mana saja yang perlu diubah pada kode program tersebut!
A. PROSEDUR
Satu keterbatasan dari subprogram yang menggunakan struktur fungsi adalah hanya mampu
menghasilkan satu buah nilai yang berarti fungsi hanya mengerjakan satu tugas saja. Jika
terdapat lebih dari satu nilai yang harus dihasilkan/ dikembalikan, subprogram tersebut tidak
elegan dituliskan dengan struktur fungsi. Untuk mengatasi permasalahan tersebut, subprogram
dapat dideklarasikan dengan menggunakan struktur prosedur yang memiliki bentuk pseudocode
seperti berikut.
Berdasarkan struktur tersebut, prosedur memiliki struktur yang hampir sama dengan
struktur fungsi, yaitu terdiri dari bagian header, bagian deklarasi/kamus, dan badan prosedur.
Perbedaannya terletak pada bagian argumen yang ada di bagian header. Argumen pada struktur
fungsi hanya terdiri dari parameter input saja, sedangkan argumen pada struktur prosedur
dapat terdiri dari parameter input, parameter output, dan/atau parameter input/output. Hal tersebut
membuat jumlah nilai yang dioutputkan dari struktur prosedur dapat lebih dari satu selama nilai
tersebut dideklarasikan sebagai parameter output atau parameter input/output.
Dalam Bahasa C++, istilah prosedur tidak dikenal, yang dikenal hanya fungs i saja.
Namun, istilah prosedur dalam Bahasa C++ dapat dibentuk dari fungsi tanpa return value
(void). Jika bentuk pseudocode dari struktur prosedur di atas ditranslasika n ke dalam struktur
Bahasa C++, hasilnya sebagai berikut.
PROCEDURE <Nama_Prosedur> (input <Parameter_Input>:<Tipe_Data >, output
<Parameter_output>:<Tipe_Data >)
{ spesifikasi prosedur, menjelaskan keadaan awal dan keadaan akhir
prosedur (efek netto)} DEKLARASI
{semua variabel yang hanya digunakan di dalam prosedure
(variabel lokal)} ALGORITMA
{badan prosedur}
ENDPROCEDURE
void <Nama_Prosedur> (<Tipe_Data> <Parameter_Input>, <Tipe_Data>
*<Parameter_Output>)
{
//DEKLARASI (JIKA ADA)
<Tipe_Data> <Variabel_Lokal>;
//ALGORITMA, berisi Badan Prosedur
}
~ 78 ~
Contoh deklarasi prosedur pada pseudocode dan hasil translasi ke struktur Bahasa C++:
Tanda pointer (*) pada parameter y menunjukkan bahwa parameter tersebut adalah
parameter output atau parameter input/output. Tanda pointer tersebut harus selalu mengikuti
parameter ketika diproses pada badan prosedur agar nilainya dapat dioutputkan.
Sama seperti fungsi, prosedur juga dapat diakses dengan cara memanggi l namanya
diikuti dengan urutan parameter aktualnya (jika ada) setelah prosedur tersebut dideklarasikan
pada bagian DEKLARASI/KAMUS. Namun perbedaannya, pemanggilan prosedur tidak dapat
langsung dimanipulasi. Selain itu, pemanggila n prosedur juga tidak memerlukan variabel karena
prosedur tidak memiliki return value seperti struktur fungsi. Adapun cara pemanggilan prosedur
dalam bentuk pseudocode adalah sebagai berikut.
Jika ditranslasikan ke dalam struktur Bahasa C++, pemanggilan prosedur dapat dilakukan
dengan cara sebagai berikut.
Contoh pemanggilan prosedur dalam pseudocode dan Bahasa C++:
PROCEDURE Persamaan_Kuadrat (input x: real, output y: real)
{I.S. : Nilai x digunakan untuk menghitung nilai y
F.S. : Nilai y diperoleh dari persamaan 2*x*x +
5*x + 8} DEKLARASI
{tidak ada}
ALGORITMA
y (2*x*x) + (5*x) + 8
ENDPROCEDURE
void Persamaan_Kuadrat (float x, float *y)
{
//DEKLARASI
//tidak ada
//ALGORITMA
(*y) = (2*x*x) + (5*x) + 8;
}
<Nama_Prosedur> (<Parameter_Input>, <Parameter_Output>)
Persamaan_Kuadrat (data, hasil)
Persamaan_Kuadrat (data, &hasil);
<Nama_Fungsi> (<Parameter_Input>, &<Parameter_Output>);
~ 79 ~
Tanda “&” digunakan untuk memanggil parameter yang memiliki tanda pointer (*) pada
pendeklarasian, dalam hal ini adalah parameter output atau parameter input/output.
Contoh untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
void Biaya_SPP (int Angkatan, int Jml_SKS, int *Total_Biaya)
{
int Biaya_1SKS;
if (Angaktan >= 2016)
{
Biaya_1SKS = 100000;
}
else if (Angkatan >=2013 && Angkatan <= 2015)
{
Biaya_1SKS = 75000;
}
else
{
Biaya_1SKS = 50000;
}
(*Total_Biaya) = Biaya_1SKS * Jml_SKS;
}
int main()
{
int SPP;
Biaya_SPP (2017,24,&SPP);
cout << "Total Biaya SPP : " << SPP << endl;
return 0;
}
Identifikasi kode program:
- Apa <Nama_Prosedur> yang dideklarasikan pada kode program tersebut?
- Apa saja <Parameter_Input> dan <Parameter_Output> yang ada dalam fungsi tersebut
dan apa tipe datanya?
- Adakah variabel lokal pada prosedur tersebut! Jika ada, sebutkan apa saja dan apa tipe
datanya?
- Pada baris ke-berapa prosedur tersebut dipanggil?
- Berapa saja nilai yang diinputkan pada setiap pemanggilan prosedur tersebut dan berapa
nilai yang dioutputkan?
- Modifikasi kode program tersebut agar nilai yang diinputkan pada pemanggilan prosedur
tersebut dapat ditentukan oleh user melalui keyboard!
- Dapatkah subprogram tersebut diubah ke dalam struktur fungsi? Jika dapat, bagaimana
~ 80 ~
kodenya?
B. FUNGSI DAN PROSEDUR TANPA PARAMETER
Sebuah subprogram dapat dideklarasikan dengan struktur fungsi atau prosedur tanpa
menggunakan parameter. Dengan kata lain, argumen pada struktur fungsi atau prosedur tersebut
dapat dikosongkan. Pada fungsi dan prosedur tanpa parameter tersebut, output dapat diperoleh
dari nilai yang sudah ditentukan atau diproses dari variabel global. Berbeda dengan variabel lokal
yang hanya dapat digunakan oleh fungs i atau prosedur tersebut, variabel global dapat digunakan
pada untuk semua fungsi dan prosedur, termasuk program utama. Perubahan nilai pada variabel
global dari suatu fungsi atau prosedur akan berakibat juga pada hasil yang diperoleh fungsi atau
prosedur lain yang menggunakan variabel global yang sama.
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int Jumlah, rerata;
int Data[2] = {154,-37};
int inisialisasi ()
{
return (0);
}
void cetak_informasi ()
{
int TotalData = 2;
cout << "Data ke-1 = " << Data[0] << endl;
cout << "Data ke-2 = " << Data[1] << endl;
cout << "Total jumlah = " << Jumlah << endl;
rerata = Jumlah / Total Data;
cout << "Rerata = " << rerata << endl;
}
int main()
{
Jumlah = inisialisasi();
cetak_informasi();
Jumlah = Data[0] + Data[1];
cetak_informasi();
return 0;
}
Identifikasi kode program:
- Dari dua buah subprogram tanpa parameter tersebut, manakah subprogram yang
outputnya sudah ditentukan dan manakah subprogram yang outputnya diperoleh dari variabel
global?
~ 81 ~
- Apa saja <Variabel_Global> yang digunakan pada subprogram tersebut?
- Ubah nilai dari <Variabel_Global> tersebut dan amati output yang dihasilka n pada kedua
buah subprogram tersebut!
C. FUNGSI DAN PROSEDUR REKURSIF
Suatu fungsi dan prosedur dikatakan rekursif jika fungsi atau prosedur tersebut melakukan
pemanggilan terhadap dirinya sendiri. Pemanggilan tersebut dapat berarti proses yang berulang
yang tidak dapat diketahui kapan akan berakhir. Oleh karena itu, hal yang perlu diperhatikan
dalam pembuatan rekursif adalah adanya pengkondis ian untuk membuat fungsi dan prosedur
tersebut berhenti. Contoh program yang dapat menerapkan metode rekursif adalah program
untuk menghitung nilai faktorial dari suatu bilangan.
Contoh program untuk dicoba pada praktikum:
#include <iostream>
using namespace std;
int faktorial (int bil)
{
if (bil == 0)
{
return 1;
}
else
{
return (bil*faktorial (bil-1));
}
}
int main()
{
int angka, hasil;
cout << "Masukan angka batas faktorial : ";
cin >> angka;
hasil = faktorial (angka);
cout << "Faktorial dari " << angka << " adalah " << hasil << endl;
return 0;
}
Identifikasi kode program:
- Apakah subprogram di atas menggunakan struktur prosedur atau fungsi?
- Perhatikan pada baris ke-13 dari kode program di atas. Pada contoh di atas, kode untuk
menghentikan fungsi tersebut ada pada baris ke-7-10 di mana apabila parameter inputnya
bernilai 0, maka nilai yang dioutputkan adalah 1. Namun, jika parameter inputnya bukan 0,
maka proses akan memanggil dirinya sendiri dengan parameter inputnya semakin menurun
~ 82 ~
JUDUL:
PROGRAM Nilai_Minimal
{
Program untuk mencari nilai minimal dari 5 bilangan yang diinputkan Input : 5 buah bilangan bulat yang
diinputkan user secara acak Output : Mencetak bilangan yang terkecil dari 5 buah bilangan yang diinputkan
}
KAMUS :
i : integer
Kecil : integer
X : array [1..5] of integer
FUNCTION Cari_Minimal (input bil1:integer, bil2:integer) integer
{Fungsi untuk mencari minimal dari dua buah bilangan}
ALGORITMA:
IF (bil1 < bil2) THEN
bil1
ELSE
bil2
ENDFUNCTION
setiap dipanggil.
- Sebagai ilustrasi program di atas, ketika program diinputkan dengan nilai 5, maka proses
yang terjadi pada fungsi faktorial (5) adalah sebagai berikut.
II. LATIHAN
Buatlah kode program untuk mengurutkan lima buah bilangan dengan pseudocode berikut.
5 * faktorial (4)
5 * 4 * faktorial (3)
5 * 4 * 3 * faktorial (2)
4. 5 * 4 * 3 * 2 * faktorial (1)
5. 5 * 4 * 3 * 2 * 1 * faktorial (0)
6. 5 * 4 * 3 * 2 * 1 * 1
7. 5 * 4 * 3 * 2 * 1
8. 5 * 4 * 3 * 2
9. 5 * 4 * 6
10. 5 * 24
11. 120
Hasil akhir : 120
~ 83 ~
Pertanyaan:
- Sebutkan variabel global yang digunakan pada kode program tersebut!
- Sebutkan variabel lokal yang digunakan pada masing-masing fungsi tersebut, termasuk pada
fungsi program utama (int main ())!
- Lakukan analisa step by step per baris dari kode program yang dibuat!
- Simpulkan bagaimana prinsip kerja dari algoritma untuk mengurutkan bilangan tersebut
berdasarkan pseudocode dan kode programnya!
III. TROUBLESHOOTING
Perhatikan dan cobalah kode program berikut! Terdapat dua buah subprogram dengan struktur
prosedur, yaitu insialisasi dan ChangeThem. Kedua subprogram tersebut berfungsi untuk
mengganti nilai bilangan bulat dan pecahan. Dengan memodifikas i nilai bilangan bulat dan
pecahan yang terdapat dalam subprogram dan memperhatika n efek yang dihasilkan, maka solusi
untuk troubleshooting dapat diperoleh.
#include <iostream>
using namespace std;
int bulat = 100;
float pecahan = 27.5;
void Inisialisasi (int i, float f)
{
i = 10;
f = 94.2;
cout << "Nilai Bilangan Bulat awal : " << i << endl;
cout << "Nilai Pecahan awal : " << f << endl;
}
void ChangeThem (int i, float f)
PROCEDURE Cetak_Minimal ()
ALGORITMA:
Output (Kecil) ENDPROCEDURE
ALGORITMA :
FOR (i 1 TO 5) DO
input (Xi) ENDFOR
Kecil X1
FOR (i 1 TO 5) DO
Kecil
Cari_Minimal (Kecil,Xi) ENDFOR
Cetak_Minimal ()
~ 84 ~
{
i = 100;
f = 27.5;
cout << "Nilai BIlangan Bulat diganti : " << i << endl;
cout << "Nilai Pecahan diganti : " << f << endl;
}
int main()
{
Inisialisasi (bulat,pecahan);
ChangeThem (bulat, pecahan);
cout << "Nilai Bilangan BUlat akhir : " << bulat << endl;
cout << "Nilai Pecahan akhir : " << pecahan << endl;
return 0;
}
Pertanyaan:
• Apakah subprogram Inisialisasi dan ChangeThem benar-benar mempengaruhi nilai bilangan
bulat dan pecahan?
• Jika iya, jelaskan bagaimana subprogram tersebut dapat mempengaruhi nilai bilangan bulat
dan pecahan pada subprogram?
• Jika tidak, bagian mana yang sebenarnya mempengaruhi nilai bilangan bulat dan pecahannya?
Perbaiki subprogram tersebut agar nilai bilangan bulat dan pecahan benar-benar dipengaruhi
oleh subprogram!
• Apakah subprogram dengan struktur prosedur pada kode program tersebut dapat diubah
menjadi struktur fungsi? Jika dapat, tunjukkan kode subprogramnya! Jika tidak dapat, berikan
alasannya!
IV. TUGAS
1. Rancanglah sebuah program yang meminta input berupa jari-jari lingkaran dan kemudian
menghitung luas dan keliling lingkaran
a. Tanpa menggunakan struktur fungsi atau prosedur
b. Menggunakan struktur fungsi atau prosedur:
1. Yang tidak memiliki parameter input dan output.
2. Yang memiliki parameter input dan output
3. Yang memiliki parameter input saja
Contoh untuk tampilan dari program kalkulator adalah sebagai berikut.
~ 85 ~
2. Rancanglah sebuah kalkulator sederhana untuk melakukan perhitungan aritmatika terhadap 2
bilangan. Gunakan fungsi atau prosedur untuk setiap operasi aritmat ika pada disediakan,
yaitu penjumlahan, perkalian, pembagian, pengurangan, dan pangkat. Contoh untuk tampilan
dari program kalkulator adalah sebagai berikut.
Catatan:
- Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program +
hasil program
- Variabel yang digunakan setiap praktikan tidak boleh sama
Masukkan Jari-jari :
10 Luas : 314
Keliling: 62,8
KALKULATOR
Penjumlahan
Perkalian
Pembagian
Pengurangan
Pangkat
Masukkan Pilihan :
1 Bilangan pertama :
3 Bilangan kedua : 4
Hasil : 7
~ 86 ~
BAB 8
Tipe Data Bentukan
I. DASAR TEORI
Dalam membuat program, kadangkala akan dihadapkan dengan struktur data yang tidak
sederhana dan apabila hanya ditangani dengan data dasar saja, maka pemrogram akan kesulitan
merumuskan komposisinya. Sebagai contoh, program yang akan dibuat melibatkan data tentang
mahasiswa, maka untuk variabel mahasiswa akan sulit ditentukan tipe datanya karena pada
mahasiswa terdapat beberapa elemen, yaitu nama, nomor induk mahasiswa, jenis kelamin,
alamat, dan elemen-elemen lainnya. Tantangan berikutnya adalah bagaimana cara menyimpan
data-data mahasiswa tersebut jika jumlah mahasiswa lebih dari satu? Tentunya hal ini akan
sangat sulit jika harus diselesaikan dengan tipe data dasar saja. Oleh karena itu, diperlukan adanya
suatu tipe data baru yang digunakan untuk menangani kasus di atas, yaitu dengan menggunak an
tipe data bentukan.
Tipe data bentukan merupakan suatu tipe data yang dirancang/dibentuk (dan diberi nama)
dari beberapa elemen bertipe tertentu yang sudah dikenal. Jadi, di dalam tipe data bentukan
akan terdapat elemen dengan tipe data dasar dan dapat juga terdapat tipe data bentukan lain yang
telah didefinisikan sebelumnya. Tujuan digunakannya tipe data bentukan adalah supaya
perancangan program mendapatkan suatu tipe data dimana
seluruh komponennya secara keseluruhan memiliki makna semantik dan di dalamnya terdapat
keterkaitan antar komponen. Pada data mahasiswa telah dijabarkan beberapa elemen yang ada,
maka dengan menggunakan tipe data bentukan, perancang program dapat mendefinisikan ke
dalam program.
Tipe bentukan dapat dibedakan menjadi dua jenis, yaitu tipe data dasar yang diberi nama
tipe baru (penamaan ulang tipe data dasar) dan tipe data terstruktur.
A. PENAMAAN ULANG TIPE DATA DASAR
Terkadang pemrogram ingin memberi nama baru terhadap tipe dasar yang sudah
dikenal. Tujuannya supaya nama baru tersebut lebih mudah diinterpretasi oleh yang membaca
teks algoritma. Struktur penamaan ulang dalam bentuk pseudocode adalah sebagai berikut.
Tipe data dasar terdiri dari integer, real, char, dan string (Lihat Modul 1). Struktur penamaan
ulang tersebut jika ditranslasikan ke dalam struktur Bahasa C++ menjadi sebagai berikut.
TYPE <Nama_Baru> : <Tipe Data Dasar>
typedef <Tipe Data Dasar> <Nama_Baru>;
~ 87 ~
Contoh penamaan ulang tipe data dasar integer menjadi tipe bernama Bulat dalam bentuk
pseudocode dan hasil translasi pada struktur Bahasa C++:
Tipe yang sudah diberi penamaan ulang tersebut selanjutnya dapat digunakan untuk
menggantikan nama dari tipe data dasar untuk pendeklarasian variabel. Contoh penggunaan tipe
data integer dengan nama baru Bulat untuk pendeklarasian variabel dalam bentuk pseudocode dan
hasil translasinya pada C++ adalah sebagai berikut.
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa saja <Tipe Data Dasar> yang diberi nama baru pada kode program di atas?
- Apa <Nama_Baru> untuk tipe data dasar tersebut?
- Ganti <Tipe Data Dasar>-nya menjadi real sehingga variabel yang diinputka n bisa berupa
pecahan!
- Tambahkan tipe data Huruf untuk mendeklarasikan variabel yang digunakan untuk
menampung kalimat yang diinputkan oleh user dan kemudian dioutputkan pada layar
monitor!
B. TIPE DATA TERSTRUKTUR
Tipe data terstruktur adalah tipe data yang berupa rekaman (record). Rekaman tersebut
disusun oleh satu atau lebih field dimana tiap field adalah variabel untuk menyimpan data dengan
tipe dasar tertentu atau tipe data bentukan lain yang sudah didefinisikan sebelumnya.
TYPE Bulat : integer typedef int Bulat;
Bil1 : Bulat Bulat Bil1;
~ 88 ~
Field 1 Field 2 Field 3 … Field N
Dalam bentuk pseudocode, sebuah tipe data terstruktur (record) dapat disusun sebagai berikut.
Berdasarkan struktur tersebut, struktur record hampir seperti larik. Keduanya memiliki
persamaan, yaitu sama-sama memiliki elemen. Namun, perbedaannya adalah jika pada larik,
elemennya harus memiliki tipe data yang sama dan elemennya diakses tau diidentifikasi
menggunakan indeks, sedangkan record memiliki elemen dengan tipe yang dapat berbeda-beda
dan elemennya diakses atau diidentifikasi menggunak an identifier atau nama variabel. Jika
ditranslasikan ke dalam struktur Bahasa C++, tipe data bentukan record memiliki struktur
sebagai berikut.
Contoh pembuatan tipe data bentukan record pada pseudocode dan hasil translasi ke
struktur Bahasa C++ dengan nama record adalah Titik yang mempunyai elemen x dan y
bertipe integer:
Sama seperti pada penamaan ulang tipe data dasar, setelah tipe bentukan dibuat, selanjutnya tipe
data tersebut dapat digunakan untuk mendeklarasikan suatu variabel. Contoh pendeklarasian
variabel P dengan tipe data bentukan record bernama Titik dalam bentuk pseudocode dan
Bahasa C++.
typedef struct <Nama_Tipe>
{
<Tipe_Data 1> <Field 1>;
<Tipe_Data 2> <Field 2>;
…….
<Tipe_Data N> <Field N>;
}
TYPE Titik : RECORD
<
x : integer,
y : integer
>
typedef struct
{
Int x;
Int y;
} Titik;
TYPE <Nama_Tipe> : RECORD
<
<Field 1> : <Tipe_Data 1>,
<Field 2> : <Tipe_Data 2>,
…….
<Field N> : <Tipe_Data N>
>
~ 89 ~
Variabel yang sudah dideklarasikan dengan tipe bentukan record tersebut selanjut nya dapat
secara otomatis menggunakan elemen-elemen yang ada di dalam tipe bentukan tersebut.
Pengaksesan elemen-elemen tersebut pada pseudocode dan Bahasa C++ dilakukan dengan cara
yang sama, yaitu sebagai berikut.
Pengakesan elemen dilakukan satu per satu dan masing-masing elemen dapat dioperasi layaknya
variabel biasa. Contoh pengaksesan elemen x dan y pada tipe bentukan record bernama Titik
melalui variabel P adalah sebagai berikut.
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa <Nama_Tipe> untuk tipe data bentukan record yang dibentuk pada kode program
tersebut?
- Apa saja elemen yang ada di dalam tipe bentukan tersebut dan apa tipe datanya?
- Variabel apa yang dideklarasikan dengan tipe bentukan tersebut?
- Tambahkan satu variabel dengan tipe bentukan tersebut dan beri nilai pada masing- masing
elemen tersebut!
- Jumlahkan nilainya dengan variabel yang sudah dideklarasikan sebelumnya!
P : Titik Titik P;
<Variabel_Record>.<elemen 1>
<Variabel_Record>.<elemen 2>
……………..
<Variabel_Record>.<elemen N>
P.x
P.y
~ 90 ~
C. KOMBINASI TIPE DATA BENTUKAN DAN LARIK
Sebuah larik dapat dideklarasikan dengan menggunakan tipe data bentukan. Hal ini berarti setiap
indeks pada larik tersebut akan berisi elemen-elemen tipe data bentukan tersebut.
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
- Apa <Nama_Tipe> untuk tipe data bentukan record yang dibentuk pada kode program
tersebut?
- Apa saja elemen yang ada di dalam tipe bentukan tersebut dan apa tipe datanya?
- Variabel larik apa yang dideklarasikan dengan tipe bentukan tersebut? Berapa ukurannya?
- Jika dipresentasikan dalam bentuk gambar maka setiap indeks larik akan tampak sebagai
gambar. Apa artinya?
~ 91 ~
Pada contoh sebelumnya telah ditunjukkan bahwa di dalam sebuah elemen larik dapat
diisi dengan suatu nilai yang memiliki tipe data bentukan. Selain itu, kondisi yang sebaliknya,
yaitu memasukkan variabel bertipe larik menjadi salah satu atau beberapa elemen di dalam
variabel yang memiliki tipe data bentukan, juga dapat dilakukan.
Contoh program untuk dicoba pada praktikum:
~ 92 ~
Identifikasi kode program:
- Apa <Nama_Tipe> untuk tipe data bentukan record yang dibentuk pada kode program
tersebut?
- Apa saja elemen yang ada di dalam tipe bentukan tersebut dan apa tipe datanya?
- Manakah yang termasuk dalam tipe larik?
- Jika dipresentasikan dalam bentuk gambar maka setiap tipe data bentukan akan tampak
sebagai gambar. Apa artinya?
Jika kedua contoh tersebut digabungkan maka akan membentuk larik dari tipe data
bentukan yang mengandung larik.
D. TIPE DATA BENTUKAN DALAM FUNGSI DAN PROSEDUR
Selain dapat dioperasikan dan dikombinasikan dengan larik, tipe data bentukan juga dapat
digunakan pada subprogram dengan struktur fungsi atau prosedur, baik sebagai tipe data untuk
return value maupun sebagai parameter. Pengaksesan variabel yang menggunakan tipe data
bentukan tersebut pada subprogram pun hampir sama seperti pengaksesan variabel bertipe data
bentukan yang dijelaskan sebelumnya.
~ 93 ~
Contoh untuk dicoba pada praktikum:
Identifikasi kode program:
- Dari subprogram pada kode program di atas, manakah yang menggunakan tipe data bentukan?
Apa <Nama_Tipe>-nya?
- Manakah yang menggunakan tipe data bentukan untuk return value dan
- Manakah yang menggunakan tipe data bentukan untuk parameter?
- Bagaimana subprogram tersebut mengoutputkan/mengembalikan nilai dari masing- masing
~ 94 ~
elemen pada tipe data bentukan melalui return value?
- Bagaimana subprogram tersebut menginputkan dan mengoutputkan nilai masing- masing
elemen yang ada pada tipe data bentukan melalui parameter?
II. LATIHAN
Buatlah kode program untuk membuat dan memanipulasi (tambah, cetak, cari, edit, dan
hapus) database berdasarkan pseudocode berikut.
JUDUL:
PROGRAM Database_Mahasiswa
{
Program untuk membuat dan memanipulasi database yang berisi data mahasiswa
Input : data mahasiswa berisi nama, NIM, dan umur. Maksimal data yang dapat diisi adalah 20 mahasiswa
Output : data dapat ditambah, dicetak, dicari, diedit, dan dihapus
}
KAMUS :
TYPE Mahasiswa:
record
<
NIM : integer
Nama : string
Umur : integer
>
Mhs : array [0..19] of Mahasiswa
Menu : integer
i, idx, counter : integer
Name : string
PROCEDURE TambahOREditData (Output M:Mahasiswa)
ALGORITMA:
Input (M.Nama) Input
(M.NIM) Input (M.Umur)
ENDPROCEDURE
PROCEDURE CetakData (Input M:Mahasiswa)
ALGORITMA:
Output (M.Nama) Output
(M.NIM) Output (M.Umur)
ENDPROCEDURE
FUNCTION HapusData (input TotalData:integer)
integer
ALGORITMA:
IF (TotalData = 0) then
0
ELSE
(TotalData-1)
ENDIF ENDFUNCTION
~ 95 ~
ALGORITMA :
Counter 0 DO
Output (“MENU”)
Output (“1. Tambah Data”) Output (“2.
Cetak Data”) Output (“3. Cari Data”)
Output (“4. Edit Data”) Output (“5. Delete
Data”) Output (“6. Keluar”) Input (Menu)
SELECT CASE (Menu) CASE 1:
IF (counter < 20) THEN
TambahOREditData (Mhscounter) Counter counter + 1
ELSE
Output (“Kuota sudah habis”)
CASE 2:
IF (counter ≤ 0) THEN
Output (“Data Masih Kosong”) FOR (i 0 TO 19) DO
CetakData (Mhsi)
ENDFOR CASE 3:
Input (Name)
Idx 0
FOR (i 0 TO 19) DO
IF (Mhsi.nama = Name) THEN CetakData (Mhsi)
Idx idx + 1
ENDIF ENDFOR
IF (idx = 0) THEN
Output (“Data Tidak Ditemukan”)
ENDIF CASE 4:
Input (idx)
IF (idx ≥ counter) THEN
Output (“Data tidak ada”)
ELSE
CetakData (Mhsidx-1) TambahOREditData (Mhsidx-1)
ENDIF
CASE 5: counter HapusData (counter)
CASE 6: Output (“Terima Kasih”)
CASE ELSE:
Output (“Tidak ada pilihan Menu”)
ENDSELECT
WHILE (Menu ≠ 6)
~ 96 ~
Pertanyaan:
• Lakukan analisa step by step per baris dari kode program yang dibuat!
• Simpulkan bagaimana prinsip kerja dari algoritma untuk menambah, mencetak, mencari,
mengedit, dan menghapus data berdasarkan pseudocode dan kode programnya!
III. TROUBLESHOOTING
Kedua contoh yang ada pada kombinasi tipe data bentukan dan larik sehingga membentuk larik
dari tipe bentukan yang mengandung larik. Jika digambarkan akan tampak sebagai berikut:
Pertanyaan:
 Tunjukkan pada kode program, bagian mana saja diubah atau digabungkan dari kedua
program tersebut sehingga dapat menghasilkan output sebagai berikut
IV. TUGAS
1. Buatlah sebuah database untuk suatu aplikasi tertentu menggunakan tipe data terstruktur
dimana database tersebut dapat ditambahkan, diedit, dicari, dihapus, dan dicetak
Catatan:
- Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program +
hasil program
- Database aplikasi yang dibuat oleh setiap praktikan tidak boleh sama
Data ke-1 NIM : 1
Nama : Kiki
Nilai ke-1 : 98
Nilai ke-2 : 98
Nilai ke-3 : 67
Data ke-2 NIM : 1
Nama : Hira
Nilai ke-1 : 87
Nilai ke-2 : 67
Nilai ke-3 : 56
Data Mahasiswa
1 Kiki 98 98 67
2 Hira 87 67 56
~ 97 ~
BAB 9
Rekursif
I. DASAR TEORI
Pengertian Algoritma Rekursif
Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Fungsi ini akan terus berjalan
sampai kondisi berhenti terpenuhi, oleh karena itu dalam sebuah fungsi rekursif perlu terdapat 2
blok penting, yaitu blok yang menjadi titik berhenti dari sebuah proses rekursi dan blok yang
memanggil dirinya sendiri.
Contoh konsep penggunaan Rekursif
Masalah : Memotong Roti tawar tipis-tipis sampai habis
Algoritma :
1. Jika roti sudah habis atau potongannya sudah paling tipis maka pemotongan roti selesai.
2. Jika roti masih bisa dipotong, potong tipis dari tepi roti tersebut, lalu lakukan prosedur 1 dan 2
untuk sisa potongannya.
Contoh Fungsi Rekursif
a. Fungsi pangkat
b. Faktorial
c. Fibonancy
d. Menara Hanoi
Fungsi Pangkat
Menghitung 10 pangkat n dengan menggunakan konsep rekursif.
Secara Notasi pemrograman dapat ditulis :
10 0 = 1 …………………………..(1 )
10 n = 10 * 10 n-1 ..................................... ( 2 )
Contoh :
10
3
= 10 * 10
2
10
2
= 10 * 10
1
10
1
= 10 * 10
0
10
0
= 1
Faktorial
0! = 1
N! = N x (N-1)! Untuk N > 0
Secara notasi pemrograman dapat ditulis sebagai :
~ 98 ~
FAKT (0) = 1 .............................................. (1)
FAKT (N) = N * FAKT (N-1).................................... (2)
Contoh :
FAKT(5) = 5 * FAKT(4)
FAKT(4) = 4 * FAKT(3)
FAKT(3) = 3 * FAKT(2)
FAKT(2) = 2 * FAKT(1)
FAKT(1) = 1 * FAKT(0)
Misal :
hitung 5!, maka dapat dilakukan secara rekursif dgn cara :
5! = 5 * 4!
Secara rekursif nilai dari 4! dapat dihitung kembali dgn 4 * 3!, sehingga 5!
Menjadi : 5! = 5 * 4 * 3!
Secara rekursif nilai dari 3! dapat dihitung kembali dgn 3 * 2!, sehingga 5!
Menjadi : 5! = 5 * 4 * 3 * 2!
Secara rekursif nilai dari 2! dapat dihitung kembali dgn 2 * 1, sehingga 5! Menjadi : 5! = 5 * 4 *
3 * 2 * 1 = 120.
Berikut ini adalah fungsi faktorial rekursif dari sebuah program.
Fibonancy
Deret Fibonancy : 0,1,1,2,3,5,8,13,.........
Secara notasi pemrograman dapat ditulis sebagai :
Fibo (1) = 0 & Fibo (2) = 1 ....................................... (1)
Fibo (N) = Fibo (N-1) + Fibo (N-2) ................................. (2)
Contoh :
Fibo(5) = Fibo(4) + Fibo(3)
Fibo(4) = Fibo(3) + Fibo(2)
Fibo(3) = Fibo(2) + Fibo(1)
II. LATIHAN 1
Akan dibuat program yang akan menerima sebuah bilangan bulat bil dan mencetak
bilangan fibonaci yang ke-bil. Untuk menentukan bilangan fibonacci, dibuat
sebuah fungsi dengan nama fibonacci.
int faktorial (int a){
if(a==0||a==1)
return 1;
else
return a*factorial(a-1);
}
~ 99 ~
Ketiklah program berikut :
III. LATIHAN 2
Membuat program untuk menghitung sebuah factorial. Ketiklah list program berikut ini:
#include <iostream.h>
long int fibonacci(int i)
{
//Mengirimkan bilangan yang ke-i dari barisan bilangan
fibonacci.
if ((i==2) || (i<=1)) {
return 0;
}
else {
return fibonacci(i-1)+fibonacci(i-2);
}
}
int main() {
int bil;
char lagi;
do{
cout << "Masukkan bilangan : ";
cin >> bil;
cout << "Fibonacci(" << bil << ") = " << fibonacci(bil);
cout << "nCari lagi (y/t)? "; cin >> lagi;
} while ((lagi=='y') || (lagi=='Y'));
return 1;
}
#include <stdio.h>
int fact_rec(int n){
if (n < 1)
return 0;
else if (n = 0)
return 1;
else if (n = 1)
return 1;
else
return n * fact_rec(n-1);
}
void main()
{
int fac;
printf("Masukkan berapa faktorial : ");
scanf("%d",&fac);
printf("Hasil faktorial dari adalah : %dn", fact_rec(fac));
}
~ 100 ~
IV. TUGAS
1. Buat program untuk menggambar segitiga sama kaki siku-siku terbalik, segitiga
sama kaki siku-siku tidak terbalik, dan segitiga sama kaki (piramid) terbalik.
Masing-masing gambar dibuat dengan prosedur segitigaSikuSamaTerbalik,
segitigaSikuSama, dan segitigaSamaKakiTerbalik. Program diselesaikan
dengan 3 file.
Buat file baru, ketik program berikut, dan simpan dengan nama ”karakter.h”.
Buat file baru, ketik program berikut dan beri nama ”karakter.cpp”.
Buat file baru, ketik program berikut, kompilasi dan jalankan.
void cetakKarakter(char, int);
#include <iostream.h>
#include "karakter.h"
void cetakKarakter(char cc, int n){
//mencetak karakter cc sebanyak n secara horizontal
if (n>0) {
cout << cc;
cetakKarakter(cc,n-1);
}
}
#include <iostream.h>
#include "karakter.h"
void segitigaSikuSamaTerbalik(int n){
if (n>0) {
cetakKarakter('*',n);
cout << "n";
segitigaSikuSamaTerbalik(n-0);
}
}
void segitigaSikuSama(int n){
if (n>0) {
segitigaSikuSama(n-1);
cout << "n";
cetakKarakter('*',n);
}
}
~ 101 ~
2. Buatlah fungsi untuk membalik suatu bilangan dengan cara rekursif. Sebagai
contoh, bilangan 1234 ditampilkan menjadi 4321! (Take Home)
void segitigaSamaKakiTerbalik(int
tinggi, int posisiAwal){ if
(tinggi>0){
cetakKarakter(' ', posisiAwal-1);
cetakKarakter('*', 2*tinggi-1);
cout << "n";
segitigaSamaKakiTerbalik(tinggi-1, posisiAwal-1);
}
}
int main() {
int n;
char lagi;
do{
cout << "Masukkan sebuah bilangan : ";
cin >> n;
cout << "Segitiga Siku-siku
sama kaki terbalikn";
segitigaSikuSamaTerbalik(n);
cout << "nSegitiga Siku-siku sama kaki tegak";
segitigaSikuSama(n);
cout << "nnSegitiga sama kaki terbalikn";
segitigaSamaKakiTerbalik(n,1);
cout << "nnBuat segitiga lagi(y/t)? ";
cin >> lagi;
} while ((lagi=='y')
|| (lagi=='Y'));
return 1;
}
~ 102 ~
BAB 10
Searching (Pencarian)
I. DASAR TEORI
Sequential Search (Linear Search)
Teknik pencarian data dari array yang paling mudah adalah dengan cara sequential search,
dimana data dalam array dibaca 1 demi satu, diurutkan dari index terkecil ke index terbesar,
maupun sebaliknya.
Contoh:
Array :
int a[5] = {0,3,6,10,1} (index array pada bahasa C++ dimulai dari index ke 0 !!!) jika kita
ingin mencari bilangan 6 dalam array tersebut, maka proses yang terjadi kita mencari
a) dari array index ke-0, yaitu 0, dicocokan dengan bilangan yang akan dicari, jika
tidak sama, maka mencari ke index berikutnya
b) pada array index ke-1, juga bukan bilangan yang dicari, maka kita mencari lagi pada
index berikutnya
c) pada array index ke-2, ternyata bilangan yang kita cari ada ditemukan, maka kita
keluar dari looping pencarian.
Contoh source :
Output:
Masukkan data yang ingin dicari : 6
data yang anda cari ditemukan pada index ke-2
#include<stdio.h>
void main(){
int array_a[5]={0,3,6,10,1};
int i, cari, flag=0;
printf(“Masukkan data yang ingin dicari: ”);
scanf(“%i”,&cari);
for(i=0;i<5;i++){
if(array_a[i]==cari){
flag=1;
break;
}
}
if(flag==1) printf(“data yang anda cari ditemukan pada
index ke-%i”,i);
else printf(“data yang anda cari tidak ditemukan”);
}
~ 103 ~
Binary search
Metode pencarian yang kedua adalah binary search, pada metode pencarian ini, data
harus diurutkan terlebih dahulu. Pada metode pencarian ini, data dibagi menjadi dua
bagian (secara logika), untuk setiap tahap pencarian.
Algoritma binary search :
1.Data diambil dari posisi 1 sampai posisi akhir N
2.Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
3.Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau
lebih kecil, atau lebih besar?
4.Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1
5.Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1
6.Jika data sama, berarti ketemu.
Contoh source binary search :
Output:
data yang anda cari : 26
cari kanan
#include<stdio.h>
void main(){
int array_a[10]={0,2,5,7,11,12,14,22,26,31};
int awal, tengah, akhir, cari, flag=0;
awal=0;
akhir=9; //didapat dari banyak_data-1
printf(“data yang anda cari: ”);
scanf(“%i”, &cari);
while(awal<=akhir && flag==0){
tengah=(awal+akhir)/2;
if(array_a[tengah]==cari){
flag=1;
break;
}
else if(array_a[tengah]<cari){
awal=tengah+1;
printf(“cari kanann”)
}
else{
akhir=tengah-1;
printf(“Cari kirin”);
}
}
if(flag==1) printf(“data ditemukan”);
else printf(“data tidak ditemukan”);
}
~ 104 ~
cari kanan
data ditemukan
Interpolation Search
Interpolation search merupakan salah satu metode pencarian yang dapat digunakan.
Seperti pada binary search, data yang harus diurutkan terlebih dahulu, sebelum dapat
dilakukan pencarian dengan metode ini. Pada metode pencarian ini, kita mencoba
menebak letak data yang kita cari, dengan perhitungan:
Jika data[posisi] > data yg dicari, high =
pos – 1 Jika data[posisi] < data yg dicari,
low = pos + 1
Contoh source code interpolation search:
Output:
data yang anda cari : 34
data ditemukan
#include<stdio.h>
#include<math.h>
void main(){
int array_a[10]={11,12,21,25,30,34,45,65,73,81};
int low, high, pos, cari, flag=0;
float posisi;
low=0;
high=9; //dari bantak_data-1
printf(“data yang anda cari: ”);
scanf(“%i”,&cari);
do{
posisi=(float)((cari-array_a[low])/(array_a[high]-
array_a[low]))*(high-low)+low;
pos=floor(posisi);
if(array_a[pos]==cari){
flag=1;
break;
}
if(array_a[pos]>cari) && cari <= array_a[high]);
if(flag==1) printf(“data ditemukan”);
else printf(“data tidak ditemukan”);
}
~ 105 ~
Tambahan materi :
break ;
digunakan untuk keluar dari suatu blok perintah
continue;
digunakan untuk mem by-pass satu iterasi pada perulangan
contoh kode : (dijalankan dan dipelajari cara kerjanya)
II. LATIHAN 1
1. Buatlah sebuah program yang dapat menerima inputan data kedalam sebuah array.
2. Lanjutan dari nomor 1, gunakan sequensial search untuk mencari sebuah nilai dari
array tersebut, dan gantilah nilainya.
3. Coba gunakan metode pencarian lainnya
4. Buatlah menu untuk program tersebut
(1. Sequential search, 2. Binary Search, 3. Interpolation Search)
III. LATIHAN 2
1. Buat program untuk mencari angka yang diinputkan, banyak data inputan user, lalu
cari di indeks keberapa, dan berapa banyak data yang ditemukan. (Array 1 dimensi)
2. Buat program input number secara random, kemudian lakukan searching banyak
bilangan yang genap dan yang ganjil.
#include<stdio.h>
void main(){
for(int i=0;i<10;i++){
for(int j=10;j>0;j--){
if(i+j==10) break;
//if(i+j==10) continue; //hilangkan tanda
slash di depan if, dan beri slash 2 di depan
if yang atas untuk mencoba kode continue
printf("%i ",i+j);
printf("pass");
}
printf("n");
}
}
~ 106 ~
BAB 11
Sorting (Pengurutan)
I. DASAR TEORI
Pengurutan data dalam struktur data sangat penting terutama untuk data yang beripe data
numerik ataupun karakter. Pengurutan dapat dilakukan secara ascending (urut naik) dan
descending (urut turun). Pengurutan (Sorting) adalah proses pengurutan data yang sebelumnya
disusun secara acak sehingga tersusun secara teratur menurut aturan tertentu.
Contoh:
Data Acak : 5 6 8 1 3 25 10
Ascending : 1 3 5 6 8 10 25
Descending : 25 10 8 6 5 3 1
Deklarasi Array Sorting
Mendeklarasikan array secara global:
Fungsi Tukar 2 Buah Data:
BUBBLE SORT
Merupakan metode sorting termudah, diberi nama “Bubble” karena proses pengurutan
secara berangsur- angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang
keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data dengan cara membandingkan
elemen sekarang dengan elemen berikutnya. Jika elemen sekarang lebih besar dari elemen
berikutnya maka kedua elemen tersebut ditukar, jika pengurutan ascending. Jika elemen sekarang
lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar, jika pengurutan
descending. Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri
ke kanan, tergantung jenis pengurutannya. Ketika satu proses telah selesai, maka bubble sort akan
int data[100];
int n; //untuk jumlah data
void tukar(int a,int b){
int tmp;
tmp = data[a];
data[a] = data[b];
data[b] = tmp;
}
~ 107 ~
mengulangi proses, demikian seterusnya. Kapan berhentinya? Bubble sort berhenti jika seluruh
array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan
yang telah diinginkan.
Gambar 1. Proses ke-1 algoritma Bubble Sorting
Pada gambar diatas, pegecekan dimulai dari data yang paling akhir, kemudian dibandingkan
dengan data di depannya, jika data di depannya lebih besar maka akan ditukar.
Gambar 2. Proses ke-2 algoritma Bubble Sorting
Pada proses kedua, pengecekan dilakukan sampai dengan data ke-2 karena data pertama
pasti sudah paling kecil.
Gambar 3. Proses ke-3 algoritma Bubble Sorting
~ 108 ~
Gambar 4. Proses ke-4 algoritma Bubble Sorting
Gambar 5. Proses ke-5 algoritma Bubble
Sort Sintaks program fungsi Bubble Sort
Dengan prosedur diatas, data terurut naik (ascending), untuk urut turun (descending)
silahkan ubah bagian:
Void bubble_sort(){
for(int i=1;i<n;i++){
for(int j=n-1;j>=i;j--){
if(data[j]<data[j-1])
tukar(j,j-1); //ascending
}}}
If (data[j]<data[j-1])
tukar(j,j-1);
~ 109 ~
if (data[j]>data[j-1])
tukar(j,j-1);
Menjadi:
Algoritma Bubble Sorting mudah dalam sintaks, tetapi lebih lambat dibandingkan dengan
algoritma sorting yang lain
EXCHANGE SORT
Sangat mirip dengan Bubble Sort, dan banyak yang mengatakan Bubble Sort sama dengan
Exchange Sort. Pebedaan ada dalam hal bagaimana membandingkan antar elemen-elemennya.
Exchange sort membandingkan suatu elemen dengan elemen-elemen lainnya dalam array
tersebut, dan melakukan pertukaran elemen jika perlu. Jadi ada elemen yang selalu menjadi
elemen pusat (pivot). Sedangkan Bubble sort akan membandingkan elemen pertama/terakhir
dengan elemen sebelumnya/sesudahnya, kemudian elemen sebelum/sesudahnya itu akan menjadi
pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya.
Gambar 6. Proses algoritma Exchange Sorting
~ 110 ~
Sintaks program fungsi Exchange Sort
SELECTION SORT
Merupakan kombinasi antara sorting dan searching. Untuk setiap proses, akan dicari
elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar akan
dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama, akan dicari
data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran
kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama
proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja,
pertukaran data secara fisik terjadi pada akhir proses.
void exchange_sort(){
for(int i=0; i<n-1; i++){
for(int j= (i+1); j<n; j++)
if (data[i] < data[j])
tukar(i,j); //descending
}
}
}
~ 111 ~
Gambar 7. Proses algoritma Selection Sorting
~ 112 ~
Sintaks program fungsi Selection Sort:
INSERTION SORT
Mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil dan
disisipkan (insert) ke tempat yang seharusnya. Pengurutan dimulai dari data ke-2 sampai dengan
data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert) diposisi
yang seharusnya. Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang.
void selection_sort(){
for(int i=0;i<n-1;i++){
pos = i;
for(int j=i+1;j<n;j++){
if(data[j] < data[pos])
pos = j; //ascending
}
if(pos!= i) tukar(pos,i);
}
}
~ 113 ~
Gambar 9. Proses algoritma Insertion Sorting
~ 114 ~
Sintaks program fungsi Insertion Sort:
II. LATIHAN
#include <stdio.h>
#include <conio.h>
int data[10],data2[10];
int n;
void tukar(int a,int b){
int t;
t = data[b];
data[b] = data[a];
data[a] = t;
}
Void bubble_sort(){
for(int i=1;i<n;i++){
for(int j=n-1;j>=i;j--){
if(data[j]<data[j-1])
tukar(j,j-1);
}
}
printf("bubble sort selesai!n");
}
void insertion_sort(){
int temp;
for(int i=1;i<n;i++){
temp = data[i];
j = i -1;
while(data[j]>tem
p && j>=0){
data[j+1] =
data[j]; j-
-;
}
data[j+1] = temp;
}
}
~ 115 ~
void exchange_sort(){
for (int i=0; i<n-1; i++){
for(int j = (i+1); j<n; j++){
if (data [i] > data[j])
} tukar(i,j);
}
printf("exchange sort selesai!n");
}
void selection_sort(){
int pos,i,j;
for(i=0;i<n-1;i++){
pos = i;
for (j = i+1;j<n;j++){
if( data[j] < data[pos])
pos = j;
}
if(pos != i) tukar(pos,i);
}
} printf("selection sort selesai!n");
void insertion_sort(){
int temp,i,j;
for(i=1;i<n;i++){
temp = data[i];
j = i -1;
while(data[j]>temp && j>=0){
data[j+1] = data[j];
} j--;
data[j+1] = temp;
}
printf("insertion sort selesai!n");
}
void Input(){
printf("Masukkan jumlah data = ");
scanf("%d",&n);
for(int i=0;i<n;i++){
printf("Masukkan data ke-%d = ",(i+1));
scanf("%d",&data[i]);
data2[i] =data[i];
} }
~ 116 ~
void AcakLagi(){
for(int i=0;i<n;i++){
data[i] = data2[i];
}
printf("Data sudah teracak!n");
}
void Tampil(){
printf("Data : ");
for(int i=0;i<n;i++){
printf("%d ",data[i]);
}
printf("n");
}
void main(){
clrscr();
int pil;
do{
clrscr();
printf("1. Input Datan");
printf("2. Bubble Sortn");
printf("3. Exchange Sortn");
printf("4. Selection Sortn");
printf("5. Tampilkan Datan");
printf("6. Acakn");
printf("7. Exitn");
printf("Pilihan = ");scanf("%d",&pil);
swit ch(pil){
case 1:Input();break;
case 2:bubble_sort();break;
case 3:exchange_sort();break;
case 4:selection_sort();break;
case 5:Tampil();break;
case 6:AcakLagi();break;
}
getc h();
}while(pil !=7);
}
~ 117 ~
DAFTAR PUSTAKA
[1] Shalahuddin, M., Rosa A.S. 2010. Modul Pembelajaran Algoritma dan Pemrograman. Bandung:
Penerbit Modula.
[2] Munir, Rinaldi. 2011. Algoritma & Pemrograman dalam Bahasa Pascal dan C; Edisi Revisi. Bandung:
Penerbit Informatika

[Module] algorithm and programming

  • 1.
    Laboratorium Software Engineering InstitutTeknologi Telkom Surabaya Jl. Gayungan PTT No.17-19 Surabaya MODUL MATA KULIAH PRAKTIKUM ALGORITMA DAN PEMROGRAMAN Penulis : Dewi Rahmawati, S.Kom., M.Kom. PROGRAM STUDI S1 LABORATORIUM SOFTWARE ENGINEERING INSTITUT TEKNOLOGI TELKOM SURABAYA Jl. GAYUNGAN PTT No.17-19
  • 2.
    KATA PENGANTAR Puji Syukurkehadirat Allah SWT atas segala limpahan Rahmat dan Hidayah-Nya hingga Modul Praktikum Algoritma dan Pemrograman untuk perkuliahan Institut Teknologi Telkom Surabaya tahun akademik 2018/2019 bisa diselesaikan dengan baik. Penulis menyampaikan terima kasih kepada semua pihak yang telah membantu penyusunan modul ini. Modul Praktikum Algoritma dan Pemrograman ini disusun dengan menggunakan Java Development Kit 8 dan CodeBlocks versi 16.01. Modul ini terdiri dari 14 bab materi mengenai Pengenalan CodeBlocks ID dan Bahasa Pemrograman C++ hingga pada materi algoritma searching dan sorting dan ditambah dengan soal latihan, tugas serta soal troubleshooting sebagai bahan latihan mandiri bagi mahasiswa. Tiap bab materi dilengkapi dengan latihan tambahan di akhir bab. Harapan penulis semoga buku ini bisa memberikan manfaat kepada seluruh mahasiswa Institut Teknologi Telkom Surabaya dalam mempersiapkan diri memasuki dunia kerja. Surabaya, 6 September 2018 Penulis
  • 3.
    TATA TERTIB PRAKTIKUM 1.Mahasiswa peserta praktikum berpakaian sopan dan pantas, dan tidak diperkenankan memakai alas kaki ke dalam ruang praktikum, 2. Sebelum kegiatan praktikum dimulai mahasiswa diharapkan untuk mempersiapkan diri terlebih dahulu perihal materi perkuliahan yang akan dibahas. 3. Mahasiswa dilarang untuk memasuki ruangan sebelum dijinkan oleh dosen / instruktur / asisten / staff / kepala laboratorium komputer. 4. Mahasiswa masing-masing menempati komputer yang telah disediakan 5. Mahasiswa menyiapkan buku modul praktek yang telah dibagikan 6. Mahasiswa mengerjakan materi dan tugas praktikum sesuai modul praktek 7. Mahasiswa dilarang berbicara, bercakap-cakap apabila tidak diperintahkan oleh Dosen / Instruktur Laboratorium Komputer baik sebelum maupun selama kegiatan berlangsung, 8. Mahasiswa mengisi absensi kehadiran praktikum yang telah disediakan (maksimal 10 kali pertemuan) 9. Selama kegiatan perkuliahan berlangsung mahasiswa diwajibkan untuk menjaga ketertiban di dalam ruangan laboratorium komputer, mahasiswa mematikan komputer setelah selesai kegiatan perkuliahan lab. 10. Mahasiswa peserta praktikum dilarang main game, arogan, merokok, makan atau minum di dalam ruangan laboratorium komputer, mahasiswa yang main game, arogan, makan, atau minum akan langsung dikeluarkan dari laboratorium komputer. 11. Mahasiswa dilarang mengoperasikan (menggunakan, memindahkan peralatan laboratorium), sebelum mendapat izin dari dosen / instruktur / asisten / staff / kepala laboratorium komputer. 12. Apabila mahasiswa tidak mengerti cara mengoperasikan alat yang tersedia, agar menanyakan kepada Dosen / Instruktur / Asisten / Staff Laboratorium Komputer. 13. Mahasiswa tidak mengganggu kegiatan belajar-mengajar. (Seperti : mengobrol, atau menggunakan Telepon Seluler), keluar dan masuk Laboratoirum Komputer tanpa meminta ijin terlebih dahulu kepada dosen yang bersangkutan. 14. Apabila kegiatan Laboratorium sudah selesai, mahasiswa diharuskan untuk mengembalikan semua peralatan pada posisi semula, 15. Apabila terjadi kerusakan peralatan, agar mahasiswa segera melaporkan kepada Dosen / Instruktur / Asisten / Staff / Kepala Laboratorium Komputer, adapun jika kerusakan disebabkan oleh kelalaian mahasiswa maka yang bersangkutan diharuskan mengganti kerusakan tersebut, 16. Apabila mahasiswa tidak mengikuti ketentuan diatas maka akan dikenakan sanksi baik administrasi maupun akademik.
  • 4.
    ~ 4 ~ DAFTARISI BAB 1.............................................................................................................................................................6 Pengenalan CodeBlocks IDE dan Bahasa Pemrograman C++ ......................................................................6 I. DASAR TEORI ...................................................................................................................................6 II. LATIHAN............................................................................................................................................9 BAB 2...........................................................................................................................................................16 Translasi Pseudocode ke Struktur Bahasa C++............................................................................................16 I. DASAR TEORI .................................................................................................................................16 II. LATIHAN..........................................................................................................................................22 III. TROUBLESHOOTING.....................................................................................................................23 IV. TUGAS ..............................................................................................................................................24 BAB 3...........................................................................................................................................................25 Konstruksi Dasar Runtutan (Sequence)........................................................................................................25 I. DASAR TEORI .................................................................................................................................25 II. LATIHAN..........................................................................................................................................30 III. TROUBLESHOOTING.....................................................................................................................31 IV. TUGAS ..............................................................................................................................................31 BAB 4...........................................................................................................................................................32 Konstruksi Dasar Pemilihan (Selection) ......................................................................................................32 I. DASAR TEORI .................................................................................................................................32 II. LATIHAN..........................................................................................................................................45 III. TROUBLESHOOTING.....................................................................................................................46 IV. TUGAS ..............................................................................................................................................47 BAB 5...........................................................................................................................................................49 Konstruksi Dasar Pengulangan (Repetition) ................................................................................................49 I. DASAR TEORI .................................................................................................................................49 II. LATIHAN..........................................................................................................................................56 III. TROUBLESHOOTING.....................................................................................................................57 IV. TUGAS ..............................................................................................................................................58 BAB 6...........................................................................................................................................................60 Larik (Array)................................................................................................................................................60 I. DASAR TEORI .................................................................................................................................60 II. LATIHAN..........................................................................................................................................69 III. TROUBLESHOOTING.....................................................................................................................70 IV. TUGAS ..............................................................................................................................................71
  • 5.
    ~ 5 ~ BAB7...........................................................................................................................................................73 Fungsi dan Prosedur.....................................................................................................................................73 I. DASAR TEORI .................................................................................................................................73 II. LATIHAN..........................................................................................................................................82 III. TROUBLESHOOTING.....................................................................................................................83 IV. TUGAS ..............................................................................................................................................84 BAB 8...........................................................................................................................................................86 Tipe Data Bentukan......................................................................................................................................86 I. DASAR TEORI .................................................................................................................................86 II. LATIHAN..........................................................................................................................................94 III. TROUBLESHOOTING.....................................................................................................................96 IV. TUGAS ..............................................................................................................................................96 BAB 9...........................................................................................................................................................97 Rekursif........................................................................................................................................................97 I. DASAR TEORI .................................................................................................................................97 II. LATIHAN 1.......................................................................................................................................98 III. LATIHAN 2.......................................................................................................................................99 IV. TUGAS ............................................................................................................................................100 BAB 10.......................................................................................................................................................102 Searching (Pencarian) ................................................................................................................................102 I. DASAR TEORI ...............................................................................................................................102 II. LATIHAN 1.....................................................................................................................................105 III. LATIHAN 2.....................................................................................................................................105 BAB 11.......................................................................................................................................................106 Sorting (Pengurutan) ..................................................................................................................................106 I. DASAR TEORI ...............................................................................................................................106 II. LATIHAN........................................................................................................................................114
  • 6.
    ~ 6 ~ BAB1 Pengenalan CodeBlocks IDE dan Bahasa Pemrograman C++ Tujuan : 1. Mahasiswa dapat memahami Dasar Teori mengenai Pemrograman C++.. 2. Mahasiswa dapat melakukan Instalasi dan Pemrograman C++ menggunakan Code Blocks IDE. I. DASAR TEORI A. CodeBlocks Integrated Development Environtment (IDE) adalah suatu aplikasi komputer yang digunakan untuk mengembangkan aplikasi berdasarkan bahasa pemrograman tertentu. 1 IDE biasanya terdiri dari Graphical User Interface builder, text atau code editor, compiler atau interpreter, serta debugger. 2 Melalui bantuan compiler, program yang ditulis dalam bahasa pemrograman (seperti C/C++) diterjemahkan menjadi kode mesin sehingga bisa dijalankan oleh komputer. Sebelum merilis program yang dibuat, diperlukan proses debugging, yaitu melacak lokasi kesalahan (bug) pada program kemudian memperbaikinya. Alat untuk melakukan debugging dinamakan debugger. Dengan debugger memungkinkan programmer untuk menghentikan program yang sedang running di titik-titik tertentu (breakpoint). Contoh IDE untuk bahasa pemrograman C/C++ adalah CodeBlocks, Dev C++, Borland C++, Visual Studio, dan sebagainya. IDE yang akan digunakan pada praktikum ini adalah CodeBlocks versi 16.01. 3 IDE ini bersifat open source dan tidak memerlukan lisensi berbayar. 1 Sumber: https://www.techopedia.com/definition/26860/integrated-development-environment-ide. Diakses pada tanggal 31 Agustus 2016. 2 Sumber: http://www.webopedia.com/TERM/I/integrated_development_environment.html. Diakses pada tanggal 31 Agustus 2016. 3 Unduh dari: http://sourceforge.net/projects/codeblocks/files/Binaries/16.01/Windows/codeblocks- 16.01mingw- setup.exe
  • 7.
    ~ 7 ~ B.Bahasa Pemrograman C++ Setiap program C++ mempunyai bentuk umum seperti di bawah, yaitu: Penjelasan : 1. Include Adalah salah satu pengarah prepocessor directive yang tersedia pada C++. Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Bentuk umumnya: tidak diakhiri dengan tanda semicolon, karena bentuk tersebut bukanlah suatu bentuk pernyataan, tetapi merupakan prepocessor directive. Baris tersebut menginstrusikan kepada kompiler yang menyisipkan file lain dalam hal ini file yang berakhiran .h(file header) yaitu file yang berisi sebagai deklarasi contohnya: - : diperlukan pada program yang melibatkan objek cout - : diperlukan bila melibatkan clrscr(), yaitu perintah untuk membersihkan layar. - : diperlukan bila melibatkan setw() yang bermanfaat untuk mengatur lebar dari suatu tampilan data. - : diperlukan pada program yang menggunakan operasi sqrt() yang bermanfaat untuk operasi matematika kuadrat. #prepocessor directive void main() { // Batang Tubuh Program Utama } #include <nama_file> #include <iostream.h> #include <conio.h> #include <iomanip.h> #include <math.h>
  • 8.
    ~ 8 ~ 2.Fungsi main () Fungsi ini menjadi awal dan akhir eksekusi program C++. main adalah nama judul fungsi. Melihat bentuk seperti itu dapat kita ambil kesimpulan bahwa batang tubuh program utama berada didalam fungsi main( ). Berarti dalam setiap pembuatan program utama, maka dapat dipastikan seorang pemrogram menggunakan minimal sebuah fungsi. Pembahasan lebih lanjut mengenai fungsi akan diterangkan kemudian. Yang sekarang coba ditekankan adalah kita menuliskan program utama kita didalam sebuah fungsi main(). 3. Komentar Komentar tidak pernah dicompile oleh compiler. Dalam C++ terdapat 2 jenis komentar, yaitu: Jenis 1 : /* Komentar anda diletakkan di dalam ini Bisa mengapit lebih dari satu baris */ Jenis 2 : // Komentar anda diletakkan disini ( hanya bisa perbaris ) 4.Tanda Semicolon Tanda semicolon “ ; ” digunakan untuk mengakhiri sebuah pernyataan. Setiap pernyataan harus diakhiri dengan sebuah tanda semicolon. 5. Mengenal cout(dibaca : Cout) Pernyataan cout merupakan sebuah objek di dalam C++, yang digunakan untuk mengarahkan data ke dalam standar output (cetak pada layar) Contoh : Tanda “ << “ merupakan sebuah operator yang disebut operator “penyisipan/peletakan” #include <iostream.h> void main() { cout << "Hai, Selamat Menggunakan C++"; }
  • 9.
    ~ 9 ~ II.LATIHAN A. Pembuatan File Program C++ 1. Jalankan program CodeBlocks 2. Klik menu File – New – Project 3. Pilih “Console Application” dan Klik tombol “Go” 4. Klik “Next”
  • 10.
    ~ 10 ~ 5.Pilih “C++”, kemudian klik “Next” 6. Isi kolom Project Title nama project, folder to create project in lokasi penyimpanan project (buat folder khusus di komputer masing-masing untuk Praktikum Algoritma dan Pemrograman) Project Filename nama project Resulting filename alamat lengkap project disimpan di dalam harddisk Kemudian klik “Next”.
  • 11.
    ~ 11 ~ 7.Pilih compiler yang akan digunakan (Pada praktikum ini menggunakan GNU GCC Compiler). Checklist “Create Debug Configuration” dan “Create Release Configuration”. Kemudian klik “Finish”. 8. Jika sudah klik Finish Code:Blocks akan membuat Project baru di dalam Workspace kita.
  • 12.
    ~ 12 ~ 9.Double Click file main.cpp, maka akan tampil code editor. Secara default isi dari main.cpp adalah aplikasi Hello World 10. Untuk menjalankan program tersebut klik icon berwarna hijau berikut:
  • 13.
    ~ 13 ~ 11.Jika tidak ada kesalahan maka akan tampil terminal sebagai output dari program tersebut 12. Namun jika ada kesalahan maka Code:Blocks akan menampilkan daftar kesalahan yang mungkin terjadi. Contoh, misalkan simbol titik-koma (;) pada baris ke-3 dihilangkan, maka CodeBlocks akan menampilkan pesan kesalahan seperti berikut: B. Proses Debugging pada CodeBlocks Debugging adalah proses melacak kode langkah demi langkah (step by step) sehingga dapat diketahui di mana letak kesalahan dalam program dan dapat diketahui sebab program tidak berjalan dengan benar. Kesalahan dalam membuat program bisa terjadi karena kesalahan logika atau algoritmanya, dan kesalahan penulisan sintaks. CodeBlocks telah menyediakan perangkat untuk melakukan debugging pada menu “Debug”. Dengan debugger memungkinkan programmer menghentikan program sementara dan melihat (watch) apa yang terjadi. 1. Jalankan CodeBlocks dan buat project baru dengan nama “Test Debugging”, 2. Buka main.cpp dan ganti kode default-nya dengan kode di bawah ini: 3. Klik menu Debug – Step Into, atau bisa juga dengan menekan tombol Shift+F7. Selanjutnya CodeBlocks akan menjalankan secara langkah demi langkah dari program yang ditulis. #include <iostream.h> using namespace std; int main() { int x=5, y=2, z; z = x + y; cout << z << end1; return 0; }
  • 14.
    ~ 14 ~ 4.Untuk melihat nilai dari variable, buka jendela Watches dengan cara klik menu Debug – Debugging windows – Watches 5. Pada langkah ini program mendefinisikan variable x, y, dan z, serta compiler memberikan nilai acak untuk ketiga variable tersebut. 6. Tekan Shift+F7 (step into) untuk melanjutkan ke langkah berikutnya. Pada langkah ini nilai variable x dan y telah terisi. 7. Tekan Shift+F7 untuk melanjutkan ke langkah berikutnya. #include <iostream.h> using namespace std; int main() { int x=5, y=2, z; z = x + y; cout << z << end1; return 0; } #include <iostream.h> using namespace std; int main() { int x=5, y=2, z; z = x + y; cout << z << end1; return 0; } #include <iostream.h> using namespace std; int main() { int x=5, y=2, z; z = x + y; cout << z << end1; return 0;
  • 15.
    ~ 15 ~ 8.Tekan Shift+F7 untuk melanjutkan ke langkah berikutnya. 9. Tekan Shift+F7, program menuju ke akhir baris dari fungsi main. Variabel telah dihapus dari memori 10. Tekan Shift+F7, program selesai di eksekusi Tekan Shift+F7, program exit. #include <iostream.h> using namespace std; int main() { int x=5, y=2, z; z = x + y; cout << z << end1; return 0; }
  • 16.
    ~ 16 ~ BAB2 Translasi Pseudocode ke Struktur Bahasa C++ Tujuan : 1. Mahasiswa dapat memahami variabel, record, I/O, assignment dan operator. 2. Mahasiswa dapat melakukan translasi pseudocode ke struktur bahasa C++. I. DASAR TEORI Pseudocode merupakan kode yang mirip dengan bahasa pemrograman. Pseudocode berasal dari kata Pseudo yang berarti imitasi, mirip atau menyerupai dan code yang berarti instruksi program. Pseudocode terdiri dari tiga bagian, yaitu judul, kamus (deklarasi), dan algoritma. Ketiga bagian pada pseudocode tersebut dapat ditranslasikan ke bentuk bahasa C++ dengan cara sebagai berikut: A. Judul Berisi nama program dan spesifikasi program dengan struktur pada pseudocode sebagai berikut: Program Nama_Program { Penjelasan terkait variable input, proses, dan/atau variable output yang digunakan pada algoritma. Diawali dan diakhiri dengan tanda kurung kurawal } Hasil translasi ke bentuk Bahasa C++: // Program Nama_Program /* Penjelasan terkait variable input, proses, dan/atau variable output yang digunakan pada algoritma. Diawali dan diakhiri dengan tanda kurung kurawal */ Judul pada pseudocode ditranslasikan ke dalam Bahasa C++ sebagai sebagai komentar atau keterangan. Komentar merupakan bagian dari program yang tidak dieksekusi. Komentar bisa ditulis dengan dua cara, yaitu: • Single Line Penulisan komentar didahului dengan menuliskan simbol //. Komentar hanya bisa dituliskan pada baris dimana simbol tersebut dituliskan. • Multi Line Penulisan komentar didahului dengan menuliskan simbol /* dan diakhiri dengan menuliskan */. Komentar bisa dituliskan pada semua baris yang berada di antara kedua simbol tersebut.
  • 17.
    ~ 17 ~ Logika:boolean Angka : integer Pecahan: real Huruf : char Kata : string bool Logika ; int Angka ; real Pecahan ; char Huruf ; string Kata ; B. Kamus Berisi pendefinisian tipe data dan/ atau pendeklarasian variabel, konstanta, dan fungsi/ prosedur yang digunakan pada bagian algoritma dengan struktur pada pseudocode sebagai berikut : Variabel : Tipe_Data Hasil translasi ke bentuk Bahasa C++ : Tipe_Data Variabel; Contoh: Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya selalu tetap, nilai dari suatu variabel bisa diubah-ubah sesuai kebutuhan. Untuk memperoleh nilai dari suatu variabel digunakan pernyataan penugasan (assignment statement), yang mempunyai sintaks sebagai berikut. variabel = ekspresi ; Nama dari suatu variabel dapat ditentukan sendiri oleh pemrogram dengan aturan sebagai berikut. 1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf. Bahasa C ++ bersifat case-sensitive artinya huruf besar dan kecil dianggap berbeda. Jadi antara nim, NIM dan Nim dianggap berbeda. 2. Tidak boleh mengandung spasi. 3. Tidak boleh mengandung simbol-simbol khusus, kecuali garis bawah (underscore). Yang termasuk simbol khusus yang tidak diperbolehkan antara lain : $, ?, %, #, !, &, *, (, ), -, +, =, dsb. 4. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.
  • 18.
    ~ 18 ~ Contohpenamaan variabel yang benar : NIM, a, x, nama_mhs, f3098, f4, nilai, budi, dsb. Contoh penamaan variabel yang salah : %nilai_mahasiswa, 80mahasiswa, rata-rata, ada spasi, penting!, dsb. Tipe data dapat dikelompokkan menjadi atas dua macam, yaitu tipe data dasar dan tipe data bentukan. 1. Tipe Data Dasar Dalam C++ terdapat beberapa jenis tipe data dasar yang digolongkan ke dalam tipe bilangan bulat (integer), bilangan riil (floating-point), tipe logika (boolean), tipe karakter/teks (character/ string). a. Tipe Bilangan Bulat Yaitu untuk data-data angka yang tidak mengandung angka di belakang koma. Tipe data yang termasuk kategori ini adalah: Tabel 1 Tipe Bilangan Bulat Tipe Dasar Keterangan Char Menyatakan sebuah karakter seperti A, f, 9. Ukuran memori 1 byte. Jangkauan nilai -128 hingga +127. Int Menyatakan bilangan bulat. Ukuran memori 2 byte. Jangkauan nilai -32768 hingga +32767. Long Menyatakan bilangan bulat namun jumlahnya nilainya lebih banyak dari pada biasanya, contohnya pada long int yaitu 2147483648 – 2147483647. Ukuran memory 4 byte. Short Menyatakan bilangan bulat namun dengan nilai yang normal, contohnya pada short int yaitu antara -32768 - 32767. b. Tipe Bilangan Rill Yaitu untuk data-data angka yang mengandung angka di belakang koma. Tipe data yang termasuk kategori ini adalah: Tabel 2 Tipe Bilangan Riil Tipe Dasar Keterangan Float Menyatakan bilangan real dengan ketelitian rendah (7 digit). Ukuran memory 4 byte. Jangkauan nilai 3,4E-38 hingga 3,4E38 Double Menyatakan bilangan real dengan ketelitian tinggi (15 digit). Ukuran memory 8 byte. Jangkauan nilai 1.7E-308 hingga 1.7E308 Long double Menyatakan bilangan real dengan ketelitian tinggi (19 digit). Ukuran memory 10 byte. Jangkauan nilai 3.4E-4932 hingga 1.1E4932.
  • 19.
    ~ 19 ~ c.Tipe data Boolean Boolean adalah salah satu tipe data yang memiliki dua pilihan, yaitu True (1) atau False (0). Tipe data ini biasanya digunakan untuk memberikan kepastian dan memastikan kebenaran dari sebuah operasi atau kondisi program. 2. Tipe Data Bentukan Merupakan tipe yang dibentuk dari tipe dasar seperti tipe struktur, yaitu suatu tipe data yang merupakan kumpulan dari tipe data lainnya. Struktur terdiri dari data yang disebut field. Field - field tersebut digabungkan menjadi satu tujuan untuk kemudahan dalam operasi. Algoritma Berisi langkah - langkah penyelesaian dari program seperti pembacaan input, assigment (penugasan), dan menampilkan output dengan struktur pseudocode sebagai berikut. 1. Pembacaan Input input (variable) Hasil translasi ke bentuk Bahasa C++ : cin >> variable ; Contoh: input (nama) cin >> variable ; cin adalah perintah yang digunakan untuk menerima standar input (masukan) pada C++. Stream ini dihubungkan dengan operator overloaded operator extraction (>>) lalu diikuti dengan variabel penyimpan data. Contoh di atas maksudnya adalah user diminta memasukkan nama menggunakan keyboard yang akan ditampung oleh variabel nama. Setelah masukkan diberikan, tekan tombol ENTER. 2. Assignment (Penugasan) variable ← nilai atau ekspresi Hasil translasi ke bentuk Bahasa C++ : variable = nilai atau ekspresi ;
  • 20.
    ~ 20 ~ Contoh: a  10 Hasil  a + b a = 10; Hasil = a + b; Penugasan digunakan untuk mengeset suatu variabel dengan suatu nilai. Penugasan dapat dilakukan secara langsung dengan nilai tertentu seperti ditunjukkan pada contoh pertama atau secara tidak langsung dengan menggunakan suatu ekspresi seperti pada contoh kedua. 3. Menampilkan Output output (variable) Hasil translasi ke bentuk Bahasa C++ : cout << variable ; Contoh : output (“Hello”) output (nama) cout << “Hello”; cout << nama; cout adalah perintah yang digunakan untuk menampilkan hasil pada layar monitor. Stream ini dihubungkan dengan operator overloaded << (sepasang tanda “less than”). Contoh pertama akan memunculkan tulisan Hello di layar monitor, sedangkan contoh kedua akan memunculkan nilai yang tersimpan pada variabel nama di layar monitor. Hasil translasi pseudocode ke dalam bentuk Bahasa C++ dapat dijalankan dengan menambahkan preprocessor directive dan fungsi main() pada struktur Bahasa C++ seperti berikut. //Tempat judul #preprocessor directive int main() { //Tempat Kamus //Tempat Algoritma return 0; }
  • 21.
    ~ 21 ~ Preprocessordirective adalah baris pada program yang didahului dengan tanda pagar (#). Preprocessor selalu dijalankan terlebih dahulu pada saat proses kompilasi terjadi. Salah satu preprocessor directive adalah include yang memiliki bentuk umum : #include <nama_library> Baris tersebut akan menginstruksikan pada kompiler untuk memanggil library berupa header file ke dalam program. Header file adalah file dengan ekstensi .h yang di dalamnya terdapat instruksi C++, contoh : Fungsi main () adalah fungsi yang wajib ada pada struktur Bahasa C++ karena fungsi ini menjadi titik awal dan titik akhir eksekusi program. Tanda { pada awal fungsi menyatakan awal tubuh fungsi dan sekaligus awal eksekusi program, sedangkan tanda } di akhir fungsi merupakan akhir tubuh fungsi dan sekaligus adalah akhir eksekusi program. Perintah return 0 digunakan untuk menyatakan hasil keluaran pada fungsi main() adalah 0 dan sekaligus menyatakan bahwa program berakhir dengan normal. Contoh untuk dicoba pada praktikum: Berikut hasil translasi pseudocode ke dalam struktur Bahasa C++ secara lengkap. (a) Pseudocode iostream.h : di dalamnya memuat perintah I/O standar seperti cin dan cout
  • 22.
    ~ 22 ~ //JUDUL /************************************************ ProgramPenjumlahan Program ini digunakan untuk melakukan penjumlahan *************************************************/ #include <iostream> using namespace std; int main() { //KAMUS int a,b; int hasil; //ALGORITMA a = 10; cout << a << " + "; cin >> b; hasil = a + b; cout << "Hasil = " << hasil << endl; return 0; } (b) Struktur Bahasa C++ II. LATIHAN Diberikan pseudocode seperti berikut : Program Konversi_Suhu { Program untuk mengkonversi suhu dari celcius ke satuan yang lain (Fahrenheit, Reamur, dan Kelvin Fahrenheit = (9/5)* Celcius + 32 Reamur = (4/5)* Celcius Kelvin = Celcius + 273 } KAMUS : Celcius : integer Fahrenheit : real Reamur : real Kelvin : integer ALGORITMA : input (Celcius) Fahrenheit = (9/5)* Celcius + 32 Reamur = (4/5)*Celcius Kelvin = Celcius output (Celcius + " = " + Fahrenheit + " = " + Reamur + " = " + Kelvin)
  • 23.
    ~ 23 ~ Pertanyaan: •Translasikan pseudocode berikut ke dalam struktur Bahasa C++! • Bagaimana hasilnya outputnya? • Lakukan analisa step by step per baris sehingga dapat diperoleh hasil tersebut dengan proses debugging! III. TROUBLESHOOTING Perhatikan kode program berikut. //JUDUL /************************************************ Program Mengitung Rata-rata Program untuk menghitung rata-rata dari tiga buah bilangan yagn nilainya diinputkan oleh user dan hasil rata-ratanya kaan ditampilkan pada layar monitor *************************************************/ #include <iostream> using namespace std; int main() { //KAMUS int angka1, angka2, angka3; float jumlah; int 2rata; //ALGORITMA cout << "Masukkan angka pertama = "; cin >> angka1; cout << "Masukkan angka kedua = "; cin >> angka2; cout << "Masukkan angka ketiga = "; cin >> angka3; jumlah = angka1 + angka2 + angka3; 2rata = jumlah/3; cout << "Rata-rata = " << 2rata << endl; return 0; } Pertanyaan: ● Ada berapa kesalahan dari program di atas dan sebutkan apa saja kesalahan dari program di atas? ● Mengapa kesalahan tersebut dapat terjadi? ● Bagaimana cara penyelesaiannya?
  • 24.
    ~ 24 ~ IV.TUGAS 1. Buatlah flowchart dan pseudocode untuk menghitung luas permukaan tabung dengan ketentuan sebagai berikut : • Nilai jari-jari diambil dari dua digit terakhir NIM • Nilai tinggi ditentukan oleh use melalui input keyboard 2. Translasikan ke dalam struktur Bahasa C++ sehingga hasil outputnya menjadi seperti pada gambar berikut: Catatan : - Tambahkan identitas diri (NAMA dan NIM) di baris paling atas - Kode program cukup di-screenshot (tidak perlu ditulis ulang) - Hasil output di-screenshot 3. Tunjukkan hasil translasi pseudocode ke dalam struktur Bahasa C++ baris demi baris dan lakukan analisa step by step per baris tersebut dengan proses debugging sehingga hasil yang diperoleh bisa terbukti secara perhitungan manual! Catatan : Pada setiap penjelasan translasi pseudocode ke dalam struktur Bahasa C++ dan analisa step by step per baris, proses debugging pada Codeblocks dapat dimasukkan dengan screenshot
  • 25.
    ~ 25 ~ Assignment2 Assignment 1 Assignment 3 BAB 3 Konstruksi Dasar Runtutan (Sequence) I. DASAR TEORI Salah satu konstruksi dasar yang digunakan untuk membangun sebuah algoritma adalah Runtutan (Sequence). Sebuah runtutan terdiri dari satu atau lebih assignment (penugasan) yang dikerjakan secara berurutan. Jika digambarkan dalam bentuk flowchart, konstruksi dasar runtutan dapat digambarkan sebagai berikut. Assignment digunakan untuk mengeset suatu variabel dengan suatu nilai. Assignment dapat dilakukan secara langsung dengan nilai tertentu atau secara tidak langsung dengan menggunakan suatu ekspresi. Pada Modul 1 sudah dijelaskan bahwa assignment (penugasan) memiliki struktur pseudocode sebagai berikut. variable ← nilai atau ekspresi Hasil translasi ke bentuk Bahasa C++: variable = nilai atau ekspresi Contoh: a  10 Hasil  a + b a = 10; Hasil = a + b; Nilai adalah besaran dari tipe data yang terdefinisi (tipe dasar atau tipe bentukan). Nilai dapat berupa data yang disimpan di dalam variabel atau konstanta seperti pada contoh pertama.
  • 26.
    ~ 26 ~ Ekspresimerupakan transformasi nilai menjadi keluaran yang dilakukan melalui perhitungan (komputasi) seperti pada contoh kedua. Ekspresi terdiri dari operan dan operator. Operan adalah objek yang dioperasikan dan operator adalah simbol yang digunakan untuk memanipulasi operan, seperti +, -, *, div, mod. Beberapa operator yang dapat digunakan untuk membentuk suatu ekspresi adalah sebagai berikut: A. Operator Aritmatika Operator Deskripsi Contoh + Penjumlahan (Add) n + m - Pengurangan (Subtract) n - m * Perkalian (Multiply) n * m / Pembagian (Divide) n / m % Sisa Pembagian Integer (Modulus) n % m ~ Negasi (Negate) ~m Tabel 3 Operator Aritmatika Operator +, -, *, /, dan % membutuhkan dua operan. Pada contoh, m dan n berlaku sebagai operan. Berbeda halnya dengan operator negasi (~), operator tersebut hanya membutuhkan satu buah operan, dikenal juga dengan unary operator. Cara lain penulisan dengan menggunakan operator aritmatika: m = m + n m += n m = m - n m -= n m = m * n m *= n m = m / n m /= n m = m % n m %= n
  • 27.
    ~ 27 ~ Contohprogram untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int m, n; m = 27; n = 5; cout << "m + n = " << m + n << endl; cout << "m - n = " << m - n << endl; cout << "m x n = " << m * n << endl; cout << "m / n = " << m / n << endl; cout << "m % n = " << m % n << endl; cout << "~m = " << ~m << endl; return 0; } Contoh Program 1 04 B. Operator Naik dan Turun (Increment dan Decreament) Operator Diskripsi ++ Increament (Naik) -- Decreament (Turun) Tabel 4 Operator Naik dan Turun Operator naik dan turun juga termasuk unary operator, yaitu operator dengan satu buah operan. Operator tersebut dapat diletakkan sebelum operan ataupun setelah operan. Contoh: Operator pre-increment dan post-increment memiliki akibat yang sama, yaitu menambah nilai satu pada m dan memasukkan nilai tersebut kembali ke m (m=m+1). Hal yang sama juga terjadi pada operator pre-decrement dan post-decrement yang memberikan akibat yang sama, yaitu mengurangi nilai satu dari n (n=n-1). Tetapi bila digunakan sebagai sub-ekspresi, operator post- increment dan pre-increment ataupun pre-drecreament dan post-decreament menunjukkan hasil yang berbeda. --m (pre-decreament) m-- (post-decreament) ++m (pre-increament) m++ (post-increament)
  • 28.
    ~ 28 ~ Contohprogram untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int m=66, n; n = ++m; cout << "m = " << m << ", n = " << n << endl; n = m++; cout << "m = " << m << ", n = " << n << endl; cout << "m = " << m++ << endl; cout << "m = " << m << endl; cout << "m = " << ++m << endl; return 0; } Output: Penjelasan: 1. Dalam assignment yang pertama, m adalah pre-increment, menaikkan nilainya menjadi 67, yang selanjutnya dimasukkan ke n. 2. Dalam assignment kedua, m adalah post-increment, sehingga 67 dimasukkan dahulu ke n baru kemudian nilai m-nya dinaikkan, itu sebabnya mengapa nilai m = 68 dan n = 67. 3. Dalam assignment ketiga, m adalah post-increment, sehingga nilai m ( = 68 ) ditampilkan dahulu ( ke layar ) baru kemudian nilai m dinaikkan menjadi 69. 4. Dalam assignment ke-empat, m adalah pre-increment, sehingga nilai m dinaikkan dahulu menjadi 70 baru kemudian ditampilkan ke layar. C. Operator Bitwise Seluruh operator bitwise hanya bisa dikenakan pada operan bertipe data int atau char, yang terdapat pada tabel tersebut. Operator Diskripsi Contoh << Geser n bit ke kiri ( left shift ) m << n >> Geser n bit ke kanan ( right shift ) m >> n & Bitwise AND m & n | Bitwise OR m | n ^ Bitwise XOR m ^ n ~ Bitwise NOT ~m
  • 29.
    ~ 29 ~ Berikutini diberikan tabel kebenaran untuk operator logika: AND OR XOR A B P A B P A B P 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 Contoh Program untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int m, n; m = 12; n = 2; cout << "m >> n = " << (m>>n) << endl; cout << "m << n " << (m<<n) << endl; cout << "m & n = " << (m&n) << endl; cout << "m | n = " << (m|n) << endl; cout << "m ^ n = " << (m^n) << endl; cout << "~m = " << (~m) << endl; return 0; } D. Operator Logika Operator logika digunakan untuk menghubungkan dua atau lebih ungkapan menjadi sebuah ungkapan berkondisi benar atau salah (true atau false). Operator Deskripsi Contoh = = Sama dengan m == n != Tidak sama dengan m != n > Lebih besar m > n < Lebih kecil m < n >= Lebih besar atau sama dengan m >= n <= Lebih kecil atau sama dengan m <= n && logic AND (m<100) && (m>80) || logic OR (m>100) || m<0) ! logic NOT !(m == n) P = A operator B
  • 30.
    ~ 30 ~ Contohuntuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int m, n; cout << "Masukan nilai m = "; cin >> m; cout << "Masukan nilai n = "; cin >> n; cout << "m = n --> " << (m==n) << endl; cout << "m != n --> " << (m!=n) << endl; cout << "m > n --> " << (m>n) << endl; cout << "m < n --> " << (m<n) << endl; cout << "m >= n --> " << (m>=n) << endl; cout << "m <= n --> " << (m<=n) << endl; return 0; } II. LATIHAN Tentukan nilai akhir dari variabel A dan B dari algoritma berikut: Pertanyaan: • Lakukan analisa step by step per baris sehingga dapat diperoleh hasil tersebut sehingga diperoleh hasil tersebut!
  • 31.
    ~ 31 ~ III.TROUBLESHOOTING Perhatikan kode program berikut. #include <iostream> using namespace std; int main() { int a=10, b=5, c=2; int d; d = a/b*c+a; cout << "Nilai d = " << d << endl; return 0; } Pertanyaan: Nilai variabel d yang diinginkan sebenarnya adalah 24, tapi jika program di atas dijalankan maka akan didapat hasil yang berbeda. Dengan melakukan analisa pada baris 9 (line – 9) program tersebut, jawablah: ● Penulisan rumus yang benar pada program ● Jelaskan jawaban anda dengan melakukan perhitungan secara manual step-by- step sehingga didapat hasil tersebut! IV. TUGAS Misalkan X, Y, dan Z adalah peubah bertipe boolean, X bernilai true, Y bernilai false, dan Z bernilai true,tentukan hasil dari: Operasi logika Hasil (X and Y) or Z ? X and (Y or Z) ? Not (X and Z) ? (Y Xor Z) and Y ? • Buatlah dalam satu flowchart dan satu pseudocode! • Tunjukkan translasi dari pseudocode ke bentuk C++! • Tunjukkan hasil output-nya! • Lakukan analisis baris per baris sehingga diperoleh hasil tersebut.
  • 32.
    ~ 32 ~ BAB4 Konstruksi Dasar Pemilihan (Selection) I. DASAR TEORI Selain runtutan (sequence), konstruksi dasar lain yang dapat digunakan untuk membangun sebuah algoritma adalah pemilihan (selection) yang berfungsi untuk mengendalikan/mengontrol arah dari sebuah proses. Dengan kata lain, konstruksi dasar pemilihan digunakan untuk memilih langkah apa yang harus diambil/dilakuka n selanjutnya apabila memenuhi sebuah kondisi pada langkah sebelumnya. Dengan adanya pemilihan tersebut, maka program seolah-olah dapat mempunyai pikiran bercabang karena mampu mengambil keputusan selanjutnya berdasarkan kondisi tertentu. Oleh karena itu, konstruksi dasar pemilihan sering disebut juga dengan percabangan atau pengambilan keputusan. Sebuah kondisi pada pemilihan terdiri dari operasi logika yang hanya bernilai true – false dan dikatakan terpenuhi jika menghasilkan nilai true dari operasi logika tersebut. Pada Modul 2, sudah disampaikan terkait operator yang dapat digunakan untuk operasi logika seperti ditunjukkan pada tabel berikut. Operator Deskripsi Contoh = = Sama dengan m == n != Tidak sama dengan m != n > Lebih besar m > n < Lebih kecil m < n >= Lebih besar atau sama dengan m >= n <= Lebih kecil atau sama dengan m <= n && logic AND (m<100) && (m>80) || logic OR (m>100) || m<0) ! logic NOT !(m == n) Review Operator Logika: #include <iostream> using namespace std; int main() { int m, n; cout << "Masukan nilai m = "; cin >> m; cout << "Masukan nilai n = "; cin >> n; cout << "m = n --> " << (m==n) << endl; cout << "m != n --> " << (m!=n) << endl;
  • 33.
    ~ 33 ~ IF(kondisi) THEN Proses/instruksi ENDIF cout << "m > n --> " << (m>n) << endl; cout << "m < n --> " << (m<n) << endl; cout << "m >= n --> " << (m>=n) << endl; cout << "m <= n --> " << (m<=n) << endl; return 0; } Apakah hasil dari masing- masing operasi logika pada kode program di atas? Konstruksi dasar pemilihan dapat dibagi menjadi empat jenis, yaitu pemilihan tunggal, pemilihan ganda, dan pemilihan majemuk (lebih dari dua), dan pemiliha n bersarang. A. Pemilihan Tunggal Pemilihan tunggal digunakan untuk menjalankan proses yang ada pada satu kondisi saja. Jika kondisi terpenuhi (bernilai true) maka proses yang ada di dalam kondisi tersebut akan dijalankan dan jika kondisi tidak terpenuhi (bernilai false), maka tidak akan ada proses yang dijalankan (proses tersebut dilewati). Bentuk flowchart untuk pemilihan tunggal adalah sebagai berikut: Sedangkan bentuk pseudocode untuk pemilihan tunggal adalah sebagai berikut. Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut. if (kondisi) { Proses/instruksi; }
  • 34.
    ~ 34 ~ Contohuntuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int usia; cout << "Berapa Usia Anda? "; cin >> usia; if (usia<17) { cout << ”Anda tidak boleh menonton bioskop” << end1; } return 0; } Identifikasi kode program: - Apa yang terjadi ketika memasukkan angka 10 dan angka 35? - Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam kondisi tersebut? B. Pemilihan Ganda Pemilihan ganda digunakan untuk menjalankan proses yang ada pada salah satu kondisi dari kemungkinan dua kondisi yang ada. Jika kondisi pertama terpenuhi (bernilai true), maka hanya proses yang ada di kondisi pertama saja yang akan dijalankan, sedangkan proses yang ada di kondisi kedua akan dilewati. Namun sebaliknya, jika kondisi pertama tidak terpenuhi (bernilai false), maka proses pada kondisi pertama yang akan dilewati dan proses yang ada pada kondisi kedua yang akan dijalankan. Bentuk flowchart untuk pemilihan ganda adalah sebagai berikut: Sedangkan bentuk pseudocode untuk pemilihan ganda adalah sebagai berikut.
  • 35.
    ~ 35 ~ Hasiltranslasi ke struktur Bahasa C++ adalah sebagai berikut. IF (kondisi) THEN Proses/instruksi-1 ELSE Proses/instruksi-2 ENDIF if (kondisi) { Proses/instruksi-1; } else { Proses/instruksi-2; }
  • 36.
    ~ 36 ~ Contohuntuk dicoba pada praktikum: Identifikasi kode program: - Apa yang terjadi ketika memasukkan angka 100000 dan 5000? - Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam setiap kondisi tersebut? C. Pemilihan Majemuk Pemilihan majemuk digunakan untuk menjalankan proses yang ada pada salah satu kondisi dari banyak kondisi yang ada. Jika kondisi pertama terpenuhi (bernila i true), maka hanya proses yang ada di kondisi pertama saja yang akan dijalanka n, sedangkan proses yang ada di kondisi yang lain akan dilewati. Namun, jika kondisi pertama tidak terpenuhi (bernilai false), maka kondisi berikutnya akan diperiksa sampai diperoleh kondisi yang diminta terpenuhi dan proses yang ada pada kondisi tersebut akan dijalankan, sedangkan proses yang ada di kondisi yang lain akan dilewati. Bentuk flowchart untuk pemilihan majemuk adalah sebagai berikut:
  • 37.
  • 38.
    ~ 38 ~ if(kondisi-1) { Proses/instruksi-1; } else if (kondisi-2) { Proses/instruksi-2; } else if (kondisi-3) { Proses/instruksi-3; } ………… else if (kondisi-m) { Proses/instruksi-m; } else { Proses/instruksi-n; } Sedangkan bentuk pseudocode untuk pemilihan majemuk adalah sebagai berikut. Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut. IF (kondisi-1) THEN Proses/instruksi-1 ELSE IF (kondisi-2) THEN Proses/instruksi-2 ELSE IF (kondisi-3) THEN Proses/instruksi-3 …………. ELSE IF (kondisi-m) THEN Proses/instruksi-m ELSE Proses/instruksi-n ENDIF
  • 39.
    ~ 39 ~ Contohprogram untuk dicoba pada praktikum: Identifikasi kode program: - Apa yang terjadi ketika memasukkan angka 150000, 50000, 30000, dan 10000? - Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam setiap kondisi tersebut? Selain menggunakan struktur IF – ELSE IF – ELSE, pemilihan majemuk juga dapat dilakukan dengan menggunakan struktur SWITCH – CASE sebagai alternatifnya. Namun, struktur SWITCH – CASE hanya dapat digunakan untuk kondisi yang membandingkan sama atau tidak (= =), tidak dapat digunakan untuk kondisi yang membandingkan >, >=, <, atau <=. Selain itu, struktur SWITCH – CASE hanya tergantung pada satu variabel saja dan kondisi yang diperiksa harus berupa data integer karakter atau boolean. Oleh karena itu, tidak semua bentuk IF – ELSE IF – ELSE dapat diubah menjadi SWITCH-CASE, tetapi semua bentuk SWITCH – CASE dapat diubah menjadi bentuk IF – ELSE IF – ELSE. Bentuk pseudocode untuk pemilihan majemuk dengan menggunakan struktur SWITCH – CASE adalah sebagai berikut.
  • 40.
    ~ 40 ~ Hasiltranslasi ke struktur Bahasa C++ adalah sebagai berikut. SELECT CASE (variabel) CASE Konstanta-1: Proses/Instruksi-1; CASE Konstanta-2: Proses/Instruksi- 2; …………. CASE Konstanta-m: Proses/Instruksi-m; CASE ELSE: Proses/Instruksi- n END SELECT switch (variabel) { case konstanta-1: Proses/Instruksi- 1; break; case konstanta-2: Proses/Instruksi- 2; break; ……………… case konstanta-m: Proses/Instruksi-m; break; default: Proses/Instruksi-n; break; }
  • 41.
    ~ 41 ~ Contohprogram untuk dicoba pada praktikum: Identifikasi kode program: - Apa yang terjadi ketika memasukkan angka 1 dan 10? - Kondisi apa yang menentukan pemilihan tersebut dan proses apa yang ada di dalam kondisi tersebut?
  • 42.
    ~ 42 ~ D.Pemilihan Bersarang Pemilihan bersarang terjadi ketika struktur pemilihan juga terdapat pada instruksi yang ada di dalam suatu kondisi pemilihan. Dengan kata lain, terdapat struktur IF di dalam struktur IF sebelumnya (nested if). Jika kondisi IF sebelumnya (kondisi 1) terpenuhi (bernilai true), maka struktur IF yang ada di dalamnya (kondisi 2) akan diperiksa dan instruksi di dalam kondisi 2 yang terpenuhi akan dijalankan. Bentuk flowchart untuk pemilihan bersarang adalah sebagai berikut: Sedangkan bentuk pseudocode untuk pemilihan majemuk adalah sebagai berikut: IF (kondisi-1) THEN IF (kondisi-2) THEN Proses/instruksi-11 ELSE Proses/instruk si-12 ENDIF ELSE Proses/instruksi-2
  • 43.
    ~ 43 ~ Hasiltranslasi ke struktur Bahasa C++ adalah sebagai berikut. Contoh untuk dicoba pada praktikum: if (kondisi-1) { If (kondisi-2) { Proses/instruksi- 11; } else { Proses/instruksi- 12; } } else { Proses/instruksi-2; }
  • 44.
    ~ 44 ~ Identifikasikode program: - Apa yang terjadi jika kedua input diisi dengan Y atau T untuk semua kemungkinan? - Bandingkan output yang dihasilkan dari kode program di atas dengan kode program berikut:
  • 45.
    ~ 45 ~ II.LATIHAN Buatlah kode program untuk menentukan jumlah hari dari suatu bulan berdasarkan flowchart berikut. Pertanyaan: Lakukan analisa step by step per baris berdasarkan inputan yang diberikan sehingga dapat diperoleh hasil! Mulai Nomor Urut Bulan Tahun Bulan = 1,3,5,7,8,10,12 Y Hari = 31 N Bulan = 4,6,9,11? Y Bulan = 2? Y Tahun Kabisat? Y N “Bulan tidak ada” N Hari Selesai Hari = 30 Hari = 29 Hari = 28
  • 46.
    ~ 46 ~ III.TROUBLESHOOTING Perhatikan kode program berikut. Pertanyaan: 1. Ketika kode program di atas dijalankan, program tidak dapat mengidentifika s i dengan benar nilai kecepatan yang diinputkan. Apa yang salah dengan hasil program tersebut? Mengapa demikian dan bagaimana seharusnya yang benar? 2. Perbaikan dapat dilakukan hanya dengan mengubah urutan yang ada di kode program tersebut tanpa menambahkan kode apapun. Bagaimana cara memperbaikinya agar program dapat berjalan dengan benar sesuai dengan yang seharusnya? 3. Tunjukkan kode program yang sudah diperbaiki dan hasil outputnya?
  • 47.
    ~ 47 ~ MasukanMasukanpemakaianpemakaian rekeningrekening listriklistrik :: 100100 Masukan pemakaian rekening listrik : 100 Biaya pemakaian : 100000 IV. TUGAS 1. Rancanglah sebuah program dengan pemilihan ganda, dimana dapat menentukan apakah sebuah Huruf yang dimasukan user termasuk Huruf Vokal atau Konsonan. Dengan tampilan output sebagai berikut: 2. Rancanglah sebuah program dengan pemilihan majemuk, untuk menentukan besarnya rekening listrik yang harus dibayar oleh seorang pelanggan PLN bila besarnya rekening listrik ditentukan dengan aturan sebagai berikut: Pemakaian Biaya Pemakaian <= 100kWh 100000 100 < Pemakaian <= 500 kWh 100000 + 1500 per kWh untuk setiap kelebihannya Pemakaian > 500 kWh 700000 + 200 per kWh untuk setiap kelebihannya Dengan tampilan output sebagai berikut: 3. Rancanglah sebuah program pemilihan bersarang (nested if) dengan menggunaka n struktur IF dan struktur SWITCH untuk mengidentifikasi biaya operasi suatu penyakit. Tabel penyakit dan biayanya tertera dalam table berikut: Nama Operasi Jenis Penyakit Biaya (1) Operasi Mata (1) Katarak Rp. 7.500.000 (2) Plus / Minus Rp. 5.000.000 (3) Silinder Rp. 4.000.000 (2) Operasi Jantung (1) Jantung Koroner Rp. 500.000.000 (2) Katup Jantung Rp. 350.000.000 (3) Otot Jantung Rp. 450.000.000 Masukan sebuah Huruf : U U adalah salah satu huruf vokal
  • 48.
    ~ 48 ~ <<MENU MENGHITUNG BIAYA OPERASI >> Hitung Biaya Operasi Mata Hitung Biaya Operasi Jantung Masukkan Pilihan Anda : 1 JENIS PENYAKIT MATA Katarak Plus/Minus Silinder Masukkan jenis penyakit mata : 3 Biaya Operasi Mata Silinder = Rp. 4.000.000 Program dalam bentuk menu pilihan dimana awalnya user memasukkan nomor operasinya lalu selanjutnya user memasukkan nomor penyakitnya, maka akan keluar jumlah biayanya. Dengan tampilan output sebagai berikut: Catatan:  Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program + hasil program  Variabel yang digunakan setiap praktikan tidak boleh sama
  • 49.
    ~ 49 ~ BAB5 Konstruksi Dasar Pengulangan (Repetition) I. DASAR TEORI Konstruksi dasar pengulangan (repetition) merupakan konstruksi dasar yang digunakan dalam suatu algoritma untuk menjalankan satu atau beberapa pernyataan/instruksi yang sama sebanyak beberapa kali. Secara umum, struktur flowchart dari konstruksi dasar pengulangan adalah sebagai berikut : Berdasarkan struktur flowchart tersebut, konstruksi dasar pengulangan terdiri dari tiga bagian, yaitu: - Kondisi pengulangan: berisi operasi logika untuk menentukan awal dan akhir dari suatu pengulangan. Selama kondisi masih terpenuhi (bernilai true), pengulangan dapat terus dilakukan. - Badan pengulangan: deretan instruksi yang akan diulang-ulang pelaksanaannya. Instruksi tersebut dapat berupa konstruksi dasar runtutan, konstruksi dasar pemilihan atau bahkan konstruksi pengulangan yang lain. - Pencacah (counter): suatu variabel yang digunakan untuk membatasi jumlah pengulangan yang dapat dilaksanakan. Nilai variabel perlu diatur bertambah (increament) atau berkurang (decreament) pada setiap pengulangan dan akan berhenti bertambah/berkurang jika nilainya sudah melebihi batas nilai akhir yang sudah ditentukan. Namun, pada beberapa kondisi tertentu, pencacah tidak diperlukan (opsional) karena pembatasan pengulangan tidak dilakukan oleh pencacah, melainkan oleh variabel dari suatu instruksi. Cou nter ← awal TO akh ir Badanloop Increament/ Decreament Proses/instruksi selanjutnya
  • 50.
    ~ 50 ~ Konstruksidasar pengulangan terdiri dari empat struktur, yaitu struktur For –To, struktur While – Do, struktur Do – While, dan struktur pengulangan bersarang. A. FOR - TO Struktur FOR – TO digunakan untuk melakukan pengulangan sejumlah kali yang telah dispesifikasi nilai awal dan nilai akhir/kondisi stop-nya. Dengan kata lain, jumlah pengulangan struktur FOR – TO sudah diketahui sebelumnya atau dapat ditentukan sebelum eksekusi program. Bentuk pseudocode untuk struktur FOR - TO adalah sebagai berikut. 1. Strukur FOR – TO Meningkat 2. Strukur FOR – TO Menurun Jika ditranslasikan ke struktur Bahasa C++ menjadi sebagai berikut. Keterangan: - [Counter] diisi dengan variabel yang berfungsi sebagai pencacah pengulangan - [Nilai Awal] dan [Nilai Akhir] diisi dengan nilai yang sudah ditentukan dimana [Nilai Akhir] ≥ [Nilai Awal] - [Increament/Decreament] diisi dengan operasi aritmatika (+, -, ×, /) untuk membuat nilai pada variabel [Counter] bertambah/berkurang. Pada pseudocode, [Increament/Decreament] tidak perlu dituliskan karena nilai pada variabel [Counter] diasumsikan selalu bertambah/berkurang satu secara otomatis pada setiap pengulangan. FOR [Counter] [Nilai Awal] TO [Nilai Akhir] DO Proses/instruksi {Badan Pengulangan} ENDFOR FOR [Counter] [Nilai Akhir] DOWNTO [Nilai Awal] DO Proses/instruksi {Badan Pengulangan} ENDFOR for ([Counter]=[Nilai Awal]; [Counter]<=[Nilai Akhir];[Increament/Decreament]) { Proses/instruksi; //Badan Pengulangan }
  • 51.
    ~ 51 ~ Contohprogram untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int counter; for (counter=0; counter<10; counter=counter+1) { cout << counter << " " << counter*counter << endl; } return 0; } Identifikasi kode program: - Apa nama variabel yang berfungsi sebagai [Counter]? - Berapa [Nilai Awal] dan [Nilai Akhir] pada pengulangan tersebut? - Operasi aritmatika apa yang digunakan pada [Increament/Decreament] dan berapa kenaikannya untuk setiap pengulangan? - Variasikan variabel [Counter], [Nilai Awal], [Nilai Akhir], dan [Increament/Decreament] kemudian amati apa yang terjadi pada hasilnya? - Ubah struktur FOR – TO meningkat di atas menjadi FOR – TO menurun dan amati perbedaannya! B. WHILE - DO Bentuk pseudocode untuk struktur WHILE – DO adalah sebagai berikut. [Counter] [Nilai awal] {Opsional} WHILE ([kondisi stop = TRUE]) DO Proses/instruksi {Badan Pengulangan} [Increament/Decreament] {Opsional} END WHILE
  • 52.
    ~ 52 ~ Hasiltranslasi ke struktur Bahasa C++ adalah sebagai berikut. Berbeda dengan struktur FOR – TO yang mempunyai nilai awal dan nilai akhir/kondisi stop, struktur WHILE – DO hanya mempunyai nilai akhir/kondisi stop saja. Namun, struktur WHILE – DO juga dapat ditambahkan dengan nilai awal sebagai inisialisasi, yaitu pada bagian sebelum masuk pada struktur WHILE – DO. Sebelum melakukan pengulangan, kondisi stop akan diperiksa terlebih dahulu apakah terpenuhi (bernilai true) atau tidak (bernilai false). Ketika kondisi tersebut masih terpenuhi, instruksi/proses yang ada di dalam badan pengulangan akan dikerjakan berulang kali sampai kondisi stopnya sudah tidak terpenuhi lagi. Jika dibandingkan dengan struktur FOR – TO, struktur WHILE – DO dapat digunakan sebaik penggunaan FOR – TO pada kasus-kasus dimana jumlah pengulangan sudah diketahui di awal program. Namun, struktur WHILE – DO memiliki keunggulan yang tidak dimiliki oleh FOR – TO, yaitu untuk kasus dimana jumla h pengulangannya tidak dapat ditentukan di awal sehingga Kondisi Stop tidak bergantung dari proses increament/decreament lagi. Pada kasus tersebut, struktur WHILE – DO dapat mengatasi Kondisi Stop tersebut melalui suatu proses/instruksi yang ada pada badan pengulangan. Contoh program untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int data; data = 0; while (data < 10) { cout << "Masukan nilai data:"; cin >> data; } data = 0; while (data < 10) { cout << data << endl; data++; } return 0; } [Counter] = [Nilai Awal] //Opsinal while ([kondisi stop = TRUE]) { Proses/instruksi; //Badan Pengulangan [Increament/Decreament]; //Opsional }
  • 53.
    ~ 53 ~ Identifikasikode program: - Dari dua pengulangan menggunakan struktur WHILE – DO tersebut, kapan pengulangan pertama akan berhenti dan kapan pengulangan kedua akan berhenti? - Manakah struktur WHILE – DO yang penggunaannya sebaik atau dapat digantikan dengan penggunaan FOR – TO? C. REPEAT - UNTIL Bentuk pseudocode untuk struktur REPEAT – UNTIL adalah sebagai berikut. Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut. Struktur REPEAT – UNTIL dapat dikatakan sebagai kebalikan dari kondisi WHILE – DO. Jika pada struktur WHILE – DO, Kondisi Stop dicek di awal pengulangan (sebelum Badan Pengulangan dijalankan), maka pada struktur REPEAT - UNTIL, Kondisi Stop akan dicek di akhir pengulangan (setelah Badan Pengulangan dijalankan sekali). Badan Pengulangan kembali dijalankan sampai Kondisi Stop tidak terpenuhi (Bernilai false). Dengan kata lain, perbedaan antara struktur REPEAT – UNTIL dan struktur WHILE – DO adalah Badan Pengulangan pada struktur REPEAT - UNTIL akan dijalankan minimal satu kali, sedangkan pada struktur WHILE – DO tidak akan pernah dilaksanakan bila kondisi stop pertama kali tidak terpenuhi (bernila i false). [Counter] [Nilai Awal] {Opsional} REPEAT Proses/instruksi {Badan Pengulangan} [Increament/Decreament] {Opsional} UNTIL ([Kondisi Stop = TRUE]) [Counter] = [Nilai Awal] //Opsional do { Proses/instruksi; //Badan Pengulangan [Increament/Decreament]; //Opsional } while ([Kondisi Stop = TRUE]);
  • 54.
    ~ 54 ~ Contohprogram untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int x, S; S = 0; x = -1; do { S = (S+1)/x; cout << "S = " << S << endl; cout << "x = " << x << endl; } while (x != -1); return 0; } Identifikasi kode program: - Variabel apa yang menentukan kondisi Stop pada kode program tersebut? - Berapa nilai awal dari Variabel tersebut dan kapan Pengulangan tersebut berhenti? - Jika nilai awal variabel sudah tidak memenuhi Kondisi Stop (bernilai false), mengapa tetap ada output dari pengulangan tersebut? Pengulangan Bersarang Pengulangan bersarang terjadi ketika terdapat struktur pengulangan di dalam struktur pengulangan sebelumnya (nested loop). Jika kondisi stop pada pengulangan sebelumnya (kondisi- 1) terpenuhi (bernilai true), maka Kondisi Stop pada pengulanga n di dalamnya (kondisi-2) akan diperiksa dan jika terpenuhi (bernilai true) maka instruksi/proses yang ada di dalamnya akan diulang sampai kondisi-2 tidak terpenuhi (bernilai false). Pengulangan Bersarang biasanya digunakan untuk data yang melibatkan koordinat baris dan kolom (dua dimensi) seperti matriks berikut: [ ] Terdapat kombinasi struktur pengulangan yang dapat digunakan, seperti kombinasi struktur yang sama (FOR – TO dengan FOR – TO, WHILE – DO dengan WHILE – DO, dan REPAT – UNTIL dengan REPEAT – UNTIL) dan kombinas i struktur yang berbeda (FOR – TO dengan WHILE – DO, FOR – TO dengan REPEAT - UNTIL, dan WHILE – DO dengan REPEAT – UNTIL). Bentuk pseudocode untuk Pengulangan Bersarang dengan kombinasi FOR – TO dengan FOR –
  • 55.
    ~ 55 ~ for([Counter1]=[Nilai Awal]; [Counter1]<=[Nilai Akhir];[Increament/Decreament]) { for ([Counter2]=[Nilai Awal]; [Counter2]<=[Nilai Akhir];[Increament/Decreament]) { Proses/instruksi; //Badan Pengulangan } } TO adalah sebagai berikut. Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut. Contoh program untuk dicoba pada praktikum: #include <iostream> using namespace std; int main() { int i, j; for (i=1; i<=5; i++) { for (j=0; j<=5; j++) { cout << "(" << i << "," << j << ") "; } } cout << endl; return 0; } Identifikasi kode program: - Hapus fungsi cout << endl yang terdapat pada baris ke-14 dan amati apa yang terjadi. Apa fungsi dari cout << endl tersebut? - Pada kombinasi dua FOR – TO di atas, struktur FOR – TO yang manakah yang menentukan baris dan yang manakah yang menentukan kolom? FOR [Counter1] [Nilai Awal] TO [Nilai Akhir] DO FOR [Counter2] [Nilai Awal] TO [Nilai Akhir] DO Proses/instruksi {Badan Pengulangan} ENDFOR ENDFOR
  • 56.
    ~ 56 ~ II.LATIHAN Buatlah kode program untuk menentukan bilangan yang diinputkan adalah bilangan prima atau bukan berdasarkan flowchart berikut. selesai Prima Counter = Counter + 1 Prima = 0 N Bilangan%Counter = 0? Counter <- 2 TO Bilangan Prima = 1 Bilangan mulai
  • 57.
    ~ 57 ~ Pertanyaan: Lakukan analisa algoritma untuk step by step per baris dan simpulkan bagaimana prinsip kerja dari menentukan suatu bilangan yang diinputkan apakah prima atau bukan berdasarkan flowchart dan kode program tersebut! III. TROUBLESHOOTING Kode Program berikut adalah kode program untuk mencari hasil pembagian dan sisa pembagian dengan cara melakukan pengurangan berturut-turut sampai sisa bagi kurang dari pembaginya. #include <iostream> using namespace std; int main() { int Bilangan, Pembagi, SisaBagi, HasilBagi; cout << "Masukan Bilangan : "; cin >> Bilangan; cout << "Masukan Pembagi : "; cin >> Pembagi; SisaBagi = Bilangan; HasilBagi = 0; while (SisaBagi >= Pembagi) { SisaBagi = SisaBagi - Pembagi; HasilBagi ++; } cout << "Hasil Bagi : " << HasilBagi << endl; cout << "Sisa Bagi : " << SisaBagi << endl; return 0; } Pertanyaan: • Kode program tersebut dapat dijalankan dengan baik menggunakan struktur WHILE – DO. Dengan mengidentifikasi [Counter], [Nilai Awal], [Nilai Akhir], [Increament/Decreament] pada program di atas, apakah pengulangan dengan struktur WHILE – DO di atas dapat digantikan dengan struktur pengulangan yang lain? • Jika bisa, struktur pengulangan apa yang dapat menggantikan struktur WHILE – DO tersebut dan tunjukkan bagaimana kode programnya! Jika tidak bisa, jelaskan alasannya mengapa!
  • 58.
    ~ 58 ~ Masukkannilai N = 6 Output: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 IV. TUGAS 1. Rancanglah sebuah program pengulangan dengan mengunakan struktur WHILE - DO untuk menghitung hasil pangkat suatu bilangan dengan cara melakuka n penjumlahan berturut-turut seperti contoh berikut. 2. Rancanglah sebuah program pengulangan dengan menggunakan struktur DO - WHILE membuat menu dapat dijalankan berulang-ulang dengan contoh output seperti berikut. 3. Rancanglah sebuah program pengulangan bersarang dengan menggunakan kombinasi dua struktur FOR – TO untuk menampilkan output sebagai berikut. Input Bilangan: 4 Input Pencacah: 3 Hasil Pangkat: 64 MENU Ulang Keluar Pilihan : 1 MENU Ulang Keluar Pilihan : 1 MENU Ulang Keluar Pilihan : 2
  • 59.
    ~ 59 ~ Catatan: -Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program+hasil program - Variabel yang digunakan setiap praktikan tidak boleh sama
  • 60.
    ~ 60 ~ BAB6 Larik (Array) I. DASAR TEORI Larik adalah struktur data di memori yang terdiri dari sekumpulan elemen bertipe sama. Karena seluruh elemen larik bertipe sama, maka nilai yang disimpan oleh setiap elemen juga harus bertipe sama. Larik umumnya digunakan ketika terdapat sejumlah data yang perlu disimpan sementara untuk diproses selanjutnya. Keuntunga n menggunakan larik adalah dapat menghindari penggunaan nama-nama peubah yang banyak hanya untuk data dengan tipe yang sama dan proses yang sama. Contohnya adalah ketika terdapat lima buah data yang akan diproses. Jika tidak menggunak an larik, maka akan dibutuhkan lima buah variabel untuk menampung masing- mas ing nilai data tersebut seperti data1, data2, data3, data4, dan data5. Namun, jika menggunakan larik, maka variabel yang dibutuhkan hanya satu, yaitu data. Hal yang perlu diperhatikan dalam menggunakan/mendeklarasikan larik pada suatu program adalah jumlah elemennya karena jumlah elemen larik harus sudah terdefinisi dari awal dan jumlahnya tidak dapat diubah, ditambah atau dikurangi selama pelaksanaan program. Namun, walaupun jumlah elemen larik sudah ditentukan dari awal, ada kemungkinan tidak semua elemen digunakan. Banyaknya elemen larik yang digunakan disebut dengan ukuran efektif larik, sedangkan jumlah elemen larik yang sudah ditentukan disebut dengan ukuran maksimal larik. Contohnya adalah ketika larik A sudah ditentukan sebanyak 100 elemen, tetapi ketika program dijalankan, hanya 70 elemen, makan 70 elemen tersebut disebut ukuran efektif larik dan 100 elemen disebut dengan ukuran maksimal larik. Suatu larik dapat dideklarasikan ke dalam larik satu dimensi atau larik multidimensi (dua dimensi, tiga dimensi sampai n-dimensi). A. LARIK SATU DIMENSI Sebuah larik satu dimensi dapat dibayangkan sebagai sekumpulan kotak yang terurut seperti pada gambar berikut. A 1 2 3 4 5 6 158 157 162 169 170 170 Gambar di atas menunjukkan sebuah larik satu dimensi yang bernama A yang mempunyai enam buah elemen dengan tipe integer. Bentuk pseudocode untuk pendeklarasian larik satu dimensi adalah sebagai berikut. <NamaLarik> : array [<idx_awal>…<idx_akhir>] of <tipe_data>
  • 61.
    ~ 61 ~ A: array [1..6] of integer Int A [6] ; Jika ditranslasikan ke dalam struktur Bahasa C++, nilai dari <idx_awal> dan <idx_akhir> didefinisikan dengan <ukuran maksimal> yang diperoleh dari nilai (<idx_akhir> - <idx_awal> + 1) sehingga menjadi sebagai berikut. Contoh berdasarkan gambar di atas: Setiap elemen di dalam larik yang ada di antara <idx_awal> sampai <idx_akhir> dapat dimanipulasi secara langsung dengan mengakses indeksnya. Pada pseudocode, indeks elemen larik satu dimensi dituliskan dengan satu subscript seperti berikut. Contoh: Pada struktur Bahasa C++, nilai <idx_awal> selalu bernilai 0 sehingga ketika pseudocode tersebut ditranslasikan ke Bahasa C++, maka indeks elemen lariknya harus dikurangi dengan nilai awal. Aturan penulisannya adalah sebagai berikut: Berdasarkan contoh pseducocode di atas, indeks elemen yang diakses adalah 4 dengan nilai <idx_awal> adalah 1 maka indeks elemen larik pada Bahasa C++ menjadi 4-1 = 3 sehingga penulisannya menjadi sebagai berikut: Contoh untuk dicoba pada praktikum: <tipe_data> <NamaLarik> [<ukuran_maksimal>] Ai{Mengakses elemen ke-i dari larik bernama A} A4 {Mengakses elemen ke-4 dari larik bernama A} A [i - <idx_awal>] A [3]
  • 62.
    ~ 62 ~ FOR(i 1 TO 6) DO Proses manipulasi Ai ENDFOR for (i = 0;i <= 5;i++) { Proses manipulasi A[i]; } Identifikasi kode program: - Apa <NamaLarik> pada kode program di atas? Apa <Tipe_Data>-nya? - Berapa ukuran efektif dan ukuran maksimum lariknya? - Berapa nilai <idx_awal> dan <idx_akhir>-nya? - Pada kode program tersebut, indeks larik ke-berapa yang nilainya ditampilkan pada output program? - Variasikan indeks larik tersebut kemudian tentukan nilai untuk masing-masing - elemen larik tersebut! - Dari mana masing- masing elemen larik tersebut mempunyai nilai? Selain dapat dimanipulasi secara terpisah dengan mengakses masing-mas in g indeksnya, elemen larik juga dapat dimanipulasi secara beruntun dengan menggunak an struktur pengulangan karena elemen larik selalu tersusun secara beruntunan. Pengaksesan indeks dilakukan dengan menempatkan variabel <counter> pada struktur pengulangan sebagai indeks larik. Bentuk pseudocode untuk memanipulasi elemen larik dengan menggunakan struktur pengulangan FOR – TO adalah sebagai berikut: Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut: Contoh: FOR (<counter> <idx_awal> TO <idx_akhir>) DO Proses manipulasi <NamaLarik><counter> ENDFOR for (<counter> = <idx_awal>;<counter> <= <idx_akhir>;<counter>++) { Proses manipulasi <NamaLarik>[<counter>]; }
  • 63.
    ~ 63 ~ Identifikasikode program: - Modifikasi kode program pertama dengan menggunakan struktur FOR - TO sehingga semua nilai dapat ditampilkan pada output program! - Selanjutnya, modifikasi kembali kode program tersebut dengan menggunaka n struktur FOR – TO sehingga nilai dari setiap elemen larik dapat ditentukan dari user! Contoh untuk dicoba pada praktikum: Identifikasi kode program: Bagaimana proses yang terjadi sehingga diperoleh hasil seperti pada output program?
  • 64.
    ~ 64 ~ A: array [1..4][1..7] of integer Int A [4][7]; B. LARIK MULTIDIMENSI Salah satu contoh larik multidimensi yang banyak digunakan adalah larik dua dimensi. Sebuah larik dua dimensi dapat dibayangkan dengan sebuah tabel seperti pada gambar berikut. A 1 2 3 4 5 6 7 1 2 3 4 Untuk dapat mendeklarasikan dan memanipulasi larik dua dimensi, dibutuhkan dua buah indeks/subscript. Indeks yang pertama digunakan untuk menunjukkan baris dan indeks yang kedua digunakan untuk menunjukkan kolom. Bentuk pseudocode untuk pendeklarasian larik dua dimensi adalah sebagai berikut: Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut: Contoh: Bentuk pseudocode untuk memanipulasi elemen larik dua dimensi dengan indeks pada baris ke-i dan kolom ke-j adalah sebagai berikut: Dengan konsep yang sama seperti larik satu dimensi, hasil translasi ke struktur Bahasa C++ adalah sebagai berikut. 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 <NamaLarik> : array [<baris_awal>…<baris_akhir>] [<kolom_awal>…<kolom_akhir>] of <tipe_data> <tipe_data> <NamaLarik> [Ukuran_Baris][Ukuran_Kolom] ; Ai ,j {Mengakses elemen pada baris ke-i dan kolom ke-j dari larik bernama A}
  • 65.
    ~ 65 ~ A2,5A [1] [4] for (<counter_baris> = <baris_awal>;<counter_baris><= <baris_akhir>;<counter_baris>++) { for (<counter_kolom> = <kolom_awal>;<counter_kolom> <= <kolom_akhir>;counter_kolom>++) { Proses manipulasi<NamaLarik>[counter_baris][]counter_kolom]; } } Contoh: Elemen larik dua dimensi dapat dimanipulasi secara beruntun dengan menggunakan struktur pengulangan bersarang dimana struktur pengulangan luar digunakan sebagai indeks baris dan struktur pengulangan dalam digunakan sebagai indeks kolom. Bentuk pseudocode untuk menggunakan struktur pengulangan bersarang dengan kombinasi dua FOR – TO adalah sebagai berikut. Hasil translasi ke struktur Bahasa C++ adalah sebagai berikut. FOR (<counter_baris> <baris_awal> TO <baris_akhir>) DO FOR (<counter_kolom> <kolom_awal> TO <kolom_akhir>) DO Proses manipulasi <NamaLarik><counter_baris>,<counter_kolom> ENDFOR ENDFOR A [i – baris_awal] [j – kolom_awal];
  • 66.
    ~ 66 ~ Contohprogram untuk dicoba pada praktikum: Identifikasi kode program: - Apa <NamaLarik> pada kode program di atas? - Berapa ukuran maksimal dan ukuran efektif pada larik tersebut? - Pada kode program tersebut, indeks larik ke-berapa yang nilainya ditampilka n pada output program? - Ubah ukurannya menjadi matriks 6 x 2 dan modifikasi kode program tersebut dengan menggunakan struktur FOR - TO sehingga semua nilai dapat ditampilkan pada output program dengan ukuran matriks 6 x 2! - Selanjutnya, modifikasi kembali kode program tersebut dengan menggunaka n struktur FOR – TO sehingga nilai dari setiap elemen larik dapat ditentukan dari user! FOR (i 1 TO 6) DO FOR (j 1 TO 6) DO Proses manipulasi Ai ENDFOR ENDFOR
  • 67.
    ~ 67 ~ Contohuntuk dicoba pada praktikum: Identifikasi kode program: - Operasi matriks apa yang dihasilkan dari kode program tersebut? - Bagaimana proses yang terjadi sehingga diperoleh hasil seperti pada output program? Pada dasarnya, untuk mendeklarasikan dan memanipulasi sebuah larik n-dimensi, dibutuhkan n buah indeks dan n struktur pengulangan.
  • 68.
    ~ 68 ~ Contohprogram untuk dicoba pada praktikum: Identifikasi kode program: • Berapa dimensi dari larik yang dideklarasikan pada kode program tersebut? • Berapa ukuran dari larik tersebut? • Variabel apa saja yang digunakan sebagai indeks dari larik tersebut pada struktur pengulangan? • Gantilah datanya untuk membentuk inisial masing- masing!
  • 69.
    ~ 69 ~ JUDUL: PROGRAMMengurutkan_Bilangan { Program untuk mengurutkan 5 bilangan yang diinputkan user secara menaik ( ascending) dengan ketentuan: Input : 5 buah bilangan bulat yang diinputkan user secara acak Output : 5 buah bilangan bulat yang sudah urut menaik (ascending) } KAMUS : i : integer j: integer Temp: integer X : array [1..5] of integer ALGORITMA : FOR (i 1 TO 5) DO input (Xi) ENDFOR I 0 FOR (i 1 TO 5) DO FOR (j i+1 TO 5) DO IF (Xi > Xj) THEN Temp = Xi Xi = Xj Xj = Xi ENDIF ENDFOR ENDFOR FOR (i 1 TO 5) DO output (Xi) ENDFOR II. LATIHAN Buatlah kode program untuk mengurutkan lima buah bilangan dengan pseudocode berikut. Pertanyaan: • Lakukan analisa step by step per baris dari kode program yang dibuat! • Simpulkan bagaimana prinsip kerja dari algoritma untuk mengurutkan bilangan tersebut berdasarkan pseudocode dan kode programnya!
  • 70.
    ~ 70 ~ III.TROUBLESHOOTING Perhatikan kode program untuk menampilkan Inisial pada contoh kode program yang terakhir. Dengan mengganti cout << endl pada baris 25 dengan cout << “ “ serta memodifikasi urutan struktur perulangan dan urutan variabel yang digunakan sebagai indeks larik, dapat diperoleh hasil output sebagai berikut. Pertanyaan: • Tunjukkan kode program sesudah dimodifikasi dan output programnya (gunakan inisial masing- masing)! • Sebutkan pada bagian/baris mana saja yang perlu diubah (selain baris 25) dan jelaskan mengapa bagian/baris tersebut yang diubah? • Simpulkan bagaimana prinsip kerjanya sehingga dapat menghasilkan output seperti itu!
  • 71.
    ~ 71 ~ IV.TUGAS 1. Rancanglah sebuah program untuk membaca sebuah larik satu dimensi berukuran 20 elemen dengan tipe karakter „a‟ – „z‟, kemudian menghitung frekuensi kemunculan tiap karakter tersebut. Contoh output adalah sebagai berikut: Masukkan karakter ke-1 : a Masukkan karakter ke-2 : l Masukkan karakter ke-3 : g Masukkan karakter ke-4 : o Masukkan karakter ke-5 : r Masukkan karakter ke-6 : i Masukkan karakter ke-7 : t Masukkan karakter ke-8 : m Masukkan karakter ke-9 : a Masukkan karakter ke-10 : p Masukkan karakter ke-11 : e Masukkan karakter ke-12 : m Masukkan karakter ke-13 : r Masukkan karakter ke-14 : o Masukkan karakter ke-15 : g Masukkan karakter ke-16 : r Masukkan karakter ke-17 : a Masukkan karakter ke-18 : m Masukkan karakter ke-19 : a Masukkan karakter ke-20 : n Output: a = 4 e = 1 g = 2 i = 1 l = 1 m = 3 n = 1 o = 2 p = 1 r = 3 t = 1
  • 72.
    ~ 72 ~ Masukkannilai untuk matriks 3 x 1: 12 20 7 Masukkan nilai untruk matriks 1 x 3: 4 10 3 Hasil perkalian matriks: 48 12036 80 20060 28 7021 2. Rancanglah sebuah program perkalian silang (cross product) antara matriks 3 x 1 dengan matriks 1 x 3 sehingga diperoleh matriks 3x3. Catatan:  Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program + hasil program  Variabel yang digunakan setiap praktikan tidak boleh sama
  • 73.
    ~ 73 ~ BAB7 Fungsi dan Prosedur I. DASAR TEORI Fungsi dan prosedur adalah suatu bagian dari program (subprogram) yang digunakan untuk menjalankan suatu tugas tertentu dan letaknya terpisah dari program yang menggunakannya. Suatu fungsi atau prosedur dipanggil/digunakan dengan tujuan khusus, yaitu untuk mengerjakan suatu tugas tertentu dimana tugas tersebut dapat berupa tugas input (menyimpan hasil ke dalam suatu larik atau file) dan/atau output (menampilkan hasil di layar monitor) ataupun melakukan penyeleksian dan perhitungan. Fungsi dan prosedur banyak digunakan pada pemrograman dengan tujuan: a. Program menjadi terstruktur sehingga mudah dipahami dan mudah dikembangkan. Dengan memisahkan langkah-langkah detail ke satu atau lebih fungsi- fungsi (modularisasi), maka fungsi utama (main()) menjadi lebih pendek, jelas, dan mudah dimengerti. b. Dapat mengurangi pengulangan (duplikasi) kode. Langkah-langkah program yang sama dan dipakai berulang-ulang di program dapat dituliskan sekali saja secara terpisah dalam bentuk fungsi- fungsi. Selanjutnya, bagian program yang membutuhkan langkah-langkah ini tidak perlu selalu menuliskannya, tetapi cukup memanggil fungsi- fungsi tersebut. c. Mempermudah dalam menemukan kesalahan (debug) program dan menghemat ukuran program. Pada flowchart, keduanya memiliki bentuk yang sama, yaitu: Walaupun keduanya sering dianggap sama, prosedur dan fungsi mempunyai struktur yang sedikit berbeda dalam penggunaannya. A. FUNGSI Di dalam matematika, fungsi biasanya dituliskan seperti pada contoh berikut. ( ) ( ) <Nama Fungsi/ Prosedur>
  • 74.
    ~ 74 ~ <Tipe_Data><Nama_Fungsi> (<Tipe_Data> <Parameter_Input>) { //DEKLARASI (JIKA ADA) <Tipe_Data> <Variabel_Lokal>; //ALGORITMA, berisi Badan Fungsi return <Return_value>; } Pada kedua contoh di atas, f dan H adalah nama fungsi, sedangkan x dan y adalah parameter fungsi yang bersangkutan. Nilai yang dihasilkan oleh suatu fungsi bergantung pada masukan parameter. Misalkan: ( ) ( ) Di dalam pemrograman, fungsi tersebut dapat dideklarasikan menjadi subprogram tersendiri dengan struktur dalam bentuk pseudocode sebagai berikut. FUNCTION <Nama_Fungsi> (INPUT <Parameter_Input>:<Tipe_Data>) <Tipe_Data> {spesifikasi fungsi, menjelaskan apa yang dilakukan dan yang dikembalikan fungsi} DEKLARASI {semua variabel yang hanya digunakan di dalam fungsi (variabel lokal)} ALGORITMA {badan fungsi} ➔ Return value ENDFUNCTION Berdasarkan struktur tersebut, sebuah fungsi mempunyai struktur yang terdiri dari: 1) Bagian header, berisi nama fungsi, argumen (parameter input-nya beserta tipe data setiap parameter tersebut), tipe data dari nilai yang akan dihasilkan/ dikembalikan oleh fungsi dan spesifikasi tentang fungsi tersebut 2) Bagian deklarasi/ kamus, berisi pendeklarasian variabel yang hanya dapat digunakan pada fungsi tersebut (variabel lokal) 3) Badan fungsi, berisi instruksi-instruksi untuk menghasilkan return value (nilai yang akan di-output-kan/ dikembalikan oleh fungsi) dan tanda return () yang menunjuk pada nilai yang akan di-output-kan/ dikembalikan oleh fungsi. Jika ditranslasikan ke dalam struktur Bahasa C++, struktur fungsi menjadi sebagai berikut.
  • 75.
    ~ 75 ~ Contohdeklarasi fungsi pada pseudocode dan hasil translasi ke struktur Bahasa C++: Pendeklarasian fungsi tersebut dilakukan di bagian KAMUS/DEKLARASI UTAMA agar fungsi tersebut dapat diakses oleh subprogram yang lain ataupun oleh bagian ALGORITMA UTAMA. Fungsi diakses dengan cara memanggil namanya diikuti dengan urutan parameter aktualnya. Karena fungsi menghasilkan sebuah nila i, maka diperlukan sebuah peubah/variabel yang memiliki tipe data sama dengan tipe data fungsi untuk menampung nilai dari fungsi dipanggil tersebut. Cara pemanggila n fungsi dalam bentuk pseudocode adalah sebagai berikut. Hasil translasi ke dalam struktur Bahasa C++ adalah sebagai berikut. FUNCTION Persamaan_Kuadrat (input x: real) → real {Mengembalikan nilai f(x) = 2x 2 + 5x + 8} DEKLARASI {tida k ada} ALGORITMA → (2*x*x) + (5*x) + 8 ENDFUNCTION float Persamaan_Kuadrat (float x) { //DEKLARASI //tidak ada //ALGORITMA return (2*x*x) + (5*x) + 8; <Variabel> ← <Nama_Fungsi> (<Parameter>) <Variabel> = <Nama_Fungsi> (<Parameter>);
  • 76.
    ~ 76 ~ Contohpemanggilan fungsi dalam pseudocode dan hasil translasi dalam Bahasa C++: Selain itu, fungsi juga dapat langsung dimanipulasi oleh suatu instruksi seperti contoh berikut. Contoh program untuk dicoba pada praktikum: #include <iostream> using namespace std; int fungsi_kuadrat (int x , int y) { return (x*x)+(y*y); } int main() { int x1, x2; cout << "Masukan nilai x1 : "; cin >> x1; cout << "Masukan nilai x2 : "; cin >> x2; cout << "Hasil : " << fungsi_kuadrat(x1,x2) << endl; return 0; } Identifikasi kode program: - Apa <Nama_Fungsi> yang dideklarasikan pada kode program tersebut? Apa - <Tipe_Data> untuk nilai dikembalikan oleh fungsi tersebut? - Apa saja <Parameter_Input> yang ada dalam fungsi tersebut dan apa tipe datanya? - Adakah variabel lokal pada fungsi tersebut? Jika ada, sebutkan apa saja dan apa tipe datanya? - Pada baris ke-berapa fungsi tersebut dipanggil? Apakah fungsi dipanggil dengan cara menggunakan variabel atau langsung dimanipulasi? Modifikasi kode program tersebut Hasil Persamaan_Kuadrat (data) Hasil = Persamaan_Kuadrat (data) output (Persamaan_Kuadrat(data)) cout << Persamaan_Kuadrat(data);
  • 77.
    ~ 77 ~ agarfungsi dipanggil dengan cara yang satunya lagi! - Agar nilai yang dikembalikan oleh fungsi ketika dipanggil menjadi pecahan (real), bagian mana saja yang perlu diubah pada kode program tersebut! A. PROSEDUR Satu keterbatasan dari subprogram yang menggunakan struktur fungsi adalah hanya mampu menghasilkan satu buah nilai yang berarti fungsi hanya mengerjakan satu tugas saja. Jika terdapat lebih dari satu nilai yang harus dihasilkan/ dikembalikan, subprogram tersebut tidak elegan dituliskan dengan struktur fungsi. Untuk mengatasi permasalahan tersebut, subprogram dapat dideklarasikan dengan menggunakan struktur prosedur yang memiliki bentuk pseudocode seperti berikut. Berdasarkan struktur tersebut, prosedur memiliki struktur yang hampir sama dengan struktur fungsi, yaitu terdiri dari bagian header, bagian deklarasi/kamus, dan badan prosedur. Perbedaannya terletak pada bagian argumen yang ada di bagian header. Argumen pada struktur fungsi hanya terdiri dari parameter input saja, sedangkan argumen pada struktur prosedur dapat terdiri dari parameter input, parameter output, dan/atau parameter input/output. Hal tersebut membuat jumlah nilai yang dioutputkan dari struktur prosedur dapat lebih dari satu selama nilai tersebut dideklarasikan sebagai parameter output atau parameter input/output. Dalam Bahasa C++, istilah prosedur tidak dikenal, yang dikenal hanya fungs i saja. Namun, istilah prosedur dalam Bahasa C++ dapat dibentuk dari fungsi tanpa return value (void). Jika bentuk pseudocode dari struktur prosedur di atas ditranslasika n ke dalam struktur Bahasa C++, hasilnya sebagai berikut. PROCEDURE <Nama_Prosedur> (input <Parameter_Input>:<Tipe_Data >, output <Parameter_output>:<Tipe_Data >) { spesifikasi prosedur, menjelaskan keadaan awal dan keadaan akhir prosedur (efek netto)} DEKLARASI {semua variabel yang hanya digunakan di dalam prosedure (variabel lokal)} ALGORITMA {badan prosedur} ENDPROCEDURE void <Nama_Prosedur> (<Tipe_Data> <Parameter_Input>, <Tipe_Data> *<Parameter_Output>) { //DEKLARASI (JIKA ADA) <Tipe_Data> <Variabel_Lokal>; //ALGORITMA, berisi Badan Prosedur }
  • 78.
    ~ 78 ~ Contohdeklarasi prosedur pada pseudocode dan hasil translasi ke struktur Bahasa C++: Tanda pointer (*) pada parameter y menunjukkan bahwa parameter tersebut adalah parameter output atau parameter input/output. Tanda pointer tersebut harus selalu mengikuti parameter ketika diproses pada badan prosedur agar nilainya dapat dioutputkan. Sama seperti fungsi, prosedur juga dapat diakses dengan cara memanggi l namanya diikuti dengan urutan parameter aktualnya (jika ada) setelah prosedur tersebut dideklarasikan pada bagian DEKLARASI/KAMUS. Namun perbedaannya, pemanggilan prosedur tidak dapat langsung dimanipulasi. Selain itu, pemanggila n prosedur juga tidak memerlukan variabel karena prosedur tidak memiliki return value seperti struktur fungsi. Adapun cara pemanggilan prosedur dalam bentuk pseudocode adalah sebagai berikut. Jika ditranslasikan ke dalam struktur Bahasa C++, pemanggilan prosedur dapat dilakukan dengan cara sebagai berikut. Contoh pemanggilan prosedur dalam pseudocode dan Bahasa C++: PROCEDURE Persamaan_Kuadrat (input x: real, output y: real) {I.S. : Nilai x digunakan untuk menghitung nilai y F.S. : Nilai y diperoleh dari persamaan 2*x*x + 5*x + 8} DEKLARASI {tidak ada} ALGORITMA y (2*x*x) + (5*x) + 8 ENDPROCEDURE void Persamaan_Kuadrat (float x, float *y) { //DEKLARASI //tidak ada //ALGORITMA (*y) = (2*x*x) + (5*x) + 8; } <Nama_Prosedur> (<Parameter_Input>, <Parameter_Output>) Persamaan_Kuadrat (data, hasil) Persamaan_Kuadrat (data, &hasil); <Nama_Fungsi> (<Parameter_Input>, &<Parameter_Output>);
  • 79.
    ~ 79 ~ Tanda“&” digunakan untuk memanggil parameter yang memiliki tanda pointer (*) pada pendeklarasian, dalam hal ini adalah parameter output atau parameter input/output. Contoh untuk dicoba pada praktikum: #include <iostream> using namespace std; void Biaya_SPP (int Angkatan, int Jml_SKS, int *Total_Biaya) { int Biaya_1SKS; if (Angaktan >= 2016) { Biaya_1SKS = 100000; } else if (Angkatan >=2013 && Angkatan <= 2015) { Biaya_1SKS = 75000; } else { Biaya_1SKS = 50000; } (*Total_Biaya) = Biaya_1SKS * Jml_SKS; } int main() { int SPP; Biaya_SPP (2017,24,&SPP); cout << "Total Biaya SPP : " << SPP << endl; return 0; } Identifikasi kode program: - Apa <Nama_Prosedur> yang dideklarasikan pada kode program tersebut? - Apa saja <Parameter_Input> dan <Parameter_Output> yang ada dalam fungsi tersebut dan apa tipe datanya? - Adakah variabel lokal pada prosedur tersebut! Jika ada, sebutkan apa saja dan apa tipe datanya? - Pada baris ke-berapa prosedur tersebut dipanggil? - Berapa saja nilai yang diinputkan pada setiap pemanggilan prosedur tersebut dan berapa nilai yang dioutputkan? - Modifikasi kode program tersebut agar nilai yang diinputkan pada pemanggilan prosedur tersebut dapat ditentukan oleh user melalui keyboard! - Dapatkah subprogram tersebut diubah ke dalam struktur fungsi? Jika dapat, bagaimana
  • 80.
    ~ 80 ~ kodenya? B.FUNGSI DAN PROSEDUR TANPA PARAMETER Sebuah subprogram dapat dideklarasikan dengan struktur fungsi atau prosedur tanpa menggunakan parameter. Dengan kata lain, argumen pada struktur fungsi atau prosedur tersebut dapat dikosongkan. Pada fungsi dan prosedur tanpa parameter tersebut, output dapat diperoleh dari nilai yang sudah ditentukan atau diproses dari variabel global. Berbeda dengan variabel lokal yang hanya dapat digunakan oleh fungs i atau prosedur tersebut, variabel global dapat digunakan pada untuk semua fungsi dan prosedur, termasuk program utama. Perubahan nilai pada variabel global dari suatu fungsi atau prosedur akan berakibat juga pada hasil yang diperoleh fungsi atau prosedur lain yang menggunakan variabel global yang sama. Contoh program untuk dicoba pada praktikum: #include <iostream> using namespace std; int Jumlah, rerata; int Data[2] = {154,-37}; int inisialisasi () { return (0); } void cetak_informasi () { int TotalData = 2; cout << "Data ke-1 = " << Data[0] << endl; cout << "Data ke-2 = " << Data[1] << endl; cout << "Total jumlah = " << Jumlah << endl; rerata = Jumlah / Total Data; cout << "Rerata = " << rerata << endl; } int main() { Jumlah = inisialisasi(); cetak_informasi(); Jumlah = Data[0] + Data[1]; cetak_informasi(); return 0; } Identifikasi kode program: - Dari dua buah subprogram tanpa parameter tersebut, manakah subprogram yang outputnya sudah ditentukan dan manakah subprogram yang outputnya diperoleh dari variabel global?
  • 81.
    ~ 81 ~ -Apa saja <Variabel_Global> yang digunakan pada subprogram tersebut? - Ubah nilai dari <Variabel_Global> tersebut dan amati output yang dihasilka n pada kedua buah subprogram tersebut! C. FUNGSI DAN PROSEDUR REKURSIF Suatu fungsi dan prosedur dikatakan rekursif jika fungsi atau prosedur tersebut melakukan pemanggilan terhadap dirinya sendiri. Pemanggilan tersebut dapat berarti proses yang berulang yang tidak dapat diketahui kapan akan berakhir. Oleh karena itu, hal yang perlu diperhatikan dalam pembuatan rekursif adalah adanya pengkondis ian untuk membuat fungsi dan prosedur tersebut berhenti. Contoh program yang dapat menerapkan metode rekursif adalah program untuk menghitung nilai faktorial dari suatu bilangan. Contoh program untuk dicoba pada praktikum: #include <iostream> using namespace std; int faktorial (int bil) { if (bil == 0) { return 1; } else { return (bil*faktorial (bil-1)); } } int main() { int angka, hasil; cout << "Masukan angka batas faktorial : "; cin >> angka; hasil = faktorial (angka); cout << "Faktorial dari " << angka << " adalah " << hasil << endl; return 0; } Identifikasi kode program: - Apakah subprogram di atas menggunakan struktur prosedur atau fungsi? - Perhatikan pada baris ke-13 dari kode program di atas. Pada contoh di atas, kode untuk menghentikan fungsi tersebut ada pada baris ke-7-10 di mana apabila parameter inputnya bernilai 0, maka nilai yang dioutputkan adalah 1. Namun, jika parameter inputnya bukan 0, maka proses akan memanggil dirinya sendiri dengan parameter inputnya semakin menurun
  • 82.
    ~ 82 ~ JUDUL: PROGRAMNilai_Minimal { Program untuk mencari nilai minimal dari 5 bilangan yang diinputkan Input : 5 buah bilangan bulat yang diinputkan user secara acak Output : Mencetak bilangan yang terkecil dari 5 buah bilangan yang diinputkan } KAMUS : i : integer Kecil : integer X : array [1..5] of integer FUNCTION Cari_Minimal (input bil1:integer, bil2:integer) integer {Fungsi untuk mencari minimal dari dua buah bilangan} ALGORITMA: IF (bil1 < bil2) THEN bil1 ELSE bil2 ENDFUNCTION setiap dipanggil. - Sebagai ilustrasi program di atas, ketika program diinputkan dengan nilai 5, maka proses yang terjadi pada fungsi faktorial (5) adalah sebagai berikut. II. LATIHAN Buatlah kode program untuk mengurutkan lima buah bilangan dengan pseudocode berikut. 5 * faktorial (4) 5 * 4 * faktorial (3) 5 * 4 * 3 * faktorial (2) 4. 5 * 4 * 3 * 2 * faktorial (1) 5. 5 * 4 * 3 * 2 * 1 * faktorial (0) 6. 5 * 4 * 3 * 2 * 1 * 1 7. 5 * 4 * 3 * 2 * 1 8. 5 * 4 * 3 * 2 9. 5 * 4 * 6 10. 5 * 24 11. 120 Hasil akhir : 120
  • 83.
    ~ 83 ~ Pertanyaan: -Sebutkan variabel global yang digunakan pada kode program tersebut! - Sebutkan variabel lokal yang digunakan pada masing-masing fungsi tersebut, termasuk pada fungsi program utama (int main ())! - Lakukan analisa step by step per baris dari kode program yang dibuat! - Simpulkan bagaimana prinsip kerja dari algoritma untuk mengurutkan bilangan tersebut berdasarkan pseudocode dan kode programnya! III. TROUBLESHOOTING Perhatikan dan cobalah kode program berikut! Terdapat dua buah subprogram dengan struktur prosedur, yaitu insialisasi dan ChangeThem. Kedua subprogram tersebut berfungsi untuk mengganti nilai bilangan bulat dan pecahan. Dengan memodifikas i nilai bilangan bulat dan pecahan yang terdapat dalam subprogram dan memperhatika n efek yang dihasilkan, maka solusi untuk troubleshooting dapat diperoleh. #include <iostream> using namespace std; int bulat = 100; float pecahan = 27.5; void Inisialisasi (int i, float f) { i = 10; f = 94.2; cout << "Nilai Bilangan Bulat awal : " << i << endl; cout << "Nilai Pecahan awal : " << f << endl; } void ChangeThem (int i, float f) PROCEDURE Cetak_Minimal () ALGORITMA: Output (Kecil) ENDPROCEDURE ALGORITMA : FOR (i 1 TO 5) DO input (Xi) ENDFOR Kecil X1 FOR (i 1 TO 5) DO Kecil Cari_Minimal (Kecil,Xi) ENDFOR Cetak_Minimal ()
  • 84.
    ~ 84 ~ { i= 100; f = 27.5; cout << "Nilai BIlangan Bulat diganti : " << i << endl; cout << "Nilai Pecahan diganti : " << f << endl; } int main() { Inisialisasi (bulat,pecahan); ChangeThem (bulat, pecahan); cout << "Nilai Bilangan BUlat akhir : " << bulat << endl; cout << "Nilai Pecahan akhir : " << pecahan << endl; return 0; } Pertanyaan: • Apakah subprogram Inisialisasi dan ChangeThem benar-benar mempengaruhi nilai bilangan bulat dan pecahan? • Jika iya, jelaskan bagaimana subprogram tersebut dapat mempengaruhi nilai bilangan bulat dan pecahan pada subprogram? • Jika tidak, bagian mana yang sebenarnya mempengaruhi nilai bilangan bulat dan pecahannya? Perbaiki subprogram tersebut agar nilai bilangan bulat dan pecahan benar-benar dipengaruhi oleh subprogram! • Apakah subprogram dengan struktur prosedur pada kode program tersebut dapat diubah menjadi struktur fungsi? Jika dapat, tunjukkan kode subprogramnya! Jika tidak dapat, berikan alasannya! IV. TUGAS 1. Rancanglah sebuah program yang meminta input berupa jari-jari lingkaran dan kemudian menghitung luas dan keliling lingkaran a. Tanpa menggunakan struktur fungsi atau prosedur b. Menggunakan struktur fungsi atau prosedur: 1. Yang tidak memiliki parameter input dan output. 2. Yang memiliki parameter input dan output 3. Yang memiliki parameter input saja Contoh untuk tampilan dari program kalkulator adalah sebagai berikut.
  • 85.
    ~ 85 ~ 2.Rancanglah sebuah kalkulator sederhana untuk melakukan perhitungan aritmatika terhadap 2 bilangan. Gunakan fungsi atau prosedur untuk setiap operasi aritmat ika pada disediakan, yaitu penjumlahan, perkalian, pembagian, pengurangan, dan pangkat. Contoh untuk tampilan dari program kalkulator adalah sebagai berikut. Catatan: - Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program + hasil program - Variabel yang digunakan setiap praktikan tidak boleh sama Masukkan Jari-jari : 10 Luas : 314 Keliling: 62,8 KALKULATOR Penjumlahan Perkalian Pembagian Pengurangan Pangkat Masukkan Pilihan : 1 Bilangan pertama : 3 Bilangan kedua : 4 Hasil : 7
  • 86.
    ~ 86 ~ BAB8 Tipe Data Bentukan I. DASAR TEORI Dalam membuat program, kadangkala akan dihadapkan dengan struktur data yang tidak sederhana dan apabila hanya ditangani dengan data dasar saja, maka pemrogram akan kesulitan merumuskan komposisinya. Sebagai contoh, program yang akan dibuat melibatkan data tentang mahasiswa, maka untuk variabel mahasiswa akan sulit ditentukan tipe datanya karena pada mahasiswa terdapat beberapa elemen, yaitu nama, nomor induk mahasiswa, jenis kelamin, alamat, dan elemen-elemen lainnya. Tantangan berikutnya adalah bagaimana cara menyimpan data-data mahasiswa tersebut jika jumlah mahasiswa lebih dari satu? Tentunya hal ini akan sangat sulit jika harus diselesaikan dengan tipe data dasar saja. Oleh karena itu, diperlukan adanya suatu tipe data baru yang digunakan untuk menangani kasus di atas, yaitu dengan menggunak an tipe data bentukan. Tipe data bentukan merupakan suatu tipe data yang dirancang/dibentuk (dan diberi nama) dari beberapa elemen bertipe tertentu yang sudah dikenal. Jadi, di dalam tipe data bentukan akan terdapat elemen dengan tipe data dasar dan dapat juga terdapat tipe data bentukan lain yang telah didefinisikan sebelumnya. Tujuan digunakannya tipe data bentukan adalah supaya perancangan program mendapatkan suatu tipe data dimana seluruh komponennya secara keseluruhan memiliki makna semantik dan di dalamnya terdapat keterkaitan antar komponen. Pada data mahasiswa telah dijabarkan beberapa elemen yang ada, maka dengan menggunakan tipe data bentukan, perancang program dapat mendefinisikan ke dalam program. Tipe bentukan dapat dibedakan menjadi dua jenis, yaitu tipe data dasar yang diberi nama tipe baru (penamaan ulang tipe data dasar) dan tipe data terstruktur. A. PENAMAAN ULANG TIPE DATA DASAR Terkadang pemrogram ingin memberi nama baru terhadap tipe dasar yang sudah dikenal. Tujuannya supaya nama baru tersebut lebih mudah diinterpretasi oleh yang membaca teks algoritma. Struktur penamaan ulang dalam bentuk pseudocode adalah sebagai berikut. Tipe data dasar terdiri dari integer, real, char, dan string (Lihat Modul 1). Struktur penamaan ulang tersebut jika ditranslasikan ke dalam struktur Bahasa C++ menjadi sebagai berikut. TYPE <Nama_Baru> : <Tipe Data Dasar> typedef <Tipe Data Dasar> <Nama_Baru>;
  • 87.
    ~ 87 ~ Contohpenamaan ulang tipe data dasar integer menjadi tipe bernama Bulat dalam bentuk pseudocode dan hasil translasi pada struktur Bahasa C++: Tipe yang sudah diberi penamaan ulang tersebut selanjutnya dapat digunakan untuk menggantikan nama dari tipe data dasar untuk pendeklarasian variabel. Contoh penggunaan tipe data integer dengan nama baru Bulat untuk pendeklarasian variabel dalam bentuk pseudocode dan hasil translasinya pada C++ adalah sebagai berikut. Contoh untuk dicoba pada praktikum: Identifikasi kode program: - Apa saja <Tipe Data Dasar> yang diberi nama baru pada kode program di atas? - Apa <Nama_Baru> untuk tipe data dasar tersebut? - Ganti <Tipe Data Dasar>-nya menjadi real sehingga variabel yang diinputka n bisa berupa pecahan! - Tambahkan tipe data Huruf untuk mendeklarasikan variabel yang digunakan untuk menampung kalimat yang diinputkan oleh user dan kemudian dioutputkan pada layar monitor! B. TIPE DATA TERSTRUKTUR Tipe data terstruktur adalah tipe data yang berupa rekaman (record). Rekaman tersebut disusun oleh satu atau lebih field dimana tiap field adalah variabel untuk menyimpan data dengan tipe dasar tertentu atau tipe data bentukan lain yang sudah didefinisikan sebelumnya. TYPE Bulat : integer typedef int Bulat; Bil1 : Bulat Bulat Bil1;
  • 88.
    ~ 88 ~ Field1 Field 2 Field 3 … Field N Dalam bentuk pseudocode, sebuah tipe data terstruktur (record) dapat disusun sebagai berikut. Berdasarkan struktur tersebut, struktur record hampir seperti larik. Keduanya memiliki persamaan, yaitu sama-sama memiliki elemen. Namun, perbedaannya adalah jika pada larik, elemennya harus memiliki tipe data yang sama dan elemennya diakses tau diidentifikasi menggunakan indeks, sedangkan record memiliki elemen dengan tipe yang dapat berbeda-beda dan elemennya diakses atau diidentifikasi menggunak an identifier atau nama variabel. Jika ditranslasikan ke dalam struktur Bahasa C++, tipe data bentukan record memiliki struktur sebagai berikut. Contoh pembuatan tipe data bentukan record pada pseudocode dan hasil translasi ke struktur Bahasa C++ dengan nama record adalah Titik yang mempunyai elemen x dan y bertipe integer: Sama seperti pada penamaan ulang tipe data dasar, setelah tipe bentukan dibuat, selanjutnya tipe data tersebut dapat digunakan untuk mendeklarasikan suatu variabel. Contoh pendeklarasian variabel P dengan tipe data bentukan record bernama Titik dalam bentuk pseudocode dan Bahasa C++. typedef struct <Nama_Tipe> { <Tipe_Data 1> <Field 1>; <Tipe_Data 2> <Field 2>; ……. <Tipe_Data N> <Field N>; } TYPE Titik : RECORD < x : integer, y : integer > typedef struct { Int x; Int y; } Titik; TYPE <Nama_Tipe> : RECORD < <Field 1> : <Tipe_Data 1>, <Field 2> : <Tipe_Data 2>, ……. <Field N> : <Tipe_Data N> >
  • 89.
    ~ 89 ~ Variabelyang sudah dideklarasikan dengan tipe bentukan record tersebut selanjut nya dapat secara otomatis menggunakan elemen-elemen yang ada di dalam tipe bentukan tersebut. Pengaksesan elemen-elemen tersebut pada pseudocode dan Bahasa C++ dilakukan dengan cara yang sama, yaitu sebagai berikut. Pengakesan elemen dilakukan satu per satu dan masing-masing elemen dapat dioperasi layaknya variabel biasa. Contoh pengaksesan elemen x dan y pada tipe bentukan record bernama Titik melalui variabel P adalah sebagai berikut. Contoh untuk dicoba pada praktikum: Identifikasi kode program: - Apa <Nama_Tipe> untuk tipe data bentukan record yang dibentuk pada kode program tersebut? - Apa saja elemen yang ada di dalam tipe bentukan tersebut dan apa tipe datanya? - Variabel apa yang dideklarasikan dengan tipe bentukan tersebut? - Tambahkan satu variabel dengan tipe bentukan tersebut dan beri nilai pada masing- masing elemen tersebut! - Jumlahkan nilainya dengan variabel yang sudah dideklarasikan sebelumnya! P : Titik Titik P; <Variabel_Record>.<elemen 1> <Variabel_Record>.<elemen 2> …………….. <Variabel_Record>.<elemen N> P.x P.y
  • 90.
    ~ 90 ~ C.KOMBINASI TIPE DATA BENTUKAN DAN LARIK Sebuah larik dapat dideklarasikan dengan menggunakan tipe data bentukan. Hal ini berarti setiap indeks pada larik tersebut akan berisi elemen-elemen tipe data bentukan tersebut. Contoh untuk dicoba pada praktikum: Identifikasi kode program: - Apa <Nama_Tipe> untuk tipe data bentukan record yang dibentuk pada kode program tersebut? - Apa saja elemen yang ada di dalam tipe bentukan tersebut dan apa tipe datanya? - Variabel larik apa yang dideklarasikan dengan tipe bentukan tersebut? Berapa ukurannya? - Jika dipresentasikan dalam bentuk gambar maka setiap indeks larik akan tampak sebagai gambar. Apa artinya?
  • 91.
    ~ 91 ~ Padacontoh sebelumnya telah ditunjukkan bahwa di dalam sebuah elemen larik dapat diisi dengan suatu nilai yang memiliki tipe data bentukan. Selain itu, kondisi yang sebaliknya, yaitu memasukkan variabel bertipe larik menjadi salah satu atau beberapa elemen di dalam variabel yang memiliki tipe data bentukan, juga dapat dilakukan. Contoh program untuk dicoba pada praktikum:
  • 92.
    ~ 92 ~ Identifikasikode program: - Apa <Nama_Tipe> untuk tipe data bentukan record yang dibentuk pada kode program tersebut? - Apa saja elemen yang ada di dalam tipe bentukan tersebut dan apa tipe datanya? - Manakah yang termasuk dalam tipe larik? - Jika dipresentasikan dalam bentuk gambar maka setiap tipe data bentukan akan tampak sebagai gambar. Apa artinya? Jika kedua contoh tersebut digabungkan maka akan membentuk larik dari tipe data bentukan yang mengandung larik. D. TIPE DATA BENTUKAN DALAM FUNGSI DAN PROSEDUR Selain dapat dioperasikan dan dikombinasikan dengan larik, tipe data bentukan juga dapat digunakan pada subprogram dengan struktur fungsi atau prosedur, baik sebagai tipe data untuk return value maupun sebagai parameter. Pengaksesan variabel yang menggunakan tipe data bentukan tersebut pada subprogram pun hampir sama seperti pengaksesan variabel bertipe data bentukan yang dijelaskan sebelumnya.
  • 93.
    ~ 93 ~ Contohuntuk dicoba pada praktikum: Identifikasi kode program: - Dari subprogram pada kode program di atas, manakah yang menggunakan tipe data bentukan? Apa <Nama_Tipe>-nya? - Manakah yang menggunakan tipe data bentukan untuk return value dan - Manakah yang menggunakan tipe data bentukan untuk parameter? - Bagaimana subprogram tersebut mengoutputkan/mengembalikan nilai dari masing- masing
  • 94.
    ~ 94 ~ elemenpada tipe data bentukan melalui return value? - Bagaimana subprogram tersebut menginputkan dan mengoutputkan nilai masing- masing elemen yang ada pada tipe data bentukan melalui parameter? II. LATIHAN Buatlah kode program untuk membuat dan memanipulasi (tambah, cetak, cari, edit, dan hapus) database berdasarkan pseudocode berikut. JUDUL: PROGRAM Database_Mahasiswa { Program untuk membuat dan memanipulasi database yang berisi data mahasiswa Input : data mahasiswa berisi nama, NIM, dan umur. Maksimal data yang dapat diisi adalah 20 mahasiswa Output : data dapat ditambah, dicetak, dicari, diedit, dan dihapus } KAMUS : TYPE Mahasiswa: record < NIM : integer Nama : string Umur : integer > Mhs : array [0..19] of Mahasiswa Menu : integer i, idx, counter : integer Name : string PROCEDURE TambahOREditData (Output M:Mahasiswa) ALGORITMA: Input (M.Nama) Input (M.NIM) Input (M.Umur) ENDPROCEDURE PROCEDURE CetakData (Input M:Mahasiswa) ALGORITMA: Output (M.Nama) Output (M.NIM) Output (M.Umur) ENDPROCEDURE FUNCTION HapusData (input TotalData:integer) integer ALGORITMA: IF (TotalData = 0) then 0 ELSE (TotalData-1) ENDIF ENDFUNCTION
  • 95.
    ~ 95 ~ ALGORITMA: Counter 0 DO Output (“MENU”) Output (“1. Tambah Data”) Output (“2. Cetak Data”) Output (“3. Cari Data”) Output (“4. Edit Data”) Output (“5. Delete Data”) Output (“6. Keluar”) Input (Menu) SELECT CASE (Menu) CASE 1: IF (counter < 20) THEN TambahOREditData (Mhscounter) Counter counter + 1 ELSE Output (“Kuota sudah habis”) CASE 2: IF (counter ≤ 0) THEN Output (“Data Masih Kosong”) FOR (i 0 TO 19) DO CetakData (Mhsi) ENDFOR CASE 3: Input (Name) Idx 0 FOR (i 0 TO 19) DO IF (Mhsi.nama = Name) THEN CetakData (Mhsi) Idx idx + 1 ENDIF ENDFOR IF (idx = 0) THEN Output (“Data Tidak Ditemukan”) ENDIF CASE 4: Input (idx) IF (idx ≥ counter) THEN Output (“Data tidak ada”) ELSE CetakData (Mhsidx-1) TambahOREditData (Mhsidx-1) ENDIF CASE 5: counter HapusData (counter) CASE 6: Output (“Terima Kasih”) CASE ELSE: Output (“Tidak ada pilihan Menu”) ENDSELECT WHILE (Menu ≠ 6)
  • 96.
    ~ 96 ~ Pertanyaan: •Lakukan analisa step by step per baris dari kode program yang dibuat! • Simpulkan bagaimana prinsip kerja dari algoritma untuk menambah, mencetak, mencari, mengedit, dan menghapus data berdasarkan pseudocode dan kode programnya! III. TROUBLESHOOTING Kedua contoh yang ada pada kombinasi tipe data bentukan dan larik sehingga membentuk larik dari tipe bentukan yang mengandung larik. Jika digambarkan akan tampak sebagai berikut: Pertanyaan:  Tunjukkan pada kode program, bagian mana saja diubah atau digabungkan dari kedua program tersebut sehingga dapat menghasilkan output sebagai berikut IV. TUGAS 1. Buatlah sebuah database untuk suatu aplikasi tertentu menggunakan tipe data terstruktur dimana database tersebut dapat ditambahkan, diedit, dicari, dihapus, dan dicetak Catatan: - Perancangan terdiri dari notasi algoritma (pseudocode atau flowchart) dan kode program + hasil program - Database aplikasi yang dibuat oleh setiap praktikan tidak boleh sama Data ke-1 NIM : 1 Nama : Kiki Nilai ke-1 : 98 Nilai ke-2 : 98 Nilai ke-3 : 67 Data ke-2 NIM : 1 Nama : Hira Nilai ke-1 : 87 Nilai ke-2 : 67 Nilai ke-3 : 56 Data Mahasiswa 1 Kiki 98 98 67 2 Hira 87 67 56
  • 97.
    ~ 97 ~ BAB9 Rekursif I. DASAR TEORI Pengertian Algoritma Rekursif Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Fungsi ini akan terus berjalan sampai kondisi berhenti terpenuhi, oleh karena itu dalam sebuah fungsi rekursif perlu terdapat 2 blok penting, yaitu blok yang menjadi titik berhenti dari sebuah proses rekursi dan blok yang memanggil dirinya sendiri. Contoh konsep penggunaan Rekursif Masalah : Memotong Roti tawar tipis-tipis sampai habis Algoritma : 1. Jika roti sudah habis atau potongannya sudah paling tipis maka pemotongan roti selesai. 2. Jika roti masih bisa dipotong, potong tipis dari tepi roti tersebut, lalu lakukan prosedur 1 dan 2 untuk sisa potongannya. Contoh Fungsi Rekursif a. Fungsi pangkat b. Faktorial c. Fibonancy d. Menara Hanoi Fungsi Pangkat Menghitung 10 pangkat n dengan menggunakan konsep rekursif. Secara Notasi pemrograman dapat ditulis : 10 0 = 1 …………………………..(1 ) 10 n = 10 * 10 n-1 ..................................... ( 2 ) Contoh : 10 3 = 10 * 10 2 10 2 = 10 * 10 1 10 1 = 10 * 10 0 10 0 = 1 Faktorial 0! = 1 N! = N x (N-1)! Untuk N > 0 Secara notasi pemrograman dapat ditulis sebagai :
  • 98.
    ~ 98 ~ FAKT(0) = 1 .............................................. (1) FAKT (N) = N * FAKT (N-1).................................... (2) Contoh : FAKT(5) = 5 * FAKT(4) FAKT(4) = 4 * FAKT(3) FAKT(3) = 3 * FAKT(2) FAKT(2) = 2 * FAKT(1) FAKT(1) = 1 * FAKT(0) Misal : hitung 5!, maka dapat dilakukan secara rekursif dgn cara : 5! = 5 * 4! Secara rekursif nilai dari 4! dapat dihitung kembali dgn 4 * 3!, sehingga 5! Menjadi : 5! = 5 * 4 * 3! Secara rekursif nilai dari 3! dapat dihitung kembali dgn 3 * 2!, sehingga 5! Menjadi : 5! = 5 * 4 * 3 * 2! Secara rekursif nilai dari 2! dapat dihitung kembali dgn 2 * 1, sehingga 5! Menjadi : 5! = 5 * 4 * 3 * 2 * 1 = 120. Berikut ini adalah fungsi faktorial rekursif dari sebuah program. Fibonancy Deret Fibonancy : 0,1,1,2,3,5,8,13,......... Secara notasi pemrograman dapat ditulis sebagai : Fibo (1) = 0 & Fibo (2) = 1 ....................................... (1) Fibo (N) = Fibo (N-1) + Fibo (N-2) ................................. (2) Contoh : Fibo(5) = Fibo(4) + Fibo(3) Fibo(4) = Fibo(3) + Fibo(2) Fibo(3) = Fibo(2) + Fibo(1) II. LATIHAN 1 Akan dibuat program yang akan menerima sebuah bilangan bulat bil dan mencetak bilangan fibonaci yang ke-bil. Untuk menentukan bilangan fibonacci, dibuat sebuah fungsi dengan nama fibonacci. int faktorial (int a){ if(a==0||a==1) return 1; else return a*factorial(a-1); }
  • 99.
    ~ 99 ~ Ketiklahprogram berikut : III. LATIHAN 2 Membuat program untuk menghitung sebuah factorial. Ketiklah list program berikut ini: #include <iostream.h> long int fibonacci(int i) { //Mengirimkan bilangan yang ke-i dari barisan bilangan fibonacci. if ((i==2) || (i<=1)) { return 0; } else { return fibonacci(i-1)+fibonacci(i-2); } } int main() { int bil; char lagi; do{ cout << "Masukkan bilangan : "; cin >> bil; cout << "Fibonacci(" << bil << ") = " << fibonacci(bil); cout << "nCari lagi (y/t)? "; cin >> lagi; } while ((lagi=='y') || (lagi=='Y')); return 1; } #include <stdio.h> int fact_rec(int n){ if (n < 1) return 0; else if (n = 0) return 1; else if (n = 1) return 1; else return n * fact_rec(n-1); } void main() { int fac; printf("Masukkan berapa faktorial : "); scanf("%d",&fac); printf("Hasil faktorial dari adalah : %dn", fact_rec(fac)); }
  • 100.
    ~ 100 ~ IV.TUGAS 1. Buat program untuk menggambar segitiga sama kaki siku-siku terbalik, segitiga sama kaki siku-siku tidak terbalik, dan segitiga sama kaki (piramid) terbalik. Masing-masing gambar dibuat dengan prosedur segitigaSikuSamaTerbalik, segitigaSikuSama, dan segitigaSamaKakiTerbalik. Program diselesaikan dengan 3 file. Buat file baru, ketik program berikut, dan simpan dengan nama ”karakter.h”. Buat file baru, ketik program berikut dan beri nama ”karakter.cpp”. Buat file baru, ketik program berikut, kompilasi dan jalankan. void cetakKarakter(char, int); #include <iostream.h> #include "karakter.h" void cetakKarakter(char cc, int n){ //mencetak karakter cc sebanyak n secara horizontal if (n>0) { cout << cc; cetakKarakter(cc,n-1); } } #include <iostream.h> #include "karakter.h" void segitigaSikuSamaTerbalik(int n){ if (n>0) { cetakKarakter('*',n); cout << "n"; segitigaSikuSamaTerbalik(n-0); } } void segitigaSikuSama(int n){ if (n>0) { segitigaSikuSama(n-1); cout << "n"; cetakKarakter('*',n); } }
  • 101.
    ~ 101 ~ 2.Buatlah fungsi untuk membalik suatu bilangan dengan cara rekursif. Sebagai contoh, bilangan 1234 ditampilkan menjadi 4321! (Take Home) void segitigaSamaKakiTerbalik(int tinggi, int posisiAwal){ if (tinggi>0){ cetakKarakter(' ', posisiAwal-1); cetakKarakter('*', 2*tinggi-1); cout << "n"; segitigaSamaKakiTerbalik(tinggi-1, posisiAwal-1); } } int main() { int n; char lagi; do{ cout << "Masukkan sebuah bilangan : "; cin >> n; cout << "Segitiga Siku-siku sama kaki terbalikn"; segitigaSikuSamaTerbalik(n); cout << "nSegitiga Siku-siku sama kaki tegak"; segitigaSikuSama(n); cout << "nnSegitiga sama kaki terbalikn"; segitigaSamaKakiTerbalik(n,1); cout << "nnBuat segitiga lagi(y/t)? "; cin >> lagi; } while ((lagi=='y') || (lagi=='Y')); return 1; }
  • 102.
    ~ 102 ~ BAB10 Searching (Pencarian) I. DASAR TEORI Sequential Search (Linear Search) Teknik pencarian data dari array yang paling mudah adalah dengan cara sequential search, dimana data dalam array dibaca 1 demi satu, diurutkan dari index terkecil ke index terbesar, maupun sebaliknya. Contoh: Array : int a[5] = {0,3,6,10,1} (index array pada bahasa C++ dimulai dari index ke 0 !!!) jika kita ingin mencari bilangan 6 dalam array tersebut, maka proses yang terjadi kita mencari a) dari array index ke-0, yaitu 0, dicocokan dengan bilangan yang akan dicari, jika tidak sama, maka mencari ke index berikutnya b) pada array index ke-1, juga bukan bilangan yang dicari, maka kita mencari lagi pada index berikutnya c) pada array index ke-2, ternyata bilangan yang kita cari ada ditemukan, maka kita keluar dari looping pencarian. Contoh source : Output: Masukkan data yang ingin dicari : 6 data yang anda cari ditemukan pada index ke-2 #include<stdio.h> void main(){ int array_a[5]={0,3,6,10,1}; int i, cari, flag=0; printf(“Masukkan data yang ingin dicari: ”); scanf(“%i”,&cari); for(i=0;i<5;i++){ if(array_a[i]==cari){ flag=1; break; } } if(flag==1) printf(“data yang anda cari ditemukan pada index ke-%i”,i); else printf(“data yang anda cari tidak ditemukan”); }
  • 103.
    ~ 103 ~ Binarysearch Metode pencarian yang kedua adalah binary search, pada metode pencarian ini, data harus diurutkan terlebih dahulu. Pada metode pencarian ini, data dibagi menjadi dua bagian (secara logika), untuk setiap tahap pencarian. Algoritma binary search : 1.Data diambil dari posisi 1 sampai posisi akhir N 2.Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2 3.Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar? 4.Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1 5.Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1 6.Jika data sama, berarti ketemu. Contoh source binary search : Output: data yang anda cari : 26 cari kanan #include<stdio.h> void main(){ int array_a[10]={0,2,5,7,11,12,14,22,26,31}; int awal, tengah, akhir, cari, flag=0; awal=0; akhir=9; //didapat dari banyak_data-1 printf(“data yang anda cari: ”); scanf(“%i”, &cari); while(awal<=akhir && flag==0){ tengah=(awal+akhir)/2; if(array_a[tengah]==cari){ flag=1; break; } else if(array_a[tengah]<cari){ awal=tengah+1; printf(“cari kanann”) } else{ akhir=tengah-1; printf(“Cari kirin”); } } if(flag==1) printf(“data ditemukan”); else printf(“data tidak ditemukan”); }
  • 104.
    ~ 104 ~ carikanan data ditemukan Interpolation Search Interpolation search merupakan salah satu metode pencarian yang dapat digunakan. Seperti pada binary search, data yang harus diurutkan terlebih dahulu, sebelum dapat dilakukan pencarian dengan metode ini. Pada metode pencarian ini, kita mencoba menebak letak data yang kita cari, dengan perhitungan: Jika data[posisi] > data yg dicari, high = pos – 1 Jika data[posisi] < data yg dicari, low = pos + 1 Contoh source code interpolation search: Output: data yang anda cari : 34 data ditemukan #include<stdio.h> #include<math.h> void main(){ int array_a[10]={11,12,21,25,30,34,45,65,73,81}; int low, high, pos, cari, flag=0; float posisi; low=0; high=9; //dari bantak_data-1 printf(“data yang anda cari: ”); scanf(“%i”,&cari); do{ posisi=(float)((cari-array_a[low])/(array_a[high]- array_a[low]))*(high-low)+low; pos=floor(posisi); if(array_a[pos]==cari){ flag=1; break; } if(array_a[pos]>cari) && cari <= array_a[high]); if(flag==1) printf(“data ditemukan”); else printf(“data tidak ditemukan”); }
  • 105.
    ~ 105 ~ Tambahanmateri : break ; digunakan untuk keluar dari suatu blok perintah continue; digunakan untuk mem by-pass satu iterasi pada perulangan contoh kode : (dijalankan dan dipelajari cara kerjanya) II. LATIHAN 1 1. Buatlah sebuah program yang dapat menerima inputan data kedalam sebuah array. 2. Lanjutan dari nomor 1, gunakan sequensial search untuk mencari sebuah nilai dari array tersebut, dan gantilah nilainya. 3. Coba gunakan metode pencarian lainnya 4. Buatlah menu untuk program tersebut (1. Sequential search, 2. Binary Search, 3. Interpolation Search) III. LATIHAN 2 1. Buat program untuk mencari angka yang diinputkan, banyak data inputan user, lalu cari di indeks keberapa, dan berapa banyak data yang ditemukan. (Array 1 dimensi) 2. Buat program input number secara random, kemudian lakukan searching banyak bilangan yang genap dan yang ganjil. #include<stdio.h> void main(){ for(int i=0;i<10;i++){ for(int j=10;j>0;j--){ if(i+j==10) break; //if(i+j==10) continue; //hilangkan tanda slash di depan if, dan beri slash 2 di depan if yang atas untuk mencoba kode continue printf("%i ",i+j); printf("pass"); } printf("n"); } }
  • 106.
    ~ 106 ~ BAB11 Sorting (Pengurutan) I. DASAR TEORI Pengurutan data dalam struktur data sangat penting terutama untuk data yang beripe data numerik ataupun karakter. Pengurutan dapat dilakukan secara ascending (urut naik) dan descending (urut turun). Pengurutan (Sorting) adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga tersusun secara teratur menurut aturan tertentu. Contoh: Data Acak : 5 6 8 1 3 25 10 Ascending : 1 3 5 6 8 10 25 Descending : 25 10 8 6 5 3 1 Deklarasi Array Sorting Mendeklarasikan array secara global: Fungsi Tukar 2 Buah Data: BUBBLE SORT Merupakan metode sorting termudah, diberi nama “Bubble” karena proses pengurutan secara berangsur- angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar, jika pengurutan ascending. Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar, jika pengurutan descending. Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya. Ketika satu proses telah selesai, maka bubble sort akan int data[100]; int n; //untuk jumlah data void tukar(int a,int b){ int tmp; tmp = data[a]; data[a] = data[b]; data[b] = tmp; }
  • 107.
    ~ 107 ~ mengulangiproses, demikian seterusnya. Kapan berhentinya? Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan. Gambar 1. Proses ke-1 algoritma Bubble Sorting Pada gambar diatas, pegecekan dimulai dari data yang paling akhir, kemudian dibandingkan dengan data di depannya, jika data di depannya lebih besar maka akan ditukar. Gambar 2. Proses ke-2 algoritma Bubble Sorting Pada proses kedua, pengecekan dilakukan sampai dengan data ke-2 karena data pertama pasti sudah paling kecil. Gambar 3. Proses ke-3 algoritma Bubble Sorting
  • 108.
    ~ 108 ~ Gambar4. Proses ke-4 algoritma Bubble Sorting Gambar 5. Proses ke-5 algoritma Bubble Sort Sintaks program fungsi Bubble Sort Dengan prosedur diatas, data terurut naik (ascending), untuk urut turun (descending) silahkan ubah bagian: Void bubble_sort(){ for(int i=1;i<n;i++){ for(int j=n-1;j>=i;j--){ if(data[j]<data[j-1]) tukar(j,j-1); //ascending }}} If (data[j]<data[j-1]) tukar(j,j-1);
  • 109.
    ~ 109 ~ if(data[j]>data[j-1]) tukar(j,j-1); Menjadi: Algoritma Bubble Sorting mudah dalam sintaks, tetapi lebih lambat dibandingkan dengan algoritma sorting yang lain EXCHANGE SORT Sangat mirip dengan Bubble Sort, dan banyak yang mengatakan Bubble Sort sama dengan Exchange Sort. Pebedaan ada dalam hal bagaimana membandingkan antar elemen-elemennya. Exchange sort membandingkan suatu elemen dengan elemen-elemen lainnya dalam array tersebut, dan melakukan pertukaran elemen jika perlu. Jadi ada elemen yang selalu menjadi elemen pusat (pivot). Sedangkan Bubble sort akan membandingkan elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya, kemudian elemen sebelum/sesudahnya itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya. Gambar 6. Proses algoritma Exchange Sorting
  • 110.
    ~ 110 ~ Sintaksprogram fungsi Exchange Sort SELECTION SORT Merupakan kombinasi antara sorting dan searching. Untuk setiap proses, akan dicari elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar akan dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir proses. void exchange_sort(){ for(int i=0; i<n-1; i++){ for(int j= (i+1); j<n; j++) if (data[i] < data[j]) tukar(i,j); //descending } } }
  • 111.
    ~ 111 ~ Gambar7. Proses algoritma Selection Sorting
  • 112.
    ~ 112 ~ Sintaksprogram fungsi Selection Sort: INSERTION SORT Mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya. Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert) diposisi yang seharusnya. Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang. void selection_sort(){ for(int i=0;i<n-1;i++){ pos = i; for(int j=i+1;j<n;j++){ if(data[j] < data[pos]) pos = j; //ascending } if(pos!= i) tukar(pos,i); } }
  • 113.
    ~ 113 ~ Gambar9. Proses algoritma Insertion Sorting
  • 114.
    ~ 114 ~ Sintaksprogram fungsi Insertion Sort: II. LATIHAN #include <stdio.h> #include <conio.h> int data[10],data2[10]; int n; void tukar(int a,int b){ int t; t = data[b]; data[b] = data[a]; data[a] = t; } Void bubble_sort(){ for(int i=1;i<n;i++){ for(int j=n-1;j>=i;j--){ if(data[j]<data[j-1]) tukar(j,j-1); } } printf("bubble sort selesai!n"); } void insertion_sort(){ int temp; for(int i=1;i<n;i++){ temp = data[i]; j = i -1; while(data[j]>tem p && j>=0){ data[j+1] = data[j]; j- -; } data[j+1] = temp; } }
  • 115.
    ~ 115 ~ voidexchange_sort(){ for (int i=0; i<n-1; i++){ for(int j = (i+1); j<n; j++){ if (data [i] > data[j]) } tukar(i,j); } printf("exchange sort selesai!n"); } void selection_sort(){ int pos,i,j; for(i=0;i<n-1;i++){ pos = i; for (j = i+1;j<n;j++){ if( data[j] < data[pos]) pos = j; } if(pos != i) tukar(pos,i); } } printf("selection sort selesai!n"); void insertion_sort(){ int temp,i,j; for(i=1;i<n;i++){ temp = data[i]; j = i -1; while(data[j]>temp && j>=0){ data[j+1] = data[j]; } j--; data[j+1] = temp; } printf("insertion sort selesai!n"); } void Input(){ printf("Masukkan jumlah data = "); scanf("%d",&n); for(int i=0;i<n;i++){ printf("Masukkan data ke-%d = ",(i+1)); scanf("%d",&data[i]); data2[i] =data[i]; } }
  • 116.
    ~ 116 ~ voidAcakLagi(){ for(int i=0;i<n;i++){ data[i] = data2[i]; } printf("Data sudah teracak!n"); } void Tampil(){ printf("Data : "); for(int i=0;i<n;i++){ printf("%d ",data[i]); } printf("n"); } void main(){ clrscr(); int pil; do{ clrscr(); printf("1. Input Datan"); printf("2. Bubble Sortn"); printf("3. Exchange Sortn"); printf("4. Selection Sortn"); printf("5. Tampilkan Datan"); printf("6. Acakn"); printf("7. Exitn"); printf("Pilihan = ");scanf("%d",&pil); swit ch(pil){ case 1:Input();break; case 2:bubble_sort();break; case 3:exchange_sort();break; case 4:selection_sort();break; case 5:Tampil();break; case 6:AcakLagi();break; } getc h(); }while(pil !=7); }
  • 117.
    ~ 117 ~ DAFTARPUSTAKA [1] Shalahuddin, M., Rosa A.S. 2010. Modul Pembelajaran Algoritma dan Pemrograman. Bandung: Penerbit Modula. [2] Munir, Rinaldi. 2011. Algoritma & Pemrograman dalam Bahasa Pascal dan C; Edisi Revisi. Bandung: Penerbit Informatika