0% menganggap dokumen ini bermanfaat (0 suara)
309 tayangan100 halaman

Pemrograman 1

Buku ini memberikan panduan praktikum untuk mata kuliah Algoritma dan Struktur Data I. Buku ini berisi penjelasan tentang konsep algoritma, pemrograman, dan bahasa C++ beserta contoh-contoh kode program."

Diunggah oleh

Freeze
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
309 tayangan100 halaman

Pemrograman 1

Buku ini memberikan panduan praktikum untuk mata kuliah Algoritma dan Struktur Data I. Buku ini berisi penjelasan tentang konsep algoritma, pemrograman, dan bahasa C++ beserta contoh-contoh kode program."

Diunggah oleh

Freeze
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 100

KATA PENGANTAR

Assalamu’alaikum Wr. Wb.

Alhamdullilah, atas berkat rahmat Allah Yang Maha Kuasa dengan didorongkan oleh keinginan luhur
memperluas wawasan dalam pengembangan pengetahuan tentang Algoritma dan Struktur Data I, maka buku
petunjuk (modul) praktikum ini disusun/dibuat.

Buku petunjuk (modul) Praktikum Algoritma dan Struktur Data I ini dibuat untuk membantu jalannya
Praktikum Algoritma dan Struktur Data I prodi S1 Ilmu Komputer. Buku petunjuk (modul) ini dibuat
sedemikian rupa sehingga dapat dengan mudah dipahami dan dipelajari oleh mereka yang belum pernah
mengenal Algoritma dan Struktur Data sekalipun, dan bagi mereka yang pernah mengenal membaca buku ini
akan menyegarkan ingatan.

Terima kasih kami ucapkan kepada semua pihak yang telah membantu dan mendukung pembuatan buku ini.

Wassalamu’alaikum Wr. Wb.

LABORATORIUM KOMPUTER DASAR


JIKE F.MIPA UGM

iv
DAFTAR ISI

I. PENDAHULUAN
1. Pengenalan Algoritma dan Pemrograman
2. Latihan
II. INTRODUCTION TO C++
1. Intro to C++
2. Tipe-tipe data (Integer, Real, Karakter, String, and Boolean)
3. I/O
4. Operator
5. Latihan
III. STRUKTUR RUNTUNAN DAN CONTROL STATEMENT
1. Sequence (Runtutan)
2. Selection (Percabangan)
3. Latihan
IV. STRUKTUR PERULANGAN
1. Struktur For
2. Struktur While
3. Struktur Do While
4. Perulangan Bersarang
5. Latihan
V. TIPE DATA ARRAY
1. Tipe data Array
2. Array 1 dan 2 dimensi
3. Latihan
VI. TIPE DATA STRUKTUR
1. Struct
2. Array of Struct
3. Latihan
VII. SUBPROGRAM & FUNGSI
1. Sub program (Functions in C++)
2. Latihan
VIII. ALGORITMA SORTING & SEARCHING
1. Algoritma Sorting
2. Algoritma Searching
3. Latihan
IX. POINTER
DAFTAR PUSTAKA

v
BAB I
PENDAHULUAN

1.1 Tujuan Pembelajaran

a. Mahasiswa mengenal definisi algoritma dan pemrograman


b. Mahasiswa mengenal konsep dasar pemetaan algoritma ke dalam bahasa
algoritmik.
c. Mahasiswa mampu menyelesaikan kasus atau solusi terhadap suatu masalah yang
diberikan.

1.2 Pengenalan Algoritma dan Pemrograman

a. Latar Belakang
Algoritma berarti solusi, solusi yang dimaksud dalam bahasa pemrograman adalah
pemecahan masalah yang harus dipecahkan dengan menggunakan komputer. Langkah-
langkah apa saja yang dibutuhkan untuk menyelesaikan masalah yang dihadapi. Oleh
karena algoritma merupakan inti dari suatu pemrograman, maka algoritma harus dibuat
runut agar komputer mengerti dan mampu mengeksekusi program yang dibuat secara
benar.

b. Teori
Contoh real untuk mengambarkan solusi dari masalah yang akan diselelesaikan,
misalnya solusi untuk menghitung jumlah hewan di suatu peternakan:
1. Hitung keseluruhan jumlah ayam yang ada di dalam kandang
2. Apabila ada hewan yang masuk setelah itu, maka jumlah ayam akan ditambah
3. Apabila ada hewan yang diambil untuk penyembelihan, maka jumlah ayam akan diku-
rangi.
4. Hewan yang ada di peternakan terdiri dari ayam, sapi, kambing, dan bebek
Sebagai manusia, kita sudah pasti mengerti langkah-langkah dalam menghitung jumlah
ayam dalam suatu peternakan, namun masalah dalam pemrograman adalah bagaimana kita

Prak. Pemograman I 1
bisa membuat komputer mengerti langkah demi langkah yang kita inginkan sehingga
menghasilkan hasil yang kita inginkan. Agar dapat dijalankan pada komputer, maka
langkah-langkah solusi yang diinginkan harus menggunakan bahasa yang dimengerti oleh
komputer yang dikemas dalam bentuk program komputer.
Bahasa algoritmik (pseudo-code) adalah sebuah bahasa penengah antara manusia dan
komputer. Pseudo-code dibuat untuk memudahkan algoritma dengan logika manusia
diubah menjadi bahasa pemrograman apapun yang dimengerti oleh komputer. Terdapat
banyak sekali bahasa pemrograman yang dikenal oleh komputer, misalnya Pascal, Java,
PHP, C#, C++, dan sebagainya.
Program adalah algoritma ditambah dengan struktur data. Struktur data adalah tempat
tatanan penyimpanan data yang dibutuhkan program pada komputer. Jika manusia
memiliki otak untuk menyimpan data, maka komputer juga membutuhkan tempat untuk
menyimpan data yang dibutuhkan. Hal ini disebabkan tempat penyimpanan data pada
komputer memiliki kemampuan yang terbatas jika dibandingkan dengan otak manusia,
maka diperlukan sebuah tatanan atau struktur agar data yang disimpan mudah untuk
diakses.
Belajar pemrograman berarti belajar membuat strategi penyelesaian masalah atau
membuat suatu solusi. Sedangkan bahasa pemrograman adalah alat untuk mempelajari
pembuatan program. Dalam praktikum ini, kita akan belajar membuat program dengan
menggunakan bahasa pemrograman C++.
c. Implementasi
Dengan menggunakan contoh sebelumnya. Kita dapat membuat urutan dalam bentuk
algoritma yang baik dan terstruktur.
Task 1 : Deklarasi, merupakan tahapan untuk mendeklarasikan tempat yang dipakai
untuk membuat mi.
Step 1 : Mendeklarasikan tempat kosong yang dipakai sebagai kandang tempat
menaruh hewan.
Step 2 : Mendeklarasikan kandang di peternakan.
Step 3 : Contoh kode dengan bahasa algoritmik pada tahap deklarasi adalah
sebagai berikut :

Prak. Pemograman I 2
ayam : integer
sapi : integer
kambing : integer
bebek : integer
Task 2 : Inisialisasi, merupakan tahapan mempersiapkan proses yang dikerjakan
untuk menyelesaikan masalah.
Step 1 : Mempersiapkan jumlah hewan yang ada di kandang, dan proses
penambahan dan pengambilan hewan.
Step 2 : Contoh kode dengan bahasa algoritmik adalah sebagai berikut :
ayam  5
sapi  1
kambing  1
bebek  5

Task 3 : Proses penyelesaian masalah, merupakan tahapan untuk penyelesaian


masalah untuk memenuhi tujuan sebuah algoritma dibuat.
Step 1 : Menambah jumlah hewan
hewan  hewan sekarang + jumlah penambahan ke kandang
Step 2 : Mengurangi jumlah hewan
hewan  hewan sekarang - jumlah pengurangan ke kandang
Task 4 : Finalisasi, merupakan tahapan bersih-bersih atau tahap akhir misalnya ayam
telah habis diambil atau mengetahui jumlah hewan sekarang
Step 1 : Mengosongkan jumlah ayam apabila ayam telah diambil semua.
ayam  0
Step 2 : Menghitung jumlah hewan keseluruhan.
hewan  ayam+kambing+sapi+bebek
Step 3 : Menyajikan hasil perhitungan yang telah dibuat.
Output (“ jumlah hewan sekarang adalah 10 ekor”)

Prak. Pemograman I 3
1.3 Aktivitas

1. Mahasiswa memahami implementasi task 1, task 2, task 3 dan task 4

2. Mahasiswa mengerjakan soal latihan

1.4 Latihan

1. Buatlah algoritma untuk melakukan daftar ulang masuk ugm


2. Buatlah algoritma untuk menjumlahkan dua bilangan
3. Buatlah algorima untuk menentukan suatu bilangan termasuk bilangan ganjil atau
genap
4. Buatlah algoritma untuk menghitung luas lingkaran

Prak. Pemograman I 4
BAB II
PENGENALAN BAHASA C++

2.1 Tujuan Pembelajaran

a. Mahasiswa mengenal dasar-dasar bahasa pemrograman C++.


b. Mahasiswa dapat memetakan bahasa logaritmik ke dalam bahasa pemrograman
C++.
c. Mahasiswa mampu membuat program mulai dari kasus sederhana dengan
menggunakan bahasa pemrograman C++.
d. Mahasiswa mengenal tipe dasar integer, riil, karakter, string, dan boolean.
e. Mahasiswa paham bagaimana mengimplementasikan suatu operasi dari tipe data
dasar tersebut ke dalam bahasa pemrograman C++.
f. Mahasiswa mengenal definisi dan macam-macam operator.
g. Mahasiswa mampu mengimplementasikan operator-operator tersebut pada studi
kasus yang berikan.
h. Mahasiswa mengenal konsep dasar Input Output (I/O).
i. Mahasiswa paham bagaimana langkah-langkah mengimplementasikan dengan
masukan (input) tertentu dan menampilkan keluaran (output) dari hasil yang
diharapkan pada contoh kasus-kasus yang diberikan.

2.2 Teori

Compiler merupakan perangkat lunak yang digunakan untuk mengubah kode program
(source code) menjadi bahasa mesin (binary file) agar dapat dieksekusi oleh komputer.
Program akan berhasil di-compile jika program tersebut tidak mengandung kesalahan
secara kaidah sama sekali (syntax error). Contoh compiler C/C++ yang populer adalah
minGW dan GCC, biasanya compiler tersebut telah dikemas/bundled bersama dengan
software IDE-nya (Integrated Development Environment). Software-software IDE
merupakan lembar kerja terpadu dengan fasilitasnya termasuk compiler untuk pembuatan
atau pengembangan program. Software IDE C/C++ yang cukup populer dan bersifat

Prak. Pemograman I 1
opensource(tidak berbayar) diantaranya adalah Codeblock, Dev C++, dan Sublime (untuk
Mac OS)
Bahasa pemrograman C++ merupakan bahasa pemrograman yang bersifat case sensitif
yang berarti compiler membedakan huruf besar dan huruf kecil, misalnya jika kita
menuliskan printf dan Printf pada bahasa C maka compiler C akan menganggap kedua
tulisan tersebut berbeda maknanya. Dalam praktikum bahasa pemrograman C++ kali ini,
kita akan menggunakan Dev C++ yang merupakan program IDE sekaligus compiler yang
bersifat open source.
Adapun bagian-bagian yang mendukung dalam pembuatan suatu program yang dibuat
dengan bahasa pemrograman C++, antara lain :
o Komentar, merupakan bagian kode program yang tidak dieksekusi oleh compiler.
Komentar dianggap penting untuk memperjelas program agar lebih mudah
dimengerti dan memberikan informasi-informasi dari bagian-bagian tertentu kode
program.
o Identifier, nama yang diberikan oleh programmer (orang yang membuat program).
Penamaan suatu identifier dapat digunakan pada nama program, nama fungsi, atau
obyek-obyek lain yang terlibat dalam bahasa pemrograman, seperti nama variabel,
konstanta yang akan dibahas lebih lanjut.
o Keyword, kata kunci yang merupakan kata-kata tertentu yang mengandung arti
khusus yang terdapat dalam bahasa pemrograman. Dalam bahasa pemrograman C++,
yang dinamakan keyword misalnya asm, class, delete, friend, inline, new, operator,
private, protected, public, template, this, virtual, dsb. Kata-kata yang dianggap
sebagai keyword menurut standar suatu bahasa pemrograman tersebut tidak boleh
dipakai sebagai nama identifier.
o Library function, berbeda dengan keyword, library function adalah pustaka yang
berisi fungsi-fungsi yang telah disediakan oleh bahasa C++ dalam file-file header
atau library-nya. Misalnya salah satu fungsi library yaitu cout disimpan pada file
iostream, digunakan untuk mencetak ke layar monitor. Fungsi-fungsi bawaan dari
bahasa lain juga bisa digunakan asalkan dicantumkan di bagian awal.
o

Prak. Pemograman I 2
Struktur program

 // my first program in C++ , merupakan baris komentar yang diawali dengan dua
buah tanda miring (//) atau diapit oleh tanda /**/ dan tidak berpengaruh terhadap
program. Dalam kasus ini, baris komentar ini digunakan untuk mendeskripsikan
suatu program atau bagian-bagian kode yang dibuat.
 #include <iostream> , diawali dengan tanda pagar (#) atau, baris ini merupakan baris
preprocessor. Dalam kasus ini, #include <iostream> menyatakan untuk
menyertakan file satandar iostream. Fungsi-fungsi yang sering dipakai oleh
pemrogram awal dari pustaka iostream ini diantaranya: cin, cout, system(“pause”),
 using namespace std;, baris ini memberitahukan kepada compiler bahwa program
yang sedang ditulis menggunakan standar C++ library. Terkadang dengan using
namespace std; maka programmer tidak perlu menuliskan .h pada beberapa library
standar C++ yang dicantumkan.
 int main () , baris ini merupakan fungsi main (). Baris ini merupakan inti dari
program. Baris ini terdiri dari serangkaian source kode yang diawali dengan tanda
kurung kurawal buka { dan tanda kurung kurawal tutup } dan tanda {} itu
menunjukkan dimana fungsi main () berawal dan berakhir atau disebut blok kode.
 cout << "Hello World!"; , baris ini merupakan statement (pernyataan) C++. Suatu
pernyataan adalah ekspresi sederhana yang dapat menghasilkan beberapa efek.
Perintah cout merepresentasikan standar ouput dalam C++, cout ini dideklarasikan
pada file standar iostream dalam namespace std. Jadi baris kode ini berfungsi untuk
menampilkan kalimat “hello world”.

Prak. Pemograman I 3
Perhatikan bahwa pernyataan diakhiri dengan karakter titik koma (;).
digunakan untuk menandai akhir dari pernyataan dan harus disertakan
pada akhir semua pernyataan ekspresi dalam semua C + + program .
 Return 0;,intruksi return menyebabkan fungsi main() berakhir dan mengembalikan
kode yang mengikuti instruksi tersebut, dalam kasus ini 0. Ini merupakan cara yang
paling sering digunakan untuk mengakhiri program tanpa timbal balik apapun.

Skenario
1. Task 1 : Membuat proyek baru di devc++ dalam OS windows
1) Step 1 : Pada aplikasi c++, pilih File > New Project > New Source File

Gambar 2.1 Tampilan proyek baru

2) Step 2 : Ketikkan kode program pada area kerja

Prak. Pemograman I 4
Gambar 2.2 Tampilan source code
Penjelasan tampilan source code

2. Task 2 : Menyimpan proyek baru


1) Step 1 : Pilih Menu File > Save As >
2) Step 2 : Pilih direktori penyimpanan dan beri nama file

Prak. Pemograman I 5
Gambar 2.3 Tampilan Save As

3. Task 3 : Kompilasi dan Eksekusi program


1) Step 1 : Pilih menu Execute > Compile

Prak. Pemograman I 6
Gambar 2.4 Tampilan compile program

2) Step 2 : Pilih menu Execute > Run

Gambar 2.5 Tampilan running program

4. Task 4 : Membuat proyek baru dalam OS Linux

Pemrograman C++ di dalam sistem operasi Linux menggunakan software g++


%GNU C++%. Kompiler ini dapat secara otomatis terinstall pada saat menginstall sistem
operasi, dengan catatan kita memilih opsi untuk menginstall g++.
Kompilasi menggunakan g++ dilakukan di dalam console Linux (terminal). Cara yang
dilakukan adalah terlebih dahulu mengetikkan file source C++ pada text editor kemudian
disimpan sebagai file berekstensi .cpp, .cp, cxx, c++, cp, atau cc (contoh : coba1.cpp). Lalu
tempatkan dalam folder home/<nama user>. Ketikkan perintah

Prak. Pemograman I 7
g++ <path/nama file.cpp> -o <file output>
contoh : g++ coba1 –o keluaran (kemudian tekan enter).
Path file tidak diperlukan apabila terlebih dahulu kita masuk ke dalam folder tempat file
source disimpan. File output bisa tidak diberikan, namun secara default g++ akan membuat
file output bernama a.out. Dalam contoh tersebut bila tak ada error maka kompilasi akan
menghasilkan(output) file binary dengan nama keluaran.
Setelah kompilasi dilakukan, cek apakah kompilasi sudah berhasil dengan melihat pesan
hasil kompilasi. Jika terdapat pesan error maka file output belum terbentuk. Kita perlu
melakukan editing source(melalui text editor) kemudian compile lagi. Cara lain untuk
mengetahui apakah kompilasi berhasil dengan memasuki folder tempat file source di
simpan, dan ketikkan perintah
ls atau dir
Apabila telah muncul file output yang kita definisikan atau file a.out maka kompilasi
berhasil. Sebaliknya jika file belum muncul maka kompilasi belum berhasil. Eksekusi file
output dengan mengetikkan perintah
./<nama file output>
Contoh : ./keluaran
Perintah ini membuat kita dapat melihat hasil program yang sudah dibuat.
Tipe Data Dasar (Integer, Real, Karakter, String, Boolean)
a. Tujuan Pembelajaran
o Mahasiswa mengenal tipe dasar integer, riil, karakter, string, dan boolean.
o Mahasiswa paham bagaimana mengimplementasikan suatu operasi dari tipe data
dasar tersebut ke dalam bahasa pemrograman C++.

b. Latar Belakang
Awal dari pembahasan pemrograman, kita akan menggunakan tipe data dasar terlebih
dahulu yang meliputi tipe data integer, real, char, string dan boolean.

c. Teori
Tipe data adalah jenis data berdasarkan isi dan sifatnya. Misalnya kita analogikan
dengan contoh kasus sehari-hari yaitu galon air hanya khusus dibuat untuk menampung
jenis benda dengan jenis tertentu yaitu benda yang berjenis cair, misalnya air.

Prak. Pemograman I 8
Adapun jenis-jenis tipe data dasar pemrograman, antara lain :
o Integer, tipe bilangan bulat biasa disebut sebagai integer, namun tipe bilangan
bulat tidak hanya terdiri dari integer, masih ada tipe lain seperti short dan long,
yang membedakan ketiga tipe tersebut adalah jangkauan bilangannya.
o Real, tipe ini digunakan untuk menyatakan bilangan yang membutuhkan ketelitian
dengan adanya nilai dibelakang koma. Diantaranya yaitu: double, single, float.
o Char, tipe data yang digunakan untuk menyimpan sebuah karakter.
o String, tipe data yang berupa kumpulan karakter (satu atau lebih) yang berada di
dalam dua buah tanda petik dua (“) dalam bahasa C.
o Boolean, tipe data yang digunakan untuk menyatakan pernyataan benar (true) atau
salah (false).
Jangkauan tiap tipe data berbeda-beda baik dari nilai jangkauannya maupun bahasa
pemrograman.
Tabel 2.1 Jangkauan tipe data

Tipe Dasar Jangkauan Nilai Jumlah Digit


Presisi
Char -128 hingga +127 -
Int -32768 hingga +32767 -
Long -2.147.438.648 hingga 2.147.438.647 -
Float 3,4E-38 hingga 3,4E38 6-7
Double 1.7E-308 hingga 1.7E308 15-16
Long Double 3.4E-4932 hingga 1.1E4932 19

Variabel merupakan tempat untuk menyimpan data dengan tipe tertentu yang
isinya bisa diubah-ubah sesuai dengan tipenya dan konstanta sebenarnya adalah variabel
yang ditentukan nilai standarnya (default) dari awal dan biasanya nilainya tidak diubah-
ubah. Variabel dan konstanta harus dideklarasikan terlebih dahulu agar program dapat
mengalokasikan memory untuk menampung data yang spesifik dan memprosesnya dalam

Prak. Pemograman I 9
program sehingga didapatkan output yang sesuai. Bahasa C++ telah mendukung deklarasi
variabel sekaligus inisialisasi, contohnya adalah :

Inisialisasi juga merupakan penugasan yaitu proses memasukkan nilai kedalam


variabel dengan bantuan operator (=). Penugasan sering disebut sebagai “assignment”.
Dari contoh diatas , proses assignment-nya dalah memasukkan data string (kumpulan
karakter) kedalam setiap larik variabel tabelmerk[0] hingga larik tabelmerk[4].
Konstanta mirip dengan variabel, namun memiliki nilai tetap. Konstanta dapat berupa
nilai interger, float, karakter, dan string. Pendeklarasian konstanta dapat dilakukan dengan dua
cara:
 Menggunakan (#define)
Deklarasi konstanta dengan cara ini, lebih mudah dilakukan karena akan
menyertakan #define sebagai preprocessor directive. Dan sintaksnya
diletakkan bersama-sama dengan pernyataan #include (diatas main( ) )
Format penulisannya adalah:
#define pengenal nilai
Contoh penggunaan :

Pendeklarasian dengan #define tanpa diperlukan adanya tanda = untuk memasukkan


nilai ke dalam pengenal dan juga tanpa diakhiri dengan tanda titik koma atau semicolon (;)
 Menggunakan konstanta (const)
Sedangkan dengan kata kunci const, pendeklarasian konstanta mirip dengan
deklarasi variabel yang ditambah kata depan const dan langsung inisialisasi.
Contoh:

Prak. Pemograman I 10
Untuk contoh terakhir, deklarasi variabel zip yang tanpa tipe data, maka compiler akan secara
otomatis memasukkannya kedalam tipe int
d. Skenario
Tahapan-tahapan yang terpenting dalam membuat suatu program adalah dimulai
dengan mendeklarasikan variabel yang akan dipakai dan jenis tipe datanya, selanjutnya
melakukan inisialisasi pada variabel tersebut, kemudian mendefinisikan proses-proses
penyelesaian masalah yang dapat berupa rumus-rumus perhitungan atau instruksi dan
perintah-perintah yang lain. Pendeklarasian suatu variabel dan tipe datanya pada bahasa
C++ dapat dilihat pada step-step berikut :
1. Task 1 : Membuat program penjumlahan 2 bilangan bulat :
1) Step 1 : Deklarasi variabel-variabel
Penjelasan: Variabel-variabel yang digunakan untuk proses penjumlahan dua
buah bilangan bulat, adalah a dan b. Oleh karena dua buah bilangan yang
diproses merupakan bilangan bulat, maka tipe data yang digunakan pada
variabel a dan variabel b adalah integer.
2) Step 2 : Inisialisasi
Penjelasan: Inisialisasi pada variabel a dan b adalah pemberian nilai awal pada
kedua variabel yang akan digunakan.
3) Step 3 : Proses
Penjelasan: Berisi proses penjumlahan.
4) Step 4 : Finalisasi
Penjelasan: merupakan tahapan untuk mengakhiri program, meliputi tampilan
hasil ke output devices (layar), dan return 0 digunakan untuk mengakhiri dan
mengembalikan nilai, karena program kita menggunakan INT (lihat pada
fungsi main), maka perlu adanya pengembalian nilai. Untuk itu kita gunakan
return 0 agar tidak terjadi kesalahpahaman antara kita dengan program.

Prak. Pemograman I 11
Gambar 2.6 Tampilan kode program

2. Task 2 : Kompilasi & Eksekusi program

Gambar 2. Tampilan hasil program

e. Latihan
1. Buatlah program untuk menentukan suatu bilangan termasuk bilangan ganjil atau
genap.
2. Buatlah program untuk menentukan suatu bilangan termasuk bilangan prima.
3. Buatlah program untuk menghitung luas lingkaran.

Operator
f. Tujuan Pembelajaran
o Mahasiswa mengenal definisi dan macam-macam operator.
o Mahasiswa mampu mengimplementasikan operator-operator tersebut pada studi
kasus yang berikan.

Prak. Pemograman I 12
a. Latar Belakang
Untuk memproses suatu pemrosesan yang lebih rumit terkadang kita membutuhkan
suatu simbol atau perintah tanda untuk memperlakukan terhadap suatu variabel-variabel
yang dinamakan dengan operator.

b. Teori
Operator adalah simbol atau tanda yang jika diletakkan pada dua buah operan dapat
menghasilkan sebuah hasil, contohnya pada matematika yakni tanda tambah (+) jika
diletakkan di antara dua buah angka akan menghasilkan angka lain hasil pertambahan dua
angka tersebut. Tanda tambah inilah yang disebut sebagai operator.
Operator memiliki beberapa jenis sebagai berikut :
o Operator Aritmatika

Operator Deskripsi Contoh


+ Penjumlahan a+b
- Pengurangan a-b
* Perkalian a*b
/ Pembagian a/b
% Sisa pembagian (modulo) a%b
- Negasi -a

Operator negasi (-) disebut unary operator, karena membutuhkan hanya satu buah
operand , sedangkan operator % (modulus) digunakan untuk mencari sisa pembagian
antara dua bilangan.
Misalnya : 9 % 2 = 1, 9 % 3 = 0
o Operator Relasi

Operator Deskripsi Contoh


== Sama dengan a = = b Apakah a sama dengan b

Prak. Pemograman I 13
!= Tidak sama dengan a != b Apakah a tidak sama dengan
b
> Lebih besar a>b Apakah a lebih besar b
< Lebih kecil a<b Apakah a lebih kecil b
>= Lebih besar atau a>=b Apakah a lebih dari atau
sama dengan sama dengan b
<= Lebih kecil atau a<=b Apakah a kurang dari atau
sama dengan sama dengan b

o Operator Increment & Decrement

Operator Deskripsi Contoh Arti


++ Increment a ++ a=a+1
-- Decrement b-- b=b-1

o Operayor Bitwise

Operator Deskripsi Contoh


<< Geser n bit ke kiri ( left shift ) a >> b
>> Geser n bit ke kanan ( right shift ) a << b
& Bitwise AND a&b
| Bitwise OR a|b
^ Bitwise XOR a^b
~ Bitwise NOT ~b

o Operator Logika

Operator Deskripsi Contoh


&& Logika AND a && b
|| Logika OR a||b
! Logika NOT !b
Pada operator logika diatas seringkali dipakai dalam kondisi percabangan atau perulangan,
contoh :

Prak. Pemograman I 14
yang tidak boleh digunakan dalam kondisi percabangan ataupun perulangan ialah operator
assignment yaitu ‘=’. Contoh nya:

.
Pada perintah for nantinya juga dijumpai assignment namun tidak pada kondisinya,
melainkan hanya pada bagian pencacah maju atau mundur. Contoh:
for(int i=0; i<=9; i=i+2) // , i=i+2 tidak terletak pada kondisi karena
dipisahkan tanda ( ; )
//tetapi bagian yang menyatakan kondisi adalah pada (i<=9)

o Operator Kondisi
Operator kondisi ditandai dengan notasi ? digunakan untuk memperoleh nilai dari dua
kemungkinan :
ungkapan1 ? ungkapan2 : ungkapan3
Bila nilai ungkapan1 benar, maka nilainya sama dengan ungkapan2, bila tidak maka
nilainya sama dengan ungkapan3

I/O
a. Tujuan Pembelajaran
o Mahasiswa mengenal konsep dasar Input Output (I/O).
o Mahasiswa paham bagaimana langkah-langkah mengimplementasikan dengan
masukan (input) tertentu dan menampilkan keluaran (output) dari hasil yang
diharapkan pada contoh kasus-kasus yang diberikan.

b. Latar Belakang
Ketelitian dalam suatu pemrosesan terhadap masalah terletak pada hasil yang
didapatkan apakah sesuai dengan yang dibutuhkan atau tidak (valid atau invalid). Untuk
mendapatkan hasil yang diharapkan, maka harus diperhatikan input (masukan), proses, dan
output (keluaran).

c. Teori

Prak. Pemograman I 15
Operasi pada input dilakukan untuk membaca data atau nilai yang akan diproses. Nilai
dari suatu variabel dapat ditentukan di dalam program atau dimasukkan oleh user
(pengguna) dari keyboard dengan menggunakan fungsi yang telah ada pada library pada
bahasa pemrograman c++.
Berbeda dengan operasi pada input, operasi pada output dilakukan untuk mengirimkan
atau menampilkan data atau nilai kepada piranti keluaran (output device), misalnya printer
atau layar (monitor). Contoh dari operasi ouput yaitu menampilkan kalimat ke layar,
biasanya dilakukan untuk menampilkan perintah untuk memasukkan input ke program,
atau menampilkan nilai dari suatu variabel ke monitor dengan menggunakan library yang
ada pada bahasa pemrograman c++, biasanya dilakukan untuk menampilkan hasil suatu
perhitungan atau hasil suatu solusi. Dalam library iostream C++, standard operasi input dan
output untuk pemrograman didukung oleh 2 data streams: cin untuk input dan cout untuk
output.
Standard output (cout), penggunaan cout stream dhubungkan dengan operator
overloaded << (Sepasang tanda "less than").
Contoh :

Operator << dikenal sebagai insertion operator, dimana berfungsi untuk menginput
data yang mengikutinya. Jika berupa string, maka harus diapit dengan kutip ganda ("),
sehingga membedakannya dari variable.
Contoh :

Operator insertion (<<) dapat digunakan lebih dari 1 kali dalam kalimat yang sama, contoh
:

Prak. Pemograman I 16
Contoh diatas akan menampilkan Hello, I am a C++ sentence pada layar monitor. Manfaat
dari pengulangan penggunaan operator insertion (<<) adalah untuk menampilkan
kombinasi dari satu variabel dan konstanta atau lebih,

Contoh 1 :

Misalkan variabel umur diisi dengan angka 18, dan variabel angkatan diisi dengan 2012.
Maka output yang dihasilkan adalah :
Hello, umurku 18 tahun dan aku angkatan 2012

Contoh 2 :

Maka keluaran yang dihasilkan adalah :


Kalimat Pertama.
Kalimat Kedua.
Kalimat Ketiga.

Selain dengan karakter new-line, dapat juga menggunakan manipulator endl, contoh :

Output :
Kalimat Pertama.
Kalimat Kedua.

Standard input (cin), penggunaannya dengan menambahkan overloaded operator


extraction (>>) pada cin stream. Harus diikuti bengan variable yang akan menyimpan data.
Contoh :

Prak. Pemograman I 17
Contoh diatas mendeklarasikan variabel umur dengan tipe int dan menunggu input
dari cin (keyborad) untuk disimpan di variabel umur. Perintah cin akan memproses input
dari keyboard sekali saja dan tombol ENTER harus ditekan. cin juga dapat digunakan
untuk lebih dari satu input :
cin >> a >> b;
Equivalen dengan :
cin >> a;
cin >> b;
Dalam hal ini data yang di input harus 2, satu untuk variabel a dan lainnya untuk variabel b
yang penulisannya dipisahkan dengan : spasi, tabular atau newline.
Biasanya cout (standard output stream) ditujukan untuk monitor dan cin (standard input
stream) ditujukan untuk keyboard. Dengan menggunakan dua streams ini, maka kita dapat
berinteraksi dengan user dengan menampilkan messages pada monitor dan menerima input
dari keyboard.

d. Skenario
Contoh implementasi dari operasi I/O (Input Output), yaitu program yang digunakan
untuk menerima input dari mahasiswa yaitu yang berupa nim, nama, umur, alamat, dan
nilai NEM dan menampilkan data diri tersebut masing-masing mahasiswa ke layar
monitor.
1. Task 1 : Membuat program data mahasiswa.
1) Step 1 : Mendeklarasikan variabel-variabel yang dipakai beserta tipe
datanya.
Penjelasan : Variabel-variabel yang digunakan untuk proses menampilkan data
diri mahasiswa, yaitu variabel nim, nama, dan alamat yang masing-masing
variabel tersebut bertipe data char, yang membedakan hanya ukurannya.
Variabel umur bertipe integer, dan variabel nem bertipe float karena terdiri dari
angka yang memerlukan ketelitian angka dibelakang koma.

Prak. Pemograman I 18
2) Step 2 : Inisialisasi.
Penjelasan : Oleh karena pada program ini menerima masukan langsung dari
user, maka tidak pelu diberi inisialisasi awal.
3) Step 3 : Proses pemecahan masalah.
Penjelasan : Membaca masukan (input) dari user dengan menggunakan fungsi
cin, dan menampilkan hasilnya ke layar dengan menggunakan fungsi cout.
4) Step 4 : Finalisasi.
Penjelasan : Menghentikan fungsi main() yaitu dengan perintah return 0.

Gambar 2. Tampilan kode program

2. Task 2 : Compile and Execution

Prak. Pemograman I 19
Gambar 2. Tampilan running program

2.5 Latihan
1. Buatlah program penjumlahan 2 buah bilangan dengan menggunakan input
(masukan) dari user (pengguna)!
2. Buatlah program untuk menghitung waktu yang ditempuh berdasarkan kecepatan
dan jarak yang ada dengan menggunakan input dari user!
3. Buatlah program konversi mata uang rupiah ke dolar dengan menggunakan input
dari user yaitu yang berupa nominal mata uang rupiah, jika diketahui untuk 1 USD
= Rp 9.600,-!

Prak. Pemograman I 20
BAB III
PERCABANGAN

Tujuan
1. Mahasiswa mampu memahami fungsi struktur kontrol dalam pemograman C++
2. Mahasiswa mampu menggunakan struktur kontrol percabangan di dalam program
3. Mahasiswa mampu memahami perbedaaan dari jenis kontrol percabangan.
4. Mahasiswa mampu memilih kontrol percabangan yang akan digunakan sesuai dengan
kebutuhannya
5. Mahasiswa mampu memahami dan menggunakan operasi logika untuk mengatur
kondisi dalam kontrol percabangan.

Dasar Teori

Runtunan (Sequence)
Algoritma merupakan runtunan (sequence) satu atau lebih instruksi atau pernyataan
(statement), dan setiap pernyataan dikerjakan secara berurutan sesuai dengan urutan
penulisannya, yang berarti bahwa :
1. Setiap instruksi dikerjakan satu per satu
2. Tiap instruksi dilaksanakan tepat sekali (tidak ada instruksi yang diulang)
3. Tiap instruksi dilaksanakan dengan urutan yang sama antara pemroses dengan yang
tertulis di dalam teks algoritmanya
4. Akhir dari instruksi terakhir merupakan akhir algoritma.
Sebagai contoh pada kasus mempertukarkan dua buah nilai misalkan saja kita memiliki
dua buah gelas, gelas A dan gelas B, yang berisi minuman. Gelas A berisi kopi dan gelas B
berisi susu. Jika kita ingin menukar isi dari kedua gelas tersebut, susu menempati gelas A
dan kopi menempati gelas B. Bagaimana kita akan melakukannya? Perhatikan algoritma
berikut:
1. Tuangkan isi gelas A ke gelas B
2. Tuangkan isi gelas B ke gelas A
Pada kasus ini akan terjadi duplikasi nilai jika nilai A langsung dipertukarkan dengan nilai
B, maka kita memerlukan 1 gelas tambahan, yakni gelas C untuk menampung sementara
isi salah satu gelas agar tidak terjadi percampuran isi gelas. Algoritmanya menjadi :
1. Tuangkan isi gelas A ke gelas C
2. Tuangkan isi gelas B ke gelas A
3. Tuangkan isi gelas C ke gelas B
Apa yang terjadi di sini? Kondisi mula-mula adalah gelas A berisi kopi, gelas B berisi susu
dan gelas C kosong. Pada langkah pertama kita menuang kopi ke gelas C yang masih
kosong, sehingga gelas C berisi kopi dan gelas A menjadi kosong. Pada langkah kedua kita

Prak. Pemograman I 21
memindahkan susu dari gelas B menuju gelas A yang sudah kosong karena langkah
pertama. Hasil akhirnya adalah gelas A berisi susu, gelas B kosong dan gelas C berisi kopi.
Langkah terakhir adalah menuangkan kopi ke gelas B sehingga gelas A berisi susu, gelas B
berisi kopi dan gelas C kosong kembali. Hasil akhir sesuai dengan yang kita harapkan.
Lalu apakah masalah selesai hanya dengan menggunakan satu gelas tambahan sebagai
penyimpan sementara? Ternyata tidak. Misal kita ubah urutan kedua dan ketiga pada
algoritma di atas.
1. Tuangkan isi gelas A ke gelas C
2. Tuangkan isi gelas C ke gelas B
3. Tuangkan isi gelas B ke gelas A
Pada algoritma ini, terjadi hal yang hampir sama dengan algoritma pertama kita. Pada
langkah pertama, sudah benar kita menuang kopi ke gelas kosong. Tapi pada langkah
kedua, kita menuang kembali kopi tadi, gelas C, ke gelas B yang masih berisi susu.
Sehingga gelas A kosong, gelas B kopi susu dan gelas C kosong. Pada langkah terakhir,
kita memindahkan kopi susu pada gelas B ke gelas A, sehingga gelas B dan C menjadi
kosong.
Dari ketiga algoritma di atas, ternyata untuk menyelesaikan suatu masalah, menukar isi
gelas, selain diperlukan cara yang tepat, ternyata urutan dari langkah-langkahnyapun harus
benar. Hal yang sama berlaku pada algoritma suatu program yang memerlukan cara yang
tepat serta urutan langkah atau runtunan yang benar untuk mendapatan output atau hasil
yang diharapkan.
Suatu permasalahan serupa pada algoritma suatu pemrograman adalah ketika kita ingin
menukar isi dari dua buah variabel, seperti kode berikut:
// kita ingin menukar isi dari variabel berikut
int x = 15;
int y = 38;

Maka yang kita perlukan adalah sebuah variabel pembantu untuk menyimpan sementara
data dari variabel tersebut
//perlu 1 variabel pembantu
int z = 0;

Selanjutnya hasil inisialisasi dapat ditampulkan pada layar command prompt. Langkah
pertama dalam melakukan pertukaran ini adalah dengan memindahkan nilai dari variabel x
ke variabel z.
//pindahkan nilai x ke var z
z = x;

Isi dari masing-masing variabel setelah proses ini x = 15 ; y = 38; dan z = 15. Langkah
berikutnya adalah memindahkan nilai dari variabel y ke variabel x

Prak. Pemograman I 22
//pindahkan nilai var y ke var x
x = y;

Sehingga masing-masing variabel akan bernilai x = 38; y = 38; dan z = 15. Langkah
terakhir adalah memindahkan nilai variabel z ke variabel y
// pindahkan nilai var z ke var y
y = z;

Sehingga hasil dari langkah ini merupakan solusi dari permasalahan awal yaitu x = 38; y =
15; dan z = 15. Berikut seluruh kode dan output dari persoalan diatas
#include <iostream>

using namespace std;

int main()
{
//kita ingin menukar isi dari variabel berikut
int x = 15;
int y = 38;

//perlu 1 variabel pembantu


int z = 0;

cout << "inisialisasi" << endl;


cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "z = " << z << endl;

//pindahkan nilai x ke var z


z = x;

cout << "\npertukaran pertama x ke z" << endl;


cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "z = " << z << endl;

//pindahkan nilai var y ke var x


x = y;

cout << "\npertukaran kedua y ke x" << endl;


cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "z = " << z << endl;

//pindahkan nilai var z ke var y


y = z;

cout << "\npertukaran ketiga z ke y" << endl;


cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "z = " << z << endl;

return 0;
}

Contoh program terurut lainnya adalah program untuk mengkonversi total detik menjadi
jam menit detik.

Prak. Pemograman I 23
#include <iostream.h>
#include <conio.h>

using namespace std;

int main()

{
int jumdetik,detik,menit,jam,sisa;
cout<<"Masukkan Detik : ";
cin>>jumdetik;
jam=jumdetik/3600;
sisa=jumdetik%3600;
menit=sisa/60;
detik=sisa%60;
cout<<jam<<" Jam"<<endl;
cout<<menit<<" Menit"<<endl;
cout<<detik<<" Detik"<<endl;
getch();
}

Struktur Kontrol
Suatu program tidak terbatas hanya pada instruksi yang terurut saja, tetapi juga
memungkinkan terjadinya percabangan, perulangan, dan pengambilan keputusan. Untuk
memenuhi kebutuhan itu C++ menyediakan struktur kontrol yang dapat menangani hal-hal
tersebut, selanjutnya akan ditemui istilah block of instructions. Blok instruksi adalah
sekumpulan instruksi yng dibatasi dengan tanda semicolon (;) tetapi dikelompokkan dalam
satu blok yang dibatasi tanda ( { } )

Percabangan
Percabangan dapat menjadikan program menjadi fleksibel. Percabangan yang dimaksud
adalah suatu pemilihan statemen (baris program) yang akan dieksekusi apabila suatu
kondisi yang didefinisikan terpenuhi (bernilai benar), dan tidak dieksekusi (diabaikan oleh
kompiler) apabila kondisi tidak terpenuhi (bernilai salah). Dalam C++ terdapat dua jenis
struktur yang digunakan untuk implementasi suatu percabangan. Pertama, struktur if dan
yang kedua struktur switch

1. Struktur Kondisional : if and else


Digunakan untuk mengeksekusi sebuah atau satu blok instruksi jika kondisi terpenuhi.
Bentuk umum dari statement if adalah

if (kondisi) statement;

Tingkatan if…else disesuaikan dengan kebutuhan. Kondisi yang harus dipenuhi dapat
berbentuk ekspresi dengan operator logika dan operator relasi. Operator logika yang bisa
digunakan antara lain :

Prak. Pemograman I 24
Simbol Arti
&& AND
|| OR
! NOT

Sedangkan operator relasi antara lain :


Simbol Arti
== Sama dengan
>= Lebh dari sama dengan
> Lebih dari
<= Kurang dari sama dengan

< Kurang dari


!= Tidak sama dengan

Implementasi struktur if pada program secara ringkas dari yang paling sederhana hingga
yang lebih rumit dapat dibagi menjadi 4 yakni struktur satu kondisi, dua kondisi, tiga
kondisi, dan if bersarang

a. Struktur Satu Kondisi


Bentuk umum :
1 if (kondisi) statment;

Atau

1 if (kondisi)
2 {
3 statment1;
4 statment2;
5 ....
6 statmentN;
7 }

Kondisi merupakan ekspresi yang dievaluasi. Jika kondisi bernilai true, maka statement
akan dijalankan. Jika False, maka statement akan diabaikan dan program menjalankan
instruksi selanjutnya. Jika ada lebih dari satu instruksi (statment) yang akan dijalankan
maka harus dibuat blok instruksi denan menggunakan tanda kurung kurawal { }.

Praktikum 1

Program praktikum untuk menerapkan konsep tersebut sebagai berikut

Prak. Pemograman I 25
1 // Listing Praktikum 1.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int nilai;
10
11 cout << "Masukkan sebuah bilangan bulat : ";
12 cin >> nilai;
13 if (nilai > 0)
14 cout << "Nilai yang Anda masukkan adalah bilangan positif";
15
16 return 0;
17 }

1 // Listing Praktikum 1.2


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int bilangan;
10 char huruf;
11
12 cout << "Masukkan sebuah bilangan bulat : ";
13 cin >> bilangan;
14
15 if ((bilangan > 0) && (bilangan < 10))
16 cout << bilangan << " lebih besar dari nol dan " \
17 "lebih kecil dari sepuluh";
18
19 cout << "Masukkan sebuah huruf : ";
20
21 if ( (huruf == 'A') || (huruf == 'a') ||
22 (huruf == 'I') || (huruf == 'i') ||
23 (huruf == 'U') || (huruf == 'u') ||
24 (huruf == 'E') || (huruf == 'e') ||
25 (huruf == 'O') || (huruf == 'o') )
26 {
27 cout << " huruf berhasil dikenali ";
28 cout << huruf << " adalah salah satu huruf vokal";
29 }
30 return 0;
31 }
32

Prak. Pemograman I 26
Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 1.1 dan
1.2.

b. Struktur Dua Kondisi


Konsep struktur dua kondisi ini terdapat sebuah statement khusus yang berguna untuk
mengatasi kejadian apabila kondisi yang didefinisikan tersebut tidak terpenuhi (bernilai
salah). Bentuk umum struktur percabangan ini adalah sebagai berikut :

1 if (kondisi)
2 { Statement dieksekusi jika
3 statment1; kondisi terpenuhi
4 statment2; (true)
5 ....
6 statmentN;
7
8 }
9 else
Statement dieksekusi jika
10 { kondisi tidak terpenuhi
11 statment1; (false)
12 statment2;
13 ....
14 statmentN;
15 }
16
17 Atau

if (kondisi)statement1_jika_kondisi_terpenuhi else
18 statement2_jika_kondisi_tidak_terpenuhi

Praktikum 2
1 // Listing Praktikum 2.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int b;
10 float jumlah = 0;
11 cout << "Masukkan nilai b = ";
12 cin >> b;
13
14 if (b > 10)

Prak. Pemograman I 27
15 jumlah = jumlah + b;
16 else
17 jumlah = jumlah – b;
18
19 cout << "Jumlah = " << jumlah << endl;
20
21 return 0;
22 }

1 // Listing Praktikum 2.2


2
3 #include <iostream>
4 #include <iomanip>
5
6 using namespace std;
7
8 int main()
9 {
10 double X, Y, Z;
11 cout << "Masukkan bilangan yang akan dibagi : ";
12 cin >> X;
13 cout << "Masukkan bilangan pembagi : ";
14 cin >> Y;
15
16 if (Y == 0)
17 {
18 Cout << "Kesalahan : Bilangan pembagi tidak boleh NOL";
19 }
20 else
21 {
22 Z = X/Y;
23
24 cout.precision = 2;
25 cout << "Hasil bagi = " << Z;
26 }
27
28 return 0;
29 }

Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 2.1 dan
2.2.
c. Struktur Tiga Kondisi

1 if (kondisi1)
2 { Statement dieksekusi jika
3 statment1; kondisi 1 terpenuhi
4 statment2;
5 ....
6 statmentN;

Prak. Pemograman I 28
7 }
8 else if (kondisi2)
9 { Statement dieksekusi jika
kondisi2 terpenuhi
10 statment1;
11 statment2;
12 ....
13 statmentN;
14 }
15 else if (kondisi3) Statement dieksekusi jika
16 { kondisi 3 terpenuhi
17 statment1;
18 statment2;
19 ....
20 statmentN;
21 }
22 . . . . .
23 else
Statement dieksekusi jika
24 {
semua kondisi diatas tidak
25 statment1; terpenuhi
26 statment2;
27 ....
28 statmentN;
29 }

Dalam mendesain kontrol percabangan sebaiknya kita menggunakan garis bilangan supaya
mudah untuk mengetahui wilayah true masing-masing kondisi. Semisal kita memiliki
statement dengan kondisi sbb :

if (b >= 20)
....
else if (b < 20) AND (b >= 10)
....
else if (b <= 5) AND (b >= 0)
....
else
....

Jika kondisi tersebut digambarkan pada suatu garis bilangan masing-masing kondisi

Prak. Pemograman I 29
Pengecekan 4 kondisi di atas terjadi pertama kali di kondisi 1. Apabila kondisi 1 sudah true
maka kondisi-kondisi berikutnya tidak dicek oleh kursor kompilasi. Namun jika kondisi
pertama tidak true, maka kondisi kedua dicek. Kondisi kedua sudah true maka kondisi
lainnya di bawah kondisi dua tidak dicek. Begitu seterusnya hingga kondisi keempat.
Pengecekan seperti ini terjadi karena control statement di atas masih dalam satu blok.
Pentingnya menggambarkan garis bilangan juga kita jumpai pada kasus tertentu seperti
contoh berikut :

if (b >= 20)
....
else if (b < 20) AND (b >= 25)
....

Garis bilangannya adalah sebagai berikut :

Terdapat ketimpangan daerah true antara kondisi 1 dan 2. Ketimpangan terjadi pada b >=
25. Kondisi 1 dan 2 memenuhi nilai tersebut. Namun karena kedua kondisi masih dalam
satu blok control statement maka kondisi 1 saja yang akan dijalankan statementnya karena
kondisi satu lebih dahulu dijumpai oleh kursor kompilasi.

Praktikum 3

1 // Listing Praktikum 3.1


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {

Prak. Pemograman I 30
9 int bil;
10
11 cout << "Masukkan bilangan bulat : ";
12 cin >> bil;
13
14 if (bil > 0)
15 {
16 cout << bil << " adalah bilangan POSITIF";
17 }
18 else if (bil < 0)
19 {
20 cout<<bil<<" adalah bilangan NEGATIF";
21 }
22 else
23 {
24 cout<<"Anda memasukkan bilangan NOL";
25 }
26 return 0;
27 }

1 // Listing Praktikum 3.2


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 double nilai;
10 char indeks;
11
12 cout << "Masukkan nilai yang diperoleh : ";
13 cin >> nilai;
14
15 if (nilai >= 85) {
16 indeks = 'A';
17 } else if (nilai >= 70) {
18 indeks = 'B';
19 } else if (nilai >= 55) {
20 indeks = 'C';
21 } else if (nilai >= 40) {
22 indeks = 'D';
23 } else {
24 indeks = 'E';
25 }
26 cout << "Nilai indeks dari nilai " << nilai << "adalah" <<
27 indeks;
28 return 0;
29 }

Prak. Pemograman I 31
Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 3.1 dan
3.2.
d. Struktur if bersarang

Bentuk umum dari struktur if bersarrang adalah sebagai berikut


1 if (kondisi1)
2 {
3 statment1;
4 statment2;
5 ....
6 statmentN;
7
8 if (kondisi2)
9 {
10 statment1;
11 statment2;
12 ....
13 statmentN;
14 }
15 else if (kondisi3) AND (kondisi4)
16 {
17 if (kondisi5)
18 statement;
19 else if (kondisi5)
20 statment;
21 else
22 statment;
23 ....
24 statmentN;
25 }
26 else
27 { Statement dieksekusi jika
28 statment1; semua kondisi diatas tidak
29 statment2; terpenuhi
30 ....
31 statmentN;
32 }
33 }

Praktikum 4
1 // Listing Praktikum 4.1
2
3 #include <iostream>
4
5 using namespace std;
6

Prak. Pemograman I 32
7 int main()
8 {
9 int nilai;
10 cout << "Masukkan Angka (0-20) = ";
11 cin >> nilai;
12
13 if (nilai <= 20)
14 {
15 if (nilai > 10)
16 {
17 cout << "Nilai yang dimasukkan adalah lebih dari 10";
18 }
19 else
20 {
21 cout << "Nilai yang dimasukkan kurang dari atau = 10";
22 }
23 }
24 else
25 {
26 cout << "\nAnda memasukkan nilai yang lebih dari 20";
27 }
28 return 0;
29 }

Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 4.1

2. Struktur Kondisional : switch…case


Selain menggunakan struktur if, C++ juga menawarkan penggunaan keyword switch. Tipe
data untuk ekspresi pada keyword switch haruslah berupa bilangan bulat atau karakter.
Selain tipe data tersebut, C++ tidak mengijinkan.
Bentuk umum struktur percabangan yang menggunakan keyword switch ini adalah
sebagai berikut:
Switch (ekspresi) {
case nilai_konstan1 : Statemen_statemen; break;
case nilai_konstan1 : Statemen_statemen; break;
...
case nilai_konstanN : Statemen_statemen; break;
default
statemen_statemen_alternatif;
}
Statement default digunakan untuk mengeksekusi program jika seluruh case tidak
terpenuhi maka compiler akan mengeksekusi statement alternative yaitu, jika nilai yang
kita masukan ternyata tidak sesuai dengan nilai-nilai konstan yang telah didefinisikan.
Nilai konstan didefinisikan dengan statement case. Dalam bahasa C++ diizinkan untuk
menggunakan statement case sebanyak 16.384 buah dalam sebuah struktur percabangan
menggunakan kata kunci switch. Namun, pada prakteknya lebih baik membatasi
penggunaan case untuk efisiensi. Statement break berfungsi sebagai statement peloncatan.

Prak. Pemograman I 33
Praktikum 5
1 // Listing Praktikum 5.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main() {
8 int bil;
9
10 cout<<"Masukkan sebuah bilangan (1..7) : ";
11 cin>>bil;
12
13 switch (bil) {
14 case 1 : cout<<"Hari ke-"<<bil<<" : adalah MINGGU";
15 break;
16 case 2 : cout<<"Hari ke-"<<bil<<" : adalah SENIN";
17 break;
18 case 3 : cout<<"Hari ke-"<<bil<<" : adalah SELASA";
19 break;
20 case 4 : cout<<"Hari ke-"<<bil<<" : adalah RABU";
21 break;
22 case 5 : cout<<"Hari ke-"<<bil<<" : adalah KAMIS";
23 break;
24 case 6 : cout<<"Hari ke-"<<bil<<" : adalah JUMAT";
25 break;
26 case 7 : cout<<"Hari ke-"<<bil<<" : adalah SABTU";
27 break;
28 default : cout<<"Tidak terdapat nama hari ke-"<<bil;
29 }
30
31 return 0;
32 }

Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 5.1

Prak. Pemograman I 34
Tugas dan Latihan

1. Buatlah program yang bisa menghitung nilai determinan dari sebuah persamaan
kuadrat kemudiaan tentukan nilai masing-masing akarnya. Setelah nilai determinan
diketahui, terdapat 3 kemungkinan yang dapat menentukan akar-akar persamaan
tersebut, yaitu :
a. Jika D > 0, maka x1 dan x2 bersifat riil dan berbeda, rumus untuk penentuan
nilainya adalah sebagai berikut :
x1 = (-b + sqrt(D) ) / 2a
x2 = (-b - sqrt(D) ) / 2a
b. Jika D = 0, maka x1 dan x2 bersifat riil dan sama
c. Jika D < 0, maka x1 dan x2 bersifat imaginer
2. Buatlah sebuah program untuk menentukan bilangan terbesar dari 3 buah bilangan
yang di inputkan oleh user.
Contoh : inputkan bilangan 1 : 15
inputkan bilangan 2 : 7
inputkan bilangan 3 : 22
bilangan terbesar adalah : 22

Prak. Pemograman I 35
BAB IV
PERULANGAN

Tujuan
1 Mahasiswa mampu memahami fungsi struktur kontrol dalam pemograman C++
2 Mahasiswa mampu menggunakan struktur kontrol perulangan di dalam program
3 Mahasiswa mampu memahami perbedaaan dari masing-masing jenis kontrol
perulangan
4 Mahasiswa mampu memilih kontrol perulangan yang akan digunakan sesuai
dengan kebutuhannya
5 Mahasiswa mampu memahami dan menggunakan operasi logika untuk mengatur
kondisi dalam kontrol perulangan

Dasar Teori

Perulangan
Perulangan (looping) adalah suatu proses yang melakukan statmen-statmen dalam sebuah
program secara terus menerus sampai terdapat kondisi untuk menghentikannya. Struktur
pengulangan sangat membantu dalam efisiensi program. Adapun jenis-jenis dari
perulangan, antara lain :
1. for digunakan pada cacah (counter) perulangan yang diketahui jumlahnya (berapa kali
perulangan tersebut akan dilakukan).
2. while, berfungsi untuk mengulang suatu statement selama kondisi bernilai true.
3. do-while, hampir sama dengan perulangan while, tetapi kondisi pada perulangan do-
while akan dieksekusi setelah pernyataan dijalankan. Jika kondisi bernilai benar maka
pernyataan dijalankan, namun jika kondisi bernilai salah maka pernyataan tidak
dijalankan.

3. Struktur Looping : for


Digunakan untuk melakukan perulangan statement jika kondisi bernilai benar, dengan
mendefinisikan sebuah variabel sebagai indeksnya (inisiaisasi  telah diketahui jumlah
perulangannya) sehingga dapat menampilkan loop dengan counter. Tipe data yang
digunakan sebagai indeks haruslah mempunyai urutan yang teratur, misalnya tipe data int
(integer : 0,1,2,….) atau char (‘a’, ‘b’, ‘c’, …). Bentuk umum dari statement for adalah

for(inisialisasi; kondisi; variabel++ / variabel--)statement;

Algoritma perulangan for :


1. initialization, digunakan untuk memberikan nilai awal untuk variable counter.
Dieksekusi hanya sekali.

Prak. Pemograman I 36
2. condition, Dievaluasi, jika bernilai true maka loop berlanjut, sebaliknya loop
berhenti dan statement diabaikan.
3. statement, dieksekusi, bisa berupa instruksi tunggal maupun blok instruksi (dalam
tanda { } ).
4. increase, dieksekusi kemudian algoritma kembali ke step 2.

// Untuk perulangan yang sifatnya naik (increment)


for(variabel = nilai_awal; kondisi; variabel++)
{
Statement_yang_akan_diulang;
}
// Untuk perulangan yang sifatnya turun (decrement)
for(variabel = nilai_awal; kondisi; variabel--)
{
Statement_yang_akan_diulang;
}

Sebagai catatan jika melakukan perulangan increment, nilai awal variabel yang
didefinisikan, haruslah lebih kecil dari nilai akhir yang dituliskan dalam kondisi
(ekspresi). Sebaliknya jika melakukan perulangan decrement, maka nilai_awal harus
lebih besar dari nilai akhir. Secara default, struktur for menaikkan atau menurunkan
variabel indeks dengan nilai 1. Jika kita ingin menaikkan atau menurunkan nilai tersebut
dengan nilai yang lain maka operator increment dan decrement digantikan dengna
statement yang didefinisikan sendiri.

Initialization dan increase bersifat optional. Sehingga dapat dituliskan : for (;n<10;)
untuk for tanpa initialization dan increase; atau for (;n<10;n++) untuk for dengan
increase tetapi tanpa initialization. Dengan operator koma (,) kita dapat mendeklarasikan
lebih dari satu instruksi pada bagian manapun termasuk dalam loop for, contoh :
for ( n=0, i=100 ; n!=i ; n++, i-- )
{
// whatever here...
}
Loop diatas akan meng-eksekusi sebanyak 50 kali :

nilai awal n = 0 dan i = 100, dengan kondisi (n!=i) (yaitu n tidak sama dengan i). Karena n
mengalami penambahan 1 dan i mengalami pengurangan 1, maka kondisi loop akan salah
setelah loop yang ke-50, yaitu ketika n dan i bernilai 50.

Praktikum 1

Prak. Pemograman I 37
1 // Listing Praktikum 1.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 // deklarasi variabel
10 int C;
11 int J;
12
13 // inisialization + proses + finalisasi
14 cout<<"PENGULANGAN MENAIK"<<endl;
15 for (C=0; C<10; C++)
16 {
17 cout<<C<<endl;
18 cout<<'\n';
19 cout<<C+1<<endl;
20 }
21 cout<<”increment done!”;
22
23 cout<<'\n'; // dapat ditulis cout<<endl;
24 cout<<"PENGULANGAN MENURUN"<<endl;
25 for (J=10; J>0; J--)
26 {
27 cout<<J<<endl;
28 cout<<J<<”,”<<endl;
29 }
30 cout<<”decrement done!”;
31
32 return 0;
33 }

1 // Listing Praktikum 1.2


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int C;
10 for (C=0; C<25; C+5)
11 {
12 cout<<C+1<<endl;
13 }
14
15 return 0;
16 }

Prak. Pemograman I 38
1 // Listing Praktikum 1.3
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 char A; // variabel A (bertipe char) akan digunakan
10 // sebagai indeks pengulangan
11 int B; // variabel B akan digunakan untuk
12 // menampung nilai penjumlahan
13 int C; // variabel C akan digunakan untuk
14 // menampung nilai perkalian
15
15 for (A='a', B=0, C=1; A<='e'; A++, B=B+5, C=C*10)
17 {
18 cout<<"Nilai A = "<<A<<endl;
19 cout<<"Nilai B = "<<B<<endl;
20 cout<<"Nilai C = "<<C<<endl;
21 cout<<endl;
22 }
23
24 return 0;
25 }

Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 1.1, 1.2 dan
1.3.

b. Struktur Looping : While …


Struktur perulangan jenis ini adalah perulangan yang melakukan pengecekkan kondisi di
awal blok struktur. Fungsi statement while, melakukan perulangan statement-statement
yang ada di dalam blok perulangan jika expression (condition) terpenuhi (bernilai true).
Bentuk umum struktur while :

while (expresion)
{
statement_statement_yang_akan_diulang;
}

Praktikum 2
1 //Listing Prakktikum 2.1
2
3 #include <iostream>
4
5 using namespace std;
6

Prak. Pemograman I 39
7 int main()
8 {
9 int n;
10 cout << ”masukkan nilai awal  ”;
11 cin >> n;
12
13 while (n > 0)
14 {
15 cout << n << “,”;
16 --n;
17 }
18 cout << “DONE!”;
19 }

Algoritma program dimulai dari main :


1. User meng-input nilai untuk n.
4. Instrukti while mengevaluasi apakah (n>0). Ada dua kemungkinan :
true: meng-eksekusi statement (step 3,)
false: melompati statement. lanjut ke step 5.
5. Mengeksekusi statement : cout << n << ", ";
--n;
(Menampilkan n di layar dan mengurangi n dengan 1).
6. Akhir dari blok. kembali ke step 2.
7. lanjut menuju program setelah blok. Cetak : DONE! dan program berakhir.

1 //Listing Prakktikum 2.2


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int BIL;
10 long faktorial = 1;
11
12 cout<<"Masukkan bilangan yang akan dihitung : "; cin>>BIL;
13 C = BIL;
14 cout<<C<<"! = ";
15 while (C >= 1)
16 {
17 faktorial *= C; // bentuk singkat
18 // dari faktorial = faktorial * C;
19 if (C != 1)
20 {
21 cout<<C<<" x ";
22 }
23 else
24 {
25 cout<<C<<" = ";

Prak. Pemograman I 40
26 }
27 C--; // Menurunkan nilai yang terdapat pada variabel C
28 }
29 cout<<faktorial;
30 return 0;
31 }
32

1 //Listing Prakktikum 2.3


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int J = 10;
10 int K;
11
12 while (J >= 1)
13 {
14 K = 1;
15 while (K <= J)
16 {
17 cout<<K*J<<' ';
18 K++;
19 }
20 cout<<'\n';
21 J--;
22 }
23
24 return 0;
25 }
Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 2.1, 2.2 dan
2.3.

c. Struktur Looping : Do…While…


Secara fungsional, hampir sama dengan while loop, hanya saja condition dalam do-while
dievaluasi setelah eksekusi statement , dengan kata lain, sedikitnya satu kali eksekusi
statement walaupun kondisi tidak terpenuhi. Bentuk umum struktur do….while adalah
sebagai berikut :

do statement while (condition);

do
{
Statement_yang_akan_diulang;
}
while (condition);

Prak. Pemograman I 41
Praktikum 3

1 //Listing Prakktikum 3.1


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int Bil1, Bil2;
10 int sisa;
11
12 cout<<"Masukkan bilangan pertama : "; cin>>Bil1;
13 cout<<"Masukkan bilangan kedua : "; cin>>Bil2;
14
15 // Melakukan pertukaran nilai
16 if (Bil1 < Bil2)
17 {
18 int temp = Bil1;
19 Bil1 = Bil2;
20 Bil2 = temp;
21 }
22 do
23 {
24 sisa = Bil1 % Bil2;
25 Bil1 = Bil2;
26 Bil2 = sisa;
27 } while (sisa != 0);
28
29 cout<<"\nFaktor persekutuan terbesar = "<<Bil1;
30
31 return 0;
32 }

1 //Listing Prakktikum 3.2


2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int J = 10;
10 int K;
11
12 do
13 {
14 K = 1;
15 do
16 {
17 cout<<K*J<<' ';
18 K++;

Prak. Pemograman I 42
19 } while (K <= J);
20 cout<<'\n';
21 J--;
22 } while (J >= 1);
23 return 0;
24 }

Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 3.1 – 3.3.

d. Struktur Looping Bersarang (Nested Looping)

Nested looping, adalah perulangan yang berada di dalam perulangan lainnya. Perulangan
yang lebih dalam akan diproses terlebih dahulu samapi habis, kemudian perulangan yang
lebih luar baru akan bertambah, kemudian mengerjakan perulangan yang lebih dalam lagi
mulai dari nilai awal hingga seterusnya. Perulangan di dalam perulangan diperbolehkan
pada hampir semua bahasa pemrograman. Bentuk umum dari nested looping adalah :

for(variabel1 = nilai_awal; kondisi1; variabel1++)


{
for(variabel2 = nilai_awal; kondisi2; variabel2++)
{
for(variabel3 = nilai_awal; kondisi3; variabel3++)
{
Statement_yang_akan_diulang;
...
}
}
}

Praktikum 4
Program perulangan di dalam perulangan dapat dilihat pada program berikut :
1 //Listing Prakktikum 4.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main()
8 {
9 int nested1, nested2;
10 int awal1 = 1, awal2;
11 cout << ”masukkan nilai nested1 = ”;
12 cin >> nested1;
13 cout << ”masukkan nilai nested2 = ”;
14 cin >> nested2;
15
16 if ( (nested1 > 0) && (nested2 > 0))
17 {
18 while (awal1 <= nested1)

Prak. Pemograman I 43
19 {
20 for ( awal2=1; awal2 <= nested2; awal2++)
21 {
22 cout << “Perulangan ke- ” << awal1 * awal2 << endl;
23 }
24 awal1++;
25 }
26 }
27 }

Pada contoh di atas, terdapat perulangan di dalam perulangan. Semua bentuk perulangan
dapat diletakkan pada statement bentuk perulangan yang lain. Seperti pada program contoh
perulangan for di dalam perulangan dengan while. Statement baris ke-18, akan dijalankan
sebanyak nested1 x nested2 (sesuai dengan masukan user).
Jalannya program contoh sebagai berikut. Pertama, nilai nested1 dan nested2 dimasukkan
oleh user adalah 2 dan 3. Kemudian kondisi if akan dicek apakah nilai nested
masingmasing berupa nilai integer positif. Jika true maka perulangan while di jalankan. Di
dalam kondisi while nilai awal1 akan dicek apakah kurang dari nilai nested1 (2). Karena
kondisi true maka statement while dijalankan. Di dalam statement while ditemukan
perulangan lagi, maka kondisi perulangan dicek. Apakah nilai awal2 kurang dari nested2.
Karena kondisi true maka statement for dijalankan. Yaitu menampilkan pesan ke layar
monitor perulangan ke-...

Statement for akan dijalankan hingga nilai awal2 lebih dari nested2. Dengan kata lain
perulangan for statementnya dijalankan sebanyak 3x. Sedangkan perulangan while
statementnya dijalankan sebanyak 2x. Kesimpulannya total statement baris ke-18
dijalankan sebanyak 6x (2 x 3). Silahkan buat program contoh diatas kemudian Analisis
dan berikan pembahasan tentang logika alur kerja pada tiap baris instruksi/statemen dan
bagaimana hasil output program pada listing praktikum 4.1 dan 4.2.

Program praktikum untuk menerapkan konsep tersebut sebagai berikut


1 // Listing Praktikum 4.2
2 #include <iostream>
3
4 using namespace std;
5
6 int main()
7 {
8 for (int j=1; j<=10; j++)
9 {
10 for (int k=1; k<=j; k++)
11 {
12 cout<<k*j<<' ';
13 }
14 cout<<'\n';
15 }
16
17 return 0;
18 }

Prak. Pemograman I 44
Kontrol Percabangan (Bifurcation) dan Lompatan (Jump)
1. Instruksi break
Dengan menggunakan instruksi break, program akan keluar dari loop walaupun kondisi
untuk berakhirnya loop belum terpenuhi. Dapat digunakan untuk mengakhiri infinite loop,
atau untuk menyebabkan loop selesai sebelum saatnya. Proses perulangan dan program
akan langsung meloncat ke statement yang berada di bawah blok perulangan.
Praktikum 5
1 // Listing Praktikum 5.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main ()
8 {
9 int n;
10 for (n=10; n>0; n--)
11 {
12 cout << n << ", ";
13 if (n==3)
14 {
15 cout << "countdown aborted!";
16 break;
17 }
18 }
19 cout << "nilai n = " << n;
20 return 0;
21 }

2. Instruksi continue
Instruksi continue menyebabkan program akan melewati instruksi selanjutnya hingga akhir
blok dalam loop. Atau dengan kata lain langsung melompat ke iterasi selanjutnya.
Praktikum 6
1 // Listing Praktikum 6.1
2
3 #include <iostream.h>
4
5 using namespace std;
6
7 int main ()
8 {
9 for (int n=10; n>0; n--)
10 {
11 if (n==5) continue;
12 cout << n << ", ";
13 }
14 cout << "Done!";
15 return 0;
16 }

Prak. Pemograman I 45
3. Instruksi go to
Menyebabkan lompatan dalam program. Tujuan dari lompatan diidentifikasikan dengan
label, yang berisikan argumen-argumen. penulisan label diikuti dengan tanda colon (:).
Praktikum 7
1 // Listing Praktikum 7.1
2
3 #include <iostream>
4
5 using namespace std;
6
7 int main ()
8 {
9 int n=10;
10 loop:
11 cout << n << ", ";
12 n--;
13 if (n>0) goto loop;
14 cout << "FIRE!";
15 return 0;
16 }

1 // Listing Praktikum 7.2


2
3 #include <iostream>
4
5 using namespace std;
6
7 enum BOOLEAN { FALSE, TRUE };
8
9 int main()
10 {
11 int C = 0;
12
13 while (TRUE)
14 {
15 cout<<C+1<<end;
16 if (C == 9)
17 {
18 goto MyLabel; // Meloncat ke label MyLabel
19 }
20 C++;
21 }
22
23 MyLabel: // Lokasi yang akan dituju
25 return 0;
26 }
Analisis dan berikan pembahasan tentang logika alur kerja pada tiap baris
instruksi/statemen dan bagaimana hasil output program pada listing praktikum 5 – 7.

Prak. Pemograman I 46
Tugas dan Latihan
3. Buatlah program dengan menggunakan perulangan for, while dan do-while untuk
menampilkan deret huruf
ABCDEF...
4. Buatlah program untuk menampilkan bintang, sesuai batas jumlah bilangan yang
dinputkan, misalnya batas yang diinputkan yaitu 4, seperti pada Gambar berikut

5. Buatlah program untuk menampilkan tabel perkalian, seperti contoh :

*12345
112345
2 2 4 6 8 10
3 3 6 9 12 15
4 4 8 12 16 20
5 5 10 15 20 25

Prak. Pemograman I 47
BAB V
TIPE DATA LARIK (ARRAY)

5.1. Tujuan

1. Menerangkan hakekat dari array


2. Menerangkan seluk-beluk array
3. Menerangkan cara menggunakan array
4. Mahasiswa memahami pengertian dan seluk-beluk dari array
5. Mahasiswa mengetahui cara menggunakan array di dalam program

5.2. Teori

5.2.1. Array

Untuk menyimpan sebuah nilai dengan tipe data tertentu, digunakan sebuah variabel.
Sebagai contoh, dideklarasikan:
int nilai1, nilai2, nilai3;
Artinya terdapat 3 buah variabel yang akan digunakan untuk menyimpan data bertipe
integer. Dengan jumlah data sedikit, misal 10, mungkin metode penulisan ini maish dapat
digunakan namun penulisan ini menjadi kurang efektif apabila jumlah data yang akan
dimasukkan banyak (misal 100), jumlah data dinamis, ataupun tidak diketahui jumlah
tepatnya.
Array dapat digunakan sebagai solusi permasalahan tersebut. Berikut adalah contoh
penggunaan konsep array.

Nama Ani Budi Cinta Dani Edi Fajar


Nilai 80 90 95 95 80 85
Gambar 5.1 Ilustrasi array pada data nilai

Dari gambar diatas, dapat dilihat terdapat dua buah variabel, Nama dan Nilai yang maisng-
masing memiliki sejumlah data bertipe string dan integer. Data dalam array disebut sebagai
elemen array yang ditandai dengan suatu index pada tiap-tiap elemennya. Perlu dicatat

Prak. Pemograman I 48
bahwa, index array dimulai dari index ke 0. Sehingga bila kita membuat array 6 elemen,
makan untuk mengisi nilai elemen pertama digunakan index ke 0.
Dengan membentuk array bertipe data integer misalnya, elemen-elemen nilai dapat
disimpan dalam satu identifier yang sama. Fungsi dan ciri utama array adalah menyimpan
serangkaian elemen yang bertipe sama dan mempunyai index dapat diakses secara
langsung dan acak.
Dilihat dari dimensinya array dapat dibagi menjadi array satu dimensi, dan array multi
dimensi. Perbedaannya multi dimensi mempunyai tipe index lebih dari satu atau tipe-
komponen berupa array yang lain.
1) Step 1 : Deklarasi dan Inisialisasi array, Bentuk variabel dengan tipe array
terlebih dahulu, meliputi nama, ukuran, dan isi tipe datanya.
Type nama [elemen];
atau
Type nama [elemen] =
{elemen1,elemen2,elemen_n};
contoh :
1 2 3 4 5 6
Nilai 80 90 95 97 88 85

Urutan deret nilai diatas dapat dideklasarikan dengan menggunakan tipe array :
int nilai [6];
atau
int nilai [6] = {80,90,95,97,88,85};

nilai[0] nilai[1] nilai[2] nilai[3] nilai[4] nilai[5]


Nilai 80 90 95 97 88 85

2) Step 2 : Pengaksesan array, Melakukan operasi pada setiap elemen dari


kumpulan data secara individual. Format pengaksesan larik didefinisikan
sebagai berikut.
nama [index];
Sebagai contoh, untuk menyimpan nilai kedua yaitu 90 dari deretan data-data tersebut,
maka dapat dituliskan dalam bentuk sebagai berikut

Prak. Pemograman I 49
nilai[1] = 90;
Urutan elemen pada array selalu dimulai dari 0, maka nilai 90 diacu dengan nilai index ke-
1, sedangkan untuk menampilkan nilai 97 pada index ke-3 dituliskan dalam bentuk
read nilai[3];

5.2.2. Array Multidimensi

Matriks, adalah array yang memiliki dua atau lebih kolom dengan banyak baris, atau dua
atau lebih baris dengan banyak kolom, atau lebih singkatnya adalah array yang ada di
dalam array, tergantung bagaimana penggunaanya. Misalnya ada sebuah array dua
dimensi dengan ukuran 2x2 yang ditunjukkan dengan contoh sebagai berikut :

Tabel 5. 1. Ilustrasi Matriks


1,1 1,2
2,1 2,2
Contoh array 3x3:

0 1 2
0
1
2

1) Step 1 : Deklarasi dan Inisialisasi larik,


Type nama [elemen_baris][elemen_kolom];
Int nilai[3][4];
2) Step 2 : Pengaksesan larik,.
nama [index_baris][index_kolom];
Sebagai contoh, untuk menyimpan nilai pada baris kedua dan kolom ketiga, maka
dapat dituliskan dalam bentuk sebagai berikut.

Prak. Pemograman I 50
0 1 2
0
1 75
2 90

nilai[1][2] = 75;
Untuk menampilkan nilai 90 pada baris ketiga dan kolom kedua dapat dituliskan
dalam bentuk :
read nilai[2][1];

5.2.3. Array of Char


Dalam C++ tipe data string dapat diperoleh dengan cara mendefinisikan suatu array bertipe
char yang diakhiri dengan karakter null(). Karena pada hakekatnya string merupakan
kumpulan dari variabel bertipe char. Meskipun berupa array, perlakukan terhadap array
bertipe char sedikit lebih istimewa. Karena terdapat beberapa fungsi yang bisa digunakan
untuk memanipulasi langsung array ini. Sedangkan pada array bertipe non char tidak ada
fungsi untuk memanipulasi. Fungsi-fungsi untuk array bertipe char diletakkan pada file
include string.h.

Sama seperti dengan array biasa, string dapat didefinisikan dalam array dengan
menggunakan tipe data char seperti contoh berikut.

Prak. Pemograman I 51
Gambar 5. 1. Source Code Array of char

Contoh pada gambar 5.1. mirip dengan contoh-contoh pada bab sebelumnya. Tipe data
char masih satu jenis dengan tipe data integer. Karena tipe data char diisi oleh karakter-
karakter ASCII yang dikodekan dengan angka integer dari 0 – 127. Pada perulangan
pertama terlihat bahwa elemen kata1 berturut-turut diisi dengan karakter A (ASCII = 65),
B (ASCII = 66), C (ASCII = 66), D (ASCII = 66), dan E (ASCII = 66). Keluaran dari
program di atas adalah :

Gambar 5. 2. Hasil output array of char


5.2.3. Fungsi-Fungsi Dalam String.h

Sama seperti dengan file include yang lain, string.h terletak di /usr/include. Kita akan
melihat fungsi apa saja yang didukung oleh string.h.

/* Copy SRC to DEST. */


extern char *strcpy (char *__restrict __dest, __const char

Prak. Pemograman I 52
*__restrict __src)
__THROW;
/* Copy no more than N characters of SRC to DEST. */
extern char *strncpy (char *__restrict __dest,
__const char *__restrict __src, size_t __n)
__THROW;

/* Append SRC onto DEST. */


extern char *strcat (char *__restrict __dest, __const char
*__restrict __src)
__THROW;
/* Append no more than N characters from SRC onto DEST. */
extern char *strncat (char *__restrict __dest, __const char
*__restrict __src,
size_t __n) __THROW;

/* Compare S1 and S2. */


extern int strcmp (__const char *__s1, __const char *__s2)
__THROW __attribute_pure__;
/* Compare N characters of S1 and S2. */
extern int strncmp (__const char *__s1, __const char *__s2, size_t
__n)
__THROW __attribute_pure__;
/* Return the length of S. */
extern size_t strlen (__const char *__s) __THROW
__attribute_pure__;
__END_NAMESPACE_STD

Ketujuh fungsi di atas paling banyak dipakai untuk memanipulasi string. Jika Anda
menggunakan Microsoft Visual C++, fungsi manipulasi string lebih banyak, seperti strstr,
strupr, dan strlwr.

fungsi Parameter Keterangan


strcpy source, dest mengkopi kata dari source ke dalam dest

Prak. Pemograman I 53
fungsi Parameter Keterangan
strncpy source, dest, n mengkopi kata dari source ke dalam dest sebanyak n
karakter
strcat source, dest menambahkan string dari source ke string dest di posisi
akhir
strncat source, dest, n menambahkan string dari source ke string dest di posisi
akhir sebanyak b karakter
strcmp s1, s2 membandingkan string dari s1 dengan string dari s2
strncmp s1, s2, n membandingkan string dari s1 dengan string dari s2
sebanyak n karakter
strlen S menghasilkan panjang dari string s

Fungsi-fungsi di atas dapat digunakan pada tipe string. Pada contoh sebelumnya, kita
menampilkan kata ALPHABET dengan melakukan cout satu per satu dari elemen array.
Untuk lebih praktisnya, contoh sebelumnya akan kita ganti dengan program berikut :

Gambar 5. 3. Source Code array of char

Terlihat bahwa string meskipun berupa array namun memiliki perlakuan yang berbeda.
Pendeklarasian sekaligus pengisian array bertipe char berbeda dengan pendeklarasian
sekaligus pengisian nilai array bertipe non char. Keluaran program di atas sbb :

Prak. Pemograman I 54
Gambar 5. 4. Output Program

5.2.4. Menangkap Inputan Berupa Karakter

Suatu saat program kita membutuhkan input dari user berupa karakter. Untuk menangkap
karakter yang dimasukkan, perintahnya sama seperti menangkap inputan biasa pada tipe
data integer atau float. Berikut contoh programnya :

Gambar 5. 5. Source Code input karakter

Keluaran dari program Gambar 5.5. adalah :

Prak. Pemograman I 55
Gambar 5. 6. Output Program
Pada program terdapat 2 buah array masing-masing kata1, dan kata2. Kata1 akan diberikan
inputan oleh user, sedangkan kata2 akan mengcopy isi dari kata1.
Pada baris ke-10 program meminta masukan dari user berupa kata. Karakter yang dapat
diterima hanya 6 buah. Meskipun user memasukkan sebanyak 9 karakter, maka hanya 6
karakter pertama yang disimpan. Cara menerima inputan user berupa karakter yaitu dengan
perintah sebagai berikut.
cin >> kata1;

Meskipun kata1 berupa array namun pengaksesan array bertipe char dapat dengan
menghilangkan informasi indeksnya, seperti ditunjukkan pada baris ke-11. Untuk
menampilkan sebuah string <array bertipe char> tidak perlu menampilkan satu per satu,
namun bisa menampilkan sekaligus dengan tidak menyertakan indeks array yang
bersangkutan.

Untuk dapat mengcopy isi dari array1 ke array2, digunakan perintaah strncopy sepert
ditunjukkan pada baris ke-15. Isi karakter pada array kata1 di copy ke array kata2
sebanyak 4 karakter saja, kemudian ditampilkan isinya.

Pada baris ke-17 array kata1 dan kata2 dibandingkan. Namun pembandingan hanya sebatas
4 karakter saja. Hasilnya adalah nilai 0 yang berarti 'true'. Selanjutnya, menampilkan
ukuran dari array kata1 yang berjumlah 9 karakter.

Kesimpulan, Cara akses array bertipe char dengan non char adalah berbeda. C++
memberikan fasilitas khusus untuk array bertipe char. Hal ini untuk mempermudah
programmer dalam menggunakan tipe data string. Pengaksesan dengan menghilangkan
indeks array. Rahasianya adalah, setiap array char yang kita buat secara otomatis akan

Prak. Pemograman I 56
ditambahkan oleh C++ karakter null yang berarti tanda akhir string. Seperti array kata1,
oleh C++ alokasi memorinya menjadi :
P R A K T I K U M /0

Karakter terakhir adalah tanda akhir string dari kata1. Oleh karenanya apabila dilakukan
cout maka C++ akan melakukan perulangan dengan menampilkan isi array kata1 hingga
dijumpai karakter null. Makanya kenapa indeks array pada saat pengaksesan array bertipe
char dapat dihilangkan. Karena patokannya kepada karakter null.

Prak. Pemograman I 57
5.3. Aktivitas

1. Mahasiswa mencoba source yang terdapat pada gambar


2. Mahasiswa mengerjakan soal latihan
3. Mahasiswa mencari kasus program yang menggunakan tipe data array

5.4. Latihan

1. Buatlah sebuah program penjumlahan dengan angka yang dijumlahkan sesuai dengan
masukan pengguna.

2. Buatlah sebuah program untuk konversi bilangan decimal ke biner. Hasil konversi bisa
langsung ditampilkan atau disimpan ke dalam sebuah variabel array of char

Prak. Pemograman I 58
BAB VI
TIPE DATA STRUKTUR

6.1. Tujuan

1. Menerangkan hakekat dari struktur


2. Menerangkan seluk-beluk struktur
3. Menerangkan cara menggunakan struktur
4. Mahasiswa memahami pengertian dan seluk-beluk dari struktur
5. Mahasiswa mengetahui cara menggunakan struktur di dalam program

6.2. Teori

Struct atau tipe data striktur merupakan pengembangan dari array. Struct dapat digunakan
untuk berbagai tipe data yang berbeda. Sebagai contoh, sebuah record mengenai suatu
produk, terdiri dari kode produk, nama produk, harga produk dsb. Semua data tersebut
dihimpun dalam satu record. Berikut merupakan langkah-langkah penggunaan struct.
1. Deklarasi struct
Bentuk suatu record terlebih dahulu, meliputi field- field yang ada didalam record
beserta tipe datanya untuk masing-masing field.
struct namaStruct {
tipedata namafield1;
tipedata namafield2;
tipedata namafield3;
};
Contoh:
struct ProductRec {
string name;
string idNum;
float price;
};
Bentuk variabel dengan tipe record tersebut.
namaStruct namaVariabel;
Contoh:
ProductRec theProduct;

2. Pengaksesan struct

Prak. Pemograman I 1
Melakukan operasi pada setiap elemen dari record secara individual. Misalnya operasi
pengisian nilai pada tiap-tiap elemen. Nilai-nilai tertentu dapat di-assign, dengan
aturan pengacuan terhadap field dari sebuah record.
nama_variabel.nama_field = nilai;
Contoh:
theProduct.name = "Orange";
atau
cin >> theProduct.name;

Menampilkan data yang ada didalam record .


cout<<nama_variabel.nama_field;
Contoh:
cout<< theProduct.price;

3. Nested struct
Elemen suatu struct juga bisa berada di dalam struct lainnya. Sebagai contoh dapat
dilihat di bawah ini.
struct productBrand {
string productName;
string brandName;
};

struct ProductRec {
productBrand name;
string idNum;
float price;
};

Prak. Pemograman I 2
4. Array of Struct
Elemen suatu array juga bisa berupa struct. Sebagai contoh dapat dilihat di bawah ini:
struct productBrand {
string productName;
string brandName;
};

struct ProductRec {
productBrand name;
string idNum;
float price;
};

ProductRec theProduct[10];

Prak. Pemograman I 3
6.3. Aktivitas Praktikum

1. Task 1 : Membuat program membuat data pribadi dengan struct.


1. Step 1 : Deklarasi struct
Deklarasikan struct fullname dan struct StudentRec. Struct fullname akan
digunakan untuk menyimpan string firstname dan string lastname. Sementara
struct StudentRec akan berisi name dari struct fullname, strng idNum dan float
gpa.

2. Step 2 : Deklarasi dan Inisialisasi variabel

3. Step 3 : Proses
Pada langkah ini, buatlah inputan yang akan memasukkan jumlah mahasiswa
yang akan direcord. Selanjutnya, buat input untuk firstname, lastname, NIM, dan
IPK. Simpan masing-masing inputan pada sruct yang telah dibuat.

Prak. Pemograman I 4
4. Step 4 : Finalisasi

Prak. Pemograman I 5
Task 2 : Kompilasi dan Eksekusi program

Gambar 6.2 Tampilan running program

6.4. Latihan

Buatlah sebuah program pencatatan barang pada swalayan dengan memanfaatkan array
dan struct. Program tersebut meminta input berupa kode barang, nama barang, harga
barang, dan jumlah barang. Buatlah input barang sejumlah “n” masukan (n ditentukan
oleh pengguna sendiri, maksimal 50), kemudian tampilkan jumlah semua barang dan
harga rata-rata barang!

Prak. Pemograman I 6
BAB VII
SUBPROGRAM DAN FUNGSI

7.1. Tujuan
a. Mahasiswa mampu membedakan fungsi dengan nilai balik dan fungsi tanpa nilai balik
b. Mahasiswa mampu mengimplementasikan rekursi dalam kasus program
7.2. Teori
Dalam C++ program merupakan kumpulan dari fungsi-fungsi, baik itu yang didefinisikan
langsung dalam program maupun yang disimpan dalam suatu file header. C++ sendiri
mempunyai fungsi utama yang disebut fungsi main(). Fungsi main() ini selalu ada dalam
setiap program C++ dan kompiler akan menjalankan program melalui perintah-perintah
yang terdapat dalam fungsi ini.
Fungsi merupakan subprogram dan berguna untuk menjadikan program dapat lebih bersifat
modular sehingga akan mudah dipahami dan dapat digunakan kembali, baik untuk program
itu sendiri maupun untuk program lain yang memiliki proses yang sama.
Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah nama. Selanjutnya
nama ini dapat dipanggil beberapa kali di beberapa tempat dalam program. Fungsi memu-
dahkan dalam mengembangkan program dan menghemat ukuran program.

7.3 Fungsi Pertama


Pada contoh yang pertama kita akan menghitung luas lingkaran dengan menggunakan
sebuah fungsi getArea(). Kodenya dapat dilihat pada potongan kode di Gambar 7.1 berikut.

Prak. Pemograman I 7
Gambar 7.1. Fungsi Pertama

Fungsi getArea() sebelumnya di definisikan terlebih dahulu, yaitu berisi rumus luas
lingkaran. Dengan kemudian dipanggil pada fungsi main. Penjelasannya dapat dilihat pada
Gambar 7.2

Gambar 7.2. Penjelasan Fungsi

Prak. Pemograman I 8
7.4 Penjelasan Fungsi
7.4.1 Definisi Fungsi
Bentuk fungsi secara umum dapat dibuat sebagai berikut:

returnValueType functionName (parameterList) {


functionBody;
}

 parameterList berisi daftar parameter yang dipisahkan dengan koma.


 returnValueType merupakan tipe kembalian dari fungsi. Jika fungsi mempunyai
kembalian maka returnValueType nya merupakan sebuah tipe data kembalian, jika
tidak mempunyai kembalian maka returnValueType nya void

7.4.2 Pernyataan “return”


Jika fungsi memiliki sesuatu kembalian maka didalam fungsinya wajib ada sintaks return
yang akan mengembalikan sebuah ekspresi sesuai dengan returnValueType nya.

return expression;

7.4.3 Prototipe Fungsi


Pada Gambar 6.1 di baris kode ke 6 terdapat sebuah prototipe fungsi. Pada C++ fungsi harus
di deklarasikan terlebih dahulu sebelum dipanggil. Bentuk prototipe fungsi secara umum
adalah sebagai berikut:

returnValueType functionName (parameterList)

Contoh lain dari prototipe fungsi dapat dilihat pada potongan kode di Gambar 7.3 berikut.
Protipe fungsi berada pada baris kode ke 4 yaitu fungsi maximum.

Prak. Pemograman I 9
Gambar 7.3. Contoh Fungsi Prototipe

7.5 Fungsi Tanpa Kembalian (Void)


Fungsi dapat juga tidak memiliki nilai kembalian. Fungsi ini hanya menjalankan
serangkaian operasi tanpa perlu adanya kembalian ke pemanggilnya. Contoh fungsi void
dapat dilihat pada Gambar 6.4 berikut. Pada potongan kode di Gambar 7.4 tersebut juga
diperlihatkan bahwa fungsi tidak wajib memiliki prototipe jika definisi fungsi diletakkan di
atas blok program main atau pemanggil fungsinya.

Gambar 7.4. Fungsi Void

Prak. Pemograman I 10
7.6 Penggunaan Parameter

Terdapat dua cara parameter dapat diberikan kepada sebuah fungsi yaitu dengan pass by
value, atau dengan pass by reference.

7.6.1 Pass By Value


Di dalam pass by value parameter diberikan tanpa merubah nilai dari nilai atau variabel
aslinya. Parameter yang berada di dalam fungsi adalah sebuah “copy” nilai dari nilai yang
diberikan pada pemanggil fungsinya. Untuk dapat lebih jelasnya dapat dilihat pada potongan
kode pada Gambar 7.5 berikut.

Gambar 7.5. Pass By Value

7.6.2 Pass By Reference


Di dalam pass by reference variabel yang dijadikan parameter pada saat pemanggilan fungsi
akan ikut terubah nilainya. Untuk dapat lebih jelas dapat dilihat pada potongan kode
Gambar 7.6. Potongan kode tersebut hampir serupa dengan potongan kode pada Gambar
6.5, hanya berbeda pada definisi parameter yang menggunakan tanda reference (&). Jika
dieksekusi variabel n akan ikut terubah setelah pemanggilan fungsi inc.

Prak. Pemograman I 11
Gambar 7.6. Pass By Reference

Prak. Pemograman I 12
BAB VIII
ALGORITMA PENGURUTAN & ALGORITMA PENCARIAN

8.1. Tujuan

1. Menerangkan algoritma-algoritma pengurutan


2. Menerangkan algoritma-algoritma pencarian
3. Mahasiswa mampu menjelaskan langkah-langkah pada algoritma pengurutan
4. Mahasiswa memahami algoritma pencarian

8.2. Teori

8.2.1. Pengurutan

Pengurutan data merupakan hal yang penting dalam kehidupan nyata untuk memudahkan
pengelolaan data. Pengurutan dapat dilakukan dengan urutan menaik atau dengan urutan
menurun. Sebagai contoh, jika ada data angka sebagai berikut.
5 3 7 2 0 9 4 1 8 6
Jika data diurutkan secara menaik akan menjadi sebagai berikut.
0 1 2 3 4 5 6 7 8 9
Jika data diurutkan secara menurun akan menjadi sebagai berikut.
9 8 7 6 5 4 3 2 1 0
Ada beberapa metode pengurutan, yaitu:
 Metode penyisipan (insertion sort)
 Metode seleksi (selection sort)
 Metode gelembung (bubble sort)
Pada pembahasan di bawah ini, akan dijelaskan algoritma-algoritma pengurutan, serta pen-
erapan di dalam C++.

8.2.1.1. Metode Penyisipan (Insertion Sort)


Metode penyisipan langsung adalah metode pengurutan yang mengambil sebuah data sisip
pada data yang diurutkan dan menggeser data yang lebih besar dari data sisip agar data sisip

Prak. Pemograman I 13
dapat ditempatkan pada tempat yang benar. Sebagai contoh, jika ada sebuah larik yang beri-
si angka-angka sebagai berikut.
5 3 7 2 0 9 4 1 8 6
Jika data di atas akan diurutkan dengan urutan menaik menggunakan metode penyisipan
langsung maka prosesnya sebagai berikut.
Data Hasil Pengurutan
Sisip
3 5 3 7 2 0 9 4 1 8 6
Pada perulangan ke-1, data indeks 1 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat satu data yang lebih besar daripada data sisip,
maka satu data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
paling depan.
7 3 5 7 2 0 9 4 1 8 6
Pada perulangan ke-2, data indeks 2 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Jika data sebelumnya tidak ada yang lebih besar dari data
sisip maka tidak ada data yang harus digeser ke belakang.
2 3 5 7 2 0 9 4 1 8 6
Pada perulangan ke-3, data indeks 3 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat tiga data yang lebih besar daripada data sisip,
maka tiga data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
paling depan.
0 2 3 5 7 0 9 4 1 8 6
Pada perulangan ke-4, data indeks 4 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat empat data yang lebih besar daripada data sisip,
maka empat data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
paling depan.
9 0 2 3 5 7 9 4 1 8 6
Pada perulangan ke-5, data indeks 5 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Jika data sebelumnya tidak ada yang lebih besar dari data
sisip maka tidak ada data yang harus digeser ke belakang.
4 0 2 3 5 7 9 4 1 8 6

Prak. Pemograman I 14
Pada perulangan ke-6, data indeks 6 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat tiga data yang lebih besar daripada data sisip,
maka tiga data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
sebelum tiga data yang digeser.
1 0 2 3 4 5 7 9 1 8 6
Pada perulangan ke-7, data indeks 7 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat enam data yang lebih besar daripada data sisip,
maka enam data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
sebelum enam data yang digeser.
8 0 1 2 3 4 5 7 9 8 6
Pada perulangan ke-8, data indeks 8 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat satu data yang lebih besar daripada data sisip,
maka satu data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
sebelum satu data yang digeser.
6 0 1 2 3 4 5 7 8 9 6
Pada perulangan ke-9, data indeks 9 dijadikan sebagai data sisip, kemudian dibanding-
kan dengan data sebelumnya. Terdapat tiga data yang lebih besar daripada data sisip,
maka tiga data tersebut harus digeser satu tempat dan data sisip dipindah ke tempat
sebelum tiga data yang digeser.
Hasil 0 1 2 3 4 5 6 7 8 9
akhir

Prak. Pemograman I 15
Langkah-langkah di atas jika dituangkan di dalam C++ menjadi sebagai berikut.

Gambar 8. 1. Source Code Insertion Sort

8.2.1.2. Metode Seleksi (Selection Sort)


Metode seleksi adalah metode pengurutan yang mencari nilai terkecil atau terbesar bergan-
tung pada pengurutan menaik atau menurun yang kemudian ditempatkan pada tempat paling
depan, kemudian mencari lagi nilai terkecil atau terbesar kedua sepanjang jumlah elemen
larik dikurangi satu. Setelah ditemukan, elemen kedua ditukar dengan nilai tersebut, begitu
seterusnya. Sebagai contoh, jika ada sebuah larik yang berisi angka-angka sebagai berikut.
5 3 7 2 0 9 4 1 8 6
Jika data di atas akan diurutkan dengan urutan menaik menggunakan metode seleksi maka
prosesnya sebagai berikut.

Prak. Pemograman I 16
Nilai
Hasil Pengurutan
Terkecil
0 5 3 7 2 0 9 4 1 8 6
Pada perulangan ke-1, dicari nilai terkecil dari elemen larik indeks 0-9 dan ditemukan
nilai 0 sebagai nilai terkecil, kemudian tempat nilai 0 ditukar dengan elemen indeks 0.
1 0 3 7 2 5 9 4 1 8 6
Pada perulangan ke-2, dicari nilai terkecil dari elemen larik indeks 1-9 dan ditemukan
nilai 1 sebagai nilai terkecil, kemudian tempat nilai 1 ditukar dengan elemen indeks 1.
2 0 1 7 2 5 9 4 3 8 6
Pada perulangan ke-3, dicari nilai terkecil dari elemen larik indeks 2-9 dan ditemukan
nilai 2 sebagai nilai terkecil, kemudian tempat nilai 2 ditukar dengan elemen indeks 2.
3 0 1 2 7 5 9 4 3 8 6
Pada perulangan ke-4, dicari nilai terkecil dari elemen larik indeks 3-9 dan ditemukan
nilai 3 sebagai nilai terkecil, kemudian tempat nilai 3 ditukar dengan elemen indeks 3.
4 0 1 2 3 5 9 4 7 8 6
Pada perulangan ke-5, dicari nilai terkecil dari elemen larik indeks 4-9 dan ditemukan
nilai 4 sebagai nilai terkecil, kemudian tempat nilai 4 ditukar dengan elemen indeks 4.
5 0 1 2 3 4 9 5 7 8 6
Pada perulangan ke-6, dicari nilai terkecil dari elemen larik indeks 5-9 dan ditemukan
nilai 5 sebagai nilai terkecil, kemudian tempat nilai 5 ditukar dengan elemen indeks 5.
6 0 1 2 3 4 5 9 7 8 6
Pada perulangan ke-7, dicari nilai terkecil dari elemen larik indeks 6-9 dan ditemukan
nilai 6 sebagai nilai terkecil, kemudian tempat nilai 6 ditukar dengan elemen indeks 6.
7 0 1 2 3 4 5 6 7 8 9
Pada perulangan ke-8, dicari nilai terkecil dari elemen larik indeks 7-9 dan ditemukan
nilai 7 sebagai nilai terkecil. Elemen telah sesuai dengan tempatnya maka tidak perlu
ditukar.
8 0 1 2 3 4 5 6 7 8 9
Pada perulangan ke-9, dicari nilai terkecil dari elemen larik indeks 8-9 dan ditemukan
nilai 8 sebagai nilai terkecil. Elemen telah sesuai dengan tempatnya maka tidak perlu
ditukar.
Hasil 0 1 2 3 4 5 6 7 8 9
akhir

Prak. Pemograman I 17
Langkah-langkah di atas jika dituangkan di dalam C++ menjadi sebagai berikut.

Gambar 8. 2. Source Code Selection Sort


8.2.1.3. Metode Gelembung (Bubble Sort)
Metode gelembung adalah metode pengurutan yang menukarkan dua buah elemen secara
terus menerus sampai pengurutan selesai. Sebagai contoh, jika ada sebuah larik yang berisi
angka-angka sebagai berikut.
5 3 7 2
Jika data di atas akan diurutkan dengan urutan menaik menggunakan metode gelembung
maka prosesnya sebagai berikut.
5 3 7 2
Perulangan ke-1 membandingkan elemen indeks 0 dengan indeks 1, karena elemen indeks 0
lebih besar dari elemen indeks 1 maka dilakukan pertukaran.
3 5 7 2
Perulangan ke-2 membandingkan elemen indeks 1 dengan indeks 2, karena elemen indeks 1 tid-
ak lebih besar dari elemen indeks 2 maka tidak ada pertukaran.
3 5 7 2
Perulangan ke-3 membandingkan elemen indeks 2 dengan indeks 3, karena elemen indeks 2
lebih besar dari elemen indeks 3 maka dilakukan pertukaran.
3 5 2 7

Prak. Pemograman I 18
Perulangan ke-4 membandingkan elemen indeks 0 dengan indeks 1, karena elemen indeks 0 tid-
ak lebih besar dari elemen indeks 1 maka tidak ada pertukaran.
3 5 2 7
Perulangan ke-5 membandingkan elemen indeks 1 dengan indeks 2, karena elemen indeks 1
lebih besar dari elemen indeks 2 maka dilakukan pertukaran.
3 2 5 7
Perulangan ke-6 membandingkan elemen indeks 2 dengan indeks 3, karena elemen indeks 2 tid-
ak lebih besar dari elemen indeks 3 maka tidak ada pertukaran.
3 2 5 7
Perulangan ke-7 membandingkan elemen indeks 0 dengan indeks 1, karena elemen indeks 0
lebih besar dari elemen indeks 1 maka dilakukan pertukaran.
2 3 5 7
Perulangan ke-8 membandingkan elemen indeks 1 dengan indeks 2, karena elemen indeks 1 tid-
ak lebih besar dari elemen indeks 2 maka tidak ada pertukaran.
2 3 5 7
Perulangan ke-9 membandingkan elemen indeks 2 dengan indeks 3, karena elemen indeks 2 tid-
ak lebih besar dari elemen indeks 3 maka tidak ada pertukaran.

Langkah-langkah di atas jika dituangkan di dalam C++ menjadi sebagai berikut.

Gambar 8. 3. Source Code Bubble Sort

8.2.1.4 Metode Penggabungan MERGE SORT

Prak. Pemograman I 19
Metode pengurutan merge sort adalah metode pengurutan lanjut, sama dengan
metode Quick Sort. Metode ini juga menggunakan konsep devide and conquer yang
membagi data S dalam dua kelompok yaitu S1 dan S2 yang tidak beririsan (disjoint). Proses
pembagian data dilakukan secara rekursif sampai data tidak dapat dibagi lagi atau dengan
kata lain data dalam sub bagian menjadi tunggal. Setelah data tidak dapat dibagi lagi, proses
penggabungan (merging) dilakukan antara sub-sub bagian dengan memperhatikan urutan
data yang diinginkan (ascending/kecil ke besar atau descending/besar ke kecil). Proses
penggabungan ini dilakukan sampai semua data tergabung dan terurut sesuai urutan yang
diiginkan. Secara umum, algoritma merge sort dapat diimplementasikan secara rekursif.
Fungsi rekursif adalah sebuah fungsi yang didalam implementasinya memanggil dirinya
sendiri. Pemanggilan diri sendiri ini berakhir jika kondisi tertentu terpenuhi (terminated
condition is true).
Langkah-langkah merge sort adalah sebaai berikut:
1. Bagi menjadi dua bagian dengan cara menemukan Q yang berada diantara P dan R.
2. Mengurutkan secara rekursif sub array di tiap dua sub problem yang dihasilkan oleh
langkah satu.
3. Gabungkan dua sub array yang telah di urutkan menjadi satu array.
Sebagai contoh, jika ada sebuah larik yang berisi angka-angka sebagai berikut.

14 7 3 12 9 11 6 2

Jika data di atas akan diurutkan dengan urutan menaik menggunakan metode merge sort
maka prosesnya sebagai berikut.

Prak. Pemograman I 20
Gambar 8. 4. Animasi Merge Sort
Langkah-langkah di atas jika dituangkan di dalam C++ menjadi sebagai berikut:

Gambar 8. 5. Source Code Merge Sort

Prak. Pemograman I 21
8.2.1.5 Metode Cepat (QUICK SORT)
Quicksort merupakan Algoritma Pembagi. Merupakan membandingkan suatu elemen
(disebut juga pivot) dengan elemen yang lain dan menyusunnya sedemikian rupa sehingga
elemen‐elemen lainnya yang lebih kecil daripada pivot tersebut terletak disebelah kirinya
dan elemen‐elemen lain yang lebih besar daripada pivot terletak disebelah kanannya.
Dengan demikian telah terbentuk dua sublist, yang terletak di sebelah kiri dan kanan dari
pivot. Lalu pada sublist kiri dan sublist kanan anggap sebuah list baru dan kerjakan proses
yang sama seperti sebelumnya. Demikian seterusnya sampai tidak terdapat sublist lagi
sehingga didalamnya terjadi sebuah proses rekursif.
Langkah-langkah merge sort adalah sebaai berikut:
1. Bagi dengan memilih suatu elemen pada subarray [p..r]. Elemen ini disebut sebagai pivot.
Atur elemen pada array [p..r] sehingga semua elemen pada array [p..r] lain lebih kecil atau
sama dengan pivot yang ada di kiri dan semua elemen didalamnya.
2. Urutkan dengan cara rekursif array[p..q-1](semua elemen yang ada di kiri pivot yang
harus lebih kecil atau sama dengan pivot) dan array[q+1..r](semua elemen yang ada di
kanan pivot yang harus lebih besar dari pivot).
Sebagai contoh, jika ada sebuah larik yang berisi angka-angka sebagai berikut.

9 7 5 11 12 2 14 3 10 6

Prak. Pemograman I 22
Gambar 8. 6. Animasi Quick Sort
Langkah-langkah di atas jika dituangkan di dalam C++ menjadi sebagai berikut:

Prak. Pemograman I 23
Gambar 8. 7. Source Code Quick Sort

8.2.2. Pencarian

Pencarian suatu data pada sekumpulan data merupakan proses yang sangat penting dalam
kehidupan nyata. Seperti halnya pengurutan, pencarian juga dapat dilakukan dengan bebera-
pa metode pencarian seperti metode pencarian beruntun (sequential search) dan metode bagi
dua (binary search) yang akan dibahas.
8.2.2.1 Pencarian Beruntun (Sequential Search)
Pencarian beruntun dapat dilakukan pada data yang belum terurut maupun yang sudah
terurut. Pencarian beruntun dilakukan dengan melakukan penelusuran data satu persatu
kemudian dicocokkan dengan data yang dicari, jika tidak sama maka penelusuran dilanjut-
kan, jika sama maka penelusuran dihentikan, berarti data telah ditemukan. Jika ada data se-
bagai berikut.
Nomor Induk Nama Nilai
10101 Adi 64.75
10103 Budi 75.11
10105 Charli 84.63
10102 Dodi 77.07
10104 Edi 66.70
Prak. Pemograman I 24
Akan dicari nilai dari Charli dalam hal ini data yang dipunyai adalah nomor induk Charli
yaitu “10105”. Jika pencarian beruntun dituangkan di dalam C++ menjadi sebagai berikut.

Gambar 8. 8. Source Code Binari


8.2.2.2. Pencarian Bagi Dua (Binary Search)
Pencarian bagi dua, atau pencarian biner, hanya dapat dilakukan pada data yang sudah
terurut. Sebagai contoh, jika ada sebuah larik yang berisi angka-angka sebagai berikut.
5 3 7 2 0 9 4 1 8 6
Jika yang dicari adalah angka 8 maka prosesnya sebagai berikut.
Langkah Keterangan
1 0 1 2 3 4 5 6 7 8 9
1. Tabel masih dianggap sebagai satu kesatuan yakni table berisi data yang telah
terurut.
2 0 1 2 3 4 5 6 7 8 9
2. Tabel dibagi menjadi dua.
3. Dicek nilai paling kanan subbagian kiri dan nilai paling kiri subbagian kanan.
4. Jika nilai yang dicari lebih besar atau sama dengan nilai paling kiri subbagian
kanan, cari pada subbagian kanan. Jika nilai yang dicari lebih kecil daripada
nilai paling kanan subbagian kiri maka cari pada subbagian kiri, karena yang
dicari adalah 8 maka dicari pada subbagian kanan.
3 0 1 2 3 4 5 6 7 8 9
5. Subbagian kanan dibagi menjadi dua.
6. Dicek nilai paling kanan subbagian kiri dan nilai paling kiri subbagian kanan.

Prak. Pemograman I 25
7. Jika nilai yang dicari lebih besar atau sama dengan nilai paling kiri subbagian
kanan, cari pada subbagian kanan. Jika nilai yang dicari lebih kecil daripada
nilai paling kanan subbagian kiri maka cari pada subbagian kiri, karena yang
dicari adalah 8 maka dicari pada subbagian kanan.
4 0 1 2 3 4 5 6 7 8 9
8. Tabel dibagi menjadi dua.
9. Dicek nilai paling kanan subbagian kiri dan nilai paling kiri subbagian kanan.
10. Jika nilai yang dicari lebih besar atau sama dengan nilai paling kiri subbagian
kanan, cari pada subbagian kanan. Jika nilai yang dicari lebih kecil daripada
nilai paling kanan subbagian kiri maka cari pada subbagian kiri, karena yang
dicari adalah 8 maka dicari pada subbagian kanan.

Langkah-langkah di atas jika dituangkan di dalam C++ menjadi sebagai berikut.

Gambar 8. 9. Source Code PencarianLatihan

Prak. Pemograman I 26
Latihan
Diketahui data siswa sebagai berikut.
NISN Nama Nilai
9960312699 Handi Ramadhan 90
9963959682 Rio Alfandra 55
9950310962 Ronaldo Valentino Uneputty 80
9970272750 Achmad Yaumil Fadjri R. 60
9970293945 Alivia Rahma Pramesti 70
9952382180 Ari Lutfianto 65
9965653989 Arief Budiman 60
1. Urutkan data tersebut dengan urutan menaik berdasarkan:
 NISN
 Nilai
dengan menggunakan metode pengurutan penyisipan, seleksi, dan gelembung.
2. Carilah data yang memiliki NISN 9950310962, kemudian tampilkan nilainya
menggunakan pencarian bagi dua.
3. Ubah nama data yang memiliki nilai 60 menjadi Joko. Manfaatkan metode pencarian
beruntun.

Prak. Pemograman I 27
BAB IX
POINTER
7.1. Tujuan
1. Mahasiswa mampu memahami konsep pointer
2. mahasiswa mampu menerapkan pointer pada linked list

7.2. Teori
Pointer merupakan sebuah variable yang berisi alamat dari variable lain. Suatu pointer di-
maksudkan untuk menunjukkan ke suatu alamat memori sehingga alamat dari suatu variable
dapat diketahui dengan mudah. Konsep pointer sebenarnya cukup sederhana. Pointer
sesungguhnya berisi alamat dari suatu data, bukan data sebagaimana variabel yang telah
anda kenal.
Mengapa harus menggunakan POINTER?

Karena dengan menggunakan pointer dapat meningkatkan kinerja untuk operasi yang
dilakukan secara berulang. Dengan syarat Kalau mendeklarasikan pointer kedalam
array, tidak boleh menggunakan tanda bintang.

Pointer juga di gunakan untuk mengalokasikan tempat pada memori secara dinamis
yakni dapat diubah-ubah alokasi tempatnnya pada memori data yang dimasukkan se-
bagai nilai pointer akan selalu tersimpan sehingga diperlukan penghapusan yang
tujuannya untuk mengosongkan memori, perintah yang digunakan untuk menghapus
memori adalah delete [] nama variable.

Pointer juga berguna untuk :


1. Mengirimkan “Parameter yang berupa variabel” ke dalam fungsi, artinya nilai
variabel bisa diubah di dalam fungsi.

2. Untuk membuat variabel DINAMIS (Bukan variabel Statis)

Penggunaan Awal Pointer


Jika variabel merupakan isi memori, dan untuk mengakses isi memori tersebut diperlukan
address, lalu bagaimana cara kita mengetahui alamat dari suatu variabel ? Jawabannya ada-
lah : untuk kebanyakan kasus kita sama sekali tidak perlu tahu alamat dari sebuah variabel.
Untuk mengakses sebuah variabel kita hanya perlu nama dari variabel tersebut. Tugas kom-
piler lah yang mentranslasikan nama ke alamat mesin yang diperlukan oleh komputer.
Akan tetapi terdapat beberapa kasus dimana kita tidak mungkin memberi nama pada sebuah
entitas di program kita. Hal ini terjadi terutama saat kita menggunakan data struktur dinamis
seperti linked list, resizeable array, tree dan lain sebagainya. Hal ini karena kita tidak mung-
kin memberi nama terhadap entitas yang mungkin ada atau tidak ada. Struktur seperti linked
list hampir mustahil dibuat tanpa pointer tanpa harus mendefinisikan LISP-like list.

Prak. Pemograman I 28
1. Penggunaan Pointer Sebagai Moniker.
Istilah moniker di sini berarti sesuatu yang menunjuk atau mengacu kepada entitas lain.
Penggunaan lain pointer sebagai moniker adalah untuk mengatasi kelemahan bahasa C awal
: Dahulu fungsi - fungsi di C hanya mengerti pass by value. Pointer digunakan untuk
mengemulasi pass by reference karena pointer berisi alamat ke objek lain, sehingga fungsi
tersebut dapat mengubah objek tersebut dengan memanipulasi pointer.
2. Operasi pointer arithmatic lain juga didefinisikan untuk pointer.
Yang menarik adalah increment dan decrement. programmer dapat memeriksa semua ele-
men dalam array dengan cara menginkremen pointer dari pointer penunjuk elemen pertama.
Tentu saja hal yang sama dapat dilakukan dengan indexing biasa, ar[idx], akan tetapi dengan
operasi pointer bisa lebih efisien. Alasannya terletak pada bagaimana cara komputer mem-
baca data di ar[idx]. Untuk mesin yang memiliki indexed addressing hal ini cukup sederhana
dan efisien (ar jadi base, idx jadi index, fetching cukup 1 instruksi mov). Tetapi untuk mesin
yang tidak memiliki indexed addressing, akan ada operasi ADD antara ar dan idx, lalu sim-
pan hasilnya ke suatu tempat (register), lalu baru mov. Kadang – kadang register tersebut
digunakan untuk operasi ADD sehingga terdapat beberapa mov untuk menyimpan state.
Akan tetapi jika menggunakan pointer arithmatic, cukup meng-increase nilai yang sudah ada
di register, lalu mov. Tentu saja instruksi di dalam loop juga mempengaruhi efisiensi ini,
tetapi untuk mesin yang mendukung operasi increment langsung, iterasi lewat pointer bi-
asanya lebih efisien.
3. Penggunaan Pointer Sebagai Iterator.
Nama iterator diambil dari STL, dan iterator di STL adalah abstraksi dari pointer. Yang
menakjubkan adalah konsep iterator, yang digeneralisasi dari pointer, adalah konsep yang
cukup powerful untuk merepresentasikan semua algoritma yang bekerja untuk linear con-
tainer ( linear container adalah semua container yang memiliki iterator yang menunjuk pada
elemen pertama, memiliki iterator yang menunjuk pada elemen one-past-end, dan semua
elemen dapat dicapai dengan melakukan operasi incremen dari iterator penunjuk elemen
pertama sebanyak yang diperlukan. Contoh linear container adalah array, vector, linked –
list, dan deque. contoh yang bukan linear container adalah graph dan forest.).
Ketiga fungsi pointer di atas memerlukan operasi yang berbeda- beda. Contohnya jika
pointer berfungsi sebagai moniker, operasi yang sangat diperlukan adalah fungsi malloc,
calloc, free, new, delete, operator ->, operator * dan operator &. sebagai moniker pointer
tidak memerlukan konvertability ke integer dan operasi pointer arihmatic (walaupun ada trik
mengakses field struct dari pointer dengan mengcast pointer to struct menjadi char*, tam-
bahkan offsetnya, lalu baca dengan operator * dan di cast ke tipe field tersebut. trik ini san-
gat berbahaya dan sebaiknya tidak dipakai ). Jika pointer berfungsi sebagai iterator, operasi
pointer arithmatic adalah esensial. Tetapi operasi new dan delete sama sekali tidak di per-
lukan (kecuali untuk array of pointer). bottom line is: you do not do memory management
via iterator.

Sifat konvertibilitas antara integer dan pointer hanya diperlukan jika pointer tersebut dipakai
sebagai abstraksi fixed address. Dua fungsi lain tidak memerlukan sifat ini.

Operator Pointer
Prak. Pemograman I 29
Terdapat dua macam operator pointer yang ada pada C++ yaitu operator deference (&) dan
operator reference (*).
1. Operator deference (&)

Saat mendeklarasikan variabel, kita tidak dapat menentukan alamat memori dari variable
tersebut. compiler secara otomatis akan menempatkan variable pada alamat yang kosong.
Kita dapat mengetahui alamat dari variable yang telah dibuat dengan menambahkan identi-
fier “&”(ampersand sign) di depan nama variable, maka alamat memori variable dapat
diketahui. Identifier ini disebut operator deference atau operator alamat. Operator ini hanya
dapat digunakan pada variable biasa.
2. Operator reference (*)

Pada variable pointer, identifier “*”(asterisk) perlu ditambahkan untuk dapat mengakses
nilai variable pointer. Selain itu, tanda asterisk juga diperlukan pada deklarasi variable un-
tuk membedakan variable pointer dengan variable biasa.
Sebagai contoh dapat dilihat pada listing program pada gambar 1. Variable biasa adalah
Budi dan Dodi, sedangkan variable pointer adalah Rani dan Sari. Deklarasi variable pointer
harus ditambahkan tanda asterisk di depannya seperti terlihat pada gambar 1 baris 6 dan 7.

Gambar 1. Listing program operator pointer


Pada gambar 1 baris ke 12 digunakan operator deference untuk dapat melihat alamat dari
variabel Budi. Kemudian pada baris ke 19 digunakan operator reference untuk melihat nilai
dari variabel pointer Rani yang menunjuk ke alamat variabel Budi. Pada Gambar 2 dapat
dilihat hasil output program.

Prak. Pemograman I 30
Gambar 2. Output program pada gambar 1.

Mendeklarasikan Variabel Pointer


Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :

dengan tipe dapat berupa sembarang tipe data yang sudah dibahas pada bab-bab sebe-
lumnya. Adapun nama_variabel adalah nama dari variabel pointer. Sebagai Contoh

Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data
bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang
menunjuk ke data bertipe char.

Gambar 3. Ilustrasi pendeklarasian variabel pointer

Mengatur Pointer agar Menunjuk ke Variabel Lain


Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat
dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator &
(operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di depan na-
ma variabel. Sebagai contoh, bila xdideklarasikan sebagai variabel bertipe int, maka :

&x

berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel point-
er px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu :

px = &x;

Prak. Pemograman I 31
Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah pern-
yataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.

Mengakses Isi Suatu Variabel Melalui Pointer


Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut
dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer
(pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan
operator indirection (tak langsung) berupa simbol *(bersifat unary).
Contoh penerapan operator * yaitu :

*px

yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai con-
toh jika y bertipe int, maka sesudah dua pernyataan berikut:

px = &x;
y = *px;

y akan berisi nilai yang sama dengan nilai x.

Mengakses dan Mengubah isi Suatu Variabel Pointer


Contoh berikut memberikan gambaran tentang pengubahan isi suatu variabel secara tak
langsung (yaitu melalui pointer). Mula-mula pddideklarasikan sebagai pointer yang menun-
juk ke suatu data bertipe float dan d sebagai variabel bertipe float. Selanjutnya :

d = 54.5;

digunakan untuk mengisikan nilai 54,5 secara langsung ke variabel d. Adapun :

pd = &d;

digunakan untuk memberikan alamat dari d ke pd. Dengan demikian pd menunjuk ke vari-
abel d. Sedangkan pernyataan berikutnya :

*pd = *pd + 10; (atau:*pd += 10; )

merupakan instruksi untuk mengubah nilai variabel d secara tak langsung. Perintah di atas
berarti “jumlahkan yang ditunjuk pd dengan 10 kemudian berikan ke yang ditunjuk oleh
pd”, atau identik dengan pernyataan :

d = d + 10;

Akan tetapi, seandainya tidak ada instruksi :

pd = &d;

maka pernyataan :

Prak. Pemograman I 32
*pd = *pd + 10;

tidaklah sama dengan :

d = d + 10;

Pointer dan Array


Hubungan antara pointer dan array pada bahasa C sangatlah erat. Sebab sesungguhnya array
secara internal akan diterjemahkan dalam bentuk pointer. Pembahasan berikut akan mem-
berikan gambaran hubungan antara pointer dan array. Misalnya dideklarasikan di dalam
suatu fungsi :

int tgl_lahir[3] = { 01, 09, 64 };

dan

int *ptgl;

Kemudian diberikan instruksi :

ptgl = &tgl_lahir[0];

maka ptgl akan berisi alamat dari elemen array tgl_lahir yang berindeks nol. Instruksi di
atas bisa juga ditulis menjadi :

ptgl = tgl_lahir;

sebab namaarray tanpa tanda kurung menyatakan alamat awal dari array. Sesudah penu-
gasan seperti di atas,

*ptgl

dengan sendirinya menyatakan elemen pertama (berindeks samadengan nol) dari array
tgl_lahir.

Prak. Pemograman I 33
Praktikum
Program 1

Program 2

Prak. Pemograman I 34
Program 3

Program 4

TUGAS

1. Buat program untuk menampilkan tulisan: “Praktikum Pemrograman”


menggunakan variabel pointer.
2. Buat Program untuk dapat mencetak huruf keempat dari kata: “Gadjah Mada”
dengan Variabel Pointer.
3. Buat program dengan fungsi dan variabel pointer untuk dapat menukar dua isi
variabel biasa.
Prak. Pemograman I 35
DAFTAR PUSTAKA

Binanto, Iwan, 2003, Pemrograman C++ di Linux, Penerbit Andi, Jogjakarta.

Binanto, Iwan, 2004, Lebih Lanjut dengan Pemrograman C++ di Linux, Penerbit Andi,
Jogjakarta.

Kadir, Abdul, 2004, Pemrograman Visual C++, Penerbit Andi, Jogjakarta.

Shalahuddin, M. dan A. S., Rosa, 2009, Belajar Pemrograman dengan Bahasa C++ dan
Java, Penerbit Informatika, Bandung.

Java 2 TM Fourth Edition, McGraw Hill, New York

www.juicy.com/tutorial/c++

http://www.gamedevid.org/forum/showthread.php?t=5075

http://didicross.wordpress.com/2009/05/30/pointer-pada-c/

http://en.wikipedia.org/wiki/Pointer_(computing)

http://komunitas.coder.web.id/showthread.php?p=4280

Dasar Pemrograman I ITS

https://www.ntu.edu.sg/home/ehchua/programming/#Cpp

Prak. Pemograman I 1

Anda mungkin juga menyukai