Anda di halaman 1dari 69

MODUL PELATIHAN SINGKAT

MATERI INFORMATIKA DALAM RANGKA IMPLEMENTASI


KURIKULUM INFORMATIKA SEKOLAH MENENGAH ATAS

ALGORITMA DAN PEMROGRAMAN DASAR

Oleh :
Drs. Janoe Hendarto,M.Kom.

Laboratorium Algoritma dan Komputasi


Departemen Ilmu Komputer dan Elektronika
Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Gadjah Mada
2020

1
Daftar Isi

BAB I - PENGANTAR ............................................................................. 5

1.1 Latar Belakang ............................................................................. 5

1.2 Algoritma...................................................................................... 6

1.3 Komponen Komputer .................................................................... 7

1.4 Program dan Bahasa Pemrograman .............................................. 9

1.5 Penerjemah Bahasa Pemrograman.............................................. 12

1.6 Pemrograman Terstruktur .......................................................... 14

1.7 Tahapan Penyelesaian Masalah dengan Pemrograman ................ 14

BAB II - NOTASI ALGORITMA .............................................................. 16

2.1 Notasi Deskriptif ......................................................................... 16

2.2 Notasi Flowchart......................................................................... 16

2.3 Notasi Menggunakan pseudo-code .............................................. 19

2.4 Latihan Soal ............................................................................... 20

BAB III - TIPE DATA ............................................................................ 21

3.1 Tipe Data.................................................................................... 21

3.1.1 Tipe Dasar ............................................................................ 21

3.1.2 Tipe Bentukan ...................................................................... 24

3.2 Nama ......................................................................................... 24

3.2.1 Variabel. ............................................................................... 24

3.3 Nilai ........................................................................................... 25

3.3.1 Pengisian Nilai ke Variabel .................................................... 25

3.3.2 Ekspresi ............................................................................... 26

3.3.3 Menuliskan Nilai ke Piranti Keluaran .................................... 26

2
3.4 Struktur program C/C++ ............................................................ 27

3.4.1 Kepala Program (Header)....................................................... 27

3.4.2 Bagian Deklarasi .................................................................. 28

3.4.3 Bagian Pernyataan................................................................ 29

3.5 Latihan soal ............................................................................... 30

BAB IV - STRUKTUR RUNTUNAN DAN PERCABANGAN ....................... 31

4.1 Struktur Runtunan .................................................................... 31

4.2 Struktur Percabangan ................................................................ 32

4.2.1 Satu Kasus ........................................................................... 32

4.2.2 Dua Kasus ............................................................................ 33

4.2.3 Tiga Kasus atau Lebih .......................................................... 33

4.2.4 Struktur Switch .................................................................... 34

4.3 Latihan Soal ............................................................................... 35

BAB V - STRUKTUR PENGULANGAN ................................................... 37

5.1 Struktur Pengulangan ................................................................ 37

5.2 Struktur FOR ............................................................................. 37

5.3 Struktur WHILE ......................................................................... 39

5.4 Struktur do-while ....................................................................... 39

5.5 Latihan Soal ............................................................................... 40

BAB VI - SUB PROGRAM..................................................................... 42

6.1 Pendeklarasian Fungsi tanpa pengembalian nilai........................ 42

6.2 Pemanggilan Fungsi tanpa pengembalian nilai............................ 43

6.3 Variabel Global dan Lokal ........................................................... 43

6.4 Parameter ................................................................................... 44

6.5 Latihan Soal ............................................................................... 47


3
BAB VII - FUNGSI DENGAN PENGEMBALIAN NILAI ............................ 48

7.1 Definisi Fungsi ........................................................................... 48

7.2 Pendeklarasian Fungsi ............................................................... 48

7.3 Pemanggilan Fungsi ................................................................... 48

7.4 Latihan Soal ............................................................................... 50

BAB VIIII - TIPE DATA ARRAY ............................................................. 51

8.1 Deklarasi Array .......................................................................... 51

8.2 Mengakses Data: ........................................................................ 51

8.3 Array Dimensi Banyak ................................................................ 52

8.4 Contoh Kasus menggunakan tipe data array .............................. 52

8.5 Latihan Soal ............................................................................... 56

BAB IX - TIPE DATA STUKTUR............................................................ 57

9.1 Deklarasi Struktur ..................................................................... 57

9.2 Akses dan Input Data Struktur................................................... 57

9.3 Array bertipe Struktur ................................................................ 58

9.4 Contoh Kasus ............................................................................. 58

9.5 Fungsi dalam struktur................................................................ 60

9.6 Latihan Soal ............................................................................... 61

BAB X - REKURSI ............................................................................... 62

10.1 Fungsi Rekursif ........................................................................ 62

10.2 Subprogram Rekursif................................................................ 63

LATIHAN SOAL : ............................................................................... 65

DAFTAR PUSTAKA .............................................................................. 69

4
BAB I - PENGANTAR

Pendahuluan
Program komputer dibuat berdasarkan langkah-langkah logis
untuk menyelesaikan masalah. Lagkah-langkah tersebut ditulis dalam
suatu instruksi yang bisa dipahami oleh komputer, kemudian komputer
akan menerjemahkan ke dalam bahasa mesin dan mengerjakan langkah-
langkah tersebut.

Penyajian
1.1 Latar Belakang
Pada saat ini kebutuhan data semakin kompleks. Bayangkan:
indeks dari 8 milyar halaman ! (Google). Semua program komputer
berkaitan dengan data :
• Sistem Informasi menyimpan data laporan, user, informasi, dsb
• Game menyimpan data pemain, posisi, skor, dsb
• Search engine menyimpan data URL, hyperlink, bobot, dsb
• Dan lain sebagainya
Pemilihan algoritma juga mempengaruhi waktu eksekusi oleh
komputer, sebagai contoh : Contoh kasus sederhana : Dimisalkan ada
3.000 file teks dengan rata-rata 20 baris tiap file teks-nya. Dimana tiap
baris mengandung 10 kata. Jadi akan ada 600.000 kata. Tentukan
jumlah kata “corona”. Jika dimisalkan dibutuhkan waktu 1 milidetik
untuk mencek sebuah kata sama dengan “corona”.
 Solusi 1: menggunakan sequential searching, membutuhkan waktu
1 milidetik x 600.000 kata = 600 detik = 10 menit
 Solusi 2 : Binary searching : log 2 600000 = 19 milidetik vs 10 menit!

5
1.2 Algoritma
Algoritma adalah urutan logis pengambilan putusan untuk
pemecahan masalah (set of steps). Dalam lingkungan pemrograman,
langkah penyelesaian permasalahan harus mengikuti 3 tahap berikut:
1. Analisis permasalahan, merupakan rinci permasalahan dan
pendalaman permasalahan hingga mendapatkan ide solusi dalam
pemecahannya.
2. Perancangan algoritma untuk menyelesaikan masalah tersebut,
meliputi proses menyatakan algoritma, validasi dan analisis
algoritma.
3. Implementasikan algoritma tersebut pada sebuah bahasa
pemrograman seperti C++, Java, Python, dan lain sebagainya.
Pastikan program tersebut berjalan tanpa error (sintax, running
maupun output error) dengan menggunakan data uji.

Dalam merancang sebuah program, algoritma memiliki lima ciri penting:


1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah
terbatas (langkahnya berhingga, tidak looping)
2. Setiap langkah harus didefinisikan dengan tepat/pasti (definite) dan
tidak berarti – dua (ambigu).
3. Algoritma memiliki nol atau lebih masukan.
4. Algoritma memiliki satu atau lebih keluaran.
5. Algoritma harus efektif.
Struktur data adalah susunan data di penyimpanan/RAM agar
efisien dalam penyimpanan dan pengolahannya. Struktur data
seharusnya diterapkan pada algoritma yang efisien
Algoritma dan Pemrograman secara umum ditujukan untuk
memberikan pembekalan kepada siswa dalam berfikir secara kritis,
kreatif dan logis dalam menganalisis dan memecahkan masalah berbasis
program komputer. Secara khusus akan diberikan ketrampilan baru

6
dalam hal pengimplementasian hasil analisis pemecahan masalah ke
dalam bentuk program komputer yang benar, baik secara logika maupun
secara sintaksis. Roadmap belajar algoritma dan pemrograman seperti
pada Gambar 1.1 berikut.

Problem Solving (Ultimate Goals)

Advanced Topics (Algoritma dan Struktur Data Kompleks) Peng


emb
anga
Intermediate Topics (Algoritma dan Struktur Data Kompleks)
n
Kepri
Matematika
Algoritma dan Struktur Data Sederhana badi
Diskrit
an
Matematika Dasar Bahasa
Dasar Pemrograman Pemrograman

Gambar 1.1 Roadmap belajar pemrograman

1.3 Komponen Komputer


Komputer merupakan suatu alat untuk membaca, memanipulasi,
dan menyajikan data. Pada masa lalu, penggunaan komputer masih
sangat terbatas, yaitu pada masa instansi pemerintah maupun
perusahaan yang relatif besar. Dengan dikenalkannya komputer
personal memberikan dampak makin mudahnya orang dalam
mendapatkan dan memanfaatkan komputer, bahkan untuk keperluan
di rumah.

Terdapat berbagai macam komputer dilihat dari ukuran fisik


maupun kemampuan. Kemampuan komputer umumnya bergantung
pada jumlah pekerjaan yang dapat ditangani dalam satu satuan
waktu. Komputer yang berkemampuan besar – umumnya dengan

7
harga yang relatif mahal, mampu melakukan banyak operasi secara
simultan.

Pada dasarnya, suatu komputer terdiri atas komponen-komponen


sebagaimana diperlihatkan pada Gambar 1.2 berikut:

Unit pemroses pusat

Unit kontrol

Peralatan Internal storage Peralatan


masukan atau Memory keluaran

Arithmetic
Logical Unit
(ALU)

Aliran data atau


program
Fungsi kontrol
Gambar 1.2 Komponen dasar komputer

Semua data dan program yang akan diproses oleh komputer,


pertama kali dimasukkan ke dalam memory komputer melalui
peralatan masukan (Input Devices). Unit kontrok (Control Unit) akan
menterjemahkan program yang ada di memory dan digunakan untuk
mengontrol atau mengkoordinasikan operasi dari semua komponen
komputer. Data dalam memory dimanipulasi dengan menggunakan
Arithmetic Logic Unit (ALU), dan hasilnya disimpan kembali ke dalam
media penyimpanan dengan menggunakan peralatan keluaran (Output
Devices).

8
1.4 Program dan Bahasa Pemrograman
Komputer merupakan alat yang mempunyai keunggulan dalam
kecepatan proses dan melakukan perhitungan yang komplek. Komputer
mampu menyimpan data dalam ukuran besar, melakukan manipulasi
dan menghasilkan informasi sebagai hasil keluarannya. Masalahnya ialah
bahwa komputer tidaklah dapat melaksanakan itu semua tanpa
mendapatkan instruksi atau perintah mengenai apa yang harus
dikerjakan, yaitu yang disebut dengan program.
Program ditulis secara terinci, sistematis, logis, dapat dimengerti /
dipahami dan dapat dilaksanakan oleh komputer. Baris program disebut
dengan pernyataan (statement), dan masing-masing pernyataan
mengerjakan tugas tertentu. Dengan program akan dapat dilakukan
kontrol langkah-langkah yang harus dikerjakan komputer.
Proses pembuatan program komputer sampai diperolehnya hasil
yang dikehendaki disebut dengan pemrograman komputer, dan
dilaksanakan oleh pemrogram (programmer). Bahasa yang digunakan
sebagai komunikasi diantara orang dengan komputer (untuk penulisan
program) disebut bahasa pemrograman. Bahasa pemrograman
mencakup notasi, simbol, pernyataan, tata bahasa, dan lain-lain aspek
bahasa.
Penulisan program harus memenuhi aturan sintak (syntatic rule)
dari bahasa pemrograman. Perbedaan mendasar diantara bahasa
pemrograman dengan bahasa sehari-hari yang digunakan manusia ialah
bahwa bahasa pemrograman digunakan sangat tepat dan tidak ada
pengecualian atau arti ganda (ambiguities). Masalahnya ialah karena
komputer tidaklah dapat berfikir dan menimbang-nimbang sebagaimana
dapat dilakukan oleh manusia. Komputer hanya akan mengikuti perintah
persis sebagaimana yang diberikan.
Komputer tidak dapat menafsirkan perintah untuk memehami apa
yang diinginkan oleh pembuat program. Sehingga kesalahan dalam

9
penulisan akan mengubah maksud dari suatu program dan menyebabkan
komputer mengerjakan aksi yang salah.
Dilihat kedekatannya kepada “bahasa manusia”, maka bahasa
pemrograman dikelompokkan menjadi dua, yaitu:
1. Bahasa pemrograman tingkat rendah

Bahasa pemrograman tingkat rendah merupakan “bahasa ibu” dari


komputer, yaitu bahasa yang tidak memerlukan penterjemah untuk
dapat dipahami dan dimengerti oleh komputer. Atau dengan kata lain
untuk berkomunikasi secara langsung dengan komputer orang perlu
menggunakan bahasa tingkat rendah. Contoh dari bahasa
pemrograman tingkat rendah ialah bahasa mesin (machine language).

Setiap perintah dalam bahasa mesin berupa kode numerik


(menggunakan angka 0 dan 1). Demikian juga data disajikan dengan
menggunakan kode numerik. Bentuk pengkodean numerik tersebut
berbeda antara satu kmputer dengan komputer yang lain. Hal ini
menyebabkan penggunaan bahasa mesin kurang praktis dan susah
untuk digunakan atau diingat karena tidak sesuai dengan bahasa
sehari-hari.

2. Bahasa pemrograman tingkat tinggi

Dengan kekurangan dari bahasa tingkat rendah sebagaimana telah


dijelaskan, kemudian dikembangkan bahasa pemrograman yang lain
dan diantaranya ialah bahasa pemrograman tingkat tinggi.

Bahasa pemrograman tingkat tinggi mempunyai ciri-ciri sebagai


berikut:

a. Penulisannya mirip dengan bahasa sehari-hari (bahasa Inggris)

b. Tergantugn pada mesin komputer yang digunakan

c. Bahasa pemrograman tingkat tinggi disebut juga dengan bahasa


generasi ketiga.
10
Program yang ditulis dengan bahasa pemrograman tingkat tinggi tidak
dapat langsung dimengerti oleh komputer, dan harus diterjemahkan
dahulu oleh sebuah “penerjemah” ke dalam bahasa mesin untuk dapat
dilaksanakan atau dieksekusi oleh Unit Pemroses Pusat.

Terdapat banyak sekali bahasa pemrograman tingkat tinggi yang telah


dikembangkan. Diantaranya bahasa pemrograman tersebut yang
banyak digunakan antara lain:

1. BASIC (Beginer All-purpose Symbolic Instruction Code)


• Mudah dipelajari, khususnya untuk pemula
• Cukup popular pada awal pemakaian komputer personal
2. Cobol (Common Business Oriented Language)
• Untuk aplikasi bisnis / administrasi
• Banyak digunakan di bidang pebankan
• Dapat digunakan untuk aplikasi ilmiah tapi dengan
kemampuan terbatas
3. FORTRAN (Formula Translator)
• Untuk komputasi ilmiah
• Populer dan banyak digunakan
4. Pascal
• Merupakan pemrograman terstruktur / sistematik
• Digunakan untuk aplikasi ilmiah maupun bisnis /
administrasi
5. C
• Merupakan bahasa modular, sehingga efisien
• Kode dari bahasa ini padat, sehingga mengurangi waktu
kompilasi

Dilihat dari terapannya, Cobol dan Fortran merupakan bahasa


pemrograman bertujuan khusus. Cobol untuk terapan di bidang bisnis

11
dan administrasi sedangkan Fortran untuk terapan ilmiah. Pascal dan
C merupakan bahasa pemrograman bertujuan umum, karena dapat
digunakan untuk berbagai aplikasi. Dalam kenyataannya
pengelompokkan tersebut tidak terlalu ketat digunakan.

Bahasa pemrograman terus digunakan, mengikuti perkembangan


perangkat keras dan kebutuhan aplikasi. Sebagai contoh untuk
bahasa generasi kelima digunakan untuk super komputer, dan
digunakan antara lain untuk bidang kecerdasan buatan dan sistem
pakar. Bahasa pemrograman yang termasuk generasi kelima
menghasilkan program-program yang bersifat bahasa alamiah (natural
language) dan menggunakan pengetahuan (knowledge) sebagai basis
pengolahan.

1.5 Penerjemah Bahasa Pemrograman


Sebagaimana telah dijelaskan sebelumnya, instruksi atau program
yang telah ditulis dengan bahasa pemrograman tingkat tinggi perlu
diterjemahkan dahulu ke dalam bahasa mesin untuk dapat dieksekusi
oleh komputer.

Kompiler (compiler), merupakan program yang menerjemahkan


program yang ditulis di dalam bahasa pemrograman tingkat tinggi me
suatu himpunan instruksi mesin spesifik yang disimpan dalam bentuk
file. Selain kompiler terdapat program penterjemah yang lain ialah
interpreter. Interpreter digunakan untuk menerjemahkan program
yang ditulis dalam bahasa tingkat tinggi ke dalam bahasa mesin, dan
menjalankannya baris demi baris.

Perbedaan antara kompiler dan interpreter antara lain adalah seperti


pada Tabel 1.1 berikut :

12
Tabel 1.1 Perbedaan kompiler dan interpreter.

Kompiler Interpreter

Menerjemahkan program Menerjemahkan program pada


sebelum dijalankan saat dijalankan

Penerjemahan bersifat tetap Penerjemahan bersifat


sementara

Kesalahan penulisan diketahui Kesalahan penulisan langsung


setelah proses kompilasi diberitahukan

Perbaikan program dilakukan Perbaikan program dapat


dengan kembali ke pengedit langsung dilaksanakan
teks program

Sehubungan dengan perbedaan di atas, maka pelaksanaan


program dengan menggunakan interpreter maupun dengan kompiler
dapat digambarkan pada Gambar 1.3 berikut:

a) Dengan interpreter

Program Baca satu Terjemahkan ke Laksanakan


sumber pernyataan bahasa mesin pernyataan

b) Dengan kompiler

Program Terjemahkan Program dalam


sumber seluruhnya bahasa mesin lengkap

Laksanakan
program lengkap

Gambar 1.3 Tahapan pelaksanaan program.

13
1.6 Pemrograman Terstruktur
Ide pemrograman terstruktur pertama kali disampaikan oleh
Profesor Edsger Djikstra dari Universitas Eidenhower sekitar tahun
1965. Djikstra mengusulkan tidak dipergunakannya pernyataan
GOTO yang dapat menyebabkan timbulnya “spaghetti logic”, yang akan
menjadikan sulitnya dilakukan perbaikan ataupun pengembangan
program. Kemudian HD Millis menanggapi dengan mengemukakan
bahwa pemrograman terstruktur tidak hanya dihubungkan dengan
tidak digunakannya pernyataan GOTO, akan tetapi juga dengan
struktur dari program. Struktur program yang akan menentukan
program yang terstruktur menggunakan pernyataan GOTO atau tidak.

Prinsip utama dari pemrograman terstruktur ialah bahwa jika


suatu proses telah sampai pada suatu titik tertentu, maka proses
selanjutnya tidak boleh melompat ke baris sebelumnya, kecuali untuk
proses berulang. Pemrograman terstruktur dimaksud untuk
mendapatkan program yang didefinikan dengan baik, jelas, mudah
dipahami, mudah ditelusuri, dan mudah dimodifikasi.

1.7 Tahapan Penyelesaian Masalah dengan Pemrograman


Langkah-langkah penyelesaian masalah dengan algoritma dan
pemrograman adalah sebagai berikut :
1. Identifikasi masalah
Contoh :
 Apa tugas-tugas yang harus dilaksanakan?, misalnya :
o Hitung nilai rata-rata siswa yang ditentukan.
o Terjemahkan naskah pidato dari bahasa inggris menjadi
bahasa indonesia
 Apa persyaratan performansinya (ketepatan waktu/ruang/
kecepatan ) ?
2. Perancangan/Desain algoritma, meliputi :
 Deskripsi (cara penulisan):
14
o natural language
o pseudo-code
o diagram (seperti flowchart)
 Kriteria algoritma:
o Input: nol atau lebih
o Output: satu atau lebih
o Definisi/terjemahan/interprestasi: jelas, tepat untuk tiap
instruksi
o Batasan: sebuah algoritma harus berhenti setelah sejumlah
langkah, walaupun jumlah langkah boleh banyak tapi harus
terbatas
 Efektifitas: tiap instruksi harus berupa perintah dasar bukan
merupakan bentukan dari beberapa perintah
3. Analisis Algoritma
 Space complexity
o Berapa banyak space yang dibutuhkan
 Time complexity
o Berapa lama waktu running algoritma
4. Implementasi
 Pemutusan bahasa pemrograman yang akan digunakan
o C, C++, Lisp, Java, Perl, Prolog, assembly, dll.
 Penulisan koding harus terdokumentasi dengan baik dan jelas.
5. Ujicoba
Mengintegrasikan feedback dari user, perbaiki bug, penjaminan
kompatibelitas pada berbagai platform
6. Pemeliharaan

15
BAB II - NOTASI ALGORITMA
Pendahuluan
Pada bab ini akan dijelaskan 3 notasi algoritma dan contoh
penggunaannya pada beberapa algoritma sederhana. Diharapkan siswa
dapat menuliskan algoritma untuk suatu penyelesaian masalah.
Penyajian
Notasi algoritma bukan notasi bahasa pemrograman. Ada beberapa notasi
yang digunakan dalam penulisan algoritma, yaitu notasi algoritma
deskriptif dan notasi algoritma flowchart.
2.1 Notasi Deskriptif
Notasi pertama menyatakan langkah-langkah algoritma dengan kalimat
deskriptif. Contoh:

Algoritma Euclidean

Diberikan dua buah bilangan bulat tak negatif m dan n (m>=n). Carilah
FPB dari kedua bilangan tersebut.

Deskripsi

1. Jika n = 0, maka m adalah jawabannya; stop.Tetapi jika n<>0,


lanjutkan ke langkah 2.

2. Bagilah m dengan n, misalkan r adalah sisanya.

3. Ganti nilai m dengan n, dan nilai n dengan r. Ulang kembali ke


langkah 1.

2.2 Notasi Flowchart


Flowchart adalah serangkaian bagan-bagan yang menggambarkan alir
program. Flowchart atau diagram alir memiliki bagan-bagan yang
melambangkan fungsi tertentu. Bagan, nama dan fungsinya seperti yang
disajikan pada tabel berikut :

16
Tabel 2.1 Bagan Flowchart
BAGAN NAMA FUNGSI

TERMINATOR Awal atau akhir program

FLOW Arah aliran program

PREPARATION inisialisasi/pemberian nilai awal

PROCES Proses/pengolahan data

INPUT/OUTPUT
input/output data
DATA

SUB PROGRAM sub program

DECISION Seleksi atau kondisi

ON PAGE Penghubung bagian-bagian


CONNECTOR flowchart pada halaman yang sama

Penghubung bagian-bagian
OFF PAGE
flowchart pada halaman yang
CONNECTOR
berbeda

Tempat komentar tentang suatu


COMMENT
proses

Flowchart selalu diawali dan diakhiri oleh bagan terminator. Aliran


selalu dari atas ke bawah, satu demi satu langkah. Tidak ada proses yang
dikerjakan bersamaan, semua dikerjakan satu persatu.

17
Proses yang dilakukan komputer sebenarnya hanya ada 3 proses:
input, proses data dan output.
Misal Masalah 1: bagaimana menentukan bahwa suatu bilangan itu
adalah bilangan genap atau ganjil?
Input : bilangan bulat.

Proses : menentukan bilangan ganjil atau genap dengan melakukan


pembagian bilangan dengan bilangan 2. Jika sisa pembagian
NOL maka bilangan tersebut genap, sebaliknya ganjil.

Output : Bilangan Ganjil atau Bilangan Genap

Gambaran penyelesaian dengan Flowchart :

mulai

Masukkan Bilangan
Bulat

Bilangan dibagi 2 dengan


operasi sisa bagi/modulo

YA
Sisa Tulis
bagi=0 ? “GENAP”

Tidak

Tulis
“GANJIL”

Selesai

18
2.3 Notasi Menggunakan pseudo-code
Pseudo-code adalah notasi yang menyerupai notasi bahasa pemrograman
tingkat tinggi, khususnya Bahasa Pascal dan C.

Algoritma Euclidean
{Dibaca dua buah bilangan bulat tak negatif m dan n (m>=n). Carilah
FPB dari kedua bilangan tersebut.}
Deklarasi
m,n,r : integer
Deskripsi
read(m,n)
while n<> 0 do
r  m mod n
m n
n r
endwhile
write(m)

Contoh algoritma yang lain, misalnya :


1. Menghitung Luas Lingkaran
Algoritma LuasLingkaran
deklarasi
jari2, Luas : real
deskripsi
read(jari2)
Luas314*jari2*jari2
write(Luas)

2. Menghitung selisih waktu


Algoritma SelisihWaktu

19
{menghitung selisih waktu antara jam1 : menit 1: detik1 dengan
jam2: menit2 : detik2}
deklarasi
jam1,menit1, detik1,jam2, menit2,detik2 : integer;
sisa, tdetik2, tdetik1, selisih,sjam, smenit,sdetik :
integer;
deskripsi
read(jam1,menit1,detik1)
read(jam2,menit2,detik2)
tdetik1 3600*jam1+60*menit1*detik1
tdetik2 3600*jam2+60*menit2*detik2
selisihtdeti2-tdetik1
sjamselisih div 3600
sisa selisih mod 3600
smenitselisih div 60
sdetikselisih mod 60
write(sjam,smenit,sdetik)

Penutup
2.4 Latihan Soal
1. Tulislah algoritma menentukan bilangan terbesar dari 3 bilangan
bulat A, B, C menggunakan notasi bahasa alami.
2. Tulislah algoritma mengurutkan dari kecil ke besar 3 bilangan
bulat A, B, C menggunakan notasi diagram alir.
3. Tulislah algoritma menghitung luas segi tiga menggunakan
pseudocode.

20
BAB III - TIPE DATA
Pendahuluan
Pada bab ini dileaskan tipe data dan operasi baca tulis data, juga
dijelaskan struktur pemrograman pada bahasa C/C++.
Penyajian
3.1 Tipe Data
Tipe data ada dua macam, yaitu : tipe dasar dan tipe bentukan. Tipe
dasar adalah tipe data yang dapat langsung dipakai. Tipe bentukan
dibentuk oleh tipe dasar atau tipe bentukan lain yang sudah
didefinisikan.
3.1.1 Tipe Dasar
Yang termasuk dalam tipe dasar adalah : bilangan bulat (integer),
logika (boolean), karakter, bilangan riil (float) dan string. Tiga tipe dasar
yang pertama disebut tipe ordinal karena setiap nilai konstantanya bisa
diubah ke nilai integer.
1. Bilangan Bulat (Integer)
Jenis data ini terdiri atas integer positif, integer negatif dan nol.
Pada C++ jenis data ini di bagi atas beberapa bagian, seperti pada Tabel
3.1.
Tabel 3.1 Tipe data integer
Tipe Keterangan Ukuran Jangkauan nilai

char Abjad/karakter 1 byte signed : -128..127


atau untuk
bilangan bulat
unsigned : 0..255
kecil
short int Bilangan bulat 2 byte signed : -32768..32767
(short) dengan
jangkauan pendek
unsigned : 0..65535
int Bilangan bulat 4 byte signed : -2147483648..2147483647

unsigned : 0.. 4294967295


long int Bilangan 4 byte signed : -2147483648..2147483647
(long) bulat dengan

21
jangkauan unsigned : 0.. 4294967295
panjang
long long Bilangan 8 byte 20 digit bilangan bulat
bulat dengan
jangkauan
panjang

Operator Integer terdiri atas :


+ (penjumlahan),
- (pengurangan) ,
* (perkalian),
/ (pembagian bilangan bulat),
% (sisa hasil bagi atau modulo)
2. Logika (Boolean)
Tipe data ini mempunyai nilai TRUE atau FALSE.
Operator untuk jenis data ini adalah operator logika, yaitu : NOT (!), AND
(&&), OR (||) dan XOR (^).
3. Karakter (Char)
Yang dimaksud dengan jenis data ini adalah karakter tunggal atau
sebuah karakter yang ditulis diantara tanda petik tunggal, seperti
misalnya ‘A’,’a’,’!’,’5’ dsb.
Dasarnya adalah ASCII CHARACTER SET.
Misalnya : 032 pada tabel ASCII CHARACTER SET menunjukkan karakter
Blank.
48 0
49 1
65 A
66 B
97 a
dst
Operasi yang dilakukan terhadap tipe karakter adalah operasi
perbandingan =, <>, <, >, <=, >=.

22
4. Bilangan Riil (float)
Penulisan untuk jenis data ini selalu menggunakan titik desimal.
Nilai konstanta numerik real berkisar dari 1E-38 sampai dengan 1E+38
dengan mantissa yang signifikan sampai dengan 11 digit. E menunjukkan
nilai 10 pangkat. Nilai konstanta numerik real menempati memori sebesar
6 byte.
Contoh :
123.45
12345. → salah, titik desimal tidak boleh dibelakang
12E5
12E+5
-12.34
.1234 → salah, titik desimal tidak boleh dimuka

Pada C++, jenis data ini dibedakan atas beberapa tipe, seperti pada
Tabel 3.2.
Tabel 3.2 Tipe data float
Tipe Ukuran memori Jangkauan nilai
(dalam byte)
float 4 3.4*(10^-38) … 3.4*(10^+38)
double 8 1.7*(10^-308) – 1.7*(10^+308)
long double 10 3.4*(10^-4932) – 1.1*(10^+4932)

Operator untuk jenis data ini terdiri atas : + (penjumlahan) , -


(pengurangan) , * (perkalian) dan / (pembagian).

5. Tipe String
Nilai data string merupakan urut-urutan dari karakter yang terletak
di antara tanda petik tunggal. Nilai data string akan menenpati memori

23
sebesar banyaknya karakter stringnya ditambah dengan 1 byte. Contoh :
’Belajar’, ’Pemrograman’, merupakan nilai konstanta string.
Operasi terhadap tipe string terdiri dari :
a. Operasi Penyambungan
Operatornya : +. Digunakan untuk menyambung 2 nilai string.
Contoh :
’Belajar’ + ’Pemrograman’ menjadi ’BelajarPemrograman’
b. Operasi Perbandingan

3.1.2 Tipe Bentukan


Tipe bentukan adalah tipe yang didefinisikan sendiri oleh
pemrogram. Ada dua macam tipe bentukan, yaitu :
1. Tipe dasar yang diberi nama baru
Contoh :
typedef int bilangan
2. Rekaman (struct)

3.2 Nama
Nama diberikan kepada peubah (variabel), konstanta, tipe
bentukan, nama fungsi, dan nama prosedur.
Aturan penamaan :
1. Diawali dengan huruf alfabet.
2. Huruf besar atau kecil dibedakan.
3. Nama tidak boleh mengandung operator aritmatika, operator
relasional, tanda baca, spasi.
3.2.1 Variabel.
Variabel adalah suatu identifier non-standar yang nilainya tidak tetap
atau nilainya merupakan hasil dari suatu proses.
(variabel yang dimaksudkan disini sama seperti halnya arti variabel pada
aljabar).

24
Bentuk umum deklarasinya adalah :
1. Jika hanya 1 (satu) variabel yang dideklarasikan :
Tipe_data identifier;
2. Jika lebih dari 1 (satu) variabel dan masing-masing memiliki tipe data
yang sama :
Tipe_data id-1, id-2, …., id-3;
3. Jika beberapa variabel yang berbeda tipe datanya :
Tipe_data_1 identifier-1;
Tipe_data_2 identifier-2;
.
.
.
Tipe_data_n identifier-n;

Contoh :
int x;
float p,q,r;
char a,b;
boolean m,n;

3.3 Nilai
Nilai adalah besaran dari tipe data yang sudah didefinisikan. Nilai
dapat berupa variabel atau konstanta.

3.3.1 Pengisian Nilai ke Variabel


1. Pengisian nilai secara langsung
Pengisian nilai secara langsung adalah memasukkan nilai ke dalam
nama variabel langsung di teks program.

variabel = nilai
Contoh : N = 10;
25
Atau variabel=variabel
Contoh : N=M;

2. Pembacaan Nilai dari Piranti Masukan


Dalam bahasa C++ untuk keperluan input (membaca nilai) digunakan
identifier standar cin.
Bentuk umum penulisannya :

cin>>variabel input;
Contoh : cin>>A>>B>>C;

3.3.2 Ekspresi
Sebuah ekspresi merupakan kumpulan dari operand-operand
(seperti : bilangan, konstanta, variabel dll) yang bersama-sama dengan
operator membentuk suatu bentuk aljabar dan menyatakan suatu nilai.
Ada 2 (dua) jenis ekspresi dalam bahasa C++, yaitu :
1. Ekspresi numerik / aritmatika, yaitu suatu ekspresi yang
menghasilkan nilai numerik / aritmatika.
2. Ekspresi Boolean atau ekspresi logika, yaitu suatu ekspresi yang
menghasilkan nilai boolean / logika (true/false).

Contoh :
1. (b * b – 4 * a * c) / (2*a) / (2 * a)  ekspresi numerik, jika a,b dan
c adalah bilangan (variabel bernilai numerik).
2. Upah < 1000.0  ekspresi boolean (“upah” adalah suatu variabel
bernilai real).
3.3.3 Menuliskan Nilai ke Piranti Keluaran
Untuk keperluan keluaran (mencetak keluaran) digunakan identifier
standar COUT.

26
Pada setiap keluaran ada fungsi untuk pindah ke baris baru (new line).
Pada COUT ada ENDL.

Bentuk umum penulisannya :


cout<<variabel_output atau cout<<variabel_output<<endl;
Contoh:
cout<<”luas lingkaran adalah”<<luas<<endl;

3.4 Struktur program C++


Struktur program C++ dapat dikelompokkan menjadi tiga bagian,yaitu :
1. Kepala Program (header)
2. Bagian Deklarasi (pada C++ bisa dimana saja)
3. Bagian Pernyataan

1. //Program LuasLingkaran;
2. #include<iostream>
3. Using namespace std;
4. float jari2, Luas ;
5. int main(){
6. cout<<”Masukkan jari-jari : ”; cin>>jari2;
7. Luas = 314*jari2*jari2;
8. cout<<”Luas = ”<<Luas<<endl;
9. return 0;
10. }

Pada program di atas Program LuasLingkaran merupakan judul program.


float jari2, Luas;
merupakan deklarasi, dan selebihnya bagian pernyatan.

3.4.1 Kepala Program (Header)


Kepala program pada C++ berisi library yang akan digunakan pada
program untuk membangkitkan kata-kata tercadang (reserved word) atau
perintah-perintah khusus.

27
Contoh:
- #include<stdio.h>
o Membangkitkan perintah/kata tercadang seperti scanf,
printf, gets, getchar, dll
- #include<iostream>
o Membangkitkan perintah seperti cin, cout dll
- #include<algorithm>
o Berfungsi agar kita bisa menggunakan perintas seperti min,
max, sort, dsb
3.4.2 Bagian Deklarasi
Pada bagian ini dideklarasikan : tipe, variabel, konstanta, prosedur,
dan fungsi.
1. Deklarasi tipe
Digunakan untuk membuat tipe bentukan atau tipe khusus yang
nantinya digunakan dalam deklarasi variabel.
Bentuk deklarasi :
Typedef pengenal = tipe data;
Contoh Typedef bilangan = int;
2. Deklarasi variabel
Digunakan untuk mendeklarasikan semua variabel yang dipakai
dalam program.
Bentuk umum deklarasi :
Bentuk umum deklarasinya adalah :
1. Jika hanya 1 (satu) variabel yang dideklarasikan :
Tipe_data identifier;
2. Jika lebih dari 1 (satu) variabel dan masing-masing memiliki tipe data
yang sama :
Tipe_data id-1, id-2, …., id-3;
3. Jika beberapa variabel yang berbeda tipe datanya :

28
Tipe_data_1 identifier-1;
Tipe_data_2 identifier-2;
.
.
.
Tipe_data_n identifier-n;

Contoh :
int x;
float p,q,r;
char a,b;
boolean m,n;

3. Deklarasi konstanta
Deklarasi ini untuk mendefinisikan nama yang memiliki nilai tetap.
Bagian umum deklarasinya adalah :
CONST identifier = nilai;
Contoh :
CONST phi = 3.14;
x= 2;
y = ‘S’;

3.4.3 Bagian Pernyataan


Bagian pernyataan dalam C++ diawali oleh karakter ”{” dan diakhiri
dengan karakter ”}”.Untuk pembuka pada program utama ”int main()”
dahulu baru diikuti tanda ”{”.

29
Penutup
3.5 Latihan soal
1. Tulislah rumus berikut dalam bahasa C++ :
4
V = r 3
a. 3

a −b b
m= (1 − )
b. 3ac cd

2. Tulislah pernyataan dalam C++ untuk :


a. Menampilkan tulisan : ‘Belajar Pemrograman’.
b. Meminta pengguna memasukkan namanya.
3. Buatlah program dalam Bahasa C++ untuk menghitung luas dan
keliling persegi panjang.
4. Buatlah program dalam Bahasa C++ untuk menghitung jarak 2 titik

A( x1, y1) dan B( x 2, y 2) dengan rumus jarak = d = (x1 − x2)2 + ( y1 − y 2)2

30
BAB IV - STRUKTUR RUNTUNAN DAN
PERCABANGAN

Pendahuluan
Pada bab ini dijelaskan struktur pada algoritma/pemrograman.
Pada bab ini dijelaskan 2 dari 3 struktur tersebut, yaitu struktur
runtunan dan struktur percabangan.

Penyajian
4.1 Struktur Runtunan
Sebuah runtunan (sequence) terdiri dari satu atau lebih instruksi.
Tiap instruksi dikerjakan sesuai dengan urutan penulisannya, yakni
sebuah instruksi dilaksanakan setelah instruksi sebelumnya selesai
dilaksanakan. Urutan instruksi menentukan keadaan akhir program. Bila
urutannya diubah, maka hasil akhirnya mungkin juga berubah.
Contoh berikut adalah program menukar dua buah nilai integer A dan B.
Misal sebelum penukaran nilai A = 5, nilai B=3. Setelah penukaran, nilai
A=3, nilai B=5.

1. //Program Tukar;
2. #include<iostream>
3. using namespace std;
4. int A,B, temp;
5. int main()
6. {
7. cout<<”Masukkan nilai A : ”; cin>>A;
8. cout<<”Masukkan nilai B : ”; cin>>B;
9. temp=A; A=B; B= temp;
10. cout<<”Nilai A sekarang = “<< A;
11. cout<<”Nilai B sekarang = “<< B;
12. }

Jika urutan instruksi di atas diubah, maka hasilnya juga berubah. Misal:
31
temp=A;
A=B;
B= temp;
diubah menjadi :
temp=A;
B= temp;
A=B;

Silakan dicek sendiri.


4.2 Struktur Percabangan
Pada umumnya, masalah yang akan diselesaikan memiliki
beberapa alternatif pelaksanaan aksi. Suatu aksi akan dilaksanakan jika
persyaratan atau kondisi dipenuhi. Kondisi adalah sesuatu yang bernilai
true atau false, disebut kondisi boolean. Contoh kondisi :
x > y
m == n
k mod 4 == 0
!(true)

Penentuan kondisi bolean dan aksi yang dilakukan bergantung


pada jumlah kasus yang terdapat pada masalah tersebut : satu kasus,
dua kasus, atau lebih dari dua kasus.
4.2.1 Satu Kasus
Bentuk umum untuk kasus satu kasus :
if(kondisi) aksi ;

Contoh program dengan satu kasus :

1. //Program BilanganGenap;
2. #include<iostream>
3. using namespace std;
4. int Bil;

32
5. int main(){
6. cout<<”Masukkan bilangan”;
7. cin>>Bil;
8. if(bil mod 2 == 0) Cout<<Bil<<” adalah bilangan genap”;
9. }

4.2.2 Dua Kasus


Bentuk umum untuk kasus dua kasus :

1. if(kondisi) aksi1;
2. else aksi 2;

Contoh program dengan dua kasus :

1. //Program BilanganGenapGanjil;
2. #include<iostream>
3. using namespace std;
4. int Bil;
5. int main(){
6. cout<<”Masukkan bilangan : “; cin>>Bil;
7. if(bil mod 2 == 0) cout<<Bil<<” adalah bilangan genap”;
8. else Cout<<Bil<<” adalah bilangan ganjil”;
9. }

4.2.3 Tiga Kasus atau Lebih


Bentuk umum untuk kasus dua kasus :

if(kondisi1) aksi1;
else if(kondisi2) aksi2
if kondisi3 aksi3
....
else aksiN;

Contoh program dengan tiga kasus atau lebih:

33
1. //Program KonversiNilai;
2. /*Program untuk merubah nilai angka menjadi nilai huruf*/
3. #include<iostream>
4. using namespace std;
5. int Nilai;
6. int main(){
7. cout<<”Masukkan bilangan”; cin>>Nilai>>;
8. if(Nilai>= 80) cout<<”Nilai =A”<<endl;
9. else {if(Nilai>= 65) cout<<”Nilai = B”<<endl;
10. else {if(Nilai>= 50) cout<<”Nilai = C”<<endl;
11. else {if(Nilai>= 35) cout<<”Nilai = D”<<endl;
12. else cout<<”Nilai = E”<<endl;
13. }
14. }
15. }
16. }

4.2.4 Struktur Switch


Untuk masalah dengan tiga kasus atau lebih, struktur Switch dapat
menyederhanakan penulisan If--Else yang bertingkat-tingkat seperti
contoh di atas.
Struktur Switch sebagai berikut :

switch (nama_variabel)
{
nilai1 : aksi1; break;
nilai2 : aksi2; break;
...
nilaiN : aksiN; break;
default: aksiN1;
}
Contoh program KonversiNilai menggunakan struktur Switch :

1. //Program KonversiNilai;
2. //Program untuk merubah nilai angka menjadi nilai huruf
3. #include<iostream>
4. using namespace std;
34
5. int NilaiAngka;
6. int main()
7. {
8. cin<<” Masukkan bilangan”; cin>>NilaiAngka;
9. switch (NilaiAngka/10){
10. case 10 :
11. case 9 : cout<<“Nilai = A”; break;
12. case 8 :
13. case 7 : cout<<“Nilai = B”; break;
14. case 6 :
15. case 5 : cout<<“Nilai = C”; break;
16. case 4 :
17. case 3 : cout<<“Nilai = D”; break;
18. case 2 :
19. case 1 :
20. case 0 : cout<<“Nilai = E”; break;
21. default: cout<<” Masukkan nilai salah”;
22. }
23. }

Nilai bisa berupa nilai tunggal atau beberapa nilai yang disebutkan satu
per satu.

Penutup
4.3 Latihan Soal
1. Buatlah program yang membaca waktu tempuh dalam jam-menit-
detik, kemudian mengubahnya dalam detik.
2. Buatlah program yang mebaca waktu dalam detik, kemudian
mengubahnya dalam jam-menit-detik.
3. Dibaca dua buah waktu J1 (jam1-menit1-detik1) dan J2 (jam2-
menit2-detik2). Buatlah program menghitung selisih waktu dari
dari J1 ke J2 (selisih jam-selisih menit-selisih detik).
4. Buatlah program menukar dua nilai A dan B tanpa menggunakan
variabel bantu temp.

35
5. Buatlah program menampilkan jumlah hari dalam satu bulan.
Masukan program ini adalah nomor bulan dan tahun. Misalkan
bulan 3 tahun 2010, maka program akan menampilkan 31.
6. Buatlah program untuk membaca tiga bilangan bulat A, B, C, lalu
mengurutkannya dari yang kecil ke besar.
7. Buatlah program untuk menghitung total pendapatan dengan
ketentuan :
Total pendapatan = Gaji Pokok + Uang Lembur
Berikut tabel gaji pokok dan lembur perjam berdasarkan golongan:
Golongan Gaji Pokok Lembur per jam
I 1000000 10000
II 2000000 20000
III 3000000 30000
Uang lembur diberikan jika jam kerja melebihi 50 jam.

36
BAB V - STRUKTUR PENGULANGAN

Pendahuluan
Dalam algoritma/pemrograman disediakan struktur pengulangan
untuk mengerjakan instruksi yang sama lebih dari satu kali. Dalam
bahasa C/C++ terdapat 3 bentuk struktur pengulangan, yaitu : For,
While-Do, dan Do-While.

Penyajian
5.1 Struktur Pengulangan
Struktur pengulangan secara umum :
<inisialisasi>
awal pengulangan
badan pengulangan
akhir pengulangan
<terminasi>
Awal dan akhir pengulangan tergantung pada struktur pengulangan yang
digunakan. Terdapat tiga macam struktur pengulangan, yaitu :
1. Struktur FOR
2. Struktur WHILE
3. Struktur DO-WHILE

5.2 Struktur FOR


Bentuk umum struktur FOR ada dua macam, yaitu : menaik atau
menurun.
1. FOR :
for(tipe_data pencacah = nilai_awal ; kondisi;
<operasi_peubah_pencacah>)
aksi;
Keterangan :
37
a. Pada C++, Pencacah haruslah dari tipe data numerik, yaitu integer,
float, long, dan enumerasi.
b. Aksi adalah satu atau lebih instruksi yang diulang. Jika ada lebih dari
satu aksi, maka dimulai dengan karakter ”{” dan diakhiri dengan “}” .
c. kondisi adalah statement yang sselama bernilai TRUE, aksi akan terus
dijalankan. Biasaya kondisi berhubungan dengan pencacah, missal
kita ingin terus berulang sampai pencacah bernilai n+1, maka ditulis
“pencacah<=n” artinya selama pencacah masih kurang dari n, maka
jalankan aksi.
d. Pada mulanya, pencacah diinisialisasi dengan nilai awal, kemudian
bertambah sesuai fungsi peubah pencacah, kemudian selama kondisi
bernilai TRUE, pencacah diubah sesuai operasi pubah pencacah, lalu
jalankan aksi, begitu seterusnya sampai dengan kondisi bernilai
FALSE.
e. tipe data pencacah harus ada jika belum di deklarasikan sebelumnya,
namun tidak boleh ada jika sudah pernah di deklarasikan, serta nilai
awal wajib.

Contoh program menghitung nilai faktorial.

1. //Program HitungFaktorial;
2. #include<iostream>
3. using namespace std;
4.
5. int i,n;
6. long Faktorial;
7. int min()
8. {
9. cout<<“Nilai faktorial berapa ?”; cin>>n;
10. Faktorial =1;
11. for(i= 1; i<=n; i++)
12. Faktorial =Faktorial * i;
13. cout<<“Nilai faktorial “<<N<<” adalah =”<<Faktorial<<endl;
14. }

Contoh program menghitung nilai faktorial untuk for menurun.

38
1. //Program HitungFaktorial;
2. #include<iostream>
3. using namespace std;
4. int i,n;
5. long Faktorial;
6. int min()
7. {
8. cout<<“Nilai faktorial berapa ?”; cin>>n;
9. Faktorial =1;
10. For(i=n; i>=1; i--)
11. Faktorial =Faktorial * i;
12. cout<<“Nilai faktorial “<<N<<” adalah =”<<Faktorial<<endl;
13. }

5.3 Struktur WHILE


Bentuk umum struktur WHILE :
while kondisi
aksi;

Aksi akan dilaksanakan berulangkali selama kondisi bernilai true.


Contoh program menghitung nilai faktorial :

1. //Program HitungFaktorial;
2. #include<iostream>
3. using namespace std;
4.
5. int i,n;
6. long Faktorial;
7. int main()
8. {
9. cout<<“Nilai faktorial berapa ?”; cin>>n;
10. Faktorial =1; i=1;
11. while (i<=n)
12. {
13. Faktorial =Faktorial * i;
14. i=i + 1;
15. }
16. cout<<“Nilai faktorial “<<N<<“ adalah =’,Faktorial);
17. }

5.4 Struktur do-while


Bentuk umum struktur do-while :
do
aksi;
while(kondisi);
39
Aksi akan dilaksanakan berulangkali sampai kondisi bernilai false.
Contoh program menghitung nilai faktorial :
Program HitungFaktorial;

1. #include<iostream>
2. using namespace std;
3.
4. int i,n;
5. long Faktorial;
6. int main() {
7. cout<<“Nilai faktorial berapa ?”; cin>>n;
8. Faktorial=1; i=1;
9. do
10. Faktorial =Faktorial * i;
11. i=i + 1;
12. while(i <= n);
13. cout<<”Nilai faktorial” <<N<<” adalah = “<<Faktorial<<endl;
14. }

Penutup
5.5 Latihan Soal
1. Terdapat sejumlah N siswa. Setiap siswa memiliki nilai UTS dan
UAS antara 0-100. Misalkan untuk merubah nilai angka menjadi
nilai huruf mengikuti aturan :
- Jika Nilai rata-rata UTS dan UAS >= 80, maka nilainya A.
- Jika 80 > Nilai rata-rata UTS dan UAS >= 65, maka nilainya
B.
- Jika 65 > Nilai rata-rata UTS dan UAS >= 50, maka nilainya
C.
- Jika 50 > Nilai rata-rata UTS dan UAS >= 35, maka nilainya
D.
- Jika 35 > Nilai rata-rata UTS dan UAS >= 0, maka nilainya
E.

40
Buatlah program untuk membaca nilai UTS dan UAS dari N
siswa, kemudian menghitung berapa siswa yang mendapat nilai A,
B, C, D, atau E.
2. Buatlah program untuk menampilkan semua solusi bilangan bulat
tidak negatif dari persamaan :
X + Y + Z = 25
3. Buatlah program mengisi password. Program akan terus meminta
masukan password selama kata kunci yang dimasukkan salah.

41
BAB VI - SUB PROGRAM
Pendahuluan
Dalam bahasa pemrograman prosedural, program bisa terdiri dari
beberapa sub program. Dengan membuat sub program, penulisan kode
program yang sama berulangkali bisa dihindarkan, juga memudahkan
menulis dan menemukan kesalahan program.
Dalam Bahasa C++ terdapat sub program berupa fungsi tanpa
pengembalian nilai (menggunakan void) dan fungsi yang mengembalikan
nilai dengan tipe data tertentu. Sub program ini hanya perlu ditulis sekali,
tetapi dapat dipanggil berkali-kali oleh program utama atau sub program
lain.
Penyajian
6.1 Pendeklarasian Fungsi tanpa pengembalian nilai
Bentuk deklarasi fungsi tanpa pengembalian nilai (tanpa
parameter) adalah :

void NamaFungsi;
Bagian_deklarasi;
{
Bagian pernyataan;
}

Contoh :

1. void HitungLuasSegitiga();
2. float alas, tinggi, Luas;
3. {
4. cout<<“Masukkan panjang alas segi tiga :”; cin>>alas;
5. cout<<“Masukkan tinggi segi tiga :”; cin>>tinggi;
6. Luas=(1/2)*alas*tinggi;
7. cout<<“Luas segi tiga = “<<Luas<<endl;
8. }

42
6.2 Pemanggilan Fungsi tanpa pengembalian nilai
Fungsi tanpa pengembalian nilai bukan program yang berdiri
sendiri, jadi tidak bisa dieksekusi secara langsung. Fungsi baru
dilaksanakan dengan cara memanggil namanya dari program utama atau
sub program lain.
Ketika nama fungsi dipangil, kendali program secara otomatis akan
berpindah ke fungsi tersebut. Instruksi di dalam fungsi dilaksanakan.
Setelah semua selesai, kendali program berpindah secara otomatis ke
instruksi sesudah pemanggilan tersebut.
Contoh program utama untuk memanggil prosedur
HitungLuasSegitiga di atas :
int main(){
HitungLuasSegitiga();
}
6.3 Variabel Global dan Lokal
Variabel yang dideklarasikan dalam prosedur hanya dikenal di
badan sub program tersebut, sehingga disebut variabel Lokal.
Sedangkan variabel yang dideklarasikan sebelum program
utama(int main()) bersifat Global, karena dikenali di semua bagian
program.

1. //Program TukarNilai;
2. #include<iostream>
3. using namespace std;
4.
5. int A, B; //A,B variabel global
6. void Tukar();
7. int temp; //temp variabel lokal
8. {
9. temp= A;
10. A= B;
11. B=temp;
12. }
13. int main() {
14. cout<<“Masukkan nilai A = “<<endl;cin>>A;
15. cout<<“Masukkan nilai B = “<<endl;cin>>B;
16. Tukar();
17. cout<<“Nilai A sesudah ditukar = “<<A<<endl;

43
18. cout<<“Nilai B sesudah ditukar = “<<B<<endl;
19. }

6.4 Parameter
Kebanyakan program memerlukan pertukaran informasi antara
fungsi dengan pemanggilnya. Tiap item data ditransfer antara parameter
aktual dan parameter formal yang bersesuaian.
Parameter aktual adalah parameter yang disertakan waktu
pemanggilan, sedangkan parameter formal adalah parameter yang
dideklarasikan di dalam bagian Nama Fungsi.
Berdasarkan maksud penggunaannya, terdapat tiga jenis
parameter formal yang disertakan di dalam fungsi tanpa pengembalian
nilai :
1. parameter masukan
2. parameter keluaran
3. parameter masukan/keluaran

Parameter masukan adalah parameter yang nilainya berlaku


sebagai masukan untuk prosedur. Pada bahasa pemrograman seperti
C++, parameter masukan dinamakan parameter by value.
Parameter keluaran adalah parameter yang menampung keluaran
yang dihasilkan oleh prosedur. Pada bahasa pemrograman seperti C++,
parameter keluaran dinamakan parameter by reference.
Parameter masukan/keluaran adalah parameter yang berlaku
sebagai masukan sekaligus keluaran bagi prosedur tersebut. Pada bahasa
pemrograman seperti C++, parameter masukan/keluaran termasuk
dalam parameter by reference.
Pada C++, parameter formal by value tidak menggunakan karakter
"&" dalam deklarasinya, sedangkan parameter by reference
menggunakannya, tepat sebelum nama variabel. Bisa juga menggunakan

44
tanda ‘*’ di depan nama parameter formal dan pada saat pemanggilan, di
depan parameter aktual diberi tanda ‘&’.
1. Parameter Masukan (By value)
Contoh program menggunakan parameter masukan dalam deklarasi
fungsi tanpa pengembalian nilai:

1. //Program SegitigaKarakter;
2. #include<iostream>
3. using namespace std;
4.
5. int M;
6. char K;
7. void CetakSegitiga(char C; int N);
8. {
9. for(int i=1; i<=n; i++)
10. {
11. for(int j=1; j<=i; j++)
12. cout<<C;
13. cout<<endl;
14. }
15. }
16.
17. int main() {
18. cout<<“Masukkan karakter yang akan dicetak <<endl; cin>>K;
19. cout<<“Masukkan tinggi segi tiga :”; cin>>M;
20. CetakSegitiga(K,M);
21. }

2. Parameter Keluaran (By reference)


Bila fungsi tanpa pengembalian nilai menghasilkan satu atau lebih
nilai yang digunakan oleh program pemanggil, maka nilai keluaran
ditampung di dalam parameter keluaran. Bila fungsi tanpa pengembalian
nilai yang mengandung parameter keluaran dipanggil, maka nama
parameter aktual secara semu menggantikan nama parameter formal
(berlawanan dengan parameter masukan, yang dalam hal ini, nilai
parameter aktual yang di assign ke dalam parameter formal).
Berikut contoh perbedaan parameter masukan dan keluran :

1. //Program ABC;
45
2. #include<iostream>
3. using namespace std;
4.
5. int A, B, C;
6. void XYZ(int X,Y; int &Z);
7. {
8. //X dan Y parameter masukan, Z parameter keluaran}
9. X= X + 1;
10. Y= Y + 1;
11. Z = X + Y;
12. }
13.
14. int main()
15. {
16. A= 2;
17. B= 5;
18. XYZ(A,B,C); {Pemanggilan prosedur XYZ}
19. cout<<A<<" "<< B<<" "<<C); //Menampilkan nilai A, B, dan C setelah pem
anggilan prosedur
20. }

Pada Program ABC di atas, X dan Y adalah parameter masukan,


sedangkan Z adalah parameter keluaran. Ketika Prosedur XYZ dipanggil
dengan parameter aktual A=2 dan B=5, maka nilai itu mengisi nilai
parameter formal X dan Y. Sedangkan nama parameter aktual C secara
semu menggantikan nama parameter formal C (bukan nilainya yang
diisikan). Sehingga setelah pemanggilan, nilai variabel A dan B tetap, yaitu
A=2 dan B =5. Sedangkan nilai variabel C berubah menjadi 9.

3. Parameter Masukan/Keluaran (By reference)


Parameter masukan/keluaran berfungsi sebagai masukan untuk
prosedur sekaligus menampung nilai keluaran prosedur. Sehingga bila
keluarannya berbeda dengan masukannya, maka hasilnya mengikuti nilai
keluarannya.
Contoh Program TukarNilai berikut : 2 nilai integer A dan B
merupakan parameter formal Prosedur Tukar. Setelah instruksi di dalam
prosedur dilaksanakan, maka nilai keluaran A dan B berubah. Karena A
dan B adalah parameter masukan/keluaran, maka nilai parameter aktual

46
pemanggilnya juga berubah sesuai nilai keluaran yang dihasilkan
prosedur.
Program TukarNilai;

1. #include<iostream>
2. using namespace std;
3.
4. int X, Y;
5. void Tukar (int &A; int &B);
6. int temp;
7. {
8. temp = A;
9. A = B;
10. B=temp;
11. }
12. int main() {
13. X= 2; Y= 5;
14. Tukar (X,Y);
15. cout<<“Nilai X setelah ditukar = “<<X<<endl;
16. cout<<“Nilai Y setelah ditukar = “<<Y<<endl;
17. }

Penutup
6.5 Latihan Soal
1. Buatlah prosedur mencari bilangan terbesar dari 3 bilangan integer A,
B, dan C.
2. Buatlah prosedur menghitung nilai rata-rata dari N buah bilangan.

47
BAB VII - FUNGSI DENGAN PENGEMBALIAN NILAI

Pendahuluan
Pada bab ini akan dijelaskan sub program yag kedua, yaitu fungsi
yang mengembalikan nilai.

Penyajian
7.1 Definisi Fungsi
Fungsi adalah sub program yang memberikan/mengembalikan
sebuah nilai dari tipe tertentu. Sebagaimana halnya prosedur, fungsi
diakses dengan memanggil namanya. Selain itu, fungsi juga dapat
mengandung daftar parameter formal. Parameter formal pada fungsi
selalu berupa parameter masukan, karena parameter pada fungsi
merupakan masukan yang digunakan oleh fungsi tersebut untuk
menghasilkan nilai.
7.2 Pendeklarasian Fungsi
Deklarasi fungsi adalah :
Tipe_data NamaFungsi(daftar parameter masukan):;
bagian deklarasi
{
Bagian Pernyataan;
Return nilai_fungsi;
}

7.3 Pemanggilan Fungsi


Fungsi diakses dengan cara memanggil namanya dari program
utama atau sub program lain, diikuti dengan daftar parameter aktual (jika
ada). Karena fungsi menghasilkan nilai, maka nilai tersebut dapat
ditampung dalam suatu variabel (peubah) yang bertipe sama dengan tipe
fungsi.
48
(i). peubah = NamaFungsi(daftar parameter aktual);
atau dimanipulasi langsung seperti :
(ii) cin>>NamaFungsi(daftar parameter aktual);
(iii) if NamaFungsi(daftar parameter aktual) > 0 ....
(iv) y = 2* NamaFungsi(daftar parameter aktual) +3;
Contoh 1 :

1. //Program Terbesar
2. #include<iostream>
3. using namespace std;
4.
5. int A,B,C,D,Z;
6. int Maks(int X,Y)
7. {
8. int temp;
9. if(X > Y) temp= X;
10. else temp = Y;
11. return temp;
12. }
13.
14. int main() {
15. A = 3; B = 6; C= 10; D = 8;
16. cout<<"Bilangan terbesar antara "<<A<<" dan "<< B<<" adalah "<<Maks(A,
B);
17. Z= Maks(C,D);
18. cout<<"Bilangan terbesar antara "<<C<<" dan "<<D<<" adalah "<< Z;
19. cout<<"Yang terbesar antara "<< A<<" "<<B<<" "<<C<<" dan "<<D;
20. If(Maks(A,B) > Maks(C,D))
21. cout<<" adalah = "<< Maks(A,B));
22. cout<<" adalah = "<< Maks(C,D));
23. }

Contoh 2 :

1. //Program menghitung nilai factorial


2. #include<iostream.h>
3. #include<conio.h>
4. int faktorial(int bil)
5. {
6. int i,f;
7. f=1;
8. for (i=1;i<=bil;i++)
9. {
10. f=f*i;
11. }
12. return f;
13. }
14. int main()
49
15. {
16. int f1,b;
17. cout<<" Pakai fungsi biasa : "<<endl;
18. cout<<"bilangan = "; cin>>b;
19. f1=faktorial(b);
20. cout<<f1<<endl;
21. getch();
22. }

Penutup
7.4 Latihan Soal
1. Buatlah fungsi yang menerima masukan 2 titik A( x1, y1) dan B( x 2, y 2)
dan menghitung jarak kedua titik tersebut dengan rumus

jarak = d =
(x1 − x2)2 + ( y1 − y 2)2
2. Buatlah fungsi untuk mengembalikan nilai mutlak X.

50
BAB VIII - TIPE DATA ARRAY

Pendahuluan
Pada bab ini akan dijelaskan tipe data array dan penggunaannya.
Dengan memahami tipe data array, maka siswa dapat membuat program
yag berkaitan dengan manipulasi banyak data dengan tipe yang sama,
seperti masalah pencaria data atau pengurutan data.

Penyajian
Array atau larik terdiri atas bagian-bagian komponen yang memiliki
tipe data sama. Dalam penyimpanannya array selalu mempunyai jumlah
komponen yang tetap yang ditunjukkan oleh indeksnya.
8.1 Deklarasi Array
Variabel array dideklarasikan dengan mencantumkan tipe data dan
nama variabel yang diikuti dengan nomor indeks yang menyatakan
banyaknya lokasi memori yang ingin dibuat.
tipe data nama_variabel[indeks]
contoh int nilai[100]
Pada bahasa C/C++, no indeks dimulai dari 0, jadi pada contoh di atas,
indeks dari 0-99, sehingga bisa menampung 100 elemen bertipe integer.
8.2 Mengakses Data:
Cara mengakses data larik adalah dengan menunjukkan :
Nama_Larik[no.indeks] ;
Misal : x[1] → berarti kita mengakses data larik x pada no.indeks ke-1.
Keuntungan :
Menggunakan data larik, kita tidak akan kehilangan nilai dari suatu data.
Kelemahan :
Saat ditentukan suatu variabel bertipe data array maka ia akan
langsung mengambil tempat pada memory penyimpanannya sesuai

51
dengan tipe data yang digunakan pada array, baik nantinya semua
komponen pada array itu digunakan ataupun tidak.
8.3 Array Dimensi Banyak
Dalam pemrograman kadang kita menghadapi masalah saat kita
akan mendeklarasikan suatu matriks. Dengan adanya tipe data array
maka masalah itu dapat diselesaikan, yaitu dengan menggunakan array
dengan dimensi dua atau lebih yang kemudian dikenal dengan array
dimensi banyak.
Pendeklarasian :
tipe data Nama_Array [indeks1][ indeks2]
Contoh :
int matriks[10][ 10]
Berarti matriks itu akan mempunyai dimensi (10x10), namun itu hanya
batas atas dari indeks yang dipesan dalam memori penyimpanan (di atas
itu tidak akan disimpan), sedangkan apabila nantinya kita hanya
memasukkan jumlah baris misal 2 dan jumlah kolom 2 itu boleh saja
selama tidak lebih dari 10.
Entry-entry dari matriks tersebut dapat kita panggil dengan mengetikkan
Nama_Array[indeks] ;
dari contoh diatas berarti Matriks[2,3] yaitu entry dari matriks pada baris
kedua kolom ketiga.
8.4 Contoh Kasus menggunakan tipe data array
1. Program menghitung nilai maksimum, minimum, rata-rata dari
sejumlah data integer.

1. int main ()
2. {
3. int i,n,maks,min,jum,h;
4. int nilai[10];
5. float rerata;
6. cout<<"Banyaknya data =";
7. cin>>n;
8. jum=0;

52
9. for (i=1;i<=n;i++)
10. {
11. cout<<"Data ke - " <<i<<"= ";
12. cin>>nilai[i-1];
13. jum =jum + nilai[i-1];
14. }
15. rerata= float(jum)/n;
16. maks=nilai[0];
17. min=nilai[0];
18. for (i=1;i<=n-1;i++)
19. {
20. if (nilai[i]>maks)
21. maks=nilai[i];
22. if (nilai[i]<min)
23. min=nilai[i];
24. }
25. cout<<"Nilai Terbesar ="<<maks<<endl;
26. cout<<"Nilai Terkecil ="<<min<<endl;
27. cout<<"Nilai Rata-rata ="<<rerata<<endl;
28. }

2. Program penjumlahan 2 matriks

1. #include <iostream.h>
2. using namespace std ;
3. int main(){
4. //deklarasi
5. int matrix_a[3][3],matrix_b[3][3],matrix_c[3][3];
6. int i,j;
7. char opr;
8. //input nilai matriks ke-1 dari baris dan kolom
9. for(i=1;i<=3;i++){
10. for(j=1;j<=3;j++){
11. cout<<"Masukkan matriks(1) nilai baris ke-"<<i<<"kolom ke-
"<<j<<" : ";
12. cin>>matrix_a[i-1][j-1];
13. }
14. cout<<endl;
15. }
16. //output matriks ke-1
17. for(i=1;i<=3;i++){
18. for(j=1;j<=3;j++){
19. cout<<matrix_a[i-1][j-1]<<"\t";
20. }
21. cout<<endl;
22. }
23. //input nilai matriks ke-2 dari baris dan kolom

53
24. for(i=1;i<=3;i++){
25. for(j=1;j<=3;j++){
26. cout<<"Masukkan matriks(2) nilai baris ke-"<<i<<"kolom ke-
"<<j<<" : ";
27. cin>>matrix_b[i-1][j-1];
28. }
29. cout<<endl;
30. }
31. //output matriks ke-2
32. cout<<endl;
33. for(i=1;i<=3;i++){
34. for(j=1;j<=3;j++){
35. cout<<matrix_b[i-1][j-1]<<"\t";
36. }
37. cout<<endl;
38. }
39. //Input Operator
40. cout<<"Tulis operator ";
41. cin>>opr;
42. //switching operator
43. for(i=1;i<=3;i++){
44. for(j=1;j<=3;j++){
45. switch(opr){
46. case '+' : matrix_c[i-1][j-1] = matrix_a[i-1][j-
1] + matrix_b[i-1][j-1];
47. break;
48. case ‘-‘ : matrix_d[i-1][j-1] = matrix_a[i-1][j-
1] - matrix_b[i-1][j-1];
49. break;
50. }
51. }
52. }
53.
54. //Output Hasil matriks dari Operator +
55. cout<<endl;
56. for(i=1;i<=3;i++){
57. for(j=1;j<=3;j++){
58. cout<<matrix_c[i-1][j-1]<<"\t";
59. }
60. cout<<endl;
61. }
62. //Output Hasil matriks dari Operator -
63. cout<<endl;
64. for(i=1;i<=3;i++){
65. for(j=1;j<=3;j++){
66. cout<<matrix_d[i-1][j-1]<<”\t”;
67. }
68. cout<<endl;
69. }
70. }

54
8.5 Array di dalam Fungsi
Berikut adalah program untuk menentukan rerata, maksimum dan
minimum pada array dengan menggunakan fungsi.

1. #include <iostream>
2. #include <conio.h>
3. using namespace std;
4. typedef int larik[100000];
5.
6. void bacadata(larik x, int& n)
7. {
8. srand(time(NULL));
9. cout << "banyak data :";
10. cin >> n;
11. for (int i = 1; i <= n; i++) {
12. x[i] = rand() % 100 + 1;
13. }
14. }
15. float rerata(larik y, int m)
16. {
17. long long sum = 0;
18. for (int i = 1; i <= m; i++)
19. sum += y[i];
20. return (float)sum / m;
21. }
22.
23. void maxmin(larik x, int n, int& max, int& min)
24. {
25. max = x[1];
26. min = x[1];
27. for (int i = 2; i <= n; i++)
28. if (x[i] > max)
29. max = x[i];
30. else if (x[i] < min)
31. min = x[i];
32. }
33.
34. void cetak(larik x, int n)
35. {
36. for (int i = 1; i <= n; i++) {
37. cout << x[i] << " ";
38. if (i % 20 == 0)
39. cout << endl;
40. }
41. cout << "\n";
42. getch();
43. }
44.
45. int main()
46. {
47. larik y;

55
48. int m, max, min;
49. bacadata(y, m);
50. cetak(y, m);
51. cout << "\nrata-rata = " << rerata(y, m) << endl;
52. maxmin(y, m, max, min);
53. cout << "maximum = " << max << endl;
54. cout << "minimum = " << min << endl;
55. getch();
56. return 0;
57. }

Penutup
8.5 Latihan Soal
1. Buatlah program untuk menghitung nilai standar deviasi dari
sejumlah data nilai ujian (0-100)
2. Buatlah program untuk menampilkan matriks transpose dari
suatu matriks.

56
BAB IX - TIPE DATA STUKTUR

Pendahuluan
Pada bab ini akan dijelaskan tipe data struktur dan array dengan
elemennya bertipe struktur.
Penyajian
9.1 Deklarasi Struktur
Struktur adalah sekumpulan variabel yang masing-masing tipe
datanya bisa berbeda dan dikelompokkan ke dalam satu nama.
Deklarasi :
struct nama_struktur{
tipedata namafield1;
tipedata namafield2;
tipedata namafieldN;
}
Contoh :
struct mhs{
char NIM[5];
char Nama[30];
float IPK;
}

9.2 Akses dan Input Data Struktur


Untuk mengaksesvariabel bertipe struct :
nama_struktur.namafield
Untuk pembacaan nilai :
cin>> nama_struktur.namafield
Contoh : cin>>mhs.NIM;
Untuk penulisan nilai :
cout<< nama_struktur.namafield

57
Contoh : cout<<mhs.NIM;
9.3 Array bertipe Struktur
Untuk bisa memanipulasi sejumlah data bertipe struktur maka
digunakan array dengan elemen bertipe struktur.
Contoh : untuk menyimpan 100 data mahsiswa yang setiap data siswa
terdiri dari NIM, Nama, dan IPK adalah sebagai berikut :
typedef struct siswa {
char NIM[5];
char Nama[30];
float IPK;
}mhs;
mhs data_mhs[100];
9.4 Contoh Kasus
1. Program membaca dan menampilkan data siswa yang terdiri dari NIM,
Nama, dan IPK :

1. #include <iostream.h>
2. #include <conio.h>
3. int main()
4. {
5. struct siswa {
6. char nim[5];
7. char nama[30];
8. float ipk;
9. } mhs;
10. cout<<"Masukkan NIM : ";
11. cin.getline(mhs.nim,5);
12. cout<<"Masukkan Nama : ";
13. cin.getline(mhs.nama,30);
14. cout<<"Masukkan IPK : ";
15. cin>>mhs.ipk;
16. cout<<"Data siswa yang dimasukkan : "<<endl;
17. cout<<"NNIM Siswa : "<<mhs.nim<<endl;
18. cout<<"Nama Siswa : "<<mhs.nama<<endl;
19. cout<<"IPK Siswa : "<<mhs.ipk;
20. getch();
21. }

58
2. Program membaca dan menampilkan sejumlah data siswa, dengan
setiap data siswa terdiri dari NIM, Nama, dan IPK :

1. #include <iostream.h>
2. #include <conio.h>
3. int main ()
4. {
5. int i,n;
6. struct siswa {
7. char nim[5];
8. char nama[30];
9. float ipk;
10. };
11. struct siswa mhs[5];
12. cout<<"Barapa data siswa ?";
13. cin>>n;
14. for (i=0;i<n;i++)
15. {
16. cout<<"Siswa ke - "<<i+1<<": "<<endl;
17. cout<<"Masukkan NIM : ";
18. cin>>mhs[i].nim;
19. cin.getline(mhs[i].nama,30);
20. cout<<"Masukkan Nama : ";
21. cin.getline(mhs[i].nama,30);
22. cout<<"Masukkan IPK : ";
23. cin>>mhs[i].ipk;
24. }
25. cout<<"Data siswa yang dimasukkan : "<<endl;
26. for (i=1;i<=n;i++)
27. {
28. cout<<"Siswa ke - "<<i<<": "<<endl;
29. cout<<"NIM : "<<mhs[i-1].nim<<endl;
30. cout<<"Nama : "<<mhs[i-1].nama<<endl;
31. cout<<"IPK : "<<mhs[i-1].ipk<<endl;
32. cout<<endl;
33. }
34. getch();
35. }

59
9.5 Fungsi dalam struktur
Fungsi dapat didefinisikan dalam struktur sehingga lebih
sederhana dan dapat mengurangi jumlah parameternya.
Sebagai contoh perhatikan program berikut :

1. #include <iostream>
2. #include <string.h>
3. #include <conio.h>
4. using namespace std;
5.
6. typedef struct {
7. string no_hp, nama;
8. string Operator()
9. {
10. string kartu;
11. if (no_hp[4] == 49 && no_hp[5] == 49)
12. kartu = "Halo";
13. else if (no_hp[4] == 49)
14. kartu = "Simpati";
15. else if (no_hp[4] == 53 && no_hp[5] == 50)
16. kartu = "As";
17. else if (no_hp[4] == 55 || (no_hp[4] == 49 && no_hp[5] == 56))
18. kartu = "XL";
19. else if (no_hp[4] == 51)
20. kartu = "Axis";
21. else if (no_hp[4] == 57)
22. kartu = "Tri";
23. else if (no_hp[4] == 53 || no_hp[4] == 54)
24. kartu = "M3";
25. else
26. kartu = "Operator lain";
27. return kartu;
28. }
29. } kontak;
30. typedef kontak larik[102];
31. int i, kk = 0;
32. void buatdata(larik x, int& n)
33. {
34. char c, d, e;
35. int k, i, j;
36. bool b, cek[10];
37. cout << "banyak kontak : ";
38. cin >> n;
39. srand(time(NULL));
40. for (i = 1; i <= n; i++) {
41. x[i].no_hp = "+628";
42. for (j = 0; j < 10; j++) {
43. c = rand() % 9;
44. x[i].no_hp += 49 + c;
45. }

60
46. x[i].nama = "";
47. for (j = 0; j < 10; j++) {
48. d = (65 + rand() % 20);
49. x[i].nama += d;
50. }
51. }
52. }
53.
54. void cetak(larik x, int n)
55. {
56. int i, j, p;
57. for (i = 1; i <= n; i++) {
58. cout << x[i].nama << " "
59. << " " << x[i].no_hp << " " << x[i].Operator();
60. cout << endl;
61. }
62. cout << endl;
63. }
64.
65. void cetakOperator(larik x, int n, string noperator)
66. {
67. for (int i = 1; i <= n; i++) {
68. if (x[i].Operator() == noperator) {
69. cout << x[i].nama << " "
70. << " " << x[i].no_hp << " " << x[i].Operator();
71. cout << endl;
72. }
73. }
74. }
75.
76. int main()
77. {
78. int n;
79. larik x, y, z;
80. buatdata(x, n);
81. cetak(x, n);
82. cetakOperator(x, n, "Simpati");
83. getch();
84. return 0;
85. }

Penutup
9.6 Latihan Soal
1. Buatlah program menyimpan suatu titik koordinat dalam struktur.
2. Buatlah program menyimpan sejumlah titik koordinat.
3. Buatlah program untuk menyimpan sejumlah bilangan pecah
rasional, dan menampilkan bilangan pecahan tersebut yang
nilainya paling besar.

61
BAB X - REKURSI

Pendahuluan
Pada bab ini dijelaskan konsep rekursi dan contoh penggunaannya.
Penyajian
Suatu subprogram tidak hanya bisa memanggil sub program lain,
tetapi juga bisa memanggil dirinya sendiri. Cara ini dikenal dengan
sebutan rekursi.
Rekursi banyak dipakai pada persoalan yang dapat dipecahkan
secara induktif. Misalnya untuk menghitung faktorial.

 1, jika m = 0
m! = 
1x 2 x3 x 4....xm jika m  0

Pemecahan secara rekursif :


0!=1 (penghentian rekursi)
jika m > 0, m ! = m x (m-1) ! (langkah induksi)

10.1 Fungsi Rekursif


Fungsi yang memanggil dirinya sendiri disebut fungsi rekursif.
Contoh fungsi rekursif untuk menghitung faktorial.

1. long fact(int m);


2. {
3. if(m = 0) return (1);
4. else return (m*fact(m-1));
5. }

Coba pada cout << fact(3) << endl; maka hasilnya adalah 6.

62
10.2 Subprogram Rekursif
Rekursi juga bisa diterapkan pada subprogram secara umum
(fungsi tanpa pengembalian nilai). Berikut contoh fungsi Balik :

1. void Balik(int X);


2. int Sisa;
3. {
4. Cout<<(X %10)<<endl;
5. Sisa = X/10;
6. if (Sisa != 0) Balik(Sisa);
7. }

Jika fungsi di atas dipanggil dengan Balik(1024) apa hasilnya ?

63
Penutup
10.3 Latihan Soal
1. Lihat kembali Algoritma Euclidean untuk menghitung nilai FPB.
Buatlah subprogram untuk menghitung nilai FPB berdasarlan
Algoritma Euclidean, secara rekursif.
2. Buatlah fungsi rekursif dan non rekursif untuk menghitung nilai
XN, dngan X bilangan riil dan N bilangan bulat.

64
LATIHAN SOAL

1. a. Untuk membuat program yang terstruktur diperlukan algoritma


dan struktur data yang efisien, algoritma yang bagaimana yang
efisien itu? dan jelaskan bagaimana langkah-langkah membuat
algoritma yang efisien? Kemudian jelaskan apa perlunya struktur
data dalam pembuatan program.

b. Buatlah algoritma yang efisien untuk menentukan nilai


kombinasi(n,r) dengan rumus :

2. a. Algoritma berikut dimaksudkan untuk menentukan warna dominan


(warna yang paling sering muncul) dari matrik gambar G (mxn) yang
elemennya bernilai antara 0 s.d. 255 (warna grayscale).

G : array of array of byte;{matrik dinamis}


X : array[0..255] of integer;
i,j,m,n,max : integer;

BEGIN
FOR i=1 TO m DO
FOR j=1 TO n DO X[G[i,j]] = X[G[i,j]] + 1;

MAX = nilai_awal; //x[0]


FOR i=1 TO 255 DO IF x[i]>max THEN MAX=X[i];

WRITE('WARNA DOMINANNYA ADALAH : ');


IF (MAX > 1 ) THEN
FOR i=0 TO 255 DO IF (X[i]=MAX) THEN WRITE(i,' ');
END

Sempurnakan algoritma di atas, dengan cara mengganti kata yang


dicetak miring dan tebal (nilai_awal, kondisi, nilai dan variabel )
dengan perintah yang seharusnya.

65
b. Program dua b

1. //program dua b
2. #include<iostream>
3. #include<stdlib.h>
4. #include<conio.h>
5. int main()
6. { int *x, i, n, t=0;
7. cin>>n;
8. x=new int[n];
9. for (i=1;i<=n;i++) {
10. x[i] = i%3+2*i;
11. t += x[i];
12. cout<<x[i]<<" ";
13. }
14. cout<<"\nNilai t = "<<t;
15. getch(); free(x); return 0;
16. }

Jika n=10, tuliskan bagaimana outputnya?

3. Buatlah program terstruktur (C++) untuk membaca n data gempa yang


berupa struct yang fieldnya terdiri dari :

magnitude (sr), kedalaman(km), lokasi (record(LS, BT)) dan kota,

yang disimpan di suatu larik X (array dinamis), kemudian


mengurutkan berdasar magnitude secara decending lalu menghapus
data gempa yang nilai magnitude < 5.0 dan akhirnya mencetak m data
gempa hasil (m ≤ n) dengan memberi tambahan keterangan ”gempa
berpotensi tsunami” jika nilai magnitude lebih besar atau sama
dengan 7.5 sr dan kedalaman lebih kecil atau sama dengan 10 km.

66
4.
Tuliskan bagaimana output dari program komputer berikut :

1. #include <iostream>
2. using namespace std;
3. main()
4. {
5. int N = 5, x, i, t = 4, sum = 0, hasil;
6. for (i = 1; i <= N; i++) {
7. x = i + 3 * i - i % 5 / 3;
8. sum += x;
9. cout << x << " ";
10. switch (i) {
11. case 1: {
12. hasil = sum / 4;
13. break;
14. }
15. case 2: {
16. hasil = sum / 2;
17. break;
18. }
19. case 3: {
20. hasil = sum * 3 / 4;
21. break;
22. }
23. default: {
24. hasil = sum * i / N + i;
25. }
26. }
27. cout << hasil << endl;
28. t += hasil;
29. }
30. cout << " \n" << t;
31. }

5.

Buatlah program komputer untuk membaca N data integer, disimpan di array X,


kemudian tentukan modus-nya (data yang mempunyai frekuensi terbanyak).
Sebagai contoh :
Jika inputnya adalah : 13, 19, 12, 13, 190, 12, 13, 120001, 4, 23765876 (N=10)
Maka outputnya adalah : Modusnya adalah 13 dengan frekuensi 3.

67
6. Diketahui fungsi sebagai berikut :

1. void hitung(int x, int y, int z)


2. {
3. if (y == 0)
4. cout << z;
5. else {
6. if (y % 2 == 1)
7. z += x;
8. hitung(2 * x, y / 2, z);
9. }
10. }

Berapakah bilangan yang tercetak dilayar jika dilakukan pemanggilan


a. hitung(5, 5, 0)
b. hitung (7, 40, 20)

68
DAFTAR PUSTAKA

Adam Drozdek, 2001, Data Structures and Algorithms in C++


Alfred V. Aho,dkk., 1988, Data Structures and Algorithms,
Cay S. Horstmann, 2009, C++ for everyone
Data Structures Using C, Tenenbaum, A., Y. Langsam, and M. Augenstein,
1990, Prentice-Hall
Munir, R., 2004, Algoritma dan Pemrograman, Informatika, Bandung.

69

Anda mungkin juga menyukai