You are on page 1of 144

TUGAS MAKALAH

PEMROGRAMAN KOMPUTER

Disusun Oleh:
Aris Sigit 03.2009.1.06587
Wisnu Anggriawan 03.2009.1.06608
Wahyu Wido H 03.2009.1.06654
Ahmad Teguh Santoso 03.2009.1.06671
LM. Ali Asri Bosa 03.2009.1.06674
Aji Tri Mulyanto 03.2009.1.06683
Irham Hadi Pratama 03.2009.1.06686

JURUSAN TEKNIK ELEKTRO


FAKULTAS TEKNOLOGI INDUSTRI
INSTITUT TEKNOLOGI ADHI TAMA SURABAYA
2010

i
KATA PENGANTAR

Alhamdulillahhirobbil ‘alamin, puji syukur bagi Allah SWT yang telah


memberikan Rahmat, Taufiq dan Hidayah-Nya kepada kami sehingga kami bisa
menyelesaikan makalah yang berisi kumpulan data-data megenai sejarah komuter,
algorima pemrograman, pembuatan diagram alir (flowchart) serta cara-cara
pemrograman dengan program C/C++ beserta contoh-contoh aplikasi
penggunaanya berdasarkan silabus kuliah pemprograman komputer.
Tidak lupa kami mengucapkan terima kasih yang sebesar-besarnya kepada
semua pihak yang telah membantu penyusunan makalah ini hingga
terselesaikanya penulisan makalah ini terutama kepada Slamet Winardi, ST, MT
selaku dosen pemrograman komputer.
Kami berharap makalah ini dapat bermanfaat dan menambah wawasan
bagi para pembaca mengenai pemrograman dengan menggunakan program C/C++
bagi kami khususnya, dan segenap pembaca umumnya.
Ketidak sempurnaan pasti ada pada semua makhluk di dunia ini. Kami
menyadari bahwa makalah ini masih jauh dari sempurna. Oleh karena itu, kami
masih membutuhkan kritik dan saran dari berbagai pihak demi kesempurnaan
makalah kami selanjutnya.

Surabaya, Januari 2010

Penulis

ii
DAFTAR ISI

HALAMAN JUDUL.................................................................................. i
KATA PENGANTAR ............................................................................... ii
DAFTAR ISI.............................................................................................. iii
BAB I PENDAHULUAN
A Latar Belakang ............................................................................. 1
B Tujuan........................................................................................... 2
BAB II ISI
Pertemuan 1 SEJARAH PERKEMBANGAN KOMPUTER.................... 3
1.1 Komputer Generasi I ..................................................................... 3
1.2 Komputer Generasi II.................................................................... 4
1.3 Komputer Generasi III .................................................................. 6
1.4 Komputer Generasi IV .................................................................. 6
1.5 Komputer Generasi V ................................................................... 7
Pertemuan 2 ALGORITMA DAN DIAGRAM ALIR .............................. 9
2.1 Algoritma ....................................................................................... 10
2.2 Diagram Alir (Flowchart) .............................................................. 10
Pertemuan 3 PEGENALAN PROGRAM C++.......................................... 12
3.1 Tentang C++ .................................................................................. 12
3.2 Borland C++................................................................................... 12
3.3 Main ............................................................................................... 12
3.4 Pernyataan ...................................................................................... 13
3.5 Gaya Penulisan Program ............................................................... 14
3.6 Bagian Komentar ........................................................................... 15
3.7 Include............................................................................................ 15
Pertemuan 4 ELEMEN DASAR C++........................................................ 16
4.1 Konstanta ....................................................................................... 16
4.2 Operator.......................................................................................... 17
4.3 Variabel .......................................................................................... 17

iii
Pertemuan 5 OPERATOR DAN UNGKAPAN ........................................ 19
5.1 Pengantar Operator dan Ungkapan (Ekspresi)............................... 19
5.2 Operator aritmatika ...................................................................... 19
5.3 Operator Bitwise ............................................................................ 20
5.4 Operator penugasan........................................................................ 21
5.5 Operator Relasi.............................................................................. 21
5.6 Operator Logika............................................................................. 22
5.7 Operator Unary.............................................................................. 22
Pertemuan 6 OPERASI DASAR MASUKAN DAN KELUARAN.......... 24
6.1 Cout ............................................................................................... 24
6.2 Cin .................................................................................................. 24
6.3 Manipulator .................................................................................... 25
Pertemuan 7 PERNYATAAN DASAR ..................................................... 27
7.1 If, Else If, dan Else......................................................................... 27
7.2 If ..................................................................................................... 27
7.3 Else................................................................................................. 27
7.4 Else If ............................................................................................. 28
7.5 Switch............................................................................................. 29
Pertemuan 9 FUNGSI ................................................................................ 31
9.1 Prototipe Fungsi ............................................................................. 31
9.2 Definisi Fungsi ............................................................................... 32
9.3 Lingkup Variabel ........................................................................... 33
9.3.1 Varabel Otomatis (lokal).......................................................... 34
9.3.2 Variable Eksternal(global) ....................................................... 35
9.4 Referensi ........................................................................................ 36
9.5 Rekursi ........................................................................................... 37
Pertemuan 10 ARRAY (VARIABEL BERINDEKS) ............................... 39
10.1 Array 1 Dimensi............................................................................ 39
10.2 Array Berdimensi Dua dan Operasi Matrik ................................. 41

iv
Pertemuan 11 STRING .............................................................................. 42
11.1 Pengantar String ............................................................................ 42
11.2 Konstanta String............................................................................ 42
11.3 Memasukan Data String................................................................ 42
11.4 Fungsi untuk string........................................................................ 44
11.4.1 Fungsi getline() ....................................................................... 44
11.4.2 Fungsi strcpy ........................................................................... 45
11.4.3 Fungsi toupper dan tolower .................................................... 46
11.4.4 Fungsi strlen() ......................................................................... 47
11.4.4 Fungsi strlwr() dan strupr......................................................... 47
Pertemuan 12 POINTER............................................................................ 49
12.1 Pengertian Pointer ......................................................................... 49
12.2 Alamat pointer............................................................................... 49
12.3 Variabel Pointer ............................................................................ 50
12.4 Nilai yang di tunjuk pointer .......................................................... 51
12.5 void pointer ....................................................................................... 51
12.6 Memory pointer ................................................................................ 51
12.7 Pointer Penunjuk Pointer (pointer to pointer)............................... 56
Pertemuan 13 STRUKTUR DAN ENUM ................................................. 58
13.1 Struktur.......................................................................................... 58
13.2 UNION.......................................................................................... 58
13.3 Bitfield .......................................................................................... 58
13.4 ENUM ........................................................................................... 64
Pertemuan 14 TYPE................................................................................... 66
14.1 Tipe Data....................................................................................... 66
14.2 Tipe Deskripsi ............................................................................... 66
14.3 Floating Point ( Bilangan Pecahan ).............................................. 66
14.3.1 Tipe Deskripsi ....................................................................... 67
14.3.1.1 Char ............................................................................. 67
14.3.1.2 Tipe Data Referensi...................................................... 67

v
BAB IV PENUTUP

A. Kesimpulan ...................................................................................... 68

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

vi
BAB I

PENDAHULUAN

A. Latar Belakang

C adalah bahasa yang standar, artinya suatu program yang ditulis


dengan versi bahasa C tertentu dapat dikompilasi dengan versi bahasa C yang
lain dengan sedikit modifikasi. Standar bahasa C yang asli adalah standar
dari UNIX.
Sistem operasi, kompiler C dan seluruh program aplikasi UNIX
yang esensial ditulis dalam bahasa C. Patokan dari standar UNIX ini
diambilkan dari buku yang ditulis oleh Brian Kerninghan dan Dennis Ritchie
berjudul "The C Programming Language", diterbitkan oleh Prentice- Hall tahun
1978. Deskripsi C dari Kerninghan dan Ritchie ini kemudian dikenal secara
umum sebagai "K&R C".
Agar suatu program dalam bahasa pemrograman dapat dimengerti oleh
komputer, program haruslah diterjemahkan dahulu ke dalam kode mesin.
Adapun penerjemah yang digunakan bisa berupa interpreter atau kompiler.
Kebanyakan versi C yang beredar di pasaran menggunakan
penerjemah berupa kompiler. Kompiler merupakan jenis penerjemah yang
lain, dengan cara kerjanya yaitu menerjemahkan seluruh instruksi dalam
program sekaligus. Proses pengkompilasian ini cukup dilakukan sekali saja.
Selanjutnya hasil penerjemahan (setelah melalui tahapan yang lain) bisa
dijalankan secara langsung, tanpa tergantung lagi oleh program sumber
maupun kompilernya. Keuntungannya, proses eksekusi dapat berjalan dengan
cepat, sebab tak ada lagi proses penerjemahan. Di samping itu, program sumber
bisa dirahasiakan, sebab yang dieksekusi adalah program yang sudah
dalam bentuk kode mesin. Sedangkan kelemahannya, proses pembu-
atan dan pengujian membutuhkan waktu relatif lebih lama, sebab ada
waktu untuk mengkompilasi (menerjemahkan) dan ada pula waktu melakukan
proses linking. Perlu pula diketahui, program akan berhasil dikompilasi hanya

1
jika program tak mengandung kesalahan secara kaidah sama sekali.

B. Tujuan

Setelah membaca makalah ini para pembaca diharapkan mampu :


1. Tingkat pemahaman
Mampu menjelaskan, menganalisa konsep dan logika berpikir komputer,
prinsip kerja serta jalannya program, cara perancangan dan analisis masalah,
yang kemudian dipecahkan dengan menggunakan teknik pemrograman
terstruktur, serta mengimplementasikan suatu permasalahan dalam bentuk
algoritma dan diagram alir mampu menterjemahkan algoritma ke dalam
program C++ dan mampu menganalisa program C++
2. Tingkat aplikasi
mengimplementasikan konsep dan logika berpikir komputer, cara
perancangan dan analisis masalah serta membuat penyelesaian masalah dengan
menggunakan pemrograman terstruktur, kemudian mengeksekusi dan
melakukan pengujian program.

2
BAB II

ISI

Pertemuan 1

SEJARAH PERKEMBANGAN KOMPUTER


Komputer telah berkembang menjadi suatu perangkat yang sangat
dibutuhkan oleh semua orang. Siapa yang tidak membutuhkan teknologi komputer
dewasa ini. Mulai dari belanja dapur, perbankan, hingga kontak jodoh bisa
dilakukan lewat teknologi komputer ini. Kehidupan manusia sekarang tidak akan
pernah lepas dari teknologi yang satu ini.
1.1 Komputer Generasi I
Pada tahun 1941, Konrad Zuse, seorang insinyur Jerman membangun
sebuah komputer, Z3, untuk mendesain pesawat terbang dan peluru kendali.
Tahun 1943, pihak Inggris menyelesaikan komputer yang dinamakan Colossus
untuk memecahkan kode-rahasia yang digunakan Jerman. Dampak pembuatan
Colossus tidak terlalu mempengaruhi perkembangan industri komputer, karenakan
Colossus bukan merupakan komputer serbaguna (general-purpose computer),
Howard H. Aiken (1900-1973), seorang insinyur Harvard yang bekerja
dengan IBM, berhasil memproduksi kalkulator elektronik untuk US Navy.
Kalkulator tersebut berukuran panjang setengah lapangan bola kaki dan memiliki
rentang kabel sepanjang 500 mil. The Harvard-IBM Automatic Sequence
Controlled Calculator, atau Mark I, merupakan komputer relai elektronik. Ia
menggunakan sinyal elektromagnetik untuk menggerakkan komponen mekanik.
Mesin tersebut beroperasi dengan lambat (ia membutuhkan 3-5 detik untuk setiap
perhitungan) dan tidak fleksibel (urutan kalkulasi tidak dapat diubah). Kalkulator
tersebut dapat melakukan perhitungan aritmatik dasar dan persamaan yang lebih
kompleks.
Perkembangan komputer lain pada masa kini adalah Electronic Numerical
Integrator and Computer (ENIAC), yang dibuat oleh kerja sama antara pemerintah

3
amerika Serikat dan University of Pennsylvania. Terdiri dari 18.000 tabung
vakum, 70.000 resistor, dan 5 juta titik solder, komputer tersebut merupakan
mesin yang sangat besar yang mengonsumsi daya sebesar 160kW. Komputer ini
dirancang oleh John Presper Eckert (1919-1995) dan John W. Mauchly (1907-
1980), ENIAC merupakan komputer serbaguna (general purpose computer) yang
bekerja 1000 kali lebih cepat dibandingkan Mark I.
Pada pertengahan 1940-an, John von Neumann (1903-1957) bergabung
dengan tim University of Pennsylvania dalam usha membangun konsep desain
komputer yang hingga 40 tahun mendatang masih dipakai dalam teknik komputer.
von Neumann mendesain Electronic Discrete Variable Automatic Computer
(EDVAC) pada tahun 1945 dengan sebuh memori untuk menampung baik
program ataupun data. Teknik ini memungkinkan komputer untuk berhenti pada
suatu saat dan kemudian melanjutkan pekerjaannya kembali. Kunci utama
arsitektur Von Neumann adalah unit pemrosesan sentral (CPU), yang
memungkinkan seluruh fungsi komputer untuk dikoordinasikan melalui satu
sumber tunggal.
Tahun 1951, UNIVAC I (Universal Automatic Computer I) yang dibuat
oleh Remington Rand, menjadi komputer komersial pertama. Komputer Generasi
pertama dikarakteristik dengan fakta bahwa instruksi operasi dibuat secara
spesifik untuk suatu tugas tertentu. Setiap komputer memiliki program kode-biner
yang berbeda yang disebut "bahasa mesin" (machine language). Hal ini
menyebabkan komputer sulit untuk diprogram dan membatasi kecepatannya. Ciri
lain komputer generasi pertama adalah penggunaan tube vakum (yang membuat
komputer pada masa tersebut berukuran sangat besar) dan silinder magnetik untuk
penyimpanan data.
1.2 Komputer Generasi II
Pada tahun 1948, penemuan transistor sangat mempengaruhi
perkembangan komputer. Transistor menggantikan tube vakum di televisi, radio,
dan komputer. Akibatnya, ukuran mesin-mesin elektrik berkurang drastis.
Transistor mulai digunakan di dalam komputer mulai pada tahun 1956. Penemuan
lain yang berupa pengembangan memori inti-magnetik membantu pengembangan

4
komputer generasi kedua yang lebih kecil, lebih cepat, lebih dapat diandalkan, dan
lebih hemat energi dibanding para pendahulunya. Mesin pertama yang
memanfaatkan teknologi baru ini adalah superkomputer. IBM membuat
superkomputer bernama Stretch, dan Sprery-Rand membuat komputer bernama
LARC. komputer ini, yang dikembangkan untuk laboratorium energi atom, dapat
menangani sejumlah besar data, sebuah kemampuan yang sangat dibutuhkan oleh
peneliti atom. Mesin tersebut sangat mahal dan cenderung terlalu kompleks untuk
kebutuhan komputasi bisnis, sehingga membatasi kepopulerannya.
Hanya ada dua LARC yang pernah dipasang dan digunakan: satu di
Lawrence Radiation Labs di Livermore, California, dan yang lainnya di US Navy
Research and Development Center di Washington D.C. Komputer generasi kedua
menggantikan bahasa mesin dengan bahasa assembly. Bahasa assembly adalah
bahasa yang menggunakan singkatan-singakatan untuk menggantikan kode biner.
Pada awal 1960-an, Komputer-komputer generasi kedua ini merupakan komputer
yang sepenuhnya menggunakan transistor. Mereka juga memiliki komponen-
komponen yang dapat diasosiasikan dengan komputer pada saat ini: printer,
penyimpanan dalam disket, memory, sistem operasi, dan program. Salah satu
contoh penting komputer pada masa ini adalah IBM 1401 yang diterima secara
luas di kalangan industri.
Pada tahun 1965, hampir seluruh bisnis-bisnis besar menggunakan
komputer generasi kedua untuk memproses informasi keuangan. Program yang
tersimpan di dalam komputer dan bahasa pemrograman yang ada di dalamnya
memberikan fleksibilitas kepada komputer. Fleksibilitas ini meningkatkan kinerja
dengan harga yang pantas bagi penggunaan bisnis. Dengan konsep ini, komputer
dapat mencetak faktur pembelian konsumen dan kemudian menjalankan desain
produk atau menghitung daftar gaji. Beberapa bahasa pemrograman mulai
bermunculan pada saat itu. Bahasa pemrograman Common Business-Oriented
Language (COBOL) dan Formula Translator (FORTRAN) mulai umum
digunakan. Bahasa pemrograman ini menggantikan kode mesin yang rumit
dengan kata-kata, kalimat, dan formula matematika yang lebih mudah dipahami
oleh manusia.

5
1.3 Komputer Generasi III
Walaupun transistor dalam banyak hal mengungguli tube vakum, namun
transistor menghasilkan panas yang cukup besar, yang dapat berpotensi merusak
bagian-bagian internal komputer. Batu kuarsa (quartz rock) menghilangkan
masalah ini.
Jack Kilby, seorang insinyur di Texas Instrument, mengembangkan sirkuit
terintegrasi (IC : integrated circuit) di tahun 1958. IC mengkombinasikan tiga
komponen elektronik dalam sebuah piringan silikon kecil yang terbuat dari pasir
kuarsa.Para ilmuwan kemudian berhasil memasukkan lebih banyak komponen-
komponen ke dalam suatu chip tunggal yang disebut semikonduktor. Hasilnya,
komputer menjadi semakin kecil karena komponenkomponen dapat dipadatkan
dalam chip. Kemajuan komputer generasi ketiga lainnya adalah penggunaan
sistem operasi (operating system) yang memungkinkan mesin untuk menjalankan
berbagai program yang berbeda secara serentak dengan sebuah program utama
yang memonitor dan mengkoordinasi memori komputer.
1.4 Komputer Generasi IV
Setelah IC, tujuan pengembangan menjadi lebih jelas: mengecilkan ukuran
sirkuit dan komponen-komponen elektrik. Large Scale Integration (LSI) dapat
memuat ratusan komponen dalam sebuah chip.
Pada tahun 1980-an, Very Large Scale Integration (VLSI) memuat ribuan
komponen dalam sebuah chip tunggal. Ultra-Large Scale Integration (ULSI)
meningkatkan jumlah tersebut menjadi jutaan. Chip Intel 4004 yang dibuat pada
tahun 1971 membawa kemajuan pada IC dengan meletakkan seluruh komponen
dari sebuah komputer (central processing unit, memori, dan kendali input/output)
dalam sebuah chip yang sangat kecil.
Sebelumnya, IC dibuat untuk mengerjakan suatu tugas tertentu yang
spesifik. Sekarang, sebuah mikroprosesor dapat diproduksi dan kemudian
diprogram untuk memenuhi seluruh kebutuhan yang diinginkan. Tidak lama
kemudian, setiap perangkat rumah tangga seperti microwave oven, televisi, dan
mobil dengan electronic fuel injection dilengkapi dengan mikroprosesor.

6
Perkembangan komputer memungkinkan orang-orang biasa untuk menggunakan
komputer biasa. Komputer tidak lagi menjadi dominasi perusahaan-perusahaan
besar atau lembaga pemerintah.
Pada pertengahan tahun 1970-an, perakit komputer menawarkan produk
komputer mereka ke masyarakat umum. Komputer-komputer ini, yang disebut
minikomputer, dijual dengan paket piranti lunak yang mudah digunakan oleh
kalangan awam. Piranti lunak yang paling populer pada saat itu adalah program
word processing Pada tahun 1981, IBM memperkenalkan penggunaan Personal
Computer (PC) untuk penggunaan di rumah, kantor, dan sekolah. Jumlah PC yang
digunakan melonjak dari tahun ke tahun. Komputer melanjutkan evolusinya
menuju ukuran yang lebih kecil, dari komputer yang berada di atas meja (desktop
computer) menjadi komputer yang dapat dimasukkan ke dalam tas (laptop), atau
bahkan komputer yang dapat digenggam (palmtop). IBM PC bersaing dengan
Apple Macintosh dalam memperebutkan pasar komputer. Apple Macintosh
menjadi terkenal karena mempopulerkan sistem grafis pada komputernya,
sementara saingannya masih menggunakan komputer yang berbasis teks.
Macintosh juga mempopulerkan penggunaan piranti mouse.
Pada masa sekarang, kita mengenal perjalanan IBM compatible dengan
pemakaian CPU: IBM PC/486, Pentium, Pentium II, Pentium III, Pentium IV
(Serial dari CPU buatan Intel). Juga kita kenal AMD k6, Athlon, dsb. Ini semua
masuk dalam golongan komputer generasi keempat.
Cara-cara baru untuk menggali potensial terus dikembangkan. komputer dapat
dihubungkan secara bersamaan dalam suatu jaringan untuk saling berbagi
memori, piranti lunak, informasi, dan juga untuk dapat saling berkomunikasi satu
dengan yang lainnya. Dengan menggunakan perkabelan langsung (disebut juga
local area network, LAN), atau kabel telepon, jaringan ini dapat berkembang
menjadi sangat besar.
1.5 Komputer Generasi V
Mendefinisikan komputer generasi kelima menjadi cukup sulit karena
tahap ini masih sangat muda. Contoh imajinatif komputer generasi kelima adalah
komputer fiksi HAL9000 dari novel karya Arthur C. Clarke berjudul 2001: Space

7
Odyssey. HAL menampilkan seluruh fungsi yang diinginkan dari sebuah
komputer generasi kelima. Dengan kecerdasan buatan (artificial intelligence),
HAL dapat cukup memiliki nalar untuk melakukan percapakan dengan manusia,
menggunakan masukan visual, dan belajar dari pengalamannya sendiri.
Walaupun mungkin realisasi HAL9000 masih jauh dari kenyataan, banyak
fungsi-fungsi yang dimilikinya sudah terwujud. Beberapa komputer dapat
menerima instruksi secara lisan dan mampu meniru nalar manusia. Namun
fasilitas tersebut menjadi jauh lebih rumit dari yang diduga ketika programmer
menyadari bahwa pengertian manusia sangat bergantung pada konteks dan
pengertian ketimbang sekedar menterjemahkan kata-kata secara langsung. Banyak
kemajuan di bidang desain komputer dan teknologi semakin memungkinkan
pembuatan komputer generasi kelima.
Dua kemajuan rekayasa yang terutama adalah kemampuan pemrosesan
paralel, yang akan menggantikan model non Neumann. Model non Neumann akan
digantikan dengan sistem yang mampu mengkoordinasikan banyak CPU untuk
bekerja secara serempak. Kemajuan lain adalah teknologi superkonduktor yang
memungkinkan aliran elektrik tanpa ada hambatan apapun, yang nantinya dapat
mempercepat kecepatan informasi.
Jepang adalah negara yang terkenal dalam sosialisasi jargon dan proyek
komputer generasi kelima. Lembaga ICOT (Institute for new Computer
Technology) juga dibentuk untuk merealisasikannya. Banyak kabar yang
menyatakan bahwa proyek ini telah gagal, namun beberapa informasi lain bahwa
keberhasilan proyek komputer generasi kelima ini akan membawa perubahan baru
paradigma komputerisasi di dunia. Kita tunggu informasi mana yang lebih valid
dan membuahkan hasil.

8
BAB I

PENDAHULUAN

A. Latar Belakang

C adalah bahasa yang standar, artinya suatu program yang ditulis


dengan versi bahasa C tertentu dapat dikompilasi dengan versi bahasa C yang
lain dengan sedikit modifikasi. Standar bahasa C yang asli adalah standar
dari UNIX.
Sistem operasi, kompiler C dan seluruh program aplikasi UNIX
yang esensial ditulis dalam bahasa C. Patokan dari standar UNIX ini
diambilkan dari buku yang ditulis oleh Brian Kerninghan dan Dennis Ritchie
berjudul "The C Programming Language", diterbitkan oleh Prentice- Hall tahun
1978. Deskripsi C dari Kerninghan dan Ritchie ini kemudian dikenal secara
umum sebagai "K&R C".
Agar suatu program dalam bahasa pemrograman dapat dimengerti oleh
komputer, program haruslah diterjemahkan dahulu ke dalam kode mesin.
Adapun penerjemah yang digunakan bisa berupa interpreter atau kompiler.
Kebanyakan versi C yang beredar di pasaran menggunakan
penerjemah berupa kompiler. Kompiler merupakan jenis penerjemah yang
lain, dengan cara kerjanya yaitu menerjemahkan seluruh instruksi dalam
program sekaligus. Proses pengkompilasian ini cukup dilakukan sekali saja.
Selanjutnya hasil penerjemahan (setelah melalui tahapan yang lain) bisa
dijalankan secara langsung, tanpa tergantung lagi oleh program sumber
maupun kompilernya. Keuntungannya, proses eksekusi dapat berjalan dengan
cepat, sebab tak ada lagi proses penerjemahan. Di samping itu, program sumber
bisa dirahasiakan, sebab yang dieksekusi adalah program yang sudah
dalam bentuk kode mesin. Sedangkan kelemahannya, proses pembu-
atan dan pengujian membutuhkan waktu relatif lebih lama, sebab ada
waktu untuk mengkompilasi (menerjemahkan) dan ada pula waktu melakukan
proses linking. Perlu pula diketahui, program akan berhasil dikompilasi hanya

1
jika program tak mengandung kesalahan secara kaidah sama sekali.

B. Tujuan

Setelah membaca makalah ini para pembaca diharapkan mampu :


1. Tingkat pemahaman
Mampu menjelaskan, menganalisa konsep dan logika berpikir komputer,
prinsip kerja serta jalannya program, cara perancangan dan analisis masalah,
yang kemudian dipecahkan dengan menggunakan teknik pemrograman
terstruktur, serta mengimplementasikan suatu permasalahan dalam bentuk
algoritma dan diagram alir mampu menterjemahkan algoritma ke dalam
program C++ dan mampu menganalisa program C++
2. Tingkat aplikasi
mengimplementasikan konsep dan logika berpikir komputer, cara
perancangan dan analisis masalah serta membuat penyelesaian masalah dengan
menggunakan pemrograman terstruktur, kemudian mengeksekusi dan
melakukan pengujian program.

2
BAB II

ISI

Pertemuan 1

SEJARAH PERKEMBANGAN KOMPUTER


Komputer telah berkembang menjadi suatu perangkat yang sangat
dibutuhkan oleh semua orang. Siapa yang tidak membutuhkan teknologi komputer
dewasa ini. Mulai dari belanja dapur, perbankan, hingga kontak jodoh bisa
dilakukan lewat teknologi komputer ini. Kehidupan manusia sekarang tidak akan
pernah lepas dari teknologi yang satu ini.
1.1 Komputer Generasi I
Pada tahun 1941, Konrad Zuse, seorang insinyur Jerman membangun
sebuah komputer, Z3, untuk mendesain pesawat terbang dan peluru kendali.
Tahun 1943, pihak Inggris menyelesaikan komputer yang dinamakan Colossus
untuk memecahkan kode-rahasia yang digunakan Jerman. Dampak pembuatan
Colossus tidak terlalu mempengaruhi perkembangan industri komputer, karenakan
Colossus bukan merupakan komputer serbaguna (general-purpose computer),
Howard H. Aiken (1900-1973), seorang insinyur Harvard yang bekerja
dengan IBM, berhasil memproduksi kalkulator elektronik untuk US Navy.
Kalkulator tersebut berukuran panjang setengah lapangan bola kaki dan memiliki
rentang kabel sepanjang 500 mil. The Harvard-IBM Automatic Sequence
Controlled Calculator, atau Mark I, merupakan komputer relai elektronik. Ia
menggunakan sinyal elektromagnetik untuk menggerakkan komponen mekanik.
Mesin tersebut beroperasi dengan lambat (ia membutuhkan 3-5 detik untuk setiap
perhitungan) dan tidak fleksibel (urutan kalkulasi tidak dapat diubah). Kalkulator
tersebut dapat melakukan perhitungan aritmatik dasar dan persamaan yang lebih
kompleks.
Perkembangan komputer lain pada masa kini adalah Electronic Numerical
Integrator and Computer (ENIAC), yang dibuat oleh kerja sama antara pemerintah

3
amerika Serikat dan University of Pennsylvania. Terdiri dari 18.000 tabung
vakum, 70.000 resistor, dan 5 juta titik solder, komputer tersebut merupakan
mesin yang sangat besar yang mengonsumsi daya sebesar 160kW. Komputer ini
dirancang oleh John Presper Eckert (1919-1995) dan John W. Mauchly (1907-
1980), ENIAC merupakan komputer serbaguna (general purpose computer) yang
bekerja 1000 kali lebih cepat dibandingkan Mark I.
Pada pertengahan 1940-an, John von Neumann (1903-1957) bergabung
dengan tim University of Pennsylvania dalam usha membangun konsep desain
komputer yang hingga 40 tahun mendatang masih dipakai dalam teknik komputer.
von Neumann mendesain Electronic Discrete Variable Automatic Computer
(EDVAC) pada tahun 1945 dengan sebuh memori untuk menampung baik
program ataupun data. Teknik ini memungkinkan komputer untuk berhenti pada
suatu saat dan kemudian melanjutkan pekerjaannya kembali. Kunci utama
arsitektur Von Neumann adalah unit pemrosesan sentral (CPU), yang
memungkinkan seluruh fungsi komputer untuk dikoordinasikan melalui satu
sumber tunggal.
Tahun 1951, UNIVAC I (Universal Automatic Computer I) yang dibuat
oleh Remington Rand, menjadi komputer komersial pertama. Komputer Generasi
pertama dikarakteristik dengan fakta bahwa instruksi operasi dibuat secara
spesifik untuk suatu tugas tertentu. Setiap komputer memiliki program kode-biner
yang berbeda yang disebut "bahasa mesin" (machine language). Hal ini
menyebabkan komputer sulit untuk diprogram dan membatasi kecepatannya. Ciri
lain komputer generasi pertama adalah penggunaan tube vakum (yang membuat
komputer pada masa tersebut berukuran sangat besar) dan silinder magnetik untuk
penyimpanan data.
1.2 Komputer Generasi II
Pada tahun 1948, penemuan transistor sangat mempengaruhi
perkembangan komputer. Transistor menggantikan tube vakum di televisi, radio,
dan komputer. Akibatnya, ukuran mesin-mesin elektrik berkurang drastis.
Transistor mulai digunakan di dalam komputer mulai pada tahun 1956. Penemuan
lain yang berupa pengembangan memori inti-magnetik membantu pengembangan

4
komputer generasi kedua yang lebih kecil, lebih cepat, lebih dapat diandalkan, dan
lebih hemat energi dibanding para pendahulunya. Mesin pertama yang
memanfaatkan teknologi baru ini adalah superkomputer. IBM membuat
superkomputer bernama Stretch, dan Sprery-Rand membuat komputer bernama
LARC. komputer ini, yang dikembangkan untuk laboratorium energi atom, dapat
menangani sejumlah besar data, sebuah kemampuan yang sangat dibutuhkan oleh
peneliti atom. Mesin tersebut sangat mahal dan cenderung terlalu kompleks untuk
kebutuhan komputasi bisnis, sehingga membatasi kepopulerannya.
Hanya ada dua LARC yang pernah dipasang dan digunakan: satu di
Lawrence Radiation Labs di Livermore, California, dan yang lainnya di US Navy
Research and Development Center di Washington D.C. Komputer generasi kedua
menggantikan bahasa mesin dengan bahasa assembly. Bahasa assembly adalah
bahasa yang menggunakan singkatan-singakatan untuk menggantikan kode biner.
Pada awal 1960-an, Komputer-komputer generasi kedua ini merupakan komputer
yang sepenuhnya menggunakan transistor. Mereka juga memiliki komponen-
komponen yang dapat diasosiasikan dengan komputer pada saat ini: printer,
penyimpanan dalam disket, memory, sistem operasi, dan program. Salah satu
contoh penting komputer pada masa ini adalah IBM 1401 yang diterima secara
luas di kalangan industri.
Pada tahun 1965, hampir seluruh bisnis-bisnis besar menggunakan
komputer generasi kedua untuk memproses informasi keuangan. Program yang
tersimpan di dalam komputer dan bahasa pemrograman yang ada di dalamnya
memberikan fleksibilitas kepada komputer. Fleksibilitas ini meningkatkan kinerja
dengan harga yang pantas bagi penggunaan bisnis. Dengan konsep ini, komputer
dapat mencetak faktur pembelian konsumen dan kemudian menjalankan desain
produk atau menghitung daftar gaji. Beberapa bahasa pemrograman mulai
bermunculan pada saat itu. Bahasa pemrograman Common Business-Oriented
Language (COBOL) dan Formula Translator (FORTRAN) mulai umum
digunakan. Bahasa pemrograman ini menggantikan kode mesin yang rumit
dengan kata-kata, kalimat, dan formula matematika yang lebih mudah dipahami
oleh manusia.

5
1.3 Komputer Generasi III
Walaupun transistor dalam banyak hal mengungguli tube vakum, namun
transistor menghasilkan panas yang cukup besar, yang dapat berpotensi merusak
bagian-bagian internal komputer. Batu kuarsa (quartz rock) menghilangkan
masalah ini.
Jack Kilby, seorang insinyur di Texas Instrument, mengembangkan sirkuit
terintegrasi (IC : integrated circuit) di tahun 1958. IC mengkombinasikan tiga
komponen elektronik dalam sebuah piringan silikon kecil yang terbuat dari pasir
kuarsa.Para ilmuwan kemudian berhasil memasukkan lebih banyak komponen-
komponen ke dalam suatu chip tunggal yang disebut semikonduktor. Hasilnya,
komputer menjadi semakin kecil karena komponenkomponen dapat dipadatkan
dalam chip. Kemajuan komputer generasi ketiga lainnya adalah penggunaan
sistem operasi (operating system) yang memungkinkan mesin untuk menjalankan
berbagai program yang berbeda secara serentak dengan sebuah program utama
yang memonitor dan mengkoordinasi memori komputer.
1.4 Komputer Generasi IV
Setelah IC, tujuan pengembangan menjadi lebih jelas: mengecilkan ukuran
sirkuit dan komponen-komponen elektrik. Large Scale Integration (LSI) dapat
memuat ratusan komponen dalam sebuah chip.
Pada tahun 1980-an, Very Large Scale Integration (VLSI) memuat ribuan
komponen dalam sebuah chip tunggal. Ultra-Large Scale Integration (ULSI)
meningkatkan jumlah tersebut menjadi jutaan. Chip Intel 4004 yang dibuat pada
tahun 1971 membawa kemajuan pada IC dengan meletakkan seluruh komponen
dari sebuah komputer (central processing unit, memori, dan kendali input/output)
dalam sebuah chip yang sangat kecil.
Sebelumnya, IC dibuat untuk mengerjakan suatu tugas tertentu yang
spesifik. Sekarang, sebuah mikroprosesor dapat diproduksi dan kemudian
diprogram untuk memenuhi seluruh kebutuhan yang diinginkan. Tidak lama
kemudian, setiap perangkat rumah tangga seperti microwave oven, televisi, dan
mobil dengan electronic fuel injection dilengkapi dengan mikroprosesor.

6
Perkembangan komputer memungkinkan orang-orang biasa untuk menggunakan
komputer biasa. Komputer tidak lagi menjadi dominasi perusahaan-perusahaan
besar atau lembaga pemerintah.
Pada pertengahan tahun 1970-an, perakit komputer menawarkan produk
komputer mereka ke masyarakat umum. Komputer-komputer ini, yang disebut
minikomputer, dijual dengan paket piranti lunak yang mudah digunakan oleh
kalangan awam. Piranti lunak yang paling populer pada saat itu adalah program
word processing Pada tahun 1981, IBM memperkenalkan penggunaan Personal
Computer (PC) untuk penggunaan di rumah, kantor, dan sekolah. Jumlah PC yang
digunakan melonjak dari tahun ke tahun. Komputer melanjutkan evolusinya
menuju ukuran yang lebih kecil, dari komputer yang berada di atas meja (desktop
computer) menjadi komputer yang dapat dimasukkan ke dalam tas (laptop), atau
bahkan komputer yang dapat digenggam (palmtop). IBM PC bersaing dengan
Apple Macintosh dalam memperebutkan pasar komputer. Apple Macintosh
menjadi terkenal karena mempopulerkan sistem grafis pada komputernya,
sementara saingannya masih menggunakan komputer yang berbasis teks.
Macintosh juga mempopulerkan penggunaan piranti mouse.
Pada masa sekarang, kita mengenal perjalanan IBM compatible dengan
pemakaian CPU: IBM PC/486, Pentium, Pentium II, Pentium III, Pentium IV
(Serial dari CPU buatan Intel). Juga kita kenal AMD k6, Athlon, dsb. Ini semua
masuk dalam golongan komputer generasi keempat.
Cara-cara baru untuk menggali potensial terus dikembangkan. komputer dapat
dihubungkan secara bersamaan dalam suatu jaringan untuk saling berbagi
memori, piranti lunak, informasi, dan juga untuk dapat saling berkomunikasi satu
dengan yang lainnya. Dengan menggunakan perkabelan langsung (disebut juga
local area network, LAN), atau kabel telepon, jaringan ini dapat berkembang
menjadi sangat besar.
1.5 Komputer Generasi V
Mendefinisikan komputer generasi kelima menjadi cukup sulit karena
tahap ini masih sangat muda. Contoh imajinatif komputer generasi kelima adalah
komputer fiksi HAL9000 dari novel karya Arthur C. Clarke berjudul 2001: Space

7
Odyssey. HAL menampilkan seluruh fungsi yang diinginkan dari sebuah
komputer generasi kelima. Dengan kecerdasan buatan (artificial intelligence),
HAL dapat cukup memiliki nalar untuk melakukan percapakan dengan manusia,
menggunakan masukan visual, dan belajar dari pengalamannya sendiri.
Walaupun mungkin realisasi HAL9000 masih jauh dari kenyataan, banyak
fungsi-fungsi yang dimilikinya sudah terwujud. Beberapa komputer dapat
menerima instruksi secara lisan dan mampu meniru nalar manusia. Namun
fasilitas tersebut menjadi jauh lebih rumit dari yang diduga ketika programmer
menyadari bahwa pengertian manusia sangat bergantung pada konteks dan
pengertian ketimbang sekedar menterjemahkan kata-kata secara langsung. Banyak
kemajuan di bidang desain komputer dan teknologi semakin memungkinkan
pembuatan komputer generasi kelima.
Dua kemajuan rekayasa yang terutama adalah kemampuan pemrosesan
paralel, yang akan menggantikan model non Neumann. Model non Neumann akan
digantikan dengan sistem yang mampu mengkoordinasikan banyak CPU untuk
bekerja secara serempak. Kemajuan lain adalah teknologi superkonduktor yang
memungkinkan aliran elektrik tanpa ada hambatan apapun, yang nantinya dapat
mempercepat kecepatan informasi.
Jepang adalah negara yang terkenal dalam sosialisasi jargon dan proyek
komputer generasi kelima. Lembaga ICOT (Institute for new Computer
Technology) juga dibentuk untuk merealisasikannya. Banyak kabar yang
menyatakan bahwa proyek ini telah gagal, namun beberapa informasi lain bahwa
keberhasilan proyek komputer generasi kelima ini akan membawa perubahan baru
paradigma komputerisasi di dunia. Kita tunggu informasi mana yang lebih valid
dan membuahkan hasil.

8
Pertemuan 2

ALGORITMA DAN DIAGRAM ALIR

Algoritma adalah urutan langkah-langkah logis penyeselaian masalah yang


disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam
algoritma. Langkah-langkah dalam algoritma harus dapat ditentukan bernilai
benar atau salah.
2.1 Algoritma
Algoritma adalah jantung ilmu komputer. Banyak cabang ilmu komputer
yang diacu dalam terminologi algoritma. Namun algoritma juga digunakan dalam
kehidupan sehari-hari, contohnya resep makanan. Di dalam resep makanan
terdapat langkah-langkah yang merupakan algoritma. Selain itu masih banyak
contoh algoritma yang lain.
Untuk melaksanakan suatu algoritma diperlukan suatu bahasa
pemrograman, contoh bahasa pemrograman adalah : Pascal, C++, Basic, dll.
Notasi algoritma dapat diterjemahkan kedalam bahasa pemrograman apapun,
dengan kata lain notasi algoritma bersifat independen.

2.2 Diagram Alir (Flowchart)

Gambar 2.1

9
Gambar 2.2 Gambar 2.3

Suatu flowchart adalah suatu representasi secara diagram yang


mengilustrasikan urutan dari operasi yang dilakukan untuk mendapatkan suatu
hasil. Dengan kata lain, flowchart membantu kita untuk mengerti dan melihat
bentuk algoritma dengan menampilkan algoritma dalam simbol-simbol gambar.
Dalam menggambar flowchart, digunakan simbol tertentu seperti gambar 2.1.
Contoh berikut bisa digunakan untuk lebih mengerti perbedaan kegunaan simbol-
simbol tersebut. Misal kita ingin mencari jumlah dari 2 buah bilangan, maka
flowchart-nya adalah seperti gambar 2.2. Contoh lain, misalkan kita ingin
mengetahui apakah sebuah bilangan ganjil atau genap. Untuk itu kita harus
membuat flowchart seperti ini gambar 2.3.

Pseudo code
Pseudo code adalah urutan baris algoritma seperti kode pemrograman dan
tidak memiliki sintak yang baku. Pseudo code lebih umum digunakan oleh
programmer yang berpengalaman. Akan tetapi, flowchart lebih mudah dimengerti
oleh programmer pemula, pseudo code sangat mudah diimplementasikan ke
dalam kode program dibandingkan dengan flowchart. Kita bisa bebas menulis
pseudo code selama itu mudah dimengerti bagi orang lain. Tetapi disarankan
untuk menggunakan keyword yang umum digunakan seperti : if, then, else, while,
do, repeat, for, dan lainnya. Dan ikuti gaya penulisan pemrograman seperti Pascal,
C++ dan lain-lain. Perhatikan kode dibawah ini :

10
Mulai masukkan sebuah angka masukkan sebuah angka dan tampilkan
ambil angka yang sebelumnya dan tampilkan selesai walaupun pseudo code diatas
masih bisa dimengerti tetapi ada beberapa statemen yang ambigu. Dari baris
kedua, kita tidak tahu kemana angka tersebut disimpan dan kita juga tidak tahu
angka yang mana yang dimaksud untuk “angka yang sebelumnya”. Apakah angka
yang pertama atau yang kedua. Pseudo code diatas dapat dimodifikasi menjadi
seperti berikut :
1. Mulai
2. Masukkan A
3. Masukkan B, Tampilkan B
4. Tampilkan A
5. Selesai
Pseudo code diatas lebih baik dibandingkan sebelumnya. Kita bisa dengan
jelas melihat dimana angka disimpan dan angka yang mana yang ditampilkan.
Sekarang kita akan mengubah flowchart pada gambar 2.2
1. Mulai
2. Masukkan A dan B
3. C = A + B
4. Tampilkan C
5. Selesai

11
Pertemuan 3

PEGENALAN PROGRAM C++

3.1 Tentang C++


C++ diciptakan untuk mendukung pemrograman berorientasi pada objek
(Object Oriented Pragramming/OOP) yang tidak dimiliki C. sementara C
merupakan bahasa pemrograman terbaik dilingkungannya, bahasa ini tidak
memiliki kemampuan OOP. Reputasi C tidak diragukan lagi dalam menghasilkan
program .EXE berukuran kecil, eksekusi yang cepat, antarmuka (interfacing) yang
sederhana dengan bahasa lain dan fleksibilitas pemrograman.
Apa yang membuat C tampak sukar dipelajari mungkin karena tiadanya
pemeriksaan tipe. Sebagai contoh, dapat mencampur bilangan bulat dengan string
untuk menghasilkan karakter. Namun, justru dsitu letak fleksibilitas C, dapat
mengolah data C sebebas mengolah data dalam bahasa assembly.
3.2 Borland C++
Dibandingkan compiler C++ yang lain, Borland C++ memiliki keunggulan
terutama dalam hal kecepatan dan efisiensi kompilasi. Disamping itu, Borland
C++ mendukung beberapa system operasi yaitu DOS, Windows 16bit (Window
3.0) dan windows 32 bit (Windows NT). Meskipun demikian compiler Borland
C++ juga memiliki kelemahan bila dibandingkan compiler C++ yang lain,
misalnya : pemrograman dengan Borland C++ terutama yang menyangkut
tampilan jauh lebih sulit daripada pemrograman dengan Microsoft Visual C++.
3.3 Main
Main ( ) adalah fungsi utama (main) yang harus ada dalam setiap program
C++ kita. Di sini yang digunakan adalah dengan main tanpa nilai kembalian dan
tanpa paramater. Contoh program 3.1
#include <iostream.h>
void main ()
{cout << "hallo subagyo\n";}

12
Gambar 3.1 hsil eksekusi program 3.1
Jika diperhatikan ada perintah \n pada akhir “kalimat” hallo subagyo. Apa
itu? ”\n” adalah perintah dalam banyak bahasa pemrograman sebagai baris baru
(new line) jadi yang akan ditampilkan pada program adalah: Pada baris pertama,
seperti yang kita lihat, ada perintah #include <iostream>. Tanda ‘#’ adalah
preprocessor directive. Preprocessor directive adalah perintah – perintah yang
diberikan kepada compiler untuk melakukan definisi, memasukkan file library,
dll.
3.4Pernyataan
Pernyataan merupakan bagian program yang berupa instruksi kepada
computer untuk melakukan sesuatu. Menampilkan tulisan dilayar, menghitung
operasi aritmatika, membaca inputan dan lain sebagainya. Setiap pernyataan harus
diakhir dengan tanda titik koma “;”.
Baris (#include <iostream.h>) bukan merupakan suatu pernyataan baris
ini digunakan untuk menyisipkan file (iostream.h) ke dalam program. Pada contoh
diatas iostream.h disebut file header. File header tersebut diperlukan agar perintah
cout bias dijalankan. Apabila file heder tersenut dihapus maka akan terjadi error.
Perintah Untuk menampilkan Informasi Ke Layar
Contoh program 3.2 :
#include <iostream.h>
#include <conio.h>
void main()
{cout << " saya sedang belajar c++"; getch();}

Gambar 3.2 hasil eksekusi program 3.2

13
Pengenal cout dapat digunakan untuk mengarahkan data ke standart output
(normalnya adalah layer). Tanda << merupakan operator yang berfungsi untuk
mengarahkan data yang terletak di sebelah kanannya ke objek yang berada di
sebelah kiri.
3.5 Gaya Penulisan Program
Bahasa C memberikan keleluasaan dalam menulis bentuk program.
Program di atas misalnya dapat ditulis kembali tanpa mengubah hasil eksekusi
program menjadi: program 3.3
#include <iostream.h>
#include <conio.h>
void main()
{cout << " saya sedang belajar c++"; getch();}

Gamabar 3.3 hasil eksekusi program 3.3


Bahkan penulisan seperti berikut, dengan menghilangkan sejumlah spasi
tetap diperkenankan: program 3.4
#include <stdio.h>
main ( ) { printf("Selamat datang\n");
printf("di program C++\n"); }

Gambar 3.4 hasil eksekusi program 3.4


Pemrogram tinggal memilih bentuk yang disukai. Sebagai pedoman,
penulisan atau pemilihan bentuk hendaknya memberikan kemudahan bagi yang
ingin membaca program, terutama untuk program yang berukuran besar.
Jika dilihat pada program 3.4 penulisan yang sangat mampat dapat menyebabkan
program sulit dipahami.

14
3.6 Bagian Komentar
Program yang baik pada umumnya diberi komentar yang akan membantu
orang lain maupun pembuat program itu untuk memahami program yang dibuat.
Dalam C atau C++ setiap tulisan yang diapit oleh symbol /* … */ atau setiap baris
yang dimulai dengan symbol // dianggap komentar. C++ tidak mengizinkan
komentar bersarang ( nested comment), namun Borland C++ lebih fleksibel dalam
hal ini.
Contoh C++ menggunakan komentar:program 3.5
#include<iostream.h>
main ()
{cout<<”nama :subagyo”; //untuk menampilkan nama}

Gambar 3.5 penulisan komentar tidak mempengaruhi hasil eksekusi


3.7 Include
#include merupakan salah satu jenis pengarah praprosesor yang digunakan
untuk memberitahu kompiler agar dalam proses linking membaca file yang
dinamakan file judul (header file), yaitu file yang diantaranya berisi deklarasi
fungsi dan definisi konstanta.
Bahasa C menyediakan beberapa file judul yang ditandai dengan ekstensi
.h. Misal pada Program di atas, #include <iostream.h> menyatakan pada kompiler
agar membca file bernama iostream.h saat melakukan kompilasi. Bentuk umum
#include : #include <namafile> atau #include “namafile”
Bentuk pertama (#include <namafile>) mengisyaratkan bahwa pencarian
file dilakukan pada direktori khusus (direktori file include), yang merupakan
default direktori file-file judul yang disediakan oleh bahasa pemrograman.
Bentuk kedua (#include “namafile”) menyatakan bahwa pencerian file
dilakukan pertama kali pada direktori aktif tempat program sumber, dan
seandainya tidak ditemukan pencarian akan dilanjutkan pada direktori lainnya
sesuai dengan perintah pada sistem operasi (yaitu PATH).

15
Pertemuan 4

ELEMEN DASAR C++

4.1 Konstanta
Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses
pemrograman berlangsung. Nilai konstanta selalu tetap. Konstanta harus
didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer,
pecahan, karakter dan string. Contoh konstanta:
50;13;3;14;4;50005;’A’;’BahasaC’.
Selain itu, bahasa C++ juga menyediakan beberapa karakter khusus yang disebut
karakter escape, antara lain:
Konstanta karakter Karakter
‘A’ Karakter berupa huruf A
‘1’ Karakter berupa angka 1
‘*’ Karakter symbol
‘\\’ Karakter \ (harus ditulis dengan awalan \)
\0 Karakter ber- ASCII nol (karakter null)
\a Karakter bel
\b Karakter backspace
\f Karakter formfeed (ganti halaman)
\n Karakter newline (pindah baris)
\r Karakter carriage return(keawal baris) tanpa linefeed
\t Karakter tab horizontal
\v Karakter tab vertical
\\ Karakter \
\’ Karakter '
\” Karakter "

16
Konstanta karakter Karakter
\? Karakter ?
Contoh program 4.1:
#include <iostream.h>
main()
{const float phi = 3.14;
cout << " Nilai phi = " << phi;}

Gambar 4.1 program dengan konstanta


Jika terjadi pengubahan nilai dari konstanta phi, maka akan terjadi error.

4.2 Operator
Operator (lambang-operasi) adalah simbol-simbol, baik berupa satu atau
beberapa karakter, yang menetapkan bagaimana suatu nilai dimanipulasi. itu
adalah:
! ~ - + * / % < > = | ^ ' ++ -- -= += /= %= << >> ==
!= <= >= |= && || ?: &= ^= <<= >>=

4.3 Variabel
Variable adalah suatu pengenal (identifier) yang digunakan untuk
mewakili suatu nilai tertentu di dalam proses program. Nilai dari suatu variabel
bisa diubah-ubah sesuai kebutuhan. Nama dari suatu variable dapat ditentukan
sendiri oleh pemrograman dengan aturan sebagai berikut:
1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus
berupa huruf.
2. Bahasa C++ bersifat case-sensitive artinya huruf besar dan kecil dianggap
berbeda. Jadi antara nim,NIM dan Nim dianggap berbeda.
3. Tidak boleh mengandung spasi

17
4. Tidak boleh mengandung symbol-symbol khusus, kecuali garis bawah
(underscore). Yang termasuk symbol khusus yang tidak diperbolehkan
antara lain: $,?,%,#,!,&,*(,),-,+,= dsb
5. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.
Contoh pendeklarasian variabel yang benar:
NPM,b,c,nama_siswa,a6547,nilai, dsb.
Contoh penanaman variable yang salah:
%nilai_siswa, 80siswa, rata-rata,ada spasi, penting!, dsb.
Contoh program 4.2:
#include <iostream.h>
void main()
{ int x,y,z;
x = 7;
y = 5;
z = x + y;
cout << " Hasil Penjumlahan = " << z; }

Gambar 4.2 program dengan pendeklarasian variable

18
Pertemuan 5

OPERATOR DAN UNGKAPAN

5.1 Pengantar Operator dan Ungkapan (Ekspresi)


Operator merupakan simbol yang biasa dilibatkan dalam program untuk
melakukan sesuatu operasi atau manipulasi misalnya untuk:
1. Menjumlahkan duabuah nilai
2. Memberikan nilai ke suatu variable
3. Membandingkan kesamaan dua buah nilai
Dalam C ekspresi dapat berupa :
- pengenal
- konstanta
- atau diantara kombinasi elemen diatas dengan operator
Contoh Ungkapan:
a=b+c–2
Pada ungkapan ini, a, b dan c merupakan operand, simbol =, + dan – merupakan
operator. Dalam hal ini variabel a diisi dengan hasil penjumlahan b dan c
dikurangi 1.
Selanjutnya nilai a ini mernyatakan nilai ungkapan.
5.2 Operator aritmatika
Bahasa C++ menyediakan lima operator aritmatika, yaitu:
Lima Operator Aritmatika
Operator Keterangan Contoh
* Perkalian 2*4
/ Pembagian 8/2
% Sisa Pembagian atau Modulus 9%2
+ Penjumlahan 5+6
- Pengurangan 6-5

19
Contoh program 5.1:
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr(); // untuk membersihkan layar
cout<<7 % 7 <<" n "; //sisa 0
cout<<9 % 7 <<" n "; //sisa 2
cout<<13 % 7 <<" n "; // sisa 6
getch();
}

Gambar 5.1 hasil program dengan operator aritmatika


5.3 Operator Bitwise
Operator Bitwise adalah manipulasi data dalam bentuk bit. Borland C++
menyediakan enam buah operator bitwise.
Contoh Program 5.2:
#include <stdio.h>
main()
{
unsigned x;
void displayBits(unsigned);
printf( "Ketik bilangan bulat tak bertanda : "); scanf( "%u", &x);
displayBits(x);
return 0;
}
void displayBits (unsigned value)
{
unsigned c, displayMask = 1 << 15;
printf ( "%7u = ", value );
for ( c = 1 ; c <= 16 ; c++ )
{
putchar ( value & displayMask ? '1' : '0' ) ;

20
if ( c % 8 == 0 )
putchar ( ' ' );
}
putchar ( '\n' );
}

Gambar 5.2 hasil program dengan operator bitwise


5.4 Operator penugasan
Operator penugasan (Assigment operator)dalam bahasa C++ berupa tanda
sama dengan (“=”). Contoh:
Nilai = 80;
A = x * Y;
Artinya : variable”nilai” diisi dengan 80 dan variable”A” diisi dengan hasil
perkalian antara x dan y, contoh:
Contoh program 5.3:
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai;
nilai = 70 ;//variable nilai diisi 70
cout << " variable nilai = " << nilai;
getch();
}

Gambar 5.3 hasil program dengan operator penugasan


5.5 Operator Relasi
Operator relasi digunakan untuk membandingkan antara dua buah nilai
atau variable. Operator relasi dalam bahasa C++:

21
Operator Arti Contoh
< Kurang Dari x< td>
<= Kurang Dari Sama Dengan x<=y (Apakah x kurang dari samadengan y)
> Lebih Besar x>y (Apakah x lebih dari y)
>= Lebih Besar Sama Dengan x>=y (Apakah x lebih dari sama dengan y)
== Sama Dengan x==y (Apakah x samadengan y)
!= Tidak Sama Dengan x!=y (Apakah x tidak samadengan y)
Contoh ungkapan kondisi yang menggunakan operator ralasi:
x==y
hasil ungkapan ini bernilai :
1 jika nilai x sama dengan nilai y
0 jika nilai x tidak sama dangan y

5.6 Operator Logika


Operator logika biasa digunakan untuk menghubungkan dua buah
ungkapan kondisi menjadi sebuah ungkapan kondisi operator oprator ini ada tiga
diantaranya:
? && :Logika AND(DAN)
? || : Logika OR (ATAU)
? !: Logika NOT (TIDAK / BUKAN)
bentuk pemakaian || atau && ungkapan1 dan ungkapan2 ditulis di dalam tanda
kurung.
Sebagai contoh (a = = c) && (b = = d) atau a = = c && b= = d
5.7 Operator Unary
Operator unary merupakan operator yang hanya membutuhkan satu
operand saja. Dalam bahasa c++ terdapat beberapa operator unary, yaitu:
Operator Unary
Operator Arti/Maksud Letak Contoh Equivalent
- Unary minus Sebelum operator A+-B*C A+(-B)*C
++ Peningkatan dengan penambahan Sebelum dan A++ A=A=1

22
Operator Arti/Maksud Letak Contoh Equivalent
nilai 1 sesudah
Pengurangan dengan Sebelum dan
-- A-- A=A-1
pengurangan nilai 1 sesudah
Sizeof Ukuran dari operand dalam byte Sebelum Sizeof(I) -
! Unary NOT Sebelum !A -
~ Bitwise NOT Sebelum ~A -
Menghasilkan alamat memory
& Sebelum &A -
operand
* Menghasilkan nilai dari pointer Sebelum *A -
Contoh program 5.4:
#include <iostream.h>
#include <conio.h>
void main( )
{
int x, nilai;
clrscr( ) ;
x = 6;
nilai = ++x; /* berarti x= x+1; nilai =x; */
cout << " nilai x " << nilai << endl;
//endl untuk pindah baris
nilai = x++; // berarti nilai =x; nilai = x+1;*/
getch ( );
}

Gambar 5.4 hasil program dengan operator unary

23
Pertemuan 6

OPERASI DASAR MASUKAN DAN KELUARAN

6.1 Cout
Dalam bahasa C++ proses menampilkan suatu data biasa menggunakan
beberapa operasi tersedia. Beberapa operasi yang biasanya digunakan adalah:
cout dengan menggunakan obyek ini program dapat menampilkan informasi ke
standard output (berupa layar)
cout << ”saya belajar C++ \n”;
cout << ”saya belajar C++ “ << endl;
Pada contoh diatas terdapat karakter khusus yang berupa newline
penulisan berupa (\n) digunakan untuk pindah baris atau biasa nya menggunakan
(endl) juga digunkan untuk pindah baris
Contoh program 6.1 :
#include <iostream.h>
void main( )
{cout << ” Saya belajar C++ \n ”;}

Gambar 6.1 hasil eksekusi program 6.1


6.2 Cin
Obyek ini bermanfaat untuk membaca data dari standard input (keyboard).
Dengan meletakan variable bernama var :
Contoh Program 6.2 :
#include <iostream.h>
#include <iomanip.h>
void main( )
{int x;
float y;
cout << " Masukkan sebuah nilai bulat : ";

24
cin >> x;
cout << " Masukkan sebuah nilai desimal : ";
cin >> y;
cout << " Bilangan bulat " << x << endl;
cout << " Bilangan desimal " << y << endl;
}

Gambar 6.2 hasil eksekusi program 6.2


6.3 Manipulator
Manipulator umumnya digunakan untuk mengatur tampilan data missal
untuk mengatur nilai dengan lebar tampilan 10 karakter ada beberapa jumlah
manipulator pada C++ diantaranya:
Manipulator endl
Digunnakan untuk menyisipkan karakter newline. Manipulator ini identik dengan
newline
Contoh program 6.3 :
#include <iostream.h>
void main( )
{
int nilai1 = 100 , nilai2 = 90;
cout << " nilai1 = " << nilai1 << endl;
cout << " nilai2 = " << nilai2 << endl;
}

Gambar 6.3 hasil eksekusi program 6.3

Manipulator setw()

25
Manipulator setw() bermanfaat untuk mengatur lebar halaman dari suatu
tampilan data.Sebagai contoh,nilai pada progam di bawah ini dapat ditampilkan
rata kanan dengan cara sebagai berikut:
Contoh program 6.4:
#include <iostream.h>
#include <iomanip.h>
void main( )
{
int nilai1 = 100 , nilai2 = 90;
cout << " nilai1 = " << setw(5) << nilai1 << endl;
cout << " nilai2 = " << setw(5) << nilai2 << endl;
}

Gambar 6.4 hasil eksekusi program 6.4

26
Pertemuan 7

PERNYATAAN DASAR
7.1 If, Else If, dan Else
Dalam pembahasan sebelumnya, secara sekilas kita sudah melihat cara
penerapan if dan else dalam kode – kode yang kita gunakan. Di sini kita kan
mencoba membahasnya lebih lanjut.
7.2 If
Seperti namanya, if berarti jika, yang berarti “jika kondisi ini terbukti
maka (akan dilakukan sesuatu dalam kondisi seperti ini)”. Dan biasanya if
“berpasangan” dengan else. Jadi, dapat dikatakan bahwa secara keseluruhan apa
yang dimengerti oleh komputer adalah: “jika kondisi A terjadi, maka saya akan
melakukan tindakan A, selain itu maka saya akan melakukan tindakan B”.
7.3 Else
Else adalah kondisi selain atau diluar kondisi pertama (if). Salah satu
perumpamaan dari “kasus” ini adalah: “jika dia tidak mati, maka dia hidup”.
Contohnya: program
#include <iostream.h>
void main ( )
{ char benda;
cout << "masukkan jenis benda (M/H): ";
cin >> benda;
if (benda == 'M')
cout << "benda mati\n";
else
cout << "benda hidup \n";
}

Gambar 7.1 hasil program dengan else dan if

27
7.4 Else If
else if sebenarnya adalah kondisi kedua yang diperkirakan akan terjadi
sedangkan else sebenarnya adalah kondsi terakhir yang diperkirakan akan terjadi.
Jika anda perhatikan sebenarnya else adalah untuk semua kondisi selain
kondisi pertama. Artinya, jika anda memasukkan huruf selain “M” juga akan
diangap hidup. Karena yang terbaca oleh komputer adalah “jika variabel benda
“isinya” huruf M, maka benda mati, selain itu dianggap benda hidup”. Jadi, jika
anda memasukkan huruf L atau P sekalipun, benda yang anda masukkan akan
tetap dianggap benda hidup. Penempatan else if adalah selalu di bawah if karena
else if yaitu kondisi selain if. Berikut adalah kode lengkap dari penggunaan if,
else if dan else:
#include <iostream.h>
#include <string.h>
void main ()
{int pilihan;
cout << "selamat datang di restoran kami \n";
cout << "silahan memilih\n";
cout << "1. ayam goreng campur mules\n";
cout << "2. bangkai pesawat adam air dan isinya\n";
cout << "3. sop ayam campur sari\n";
cout << "silahkan masukkan pilihanmu, \n";
cin >> pilihan;
if (pilihan == 1)
cout << "selamat berlama2 di toilet\n";
else if (pilihan == 2)
cout << "wah, selera anda cukup unik ya...?\n";
else if (pilihan == 3)
cout << "wah, memang menu ini lagi naik daun disini\n";
else cout << "wah, sepertinya anda tidak bisa membaca ya?\n"
<< "dari galaksi mana anda?\n";}

28
Gambar 7.2 hasil program dengan else,if dan else if
7.5 Switch
Dengan memakai contoh program di atas, kita bisa membuat hasil yang
sama dengan kode yang lebih singkat.Kali ini saya akan langsung menunjukkan
contoh penggunaan switch.
#include <iostream.h>
void main ()
{ int pilihan;
cout << "selamat datang di restoran kami \n";
cout << "silahan memilih\n";
cout << "1. ayam goreng campur mules\n";
cout << "2. bangkai pesawat adam air dan isinya\n";
cout << "3. sop ayam campur sari\n";
cout << "masukkan pilihan anda: "; cin >> pilihan;
switch (pilihan)
{case 1:
{cout << "anda memilih nomor satu!\n";break;
}case 2:
{cout << "anda memilh nomor dua!\n";break;
}case 3:
{cout << "anda memilih nomor tiga!\n";break;
}default:cout << "maaf pilihan anda tidak terdapat dalam menu kami\n";}}

29
Gambar 7.3 hasil program menggunakan switch
Mengapa memakai break ? Ini karena disebabkan oleh switch akan
mengeksekusi statement di bawahnya jika tidak dikeluarkan oleh break. Jadi, jika
tida dikeluarkan oleh break, yang akan terjadi adalah:

Gambar 7.4 hasil program switch jika tanpa break


Ini akan terjadi jika kita memasukan angka 1,2 dan 3 (tiga) dan seterusnya.
Ini terjadi karena ketika switch selesai mengeskusi case 1, misalnya, tanpa break,
maka switch akan terus mengeksekusi statement yang berada di bawahnya sampai
selesai. Makanya, break berfungsi untuk keluar dari switch begitu statement pada
satu case selesai di eksekusi (tanpa melanjutkan ke statement berikutnya / yang
berada di bawahnya).

30
Pertemuan 9

FUNGSI

Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah


nama. Nama ini selanjutnya dapat dipanggil dipanggil beberapa kali dibeberapa
tempat dalam program. Tujuan pembuatan fungsi adalah :
Memudahkan dalam mengembangkan program. Hal ini merupakan kunci
dalam pembuatan program yang terstruktur. Menghemat ukuran program.
Manfaat ini terasakan kalau ada beberapa deretan instruksi yang sama digunakan
pada beberapa tempatdi dalam program.
Umumnya fungsi menerima masukan (disebut argumen atau parameter).
Masukan ini selanjutnya diproses oleh fungsi. Hasil akhir berupa sebuah nilai
yang disebut nilai balik (return value).

9.1 Prototipe Fungsi


Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklarasikan. Untuk
melihat hal ini perhatikan contoh berikut :
Program 9.1
void main ( )
{printf (“Hai \n”);}
Jika program ini dijalankan, C++ akan memberikan kesalahan yang menyatakan
bahwa printf( ) tidak memiliki prototype. Hal seperti ini masih bisa lolos pada
bahasa C. Tetapi tidak demikian halnya pada C++. Kesalahan seperti diatas tidak
akan terjadi seandainya program ditulis menjadi seperti berikut.
Program 9.2 :
#include <stdio.h>
void main() {printf (“ Hai \n “);}

31
Gambar 9.1 hasil eksekusi program 9.2
Mengapa? Karena prototipe fungsi printf( ) ada pada file “stdio.h”. Itulah
sebabnya diperlukan untuk menyertakan baris berbentuk :
#include < nama_file_header >
Deklarasi fungsi dikenal dengan sebutan prototipe fungsi. Dan diakhiri dengan
titik koma (;), sebagaimana pada pendeklarasian variable. Sebagai contoh :
1). long kuadrat (long l);
2). int maks3 (int a, int b, int c );
3). double maks (double x, double y );
4). void garis ( );
Pada contoh pertama, fungsi kuadrat() mempunyai argumen bertipe long
dan nilai balik juga bertipe long. Pada contoh kedua, fungsi maks3() memiliki tiga
buah argumen, masing-masing bertipe int dan nilai balik juga bertipe int. Adapun
contoh ketiga, fungsi maks() mempunyai dua buah argumen, masing-masing
argumen bertipe double. Pada contoh keempat, fungsi garis() tidak memiliki
argumen dan nilai balik tidak ada (void).
Manfaat dari prototipe fungsi adalah untuk menjamin tipe argumen yang
dilewatkan pada pemanggilan fungsi benar-benar sesuai. Tanpa adanya prototipe
fungsi, amatlah mudah bagi pemrogram untuk melakukan kesalahan tanpa sengaja
dalam melewatkan argumen. Misalnya, melewatkan argumen bertipe float pada
fungsi yang semestinya meminta tipe data int. Dengan adanya prototipe fungsi,
kesalahan semacam itu akan terdeteksi oleh kompiler.

9.2 Definisi Fungsi


Setiap fungsi yang dipanggil didalam program harus didefinisikan.
Letaknya dapat dimana saja. Khusus untuk fungsi yang disediakan sistem,
definisinya sebenarnya ada dalam pustaka, yang akan digabungkan dengan
program sewaktu proses linking. Contoh definisi fungsi kuadrat( ):
long kuadrat (long l)
{
return (l * l);

32
}
Pada pendefisian fungsi, setelah : long kuadrat (long l)
Tidak terdapat tanda titik koma. Ini berbeda dengan prototipe fungsi.
Pernyataan return didalam fungsi digunakan untuk memberikan nilai balik
fungsi. Pada contoh diatas, fungsi kuadrat() memberikan nilai balik berupa nilai
kuadrat dari argumen.
contoh fungsi untuk memperoleh nilai terbesar di antara dua bilangan
program 9.3 :
#include<iostream.h>
#include<conio.h>
double maks(double x,double y); //prototie
void main()
{
clrscr(); //hapus layar
cout<<maks(65789,123)<<endl;
cout<<maks(123,65789)<<endl;
}
double maks(double x,double y)
{if (x > y)
return (x);
else
return (y);
}

Gambar 9.2 hasil eksekusi program 9.3

9.3 Lingkup Variabel


Pemahaman terhadap lingkup variable didalam penulisan fungsi sangatlah
penting, agar tidak salah dalam menggunakan suatu variable. Lingkup variable
menentukan keberadaan suatu variable tertentu didalam fungsi. Ada variable yang

33
hanya dikenal disuatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga
variable yang dapat di akses oleh semua fungsi.
Jenis variable berdasarkan kelas penyimpanannya, yaitu :
1. Varabel Otomatis (lokal)
2. Variable Eksternal(global).

9.3.1. Varabel Otomatis (lokal).


Variabel yang didefinisikan didalam suatu fungsi berlaku sebagai variabel
lokal bagi fungsi. Artinya, variable tesebut hanya dikenal didalam fungsi tempat
variable didefinisikan.
Contoh untuk memperlihatkan efek variabel otomatis (lokal)
Program 9.4:
#include<iostream.h>
#include<conio.h>
void alpha(); //prototipe fungsi
void main()
{int x = 22; //variable lokal pada main()
double y = 2.22; //begitu juga pada variable ini
clrscr();
cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl;
alpha(); //panggil variable alpha
cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl;
}
void alpha()//definisi fungsi alpha()
{int x = 20; //variable lokal pada main()
double y=3.14; //begitu juga pada variable ini
cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl;
}

Gambar 9.3 hasil eksekusi program 9.4

34
9.3.2. Variable Eksternal(global)
Variable eksternal adalah varibel yang didefinisikan diluar fungsi
manapun. Variable ini dikenal juga sebagai variable global, sebab variable ini
dikenal di semua fungsi.
Guna memperjelas bahwa suatu variable didalam suatu fungsi merupakan
variable eksternal, didalam fungsi yang menggunakannya, kita dapat
mendeklarasikan (bukan mendefinisikan, karena tidak ada pengalokasian memori)
dengan menambahkan kata kunci extern didepan tipe data. Kata kunci
menyatakan bahwa variable tersebut didefinisikan di tempat lain.
Contoh program 9.5
#include<iostream.h>
#include<conio.h>
int oblada = 550; //variable eksternal
void tambah(); //prototipe fungsi
void main()
{
clrscr(); //hapus layar
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
}
//definisi fungsi
void tambah()
{
oblada++; //variable eksternal dinaikkan
}

35
Gambar 9.4 hasil eksekusi program 9.5

9.4 Referensi
Pada C++ referensi digunakan untuk memberikan nama alias dari variable.
Bentuk pendeklarasiannya :
Tanda & mengawali nama referensi. Setelah pendeklarasian seperti diatas, ref
menjadi nama alias dari nama_variable. Pengubahan nilai terhadap
nama_variable dapat dilakukan melalui nama_variable itu sendiri ataupun
melalui referensi ref. Referensi sangat berguna untuk melewatkan struktur atau
obyek yang besar kedalam fungsi. Dengan memakai referensi untuk parameter,
hanya alamat yang akan dilewatkan dan bukan struktur atau obyek itu sendiri.
Keuntungannya : Menghemat stack (untuk meletakkan argumen ke stack pada
saat pemanggilan fungsi).
Selain itu akan membuat argumen struktur atau obyek gampang dipakai
didalam fungsi itu sendiri.
contoh untuk memperlihatkan alamat variabel alamat referensi
program 9.6:
#include<iostream.h>
#include<conio.h>
void main()
{
int i = 55;
int &r = i; //referensi
clrscr(); //hapus layar
cout<<”Alamat : i = “<<&i<<” r =”<<&r<<endl;
}

Gambar 9.5 hasil eksekusi program 9.6

36
9.5 Rekursi
Rekursi atau recursion dalam matematika dan ilmu komputer diartikan
sebagai fungsi yang dalam definisinya mengimplementasikan dirinya sendiri.
Untuk lebih mudahnya, bisa dikatakan bahwa rekursi adalah fungsi yang
memanggil dirinya sendiri.
Namun demikian, rekursi tidaklah hanya merupakan istilah eksak semata.
Jika kita mau memperhatikan lagi dengan lebih teliti, ternyata ada banyak contoh
rekursi di sekeliling kita. Rekursi dalam dunia nyata bisa terjadi salah satunya
adalah jika kita meletakkan dua cermin secara berhadapan dan sejajar. Bayangan
yang terjadi pada kedua cermin itulah rekursi.
Dalam dunia matematika dan komputer, rekursi khususnya digunakan
untuk menyelesaikan perhitungan yang rumit dan kompleks. Prinsip rekursi
sebenarnya sederhana, yaitu memecah masalah menjadi masalah-masalah yang
lebih kecil. Dengan memecah masalah menjadi bagian-bagian yang lebih kecil
tersebut, masalah yang sangat kompleks dan rumit sekalipun akan lebih mudah
untuk diselesaikan.
Contoh paling populer implementasi rekursi adalah penyelesaian
perhitungan faktorial dari suatu bilangan bulat (integer number). Dalam
matematika, faktorial didefinisikan sebagai berikut:

dan

Sehingga didapat misalnya nilai faktorial dari bilangan 5 dan 6 adalah sebagai
berikut:

dan

Perhatikan contoh source code yang ditulis dalam bahasa pemrograman C++
berikut. Source code berikut adalah contoh penyelesaian komputasi faktorial
menggunakan teknik rekursi.

37
Program 9.7:
#include <iostream.h>
typedef unsigned int UINT;
long Factorial(UINT aNumber)
{
if (aNumber == 0)
return 1;
return aNumber*Factorial(aNumber-1);
}
int main()
{
std::cout << Factorial(5);
return 0;
}

Gambar 9.6 hasil eksekusi program 9.7

38
Pertemuan 10

ARRAY (VARIABEL BERINDEKS)

Variabel dengan tipe data tunggal (skalar) hanya dapat digunakan untuk
menyimpan sebuah nilai saja, sehingga untuk menyimpan beberapa nilai sekaligus
dalam suatu variabel khusus yang disebut dengan variabel array atau variabel
berindeks. Variabel array dapat digunakan untuk menampung banyak data yang
sejenis (numerik/string).

10.1 Array 1 Dimensi


Tanda [] disebut juga “elemen yang ke...
Misalnya kondisi[0] berarti elemen yang ke nol.
Array yang sudah dipesan, misalnya 10 tempat tidak harus diisi semuanya,
bisa saja hanya diisi 5 elemen saja, baik secara berurutan maupun tidak. Namun
pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan di memori
tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan terpesan dan
dibiarkan kosong.
Contoh program 10.1
#include <stdio.h>
#include <conio.h>
void main()
{ int nilai[10], x;
clrscr();
printf("Memasukkan nilai :\n");
for(x=0;x<5;x++)
{
printf("Nilai Angka : "); scanf("%d",&nilai[x]);
}
printf("\n");
printf("Membaca nilai :\n");
for(x=0;x<5;x++)

39
{
printf("Nilai Angka : %d",nilai[x]);
}
getch();
}

Ganbar 10.1 hasil eksekusi program 10.1


Terlihat bahwa alamat array berurutan dengan jarak antar alamat adalah 4 bytes
(integer berukuran 4 bytes)
Contoh program 10.2 (inisialisasi dengan 0):
#include <stdio.h>
#include <conio.h>
int main(){
int bil[7] = {0}; //inisialisasi 0
for(int i=0;i<7;i++){
printf("Elemen ke-%i = %d\n",i,bil[i]);
}
getch();
return 0;
}

Gambar 10.2 hasil eksekusi program 10.2

40
10.2 Array Berdimensi Dua dan Operasi Matrik
Array berdimensi 2 sering digunakan dalam operasi matrik. Array
berdimensi 2 terdiri atas 2 elemen yaitu baris dan kolom. Matrik adalah daftar
bilangan yang disusun dalam bentuk dua dimensi kolom dan baris. Nilai-nilai
dalam matrik disebut dengan elemen matrik. Pada suatu program komputer, suatu
matriks disimpan pada array berdimensi 2. Indeks dari matrik menunjukkan
nomor elemen dari matriknya.
Contoh program 10.3:
#include <stdio.h>
#include <conio.h>
void main()
{ int x[3][3]={{1,2,3},{4,5,6},{7,8,9}},b,k;
clrscr();
for(b=0 ; b<3 ; b++)
for(k=0 ; k<3 ; k++)
printf("x[%d][%d] = %d\n",b,k,x[b][k]);
for(b=0 ; b<3 ; b++)
for(k=0 ; k<3 ; k++)
{
gotoxy(20+(k+1)*2,b+1);
printf("%d",x[b][k]);
}
getch();
}

Gambar 10.3 hasil eksekusi program 10.3

41
Pertemuan 11

STRING

11.1 Pengantar String


String sangat memudahkan tugas pemogram. Dengan menggunakan string,
pemogram dapat menampilkan pesan kesalahan, menampilkan prompt bagi
masukan keyboard ataupun memberikan informasi pada layar dengan mudah.
Seperti halnya tipe data yang lain, string dapat berupa konstanta atau variabel.
Konstanta string sudah biasa anda sertakan pada program. Misalnya pada
pernyataan :
cout << "C++"<<endl;
terdapat konstanta string "C++". Tetapi sejauh ini, variabel string belum
diperkenalkan.
11.2 Konstanta String
Suatu konstanta string ditulis dengan awalan dan akhiran tanda petik
ganda(" "), misalnya: "C++". Konstanta string seperti diatas disimpan dalam
memori secara berurutan. Setiap karakter menempati memory 1 byte. Setelah
karakter yang terakhir terdapat karakter Null (karakter dengan nilai ASCII sama
dengan nol atau disimbolkan dengan "\0", yaitu tanda \ dikuti dengan nol).
Bila suatu string hanya berisi karakter NULL, string disebut sebagai string
kosong.
11.3 Memasukan Data String
Setelah suatu variabel string didefinisikan, Anda bisa mengisikan data ke
variabel tersebut. Pemasukan data dapat ditangani oleh data cin, seperti contoh
program 11.1 :
#include<iostream.h>
#include<conio.h>
void main()

42
{ char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr();
cout<<"Masukan sebuah kata :"<<endl;
cin>> teks;
cout<< "Kata yang tercetak :"<<teks;
}

Gambar 11.1 hasil eksekusi program 11.1


Yang perlu diperhatikan adalah bahwa cin hanya dapat membaca sebuah
kata. Artinya karakter-karakter yang terletak sesudah spasi tidak bisa ditampung
pada teks. Ini disebabkan operator << pada cin hanya bisa membaca masukan
hingga terdapat spasi, tab atau enter.
Untuk menampilkan agar dapat terbaca solusinya adalah menambahkan
fungsi get() pada objek cin (cin.get()) bisa dipakai untuk keperluan ini. Sebagai
contoh seperti program 11.2 :
#include<iostream.h>
#include<conio.h>
void main()
{ char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr(); //hapus layar

cout<<"Masukan sebuah kata :"<<endl;


cin.get(teks, 13);
cout<< "Kata yang tercetak :"<<teks;
}

Gambar 11.2 hasil eksekusi program 11.2


Tampak, bahwa karakter yan terletak sesudah spasi juga ikut disimpan
pada teks. Sekarang kita lihat kalau data yang dimasukan lebih dari 13 karakter

43
maka hanya 12 karakter pertama yang disimpan pada teks, mengingat argumen
kedua dari fungsi get() diisi dengan 13 (satu karakter berisi Null).
Pada contoh program di atas dapat ditulis sebagai berikut :
cin.get(teks, 13)
Bisa juga ditulis sebagai berikut :
cin. Get(teks, sizeof(teks));

11.4 Fungsi untuk string


11.4.1Fungsi getline()
Suatu masalah akan timbul kalau cin.get() digunakan 2 kali seperti contoh
program 11.3i
#include<iostream.h>
#include<conio.h>
void main()
{ char nama[25];
char alamat[35];
clrscr();
cout<<"Masukan Nama :"<<endl;
cin.get(nama, sizeof(nama));
cout<< "Masukan Alamat :"<<endl;
cin.get(alamat,sizeof(alamat));
cout<<"Nama:"<<nama<<endl;
cout<<"Alamat:"<<alamat<<endl;
}

Gambar 11.3 hasil eksekusi program 11.3


Pada contoh di atas cin.get() pertama digunakan untuk membaca nama
yang kedua untuk membaca alamat. Ternyata program tidak memberikan
kesempatan untuk mengisi alamat. Hal ini terjadi karena get() yang pertama tidak
membuang kode newline(\n). Oleh karena get() tidak mengabaikan spasi putih(
spasi, tab , atau newline) maka get() kedua menjadi tidak berfungsi sebagaimana

44
mestinya. Cara untuk menyelesaikan masalah di atas dengan menggunakan fungsi
getline(), karena fungsi ini dapat membuang sisa data yang tidak dibaca, termasuk
newline itu sendiri. Pada contoh berikut, get() diganti dengan getline().
Contoh program 11.4:
#include<iostream.h>
#include<conio.h>
void main()
{ char nama[25];
char alamat[35];
clrscr(); //hapus layar
cout<<"Masukan Nama :"<<endl;
cin.getline(nama, sizeof(nama));
cout<< "Masukan Alamat :"<<endl;
cin.getline(alamat,sizeof(alamat));
cout<<"Nama:"<<nama<<endl;
cout<<"Alamat:"<<alamat<<endl;
}

Gambar 11.4 hasil eksekusi program 11.4


Tampak bahwa dengan menggunakan getline(), data alamat dapat diisi.

14.1.2Fungsi strcpy
Bentuk dari dari strcpy() :
strcpy(string_target,string_awal)
Prototipe fungsi di atas ada pada file header string.h
Contoh program 11.5 menggunakan strcpy():
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{

45
char teks[]="C++ Oke";
char data [25];
clrscr(); //hapus layar
strcpy(data,teks); // mengcopy isi teks ke data
cout<<"Isi data :"<<data<<endl; }

Gambar 11.5 hasil eksekusi program 11.5

11.1.3 Fungsi toupper dan tolower


Fungsi toupper() berguna untuk memperoleh huruf kapital dari suatu huruf
kecil. Nilai balik dari fungsi ini akan berupa seperti argumennya kalau argumen
tidak berisi huruf kecil.
Adapun fungsi tolower() adalah kebalikan dari toupper(). Fungsi ini memberikan
nilai balik :
v Berupa huruf kecil kalau argumen berisi huruf kapital
v Berupa nilai seperti argumen kalau argumen tidak berupa huruf kecil
Kedua fungsi di atas memberikan nilai balik bertipe int dan memiliki protipe pada
file ctype.h
Contoh program 11.6 :
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
void main()
{ char st[]="saya suka C++";
clrscr(); //hapus layar
for(int i=0; st[i];i++)
st[i]= toupper(st[i]);
cout<<st<<endl; }

Gambar 11.6 hasil eksekusi program 11.6

46
Pada contoh di atas,
st[i]= toupper(st[i]);
menyebabkan setiap huruf kecil pada variabel st akan diganti dengan huruf
kapital.

11.1.4 Fungsi strlen()


Panjang suatu string dapat diketahui dengan mudah menggunakan fungsi
strlen(). Misalnya saja, didefinisikan :
char bunga[15]= "mawar";
int panjang;
Maka pernyataan yang menggunakan strlen :
panjang = strlen(bunga);
akan memberikan panjang string yang tersimpan pada variabel bunga ke panjang.
Contoh program 11.7:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{ char bunga[15]="mawar";
char kosong[23]="";
clrscr(); //hapus layar
cout<<strlen(bunga)<<endl;
cout<<strlen(kosong)<<endl;
}

Gambar 11.7 hasil eksekusi program 11.7

11.1.5 Fungsi strlwr() dan strupr


Jika isi semua huruf kapital pada suatu string dinginkan untuk diubah
menjadi huruf kapital, hal ini dapat dilakukan melalui fungsi strlwr(). Misalnya,
didefinisikan :

47
char st[]="AbCdEfGeHjKl";
Maka st akan berisi : "abcdefgehjki";
Sedangkan fungsi strupr() kebalikan dari fungsi strlwr(). Kedua fungsi di atas
sama seperti tolower dan toupper.
Contoh program 11.8 untuk memperlihatkan efek strlwr() dan strupr() :
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char st[]="AbCdEfGhIjKl";
clrscr(); //hapus layar
cout<<"Isi St mula-mula:"<<st<<endl;
strlwr(st);
cout<<"Isi setelah dikonversi strlwr: "<<endl;
cout<<st<<endl;
strupr(st);
cout<<"Isi setelah dikonversi strupr: "<<endl;
cout<<st<<endl;
}

Gambar 11.8 hasil eksekusi program 11.8

48
Pertemuan 12

POINTER

12.1 Pengertian Pointer


Pada pertemuan kali ini, kita akan membahas powerful feature dari bahasa
pemograman C/C++, yaitu pointer. Pointer (variabel penunjuk) adalah suatu
variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan
variabel level rendah yang dapat digunakan untuk menunjuk nilai integer,
character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung
oleh bahasa C.
Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer
sifatnya dinamis dan dapat lebih fleksibel. Variabel pointer yang tidak menunjuk
pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling
pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi.

12.2 Alamat pointer


Operator atau alamat. Pada saat pendeklarasian variable, pengguna tidak
diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan
dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time.
Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan
dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address
of". Contoh :
ted = &andy;
Penulisan tersebut berarti akan memberikan variable ted alamat dari
variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka
yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable.
Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :
andy = 25;

49
fred = andy;
ted = &andy;
Maka hasilnya

Gambar 12.1

12.3 Variabel Pointer

Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke


obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari
suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai
contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px.
Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi
1000.
Sebagaimana diilustrasikan pada gambar di bawah ini

50
px
zzzz 1000

Address
?
1000
x

Gambar 12.2 Variabel pointer px menunjuk ke variabel x


Seperti halnya variabel yang lain, variabel pointer juga harus
dideklarasikan terlebih dahulu sebelum digunakan.
Bentuk Umum : tipe_data *nama_pointer;
Contoh : int *nilai;
char *huruf;
Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya.

12.5 Nilai yang di tunjuk pointer


untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga
digunakan operator * (tanda asterisk). Jika diinginkan untuk menampilkan alamat
tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan
operator & (tanda ampersand).
12.6 void pointer
Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk
pada tipe data apapun, nilai integer value atau float, maupun string atau karakter.
Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena
panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau
assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya.
12.7 Memory pointer
Salah satu konsep yang menyebabkan banyak programer baru tak berujung
frustrasi adalah pointer. Ini didasarkan pada konsep bahwa setiap variabel

51
memiliki lokasi penyimpanan di memori. Sebelum kita berbicara tentang pointer,
kita akan melihat bagaimana sebuah memori komputer bekerja.
Memori terdiri, pada tingkat terendah, sekelompok bit yang dapat baik 1
atau 0. Bit ini agak terlalu kecil untuk individual berguna, dan itu akan sangat
tidak praktis untuk mengaksesnya satu per satu waktu. Sebagai hasilnya, mereka
biasanya diakses dalam potongan. Pada komputer pribadi, mereka biasanya
diakses dalam potongan dari 8 bit. Tidak ada yang terlalu istimewa 8.
Sebuah sistem dapat dengan mudah bekerja dengan potongan dari 9, 12,
16 atau 32 bit. Untuk tutorial ini, kita akan menggunakan 8 bit.
Apapun sistem bekerja dengan disebut sebagai blok addressable terkecil
memori. Karena kita menggunakan 8 bit pada contoh kita, itu berarti setiap
variabel akan menggunakan satu atau lebih blok dari 8 bit. Akibatnya, urutan dari
beberapa blok memori akan terlihat seperti ini:
Kode:
|........||........||........||........|
01 02 03 04
Gambar 12.3
Setiap blok bit diberikan nomor (alamat memori). Sebuah variabel di C +
+ akan menempati satu atau lebih blok memori. Untuk keperluan bekerja dengan
memori, sebuah char didefinisikan untuk menduduki 1 blok (minimum 8 bit).
Variabel lain menempati kelipatan yang banyak blok. Untuk keperluan tutorial ini,
sebuah char akan menempati 1 dari blok memori di atas (seperti 01). Sebuah int
akan menempati 2 blok memori yang berdekatan (seperti 01 dan 02, atau 03 dan
04). Ganda akan menempati 4 blok memori yang berdekatan (01, 02, 03, dan 04).
Mengingat semua itu, perhatikan kode berikut:
Kode:
int main()
{
int int1=5;
double double1=3.14;
int int2=10;
char cha1='A',cha2='2';

52
return 0;
}
Jika anda melihat diagram tentang bagaimana variabel-variabel yang
disimpan dalam memori, ini mungkin terlihat seperti ini (. Adalah 2 bits):
Kode:
|int1....||double1.........||int2....||cha1||cha2|
02&03 04-07 08&09 10 11
Melihat ini, lokasi dari variabel-variabel dapat berupa: INT1: 02, double1:
04, int2: 08: cha1: 09, cha2: 10. Perhatikan bahwa saya tidak mengatakan apa-apa
tentang apa yang masing-masing variabel berisi, di mana mereka berada. Juga
perhatikan bahwa char adalah ukuran 1 (seperti biasa), dan bahwa aku
mengasumsikan bahwa int adalah ukuran 2, dan double adalah ukuran 4. Jumlah
bit dalam ukuran 1 adalah sering 8, tapi benar-benar tergantung pada arsitektur
perangkat keras. Tujuan dari pointer adalah untuk menyimpan alamat-alamat ini
dan memberikan kami akses ke variabel berdasarkan alamat mereka. Anda
membuat petunjuk sebagai berikut:
Kode:
int main()
{
int int1=5;
double double1=3.14;
int int2=10;
char cha1='A',cha2='2';
int* intptr = &int1;
double* dptr = &double1;
char* charptr = &cha1;
return 0;
}
Alamat di depan INT1 mengembalikan alamat INT1, dalam hal ini 02.
Jadi intptr berisi 02, dptr berisi 04, dan charptr berisi 09. The * dalam deklarasi
variabel menunjukkan bahwa variabel pointer ke jenis di depan *. Pada titik ini,
hal itu mungkin tampak konyol untuk menggunakan pointer bukan hanya
menggunakan variabel. Besar, kita dapat menyimpan lokasi memori. Jadi apa?

53
Satu hal yang dapat kita lakukan adalah menggunakan pointer untuk
mendapatkan akses ke variabel apa toko. Kita melakukan ini dengan * operator
(dereferencing). Itu berarti * intptr akan kembali 5, sementara intptr akan kembali
02. Hal lain yang dapat Anda lakukan adalah menggunakan + dan - pada pointer
ke langkah maju atau mundur melalui memori. Jarak 1 akan bergerak melalui
memori tergantung pada jenis memori pointer memandang. Sejak intptr terlihat di
ints (dalam hal ini ukuran 2 (biasanya 16 bit)), jika intptr berisi 02, kemudian
intptr + 1 akan kembali 04 (satu int maju). Sejak dptr terlihat di ganda (dalam hal
ini ukuran 4), jika dptr berisi 04, dptr 1 akan kembali 08 (satu ganda maju).
Pada titik ini, Anda mungkin berpikir hal ini berarti Anda dapat
menggunakan intptr untuk mengakses ganda. Anda tidak bisa. intptr + 1 akan
mengakses double1 paruh pertama. Hasilnya akan tergantung pada arsitektur yang
mendasari. Demikian pula, dptr + 1 akan menafsirkan semua int2, cha1, dan cha2
sebagai ganda. Nilai utama dari pointer adalah menerima dan bekerja dengan
array dalam fungsi. Perhatikan kode berikut:
Kode:
#include <iostream.h>
void loadarray(int* thearray)
{ for (int i=0;i<10;i++) thearray[i]=i;
}
void printarray(int* thearray)
{ for (int i=0;i<10;i++) std:
cout<<"element"<<i<<" "<<*(thearray+i)<<"\n";
}
int main()
{ int myarray[10];
loadarray(myarray);
printarray(myarray);
}

54
Gambar 12.4
Pada pembahasan pertama, mungkin muncul bahwa kami melewati sebuah
integer ke load array. Ini tidak terjadi. myarray adalah sebuah array dari ints,
tetapi istilah myarray sebenarnya adalah sebuah pointer ke int pertama dalam
array. Ketika loadarray menerima bahwa pointer, kemudian dapat menggunakan
pointer int thearray seperti nama array (ya, kami memiliki dua pointer menunjuk
ke elemen pertama dari array). [] operator akan menafsirkan array itu nama
sebagai array dan menemukan elemen yang benar berdasarkan indeks.
Penggunaan array yang lain adalah untuk menciptakan variabel pada saat
run-time. Dalam keadaan normal, anda harus menyatakan apa yang variabel
dalam kode Anda akan bekerja dengan. Kadang-kadang, bagaimanapun, anda
tidak tahu. Ketika Anda sedang membaca sebuah file, Anda tidak tahu seberapa
besar itu, sehingga Anda tidak dapat menjelaskan ukuran di muka. Berhasil
membacanya, Anda akan perlu untuk mengambil memori yang diperlukan.
Kode:
int main()
{
int* intptr = 0;
intptr = new int;
intptr = new int;
*intptr = 5;
delete intptr;
}

55
12.7 Pointer Penunjuk Pointer (pointer to pointer)
Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut
memberikan contoh mengenai pointer menunjuk pointer.
Pointer Pointer Variabel
ptr1 ptr2 var_x
alamat alamat
ptr1 ptr1 nilai

Gambar 12.5 Pointer yang menunjuk pointer

Untuk membentuk rantai pointer seperti pada gambar di atas,


pendeklarasian yang diperlukan berupa int var_x; int *ptr1; int **ptr2;
Perhatikan pada deklarasi di depan:
var_x adalah variabel bertipe int.
Ptr1 adalah variabel pointer yang menunjuk ke data bertipe int.
Ptr2 adalah variabel pointer yang menunjuk ke pointer int. (itulah sebabnya
deklarasinya berupa int **ptr2; )
Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa ptr1 =
&var_x;
Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah ptr2 =
&ptr1;
Contoh berikut memberikan gambaran cara pengaksesan nilai pada var_x
melalui pointer ptr2 dan ptr1.
Contoh program untuk pointer yang menunjuk pointer
#include <stdio.h>
main()
{ int var_x = 273;
int *ptr1;
int **ptr2; ptr1 = &var_x; ptr2 = &ptr1;
printf(”Nilai var_x = %d\n”, *ptr1);
printf(”Nilai var_x = %d\n”, **ptr2);
}

56
Gambar 12.6

57
Pertemuan 13

STRUKTUR DAN ENUM

13.1 Struktur
Nilai pada dasarnya struktur jenis. Mereka didefinisikan dengan
menggunakan kata kunci struct. Anda dapat mengakses variabel di dalam struktur
dengan menciptakan sebuah objek dari struktur.
Satu-satunya perbedaan adalah bahwa Anda tidak harus menggunakan sintaks
untuk membuat objek dari sebuah kelas,
13.2 UNION
Sama seperti struct, union juga merupakan tipe data yang dibangkitkan, dimana
anggota-anggotanya menggunakan secara bersama-sama ruang penyimpanan
memori yang sama, berbeda dengan struktur yang masing-masing variabel
menempati lokasi memori yang berbeda. Jumlah bytes yang digunakan untuk
menyimpan union adalah sedikitnya cukup untuk menyimpan data terbesar yang
ditangani. Oleh karena itu, tipe union ini umumnya digunakan untuk menangani
satu, dua, atau tiga variabel dengan tipe yang mirip. Sebagai contoh:
union nilaiUjian
{
int uts, uas;
float akhir;
}

13.3 Bitfield
Suatu bit atau beberapa bit dalam sebuah data berukuran satu byte atau
dua byte dapat diakses dengan mudah melalui bitfield. Dengan cara ini, suatu bit
atau beberapa bit dapat diakses tanpa melibatkan operator pemanipulasi bit
(seperti &, |). Selain itu, satu atau dua byte memori dapat dipakai untuk
menyimpan sejumlah informasi.

58
Sebagai contoh, untuk memperoleh informasi masing-masing bit dari
suatu data satu byte, penulisan medan bit berupa struct info_byte
{ unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
};
Jika disajikan dalam bentuk gambar, gambaran suatu struktur yang
memiliki tipe seperti di atas adalah sebagai berikut :
7 6 5 4 3 2 1 0 bit

b b b b b b b b
i i i i i i i i
t t t t t t t t
7 6 5 4 3 2 1 0
Gambar Susunan bit dari memori sebuah data bertipe info_byte
Pada pendefinisian struktur info_byte di atas,
• Nilai 1 setelah tanda titik-dua (:) menyatakan panjang dari bitfield
• unsigned menyatakan bahwa bitfield dinyatakan dalam keadaan tak-
bertanda (untuk contoh berikutnya, nantinya setiap bitfield memiliki
kemungkinan nilai berkisar 1 atau (0).

nama tipe struktur yang terdiri atas sejumlah bitfield


struct info_byte
{ unsigned bit0:1;

59
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
}; panjang/jumlah bit
nama variabel bitfield
sebuah variabel bitfield haruslah dideklarasikan berupa salah satu di antara
int,unsigned dan signed.
Contoh berikut memberikan gambaran tentang cara memberikan nilai
kepada variabel struktur yang mengandung elemen berupa bitfield, dan cara
mengakses setiap nilai dari bitfield.
Program 13.1 Bitfield utk menampilkan bentuk biner dr karakter masukan :
#include <stdio.h>
main()
{struct info_byte /* definisi tipe bitfield */
{
unsigned bit0:1; /* bit ke-0 */
unsigned bit1:1; /* bit ke-1 */
unsigned bit2:1; /* bit ke-2 */
unsigned bit3:1; /* bit ke-3 */
unsigned bit4:1; /* bit ke-4 */
unsigned bit5:1; /* bit ke-5 */
unsigned bit6:1; /* bit ke-6 */
unsigned bit7:1; /* bit ke-7 */
};
/* deklarasi variabel union dan elemen bitfield */
union
{ unsigned char karakter;
struct info_byte byte;
} ascii;

60
printf(“Masukkan sebuah karakter : ”);
scanf(“%c”, &ascii.karakter);
printf(“\nKode ASCII dari karakter %c adalah %d\n”, ascii.karakter, ascii.karakter);
printf("Bentuk biner dari nilai %d adalah ", ascii.karakter);
printf("%d%d%d%d%d%d%d%d\n",ascii .byte.bit7, ascii.byte.bit6, ascii.byte.bit5,
ascii.byte.bit4, ascii.byte.bit3, ascii.byte.bit2, ascii.byte.bit1, ascii.byte.bit0);
}

Gambar 13.1 hasil eksekusi program 13.1


Pada program di atas, setelah pernyataan : scanf(“%c”, &ascii.karakter);
dan user memasukkan karakter : ‘A’ , berarti nilai ascii.karakter =
‘A’.Maka hal itu memberikan efek elemen byte juga akan bernilai seperti
karakter, sebab byte dan karakter berbagi data pada memori yang sama.
Namun, walaupun adanya sifat demikian, pernyataan : ascii.byte = 'A';,
akan dianggap salah (saat kompilasi), sebab suatu variabel struktur yang
mengandung elemen bitfield memang tidak diijinkan untuk diberi nilai secara
langsung. Pengaksesan nilai dapat dilakukan melalui variabel bitfield, misalnya
: printf("%d", ascii.byte.bit7);
untuk mengambil nilai dari bitfield bit 7. Contoh lain ascii.byte.bit7 = 0;
untuk mengubah bit7 agar bernilai 0.
Kalau di depan sudah dibicarakan bitfield dengan panjang 1 bit,
contoh berikut akan memberikan gambaran tentang bitfield dengan panjang 2
bit.
struct data_gambar
{
unsigned piksel1:2;
unsigned piksel2:2;
unsigned piksel3:2;
unsigned piksel4:2;

61
} koord;
Pada contoh di atas, variabel koord yang bertipe data_gambar akan
menempati memori 1 byte (8 bit) dengan 4 informasi terkandung di
dalamnya (masing-masing 2 bit), atau memegang nilai bulat antara 0 sampai

dengan 3 (22 – 1).


Untuk memberikan nilai kepada piksel1 misalnya, bisa digunakan
pernyataan sebagai berikut : koord.piksel1 = 3;
yang mengisikan 3 ke dalam bitfield tersebut.
Bitfield biasanya dipakai untuk menghemat memori. Misalnya ada dua
informasi dengan keterangan sebagai berikut :
informasi pertama (info_x) memiliki kemungkinan nilai bilangan bulat
antara 0 sampai dengan 3, dan informasi kedua (info_y) memiliki kemungkinan
nilai bilangan bulat 0 atau 1 saja. Seandainya kedua informasi itu disimpan
dalam memori (secara terpisah) sebagai tipe char, maka akan diperlukan
total memori sebesar 2 byte. Namun jika disajikan dalam bentuk bitfield,
memori yang dibutuhkan cukup 1 byte. Dalam hal ini info_x akan
dinyatakan dalam 2 bit dan info_y dinyatakan dalam 1 bit. Penuangan
deklarasinya adalah sebagai berikut :
struct info
{
unsigned info_x:2;
unsigned info_y:1;
} status;
atau
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned :5;
} status;

62
Pada pendeklarasian terakhir :
Unsigned :5;
fungsinya hanya untuk memperjelas bahwa total bit dari
bitfield adalah 8 bit (1 byte). Perhatikan, bahwa karena 5 bit terakhir tidak
diperlukan, maka nama bitfield boleh tidak disertakan. Kalaupun mau diberi
nama (misalnya : kosong), maka bentuk deklarasinya adalah :
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5;
} status;
program 13.2:
#include <stdio.h>
main()
{
/* definisi tipe bitfield */
struct info
{unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5; /* bisa dihilangkan */
} status; status.info_x = 3;
status.info_y = 1;
printf("info_x = %d\n", status.info_x);
printf("info_y = %d\n", status.info_y);
}

Gambar 13.2

63
13.4 ENUM
ENUM adalah sebuah mekanisme pemetaan nomor telepon Telkom yang
kita kenal, seperti, +628113334567 atau +62555334567, agar di kenali di dunia
VoIP yang menggunakan nomor telepon, seperti, 20333@voiprakyat.or.id atau
5007987@fwd.pulver.com. Jadi sebetulnya isi sebuah ENUM hanya tabel saja.
Tentunya konsep ENUM tidak terbatas pada pemetaan saja, dengan menggunakan
ENUM sebuah nomor telepon +6255534567 dapat mempunyai beberapa pesawat
penerima dengan sistem prioritas, misalnya,
+6255534567 prioritas 1 245678@voiprakyat.or.id
+6255534567 prioritas 2 6543686@fwd.pulver.com
+6255534567 prioritas 3 +62215678976 (nomor kantor)
+6255534567 prioritas 4 +62856789654 (nomor handphone)
+6255534567 prioritas 5 mail:oknum@salemba.co.id
Dalam bahasa yang lebih manusiawi, jika seseorang berusaha menelepon
ke +6255534567 akan diusahakan untuk menghubungi ke VoIP Rakyat
245678@voiprakyat.or.id, jika gagal maka akan berusaha menghubungi nomor
VoIP di Pulver 6543686@fwd.pulver.com, jika gagal maka akan berusaha
menghubungi kantor di +62215678976, jika gagal lagi maka akan berusaha
menghubungi handphone di +62856789654. Terakhir jika semua cara gagal, apa
boleh buat masuk ke voice mail untuk oknum@salemba.co.id.
Cara penulisan ENUM di Internet, misalnya menggunakan top level
domain e164.id, adalah sebagai berikut
+6255512345678 8.7.6.5.4.3.2.1.5.5.5.2.6.e164.id
+6281812345678 8.7.6.5.4.3.2.1.8.1.8.2.6.e164.id
perhatikan nomor ENUM mempunyai urutan terbalik dari nomor telepon
yang kita kenal biasa.
Contoh ENUM
Salah satu contoh ENUM yang paling baik adalah e164.org, kita dapat
mendaftarkan diri secara automatis dengan mekanisme authentikasi yang baik
dengan cara menelepon nomor telepon yang akan di mapping ke account VoIP.

64
Tentunya e164.org bukan satu-satunya ENUM server di dunia. Rekan-rekan VoIP
Rakyat-pun mengembangkan ENUM sendiri yang dapat di akses di
http://www.enum.voiprakyat.or.id.

Tampilan maupun menu ENUM VoIP Rakyat akan secara berangsur-angsur


berubah dengan akan di adakannya ENUM Indonesia yang menggunakan domain
e164.id. Jika e164.id sudah berjalan dengan baik, maka akan digunakan delegasi
dari ARPA menggunakan domain 2.6.e164.arpa untuk kode negara +62
(Indonesia).

65
Pertemuan 14

TYPE
14.1 Tipe Data
Integer ( Bilangan Bulat )
Integer merupakan tipe data numerik yang digunakan apabila tidak
berurusan dengan pecahan atau bilangan desimal. Tipe data numerik yang
termasuk integer adalah sebagai berikut :

14.2 Tipe Deskripsi


Byte Memiliki nilai integer dari -128 sampai +127 dan menempati 1 byte (
8 bits ) di memori. Short Memiliki nilai integer dari -32768 sampai 32767 dan
menempati 2 bytes ( 16 bits ) di memori Int Memiliki nilai integer dari -
2147483648 sampai 2147483647 dan menempati 4 bytes ( 32 bits ) di memori
Long Memiliki nilai dari -9223372036854775808 sampai 9223372036854775807
dan menempati 8 bytes ( 64 bits ) di memori Bilangan integer biasanya
menggunakan int, dan bukan byte, short maupun long. Bilangan integer juga
mengenal nilai positif dan negatif ( signed number ). Tipe data byte dan short
hanya digunakan pada aplikasi khusus yang memperhatikan penggunaan memori.
Sedangkan long jarang digunakan karena jarang memerlukan bilangan sebesar
kapasitas long.

14.3 Floating Point ( Bilangan Pecahan )


Floating Point digunakan untuk menangani bilangan desimal atau
perhitungan yang lebih detail dibanding integer. Ada dua macam floating point,
yaitu :
1. Tipe deskripsi
2. Tipe data referensi

66
14.3.1 Tipe Deskripsi
Float memiliki nilai -3.4x108 sampai +3.4x108 dan menempati 4 byte di
memori Double memiliki nilai -1.7x10308 sampai +1.7x10308 Semua bilangan
pecahan atau desimal dalam Java tanpa diakhiri huruf f akan dianggap sebagai
double. Sedangkan bilangan yang ingin dikategorikan sebagai float harus diakhiri
dengan huruf F. Misalnya : 4.22 F atau 2.314f. Sedangkan untuk bilangan double,
bisa menambah dengan huruf D, karena secara default bilangan dengan koma atau
pecahan atau desimal akan dianggap sebagai double.
14.3.1.1 Char
Char adalah karakter tunggal yang didefinisikan dengan diawali dan
diakhiri dengan tanda ‘ ( petik tunggal ). Char berbeda dengan String, karena
String bukan merupakan tipe data primitif, tetapi sudah merupakan sebuah objek.
Tipe char mengikuti aturan unicode, sehingga dapat menggunakan kode /u
kemudian diikuti bilangan dari 0 sampai 65535, tetapi yang biasa digunakan
adalah bilangan heksadesimal dari 0000 sampai FFFF. Misalnya : ‘\u123’ Selain
karakter biasa, juga terdapat karakter khusus yang didefinisikan dengan cara
mengawalinya menggunakan tanda .

14.3.1.2 Tipe Data Referensi


Kelebihan pemrograman berorientasi objek adalah dapat mendefinisikan
tipe data baru yang merupakan objek dari class tertentu. Tipe data ini digunakan
untuk mereferensikan objek atau class tertentu, seperti String.

67
BAB IV

PENUTUP

A. Kesimpulan

Dari pembahasan di atas dapat kita ketahui sejarah lahirya


komputer yang semula berukuran panjang setengah bola kaki dan
menghabiskan daya yang sangat besar hingga ditemukanya suatu alat yang
diberinama transistor yang mampu merubah perkembangan komputer hingga
menjadi seperti saat ini.

Untuk membuat suatu program yang bisa dimengerti kita dapat


mengambarkan program tersebut dengan suatu flowchart yang mencakup
seluruh program tersebut. Dan dalam suatu program kita bisa memberikan
komentar untuk memperjelas suatu program.
Dari pembahasan diatas kita dapat mengetahui bagian-bagian yang
terdapat dalam suatu program C/C++ serta pengertian tentang definisi sebuah
program seperi fungsi, aray, string, pointer, struktur, enum, tipe, pemberian
komentar, include dan lain sebagainya, serta cara untuk memasukkan suatu
untuk dilakukan suatu proses perhitungan dan menampilkanya pada layar
komputer.

68
DAFTAR PUSTAKA

Deitel, Harvey M dan Paul J Deitel. 2005. C++ How to Program, Fifth
Edition. New Jersey: Prentice Hall.
Deshpande, P. S dan O. G. Kakde. 2003. C & Data Structures. Massachusetts
: Dreamtech Press.
Solichin, Achmad. 2003. Pemograman Bahasa C dengan Turbo C.
IlmuKomputer.Com.
Materi Struktur Data TI UKDW oleh Antonius Rachmat C. S.Kom, M.Sc.
Materi Praktikum Struktur Data 2007 oleh TIM Asisten Praktikum Struktur
Data 2007.
Pamungkas, Dudi. 2009. SEJARAH PERKEMBANGAN KOMPUTER.
Google. Surabaya
Weblog, Wahyunisetiana.2009.FUNGSI.Wordpress.Yogyakarta

69
Pertemuan 2

ALGORITMA DAN DIAGRAM ALIR

Algoritma adalah urutan langkah-langkah logis penyeselaian masalah yang


disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam
algoritma. Langkah-langkah dalam algoritma harus dapat ditentukan bernilai
benar atau salah.
2.1 Algoritma
Algoritma adalah jantung ilmu komputer. Banyak cabang ilmu komputer
yang diacu dalam terminologi algoritma. Namun algoritma juga digunakan dalam
kehidupan sehari-hari, contohnya resep makanan. Di dalam resep makanan
terdapat langkah-langkah yang merupakan algoritma. Selain itu masih banyak
contoh algoritma yang lain.
Untuk melaksanakan suatu algoritma diperlukan suatu bahasa
pemrograman, contoh bahasa pemrograman adalah : Pascal, C++, Basic, dll.
Notasi algoritma dapat diterjemahkan kedalam bahasa pemrograman apapun,
dengan kata lain notasi algoritma bersifat independen.

2.2 Diagram Alir (Flowchart)

Gambar 2.1

9
Gambar 2.2 Gambar 2.3

Suatu flowchart adalah suatu representasi secara diagram yang


mengilustrasikan urutan dari operasi yang dilakukan untuk mendapatkan suatu
hasil. Dengan kata lain, flowchart membantu kita untuk mengerti dan melihat
bentuk algoritma dengan menampilkan algoritma dalam simbol-simbol gambar.
Dalam menggambar flowchart, digunakan simbol tertentu seperti gambar 2.1.
Contoh berikut bisa digunakan untuk lebih mengerti perbedaan kegunaan simbol-
simbol tersebut. Misal kita ingin mencari jumlah dari 2 buah bilangan, maka
flowchart-nya adalah seperti gambar 2.2. Contoh lain, misalkan kita ingin
mengetahui apakah sebuah bilangan ganjil atau genap. Untuk itu kita harus
membuat flowchart seperti ini gambar 2.3.

Pseudo code
Pseudo code adalah urutan baris algoritma seperti kode pemrograman dan
tidak memiliki sintak yang baku. Pseudo code lebih umum digunakan oleh
programmer yang berpengalaman. Akan tetapi, flowchart lebih mudah dimengerti
oleh programmer pemula, pseudo code sangat mudah diimplementasikan ke
dalam kode program dibandingkan dengan flowchart. Kita bisa bebas menulis
pseudo code selama itu mudah dimengerti bagi orang lain. Tetapi disarankan
untuk menggunakan keyword yang umum digunakan seperti : if, then, else, while,
do, repeat, for, dan lainnya. Dan ikuti gaya penulisan pemrograman seperti Pascal,
C++ dan lain-lain. Perhatikan kode dibawah ini :

10
Mulai masukkan sebuah angka masukkan sebuah angka dan tampilkan
ambil angka yang sebelumnya dan tampilkan selesai walaupun pseudo code diatas
masih bisa dimengerti tetapi ada beberapa statemen yang ambigu. Dari baris
kedua, kita tidak tahu kemana angka tersebut disimpan dan kita juga tidak tahu
angka yang mana yang dimaksud untuk “angka yang sebelumnya”. Apakah angka
yang pertama atau yang kedua. Pseudo code diatas dapat dimodifikasi menjadi
seperti berikut :
1. Mulai
2. Masukkan A
3. Masukkan B, Tampilkan B
4. Tampilkan A
5. Selesai
Pseudo code diatas lebih baik dibandingkan sebelumnya. Kita bisa dengan
jelas melihat dimana angka disimpan dan angka yang mana yang ditampilkan.
Sekarang kita akan mengubah flowchart pada gambar 2.2
1. Mulai
2. Masukkan A dan B
3. C = A + B
4. Tampilkan C
5. Selesai

11
Pertemuan 3

PEGENALAN PROGRAM C++

3.1 Tentang C++


C++ diciptakan untuk mendukung pemrograman berorientasi pada objek
(Object Oriented Pragramming/OOP) yang tidak dimiliki C. sementara C
merupakan bahasa pemrograman terbaik dilingkungannya, bahasa ini tidak
memiliki kemampuan OOP. Reputasi C tidak diragukan lagi dalam menghasilkan
program .EXE berukuran kecil, eksekusi yang cepat, antarmuka (interfacing) yang
sederhana dengan bahasa lain dan fleksibilitas pemrograman.
Apa yang membuat C tampak sukar dipelajari mungkin karena tiadanya
pemeriksaan tipe. Sebagai contoh, dapat mencampur bilangan bulat dengan string
untuk menghasilkan karakter. Namun, justru dsitu letak fleksibilitas C, dapat
mengolah data C sebebas mengolah data dalam bahasa assembly.
3.2 Borland C++
Dibandingkan compiler C++ yang lain, Borland C++ memiliki keunggulan
terutama dalam hal kecepatan dan efisiensi kompilasi. Disamping itu, Borland
C++ mendukung beberapa system operasi yaitu DOS, Windows 16bit (Window
3.0) dan windows 32 bit (Windows NT). Meskipun demikian compiler Borland
C++ juga memiliki kelemahan bila dibandingkan compiler C++ yang lain,
misalnya : pemrograman dengan Borland C++ terutama yang menyangkut
tampilan jauh lebih sulit daripada pemrograman dengan Microsoft Visual C++.
3.3 Main
Main ( ) adalah fungsi utama (main) yang harus ada dalam setiap program
C++ kita. Di sini yang digunakan adalah dengan main tanpa nilai kembalian dan
tanpa paramater. Contoh program 3.1
#include <iostream.h>
void main ()
{cout << "hallo subagyo\n";}

12
Gambar 3.1 hsil eksekusi program 3.1
Jika diperhatikan ada perintah \n pada akhir “kalimat” hallo subagyo. Apa
itu? ”\n” adalah perintah dalam banyak bahasa pemrograman sebagai baris baru
(new line) jadi yang akan ditampilkan pada program adalah: Pada baris pertama,
seperti yang kita lihat, ada perintah #include <iostream>. Tanda ‘#’ adalah
preprocessor directive. Preprocessor directive adalah perintah – perintah yang
diberikan kepada compiler untuk melakukan definisi, memasukkan file library,
dll.
3.4Pernyataan
Pernyataan merupakan bagian program yang berupa instruksi kepada
computer untuk melakukan sesuatu. Menampilkan tulisan dilayar, menghitung
operasi aritmatika, membaca inputan dan lain sebagainya. Setiap pernyataan harus
diakhir dengan tanda titik koma “;”.
Baris (#include <iostream.h>) bukan merupakan suatu pernyataan baris
ini digunakan untuk menyisipkan file (iostream.h) ke dalam program. Pada contoh
diatas iostream.h disebut file header. File header tersebut diperlukan agar perintah
cout bias dijalankan. Apabila file heder tersenut dihapus maka akan terjadi error.
Perintah Untuk menampilkan Informasi Ke Layar
Contoh program 3.2 :
#include <iostream.h>
#include <conio.h>
void main()
{cout << " saya sedang belajar c++"; getch();}

Gambar 3.2 hasil eksekusi program 3.2

13
Pengenal cout dapat digunakan untuk mengarahkan data ke standart output
(normalnya adalah layer). Tanda << merupakan operator yang berfungsi untuk
mengarahkan data yang terletak di sebelah kanannya ke objek yang berada di
sebelah kiri.
3.5 Gaya Penulisan Program
Bahasa C memberikan keleluasaan dalam menulis bentuk program.
Program di atas misalnya dapat ditulis kembali tanpa mengubah hasil eksekusi
program menjadi: program 3.3
#include <iostream.h>
#include <conio.h>
void main()
{cout << " saya sedang belajar c++"; getch();}

Gamabar 3.3 hasil eksekusi program 3.3


Bahkan penulisan seperti berikut, dengan menghilangkan sejumlah spasi
tetap diperkenankan: program 3.4
#include <stdio.h>
main ( ) { printf("Selamat datang\n");
printf("di program C++\n"); }

Gambar 3.4 hasil eksekusi program 3.4


Pemrogram tinggal memilih bentuk yang disukai. Sebagai pedoman,
penulisan atau pemilihan bentuk hendaknya memberikan kemudahan bagi yang
ingin membaca program, terutama untuk program yang berukuran besar.
Jika dilihat pada program 3.4 penulisan yang sangat mampat dapat menyebabkan
program sulit dipahami.

14
3.6 Bagian Komentar
Program yang baik pada umumnya diberi komentar yang akan membantu
orang lain maupun pembuat program itu untuk memahami program yang dibuat.
Dalam C atau C++ setiap tulisan yang diapit oleh symbol /* … */ atau setiap baris
yang dimulai dengan symbol // dianggap komentar. C++ tidak mengizinkan
komentar bersarang ( nested comment), namun Borland C++ lebih fleksibel dalam
hal ini.
Contoh C++ menggunakan komentar:program 3.5
#include<iostream.h>
main ()
{cout<<”nama :subagyo”; //untuk menampilkan nama}

Gambar 3.5 penulisan komentar tidak mempengaruhi hasil eksekusi


3.7 Include
#include merupakan salah satu jenis pengarah praprosesor yang digunakan
untuk memberitahu kompiler agar dalam proses linking membaca file yang
dinamakan file judul (header file), yaitu file yang diantaranya berisi deklarasi
fungsi dan definisi konstanta.
Bahasa C menyediakan beberapa file judul yang ditandai dengan ekstensi
.h. Misal pada Program di atas, #include <iostream.h> menyatakan pada kompiler
agar membca file bernama iostream.h saat melakukan kompilasi. Bentuk umum
#include : #include <namafile> atau #include “namafile”
Bentuk pertama (#include <namafile>) mengisyaratkan bahwa pencarian
file dilakukan pada direktori khusus (direktori file include), yang merupakan
default direktori file-file judul yang disediakan oleh bahasa pemrograman.
Bentuk kedua (#include “namafile”) menyatakan bahwa pencerian file
dilakukan pertama kali pada direktori aktif tempat program sumber, dan
seandainya tidak ditemukan pencarian akan dilanjutkan pada direktori lainnya
sesuai dengan perintah pada sistem operasi (yaitu PATH).

15
Pertemuan 4

ELEMEN DASAR C++

4.1 Konstanta
Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses
pemrograman berlangsung. Nilai konstanta selalu tetap. Konstanta harus
didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer,
pecahan, karakter dan string. Contoh konstanta:
50;13;3;14;4;50005;’A’;’BahasaC’.
Selain itu, bahasa C++ juga menyediakan beberapa karakter khusus yang disebut
karakter escape, antara lain:
Konstanta karakter Karakter
‘A’ Karakter berupa huruf A
‘1’ Karakter berupa angka 1
‘*’ Karakter symbol
‘\\’ Karakter \ (harus ditulis dengan awalan \)
\0 Karakter ber- ASCII nol (karakter null)
\a Karakter bel
\b Karakter backspace
\f Karakter formfeed (ganti halaman)
\n Karakter newline (pindah baris)
\r Karakter carriage return(keawal baris) tanpa linefeed
\t Karakter tab horizontal
\v Karakter tab vertical
\\ Karakter \
\’ Karakter '
\” Karakter "

16
Konstanta karakter Karakter
\? Karakter ?
Contoh program 4.1:
#include <iostream.h>
main()
{const float phi = 3.14;
cout << " Nilai phi = " << phi;}

Gambar 4.1 program dengan konstanta


Jika terjadi pengubahan nilai dari konstanta phi, maka akan terjadi error.

4.2 Operator
Operator (lambang-operasi) adalah simbol-simbol, baik berupa satu atau
beberapa karakter, yang menetapkan bagaimana suatu nilai dimanipulasi. itu
adalah:
! ~ - + * / % < > = | ^ ' ++ -- -= += /= %= << >> ==
!= <= >= |= && || ?: &= ^= <<= >>=

4.3 Variabel
Variable adalah suatu pengenal (identifier) yang digunakan untuk
mewakili suatu nilai tertentu di dalam proses program. Nilai dari suatu variabel
bisa diubah-ubah sesuai kebutuhan. Nama dari suatu variable dapat ditentukan
sendiri oleh pemrograman dengan aturan sebagai berikut:
1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus
berupa huruf.
2. Bahasa C++ bersifat case-sensitive artinya huruf besar dan kecil dianggap
berbeda. Jadi antara nim,NIM dan Nim dianggap berbeda.
3. Tidak boleh mengandung spasi

17
4. Tidak boleh mengandung symbol-symbol khusus, kecuali garis bawah
(underscore). Yang termasuk symbol khusus yang tidak diperbolehkan
antara lain: $,?,%,#,!,&,*(,),-,+,= dsb
5. Panjangnya bebas, tetapi hanya 32 karakter pertama yang terpakai.
Contoh pendeklarasian variabel yang benar:
NPM,b,c,nama_siswa,a6547,nilai, dsb.
Contoh penanaman variable yang salah:
%nilai_siswa, 80siswa, rata-rata,ada spasi, penting!, dsb.
Contoh program 4.2:
#include <iostream.h>
void main()
{ int x,y,z;
x = 7;
y = 5;
z = x + y;
cout << " Hasil Penjumlahan = " << z; }

Gambar 4.2 program dengan pendeklarasian variable

18
Pertemuan 5

OPERATOR DAN UNGKAPAN

5.1 Pengantar Operator dan Ungkapan (Ekspresi)


Operator merupakan simbol yang biasa dilibatkan dalam program untuk
melakukan sesuatu operasi atau manipulasi misalnya untuk:
1. Menjumlahkan duabuah nilai
2. Memberikan nilai ke suatu variable
3. Membandingkan kesamaan dua buah nilai
Dalam C ekspresi dapat berupa :
- pengenal
- konstanta
- atau diantara kombinasi elemen diatas dengan operator
Contoh Ungkapan:
a=b+c–2
Pada ungkapan ini, a, b dan c merupakan operand, simbol =, + dan – merupakan
operator. Dalam hal ini variabel a diisi dengan hasil penjumlahan b dan c
dikurangi 1.
Selanjutnya nilai a ini mernyatakan nilai ungkapan.
5.2 Operator aritmatika
Bahasa C++ menyediakan lima operator aritmatika, yaitu:
Lima Operator Aritmatika
Operator Keterangan Contoh
* Perkalian 2*4
/ Pembagian 8/2
% Sisa Pembagian atau Modulus 9%2
+ Penjumlahan 5+6
- Pengurangan 6-5

19
Contoh program 5.1:
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr(); // untuk membersihkan layar
cout<<7 % 7 <<" n "; //sisa 0
cout<<9 % 7 <<" n "; //sisa 2
cout<<13 % 7 <<" n "; // sisa 6
getch();
}

Gambar 5.1 hasil program dengan operator aritmatika


5.3 Operator Bitwise
Operator Bitwise adalah manipulasi data dalam bentuk bit. Borland C++
menyediakan enam buah operator bitwise.
Contoh Program 5.2:
#include <stdio.h>
main()
{
unsigned x;
void displayBits(unsigned);
printf( "Ketik bilangan bulat tak bertanda : "); scanf( "%u", &x);
displayBits(x);
return 0;
}
void displayBits (unsigned value)
{
unsigned c, displayMask = 1 << 15;
printf ( "%7u = ", value );
for ( c = 1 ; c <= 16 ; c++ )
{
putchar ( value & displayMask ? '1' : '0' ) ;

20
if ( c % 8 == 0 )
putchar ( ' ' );
}
putchar ( '\n' );
}

Gambar 5.2 hasil program dengan operator bitwise


5.4 Operator penugasan
Operator penugasan (Assigment operator)dalam bahasa C++ berupa tanda
sama dengan (“=”). Contoh:
Nilai = 80;
A = x * Y;
Artinya : variable”nilai” diisi dengan 80 dan variable”A” diisi dengan hasil
perkalian antara x dan y, contoh:
Contoh program 5.3:
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai;
nilai = 70 ;//variable nilai diisi 70
cout << " variable nilai = " << nilai;
getch();
}

Gambar 5.3 hasil program dengan operator penugasan


5.5 Operator Relasi
Operator relasi digunakan untuk membandingkan antara dua buah nilai
atau variable. Operator relasi dalam bahasa C++:

21
Operator Arti Contoh
< Kurang Dari x< td>
<= Kurang Dari Sama Dengan x<=y (Apakah x kurang dari samadengan y)
> Lebih Besar x>y (Apakah x lebih dari y)
>= Lebih Besar Sama Dengan x>=y (Apakah x lebih dari sama dengan y)
== Sama Dengan x==y (Apakah x samadengan y)
!= Tidak Sama Dengan x!=y (Apakah x tidak samadengan y)
Contoh ungkapan kondisi yang menggunakan operator ralasi:
x==y
hasil ungkapan ini bernilai :
1 jika nilai x sama dengan nilai y
0 jika nilai x tidak sama dangan y

5.6 Operator Logika


Operator logika biasa digunakan untuk menghubungkan dua buah
ungkapan kondisi menjadi sebuah ungkapan kondisi operator oprator ini ada tiga
diantaranya:
? && :Logika AND(DAN)
? || : Logika OR (ATAU)
? !: Logika NOT (TIDAK / BUKAN)
bentuk pemakaian || atau && ungkapan1 dan ungkapan2 ditulis di dalam tanda
kurung.
Sebagai contoh (a = = c) && (b = = d) atau a = = c && b= = d
5.7 Operator Unary
Operator unary merupakan operator yang hanya membutuhkan satu
operand saja. Dalam bahasa c++ terdapat beberapa operator unary, yaitu:
Operator Unary
Operator Arti/Maksud Letak Contoh Equivalent
- Unary minus Sebelum operator A+-B*C A+(-B)*C
++ Peningkatan dengan penambahan Sebelum dan A++ A=A=1

22
Operator Arti/Maksud Letak Contoh Equivalent
nilai 1 sesudah
Pengurangan dengan Sebelum dan
-- A-- A=A-1
pengurangan nilai 1 sesudah
Sizeof Ukuran dari operand dalam byte Sebelum Sizeof(I) -
! Unary NOT Sebelum !A -
~ Bitwise NOT Sebelum ~A -
Menghasilkan alamat memory
& Sebelum &A -
operand
* Menghasilkan nilai dari pointer Sebelum *A -
Contoh program 5.4:
#include <iostream.h>
#include <conio.h>
void main( )
{
int x, nilai;
clrscr( ) ;
x = 6;
nilai = ++x; /* berarti x= x+1; nilai =x; */
cout << " nilai x " << nilai << endl;
//endl untuk pindah baris
nilai = x++; // berarti nilai =x; nilai = x+1;*/
getch ( );
}

Gambar 5.4 hasil program dengan operator unary

23
Pertemuan 6

OPERASI DASAR MASUKAN DAN KELUARAN

6.1 Cout
Dalam bahasa C++ proses menampilkan suatu data biasa menggunakan
beberapa operasi tersedia. Beberapa operasi yang biasanya digunakan adalah:
cout dengan menggunakan obyek ini program dapat menampilkan informasi ke
standard output (berupa layar)
cout << ”saya belajar C++ \n”;
cout << ”saya belajar C++ “ << endl;
Pada contoh diatas terdapat karakter khusus yang berupa newline
penulisan berupa (\n) digunakan untuk pindah baris atau biasa nya menggunakan
(endl) juga digunkan untuk pindah baris
Contoh program 6.1 :
#include <iostream.h>
void main( )
{cout << ” Saya belajar C++ \n ”;}

Gambar 6.1 hasil eksekusi program 6.1


6.2 Cin
Obyek ini bermanfaat untuk membaca data dari standard input (keyboard).
Dengan meletakan variable bernama var :
Contoh Program 6.2 :
#include <iostream.h>
#include <iomanip.h>
void main( )
{int x;
float y;
cout << " Masukkan sebuah nilai bulat : ";

24
cin >> x;
cout << " Masukkan sebuah nilai desimal : ";
cin >> y;
cout << " Bilangan bulat " << x << endl;
cout << " Bilangan desimal " << y << endl;
}

Gambar 6.2 hasil eksekusi program 6.2


6.3 Manipulator
Manipulator umumnya digunakan untuk mengatur tampilan data missal
untuk mengatur nilai dengan lebar tampilan 10 karakter ada beberapa jumlah
manipulator pada C++ diantaranya:
Manipulator endl
Digunnakan untuk menyisipkan karakter newline. Manipulator ini identik dengan
newline
Contoh program 6.3 :
#include <iostream.h>
void main( )
{
int nilai1 = 100 , nilai2 = 90;
cout << " nilai1 = " << nilai1 << endl;
cout << " nilai2 = " << nilai2 << endl;
}

Gambar 6.3 hasil eksekusi program 6.3

Manipulator setw()

25
Manipulator setw() bermanfaat untuk mengatur lebar halaman dari suatu
tampilan data.Sebagai contoh,nilai pada progam di bawah ini dapat ditampilkan
rata kanan dengan cara sebagai berikut:
Contoh program 6.4:
#include <iostream.h>
#include <iomanip.h>
void main( )
{
int nilai1 = 100 , nilai2 = 90;
cout << " nilai1 = " << setw(5) << nilai1 << endl;
cout << " nilai2 = " << setw(5) << nilai2 << endl;
}

Gambar 6.4 hasil eksekusi program 6.4

26
Pertemuan 7

PERNYATAAN DASAR
7.1 If, Else If, dan Else
Dalam pembahasan sebelumnya, secara sekilas kita sudah melihat cara
penerapan if dan else dalam kode – kode yang kita gunakan. Di sini kita kan
mencoba membahasnya lebih lanjut.
7.2 If
Seperti namanya, if berarti jika, yang berarti “jika kondisi ini terbukti
maka (akan dilakukan sesuatu dalam kondisi seperti ini)”. Dan biasanya if
“berpasangan” dengan else. Jadi, dapat dikatakan bahwa secara keseluruhan apa
yang dimengerti oleh komputer adalah: “jika kondisi A terjadi, maka saya akan
melakukan tindakan A, selain itu maka saya akan melakukan tindakan B”.
7.3 Else
Else adalah kondisi selain atau diluar kondisi pertama (if). Salah satu
perumpamaan dari “kasus” ini adalah: “jika dia tidak mati, maka dia hidup”.
Contohnya: program
#include <iostream.h>
void main ( )
{ char benda;
cout << "masukkan jenis benda (M/H): ";
cin >> benda;
if (benda == 'M')
cout << "benda mati\n";
else
cout << "benda hidup \n";
}

Gambar 7.1 hasil program dengan else dan if

27
7.4 Else If
else if sebenarnya adalah kondisi kedua yang diperkirakan akan terjadi
sedangkan else sebenarnya adalah kondsi terakhir yang diperkirakan akan terjadi.
Jika anda perhatikan sebenarnya else adalah untuk semua kondisi selain
kondisi pertama. Artinya, jika anda memasukkan huruf selain “M” juga akan
diangap hidup. Karena yang terbaca oleh komputer adalah “jika variabel benda
“isinya” huruf M, maka benda mati, selain itu dianggap benda hidup”. Jadi, jika
anda memasukkan huruf L atau P sekalipun, benda yang anda masukkan akan
tetap dianggap benda hidup. Penempatan else if adalah selalu di bawah if karena
else if yaitu kondisi selain if. Berikut adalah kode lengkap dari penggunaan if, else
if dan else:
#include <iostream.h>
#include <string.h>
void main ()
{int pilihan;
cout << "selamat datang di restoran kami \n";
cout << "silahan memilih\n";
cout << "1. ayam goreng campur mules\n";
cout << "2. bangkai pesawat adam air dan isinya\n";
cout << "3. sop ayam campur sari\n";
cout << "silahkan masukkan pilihanmu, \n";
cin >> pilihan;
if (pilihan == 1)
cout << "selamat berlama2 di toilet\n";
else if (pilihan == 2)
cout << "wah, selera anda cukup unik ya...?\n";
else if (pilihan == 3)
cout << "wah, memang menu ini lagi naik daun disini\n";
else cout << "wah, sepertinya anda tidak bisa membaca ya?\n"
<< "dari galaksi mana anda?\n";}

28
Gambar 7.2 hasil program dengan else,if dan else if
7.5 Switch
Dengan memakai contoh program di atas, kita bisa membuat hasil yang
sama dengan kode yang lebih singkat.Kali ini saya akan langsung menunjukkan
contoh penggunaan switch.
#include <iostream.h>
void main ()
{ int pilihan;
cout << "selamat datang di restoran kami \n";
cout << "silahan memilih\n";
cout << "1. ayam goreng campur mules\n";
cout << "2. bangkai pesawat adam air dan isinya\n";
cout << "3. sop ayam campur sari\n";
cout << "masukkan pilihan anda: "; cin >> pilihan;
switch (pilihan)
{case 1:
{cout << "anda memilih nomor satu!\n";break;
}case 2:
{cout << "anda memilh nomor dua!\n";break;
}case 3:
{cout << "anda memilih nomor tiga!\n";break;
}default:cout << "maaf pilihan anda tidak terdapat dalam menu kami\n";}}

29
Gambar 7.3 hasil program menggunakan switch
Mengapa memakai break ? Ini karena disebabkan oleh switch akan
mengeksekusi statement di bawahnya jika tidak dikeluarkan oleh break. Jadi, jika
tida dikeluarkan oleh break, yang akan terjadi adalah:

Gambar 7.4 hasil program switch jika tanpa break


Ini akan terjadi jika kita memasukan angka 1,2 dan 3 (tiga) dan seterusnya.
Ini terjadi karena ketika switch selesai mengeskusi case 1, misalnya, tanpa break,
maka switch akan terus mengeksekusi statement yang berada di bawahnya sampai
selesai. Makanya, break berfungsi untuk keluar dari switch begitu statement pada
satu case selesai di eksekusi (tanpa melanjutkan ke statement berikutnya / yang
berada di bawahnya).

30
Pertemuan 9

FUNGSI

Sebuah fungsi berisi sejumlah pernyataan yang dikemas dalam sebuah


nama. Nama ini selanjutnya dapat dipanggil dipanggil beberapa kali dibeberapa
tempat dalam program. Tujuan pembuatan fungsi adalah :
Memudahkan dalam mengembangkan program. Hal ini merupakan kunci
dalam pembuatan program yang terstruktur. Menghemat ukuran program.
Manfaat ini terasakan kalau ada beberapa deretan instruksi yang sama digunakan
pada beberapa tempatdi dalam program.
Umumnya fungsi menerima masukan (disebut argumen atau parameter).
Masukan ini selanjutnya diproses oleh fungsi. Hasil akhir berupa sebuah nilai
yang disebut nilai balik (return value).

9.1 Prototipe Fungsi


Sebuah fungsi tidak dapat dipanggil kecuali sudah dideklarasikan. Untuk
melihat hal ini perhatikan contoh berikut :
Program 9.1
void main ( )
{printf (“Hai \n”);}
Jika program ini dijalankan, C++ akan memberikan kesalahan yang menyatakan
bahwa printf( ) tidak memiliki prototype. Hal seperti ini masih bisa lolos pada
bahasa C. Tetapi tidak demikian halnya pada C++. Kesalahan seperti diatas tidak
akan terjadi seandainya program ditulis menjadi seperti berikut.
Program 9.2 :
#include <stdio.h>
void main() {printf (“ Hai \n “);}

31
Gambar 9.1 hasil eksekusi program 9.2
Mengapa? Karena prototipe fungsi printf( ) ada pada file “stdio.h”. Itulah
sebabnya diperlukan untuk menyertakan baris berbentuk :
#include < nama_file_header >
Deklarasi fungsi dikenal dengan sebutan prototipe fungsi. Dan diakhiri dengan
titik koma (;), sebagaimana pada pendeklarasian variable. Sebagai contoh :
1). long kuadrat (long l);
2). int maks3 (int a, int b, int c );
3). double maks (double x, double y );
4). void garis ( );
Pada contoh pertama, fungsi kuadrat() mempunyai argumen bertipe long
dan nilai balik juga bertipe long. Pada contoh kedua, fungsi maks3() memiliki tiga
buah argumen, masing-masing bertipe int dan nilai balik juga bertipe int. Adapun
contoh ketiga, fungsi maks() mempunyai dua buah argumen, masing-masing
argumen bertipe double. Pada contoh keempat, fungsi garis() tidak memiliki
argumen dan nilai balik tidak ada (void).
Manfaat dari prototipe fungsi adalah untuk menjamin tipe argumen yang
dilewatkan pada pemanggilan fungsi benar-benar sesuai. Tanpa adanya prototipe
fungsi, amatlah mudah bagi pemrogram untuk melakukan kesalahan tanpa sengaja
dalam melewatkan argumen. Misalnya, melewatkan argumen bertipe float pada
fungsi yang semestinya meminta tipe data int. Dengan adanya prototipe fungsi,
kesalahan semacam itu akan terdeteksi oleh kompiler.

9.2 Definisi Fungsi


Setiap fungsi yang dipanggil didalam program harus didefinisikan.
Letaknya dapat dimana saja. Khusus untuk fungsi yang disediakan sistem,
definisinya sebenarnya ada dalam pustaka, yang akan digabungkan dengan
program sewaktu proses linking. Contoh definisi fungsi kuadrat( ):
long kuadrat (long l)
{
return (l * l);

32
}
Pada pendefisian fungsi, setelah : long kuadrat (long l)
Tidak terdapat tanda titik koma. Ini berbeda dengan prototipe fungsi.
Pernyataan return didalam fungsi digunakan untuk memberikan nilai balik
fungsi. Pada contoh diatas, fungsi kuadrat() memberikan nilai balik berupa nilai
kuadrat dari argumen.
contoh fungsi untuk memperoleh nilai terbesar di antara dua bilangan
program 9.3 :
#include<iostream.h>
#include<conio.h>
double maks(double x,double y); //prototie
void main()
{
clrscr(); //hapus layar
cout<<maks(65789,123)<<endl;
cout<<maks(123,65789)<<endl;
}
double maks(double x,double y)
{if (x > y)
return (x);
else
return (y);
}

Gambar 9.2 hasil eksekusi program 9.3

9.3 Lingkup Variabel


Pemahaman terhadap lingkup variable didalam penulisan fungsi sangatlah
penting, agar tidak salah dalam menggunakan suatu variable. Lingkup variable
menentukan keberadaan suatu variable tertentu didalam fungsi. Ada variable yang

33
hanya dikenal disuatu fungsi dan tidak dikenal pada fungsi lain. Namun ada juga
variable yang dapat di akses oleh semua fungsi.
Jenis variable berdasarkan kelas penyimpanannya, yaitu :
1. Varabel Otomatis (lokal)
2. Variable Eksternal(global).

9.3.1. Varabel Otomatis (lokal).


Variabel yang didefinisikan didalam suatu fungsi berlaku sebagai variabel
lokal bagi fungsi. Artinya, variable tesebut hanya dikenal didalam fungsi tempat
variable didefinisikan.
Contoh untuk memperlihatkan efek variabel otomatis (lokal)
Program 9.4:
#include<iostream.h>
#include<conio.h>
void alpha(); //prototipe fungsi
void main()
{int x = 22; //variable lokal pada main()
double y = 2.22; //begitu juga pada variable ini
clrscr();
cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl;
alpha(); //panggil variable alpha
cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl;
}
void alpha()//definisi fungsi alpha()
{int x = 20; //variable lokal pada main()
double y=3.14; //begitu juga pada variable ini
cout<<”Pada main(): x =”<<x<<”y =”<< y <<endl;
}

Gambar 9.3 hasil eksekusi program 9.4

34
9.3.2. Variable Eksternal(global)
Variable eksternal adalah varibel yang didefinisikan diluar fungsi
manapun. Variable ini dikenal juga sebagai variable global, sebab variable ini
dikenal di semua fungsi.
Guna memperjelas bahwa suatu variable didalam suatu fungsi merupakan
variable eksternal, didalam fungsi yang menggunakannya, kita dapat
mendeklarasikan (bukan mendefinisikan, karena tidak ada pengalokasian memori)
dengan menambahkan kata kunci extern didepan tipe data. Kata kunci
menyatakan bahwa variable tersebut didefinisikan di tempat lain.
Contoh program 9.5
#include<iostream.h>
#include<conio.h>
int oblada = 550; //variable eksternal
void tambah(); //prototipe fungsi
void main()
{
clrscr(); //hapus layar
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
tambah();
cout<<oblada<<endl;
}
//definisi fungsi
void tambah()
{
oblada++; //variable eksternal dinaikkan
}

35
Gambar 9.4 hasil eksekusi program 9.5

9.4 Referensi
Pada C++ referensi digunakan untuk memberikan nama alias dari variable.
Bentuk pendeklarasiannya :
Tanda & mengawali nama referensi. Setelah pendeklarasian seperti diatas, ref
menjadi nama alias dari nama_variable. Pengubahan nilai terhadap
nama_variable dapat dilakukan melalui nama_variable itu sendiri ataupun
melalui referensi ref. Referensi sangat berguna untuk melewatkan struktur atau
obyek yang besar kedalam fungsi. Dengan memakai referensi untuk parameter,
hanya alamat yang akan dilewatkan dan bukan struktur atau obyek itu sendiri.
Keuntungannya : Menghemat stack (untuk meletakkan argumen ke stack pada
saat pemanggilan fungsi).
Selain itu akan membuat argumen struktur atau obyek gampang dipakai
didalam fungsi itu sendiri.
contoh untuk memperlihatkan alamat variabel alamat referensi
program 9.6:
#include<iostream.h>
#include<conio.h>
void main()
{
int i = 55;
int &r = i; //referensi
clrscr(); //hapus layar
cout<<”Alamat : i = “<<&i<<” r =”<<&r<<endl;
}

Gambar 9.5 hasil eksekusi program 9.6

36
9.5 Rekursi
Rekursi atau recursion dalam matematika dan ilmu komputer diartikan
sebagai fungsi yang dalam definisinya mengimplementasikan dirinya sendiri.
Untuk lebih mudahnya, bisa dikatakan bahwa rekursi adalah fungsi yang
memanggil dirinya sendiri.
Namun demikian, rekursi tidaklah hanya merupakan istilah eksak semata.
Jika kita mau memperhatikan lagi dengan lebih teliti, ternyata ada banyak contoh
rekursi di sekeliling kita. Rekursi dalam dunia nyata bisa terjadi salah satunya
adalah jika kita meletakkan dua cermin secara berhadapan dan sejajar. Bayangan
yang terjadi pada kedua cermin itulah rekursi.
Dalam dunia matematika dan komputer, rekursi khususnya digunakan
untuk menyelesaikan perhitungan yang rumit dan kompleks. Prinsip rekursi
sebenarnya sederhana, yaitu memecah masalah menjadi masalah-masalah yang
lebih kecil. Dengan memecah masalah menjadi bagian-bagian yang lebih kecil
tersebut, masalah yang sangat kompleks dan rumit sekalipun akan lebih mudah
untuk diselesaikan.
Contoh paling populer implementasi rekursi adalah penyelesaian
perhitungan faktorial dari suatu bilangan bulat (integer number). Dalam
matematika, faktorial didefinisikan sebagai berikut:

dan

Sehingga didapat misalnya nilai faktorial dari bilangan 5 dan 6 adalah sebagai
berikut:

dan

Perhatikan contoh source code yang ditulis dalam bahasa pemrograman C++
berikut. Source code berikut adalah contoh penyelesaian komputasi faktorial
menggunakan teknik rekursi.

37
Program 9.7:
#include <iostream.h>
typedef unsigned int UINT;
long Factorial(UINT aNumber)
{
if (aNumber == 0)
return 1;
return aNumber*Factorial(aNumber-1);
}
int main()
{
std::cout << Factorial(5);
return 0;
}

Gambar 9.6 hasil eksekusi program 9.7

38
Pertemuan 10

ARRAY (VARIABEL BERINDEKS)

Variabel dengan tipe data tunggal (skalar) hanya dapat digunakan untuk
menyimpan sebuah nilai saja, sehingga untuk menyimpan beberapa nilai sekaligus
dalam suatu variabel khusus yang disebut dengan variabel array atau variabel
berindeks. Variabel array dapat digunakan untuk menampung banyak data yang
sejenis (numerik/string).

10.1 Array 1 Dimensi


Tanda [] disebut juga “elemen yang ke...
Misalnya kondisi[0] berarti elemen yang ke nol.
Array yang sudah dipesan, misalnya 10 tempat tidak harus diisi semuanya,
bisa saja hanya diisi 5 elemen saja, baik secara berurutan maupun tidak. Namun
pada kondisi yang tidak sepenuhnya terisi tersebut, tempat pemesanan di memori
tetap sebanyak 10 tempat, jadi tempat yang tidak terisi tetap akan terpesan dan
dibiarkan kosong.
Contoh program 10.1
#include <stdio.h>
#include <conio.h>
void main()
{ int nilai[10], x;
clrscr();
printf("Memasukkan nilai :\n");
for(x=0;x<5;x++)
{
printf("Nilai Angka : "); scanf("%d",&nilai[x]);
}
printf("\n");
printf("Membaca nilai :\n");
for(x=0;x<5;x++)

39
{
printf("Nilai Angka : %d",nilai[x]);
}
getch();
}

Ganbar 10.1 hasil eksekusi program 10.1


Terlihat bahwa alamat array berurutan dengan jarak antar alamat adalah 4 bytes
(integer berukuran 4 bytes)
Contoh program 10.2 (inisialisasi dengan 0):
#include <stdio.h>
#include <conio.h>
int main(){
int bil[7] = {0}; //inisialisasi 0
for(int i=0;i<7;i++){
printf("Elemen ke-%i = %d\n",i,bil[i]);
}
getch();
return 0;
}

Gambar 10.2 hasil eksekusi program 10.2

40
10.2 Array Berdimensi Dua dan Operasi Matrik
Array berdimensi 2 sering digunakan dalam operasi matrik. Array
berdimensi 2 terdiri atas 2 elemen yaitu baris dan kolom. Matrik adalah daftar
bilangan yang disusun dalam bentuk dua dimensi kolom dan baris. Nilai-nilai
dalam matrik disebut dengan elemen matrik. Pada suatu program komputer, suatu
matriks disimpan pada array berdimensi 2. Indeks dari matrik menunjukkan
nomor elemen dari matriknya.
Contoh program 10.3:
#include <stdio.h>
#include <conio.h>
void main()
{ int x[3][3]={{1,2,3},{4,5,6},{7,8,9}},b,k;
clrscr();
for(b=0 ; b<3 ; b++)
for(k=0 ; k<3 ; k++)
printf("x[%d][%d] = %d\n",b,k,x[b][k]);
for(b=0 ; b<3 ; b++)
for(k=0 ; k<3 ; k++)
{
gotoxy(20+(k+1)*2,b+1);
printf("%d",x[b][k]);
}
getch();
}

Gambar 10.3 hasil eksekusi program 10.3

41
Pertemuan 11

STRING

11.1 Pengantar String


String sangat memudahkan tugas pemogram. Dengan menggunakan string,
pemogram dapat menampilkan pesan kesalahan, menampilkan prompt bagi
masukan keyboard ataupun memberikan informasi pada layar dengan mudah.
Seperti halnya tipe data yang lain, string dapat berupa konstanta atau variabel.
Konstanta string sudah biasa anda sertakan pada program. Misalnya pada
pernyataan :
cout << "C++"<<endl;
terdapat konstanta string "C++". Tetapi sejauh ini, variabel string belum
diperkenalkan.
11.2 Konstanta String
Suatu konstanta string ditulis dengan awalan dan akhiran tanda petik
ganda(" "), misalnya: "C++". Konstanta string seperti diatas disimpan dalam
memori secara berurutan. Setiap karakter menempati memory 1 byte. Setelah
karakter yang terakhir terdapat karakter Null (karakter dengan nilai ASCII sama
dengan nol atau disimbolkan dengan "\0", yaitu tanda \ dikuti dengan nol).
Bila suatu string hanya berisi karakter NULL, string disebut sebagai string
kosong.
11.3 Memasukan Data String
Setelah suatu variabel string didefinisikan, Anda bisa mengisikan data ke
variabel tersebut. Pemasukan data dapat ditangani oleh data cin, seperti contoh
program 11.1 :
#include<iostream.h>
#include<conio.h>
void main()

42
{ char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr();
cout<<"Masukan sebuah kata :"<<endl;
cin>> teks;
cout<< "Kata yang tercetak :"<<teks;
}

Gambar 11.1 hasil eksekusi program 11.1


Yang perlu diperhatikan adalah bahwa cin hanya dapat membaca sebuah
kata. Artinya karakter-karakter yang terletak sesudah spasi tidak bisa ditampung
pada teks. Ini disebabkan operator << pada cin hanya bisa membaca masukan
hingga terdapat spasi, tab atau enter.
Untuk menampilkan agar dapat terbaca solusinya adalah menambahkan
fungsi get() pada objek cin (cin.get()) bisa dipakai untuk keperluan ini. Sebagai
contoh seperti program 11.2 :
#include<iostream.h>
#include<conio.h>
void main()
{ char teks[13]; //string dengan panjang maksimal 12 karakter
clrscr(); //hapus layar

cout<<"Masukan sebuah kata :"<<endl;


cin.get(teks, 13);
cout<< "Kata yang tercetak :"<<teks;
}

Gambar 11.2 hasil eksekusi program 11.2


Tampak, bahwa karakter yan terletak sesudah spasi juga ikut disimpan
pada teks. Sekarang kita lihat kalau data yang dimasukan lebih dari 13 karakter

43
maka hanya 12 karakter pertama yang disimpan pada teks, mengingat argumen
kedua dari fungsi get() diisi dengan 13 (satu karakter berisi Null).
Pada contoh program di atas dapat ditulis sebagai berikut :
cin.get(teks, 13)
Bisa juga ditulis sebagai berikut :
cin. Get(teks, sizeof(teks));

11.4 Fungsi untuk string


11.4.1Fungsi getline()
Suatu masalah akan timbul kalau cin.get() digunakan 2 kali seperti contoh
program 11.3i
#include<iostream.h>
#include<conio.h>
void main()
{ char nama[25];
char alamat[35];
clrscr();
cout<<"Masukan Nama :"<<endl;
cin.get(nama, sizeof(nama));
cout<< "Masukan Alamat :"<<endl;
cin.get(alamat,sizeof(alamat));
cout<<"Nama:"<<nama<<endl;
cout<<"Alamat:"<<alamat<<endl;
}

Gambar 11.3 hasil eksekusi program 11.3


Pada contoh di atas cin.get() pertama digunakan untuk membaca nama
yang kedua untuk membaca alamat. Ternyata program tidak memberikan
kesempatan untuk mengisi alamat. Hal ini terjadi karena get() yang pertama tidak
membuang kode newline(\n). Oleh karena get() tidak mengabaikan spasi putih(
spasi, tab , atau newline) maka get() kedua menjadi tidak berfungsi sebagaimana

44
mestinya. Cara untuk menyelesaikan masalah di atas dengan menggunakan fungsi
getline(), karena fungsi ini dapat membuang sisa data yang tidak dibaca, termasuk
newline itu sendiri. Pada contoh berikut, get() diganti dengan getline().
Contoh program 11.4:
#include<iostream.h>
#include<conio.h>
void main()
{ char nama[25];
char alamat[35];
clrscr(); //hapus layar
cout<<"Masukan Nama :"<<endl;
cin.getline(nama, sizeof(nama));
cout<< "Masukan Alamat :"<<endl;
cin.getline(alamat,sizeof(alamat));
cout<<"Nama:"<<nama<<endl;
cout<<"Alamat:"<<alamat<<endl;
}

Gambar 11.4 hasil eksekusi program 11.4


Tampak bahwa dengan menggunakan getline(), data alamat dapat diisi.

14.1.2Fungsi strcpy
Bentuk dari dari strcpy() :
strcpy(string_target,string_awal)
Prototipe fungsi di atas ada pada file header string.h
Contoh program 11.5 menggunakan strcpy():
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{

45
char teks[]="C++ Oke";
char data [25];
clrscr(); //hapus layar
strcpy(data,teks); // mengcopy isi teks ke data
cout<<"Isi data :"<<data<<endl; }

Gambar 11.5 hasil eksekusi program 11.5

11.1.3 Fungsi toupper dan tolower


Fungsi toupper() berguna untuk memperoleh huruf kapital dari suatu huruf
kecil. Nilai balik dari fungsi ini akan berupa seperti argumennya kalau argumen
tidak berisi huruf kecil.
Adapun fungsi tolower() adalah kebalikan dari toupper(). Fungsi ini memberikan
nilai balik :
v Berupa huruf kecil kalau argumen berisi huruf kapital
v Berupa nilai seperti argumen kalau argumen tidak berupa huruf kecil
Kedua fungsi di atas memberikan nilai balik bertipe int dan memiliki protipe pada
file ctype.h
Contoh program 11.6 :
#include<iostream.h>
#include<conio.h>
#include<ctype.h>
void main()
{ char st[]="saya suka C++";
clrscr(); //hapus layar
for(int i=0; st[i];i++)
st[i]= toupper(st[i]);
cout<<st<<endl; }

Gambar 11.6 hasil eksekusi program 11.6

46
Pada contoh di atas,
st[i]= toupper(st[i]);
menyebabkan setiap huruf kecil pada variabel st akan diganti dengan huruf
kapital.

11.1.4 Fungsi strlen()


Panjang suatu string dapat diketahui dengan mudah menggunakan fungsi
strlen(). Misalnya saja, didefinisikan :
char bunga[15]= "mawar";
int panjang;
Maka pernyataan yang menggunakan strlen :
panjang = strlen(bunga);
akan memberikan panjang string yang tersimpan pada variabel bunga ke panjang.
Contoh program 11.7:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{ char bunga[15]="mawar";
char kosong[23]="";
clrscr(); //hapus layar
cout<<strlen(bunga)<<endl;
cout<<strlen(kosong)<<endl;
}

Gambar 11.7 hasil eksekusi program 11.7

11.1.5 Fungsi strlwr() dan strupr


Jika isi semua huruf kapital pada suatu string dinginkan untuk diubah
menjadi huruf kapital, hal ini dapat dilakukan melalui fungsi strlwr(). Misalnya,
didefinisikan :

47
char st[]="AbCdEfGeHjKl";
Maka st akan berisi : "abcdefgehjki";
Sedangkan fungsi strupr() kebalikan dari fungsi strlwr(). Kedua fungsi di atas
sama seperti tolower dan toupper.
Contoh program 11.8 untuk memperlihatkan efek strlwr() dan strupr() :
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char st[]="AbCdEfGhIjKl";
clrscr(); //hapus layar
cout<<"Isi St mula-mula:"<<st<<endl;
strlwr(st);
cout<<"Isi setelah dikonversi strlwr: "<<endl;
cout<<st<<endl;
strupr(st);
cout<<"Isi setelah dikonversi strupr: "<<endl;
cout<<st<<endl;
}

Gambar 11.8 hasil eksekusi program 11.8

48
Pertemuan 12

POINTER

12.1 Pengertian Pointer


Pada pertemuan kali ini, kita akan membahas powerful feature dari bahasa
pemograman C/C++, yaitu pointer. Pointer (variabel penunjuk) adalah suatu
variabel yang berisi alamat memori dari suatu variabel lain. Pointer merupakan
variabel level rendah yang dapat digunakan untuk menunjuk nilai integer,
character, float, double, atau single, dan bahkan tipe-tipe data lain yang didukung
oleh bahasa C.
Variabel biasa, sifatnya statis dan sudah pasti, sedangkan pada pointer
sifatnya dinamis dan dapat lebih fleksibel. Variabel pointer yang tidak menunjuk
pada nilai apapun berarti memiliki nilai NULL, dan disebut sebagai dangling
pointer karena nilainya tidak diinisialisasi dan tidak dapat diprediksi.

12.2 Alamat pointer


Operator atau alamat. Pada saat pendeklarasian variable, pengguna tidak
diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan
dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time.
Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan
dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address
of". Contoh :
ted = &andy;
Penulisan tersebut berarti akan memberikan variable ted alamat dari
variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka
yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable.
Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :
andy = 25;
fred = andy;

1
ted = &andy;
Maka hasilnya

Gambar 12.1

12.3 Variabel Pointer

Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke


obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari
suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai
contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px.
Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi
1000.
Sebagaimana diilustrasikan pada gambar di bawah ini

2
px
zzzz 1000

Address
?
1000
x

Gambar 12.2 Variabel pointer px menunjuk ke variabel x


Seperti halnya variabel yang lain, variabel pointer juga harus
dideklarasikan terlebih dahulu sebelum digunakan.
Bentuk Umum : tipe_data *nama_pointer;
Contoh : int *nilai;
char *huruf;
Pendeklarasian variabel pointer menggunakan tanda * sebelum nama variabelnya.

12.5 Nilai yang di tunjuk pointer


untuk menampilkan nilai yang ditunjuk oleh suatu variabel pointer, juga
digunakan operator * (tanda asterisk). Jika diinginkan untuk menampilkan alamat
tempat penyimpanan nilai yang ditunjuk oleh suatu variabel pointer, digunakan
operator & (tanda ampersand).
12.6 void pointer
Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk
pada tipe data apapun, nilai integer value atau float, maupun string atau karakter.
Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena
panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau
assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya.
12.7 Memory pointer
Salah satu konsep yang menyebabkan banyak programer baru tak berujung
frustrasi adalah pointer. Ini didasarkan pada konsep bahwa setiap variabel

49
memiliki lokasi penyimpanan di memori. Sebelum kita berbicara tentang pointer,
kita akan melihat bagaimana sebuah memori komputer bekerja.
Memori terdiri, pada tingkat terendah, sekelompok bit yang dapat baik 1
atau 0. Bit ini agak terlalu kecil untuk individual berguna, dan itu akan sangat
tidak praktis untuk mengaksesnya satu per satu waktu. Sebagai hasilnya, mereka
biasanya diakses dalam potongan. Pada komputer pribadi, mereka biasanya
diakses dalam potongan dari 8 bit. Tidak ada yang terlalu istimewa 8.
Sebuah sistem dapat dengan mudah bekerja dengan potongan dari 9, 12,
16 atau 32 bit. Untuk tutorial ini, kita akan menggunakan 8 bit.
Apapun sistem bekerja dengan disebut sebagai blok addressable terkecil
memori. Karena kita menggunakan 8 bit pada contoh kita, itu berarti setiap
variabel akan menggunakan satu atau lebih blok dari 8 bit. Akibatnya, urutan dari
beberapa blok memori akan terlihat seperti ini:
Kode:
|........||........||........||........|
01 02 03 04
Gambar 12.3
Setiap blok bit diberikan nomor (alamat memori). Sebuah variabel di C +
+ akan menempati satu atau lebih blok memori. Untuk keperluan bekerja dengan
memori, sebuah char didefinisikan untuk menduduki 1 blok (minimum 8 bit).
Variabel lain menempati kelipatan yang banyak blok. Untuk keperluan tutorial ini,
sebuah char akan menempati 1 dari blok memori di atas (seperti 01). Sebuah int
akan menempati 2 blok memori yang berdekatan (seperti 01 dan 02, atau 03 dan
04). Ganda akan menempati 4 blok memori yang berdekatan (01, 02, 03, dan 04).
Mengingat semua itu, perhatikan kode berikut:
Kode:
int main()
{
int int1=5;
double double1=3.14;
int int2=10;
char cha1='A',cha2='2';

50
return 0;
}
Jika anda melihat diagram tentang bagaimana variabel-variabel yang
disimpan dalam memori, ini mungkin terlihat seperti ini (. Adalah 2 bits):
Kode:
|int1....||double1.........||int2....||cha1||cha2|
02&03 04-07 08&09 10 11
Melihat ini, lokasi dari variabel-variabel dapat berupa: INT1: 02, double1:
04, int2: 08: cha1: 09, cha2: 10. Perhatikan bahwa saya tidak mengatakan apa-apa
tentang apa yang masing-masing variabel berisi, di mana mereka berada. Juga
perhatikan bahwa char adalah ukuran 1 (seperti biasa), dan bahwa aku
mengasumsikan bahwa int adalah ukuran 2, dan double adalah ukuran 4. Jumlah
bit dalam ukuran 1 adalah sering 8, tapi benar-benar tergantung pada arsitektur
perangkat keras. Tujuan dari pointer adalah untuk menyimpan alamat-alamat ini
dan memberikan kami akses ke variabel berdasarkan alamat mereka. Anda
membuat petunjuk sebagai berikut:
Kode:
int main()
{
int int1=5;
double double1=3.14;
int int2=10;
char cha1='A',cha2='2';
int* intptr = &int1;
double* dptr = &double1;
char* charptr = &cha1;
return 0;
}
Alamat di depan INT1 mengembalikan alamat INT1, dalam hal ini 02. Jadi
intptr berisi 02, dptr berisi 04, dan charptr berisi 09. The * dalam deklarasi
variabel menunjukkan bahwa variabel pointer ke jenis di depan *. Pada titik ini,
hal itu mungkin tampak konyol untuk menggunakan pointer bukan hanya
menggunakan variabel. Besar, kita dapat menyimpan lokasi memori. Jadi apa?

51
Satu hal yang dapat kita lakukan adalah menggunakan pointer untuk
mendapatkan akses ke variabel apa toko. Kita melakukan ini dengan * operator
(dereferencing). Itu berarti * intptr akan kembali 5, sementara intptr akan kembali
02. Hal lain yang dapat Anda lakukan adalah menggunakan + dan - pada pointer
ke langkah maju atau mundur melalui memori. Jarak 1 akan bergerak melalui
memori tergantung pada jenis memori pointer memandang. Sejak intptr terlihat di
ints (dalam hal ini ukuran 2 (biasanya 16 bit)), jika intptr berisi 02, kemudian
intptr + 1 akan kembali 04 (satu int maju). Sejak dptr terlihat di ganda (dalam hal
ini ukuran 4), jika dptr berisi 04, dptr 1 akan kembali 08 (satu ganda maju).
Pada titik ini, Anda mungkin berpikir hal ini berarti Anda dapat
menggunakan intptr untuk mengakses ganda. Anda tidak bisa. intptr + 1 akan
mengakses double1 paruh pertama. Hasilnya akan tergantung pada arsitektur yang
mendasari. Demikian pula, dptr + 1 akan menafsirkan semua int2, cha1, dan cha2
sebagai ganda. Nilai utama dari pointer adalah menerima dan bekerja dengan
array dalam fungsi. Perhatikan kode berikut:
Kode:
#include <iostream.h>
void loadarray(int* thearray)
{ for (int i=0;i<10;i++) thearray[i]=i;
}
void printarray(int* thearray)
{ for (int i=0;i<10;i++) std:
cout<<"element"<<i<<" "<<*(thearray+i)<<"\n";
}
int main()
{ int myarray[10];
loadarray(myarray);
printarray(myarray);
}

52
Gambar 12.4
Pada pembahasan pertama, mungkin muncul bahwa kami melewati sebuah
integer ke load array. Ini tidak terjadi. myarray adalah sebuah array dari ints,
tetapi istilah myarray sebenarnya adalah sebuah pointer ke int pertama dalam
array. Ketika loadarray menerima bahwa pointer, kemudian dapat menggunakan
pointer int thearray seperti nama array (ya, kami memiliki dua pointer menunjuk
ke elemen pertama dari array). [] operator akan menafsirkan array itu nama
sebagai array dan menemukan elemen yang benar berdasarkan indeks.
Penggunaan array yang lain adalah untuk menciptakan variabel pada saat
run-time. Dalam keadaan normal, anda harus menyatakan apa yang variabel
dalam kode Anda akan bekerja dengan. Kadang-kadang, bagaimanapun, anda
tidak tahu. Ketika Anda sedang membaca sebuah file, Anda tidak tahu seberapa
besar itu, sehingga Anda tidak dapat menjelaskan ukuran di muka. Berhasil
membacanya, Anda akan perlu untuk mengambil memori yang diperlukan.
Kode:
int main()
{
int* intptr = 0;
intptr = new int;
intptr = new int;
*intptr = 5;
delete intptr;
}

53
12.7 Pointer Penunjuk Pointer (pointer to pointer)
Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut
memberikan contoh mengenai pointer menunjuk pointer.
Pointer Pointer Variabel
ptr1 ptr2 var_x
alamat alamat
ptr1 ptr1 nilai

Gambar 12.5 Pointer yang menunjuk pointer

Untuk membentuk rantai pointer seperti pada gambar di atas,


pendeklarasian yang diperlukan berupa int var_x; int *ptr1; int **ptr2;
Perhatikan pada deklarasi di depan:
var_x adalah variabel bertipe int.
Ptr1 adalah variabel pointer yang menunjuk ke data bertipe int.
Ptr2 adalah variabel pointer yang menunjuk ke pointer int. (itulah sebabnya
deklarasinya berupa int **ptr2; )
Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa ptr1 =
&var_x;
Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah ptr2 =
&ptr1;
Contoh berikut memberikan gambaran cara pengaksesan nilai pada var_x
melalui pointer ptr2 dan ptr1.
Contoh program untuk pointer yang menunjuk pointer
#include <stdio.h>
main()
{ int var_x = 273;
int *ptr1;
int **ptr2; ptr1 = &var_x; ptr2 = &ptr1;
printf(”Nilai var_x = %d\n”, *ptr1);
printf(”Nilai var_x = %d\n”, **ptr2);
}

54
Gambar 12.6

55
Pertemuan 13

STRUKTUR DAN ENUM

13.1 Struktur
Nilai pada dasarnya struktur jenis. Mereka didefinisikan dengan
menggunakan kata kunci struct. Anda dapat mengakses variabel di dalam struktur
dengan menciptakan sebuah objek dari struktur.
Satu-satunya perbedaan adalah bahwa Anda tidak harus menggunakan sintaks
untuk membuat objek dari sebuah kelas,
13.2 UNION
Sama seperti struct, union juga merupakan tipe data yang dibangkitkan, dimana
anggota-anggotanya menggunakan secara bersama-sama ruang penyimpanan
memori yang sama, berbeda dengan struktur yang masing-masing variabel
menempati lokasi memori yang berbeda. Jumlah bytes yang digunakan untuk
menyimpan union adalah sedikitnya cukup untuk menyimpan data terbesar yang
ditangani. Oleh karena itu, tipe union ini umumnya digunakan untuk menangani
satu, dua, atau tiga variabel dengan tipe yang mirip. Sebagai contoh:
union nilaiUjian
{
int uts, uas;
float akhir;
}

13.3 Bitfield
Suatu bit atau beberapa bit dalam sebuah data berukuran satu byte atau
dua byte dapat diakses dengan mudah melalui bitfield. Dengan cara ini, suatu bit
atau beberapa bit dapat diakses tanpa melibatkan operator pemanipulasi bit
(seperti &, |). Selain itu, satu atau dua byte memori dapat dipakai untuk
menyimpan sejumlah informasi.

56
Sebagai contoh, untuk memperoleh informasi masing-masing bit dari
suatu data satu byte, penulisan medan bit berupa struct info_byte
{ unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
};
Jika disajikan dalam bentuk gambar, gambaran suatu struktur yang
memiliki tipe seperti di atas adalah sebagai berikut :
7 6 5 4 3 2 1 0 bit

b b b b b b b b
i i i i i i i i
t t t t t t t t
7 6 5 4 3 2 1 0
Gambar Susunan bit dari memori sebuah data bertipe info_byte
Pada pendefinisian struktur info_byte di atas,
• Nilai 1 setelah tanda titik-dua (:) menyatakan panjang dari bitfield
• unsigned menyatakan bahwa bitfield dinyatakan dalam keadaan tak-
bertanda (untuk contoh berikutnya, nantinya setiap bitfield memiliki
kemungkinan nilai berkisar 1 atau (0).

nama tipe struktur yang terdiri atas sejumlah bitfield


struct info_byte
{ unsigned bit0:1;

57
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
}; panjang/jumlah bit
nama variabel bitfield
sebuah variabel bitfield haruslah dideklarasikan berupa salah satu di antara
int,unsigned dan signed.
Contoh berikut memberikan gambaran tentang cara memberikan nilai
kepada variabel struktur yang mengandung elemen berupa bitfield, dan cara
mengakses setiap nilai dari bitfield.
Program 13.1 Bitfield utk menampilkan bentuk biner dr karakter masukan :
#include <stdio.h>
main()
{struct info_byte /* definisi tipe bitfield */
{
unsigned bit0:1; /* bit ke-0 */
unsigned bit1:1; /* bit ke-1 */
unsigned bit2:1; /* bit ke-2 */
unsigned bit3:1; /* bit ke-3 */
unsigned bit4:1; /* bit ke-4 */
unsigned bit5:1; /* bit ke-5 */
unsigned bit6:1; /* bit ke-6 */
unsigned bit7:1; /* bit ke-7 */
};
/* deklarasi variabel union dan elemen bitfield */
union
{ unsigned char karakter;
struct info_byte byte;
} ascii;

58
printf(“Masukkan sebuah karakter : ”);
scanf(“%c”, &ascii.karakter);
printf(“\nKode ASCII dari karakter %c adalah %d\n”, ascii.karakter, ascii.karakter);
printf("Bentuk biner dari nilai %d adalah ", ascii.karakter);
printf("%d%d%d%d%d%d%d%d\n",ascii .byte.bit7, ascii.byte.bit6, ascii.byte.bit5,
ascii.byte.bit4, ascii.byte.bit3, ascii.byte.bit2, ascii.byte.bit1, ascii.byte.bit0);
}

Gambar 13.1 hasil eksekusi program 13.1


Pada program di atas, setelah pernyataan : scanf(“%c”, &ascii.karakter);
dan user memasukkan karakter : ‘A’ , berarti nilai ascii.karakter =
‘A’.Maka hal itu memberikan efek elemen byte juga akan bernilai seperti
karakter, sebab byte dan karakter berbagi data pada memori yang sama.
Namun, walaupun adanya sifat demikian, pernyataan : ascii.byte = 'A';,
akan dianggap salah (saat kompilasi), sebab suatu variabel struktur yang
mengandung elemen bitfield memang tidak diijinkan untuk diberi nilai secara
langsung. Pengaksesan nilai dapat dilakukan melalui variabel bitfield, misalnya
: printf("%d", ascii.byte.bit7);
untuk mengambil nilai dari bitfield bit 7. Contoh lain ascii.byte.bit7 = 0;
untuk mengubah bit7 agar bernilai 0.
Kalau di depan sudah dibicarakan bitfield dengan panjang 1 bit,
contoh berikut akan memberikan gambaran tentang bitfield dengan panjang 2
bit.
struct data_gambar
{
unsigned piksel1:2;
unsigned piksel2:2;
unsigned piksel3:2;
unsigned piksel4:2;

59
} koord;
Pada contoh di atas, variabel koord yang bertipe data_gambar akan
menempati memori 1 byte (8 bit) dengan 4 informasi terkandung di
dalamnya (masing-masing 2 bit), atau memegang nilai bulat antara 0 sampai

dengan 3 (22 – 1).


Untuk memberikan nilai kepada piksel1 misalnya, bisa digunakan
pernyataan sebagai berikut : koord.piksel1 = 3;
yang mengisikan 3 ke dalam bitfield tersebut.
Bitfield biasanya dipakai untuk menghemat memori. Misalnya ada dua
informasi dengan keterangan sebagai berikut :
informasi pertama (info_x) memiliki kemungkinan nilai bilangan bulat
antara 0 sampai dengan 3, dan informasi kedua (info_y) memiliki kemungkinan
nilai bilangan bulat 0 atau 1 saja. Seandainya kedua informasi itu disimpan
dalam memori (secara terpisah) sebagai tipe char, maka akan diperlukan
total memori sebesar 2 byte. Namun jika disajikan dalam bentuk bitfield,
memori yang dibutuhkan cukup 1 byte. Dalam hal ini info_x akan
dinyatakan dalam 2 bit dan info_y dinyatakan dalam 1 bit. Penuangan
deklarasinya adalah sebagai berikut :
struct info
{
unsigned info_x:2;
unsigned info_y:1;
} status;
atau
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned :5;
} status;

60
Pada pendeklarasian terakhir :
Unsigned :5;
fungsinya hanya untuk memperjelas bahwa total bit dari
bitfield adalah 8 bit (1 byte). Perhatikan, bahwa karena 5 bit terakhir tidak
diperlukan, maka nama bitfield boleh tidak disertakan. Kalaupun mau diberi
nama (misalnya : kosong), maka bentuk deklarasinya adalah :
struct info
{
unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5;
} status;
program 13.2:
#include <stdio.h>
main()
{
/* definisi tipe bitfield */
struct info
{unsigned info_x:2;
unsigned info_y:1;
unsigned kosong:5; /* bisa dihilangkan */
} status; status.info_x = 3;
status.info_y = 1;
printf("info_x = %d\n", status.info_x);
printf("info_y = %d\n", status.info_y);
}

Gambar 13.2

61
13.4 ENUM
ENUM adalah sebuah mekanisme pemetaan nomor telepon Telkom yang
kita kenal, seperti, +628113334567 atau +62555334567, agar di kenali di dunia
VoIP yang menggunakan nomor telepon, seperti, 20333@voiprakyat.or.id atau
5007987@fwd.pulver.com. Jadi sebetulnya isi sebuah ENUM hanya tabel saja.
Tentunya konsep ENUM tidak terbatas pada pemetaan saja, dengan menggunakan
ENUM sebuah nomor telepon +6255534567 dapat mempunyai beberapa pesawat
penerima dengan sistem prioritas, misalnya,
+6255534567 prioritas 1 245678@voiprakyat.or.id
+6255534567 prioritas 2 6543686@fwd.pulver.com
+6255534567 prioritas 3 +62215678976 (nomor kantor)
+6255534567 prioritas 4 +62856789654 (nomor handphone)
+6255534567 prioritas 5 mail:oknum@salemba.co.id
Dalam bahasa yang lebih manusiawi, jika seseorang berusaha menelepon
ke +6255534567 akan diusahakan untuk menghubungi ke VoIP Rakyat
245678@voiprakyat.or.id, jika gagal maka akan berusaha menghubungi nomor
VoIP di Pulver 6543686@fwd.pulver.com, jika gagal maka akan berusaha
menghubungi kantor di +62215678976, jika gagal lagi maka akan berusaha
menghubungi handphone di +62856789654. Terakhir jika semua cara gagal, apa
boleh buat masuk ke voice mail untuk oknum@salemba.co.id.
Cara penulisan ENUM di Internet, misalnya menggunakan top level
domain e164.id, adalah sebagai berikut
+6255512345678 8.7.6.5.4.3.2.1.5.5.5.2.6.e164.id
+6281812345678 8.7.6.5.4.3.2.1.8.1.8.2.6.e164.id
perhatikan nomor ENUM mempunyai urutan terbalik dari nomor telepon
yang kita kenal biasa.
Contoh ENUM
Salah satu contoh ENUM yang paling baik adalah e164.org, kita dapat
mendaftarkan diri secara automatis dengan mekanisme authentikasi yang baik
dengan cara menelepon nomor telepon yang akan di mapping ke account VoIP.

62
Tentunya e164.org bukan satu-satunya ENUM server di dunia. Rekan-rekan VoIP
Rakyat-pun mengembangkan ENUM sendiri yang dapat di akses di
http://www.enum.voiprakyat.or.id.

Tampilan maupun menu ENUM VoIP Rakyat akan secara berangsur-angsur


berubah dengan akan di adakannya ENUM Indonesia yang menggunakan domain
e164.id. Jika e164.id sudah berjalan dengan baik, maka akan digunakan delegasi
dari ARPA menggunakan domain 2.6.e164.arpa untuk kode negara +62
(Indonesia).

63
Pertemuan 14

TYPE
14.1 Tipe Data
Integer ( Bilangan Bulat )
Integer merupakan tipe data numerik yang digunakan apabila tidak
berurusan dengan pecahan atau bilangan desimal. Tipe data numerik yang
termasuk integer adalah sebagai berikut :

14.2 Tipe Deskripsi


Byte Memiliki nilai integer dari -128 sampai +127 dan menempati 1 byte (
8 bits ) di memori. Short Memiliki nilai integer dari -32768 sampai 32767 dan
menempati 2 bytes ( 16 bits ) di memori Int Memiliki nilai integer dari -
2147483648 sampai 2147483647 dan menempati 4 bytes ( 32 bits ) di memori
Long Memiliki nilai dari -9223372036854775808 sampai 9223372036854775807
dan menempati 8 bytes ( 64 bits ) di memori Bilangan integer biasanya
menggunakan int, dan bukan byte, short maupun long. Bilangan integer juga
mengenal nilai positif dan negatif ( signed number ). Tipe data byte dan short
hanya digunakan pada aplikasi khusus yang memperhatikan penggunaan memori.
Sedangkan long jarang digunakan karena jarang memerlukan bilangan sebesar
kapasitas long.

14.3 Floating Point ( Bilangan Pecahan )


Floating Point digunakan untuk menangani bilangan desimal atau
perhitungan yang lebih detail dibanding integer. Ada dua macam floating point,
yaitu :
1. Tipe deskripsi
2. Tipe data referensi

64
14.3.1 Tipe Deskripsi
Float memiliki nilai -3.4x108 sampai +3.4x108 dan menempati 4 byte di
memori Double memiliki nilai -1.7x10308 sampai +1.7x10308 Semua bilangan
pecahan atau desimal dalam Java tanpa diakhiri huruf f akan dianggap sebagai
double. Sedangkan bilangan yang ingin dikategorikan sebagai float harus diakhiri
dengan huruf F. Misalnya : 4.22 F atau 2.314f. Sedangkan untuk bilangan double,
bisa menambah dengan huruf D, karena secara default bilangan dengan koma atau
pecahan atau desimal akan dianggap sebagai double.
14.3.1.1 Char
Char adalah karakter tunggal yang didefinisikan dengan diawali dan
diakhiri dengan tanda ‘ ( petik tunggal ). Char berbeda dengan String, karena
String bukan merupakan tipe data primitif, tetapi sudah merupakan sebuah objek.
Tipe char mengikuti aturan unicode, sehingga dapat menggunakan kode /u
kemudian diikuti bilangan dari 0 sampai 65535, tetapi yang biasa digunakan
adalah bilangan heksadesimal dari 0000 sampai FFFF. Misalnya : ‘\u123’ Selain
karakter biasa, juga terdapat karakter khusus yang didefinisikan dengan cara
mengawalinya menggunakan tanda .

14.3.1.2 Tipe Data Referensi


Kelebihan pemrograman berorientasi objek adalah dapat mendefinisikan
tipe data baru yang merupakan objek dari class tertentu. Tipe data ini digunakan
untuk mereferensikan objek atau class tertentu, seperti String.

65
BAB III

PENUTUP

A. Kesimpulan

Dari pembahasan di atas dapat kita ketahui sejarah lahirya


komputer yang semula berukuran panjang setengah bola kaki dan
menghabiskan daya yang sangat besar hingga ditemukanya suatu alat yang
diberinama transistor yang mampu merubah perkembangan komputer hingga
menjadi seperti saat ini.

Untuk membuat suatu program yang bisa dimengerti kita dapat


mengambarkan program tersebut dengan suatu flowchart yang mencakup
seluruh program tersebut. Dan dalam suatu program kita bisa memberikan
komentar untuk memperjelas suatu program.
Dari pembahasan diatas kita dapat mengetahui bagian-bagian yang
terdapat dalam suatu program C/C++ serta pengertian tentang definisi sebuah
program seperi fungsi, aray, string, pointer, struktur, enum, tipe, pemberian
komentar, include dan lain sebagainya, serta cara untuk memasukkan suatu
untuk dilakukan suatu proses perhitungan dan menampilkanya pada layar
komputer.

66
DAFTAR PUSTAKA

Deitel, Harvey M dan Paul J Deitel. 2005. C++ How to Program, Fifth
Edition. New Jersey: Prentice Hall.
Deshpande, P. S dan O. G. Kakde. 2003. C & Data Structures. Massachusetts
: Dreamtech Press.
Solichin, Achmad. 2003. Pemograman Bahasa C dengan Turbo C.
IlmuKomputer.Com.
Materi Struktur Data TI UKDW oleh Antonius Rachmat C. S.Kom, M.Sc.
Materi Praktikum Struktur Data 2007 oleh TIM Asisten Praktikum Struktur
Data 2007.
Pamungkas, Dudi. 2009. SEJARAH PERKEMBANGAN KOMPUTER.
Google. Surabaya
Weblog, Wahyunisetiana.2009.FUNGSI.Wordpress.Yogyakarta

67

You might also like