Anda di halaman 1dari 143

BAB 1.

Perangkat Keras Komputer


1.1. Pengertian
Komputer merupakan sebuah mesin yang bekerja untuk memproses,
menyimpan, serta mendapatkan data. Data-data tersebut berupa angka,
karakter, titik warna, gelombang bunyi atau suatu kondisi sebuah
sistem, seperti pendingin atau CD player. Semua data disimpan dalam
bentuk angka-angka. Angka tersebut dalam bentuk bilangan biner yang
diwakili oleh angka 1 dan 0 yang sering disebut bit. Supaya mudah
dalam mengingatnya, maka computer mengelompokan data biner
tersebut menjadi nible, byte dan word. Dengan mengelompokan tersebut,
selain mudah diingat, juga akan memudahkan pengguna dalam
menuliskan sebuah program berupa kode yang dimengerti oleh mesin,
merancang sebuah struktur data dan algoritma yang komplek.
Komputer memanipulasi data dengan melakukan operasi, baik
penjumlahan, pengurangan, perkalian maupun pembagian. Hasil
manipulasi angka tersebut ditunjukan dalam bentuk gambar pada
monitor serta deretan angka-angka pada memori video, dimana
masingmasing angka atau sejumlah angka akan mewakili suatu pixel
warna.Untuk memainkan sebuah MP3, komputer akan membaca
deretan angka-angka dari disk dan memindahkannya kedalam memori.
Selanjutnya komputer menggerakkan angka-angka tersebut untuk
dikonversi menjadi data audio yang dimampatkan. Selanjutnya data
audio yang dimampatkan tersebut akan dikirim ke chip audio.
Semua hal yang dikerjakan oleh komputer, mulai dari web browsing
sampai mencetak, melibatkan perpindahan dan pemprosesan angka.
Secara elektronis computer tak lain hanya suatu sistem atau benda yang
hanya dirancang untuk menyimpan, dan memindahkan, menggerakkan,
serta merubah angka-angka.

0
1.2. Komponen computer

Gambar 1.1 Bagian-bagian komputer


Komputer terdiri dari beberapa komponen, yang secara garis besar
dibagi menjadi dua yaitu: berupa perangkat keras dan perangkat lunak.
Komponen utama pada perangkat keras, terletak pada pusat komputer
adalah prosesor, prosesor ini berfungsi mengeksekusi program komputer.
Selain prosesor, komputer juga mempunyai memori. Dalam sebuah
komputer biasanya terdapat beberapa memori yang berbeda-beda.
Memori ini digunakan untuk menyimpan program ketika prosesor
sedang bekerja.
Komputer juga mempunyai piranti untuk menyimpanan dan
mempertukarkan data dengan dunia luar atau yang sering disebut I/O.
Piranti I/O akan mempertukarkan data, seperti: masukan teks melalui
keyboard serta mendisplaykannya pada layar monitor. I/O juga
digunakan untuk memindahkan data maupun program ke atau dari
suatu disk drive, modem, printer, mouse dan lain-lain. Pada perangkat
lunak peringkat paling rendah, perangkat dikengendalikan oleh prosesor.

1
Gambar 1.3 Lapisan Lapisan Perangkat
Ketika komputer pertama kali dinyalakan perangkat lunak melakukan
inisialisasi perangkat keras system tersebut untuk mengetahui kondisi
dan mengatur computer pada operasi yang benar. Peangkat lunak ini
bersifat permanen dan disimpan dalam memori komputer. Perangkat
lunak inilah yang dikenal sebagai firmware. Firmware digunakan untuk
meletakan program bootloader.
Bootloader merupakan sebuah program khusus dan dijalankan oleh
prosesor ketika membaca sistem operasi dari disk atau memori
nonvolatile yang kemudian menempatkannya di dalam memori.
Bootloader biasanya dimiliki komputer desktop dan workstation. Lapisan
perangkat lunak di atas firmware, adalah sistem operasi. Perangkat
lunak ini berfungsi mengendalikan operasi komputer, mengorganisir
penggunaan memori dan mengendalikan peralatan seperti keyboard,
mouse, monitor, disk drive, dan sebagainya. Sistem operasi juga
memberikan fasilitas kepada user untuk melakukan antarmuka dengan
piranti lain, menjalankan program aplikasi dan mengakses file memori
luar seperti Compact Disk (CD).
Sistem operasi, secara umum menyediakan satu set tool untuk
program aplikasi, melakukan suatu mekanisme pengaksesan monitor,
disk drive, dan seterusnya.Kenyataan dilapangan sebuah komputer
tidak semua menggunakan sistem operasi. Sering juga computer bersifat

2
sangat sederhana dan langsung menjalankan tugasnya.Pada
permasalahan tertentu, seperti router jaringan, perangkat lunaknya
terintegrasi dan sangat sederhana proses pengembangan. Perangkat
lunak pada lapisan paling tinggi adalah perangkat lunak aplikasi yang
merupakan program yang langsung berhubungan dengan kemampuan
sebuah komputer. Kemampuan sebuah computer sangat tergantung
pada aplikasi perangkat lunak sistem.

1.3. Arsitektur Komputer


Sebuah prosesor atau yang sering disebut dengan central Procesing
Unit (CPU) pada sebuah komputer tidak bisa bekerja sendiri dalam
melakukan kerja sebagai pemroses. CPU memerlukan komponen-
komponen pendukung seperti memori untuk menyimpan data dan
program, serta piranti I/O (Input/Output) yang digunakan untuk
memindahkan data antara computer dengan dunia luar. Selain itu juga
computer memerlukan clock (detak) sebagai penggerak prosesor dalam
memproses data.
Mikroprosesor adalah suatu pengolah yang dibentuk oleh sebuah
chip tunggal atau sering disebut integrated circuit. Mikroprosesor ini
sering ditemukan pada sebuah superkomputer, komputer PC, atau
sekarang ini hampir semua pengolah data modern adalah mikroprosesor.
Mikroprosesor yang paling banyak digunakan saat ini adalah: seri Intel
Pentium, Freescale/IBM PowerPC, MIPS, ARM, and the Sun SPARC, dan
lain-lain. Blok diagram sebuah system komputer dapat ditunjukkan
pada Gambar 1.4. Pada gambar diagram blok sebuah system computer
diatas memori berisi intruksi dan bersama-sama processor
melaksanakan dan menggerakan data. Memori system computer tidak
pernah kosong dan selalu berisi apakah berupa instruksi ataupun data.

3
Gambar 1.4 Blok diagram sebuah system komputer
Instruksi diambil dan dibaca dari memori menuju computer, sedangkan
data dibaca dan ditulis oleh prosesor ke memori, hal ini ditunjukan oleh
gambar 1.5.

Gambar 1.5 Blok diagram baca tulis oleh prosesor ke memori


Bentuk aliran data arsitektur komputer tersebut diatas dikenal dengan
arsitektur Von Neumann, nama tersebut diambil dari penemunya yaitu:
Yohanes Von Neumann. Hampir semua computer modern sekarang ini
mengikuti format arsitektur ini. Pada komputer arsitektur Von Neumann
langkah-langkahnya diatur oleh kendali suatu program. Dengan kata
lain, komputer mengikuti suatu langkah-langkah program yang
memerintahkan operasinya.

4
1.3.1. Central Processing Unit (CPU)
CPU atau yang sering disebut prosesor merupakan bagian terpenting
pada sebuah komputer. Dalam sistem komputer, prosesor menjadi
bagian yang menjalankan komputasi pada komputer tersebut. Prosesor
adalah suatu piranti elektronik yang mampu melakukan manipulasi
data dengan cara yang disesuaikan oleh suatu urutan instruksi.
Instruksi tersebut berfungsi sebagai opcode atau kode mesin. Urutan
instruksi ini dapat diubah dan disesuaikan dengan aplikasi, hal ini
dikarenakan sifat komputer yang programmable. Urutan instruksi
adalah sesuatu yang mendasari sebuah program.
Instruksi pada sebuah computer adalah berupa angka-angka. Angka
yang berbeda, ketika dibaca dan yang dieksekusi oleh suatu prosesor,
akan menyebabkan sesuatu hal yang berbeda pula. Instruksi pada
sebuah mesin menyesuaikan dengan machine code yang sesuai, ini
artinya bahwa setiap prosesor mempunyai instruksi masing-masing
sesuai industri yang memproduksinya. Suatu instruksi yang berbeda
mempunyai arti bahwa mesin yang diprogram juga berbeda.
1.3.2. Memori
Memori digunakan untuk menyimpan perangkat lunak yang berupa
data maupun opcode sebuah prosesor. Memori dapat dikategorikan
menjadi memori yang dapat menyimpan data secara permanen
walaupun listrik yang mengalir pada memori tersebut diputus dan
memori ini sering disebut Nonvolatail memory (tidak mudah berubah
isinya), dan memori yang bersifat sementara atau data yang disimpan
dalam memori tersebut akan hilang jika listrik yang mengalir diputus,
dan jenis memori ini sering disebut dengan Volatail memory.
Kedua jenis memori tersebut mempunyai kelebihan serta
kelemahan masing-masing, sehingga penggunaannyapun disesuaikan
dengan kebutuhan masing-masing. Memori diimplementasikan dalam
bentuk chip yang didalamnya berisi ribuan komponen elektronika.
Memori dapat diilusrasikan dalam blok diagram seperti gambar 1.6
5
Gambar 1.6 Ilustrasi Blok diagram memori sebuah system komputer
Gambar tersebut diatas merupakan memori yang terdiri dari bus alamat
yang dikodekan dengan A0 – A9. Bus alamat ini bersifat satu arah yaitu
sebagai masukan sja. Selain busalamat terdapat juga bus data sebanyak
8 bit yang bersifat dua arah sebagai masukan maupun keluaran. Bus
yang dimiliki memori selain bus alamat dan data adalah bus kendali.
Bus alamat digunakan untuk memilih data yang disimpan pada lokasi
memori, dimana banyaknya lokasi pada tiap blok memori adalah 2n, jika
n = 10 maka jumlah lokasi memori yang mungkin adalah 210 = 1024 bit.
Setiap bit data tersimpan dalam memori dalam bentuk biner 0 atau 1.
Jika banyaknya lokasi dikalikan dengan jumlah banyaknya bit dalam
tiap lokasi, untuk 10 alamat bit maka akan memperoleh kapasistas
memori 1024x8 bit.

1.3.2.1. Random Access Memory (RAM)


RAM adalah memori yang dapat diakses secara Acak. Nama ini
sebenarnya sebenarnya kurang tepat, karena kebanyakan memori
komputer dapat diproses secara akses acak. RAM menjadi memori aktif
didalam sistem komputer, dimana CPU dapat dengan mudah menulis
data pada memori jenis ini. Data pada memori RAM mudah hilang, jika

6
aliran listriknya terputus. Informasi apapun yang disimpan didalam
RAM harus ditahan atau harus ditulis kembali setiap beberapa waktu
tertentu, walaupun ada RAM Nonvolatile khusus yang mengintegrasikan
battery backup pada sistem. RAM dapat dikategorikan menjadi dua yaitu:
RAM statis yang sering dikenal sebagai SRAM dan RAM dinamik yang
sering dikenal sebagai DRAM.
RAM statis menggunakan gerbang logika yang berpasangan untuk
menjaga masing-masing bit data. SRAM mempunyai keuntungan
mempunyai proses yang lebih cepat dan mudah digunakan, memerlukan
rangkaian pendukung eksternal yang sedikit, dan dengan konsumsi
daya yang relatif rendah. Kelemahan SRAM adalah pada kapasitas
memori SRAM sangat kecil dibandingkan DRAM, serta teknologinya jauh
lebih mahal. Dengan kapasitas SRAM yang rendah, memerlukan lebih
banyak chip untuk digunakan pada penerapan yang sama. Pada
rancangan PC modern penggunaan SRAM hanya pada mesin yang
membutuhkan kinerja yang sangat cepat seperti pada Cache Memory
Prosesor.
DRAM menggunakan kapasitor sebagai komponen utamanya untuk
mempertahankan data tiap-tiap bit. Deretan kapasitor akan menjaga
data hanya dalam waktu yang sangat pendek, selanjutnya data tersebut
akan hilang sesuai dengan sifat kapasitor. DRAM memerlukan
penyegaran berlanjut, tiap-tiap penyegaran tersebut sedikitnya
seperseribu detik. Penyegaran ini dilakukan secara terus-menerus.
Penyegaran tersebut memerlukan komponen pendukung tambahan
yaitu komponen eksternal. DRAM mempunyai kelebihan yaitu dapat
mempuyai kapasitas yang tinggi.

1.3.2.2. Read Only Memory (ROM)


Read Only Memory (ROM) adalah memori yang hanya dapat dibaca
saja. ROM bersifat Nonvolatile memory, karena memori ini dapat
mempertahankan muatannya. ROM biasanya lebih lambat dibanding
7
RAM, dan sangat lebih lambat dibanding RAM statis.Fungsi ROM yang
utama didalam suatu sistem adalah menjaga kode atau data yang
diperlukan, seperti untuk inisialisasi pada saat start. Perangkat lunak
tersebut biasanya dikenal sebagai firmware. Firmware berisi perangkat
lunak inisialisasi komputer dan penempatan sarana Input/Output (I/O)
ke dalam suatu status yang dapat dikenal. Standard ROM dibuat oleh
suatu deretan diode yang sangat banyak. Ketika datanya kosong, semua
data ROM dalam kondisi berlogika 1, ini artinya data ROM pada 8 bit
adalah 0FFH. Ketika mengisikan data kedalam ROM sering dikenal
dengan burning ROM.
Pengisian data ini dilakukan dengan mengubah data yang berada
dalam ROM yang semuanya berupa data 1 dengan menciptakan data nol
pada penempatan bit. Suatu piranti yang digunakan untuk
memindahkan data disebut ROM downloader atau sering juga disebut
dengan ROM Programmer. ROM biasanya disebut juga dengan One Time
Programmable (OTP), karena sesuai namanya ROM yang hanya bisa
dibaca saja. Pada Industri komputer ROM biasanya digunakan sebagai
firmware. Mask Programmable ROM juga merupakan ROM yang hanya
sekali diprogram, tetapi tidak sama dengan OTP, karena Mask
Programmable ROM diprogram oleh industri pembuatnya sebelum
dipasarkan. Sedangkan OTP biasanya diprogram oleh pengguna sesuai
dengan keinginan dan setelah diprogram tidak bisa diprogram ulang.

1.3.2.3. Erasable Read Only Memory (EPROM)


OTP ROM mempunyai sifat hanya diprogram sekali, dan hal ini
menyebabkan pemborosan karena jika data telah dimasukan dalam OTP
ROM dan terdapat kesalahan tidak bisa dihapus lagi, dan harus ganti
dengan yang baru serta yang lama harus dibuang. Hal ini jelas
merupakan kelemahan dari ROM tersebut. Dengan demikian perlu
adanya ROM yang baru yang bisa diprogram ulang, jika data yang
dimasukan dalam ROM terdapat kesalahan. ROM yang muncul setelah
8
OTP ROM adalah jenis ROM yang Erasable Read Only Memory yang
sering disebut dengan EPROM. ROM ini sangat cocok untuk
pengembangan sistem. Cara menghapus data yang berada dalam
EPROM adalah dengan memberikan cahaya ultraungu melalui jendela
kecil yang terdapat pada chip dengan waktu tertentu. Setelah berapa
saat data yang berada dalam chip tersebut akan terhapus dan menjadi
data berlogika tinggi semua. Setelah data yang berada pada EPROM
terhapus memungkinkan untuk dapat memprogram kembali.
EPROM banyak digunakan dalam pengembangan sistem karena
kepraktisanya serta lebih hemat dibandingkan dengan OTP ROM.
Biasanya OTP ROM dan EPROM mempunyai kapasitas yang sangat kecil
dibandingkan dengan kapasitas memori yang ada sekarang ini.
Kapasitas ini biasanya hanya beberapa kilobyte saja, tetapi walaupun
begitu memori ini tetap digunakan pada berbagai peralatan tertentu, hal
ini dikarenakan berbagai pertimbangan yang tidak mungkin digantikan
oleh memori jenis lain. Kelemahan jenis memori EPROM ini adalah
bahwa chip harus dipindahkan dari rangkaian ketika akan melakukan
penghapusan data yang ada didalamnya.
Selain itu dalam melakukan hapus, memerlukan waktu beberapa
menit. Dalam melakukan penulisan program ke dalam chip juga harus
memindahkannya ke memori EPROM programer. Hal tersebut jelas
sangat menyulitkan dan memakan waktu, sehingga dengan munculnya
teknologi memori sekarang ini, jenis EPROM mulai ditinggalkan dan
jarang digunakan.

1.3.2.4. Electrically Erasable ROM (EEROM)


EEROM adalah memori yang dapat dihapus/tulis secara elektris,
atau Electrically Erasable Programmable Read Only Memory dan sering
dikenal dengan sebutan sebagai EEPROM. EEPROM dapat dihapus dan
ditulis ulang dengan tidak perlu dilepas dari rangkaiannya, sehingga

9
menjadi sangat praktis dan effisien. Pemrograman dan penghapusan
data pada EEPROM dapat dilakukan dengan cepat dibandingkan dengan
memori ROM sebelumnya. Hal inilah yang membuat alasan mengapa
EEPROM berkembang pesat.biasanya hanya beberapa kilobyte saja.
Memori ini tidak cocok sebagai firmware, biasanya memori ini digunakan
untuk menyimpan informasi atau data sistem, sehingga ketika listrik
terputus, datanya tidak akan hilang.

1.3.2.5. Memori Flash


Flash merupakan teknologi ROM yang terbaru, dan sekarang ini
paling banyak digunakan. Flash Memori merupakan EEROM yang dapat
ditulis dan hapus ulang berkali-kali. Flash memori mempunyai
kapasitas yang sangat besar diatas ROM standard. Flash Chip ini sering
juga dikenal sebagai flash ROM atau Flash RAM. Karena ROM tersebut
tidak seperti standard ROM atau standard RAM sebelumnya, maka hal
tersebut dapat juga disebut dengan flash saja untuk menghindari
kekacauan penyebutan antara RAM dan ROM sebelumnya.
Flash memori secara umum diatur menjadi beberapa sector memori,
dan hal ini akan menguntungkan, karena pada tiap-tiap sektor
memungkinkan dihapus dan ditulis ulang tanpa mempengaruhi isi
sektor lain.Hal yang khusus pada flash memori adalah sebelum ditulisi,
sektor akan dihapus terlebih dahulu, sehingga hal tersebut tidak akan
terjadi overwrite seperti pada RAM. Ada beberapa perbedaanperbedaan
teknologi flash terutama pada penghapusan dan penulisan

1.4. Input/Output Kerja Komputer


Dalam sebuah komputer, prosesor dan memori berhubungan
dengan berbagai piranti luar yang dihubungkannya. Karena berbagai
piranti tersebut merupakan suatu yang ditambahkan dengan prosesor,
maka piranti tersebut sering dikenal sebagai piranti peripheral. Piranti
tersebut melakukan komunikasi dengan prosesor yang diatur melalui
10
protocol tertentu.Selanjutnya, berbagai piranti tersebut memerlukan
pengaturan yang dalam hal ini dilakukan oleh sistem operasi. Sesuai
dengan arah penyalurannya, dalam computer dikenal sebagai piranti
Input (masukan), piranti output (keluaran), dan piranti input output
(masukan keluaran).
Diantara berbagai jenis piranti tersebut terdapat piranti perekaman
informasi berbentuk disk atau disket. Piranti tersebut sering dikenal
dengan pheriperal. Biasanya peripheral dibuat oleh berbagai perusahaan
untuk berbagai kegunaan. Pada piranti tertentu, bagian sistem
pengelolaan piranti itu dibuat juga oleh perusahaan pembuat piranti
bersangkutan. Tentunya pembuatan bagian sistem operasi pengelolaan
piranti itu telah disesuaikan dengan sistem operasi yang pada umumnya
ada di dalam sistem komputer.
Bagian sistem operasi untuk pengelolaan piranti peripheral itu
secara khusus diatur oleh pengendali piranti dan secara umum diatur
oleh piranti lunak pengatur piranti (driver). Arah komunikasi masukan
keluaran bersangkaitan dengan alamat. Keduanya menunjukan dari
alamat mana ke alamat mana, masukkan dan keluaran itu mengarah.
Masuk ke suatu alamat dapat berarti keluar dari alamat yang lain, dan
demikian pula sebaliknya. Dalam hal ini prosesor dijadikan sebagai
alamat acuan untuk masuk atau keluar. Masukan berarti masuk
menuju prosesor atau menuju piranti yang sedang dikelola oleh prosesor.
Keluaran artinya keluar dari prosesor atau dari piranti yang sedang
dikelola oleh prosesor.
Dengan demikian, dapat dinamakan sebagai suatu piranti masukan
manakala piranti itu memasukan informasi ke prosesor atau memori
kerja. Cara serupa, dapat dinamakan sebagai piranti keluaran manakala
piranti itu menerima informasi dari prosesor atau memori kerja. Selain
tahu dimana saja letak peripheral, prosesor juga harus dapat
mengendalikan piranti peripheral itu. Pengendalian itu terdiri atas dua
bagian. Bagian pertama adalah pengaturan perangkat keras yang
11
berupa penggerak piranti (device controller) serta bagian kedua adalah
pengaturan perangkat lunak berupa protocol transfer data (data transfer
protocol). Protocol transfer data dikenal ada lima macam protocol data.
Yaitu protocol transfer data pengendali, protocol transfer data serta
pengendali dengan interupsi, protocol transfer data dengan akses
memori langsung, protocol transfer data dengan penggerak piranti, serta
protocol transfer data bebas piranti.
Kerjasama antara penggerak piranti dengan protocol transfer data
memungkinkan prosesor mengendalikan piranti peripheral. Biasanya,
pengendali piranti telah disiapkan oleh perusahaan pembuat piranti
peripheral serta disesuaikan dengan sistem computer,piranti peripheral
itu dipasang. Adakalanya, bersama-sama dengan piranti penghubung
lainnya, pengendali piranti terpasang pada kartu antar muka (interface
card). Dengan memasang kartu antar muka ke sistem komputer, maka
telah dapat memasang juga pengendali piranti yang siap diperintah oleh
pengendali aplikasi atau oleh pemakai komputer. Biasanya piranti
peripheral terdiri atas bagian mekanik dan bagian elektronika.
Bagian mekanik adalah piranti peripheral itu sendiri, maka bagian
elektronika yang mengatur kerja piranti mekanik itu, atau biasanya
dinamakan penggerak piranti (device controller) atau adapter. Dengan
demikian, pada sejumlah piranti yang memiliki penggerak piranti
tersebut berbentuk rangkaian elektronika. Bahkan dalam banyak hal,
rangkaian elektronika itu disusun dalam suatu papan rangkaian
tercetak (printed circuit).
Dengan adanya rangkaian ini, maka sistem operasi selalu
berurusan dengan penggerak piranti serta tidak berurusan langsung
dengan pirantinya. Salah satu sebab mengapa sistem operasi selalu
berhubungan dengan penggerak piranti dan tidak dengan piranti itu
sendiri, adalah karena pada umumnya, piranti perangkat keras
merupakan piranti yang cukup kasar. Penggunaan piranti memerlukan
kegiatan yang cukup rumit sehingga dengan membebankan kerumitan
12
iti pada penggerak piranti, sistem operasi tidak perlu terjun ke dalam
kerumitan itu.Setiap penggerak piranti memiliki register untuk mencatat
data serta melalui bus, penggerak piranti berhubungan dengan prosesor.
Dengan register tersebut, penggerak piranti memonitor status
piranti, mengendalikan pengendali piranti pada motor, melaksanakan
pemeriksaan data serta mengetahui format data dari piranti.
Selanjutnya,penggerak diperlukan untuk mengubah perintah prosesor
ke dalam pulsa listrik yang sepadan untuk diterapkan kepiranti.
Sebaliknya, penggerak piranti juga mengubah informasi tentang status
piranti ke dalam bentuk yang dapat dipahami oleh prosesor. Dengan
demikian, penggerak piranti menggerakkan piranti secara elektronika.
Pada piranti perekam berbentuk disk atau disket,penggerak piranti
mengatur pemutaran disk atau disket itu melaluimotor listrik serta
mengatur pula gerakan head tulis baca (read writehead) pada disk atau
disket itu.
Pada pencetak, penggerak pirantimelaksanakan gerakan head cetak
sesuai dengan arah yang ditentukan, demikian seterusnya, penggerak
piranti menggerakan pirantiperipheral yang bersangkutan dengan
penggerak piranti itu.Setelah piranti itu digerakan oleh penggerak
piranti, maka kerja pirantiitu selanjutnya perlu diatur melalui suatu
pengendali atau subrutin. Salah satu cara pengaturan adalah dengan
melalui sebuah protocol transfer data pengendali. Protocol ini dikenal
juga sebagai programmed data transfer protocol.
Sesuai dengan namanya, pada protokol ini, transfer data diatur oleh
pengendali. Pada saat data akan ditransfer dari prosesor ke piranti atau
dari piranti ke prosesor, pengendali membuat permohonan, sehingga
semua permohonan interupsi diabaikan. Setelah itu, transfer data
dilaksanakan. Dengan demikian, pada protocol tersebut, tidak dapat
mengenal interupsi melalui permintaan. Sekali transfer data
dilaksanakan, maka pelaksanaan akan berlansung sampai selesai,
kecuali tentunya kalau muncul interupsi dan jenis interupsi yang tak
13
terabaikan. Protokol transfer data pengendali ini sering memanfaatkan
pustaka (library) dan spool (simultameous peripheral operation on line).
Pada pustaka, dapat dilakukan pemanggilan rutin masukan
keluaran tertentu dan bahkan dapat mengatur format masukan
keluaran itu. Pada spool, dapat dilakukan pengaturan piranti yang tak
dapat dipakai bersama yakni piranti seperti pencetak atau panel kunci
ketik. Protokol transfer data pengendali dengan interupsi. Protokol ini
juga dikenal dengan nama programmed interrupt data transfer protocol.
Sesuai dengan namanya, protocol ini masih mengenal interupsi melalui
permintaan. Dengan demikian, setiap terjadi interupsi, maka interupsi
itu dilayani. Pada saat itu, transfer data terputus, untuk kemudian
dilanjutkan lagi setelah interupsi selesai. Selama tiada interupsi, maka
transfer data dapat terusberlangsung, sampai pada saat transfer data itu
selesai.Dengan menerima interupsi, maka proses yang tadinya sudah
terhenti, kini memiliki peluang melanjutkan kembali. Cara melanjutkan
proses yang sudah terhenti itu adalah melalui interupsi.
Protokol transfer data dengan akses memori langsung (direct
memory access) merupakan suatu proses yang cukup rumit. Mula-mula
penggerak piranti membaca data di dalam blok secara berurutan.
Setelah itu, penggerak piranti perlu memeriksa apakah data yang dibaca
itu tidak mengandung kekeliruan. Jika tidak terdapat kekeliruan, maka
prosesor akan membaca semua data dari atau ke memori kerja melalui
penampung (buffer). Karena prosesor harus terlihat dalam pembacaan
data, maka selama pembacaan dan penulisan itu berlangsung, prosesor
tidak dapat mengerjakan pekerjaan lain. Untuk membebaskan prosesor
dari aktifitas ini, maka diciptakan penggerak yang dapat mendukung
protocol transfer data akses memori langsung (direct memory access).
Pada protokol ini, prosesor diinterupsi pada saat transfer data
dimulai. Setelah itu, prosesor tidak lagi ikut mencampuri kegiatan
transfer data itu. Kemudian, pada saat transfer data selesai, barulah
prosesor diinterupsi sekali lagi.Dengan demikian, di antara saat awal
14
dan saat akhir transfer data itu, prosesor dapat melaksanakan
pekerjaan lain. Karena protocol transfer data melalui akses memori ini
membebaskan prosesor untuk melaksanakan pekerjaan lain, maka
protocol ini lebih unggul dari kedua protocol lainnya.
Protokol transfer data dengan penggerak piranti. Penggerak piranti
juga dikenal sebagai devide driver. Penggerak piranti ini berbentuk
piranti lunak yang menghubungkan prosesor dengan alat, tentunya
melalui penggerak alat. Bahkan register pada penggerak alat
dimanfaatkan oleh penggerak alat untuk menyalurkan informasi dari
prosesor kealat dan demikian pula sebaliknya. Dalam keadaan tertentu,
satu alat dapat berhubungan dengan beberapa penggerak piranti sejenis.
Satu piranti disk atau disket, misalnya dapat berhubungan dengan
satu atau lebih penggerak piranti disk atau disket. Pada saat kegiatan,
penggerakan piranti berbentuk proses yang mengendalikan kerja piranti
peripheral. Di antaranya, proses tersebut menerima permintaan piranti
masukan keluaran (ada kalanya berbentuk suatu antrian), memulai
kerja masukan keluaran, menata kekeliruan umum pada penyaluran
informasi, melaksanakan interupsi, serta mengirim berita selesai
kembali ke proses. Ada yang mengatakan bahwa tugas utama proses
pada penggerak piranti mencakup mencegah permintaan dari satu
proses, melaksanakan kerja tertentu pada prose situ, serta
memberitahukan proses yang meminta itu tentang hasil kerja yang
telah terlaksana.Proses yang meminta itu adalah proses umum yang
tidak tergantung kepada pir anti (tidak khas piranti tertentu).
Dengan demikian, penggerak piranti menerima perintah umum serta
melaksAnakan perintah itu pada piranti peripheral. Rincian dari proses
itu sendiri berbeda dari piranti menuju alat, misal, penggerak disk (disk
driver) merupakan bagian satu-satunya pada sistem operasi yang
mengetahui berapa register yang dimiliki oleh penggerak disk serta apa
gunanya register itu. Pelaksana disk itu adalah satu-satunya yang
mengetahui seluk beluk sector, lintas (track), silinder, hulu, gerak
15
tangkai hulu, factor seling (interleave), waktu pengaturan hulu, serta
segala sesuatu yang dapat membuat disk itu bekerja secara benar.
Penggerak piranti bekerja sama secara erat dengan penggerak piranti.
Karena itu, ada orang yang menamakan kedua-duanya sebagai
penggerak piranti saja (device controller) atau sebagai penggerak piranti
(device driver) saja. Di sini, mereka tetap kita pisahkan yakni sebagai
penggerak piranti dan sebagai penggerak piranti, sedangkan secara
bersama-sama, mereka kita namakan sebagai pengendali piranti.

1.5. Kerja Komputer


Komputer yang merupakan mesin penghitung sekarang ini mesin
tersebut banyak dipakai untuk pemroses data. Fungsinya sangat
sederhana yaitu digunakan untuk memproses data, kemudian hasilv
prosesnya diselesaikan secara elektronis didalam Central Processing
Unit (CPU) dan komponen lainnya yang menyusun sebuah komputer
personal. Suatu sinyal yang dikirimkan dari suatu pemancar
(transmitter) ke penerima (receiver) untuk berkomunikasi adalah berupa
data. Data-data yang biasa dijumpai sehari-hari memiliki banyak
bentuk,antara lain: suara, huruf, angka, dan karakter lain (tulisan
tangan atau dicetak), foto, gambar, film dan lain sebagainya.
Suatu sistem yang dapat memproses nilai yang kontinyu
berbanding terhadap waktu dinamakan sistem analog. Pada sistem
analog, nilainya biasa diwakili oleh tegangan, arus dan kecepatan.
Berikut ini adalah gambar grafik nilai tegangan analog terhadap waktu.

Gambar 1.7 Grafik tegangan analog


16
System yang memperose nilai/data diskrit dinamakan digital untuk
menunjukan suatu nilai digunakan symbol yang dinamakan digit. Sinyal
pada gambar diatas dapat didigitalkan dengan menggunakan analog to
digital (ADC). ADC dapat merubah sinyak kontinu ke sinyal diskrit
denhan menyamplingnya tiap detik lihat gambar dibawah ini

Gambar 1.8 Sinyal Diskrit penyamplingan perdetik


komputer adalah sebuah perangkat elektronika data yang diolah
merupakan data yang dipresentasikan oleh sinyal listrik. Sinyal listrik
dapat dianalogikan dengan saklar listrik yaitu tombol on (Hidup) off
Mati). Jika saklar dalam keadaan off computer membaca sebagai angka
0, dan jika hidup computer membaca sebagai angka satu (1).Pertahikan
gambar berikut

Gambar 1.9 Saklar dalam hdup dan mati

17
Computer terdiri dari saklar yang sangat banyak yang menggunakan
transistor yang jumlahnya jutaan sehingga dapat memproses jutaan
angka 0 dan 1 pada saat yang bersamaan, tiap angka 0 dan 1 disebut
bit (binary digit) lihat table berikut

Tabel Bilangan biner

0 1 bit
1 1bit
0110 4bit
10011101 8 bit

System bilangan biner disusun dari angka angka, sama seprti bilangan
decimal. Desimal mengunakan angka 1 s.d 9, sedangkan hanya
menggunakan 0 dan 1.Pengolahan data saat ini menggunakan
pengolahan kata. Saat pengolahan kata kita menggunakan key board.
Ada 101 tobol yang mewakili a,b,c dst.Selain itu juga ditemui karakter
angka 0 sampai dengan 9, dan karakter-karakter lain yang diperlukan,
antara lain: , . - ; ( ) :_ ? ! " # * % & .
Seluruh karakter yang ada pada keyboard harus didigitalkan. Karakter-
karakter tersebut diwakili oleh angka-angka 0 dan 1. Bit yang
digunakan adalah 8 bit biner. 8 bit biner dinamakan Byte. Pada sistem
bilangan biner, banyaknya kombinasi dihitung dengan 2n ≤ m, dimana n
adalah jumlah bit, m adalah kombinasi yang dapat diwakili, sehingga
pada 8 bit biner, dapat mewakili 28=256 kombinasi maksimal. Ketika
mengetik kata “digital” simbol yang digunakan adalah 6 huruf, saat
komputer mengolahnya, 6 huruf tersebut didigitalkan menjadi 6 bytes,
yang kemudian disimpan pada RAM komputer saat mengetik, dan
kemudian disimpan pada harddisk, jika disimpan. Tabel seperti dibawah
menunjukkan perbandingan ukuran unit data

18
Tabel 1.2. Perbandingan Ukuran Unit Data

UNIT DEFINISI BYTE BIT CONTOH APLIKASI


Bit (b) Binary Digit,0 dan 1 1 1 On/Off,buka/tutup
Byte (B) 8 bit 1 8 KodeASCII
Kilobyte 1.024 byte 1000 8000 Ukuran email 2 KB, 10
(KB) halaman dokumen= 10
Megabyte 1.024 kilobyte 1juta 8juta Floppy disks = 1,44
(MB) 1.048.576 byte F MBCDROM = 650 MB
Gigabyte 1.024 megabyte 1 milyar 8 Hard drive = 40 GB
(GB) 1.073.741.824 byte milyar
Terrabyte 1.024 gigabyte 1 triliun 8 Data dikirim pada
(TB) triliun fiber optik selama 1dt

1.6. Sistem Bilangan


Sistem bilangan yang paling umum digunakan adalah system
bilangan desimal, biner, oktal, dan heksadesimal. Sistem bilangan
desimal merupakan sistem bilangan yang paling banyak digunakan oleh
manusia karena berbagai kemudahannya untuk dipergunakan sehari-
hari. Sistem bilangan biner merupakan sistem bilangan yang paling
banyak digunakan dalam sistem digital karena sistem bilangan ini
secara langsung dapat mewakili logika yang ada, sedangkan system
bilangan oktal dan heksadesimal biasanya banyak digunakan dalam
sistem digital untuk memperpendek penyajian suatu bilangan yang
tadinya disajikan dalam system bilangan biner, sehingga lebih mudah
dipahami atau dihafalkan Secara umum bilangan dapat dibagi menjadi
beberapa kategori. Ditinjau dari segi koma decimal (point), bilangan
dapat dibagi menjadi bilangan bulat (integer number/fixedpoint number)
dan bilangan pecahan

19
1.6.1. Bilangan Desimal
Sistem bilangan desimal disusun oleh 10 angka atau lambang. Dengan
menggunakan lambang-lambang tersebut sebagai digit pada sebuah
bilangan, maka akan dapat mengekspresikan suatu kuantitas
Kesepuluh lambang tersebut adalah: D = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
Sistem bilangan desimal disebut juga sistem bilangan basis 10 atau
radiks 10 karena mempunyai 10 digit. Sistem bilangan ini bersifat
alamiah karena pada kenyataannya manusia mempunyai 10 jari. Kata
digit itu sendiri diturunkan dari kata bahasa Latin finger.

Ciri bilangan yang menggunakan sistem bilangan desimal adalah adanya


tambahan subskrip des atau 10 atau tambahan D di akhir suatu
bilangan.
357des = 35710= 357D.
Namun karena bilangan decimal sudah menjadi bilangan yang
digunakan sehari-hari, subskrip tersebut biasanya dihilangkan. Sistem
bilangan desimal merupakan sebuah sistem nilai posisi.
Bilangan 357.
Pada bilangan tersebut, digit 3 berarti 3 ratusan, 5 berarti 5 puluhan,
dan 7 berarti 7 satuan. Sehingga, 3 mempunyai arti paling besar di
antara tiga digit yang ada. Digit ini bertindak sebagai digit paling berarti
(Most Significant Digit, MSD). Sedangkan 7 mempunyai arti paling kecil

20
di antara tiga digit yang ada dan disebut digit paling tidak berarti (Least
Significant Digit, LSD).
Bilangan 35,27
Bilangan ini mempunyai arti 3 puluhan ditambah 5 satuan ditambah 2
per sepuluhan. Koma decimal memisahkan pangkat positif dari 10
dengan pangkat negatifnya
35,2 = 3 X 101 + 5 X 100 + 2 X 10‐1

1.6.2. Bilangan Biner


Sistem sistem digital hanya mengenal dua logika, yaitu 0 dan 1.Logika 0
biasanya mewakili kondisi mati dan logika 1 mewakili kondisi hidup.
Pada sistem bilangan biner, hanya dikenal dua lambang, yaitu 0 dan 1.
Karena itu, sistem bilangan biner paling sering digunakan untuk
merepresentasikan kuantitas dan mewakili keadaan dalam system
digital maupun sistem komputer. Digit bilangan biner disebut binary
digit atau bit. Empat bit dinamakan nibble dan delapan bit dinamakan
byte. Sejumlah bit yang dapat diproses komputer untuk mewakili suatu
karakter (dapat berupa huruf, angka atau lambang khusus) dinamakan
word.
Sebuah komputer dapat memproses data satu word yang terdiri dari
4 sampai 64 bit. Sebagai contoh, sebuah komputer yang menggunakan
mikroprosesor 32 bit dapat menerima, memproses, menyimpan dan
mengirim data atau instruksi dalam format 32 bit. Pada komputer yang
digunakan untuk memproses karakter, maka karakter (yang meliputi
huruf, angka, tanda baca dan karakter kontrol) tersebut harus diformat
dalam bentuk kode alfanumerik. Format kode ASCII (American Standard
Code for Information Interchange) menggunakan format data tujuh bit
untuk mewakili semua karakter yang ada termasuk tanda baca dan
penanda kontrol. Dengan menggunakan format tujuh 7 bit tersebut,
maka ASCII dapat menanpung 27 = 128 data. Sistem bilangan biner
merupakan system bilangan basis dua. Pada system bilangan ini hanya
21
dikenal dua lambang, yaitu: B = { 0, 1 } Ciri suatu bilangan yang
menggunakan sistem bilangan biner adalah adanya tambahan subskrip
bin atau 2 atau tambahan huruf B di akhir suatu bilangan. 1010011bin
= 10100112 = 1010011B. Bit paling kiri dari suatu bilangan biner
bertindak sebagai bit paling berarti (Most Significant Bit, MSB),
sedangkan bit paling kanan bertindak sebagai bit paling tidak berarti
(Least Significant Bit, LSB).

1.6.3. Bilangan Oktal


Sistem bilangan octal merupakan sistem bilangan basis delapan. Pada
sistem bilangan ini terdapat delapan lambang, yaitu: Secara umum
dapat dikatakan, nilai suatu bilangan desimal merupakan penjumlahan
dari perkalian setiap digit dengan nilai posisinya.
O = { 0, 1, 2, 3, 4, 5, 6, 7 }
Ciri suatu bilangan menggunakan sistem bilangan oktal adalah adanya
tambahan subskrip okt atau 8 atau Sistem bilangan heksadesimal
merupakan sistem bilangan basis enambelas. Meskipun operasi pada
sistem digital dan komputer secara fisik dikerjakan secara biner, namun
untuk merepresentasikan data menggunakan format bilangan
heksadesimal karena format ini lebih praktis, mudah dibaca dan
mempunyai kemungkinan timbul kesalahan lebih kecil. Penerapan
format bilangan heksadesimal banyak digunakan pada penyajian lokasi
memori, penyajian isi memori, kode instruksi

1.6.5. Konversi Bilangan


Sistem bilangan dapat dilakukan konversi menjadi bilangan yang
diinginkan. Tujuan konversi ini adalah untuk menjembatani antara
manusia dan mesin dalam hal ini computer supaya dapat
berkomunikasi.Manusia lebih mudah memahami bilangan decimal
karena memang bilangan decimal merupakan bilangan yang digunakan
manusia sehari-hari, sedangkan computer bekerja dengan bilangan
22
biner.Komputer yang bekerja dengan bilangan biner tentunya harus bisa
dan kode yang merepresentasikan alfanumerik dan karakter
nonnumerik. Pada sistem bilangan ini terdapat enam belas lambang,
yaitu:
H = { 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
Ciri suatu bilangan menggunakan sistem bilangan heksadesimal adalah
adanya tambahan subskrip heks atau 16 atau tambahan huruf H di
akhir suatu bilangan.
271heks = 27116 = 271H.
disingkat baik penulisan maupun pembacaannya dalah hal ini
menggunakan bilangan hexadecimal atau oktal. Karena komputer hanya
paham terhadap sat bilangan yaitu
biner maka manusia dituntut untuk bisa memahami bagaimana
konversi antara bilangan-bilangan tersebut.

Konversi bilangan biner ke decimal dilakukan dengan menjumlahkan


hasil perkalian semua bit biner dengan beratnya. Konversi bilangan
desimal bulat ke biner dilakukan dengan membagi bilangan desimal

23
dengan 2 secara berulang-ulang sehingga akan dapat diketahui sisa tiap
operasi pembagian. Sisa yang dihasilkan setiap pembagian merupakan
bit yang didapat. Dengan cara mengurutkan bit-bit tersebut dari bawah
ke atas maka dapat diketahui hasil konversi yang telah dilakukan
Sebuah bilangan desimal real
dapat pula dikonversi ke bilangan
real biner. Konversi dilakukan
dengan cara memisahkan antara
bagian bulat dan bagian
pecahannya. Konversi bagian bulat
dapat dilakukan seperti pada

gambar diatas. Sedangkan konversi bagian pecahan dilakukan dengan


mengalikan pecahan tersebut dengan 2, kemudian bagian pecahan dari
hasil perkalian tersebut dikalikan dengan 2. Langkah tersebut diulang
ulang sehingga mendapatkan hasil akhir 0. Bagian bulat dari setiap
hasil perkalian merupakan bit yang didapat.

Konversi bilangan oktal ke desimal dilakukan dengan menjumlahkan


hasil perkalian semua digit oktal dengan beratnya
Konversi bilangan bulat decimal ke
oktal dilakukan dengan membagi
secara berulang bilangan desimal
dengan 8. Sisa setiap pembagian
merupakan digit octal yang didapat
Konversi bilangan desimal pecahan ke oktal dilakukan dengan cara.
hampir sama dengan konversi bilangan desimal pecahan ke biner, yaitu

24
dengan mengalikan suatubilangan desimal pecahan dengan 8. Bagian
pecahan dari hasil perkalian ini dikalikan dengan 8. Langkah ini diulang
hingga didapat hasil akhir 0. Bagian bulat dari setiap hasil perkalian
merupakan digit yang didapat. Konversi bilangan oktal ke biner lebih
mudah dibandingkan dengan konversi bilangan oktal ke desimal.Satu
digit oktal dikonversi ke 3 bit biner.
Konversi bilangan biner ke octal lebih
mudah dibandingkan konversi
bilangan desimal ke oktal. Untuk
bagian bulat, kelompokkan setiap tiga
bit biner dari paling kanan, kemudian
konversikan setiap kelompok ke satu
digit oktal. Dan untuk bagian pecahan, kelompokkan setiap tiga bit
biner dari paling kiri, kemudian konversikan setiap kelompok ke satu
digit oktal. Proses ini merupakan kebalikan dari proses konversi
bilangan oktal ke biner.
Konversi bilangan heksadesimal ke
desimal dilakukan dengan menjumlah
kan hasil perkalian semua digit heksa
desimal dengan beratnya.
Konversi bilangan desimal bulat ke
heksadesimal dilakukan dengan cara
membagi secara berulang suatu
bilangan desimal dengan 16.Sisa setiap
pembagian merupakan digit heksa-
desimal yang didapat.

25
Konversi bilangan decimal pecahan ke
heksadesimal dilakukan dengan cara
hampir sama dengan konversi bilangan
desimal pecahan ke biner, yaitu
dengan mengalikan suatu bilangan
desimal pecahan dengan 16. Bagian
pecahan dari hasil perkalian ini dikalikan dengan 16. Langkah ini
diulang hingga didapat hasil akhir 0. Bagian bulat dari setiap hasil
perkalian merupakan digit yang didapat.
Konversi bilangan heksadesimal ke
biner lebih mudah dibandingkan
konversi bilangan heksadesimal ke
desimal. Satu digit heksadesimal
dikonversi ke 4 bit.
271hex = 1001110001bin 1001110001bin = 271hex
Sehingga menjadi Jika dipecah menjadi
1 = 0001 0001 = 1
7 = 0111 0111 = 7
2 = 0010 0010 = 2
1001110001bin 2271hex
Konversi bilangan biner ke heksadesimal lebih mudah dibandingkan
konversi bilangan desimal ke heksadesimal. Untuk bagian bulat,
kelompokkan setiap empat bit biner dari paling kanan, kemudian
konversikan setiap kelompok ke satu digit heksadesimal. Pada bagian
bilangan pecahan, kelompokkan setiap empat bit biner dari paling kiri,
kemudian konversikan setiap kelompok ke satu digit heksadesimal.
Proses ini merupakan kebalikan dari proses konversi bilangan
heksadesimal ke biner.

1.6.6. Data Karakter

26
Beberapa aplikasi menggunakan data yang bukan hanya bilangan tetapi
juga huruf dari alfabet dan karakter khusus lainnya. Data semacam ini
disebut dengan data alfanumerik dan mungkin dapat ditunjukkan
dengan kode numerik. Jika bilangan-bilangan dimasukkan dalam data,
maka bilangan-bilangan tersebut juga dapat ditunjukkan dengan kode
khusus. Set karakter alfa numerik secara khusus mencakup 26 huruf
alphabet (termasuk huruf besar dan huruf kecil), angka dalam digit
sepuluh desimal, dan sejumlah simbol seperti +, =, *, $ dan !.
Dua kode alphabet yang paling umum dipakai adalah ASCII
(American Standard Code for Information Interchange) dan EBCDIC
(Extended Binary Coded Decimal Interchange Code). ASCII merupakan
kode 7-bit dan EBCDIC berupa kode 8 bit. Jika suatu komputer
menangani 8-bit (1-byte) kode lebih efisien, versi 8-bit, disebut dengan
ASCII-8 juga telah dikembangkan. Selain itu ada juga beberapa kode
spesial didalam penambahan set karakter alfanumerik.
Kode simpanan ini digunakan sebagai signal komunikasi dalam
aplikasi dimana data transfer terjadi antara komputer yang
dihubungkan melalui baris komunikasi. Misalnya, LF (linefeed) dan CR
(carriage return) dihubungkan dengan printer, BEL digunakan untuk
mengaktifitaskan bell; ACK (acknowledge), NAK (negative acknowledge),
dan DLE (data link escape) berupa signal yang dapat diubah dalam baris
komunikasi. Orang yang sudah cukup lama berkecimpung di dunia
komputer, pasti pernah bekerja dengan ‘kode ASCII’. Dan bagi yang
bekerja dengan mesin-mesin mainframe IBM, pasti pernah menjumpai
‘kode EBCDIC’. Di luar ASCII dan EBCDIC, besar kemungkinan anda
paling tidak pernah mendengar istilah-istilah lain seperti berikut ini:
ISO-8859-1, UCS- 2, UTF-8, UTF-16, atau windows- 1252. Kode-kode
apakah itu? ASCII, EBCDIC, ISO-8859-X, UCS-2, UTFX, dan windows-x
merupakan sebagian dari kumpulan character set (set karakter) yang
ada di dunia computer

27
1.6.7. Kode BCD
Sebelum ASCII dan EBCDIC berkembang terlebih dahulu
dikembangkan Binary Coded Decimal (BCD). Metode ini awalnya
digunakan pada komputer mainframe IBM. Pada grup ini karakter
diwakili oleh 64 - ( 26) lambang. Dengan kode ini, setiap huruf/angka
diberikan kode yang terdiri dari enam bit, dua untuk zone dan empat
untuk angka. Huruf A sampai dengan I diberikan tanda 11 pada tempat
zone. Karena A adalah huruf pertama dalam kelompok ini, maka
kodenya adalah: 0001, B sebagai huruf kedua dengan kode: 0010, C
adalah 0011 dan seterusnya.
Dengan perkataan lain, zone bit yang mempunyai formasi 11 harus
juga disertakan pada kode lengkap masing-masing pada grup ini. Grup
alfabetik kedua adalah J hingga R, ditetapkan kode awalnya 10, yang
juga posisi masing-masing huruf ditentukan oleh angkanya masing-
masing. Huruf S hingga Z dibentuk dengan menambahkan angka bit
0010 hingga 1001 berurutan pada kode 01 dimana pada grup ini hanya
ada delapan huruf. Angka-angka 0 hingga Sembilan diberikan kode 00
di depannya diikuti oleh angka itu sendiri dalam sistim binary. Angka 0
(nol) harus dibedakan dengan tanda kosong (spasi) guna mempermudah
cara penggunaan kode.
1.6.8. Kode EBCDIC
Sistim Extended Binary Coded Decimal Interchange Code (EBCDIC)
merupakan set karakter yang merupakan ciptaan dari IBM. Salah satu
penyebab IBM menggunakan set karakter di luar ASCII sebagai standar
pada komputer ciptaan IBM adalah karena EBCDIC lebih mudah
dikodekan pada punch card yang pada tahun 1960-an masih jamak
digunakan. Penggunaan EBCDIC pada mainframe IBM masih terbawa
hingga saat ini, walaupun punch card sudah tidak digunakan lagi.
Seperti halnya ASCII, EBCDIC juga terdiri dari 128 karakter yang
masingmasing berukuran 7-bit. Bila menggunakan ukuran 8-bit maka

28
karakternya menjadi 256 atau 28. Hampir semua karakter pada ASCII
juga terdapat pada set karakter EBCDIC.
1.6.9. Kode ASCII
ASCII (Sistem American Standard Code for Information Interchange) dan
EBCDIC merupakan awal dari set karakter lainnya. ASCII merupakan
set karakter yang paling umum digunakan hingga sekarang. Set
karakter ASCII terdiri dari 128 – (27) buah karakter yang masing-masing
memiliki lebar 7-bit atau gabungan tujuh angka 0 dan 1, dari 0000000
sampai dengan 1111111. Mengapa 7-bit? Karena komputer pada
awalnya memiliki ukuran memori yang sangat terbatas, dan 128
karakter dianggap memadai untuk menampung semua huruf Latin
dengan tanda bacanya, dan beberapa karakter kontrol. ASCII telah
dibakukan oleh ANSI (American National Standards Institute) menjadi
standar ANSI X3.4- 1986.

29
BAB 2 Pemrograman Dengan C++
1.1 Pengantar
Apa itu program? Bagaimanakah membuatnya? Jika sudah dibuat,
apakah gunanya? Mungkin itu adalah pertanyaan – pertanyaan dari
orang – orang yang baru saja mengenal komputer. Program adalah
semacam sebuah metode penyelesaian masalah yang disediakan dalam
komputer untuk digunakan oleh manusia dalam mempermudah
pekerjaannya / kegiatannya. Kurang lebih itulah pengertian program,
paling tidak menurut saya. Lantas, bagaimana membuatnya?
Pembuatan program adalah dengan memberi “perintah” sedemikian rupa
kepada komputer sehingga “terciptalah” program itu yang kemudian
disimpan dalam memori komputer. Lalu, apa yang “diperintahkan” pada
komputer sehingga program itu dapat terbentuk? Tidak ada yang
berpikiran bahwa dia harus mengatakan kepada komputer: “Buatkan
saya sebuah program yang bagus yang mau dipakai untuk pembukuan
perusahaan saya. Kita, tentu saja, harus “ngobrol” dengan komputer
dengan bahasa yang bisa dimengerti olehnya. Bahasa apa itu? Sudah
banyak dibuat banyak bahasa pemrograman untuk menerjemahkan
logika pemrograman menjadi instruksi yang dapat dimengerti oleh
komputer, untuk kemudian dijalankan (dan dalam hal ini untuk
membuat program). Perintah tersebut di jalankan oleh komputer
untukmembuat sebuah program yang kemudian akan digunakan oleh
manusia / pihak yang berkepentingan.
2.2. Bahasa Pemrograman C++
C++ adalah salah satu bahasa pemrograman yang powerful untuk
membuat sebuah program. C++ adalah sebuah bahasa tingkat
menengah yang merupakan perkembangan dari bahasa C, dimana
bahasa ini merupakan bahasa pemrograman berorentasi objek (tidak
seperti pendahulunya, C). Dikatakan menengah karena bahasa ini
berada di antara bahasa tingkat tinggi dan rendah. Bahasa tingkat tinggi
merupakan bahasa yang lebih “manusawi”, karena perintah – perintah
30
dari bahasa ini lebih berorientasi kepada bahasa manusia. Visual Basic
(VB) dan Pascal adalah dua dari beberapa contoh bahasa tingkat tinggi.
Sedangkan bahasa tingkat rendah adalah bahasa yang lebih berorientasi
kepada bahasa mesin sehingga bahasa ini tidak terlalu “manusiawi” .
Contoh dari bahasa tingkat rendah ini adalah Assembly.
a. Header dan Fungsi main()
Sekarang kita masuk ke dalam pembuatan program. Beberapa bagian
yang harus di perhatikan adalah header dan fungsi. Header adalah
diana kita memasukkan library yang ada dalam C++ kedalam kode
program kita. Fungsi adalah “tempat” dimana kita bisa “bereksperimen”
. Didalamnya terdapat semua statement yang kita buat. Program yang
paling sederhana yang pernah diketahui umat manusia (seram amat
kata-katanya) adalah:
#include <iostream>
using namespace std;
void main () {
cout << “Hello, World!\n”;
}
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. Contoh – contoh
dari preprocessor ini adalah:
 #define maximum_number 100000
 #include “fileku.h”
 #ifdef maximum_number
#undef maximum_number
#define maximum_number_2 1000
#endif

31
Itu berarti bahwa kita memasukkan (include) library iostream ke dalam
kode program kita. iostream itu adalah header yang dibutuhkan untuk
“kegiatan” input dan output dari program. Perintah cout sendiri ada
karena kita memasukkan iostream ke dalam kode program kita dan juga
using namespace std; dimana ada member cout di dalamnya.
Berikut beberapa header yang terdapat dalam C++:
 ctime = header waktu
 cstdio = header untuk perintah C seperti printf dan scanf
 cmath = header untuk operasi matematika seperti sin, cos, sqrt, dan
tan
 cstring = header untuk memanipulasi string seperti strcpy, strcat, dll
(untuk lebih lengkapnya, lihat http://cplusplus.com/tutorial)
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. Apa itu nilai kembalian dan apa
itu paramater? Saksikan setelah pesan – pesan berikut… eh salah, lihat
dalam bab berikutnya . Jika diperhatikan ada perintah \n pada akhir
“kalimat” Hello, World!. Apa itu? ”\n” adalah perintah dalam banyak
bahasa pemrograman sebagai baris baru (new line) jadi yang akan
ditampilkan pada program adalah:

32
Perintah dengan menggunkan backslash (‘\’) juga ada beberapa jenis,
diantaranya:
 ‘\a’ = untuk menghasilkan bunyi alert
 ‘\t’= tabulasi
 ‘\0’ = null terminated dalam array
Tanda ‘{‘ juga harus ada dalam setiap fungsi C++, itu menandakan awal
dari fungsi / program dan ‘}’ menandakan akhir dari fungsi / program.
b. Penulisan Dalam Bahasa C++

Penulisan dalam bahasa C++ adalah case sensitive. Yang berarti, C++
membedakan huruf kecil dan kapital. Yang berarti juga variabel_pertama
tidak sama dengan variabel_Pertama atau mboknya_echi tidak sama
dengan mboknya_Echi. Komentar dalam C++ ditulis dengan ‘//’ untuk
komentar dengan panjang satu baris atau ‘/*’ dan ‘*/’ untuk komentar
lebih dari satu baris, dimana tanda /* merupakan “pembuka” komentar
dan */ adalah “penutup” komentar. Komentar adalah cataatan ang
ditulis oleh programmer untuk sebagai pengingat atau penjelasan ketika
membaca sebuah kode. Kata – kata dalam sebuah komentar tidak akan
dieksekusi oleh compiler.

Beberapa kesalahan dalam penulisan dalam C++ adalah:

 int int; /*salah karena nama sebuah variabel tidak boleh sama
dengan seuah tipe data (int)*/
 int Jam_9; //salah karena nama variabel dimulai dengan huruf besar
 int 90jam; /*nah, ini juga salah karena nama sebuah variabel tidak
boleh dimulai dengan bilangan*/
Penulisan yang benar dalam C++ adalah:

 int myint; //betul


 char kata_2; //betul juga...

33
 double bilangan_KeDuA; /*walaupun nama identifiernya aneh, tapi
ini juga betul :) */
Setiap statement dalam C++ harus diberi tanda ‘;’ pada akhir dari
statement. Contoh penulisan statement yang benar dalam C++ adalah:
int a, b, c;
a = 1;
b = 2;
c = a + b;

Sedangkan penulisan yang salah adalah:


int a, b, c
karena itu dianggap error oleh compiler, karena merupakan statement
yang tidak lengkap.

c. Tipe Data
Tipe – tipe data yang dikenal dalam C++ adalah sebagai berikut:
int
int adalah tipe data bilangan bulat (integer). Contoh penggunaan tipe int
adalah:
int a = 1;
int num1 = 2, num2 = 4;
Perhatikan bahwa dalam nilai – nilai yang masuk di assign (masukkan)
ke dalam variabel – variabel bertipe int adalah angka – angka / bilangan
bulat. Seperti namanya, int hanya bisa bernilai bulat dan bukan
pecahan (desimal). Bagaimana kalau yang tipenya int lalu yang
dimasukkan adalah hasil pembagian yang tidak bulat hasilnya? Maka:
int hasil_bagi_bulat = 5 / 2;
Hasilnya:
2

34
Ini karena 5 dibagi 2 = 2,5 kemudian karena hasil_bagi_bulat adalah
integer (bilangan bulat) 2,5 kemudian dibulatkan menjadi 2.
Untuk bilangan desimal sendiri ada tipe tertentu untuk bilangan ini.

double
adalah tipe yang khusus untuk bilangan yang tidak bulat alias desimal /
pecahan. Contoh penggunaannya adalah:
double mydouble = 5.00;
double pecahan_pertama = 2.5, pecahan_kedua = 9.9;
char
adalah tipe data karakter yang bisa menyimpan mulai dari: a – z, A – Z,
‘!’, ‘@’, dsb. Penggunannya ± sama dengan tipe - tipe yang sebelumnya:
char huruf = ‘c’;
char inisial1 = ‘A’, inisial2 = ‘W’;
char simbol = ‘#’;
bool
adalah tipe yang hanya “menyimpan” nilai “benar” dan “salah” yaitu, true
dan false (boolean). Contoh:
bool benar_atau_salah = true;
string

adalah tipe yang khusus untuk menampung semua masukan dari user
/ gabungan karakter yang sangat panjang. Misalnya:

string string_gue = “nah, seperti ini contoh string...”;

d. Operator Aritmatika
Operator aritmatika yang sering digunakan dalam C++ adalah:
 ‘+’ = penjumlahan
 ‘-‘ = pengurangan
 ‘*’ = perkalian
 ‘/’ = pembagian

35
 ‘%’ = sisa bagi (modulo)
Contoh dari pemakaian operator tersebut adalah sebagai berikut:
#include <iostream>
using namespace std;
void main () {
int satu, dua, tiga, empat, lima;
satu = 1 + 0;
dua = 4 - 2;
tiga = 1 * 3;
empat = 20 / 5;
//mencari sisa bagi dari 25 / 10
lima = 25 % 10;
cout << satu << “\n”;
cout << dua << “\n”;
cout << tiga << “\n”;
cout << empat << “\n”;
cout << lima << “\n”;
}
Hasilnya adalah:

36
BAB 3 Algoritma Pemrograman

A. Tujuan Pembelajaran Setelah mengikuti kegiatan belajar 1 ini


mahasiswa diharapkan dapat:
1) Memahami Konsep Algoritma
2) Memahami Struktur Algoritma
3) Memahami Algoritma menggunakan bahasa natural Algoritma
4) Memahami Pseudocode
5) Memahami Flowchart dan penggunaan Tool Flowcahrt
6) Pengenalan Variabel
7) Memahami Pengenalan tipe data
8) Memahami Pengenalan operator

B. Uraian Materi
3.1. Pengantar Algoritma Pemrograman
Belajar memprogram adalah belajar tentang strategi pemecahan
masalah, metodologi dan sistematika pemecahan masalah tersebut
kemudian dituangkan dalam suatu notasi yang disepakati bersama.
“lebih bersifat pemahaman persoalan, analisis, sintesis” Belajar bahasa
pemrograman adalah belajar memakai suatu bahasa, aturan sintaks
(tatabahasa), setiap instruksi yang ada dan tata cara pengoperasian
kompilator atau interpreter bahasa yang bersangkutan pada mesin
tertentu. “BELAJAR MEMPROGRAM” TIDAK SAMA DENGAN “BELAJAR
BAHASA PEMROGRAMAN”
3.1.1 Algortima dan pemrograman
Algorimtma berasal dari bahasa ingeris yang diambil
dari nama seorang Arab yaitu Al-Khawarizmi. Dia
adalah seorang ilmuwan Islam yang karya karyanya
dalam bidang matematika, astronomi, astrologi dan
geografi banyak menjadi dasar perkembangan ilmu
modern. Dan dari namanya istilah yang akan kita

37
pelajari dalam bab ini muncul. Dari Al-Khawarizmi kemudian berubah
menjadi algorithm dalam Bahasa Inggris dan diterjemahkan menjadi
algoritma dalam bahasa Indonesia.
3.1.2 Definisi Algortima
Algoritma adalah urutan langkah-langkah logis penyelesaian masalah
yang disusun secara sistematis. Algoritma yang dapat menyelesaikan
suatu permasalahan dalam waktu yang singkat memiliki tingkat
kerumitan yang rendah, sementara algoritma yang membutuhkan waktu
lama untuk menyelesaikan suatu masalah membutuhkan tingkat
kerumitan yang tinggi.

3.1.3 Struktur Algortima


Perhatikan algoritma sederhana berikut: Jika seseorang ingin mengirim
surat kepada kenalannya di tempat lain, langkah yang harus dilakukan;
1. Menyiapkan Peralatan Tulis
2. Menulis surat
3. Surat dimasukkan ke dalam amplop tertutup
4. Amplop ditempeli perangko secukupnya.
5. Pergi ke Kantor Pos terdekat untuk mengirimkannya
Algoritma menghitung luas persegi panjang:
1. Masukkan panjang (P)
2. Masukkan lebar (L)
3. Luas P * L
4. Tulis Luas
Pembuatan algoritma mempunyai banyak keuntungan di antaranya:
a) Pembuatan atau penulisan algoritma tidak tergantung pada
bahasa pemrograman manapun, artinya penulisan algoritma
independen dari bahasa pemrograman dan komputer yang
melaksanakannya.
b) Notasi algoritma dapat diterjemahkan ke dalam berbagai bahasa
pemrograman.
38
c) Apapun bahasa pemrogramannya, output yang akan dikeluarkan
sama karena algoritmanya sama.
Beberapa hal yang perlu diperhatikan dalam membuat algoritma:
a) Teks algoritma berisi deskripsi langkah-langkah penyelesaian
masalah. Deskripsi tersebut dapat ditulis dalam notasi apapun
asalkan mudah dimengerti dan dipahami.
b) Tidak ada notasi yang baku dalam penulisan teks algoritma
seperti notasi bahasa pemrograman. Notasi yang digunakan
dalam menulis algoritma disebut notasi algoritmik.
c) Setiap orang dapat membuat aturan penulisan dan notasi
algoritmik sendiri. Hal ini dikarenakan teks algoritma tidak sama
dengan teks program. Namun, supaya notasi algoritmik mudah
ditranslasikan ke dalam notasi bahasa pemrograman tertentu,
maka sebaiknya notasi algoritmik tersebut berkorespondensi
dengan notasi bahasa pemrograman secara umum.
d) Notasi algoritmik bukan notasi bahasa pemrograman, karena itu
pseudocode dalam notasi algoritmik tidak dapat dijalankan oleh
komputer. Agar dengan instruksi kode program sebenarnya.
e) Algoritma dapat dijalankan oleh komputer, pseudocode dalam
notasi algoritmik harus ditranslasikan atau diterjemahkan ke
dalam notasi bahasa pemrograman yang dipilih. Perlu diingat
bahwa orang yang menulis program sangat terikat dalam aturan
tata bahasanya dan spesifikasi mesin yang menjalannya.
Pseudocode adalah kode yang mirip sebenarnya digunakan untuk
membantu kita dalam mengkonversikan suatu permasalahan ke
dalam bahasa pemrograman.
f) Algoritma merupakan hasil pemikiran konseptual, supaya dapat
dilaksanakan oleh komputer, algoritma harus ditranslasikan ke
dalam notasi bahasa pemrograman
Perhatikan algoritma sederhana berikut :
Algoritma menghitung luas segitiga
39
1. Start
2. Baca data alas dan tinggi.
3. Luas adalah alas kali tinggi kali 0.5
4. Tampilkan Luas
5. Stop
Penjelasan : Algoritma di atas adalah algoritma yang sangat
sederhana, hanya ada lima langkah. Pada algoritma ini tidak
dijumpai perulangan ataupun pemilihan. Semua langkah
dilakukan hanya satu kali. Sekilas algoritma di atas benar, namun
apabila dicermati maka algoritma ini mengandung kesalahan yang
mendasar, yaitu tidak ada pembatasan pada nilai data untuk alas
dan tinggi. Hasil perbaikan algoritma perhitungan luas segitiga
1. Start
2. Baca data alas dan tinggi.
3. Periksa data alas dan tinggi, jika nilai data alas dan tinggi
lebih besar dari nol maka lanjutkan ke langkah ke 4 jika
tidak maka stop
4. Luas adalah alas kali tinggi kali 0.5
5. Tampilkan Luas
6. Stop
Dari penjelasan di atas dapat diambil kesimpulan pokok tentang
algoritma. Pertama, algoritma harus benar. Kedua algoritma harus
berhenti, dan setelah berhenti, algoritma memberikan hasil yang
benar.
Contoh : Algoritma Berangkat Sekolah
1. Mulai Bangun dari tempat tidur
2. Mandi Pagi
3. Sarapan Pagi
4. Pergi Ke Sekolah
5. Cari Ruang Kelas Masuk kelas untuk Belajar
6. Selesai
40
Beda Algoritma dan Program ?
Program adalah kumpulan pernyataan komputer, sedangkan
metode dan tahapan sistematis dalam program adalah algoritma.
Program ditulis dengan menggunakan bahasa pemrograman. Jadi
bisa disebut bahwa program adalah suatu implementasi dari
bahasa pemrograman.
Program = Algoritma + Bahasa (Struktur Data)
Penerjemah Bahasa Pemrograman
Untuk menterjemahkan bahasa pemrograman yang kita tulis
maka diperlukan Compiler dan interpreter.
Compiler adalah suatu program yang menterjemahkan bahasa
program (Source code) ke dalam bahasa obyek (object code) secara
keseluruhan program. Interpreter berbeda dengan Compiler
interpreter menganalisis dan mengeksekusi setiap baris dari
program secara keseluruhan. Keuntungan interpreter dalam
eksekusi dapat dilakukan sacara cepat, tanpa melalui tahap
kompilasi, karena itu interpreter digunakan saat pembuatan
program berskala besar.
Perbedaan Compiler dan interpreter.
Compiler Interpreter
Menterjemahkan secara keseluruhan Menterjemahkan Instruksi per
instruksi
Bila terjadi kesalahan kompilasi maka Bila terjadi kesalahan interprestasi
source program harus diperbaiki dan dapat Diperbaiki
dikompilasi ulang
Dihasilkan Object program Tidak dihasilkan obyek program
Dihasilkan Executable program Tidak dihasilkan Executable program
Proses pekerjaan program lebih cepat Proses pekerjaan program lebih
lambat
Source program tidak dipergunakan Source program terus dipergunakan
hanya bila untuk perbaikan saja
Keamanan dari program lebih terjamin Keamanan dari program kurang
terjamin

41
3.2. Jenis-Jenis Bahasa Pemrograman
 Bahasa Pemrograman Tingkat rendah (Bahasa mesin, Biner)
 Bahasa Pemrograman Tingkat tinggi
Contoh-contoh Bahasa Pemrograman yang ada :
1. Prosedural : Algol, Pascal, Fortran, Basic, Cobol, C
2. Fungsional : LOGO, APL, LISP
3. Deklaratif : Prolog Object oriented murni: Smalltalk, Eifel, Java,
PHP, Selengkapnya lihat table berikut
NAMA PENJELASAN
BASIC Beginners All‐purpose Symbolic Instruction Code, bahasa
pemrograman yang biasa digunakan untuk merancang
program sederhana pada programer pemula
FORTRAN Formula Translator, Bahasa pemrograman yang dirancang
untuk menyelesaikan algoritma matematika yang
kompleks
COBOL Common Business‐Oriented Language. Bahasa
pemrograman yang dirancang pada aplikasi bisnis
Pascal Pemrograman terstruktur, bersifat umum, dan biasanya
bahasa pemrogram ini banyak diajarkan
C Pemrogram terstruktur, bersifat umum. Bahasa ini
dikembangkan oleh bell laboratories. Bahasa C ini dapat
digunakan sebagai bahasa aras tinggi dan aras rendah.
C++ Dasar pengembangan C. C++ dapat digunakan sebagai
bahasa berorientasi objek, yang tidak ditemukan pada
bahasa C. Bahasa ini juga dikembangkan oleh
laboratorium Bell
C# C# Bahasa ini ditemukan oleh microsoft untuk
atau “C mengembangkan aplikasi pada aplikasi microsoft .NET
sharp”.
Java Bahasa ini merupakan bahasa berorientasi objek yang
dikembangkan oleh Sum Microsistem. Dengan java
memungkinkan untuk pengembangan program yang
berjalan pada jaringan internet atau pada web browser.
VISUAL Bahasa pemrograman microsoft dimana bahasa ini
BASIC bertujuan untuk pengembangan perangkat lunak yang
dapat memudahkan programmer
dalam membuat aplikasi berbasis windows.

42
3.3. Cara penulisan algortima Ada tiga cara penulisan algoritma,
yaitu
a. Structured English (SE), SE merupakan alat yang cukup baik
untuk menggambarkan suatu algoritma. Dasar dari SE adalah
Bahasa Inggris, namun kita dapat memodifikasi dengan Bahasa
Indonesia sehingga kita boleh menyebutnya sebagai Structured
Indonesian (SI). ”SE atau SI lebih tepat untuk menggambarkan suatu
algoritma yang akan dikomunikasikan kepada pemakai perangkat
lunak”
b. Pseudocode adalah kode yang mirip dengan instruksi kode program
sebenarnya. Pseudocode berdasarkan bahasa pemrograman yang
sesungguhnya seperti BASIC, FORTRAN atau PASCAL. Pseudocode
berbasis bahasa PASCAL merupakan pseudocode yang sering
digunakan. “Pseudo berarti imitasi atau tiruan atau menyerupai,
sedangkan code menunjuk pada kode program”
Contoh Pseudocode :
1. Start
2. READ alas, tinggi
3. Luas = 0.5 * alas * tinggi
4. PRINT Luas
5. Stop
Pada Contoh diatas tampak bahwa algoritma sudah sangat mirip
dengan bahasa BASIC. Pernyataan seperti READ dan PRINT
merupakan keyword yang ada pada bahasa BASIC yang masing-
masing menggantikan kata “baca data” dan “tampilkan”. Dengan
menggunakan pseudocode seperti di atas maka proses
penterjemahan dari algoritma ke kode program menjadi lebih mudah.

43
3.4. Membuat Alur Logika Pemograman

a. Penyajian atau Penulisan Algoritma


Penyajian algoritma secara garis besar bisa dalam 2 bentuk
penyajian yaitu tulisan dan gambar. Algoritma yang disajikan dengan
tulisan yaitu dengan struktur bahasa tertentu (misalnya bahasa
Indonesia atau bahasa Inggris) dan pseudocode.
Pseudocode adalah kode yang mirip dengan kode pemrograman yang
sebenarnya seperti Pascal, atau C, sehingga lebih tepat digunakan
untuk menggambarkan algoritma yang akan dikomunikasikan
kepada pemrogram. Sedangkan algoritma disajikan dengan gambar,
yaitu dengan Flowchart

b. Flowchart (Diagram Alir)


Flowchart (Diagram Alir) Flowchart atau bagan alir adalah
skema/bagan (chart) yang menunjukkan aliran (flow) di dalam suatu
program secara logika. Flowchart merupakan alat yang banyak
digunakan untuk menggambarkan algoritma dalam bentuk notasi-
notasi tertentu. Flowchart merupakan gambar atau bagan yang
memperlihatkan urutan dan hubungan antar proses beserta
pernyataannya. Gambaran ini dinyatakan dengan simbol. Dengan
demikian setiap simbol menggambarkan proses tertentu. Sedangkan
antara proses digambarkan dengan garis penghubung. Dengan
menggunakan flowchart akan memudahkan kita untuk melakukan
pengecekan bagianbagian yang terlupakan dalam analisis masalah.
Di samping itu flowchart juga berguna sebagai fasilitas untuk
berkomunikasi antara pemrogram yang bekerja dalam tim suatu
proyek. Walaupun tidak ada kaidah-kaidah yang baku dalam
penyusunan flowchart, namun ada beberapa anjuran:

44
1) Hindari pengulangan proses yang tidak perlu dan logika yang
berbelit sehingga jalannya proses menjadi singkat.
2) Jalannya proses digambarkan dari atas ke bawah dan diberikan
tanda panah untuk memperjelas.
3) Sebuah flowchart diawali dari satu titik START dan diakhiri dengan
END.

Berikut merupakan beberapa contoh simbol flowchart yang


disepakati oleh dunia pemrograman:
Lambang Makna/arti lambang Keterangan
Notasi Membuat algoritma sederhana untuk Mulai/selesai
menyelesaikan permasalahan menggunakan (terminator)
bahasa natural, flowchart dan pseudocode
Notasi ini disebut Arrow yang digunakan untuk
menunjukkan arus data atau aliran data dari Aliran data
proses satu ke proses lainnya
Notasi ini disebut Data yang digunakan untuk
mewakili data input atau output atau Input
menyatakan operasi pemasukan data dan /Output
pencetakan hasil
Notasi ini disebut Process yang digunakan Proses
untuk mewakili suatu proses.
Notasi ini disebut Decision yang digunakan Percabangan
untuk suatu pemilihan, penyeleksian kondisi
di dalam suatu program
Notasi ini disebut Preparation yang digunakan Pemberian
untuk memberi nilai awal, nilai akhir, awal suatu
penambahan/ pengurangan bagi suatu variable
variabel counter.
Notasi ini disebut Predefined Process yang Memanggil
digunakan untuk menunjukkan suatu operasi suatu
yang rinciannya ditunjukkan ditempat lain prosedur/
(prosedur, subprosedur, fungsi) fungsi
Notasi ini disebut Connector yang digunakan Konektor
untuk menunjukkan sambungan dari dihalaman
flowchart yang terputus di halaman yang sama yang sama
Notasi ini disebut Connector yang digunakan Konektor di
untuk menunjukkan sambungan dari halalam lain
flowchart yang terputus di halaman
berikutnya.

45
3.5. Struktur Dasar Algoritma
Algoritma berisi langkah-langkah penyelesaian suatu masalah, yang
dapat berupa runtunan aksi (sequence), pemilihan aksi (selection),
pengulangan aksi (iteration) atau kombinasi ketiganya. Struktur
dasar pembangunan algoritma ada tiga, yaitu:
1. Struktur Runtunan / Beruntun : Digunakan untuk program yang
pernyataannya sequential atau urutan.
2. Struktur Pemilihan / Percabangan : Digunakan untuk program
yang menggunakan pemilihan atau penyeleksian kondisi.
3. Struktur Perulangan : Digunakan untuk program yang
pernyataannya akan dieksekusi berulang-ulang.
1. Struktur Algoritma Runtunan / Berurutan :
Ada tiga struktur dasar yang digunakan dalam membuat algoritma
yaitu struktur berurutan (sequencing), struktur pemilihan/
keputusan/percabangan (branching) dan struktur pengulangan
(looping). Sebuah algoritma biasanya akan menggabungkan ketiga
buah struktur ini untuk menyelesaikan masalah. Struktur berurutan
dapat kita samakan dengan mobil yang sedang berjalan pada jalur
lurus yang tidak terdapat persimpangan seperti tampak pada Gambar
disamping Mobil tersebut akan melewati kilometer demi kilometer
jalan sampai tujuan tercapai.
Struktur berurutan terdiri satu atau lebih instruksi. Tiap instruksi
dikerjakan secara berurutan sesuai dengan urutan penulisannya,
yaitu sebuah instruksi dieksekusi setelah instruksi sebelumnya
selesai dieksekusi. Urutan instruksi menentukan keadaan akhir dari
algoritma. Bila urutannya diubah, maka hasil akhirnya mungkin juga
berubah.

Menurut Goldshlager dan Lister (1988) struktur berurutan mengikuti


ketentuan-ketentuan sebagai berikut:

46
 Tiap instruksi dikerjakan satu persatu
 Tiap instruksi dilaksanakan tepat sekali, tidak ada yang diulang
 Urutan instruksi yang dilaksanakan pemroses sama dengan urutan
aksi sebagaimana yang tertulis di dalam algoritmanya
 Akhir dari instruksi terakhir merupakan akhir algoritma.
Contoh bagan alir logika program berurutan (sequencing)

2. Struktur Algoritma Percabangan


Sebuah program tidak selamanya akan berjalan dengan mengikuti
struktur berurutan, kadang-kadang kita perlu merubah urutan
pelaksanaan program dan menghendaki agar pelaksanaan program
meloncat ke baris tertentu. Peristiwa ini kadang disebut sebagai
percabangan/pemilihan atau keputusan. Hal ini seperti halnya ketika
mobil/motor berada dalam persimpangan Pada struktur percabangan,
program akan berpindah urutan pelaksanaan jika suatu kondisi yang
disyaratkan dipenuhi. Pada proses seperti ini simbol flowchart Decision
harus digunakan. Simbol decision akan berisi pernyataan yang akan
diuji kebenarannya. Nilai hasil pengujian akan menentukan cabang
mana yang akan ditempuh.
47
Contoh Struktur percabangan untuk masalah batasan umur. Sebuah
aturan untuk menonton sebuah film tertentu adalah sebagai berikut,
jika usia penonton lebih dari 17 tahun maka penonton diperbolehkan
dan apabila kurang dari 17 tahun maka penonton tidak diperbolehkan
nonton. Buatlah flowchart untuk permasalahan tersebut.
Penyelesaian:
Permasalahan diatas merupakan ciri permasalahan yang menggunakan
struktur percabangan. Hal ini ditandai dengan adanya pernyataan
jika ..maka ...(atau If ... Then dalam Bahasa Inggris.
Bagan alir logika (Flowchart) penyelesaian masalah nonton film

3. Struktur Algoritma Perulangan / Pengulangan


Dalam banyak kasus seringkali kita dihadapkan pada sejumlah
pekerjaan yang harus diulang berkali.Salah satu contoh yang gampang
kita jumpai adalah balapan mobil

Struktur pengulangan terdiri dari dua bagian

48
 Kondisi pengulangan, yaitu syarat yang harus dipenuhi untuk
melaksanakan pengulangan. Syarat ini biasanya dinyatakan dalam
ekspresi Boolean yang harus diuji apakah bernilai benar (true) atau
salah (false)
 Badan pengulangan (loop body), yaitu satu atau lebih instruksi yang
akan diulang

Pada struktur pengulangan, biasanya juga disertai bagian inisialisasi


dan bagian terminasi. Inisialisasi adalah instruksi yang dilakukan
sebelum pengulangan dilakukan pertama kali. Bagian insialisasi
umumnya digunakan untuk memberi nilai awal sebuah variable.
Sedangkan terminasi adalah instruksi yang dilakukan setelah
pengulangan selesai dilaksanakan. Ada beberapa bentuk pengulangan
yang dapat digunakan, masing-masing dengan syarat dan karakteristik
tersendiri. Beberapa bentuk dapat dipakai untuk kasus yang sama,
namun ada bentuk yang hanya cocok untuk kasus tertentu saja.
Pemilihan bentuk pengulangan untuk masalah tertentu dapat
mempengaruhi kebenaran algoritma. Pemilihan bentuk pengulangan
yang tepat bergantung pada masalah yang akan diprogram. Bagan alir
logika (flowchart) untuk mencetak pernyataan sebanyak 100 kali
Flowchart program untuk menjumlahkan 50 bilangan bulat pertama

Start A

SUM = SUM + N
SUM = 0

TIDAK Apakah
N == 50 ?
N = 0
YA

Cetak
N = N + 1 SUM

A Selesai

49
 Struktur pengulangan dengan For

Pengulangan dengan menggunakan For, merupakan salah teknik


pengulangan yang paling tua dalam bahasa pemrograman. Hampir
semua bahasa pemrograman menyediakan metode ini, meskipun
sintaksnya mungkin berbeda. Pada struktur For kita harus tahu terlebih
dahulu seberapa banyak badan loop akan diulang. Struktur ini
menggunakan sebuah variable yang biasa disebut sebagai loop s counter,
yang nilainya akan naik atau turun selama proses pengulangan.
Contoh :
Diketahui sebuah himpunan A yang beranggotakan bilangan 1, 3, 5, , 19.
Buatlah flowchart untuk mencetak anggota himpunan tersebut.
Penyelesaian:
Pada contoh ini, kita mencoba menentukan hasil dari sebuah flowchart .
Bagaimana menurut kalian jawabannya? Marilah kita uraikan jalannya
fowchart tersebut. Pada flowchart, setelah Start, kita meletakkan satu
proses yang berisi pernyataan A = 1. Bagian inilah yang disebut
inisialisasi . Kita memberi nilai awal untuk A = 1. Variabel counter-nya
adalah X dengan nilai awal 1 dan nilai akhir 10, tanpa increment (atau
secara default increment-nya adalah 1). Ketika masuk ke badan loop
untuk pertama kali maka akan dicetak langsung nilai variabel A. Nilai
variabel A masih sama dengan 1. Kemudian proses berikutnya adalah
pernyataan A = A + 2. Pernyataan ini mungkin agak aneh, tapi ini adalah
sesuatu yang pemrograman. Arti dari pernyataan ini adalah gantilah
nilai A yang lama dengan hasil penjumlah nilai A lama ditambah 2.
Sehingga A akan bernilai 3. Kemudian dilakukan pengulangan yang ke-
dua. Pada kondisi ini nilai A adalah 3, sehingga yang tercetak oleh
perintah print adalah 3. Baru kemudian nilai A kita ganti dengan
penjumlahan A + 2. Nilai A baru adalah 5. Demikian seterusnya.
Sehingga output dari flowchart ini adalah 1,3, 5, 7, .., 19.

50
 Struktur pengulangan dengan While

Pada pengulangan dengan For, banyaknya pengulangan diketahui


dengan pasti karena nilai awal (start) dan nilai akhir (end) sudah
ditentukan diawal pengulangan. Bagaimana jika kita tidak tahu pasti
harus berapa kali mengulang? Pengulangan dengan While merupakan
jawaban dari permasalahan ini. Seperti halnya For, struktur
pengulangan dengan While juga merupakan struktur yang didukung
oleh hampir semua bahasa pemrograman namun dengan sintaks yang
berbeda. Struktur While akan mengulang pernyataan pada badan loop
sepanjang kodisi pada While bernilai benar. Dalam artian kita tidak
perlu tahu pasti berapa kali diulang. Yang penting sepanjang kondisi
pada While dipenuhi maka pernyataan pada badan loop akan diulang.

 LATIHAN 1.
1. Buatkan Flowchart untuk mencari Luas persegi empat ?
2. Buatlah Algoritma dan Flowchart untuk menentukan kelulusan
siswa ?
Dengan ketentuan :
Jika Nilai >= 70 maka Lulus
Jika Nilai <= 70 maka Tidak Lulus

51
BAB 4 Bahasa Pemrograman C

A. Tujuan Pembelajaran Setelah mengikuti kegiatan belajar ini


mahasiswa diharapkan dapat
1. Memahami Pengenalan bahasa pemrograman
2. Memahami Pengenalan tools/framework 3
3. Memahami instalasi tools bahasa pemrograman
4. Memahami struktur bahasa pemrograman
5. Memahami standar output dalam bahasa pemrograman
6. Memahami standar input dalam bahasa pemrograman
7. Memahami kompilasi dan eksekusi program
8. Memahami perbaikan kesalahan

1.1. Pengenalan bahasa pemrograman Bahasa C


Sejarah Bahasa C merupakan perkembangan dari bahasa BCPL yang
dikembangkan oleh Martin Richards pada tahun 1967. Selanjutnya
bahasa ini memberikan ide kepada Ken Thompson yang kemudian
mengembangkan bahasa yang disebut bahasa B pada tahun 1970.
Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis
Ricthie sekitar tahun 1970-an di Bell Telephone Laboratories Inc.
(sekarang adalah AT&T Bell Laboratories). Bahasa C pertama kali
digunakan di computer Digital Equipment Corporation PDP-11 yang
menggunakan system operasi UNIX. Hingga saat ini penggunaan bahasa
C telah merata di seluruh dunia. Hampir semua perguruan tinggi di
dunia menjadikan bahasa C sebagai salah satu mata kuliah wajib.
Selain itu, banyak bahasa pemrograman populer seperti PHP dan Java
menggunakan sintaks dasar yang mirip bahasa C. Oleh karena itu, kita
juga sangat perlu mempelajarinya.

52
1.2. Kelebihan dan Kekurangan Bahasa C
Kelebihan Bahasa C
 Bahasa C tersedia hampir di semua jenis computer.
 Kode bahasa C sifatnya adalah portable dan fleksibel untuk semua
jenis computer.
 Bahasa C hanya menyediakan sedikit kata-kata kunci, hanya
terdapat 32 kata kunci.
 Proses executable program bahasa C lebih cepat
 Dukungan pustaka yang banyak
 C adalah bahasa yang terstruktur
 Bahasa C termasuk bahasa tingkat menengah
Kekurangan Bahasa C
 Banyaknya Operator serta fleksibilitas penulisan program kadang-
kadang membingungkan pemakai
 Bagi pemula pada umumnya akan kesulitan menggunakan pointer
1.3. Pengenalan IDE Dev C++
IDE merupakan singkatan dari Integrated Development Environment,
merupakan Lembar kerja terpadu untuk pengembangan program.
IDE dari Dev C++, dapat digunakan untuk

 Menulis Naskah Program


 Mengkompilasi Program (Compile)
 Melakukan Pengujian Program (Debugging)
 Mengaitkan Object dan Library ke Program (Linking)
 Menjalankan Program (Running )

53
Tampilan IDE Dev C++

Gambar 1.2. IDE Dev C++ 4.9.9.2


IDE pada Dev C++, terbagi menjadi 4 (empat) bagian,
a. Menu Utama (Menubar )
Menu utama terdiri dari ; File, Edit, Search, View, Project, Execute,
Debug, Tools, CVS, Windows dan Help
b. Jendela Text Edit, Tempat untuk mengetikan program dan
membuat program.
Jika pertama kali anda membuat program, nama file jendela editor
adalah Untitled1
c. Jendela Message, Tempat untuk menampilkan pesan-pesan pada
proses kompilasi dan link program.
d. Baris Status, Baris tempat menampilkan keterangan-keterangan
pada saat anda mengaktifkan menu bar dan sub menu.
1.4. Membuat File Editor
File Editor merupakan File Program yang dapat dikompile, dan
dijalankan untuk menampilkan hasilnya serta mempunyai
ekstensi .CPP. Cara mengaktifkannya : Klik Menu File Gambar 1.3
Klik New, Source File
54
Gambar 1.3 Membuat File baru

Gambar 1.4 Menulis kode program

55
1.5. Menyimpan File Editor
Penjelasan, Setelah selesai mengetikan naskah program yang baru
pada jendela Text Edit, maka selanjutnya disimpan dengan cara :
a. Kik Menu File Save
b. Menekan Ctrl + S.
Selanjutnya tampil jendela Save File As, seperti dibawah ini

Gambar 1.5 menyimpan file


1.6. Menterjemahkan Program
Penjelasan Proses Compile merupakan suatu proses menterjemahkan
program dari bahasa manusia kedalam bahasa yang dimengerti oleh
komputer yaitu bahasa mesin. Caranya adalah
a. Kik Menu Project Compile
b. Menekan HotKey Ctrl + F9 Selanjutnya tampil kotak dialog Compile,
seperti dibawah ini :

56
Gambar 1.6 Menterjemahkan/compile program
1.7. Menjalankan Program
Penjelasan Proses Run merupakan suatu proses menterjemahkan
program, melakukan proses linking, membuat file eksekusi (.exe )
dan sekaligus menjalankan program. Caranya adalah :
a. Kik Menu Debug Run
b. Menekan HotKey Ctrl + F10 Selanjutnya tampil kotak dialog
Run, seperti dibawah ini

57
Gambar 1.7 Menjalankan program
Catatan Jika program yang dijalankan tidak muncul, untuk
melihat hasil compile dapat dijalankan di command prompt

1.8. Struktur Program C/C++


Penjelasan Struktur program C++, sama seperti struktur program
C yang terdahulu. Struktur program C++ terdiri sejumlah blok
fungsi, setiap fungsi terdiri dari satu atau beberapa pernyataan
yang melaksanakan tugas tertentu.
#include <file-include>
main() {
pernyataan;
}

Contoh-1
#include

58
#include
int main()
{
printf("Bahasa C\n");
}
Output yang akan dihasilkan, dari program 1 diatas adalah:
Bahasa C
1.9. Model Memori
Penjelasan C/C++, mempunyai enam model memori untuk
program dan data. Model-model memori tersebut adalah Model
Tiny, Model Small, Model Medium, Model Compact, Model Large,
Model Huge,
a. Model Tiny, Model memori yang menyediakan jumlah memori
untuk program dan data tidak lebih dari 64 Kb.
b. Model Small, Model memori yang menyediakan jumlah memori
untuk masing-masing program dan data tidak lebih dari 64 Kb.
c. Model Medium, Model memori yang menyediakan jumlah
memori untuk program tidak lebih dari 64 Kb dan data tidak
lebih dari 64 Kb.
d. Model Compact, Model memori yang menyediakan jumlah
memori untuk program lebih dari 64 Kb dan data tidak lebih
dari 64 Kb.
e. Model Large , Model memori yang menyediakan jumlah memori
untuk program dan data lebih dari 64 Kb.
f. Model Huge Penjelasan Model memori yang menyediakan
jumlah memori untuk menyimpan satu jenis data.

59
BAB 5 Bahasa Pemrograman

A. Tujuan Pembelajaran
1. Memahami Tipe Data
2. Memahami Variabel
3. Memahami Operator
4. Memahami Ekspresi
1.1. Tipe Data, Variabel, Konstanta, Operator, dan Ekspresi
Variabel, konstanta dan tipe data merupakan tiga hal yang akan selalu
kita jumppai ketika kita membuat program. Bahasa pemrograman
apapun dari yang paling sederhana sampai yang paling kompleks,
mengharuskan kita untuk mengerti ketiga hal tersebut.

1. Tipe Data, adalah jenis data yang dapat diolah oleh komputer untuk
memenuhi kebutuhan dalam pemrograman komputer. Setiap variabel
atau konstanta yang ada dalam kode program, sebaiknya kita
tentukan dengan pasti tipe datanya. Ketepatan pemilihan tipe data
pada variabel atau konstanta sangat menentukan pemakaian
sumberdaya komputer (terutama memori komputer). Salah satu tugas
penting seorang programmer adalah memilih tipe data yang sesuai
untuk menghasilkan program yang efisien dan berkinerja tinggi. Ada
banyak tipe data yang tersedia tergantung jenis bahasa pemrograman
yang dipakai. Namun secara umum dapat dikelompokkan seperti pada
Gambar dibawah ini

60
2 jenis tipe data :
1. Tipe data primitive adalah tipe data dasar yang tersedia secara
langsung pada suatu bahasa pemrograman.
2. Tipe data composite adalah tipe data bentukan yang terdiri dari dua
atau lebih tipe data primitive.
Tipe data numeric, digunakan pada variabel atau konstanta untuk
menyimpan nilai dalam bentuk bilangan atau angka. Semua bahasa
pemrograman menyediakan tipe data numeric, hanya berbeda dalam
jenis numeric yang diakomodasi. Jenis yang termasuk dalam tipe data
numeric antara lain :
1. integer (bilangan bulat)
2. float (bilangan pecahan).
3. tipe data Single adalah tipe data untuk bilangan pecahan dengan
presisi yang terbatas

61
4. Tipe data Double adalah tipe data untuk bilangan pecahan dengan
presisi yang lebih akurat.
Penentuan tipe data numeric untuk suatu variabel/konstanta harus
sangat berhati-hati. Manual dan petunjuk pada masing-masing bahasa
pemrograman pada bagian tipe data harus diperhatikan dengan
seksama.
Tipe data Ukuran Jangkuan nilai Jumlah Digit
memori
Chart 1 Byte -128 s.d 127
Int 2 Byte -32768 s.d 32767
Short 2 Byte -2,147, 435,648 s.d 2,147,435,647
Long 4 Byte -2,147,435,648 s.d 2,147,435,647
Float 4 Byte 3.4 x 10-38 s.d 3.4 x 10+38 5-7
Double 8 Byte 1.7 x 10-308 s.d 1.7 x 10+308 15-16
long Double 12 Byte 3.4 x 10 -4932 s.d 1.1 x 10 +4932 19

Tipe Data Tambahan, yang dimiliki oleh Bahasa C/C++, adalah:


Unsigned digunakan bila data yang digunakan hanya data yang positif
saja
Tipe Data Tambahan
Tipe data Ukuran Jangkuan nilai
memori
Usignet integer 2 Byte 0 – 65535
Usignet character 1Byte 0 – 255
Usignet Long integer 4Byte 0 – 4,294,967,295

Contoh program bahasa C


//Contoh program tipe data
//Nama Programmer : ..........
#include "stdio.h"
#include "conio.h"
int main() {
int x;
float y;
char z;
double w;
x = 10;
y = 9.45;

62
z = 'C';
w = 3.45E+20;
printf("Nilai dari x adalah : %i\n", x);
printf("Nilai dari y adalah : %f\n", y);
printf("Nilai dari z adalah : %c\n", z);
printf("Nilai dari w adalah : %lf\n", w);
getch();
}
Dalam bahasa C terdapat lima tipe data dasar, yaitu :
1. char format penulisan : %c
2. int format penulisan : %i, %d
3. float format penulisan : %f
4. double format penulisan : %lf
5. void tidak bertipe
2. Tipe Data, Variabel Variabel adalah tempat, kita dapat mengisi atau
mengosongkan nilainya dan memanggil kembali apabila dibutuhkan.
Setiap variabel akan mempunyai nama (identifier) dan nilai.
Contoh Nama variabel dan nilai.
username = “joni”
Nama = “Udin”
Harga = 2500
HargaTotal = 34000
Pada sebagian besar bahasa pemrograman, variabel harus
dideklarasikan lebih dulu untuk mempermudah compiler bekerja.
Apabila variabel tidak dideklarasikan maka setiap kali compiler bertemu
dengan variabel baru Pemberian nama variabel harus mengikuti aturan
yang ditetapkan oleh bahasa pemrograman yang kita gunakan. Namun
secara umum ada aturan yang berlaku untuk hampir semua bahasa
pemrograman. Aturan-aturan tersebut yaitu :
 Nama variabel harus diawali dengan huruf.
 Tidak boleh menggunakan spasi pada satu nama variabel. Spasi bisa
diganti dengan karakter underscore (_).

63
 Nama variabel tidak boleh mengandung karakter-karakter
khusus,seperti : .,+, -, *, /, <, >, &, (, ) dan lain-lain.
 Nama variabel tidak boleh menggunakan kata-kata kunci d bahasa
pemrograman
Contoh penamaan variabel
Penamaan yang benar Penamaan yang salah
namasiswa nama siswa (salah karena menggunakan
spasi)
XY12 12X (salah karena dimulai dengan angka)
harga_ total harga.total (salah karena menggunakan
karakter)
JenisMotor Jenis Motor (salah karena menggunakan
spasi)
alamatRumah for (salah karena menggunakan kata kunci
bahasa pemrograman)

Jenis-jenis Variabel
1) Variabel Numerik, dibagi menjadi menjadi 3 (tiga) macam :
 Bilangan Bulat
 Bilangan Desimal Berpresisi Tunggal atau Floating Point.
 Bilangan Desimal Berpresisi Ganda atau Double Precision.
2) Variabel Text
 Character ( Karakter Tunggal )
 String ( Untuk Rangkaian Karakter )
Deklarasi Variabel Adalah proses memperkenalkan variabel kepada
bahasa C/C++ dan pendeklarasian tersebut bersifat mutlak karena jika
tidak diperkenalkan terlebih dulu maka bahasa C/C++ tidak menerima
variabel tersebut. Deklarasi Variabel ini meliputi tipe variabel, seperti :
integer atau character dan nama variabel itu sendiri. Setiap kali
pendeklarasian variabel harus diakhiri oleh tanda titik koma ( ; ).
Bentuk penulisannya:
Tipe data nama variabel;
Contoh Deklarasi

64
char nama_siswa;
char grade;
float rata_rata ;
int nilai;
3. Konstanta adalah variabel yang nilai datanya bersifat tetap dan tidak
bisa diubah. Jadi konstanta adalah juga variabel bedanya adalah pada
nilai yang disimpannya. Jika nilai datanya sepanjang program
berjalan tidak berubahubah, maka sebuah varibel lebih baik
diperlakukan sebagai konstanta.
Sebagai contoh, jika kita membuat program perhitungan matematik
yang menggunakan nilai pi (3.14159) yang mungkin akan muncul
dibanyak tempat pada kode program, kita dapat membuat pi sebagai
konstanta. Penggunaan konstanta pi akan lebih memudahkan
penulisan kode program dibanding harus mengetikkan nilai 3.14159
berulang-ulang.
1.2. Penggunaan tipe data numeric.
Kode Program A Hasil eksekusi
Program A
#include “stdio.h” X =12
Y =2.15
int main() { Z =25
int x, z;
float y;
x = 12;
y = 2.15;
z = x * y;
cout << "X =" << x << endl;
cout << "Y =" << y << endl;
cout << "Z =" << z << endl;
return 0; }

#include <iostream>
using namespace std;
int main() {
int pil; //integer pilihan atau tipe data
float Luas,kel,phi=3.14,p,l,r,a,t; // tipe data
float luas dan keliling serta rumusnya

65
char again; // tipe data untuk mengulang eksekusi
cout<<"pilih menu: "<<endl;
cout<<"[1] Luas lingkaran"<<endl; //cout berfunsi untuk
menampilkan pilihan
cout<<"[2] Luas persegi "<<endl;
cout<<"[3] Luas Segitiga "<<endl;
cout<<endl;
cek:
cout<<"masukkan pilihan Anda :";cin>>pil;
cout<<endl;
switch(pil){

case 1: //kasus 1 untuk menginput jari-jari


cout<<"masukan jari-jari:";cin>>r;
Luas=phi*(r*r);
cout<<"Luas lingkaran adalah " <<endl;
cout<<Luas;
break;

case 2: //kasus 2 untuk menginput p,l


cout<<"masukan panjang: ";cin>>p;
cout<<"masukan lebar: ";cin>>l;
Luas=p*l;
cout<<"Luas persegi panjang adalah : "<<endl;
cout<<Luas;
break;

case 3: //kasus 1 untuk menginput a dan t


cout<<"masukan alas: ";cin>>a;
cout<<"masukan tinggi : ";cin>>t;
Luas=0.5*(a*t);
cout<<"Luas segitiga adalah :"<<endl;
cout<<Luas;
break;
default : // pesan jika memilih pilihan yang tidak ada dimenu
dengan fungsi tampil pesan pada cout
cout<<"Maaf, pilihan menu yang Anda inputkan tidak terdaftar
"<<endl;
break;
}
cout<<"Anda mau pilih lagi? [Y/N] : ";cin>>again; // berfungsi
menampilkan pesan ketika ingin memulai eksekusi program
if (again == 'Y' )
goto cek;
else// "jika" memilih pilahan N maka program akan otomatis keluar
EXIT_SUCCESS;
66
}

Kode Program B Hasil eksekusi Program B


#include <iostream> X =12
using namespace std; Y =2.15
int main() { Z =25.8
int x;
float y, z;
x = 12.8;
y = 2.15;
z = x * y;
cout << "X =" << x << endl;
cout << "Y =" << y << endl;
cout << "Z =" << z << endl;
return 0;
}
Kode Program C Hasil eksekusi Program C
#include <iostream> X =12
using namespace std; Y =2.15
int main () { Z =25.8
int x;
float y, z;
x = 12;
y = 2.15;
z = x * y;
cout << "X =" << x << endl;
cout << "Y =" << y << endl;
cout << "Z =" << z << endl;
return (0);
}
Selain itu, bahasa C juga menyediakan beberapa karakter khusus yang
disebut karakter escape, antara lain :
\a : untuk bunyi bell (alert) \b : mundur satu spasi (backspace)
\f : ganti halaman (form feed) \n : ganti baris baru (new line)
\v : tabulasi vertical \0 : nilai kosong (null)
\’ : karakter petik tunggal \” : karakter petik ganda
\r : ke kolom pertama, baris yang sama (carriage return)
\\ : karakter garis miring

67
 Character
Bersama dengan tipe data numeric, character merupakan tipe data
yang paling banyak digunakan. Tipe data character kadang disebut
sebagai char atau string. Tipe data string hanya dapat digunakan
menyimpan teks atau apapun sepanjang berada dalam tanda petik
dua (“…”) atau petik tunggal (‘…’)
Perhatikan contoh berikut.

Contoh Deklarasi tipe data

Boolean, Tipe data Boolean digunakan untuk menyimpan nilai


True/False (Benar/Salah). Pada sebagian besar bahasa pemrograman
nilai selain 0 menunjukkan True dan 0 melambangkan False. Tipe data
ini banyak digunakan untuk pengambilan keputusan pada struktur
percabangan dengan IF … THEN atau IF … THEN … ELSE.
Contoh :
Program Pascal
If Nilai >= 60 Then writeln(‘Lulus Ujian’);
Else Writeln (‘Tidak lulus’);
End if
Array, atau sering disebut sebagai larik adalah tipe data yang sudah
terstruktur dengan baik, meskipun masih sederhana. Array mampu
menyimpan sejumlah data dengan tipe yang sama (homogen) dalam
sebuah variabel. Setiap lokasi data array diberi nomor indeks yang
berfungsi sebagai alamat dari data tersebut.
Contoh:
Penggunaan
Array Var X: array[1..100] of integer;

68
Cara mengisi data pada elemen larik dalam pemrograman adalah seperti
contoh berikut,
X[1]:= 4;
X[2]:= 3;
X[3]:= 2;
X[4]:= 1;
Record atau Struct Seperti halnya Array, Record atau Struct adalah
termasuk tipe data komposit. Record dikenal dalam bahasa
Pascal/Delphi sedangkan Struct dikenal dalam bahasa C++. Berbeda
dengan array, tipe data record mampu menampung banyak data dengan
tipe data berbedabeda (heterogen).
Sebagai ilustrasi array mampu menampung banyak data namun dengan
satu tipe data yang sama, misalnya integer saja. Sedangkan dalam
record, kita bisa menggunakan untuk menampung banyak data dengan
tipe data yang berbeda, satu bagian integer, satu bagian lagi character,
dan bagian lainnya Boolean. Biasanya record digunakan untuk
menampung data suatu obyek. Misalnya, siswa memiliki nama, alamat,
usia, tempat lahir, dan tanggal lahir. Nama akan akan menggunakan
tipe data string, alamat bertipe data string, usia bertipe data single
(numeric), tempat lahir bertipe data string dan tanggal lahir bertipe data
date.
Image Image atau gambar atau citra merupakan tipe data grafik
Date Time Nilai data untuk tanggal (Date) dan waktu (Time) secara
internal disimpan dalam format yang spesifik. Variabel atau konstanta
yang dideklarasikan dengan tipe data Date dapat digunakan untuk
menyimpan baik tanggal maupun jam. Tipe data ini masuk dalam
kelompok tipe data composite karena merupakan bentukan dari
beberapa tipe data.
Berikut ini contoh tipe data dalam Visual Basic.
Dim WaktuLahir As Date
WaktuLahir = “01/01/1997”
69
WaktuLahir = “13:03:05 AM”
WaktuLahir = “02/23/1998 13:13:40 AM”
WaktuLahir = #02/23/1998 13:13:40 AM#
Subrange Tipe data subrange merupakan tipe data bilangan yang
mempunyai jangkauan nilai tertentu sesuai dengan yang ditetapkan
programmer. Biasanya tipe data ini mempunyai nilai batas minimum
dan nilai batas maksimum. Tipe data ini didukung dengan sangat baik
dalam Delphi.
Berikut ini contoh deklarasi tipe data subrange dalam Delphi.
Type
BatasIndeks = 1..20
RentangTahun = 1950..2030
Var
Indeks : BatasIndeks
Tahun : RentangTahun
Enumerasi Tipe data ini merupakan tipe data yang mempunyai elemen-
elemen yang harus disebut satu persatu dan bernilai konstanta integer
sesuai dengan urutannya. Nilai konstanta integer elemen ini diwakili
oleh suatu nama variable yang ditulis di dalam kurung. Tipe data ini
juga dijumpai pada Delphi dan bahasa pemrograman deklaratif seperti
SQL.

Berikut ini contoh deklarasi tipe data enumerasi dalam Delphi.


Type
Hari_dlm_Minggu = (Nol, Senin, Selasa, Rabu,Kamis, Jumat,
Sabtu,Minggu)
Nama_Bulan = (Nol, Januari, Pebruari, Maret,April, Mei, Juni,
Juli,Agustus, September, Oktober, Nopember, Desember)
Var
No_Hari : Hari_dlm_Minggu
No_Bulan : Nama_Bulan
70
Object Tipe data object digunakan untuk menyimpan nilai yang
berhubungan dengan obyek-obyek yang disediakan oleh Visual Basic,
Delphi dan dan bahasa pemrograman lain yang berbasis GUI. Sebagai
contoh, apabila kita mempunyai form yang memiliki control Command
button yang kita beri nama Command1, kita dapat mendeklarasikan
variabel sebagai berikut :
Contoh Penggunaan tipe data object.
Dim A As CommandButton
Set A = Command1
A.Caption = “HEY!!!”
A.FontBold = True
4. Operator Operator merupakan simbol atau karakter yang biasa
dilibatkan dalam program untuk melakukan sesuatu operasi atau
manipulasi, seperti penjumlahan, pengurangan dan lain lain.
Operator mempunyai sifat sebagai berikut :
Unary Sifat Unary pada operator adalah hanya melibatkan sebuah
operand pada suatu operasi aritmatik
Contoh : -5
Binary Sifat Binary pada operator adalah melibatkan dua buah operand
pada suatu operasi aritmatik
Contoh : 4 + 8
Ternary Sifat Tenary pada operator adalah melibatkan tiga buah
operand pada suatu operasi aritmatik
Contoh : (10 % 3) + 4 + 2
Operator Aritmatika
Operator untuk operasi aritmatika yang tergolong sebagai operator
binary adalah : Tabel Operator Aritmatika
Operator Keterangan Contoh
* Perkalian 4*5
/ Pembagian 8/2
% Sisa Pembagian 5%2
+ Penjumlahan 7+2

71
- Pengurangan 6–2

Tabel Operator Unary

Operator Keterangan Contoh


+ Tanda Plus -5
/ Tanda Minus +6

//Contoh penggunaan Operator Aritmatika


//Nama programmer :.......
#include "stdio.h"
#include "conio.h"
int main()
{
printf("Nilai dari 9 + 4 = %i\n", 9 + 4);
printf("Nilai dari 9 - 4 = %i\n", 9 - 4);
printf("Nilai dari 9 * 4 = %i\n", 9 * 4);
printf("Nilai dari 9 / 4 = %i\n", 9 / 4);
printf("Nilai dari 9 % 4 = %i\n", 9 % 4);
getch();
}
/* Penggunaan operator untuk mencetak deret bilangan genap
antara 1 – 100 */
//Nama programmer :.......
#include "conio.h"
#include "stdio.h"
int main()
{
int bil;
for (bil=1;
bil<100;

72
bil++)
{ if(bil%2==0)
printf("%5.0i", bil);
}
getch();
}
Operator Penambah dan Pengurang
Masih berkaitan dengan operator pemberi nilai, Bahasa C menyediakan
operator penambah dan pengurang. Dari contoh penulisan operator
pemberi nilai sebagai penyederhanaannya dapat digunakan operator
penambah dan pengurang.

Tabel Operator Penambah dan Pengurang


Operator Keterangan
++ Penambahan
-- Pengurangan
A = A + 1 atau A = A - 1;
disederhanakan menjadi :
A += 1 atau A -= 1; masih dapat disederhanakan menjadi A ++ atau A--
Notasi “ ++ “ atau “ -- “ dapat diletakan didepan atau di belakang
variabel
Contoh : A ++ atau ++A / A-- atau –A
Kedua bentuk penulisan notasi ini mempunyai arti yang berbeda.
 Jika diletakan didepan variabel, maka proses penambahan atau
pengurangan akan dilakukan sesaat sebelum atau langsung pada saat
menjumpai ekspresi ini, sehingga nilai variabel tadi akan langsung
berubah begitu ekspresi ini ditemukan, sedangkan
 Jika diletakan dibelakang variabel, maka proses penambahan atau
pengurangan akan dilakukan setelah ekspresi ini dijumpai atau nilai
variabel akan tetap pada saat ekspresi ini ditemukan.

73
/* Penggunaan Notasi Didepan Variabel*/
// nama programmer :.....
#include <stdio.h>
#include <conio.h>
int main() {
int a = 10, b = 5;
printf("Nilai A = %d", a);
printf("\nNilai ++A = %d", ++a);
printf("\nNilai A = %d", a);
printf("\nNilai B = %d", b);
printf("\nNilai --B = %d", --b);
printf("\nNilai B = %d", b);
getch();
}
Output :
Nilai A = 10
Nilai ++A = 11
Nilai A = 11
Nilai B =5
Nilai –B =4
Nilai B =4

/* Perbedaan operator peningkatan ++ yang diletakkan di depan dan


dibelakang operand */ //Nama programmer :.....
#include <stdio.h>
#include <conio.h>
int main()
{
int x, nilai;
x = 5;
nilai = ++x; /* berarti x = x + 1; nilai = x; */
printf("nilai = %d, x = %d\n", nilai, x);
nilai = x++; /* berarti nilai = x; nilai = x + 1; */
printf("nilai = %d, x = %d\n", nilai, x);
getch();
}
Outputnya :
nilai = 6, x = 6
nilai = 6, x = 7
/*Contoh ke-2 operator peningkatan unary */

74
//Programmer :……
#include "stdio.h"
#include "conio.h"
int main()
{
int b, nilai;
b = 15;
nilai = --b; /* berarti b = b - 1; nilai = b; */
printf("nilai = %d, b = %d\n", nilai, b);
nilai = b--; /* berarti nilai = b; b = b + 1; */
printf("nilai = %d, b = %d\n", nilai, b);
getch();
}
Ouputnya : nilai = 14, b= 14 nilai = 14, b=13
2. Komentar Program
Komentar program hanya diperlukan untuk memudahkan
pembacaan dan pemahaman suatu program (untuk keperluan
dokumentasi program). Dengan kata lain, komentar program
hanya merupakan keterangan atau penjelasan program. Untuk
memberikan komentar atau penjelasan dalam bahasa C
digunakan pembatas /* dan */ atau menggunakan tanda //
untuk komentar yang hanya terdiri dari satu baris. Komentar
program tidak akan ikut diproses dalam program (akan diabaikan).
LATIHAN
1. Sebutkan tipe data yang kamu ketahui ?
2. Buatlah algoritma menggunakan tipe data char/string ?
3. Buatkan program C untuk mencari bilangan ganjil ?

75
BAB 6 Struktur Kontrol Percabangan

A. Tujuan Pembelajaran, Setelah mengikuti kegiatan belajar diharapkan


mahasiswa dapat
1. Memahami Percabangan 1 kondisi
2. Memahami Percabangan 2 kondisi
3. Memahami Percabangan lebih dari 2 kondisi
4. Memahami Percabangan bersarang
B. Uraian Materi Penyeleksian kondisi digunakan untuk mengarahkan
perjalanan suatu proses. Penyeleksian kondisi dapat diibaratkan
sebagai katup atau kran yang mengatur jalannya air. Bila katup
terbuka maka air akan mengalir dan sebaliknya bila katup tertutup
air tidak akan mengalir atau akan mengalir melalui tempat lain.
Fungsi penyeleksian kondisi penting artinya dalam penyusunan
bahasa C, terutama untuk program yang kompleks.
1. Percabangan 1 kondisi (Tunggal) atau Struktur Kondisi IF….
Struktur if dibentuk dari pernyataan if dan sering digunakan untuk
menyeleksi suatu kondisi tunggal. Bila proses yang diseleksi terpenuhi
atau bernilai benar, maka pernyataan yang ada di dalam blok if akan
diproses dan dikerjakan.
Bentuk umum:
if(kondisi) pernyataan;
Contoh Program 1 :
/* Program struktur kondisi if tunggal untuk memeriksa suatu kondisi *
//Nama programmer :........
#include "stdio.h"
#include "conio.h"
int main()
{
float nilai;
printf("Masukan nilai yang didapat :");
scanf("%f", &nilai);
if(nilai > 65) printf("\n ANDA LULUS !!!!\n");

76
INFO Bila program tersebut dijalankan dan kita memasukan nilai 80,
maka perintah mencetak perkataan LULUS !!!! akan dilaksanakan,
namun sebaliknya bila kita memasukan sebuah nilai yang kurang dari
65 maka program akan berhenti dan tidak dihasilkan apa-apa
Contoh Program 2 :
/* Program contoh penerapan struktur kondisi if tunggal*/
//Nama programmer :........
#include "stdio.h" #include "conio.h"
int main()
{
int a,b,c,max;
printf("Masukan bil 1 : ");
fflush(stdin); scanf("%i",&a);
printf("Masukan bil 2 : ");
fflush(stdin);
scanf("%i",&b);
printf("Masukan bil 3 : ");
fflush(stdin);
scanf("%i",&c);
if((a>b)&&(a>c)) max=a;
if((b>a)&&(b>c)) max=b;
if((c>a)&&(c>b)) max=c; printf("Bil terbesar : %i \n",max);
if(max>0) printf("Bil tsb adalah bil positif \n");
if(max<0) printf("Bil tsb adalah bil negatif \n"); getch();
}
2. Percabangan Ganda
Percabangan ganda apabila terdapat 2 alternatif instruksi yang
dijalankan. Logika ini memungkinkan kompiler menjalankan salah satu
dari 2 alternatif instruksi yang ada, dan salah satu instruksi pasti
dijalankan.
Notasi algoritmik yang digunkanan :
If (kondisi)
{
Instruksi pertama
}
Else
{
77
Instruksi kedua
}

Contoh : Program memeriksa inputan apakah bilangan ganjil atau


genap. Apabila diperiksa bilangan genap maka tulis “Bilangan genap”
dan kalau bukan maka tulis “Bilangan ganjil”.
#include <stdio.h>
void main()
{
int angka;
scanf(“%d”,&angka);
if (angka % 2 == 0) printf (“Bilangan Genap”);
else
printf(“Bilangan Ganjil”);
}

3. Percabangan Lebih dari 2


Pada dasarnya hanya terdapat 2 jenis seleksi dalam struktur algoritma
pemrograman, namun bukan berarti hanya bisa dikembangkan pada 2
jenis tersebut saja. Struktur seleksi dapat dikembangkan menjadi
bentuk yang tidak terbatas dan dapat dikombinasikan kedalam bentuk
perulangan selama notasi penulisannya tidak terdapat kesalahan.
Kemampuan logika seseorang dalam merancang program dan
mengamati dari permasalahan yang ada menjadi bagian yang paling
penting dalam melakukan pengembangan dari bentuk seleksi ini.
Dibawah ini akan diberikan contoh seleksi menggunakan kondisi lebih
dari 2.
Contoh : Program untuk menentukan grade dari sebuah nilai ujian,
dengan aturan grade A untuk rentang nilai 80 – 100, grade B untuk nilai
70 – 80 dan grade C untuk nilai 50 – 70 dan grade D untuk nilai
dibawah itu.

78
#include <stdio.h>
void main()
{
int nilai;
scanf(“%d”,&nilai);
if (nilai >= 80 && nilai <= 100) print(“Grade A”);
else if (nilai >= 70 && nilai <= 80) printf(“Grade B”);
else if (nilai >= 50 && nilai <= 70) printf(“Grade C”);
else printf(“Grade D”);
}

4. Percabangan Bersarang Struktur Case Struktur case sebenarnya


memiliki fungsi yang sama dengan struktur if yang telah kita pelajari
diatas. Struktur case ini dapat meringkaskan alur logika yang terjadi
apabila diaplikasikan pada pada alur seleksi yang memiliki lebih dari
2 kondisi.
Berikut adalah notasi algoritmanya :
switch (kondisi)
{
case kondisi_1 : break;
case kondisi2 : break;
default :
}
Struktur logika seleksi menggunakan struktur case ini jauh lebih
ringkas apabila diaplikasikan pada struktur seleksi yang memiliki
kondisi lebih dari 2. Kompiler program akan menjalankan instruksi
dari struktur case dan memeriksa setiap kondisi yang ada, apabila
belum ada kondisi yang bernilai benar maka kompiler akan terus
menjalankan instruksi dibawahnya sampai ditemukan kondisi yang
bernilai benar. Namun apabila hingga kondisi terakhir diperiksa dan
tidak ditemukan kondisi yang bernilai benar maka kondisi default
yang akan dijalankan.
Contoh : Program untuk menentukan apakah karakter „%‟, spasi, „&‟
atau „$‟ yang ditekan oleh pengguna melalui keyboard.

79
#include <stdio.h>
void main()
{
int tombol;
scanf(“%d”,&tombol);
swicth(tombol)
{
case „32‟: printf(“Anda menekan tombol spasi”);
break;
case ‟36: printf(“Anda menekan tombol $”);
break;
case „37‟ : printf(“Anda menekan tombol %”);
break;
case „38‟: printf(“Anda menekan tombol &”);
break;
default : printf(“Anda tidak mematahui aturan.”);
}
}

Perbedaan yang paling jelas antara stukrut if dengan struktur case


adalah
1. Struktur if dapat menerima kondisi yang berupa operasi logika.
Sedangkan stuktur case tidak.
2. Struktur case lebih efektif apabila digunakan untuk logika seleksi
lebih dari 2 kondisi.
3. Struktur case dan sktuktur if dapat dikombinasikan kedalam satu
bagian, dengan catatan tata cara penulisan notasi tidak terdapat
kesalahan.
4. Struktur case tidak dapat melakukan pengecekan terhadap tipe
data string / kalimat

80
Bab 7 AlgoritmaPerulangan

Kompetensi Dasar :
1. Memahami struktur algoritma serta menganalisa data dalam suatu
algoritma perulangan
2. Memecahkan permasalahan dengan algoritma perulangan
Pokok Bahasan :
Perulangan dengan kondisi diawal
Perulangan dengan kondisi diakhir
Perulangan dengan kondisi akhir diinputkan user
Perulangan sebagai pencacah naik
Perulangan sebagai pencacah turun.
Tujuan Belajar :
Setelah mempelajari ini, mahasiswa diharapkan mampu
1. Menyimpulkan penerapan algoritma perulangan untuk menyelesaikan
masalah
2. Menganalisa algoritma perulangan dengan Pelbagai macam data

1. Perulangan
Salah satu bagian yang paling membedakan antara manusia dengan
komputer adalah : Komputer mampu mengerjakan instruksi dalam
hitungan ribuan bahkan jutaan kali tanpa mengenal lelah. Dalam
mempelajari algoritma pemrograman, struktur perulangan menjadi
bagian yang sangat penting untuk dipelajari.
Struktur Perulangan
Struktur perulangan terdiri dari 2 bagian, yaitu :
1. Kondisi perulangan, yaitu ekspresi yang dilakukan sebelum
pengulangan dilakukan pertama kali.
2. Body atau tubuh pengulangan, yaitu satu atau lebih instruksi yang
diulang. Selain itu biasanya di perulangan juga terdapat 2 hal
dibawah ini, antara lain : Inisialisasi : aksi yang dilakukan sebelum
81
pengulangan dilakukan pertama kali. Terminasi : aksi yang
dilakukan untuk membuat perulangan berakhir. Biasanya berupa
sebuah kondisi.
Dalam setiap bahasa pemrograman pada umumnya biasanya terdapat
3 jenis perulangan, antara lain :
1. Struktur WHILE – DO
2. Struktur Do – WHILE / REPEAT – UNTIL
3. Struktur FOR.
Ketiga jenis diatas hanyalah sebuah metode dan pada
implementasinya, notasi penulisannya (sintaks) sangat tergantung
dari setiap bahasa pemrograman yang digunakan.

2. Struktur WHILE – DO
Ciri khas dari struktur ini adalah :
Dilakukan pengencekan di awal pada kondisi sebelum menjalankan
instruksi di tubuh perulangan. Ada kemungkinan tubuh perulangan
tidak dijalankan sama sekali. Setiap kali hendak melakukan
perulangan berikutnya, selalu memeriksa kondisi perulangan. Apabila
kondisi perulangan telah memberikan nilai false / salah. Maka
perulangan akan dihentikan.

Notasi algoritmiknya adalah :


while (KONDISI){ tubuh perulangan yang berisi instruksi untuk
dijalankan.} Contoh : Progam membuat tulisan di angka 1 .. 100.

# include <stdio.h>
void main() {
int nilai_awal = 1; // inisialisasi awal. Sangat penting.
While (nilai_awal <= 100){ Printf(“/n%d”,nilai_awal);
Nilai_awal ++; // memanipulasi variabel awal agar tercapai kondisi
terminasi.
82
}}
Dalam struktur perulangan ini, ada 2 hal yang harus diperhatikan
untuk menghindari terjadinya kesalahan logika pada program.
Inisialisasi variabel awal.
Ini dimaksudkan agar ketika kompiler program melakukan
pemeriksaan terhadap kondisi awal, ditemukan kondisi yang benar.
Pada beberapa bahasa pemrograman tertentu, apabila sebuah variabel
tidak diinisialisasikan maka nilainya bisa berupa random ataupun nol.
(lihat contoh dibawah)
Manipulasi variabel awal.
Banyak terjadi kesalahan pada programmer ketika mereka membuat
program perulangan, memanipulasi variabel kondisi sangat penting
untuk menjaga program tetap sesuai dengan yang diinginkan. Ketika
kita lupa memanipulasi variabel awal, ada kemungkinan program
mengulang terus menerus (looping forever) karena kondisi yang
diinginkan tercapat terus tanpa ada perubahan. (lihat contoh dbawah)
Contoh 1 :
Program menulis angka dari 1 .. 100.

# include <stdio.h>
void main(){
int nilai_awal ; // tidak dilakukan inisialisasi awal.
While (nilai_awal <= 100){ printf(“/n%d”,nilai_awal);
Nilai_awal ++; // memanipulasi variabel awal agar tercapai
kondisi terminasi.
}}

Program diatas tidak melakukan inisialisasi awal terhadap variabel


nilai_awal, sehingga ada kemungkinan nilai_awal berisni nilai random.
Misalkan nilai_awal berisi -1200, dan secara logika -1200 memang

83
kurang dari 100. Maka program bukan mencetak 1 – 100, melainkan
mencetak -1200 – 100.
Contoh 2 :
Program menulis angka dari 1 .. 100.

# include <stdio.h> void main(){


int nilai_awal = 1; // inisialisasi awal dilakukan
While (nilai_awal <= 100){ Printf(“/n%d”,nilai_awal);
}
}

Program diatas tidak melakukan manipulasi terhadap nilai_awal ,


sehingga nilainya selalu 1. Program bukannya mencetak 1 – 100,
melainkan mencetak angka 1 terus menerus dan tidak pernah berhenti
karena kondisi perulangan selalu benar.

3. Struktur Do – WHILE / REPEAT – UNTIL


Struktur Do = WHILE / REPEAT – UNTIL hampir mirip dengan struktur
WHILE – DO. Berikut adalah ciri khas dari struktur perulangan ini.
 Tidak dilakukan pengecekan kondisi perulangan di awal eksekusi
program.
 Minimal perulangan yang terjadi di tubuh program sebanyak 1 kali
(Kerena tidak ada pengecekan kondisi perulanga di awal).
 Setiap kali hendak melakukan perulangan berikutnya, selalu
memeriksa kondisi perulangan. Apabila kondisi perulangan telah
memberikan nilai false / salah. Maka perulangan akan dihentikan.
Perbedaan paling mendasar sebenarnya terletak pada pengecekan
kondisi perulangan, struktur ini melakukan pengecekan kondisi
perulangan di akhir tubuh perulangan (bukan di awal seperti struktur

84
WHILE – DO) sehingga mengakibatkan instruksi dijalankan minimal 1
kali.
Notasi algoritmiknya adalah :
do { repeat Tubuh perulangan atau }
while (KONDISI); until KONDISI
Pada impelemntasinya notasi penulisan struktur perulangan ini juga
bergantung pada bahasa pemgoraman yang digunakan. Pembahasan ini
menggunakan bahasa pemrograman Turbo C dan leih ditekankan
kepada konsep – konsep perulangannya.
Contoh : Program menulis angka dari 1 .. 100.
# include <stdio.h>
void main(){ int nilai_awal = 1; // inisialisasi awal dilakukan
do
{Printf(“/n%d”,nilai_awal); Nilai_awal += 1;// tambahkan
nilai_awal sebanyak 1. }
while(nilai_awal <= 100); }
Program untuk meminta inputan dari keyboard, apabila pengguna
menekan tombol esc maka program akan berhenti.
#include <stdio.h>
#include <conio.h>
void main(){ char tombol;
do
{ tombol = getch(); // peminta penekanan tombol dari keyboard.
// selama
tombol yang ditekan tidak memiliki ASCII = 27
(tombol esc) maka //program akan tetap
berjalan.
}
while (tombol != 27); // program berhenti, karena pengguna telah
menekan tombol escape.
}
85
Kapan menggunakan WHILE – DO atau Do – WHILE ?
Pemilihan antara kedua struktur ini sangat tergantung pada
permasalahan yang dihadapi. Apabila sebuah program memerlukan
instruksi dijalankan dahulu dan baru diperiksa kondisinya maka
strukltur DO – WHILE harus digunakan namun apabila sebuha
program harus memeriksa kondisi perulangan terlebih dahulu dan
baru menjalankan tubuh perulangan, maka kondisi WHILE – DO
harus digunakan
4. Struktur FOR
Struktur perulangan for ini digunakan untuk perulangan yang tidak
perlu memeriksa kondisi apapun dan hanya melaksanakan perulangan
sejumlah kali tertentu. Struktur perulangan ini paling cocok untuk
proses perulangan yang telah diketahui batas akhirnya, karena kompiler
akan mengeksekusi lebih cepat daripada 2 jenis struktur perulangan
diatas.
Notasi algoritmiknya :
For (variabel awal = nilai awal; kondisi ;
faktor penaik){ Tubuh perulangan }
Contoh : Program menulis bilangan genap dari 2 – 100.
#include <stdio.h>
void main(){
int nilai_genap = 2; // inisialisasi awal. for (nilai_genap =2;
nilai_genap <= 100;
nilai_genap+=2) printf(“%d”,&nilai_genap);
}
Program diatas akan melakukan inisialisasi nilai_genap sebanyak 2, dan
setelah itu akan dilakukan pemeriksaan apakan kondisi terpenuhi /
memberikan nilai benar. Apabila kondisi terpenuhi maka tubuh
perulangna akan dijalankan (mencetak nilai dari nilai_genap) dan
kemudian menaikkan nilai_genap sebanyak 2. Setlah itu akan dilakukan
pemeriksaan kondisi sekali lagi, dan apabila kondisi tersebut terpenuhi
86
maka tubuh perulangan akan dijalankan lagi sedangkan apabila kondisi
perulangan tidak terpenuhi maka struktur perulangan akan berakhir.
Inti dari struktur perulangan ini adalah :
 Lebih cocok untuk jenis perulangan yang memiliki batas akhir yang
sudah jelas.
 Pemeriksaan kondisi awal akan dilakukan di awal. Apabila kondisi
terpenuhi, maka tubuh perulangan akan dilakukan. Apabila tidak,
maka tubuh perulangan tidak akan pernah dilakukan.
 Ada kemungkinan tubuh perulangan tidak dijalankan sama sekali.
 Memiliki proses yang lebih cepat dibandingkan bentuk DO – WHILE
atau WHLE – DO dalam proses perhitungan matematika.
5. Algoritma pengulangan (While, While bersarang, Repeat)
STATEMEN/PERYATAAN WHILE
Pernyataan while digunakan untuk perulangan yang banyaknya
perulangan tidak diketahui. Peryataan while mirip dengan peryataan if
yang melakukan pemeriksaan ekspresi boolean sebelum sebuah atau
serangkaian peryataan dilakukan.
Bentuk umum: while kondisi do Statemen Kondisi adalah ekspresi
boolean. Jika ekspresi bernilai true statemen dijalankan dan iperiksa
kembali, dan keluar dari perulangan jika bernilai false.
Contoh_While1:
Program deretangka_1; Hasil :
uses crt; 12345678910
var i:integer;
Begin clrscr;
i:=1;
while i <= 10 do begin writeln(i);
i:=i+1;
end;
readln; End.
Contoh_While2:
Program deretangka_2; Hasil :
uses crt; 10987654321
var i:integer;
Begin clrscr;

87
i:=10;
while i > 0 do begin writeln(i);
i:=i-1;
end;
readln;
End.
Contoh_While3:
Program jumlahinteger;
uses crt;
var i,batas,hasil:integer;
Begin clrscr;
write('Masukkan integer positif :');
readln(batas);
hasil:=0;
i:=0;
while i < batas do begin i:=1+1;
hasil:=hasil+1;
end;
write('Jumlah 1 sampai ',batas,'=');
write(hasil);
readln;
End.
While Bersarang
Contoh_While4:
Program bintang2;
uses crt;
var baris, kolom, jumbaris:integer;
Begin clrscr;
write('Jumlah baris : );
readln(jumbaris);
baris:=1;
while baris <= jumbaris do begin write('*' :jumbaris+1-baris);
kolom:=2;
while kolom <= (2*baris-1) do begin write('*');
kolom:=kolom+1;
end; writeln;
baris:=baris+1;
end;
readln;
End.
LATIHAN
Soal-soal peryataan WHILE:
1. Buatlah program untuk menampilkan bilangan 1 sampai dengan
5?
2. Buatlah program untuk menampilkan bilangan 5 sampai
dengan 1 ?
88
BAB 8 POINTER

1. Pengertian
POINTER adalah suatu variabel yang berisi alamat (address) suatu
variable, Ingat bahwa, pada umumnya memori suatu mesin
komputer terdiri dari unit-unit yang berturutan (diberi alamat
terurut) yang dapat dimanipulasi secara individu (per byte) atau
secara kelompok. Biasanya satu byte untuk suatu char, dua byte
berurutan untuk int, empat byte berurutan suatu long, dsb. Suatu
pointer biasanya memerlukan dua byte (di PC) empat byte (di SUN)
Sebelum dipakai, pointer perlu diberi alokasi memaori melalui
suatu deklarasi seperti variabel lainnya.Untuk mendeklarasikan
suatu pointer, diberi tanda * di depan nama pointer itu, mis. Int
*ip;
Mendeklarasikan bahwa variable ip mempunyai tipe int * (yaitu
bahwa, ip adalah suatu pointer ke int). Jadi ip dapat berisi alamat
suatu variable yang bertipe int.
Perhatikan bahwa,
int *ip, ipp;
mendeklarasikan bahwa, ip adalah suatu pointer ke int, ipp
adalah suatu variable bertipe int.
tetapi;
int *ip, *ipp;
mendeklarasikan bahwa, ip dan ipp masing-masing adalah
pointer ke int.
Operator unary * (sebagai operator inderction atau dereferencing)
apabila ditetapkan pada suatu pointer, memberikan objek
(variable) yang ditunjuk oleh pointer tersebut

89
/*contoh penggunaan unary * dan & */
# include <stdio.h>
Main(){
int a,*ip,b;
a=7;
*ip = &a;
printf (“alamat variabel a = %d\n”
“nilai (isi) pointer ip = %p\n\n”,&a, ip);
printf (“alamat variabel a = %d\n”
“nilai (isi) *ip = %d\n\n”, a, *ip);
b = *ip;
*ip= 4;
printf (“Sekarang, nilai b = %d\n”
“nilai a = %d\n dan nilai *ip = %p\n, b, a, *ip);
return(0);

90
/*contoh penggunaan unary * dan & */
# include <stdio.h>
Main(){
char *p, *q, ch1, ch2;
ch1 = ‘a’;
ch2 = ‘b’;
*p = &ch1;
*q = &ch2;
print f{“%c%c%c%c\n”,ch1,ch1,*p,*q}; → abab
*p = *q ;
printf{“%c,%c,%c,%c\n”ch1,ch2, *p,*q}; → abbb
*q = ch1;
*p = *q;
printf{“%c,%c,%c,%c\n”ch1,ch2, *p,*q}; → aaaa
return(0);
}

91
2. Pointer sebagai argumen Fungsi
Semua pemanggilan fungsi dalam bhs C bersifat caal-by-value.
Variabel yang dipakai sebagai agumen aktual suatu fungsi tidak
dapat diubah oleh fungsi tersebut. Karena berdasarkan mekanisme
caal-by-value hanya salinan nilai variabel itu yang dipakai sebagai
nilai awal bagi argumen fungsi tersebut. Seringkali suatu fungsi
perlu mengubah satu atau lebih variabel di luar fungsi tersebut,
misalnya fungsi untuk mempertukarkan nilai dari dua variabel.
Suatu variabel dapat diubah oleh suatu fungsi apabila alamat dari
variabel itu disalurkan sebagai argumen aktual kepada kepada
fungsi tersebut.

/*Program ini memperlihatkan versi fungsi tukar yang belum


benar*/
# include <stdio.h>
void tukar1 (int p, int r);
main(){
int i = 3, j = 5;
tukar1 (i, j );
prinf (“%d %d\n)” i, j, );
return;
}
/*Bermaksud mempertukarkan nilai dua variabel tetapi tak
berhasilr*/

void tukar1 (int p, int r); {


int sementara;
sementara;
sementara = p; output
p = r;
r =sementara; }

92
Suatu fungsi dapat menerima alamat variabel sebagai argumen
aktual, apabila argumen formalnya merupakan pointer. Call-by-
reference merupakan suatu cara untuk menya lurkan alamat
(address/reference) suatu variabel kepada suatu fungsi sehingga
memungkinkan fungsi tersebut mengubah nilai variabel itu. Jadi efek
Call-by-reference dapat diperoleh dalam bahasa C dengan
menggunakan pointer dan operator address-of &, walaupun bahasa C
hanya mengenal call-by- value. Dua contoh program berikut ini
memperlihatkan penggunaan pointer sebagai argumen fungsi
int kali (int * pb1, int *pb2){
Int hasil;
Hasil = (*pb1)*(*pb2);
Return hasil;

/*Program memperlihatkan suatu fungsi tukar yang benar*/


# include <stdio.h>
void tukar1 (int *p, int *r);
main()
{
int i = 3, j = 5;
tukar1 (&i, &j );
prinf (“%d %d\n)” i, j, );
return;
}
/*mempertukarkan nilai dua variabel */
void tukar1 (int *p, int *r);
{
int sementara;
sementara;
sementara = *p; output
*p = *r;
*r =sementara;
}

93
Call-by-reference dapat dicapai secara tidak langsung dalam bahasa C
dengan jalan:

1) Dekrarasikan parameter fungsi sebagai suatu pointer


2) Dereference pointer itu dengan operator*dalambody fungsi
3) Berikan alamat variabel sebagai argumen aktual pada waktu
fungsi itu dipanggil
Objekobjek const
Kata kunci const dipakai didepan nama variabel dalam deklara si
untuk menyatakan bahwa nilai variabel itu tidak akan diubah
• Apabila nilai suatu variabel tak perlu diubah atau seharusnya
tidak diubah, maka variabel itu sepatutnya dideklarasikan dengan
memakai const agar dapat dijamin tidak terjadi perubahan yang
tidak disengaja.
• Const double e = 2,71828182845905;
• Const char pesan [] = “Peringatan: ”;
• Int hexKe Int (const char bilhex[]);

94
BAB. 9 Shorting (mengurutkan data)

9.1. Pengertian
Shorting merupakan salah satu kegiatan komputasi yang sangat
penting. Aplikasinya banyak sekali, antara lain mengurutkan nilai
ujian , pengurutan kata dalm kamus, bagian dari algoritma yang
lebih rumit. input untuk algoritma shorting adalah suatu barisan
unsur-unsur yang dapat diurut. Outputnya adalah barisan unsur-
unsur terurut berdasarkan kriteria tertentu. Ada bebarapa al;goritma
sorting:
Bubble-sort, Selection-sort, Insertion-sort
Merge-sort, Quick-sort,dll
Untuk mengurutkan data dalam jumlah banyak, perlu
diperhatikan efisiensi. Ada yang efisien (Merge-sort, Quick-sort), ada
yang tidak efisisen (Bubble-sort, Selection sort, Insertion-sort.
9.2. Bubble sort
 Sederhana tapi tak efisien tak baik untuk sorting data yang
banyak
 Intinya, periksa barisan unsur dari ujung ke ujung, sepasang demi
sepasang, pertukarkan dua unsur berdampingan yang belum
terurut, Ulangi sampai semua unsur berada ditempat yang benar
 Dalam satu kali jalan (satu pass), minimal satu unsur diteruh ke
tempat yang benar, Jika ada N unsur ,maka diperlukan maksimal
N-1 pass pertukaran> Dalam pas yang ke dua, diperlukan
maksimal N-1 pertukaran. Dan seterusnya.

/*Program mengurutkan nilai dalam satu array menjadi terurut


naik, dgn algoritma sorting Bubble sort*/

# include <stdio.h>
void BubbleSorting(int arrayint[], const int bukuran);
main(){
int i, ukuran, ar [ ] =( 7,3,66,3-5,22,-77,2);

95
ukuran = sizeof (ar)/sizeof (int);
prinf (“data sebelum di sorting:\n”;
for (i=0; i<=ukuran -1;i++) prinf(“%4d”, ar[i]);
prinf (“\n”);

bubbleSort (ar,ukuran);

prinf (“setelah di sort dalam urutan naik:\n”);


for (i=0;
i<=ukuran -1;
i++) prinf(“%4d”,ar[i]);
prinf (“\n”);
return 0;
}
void BubbleSorting(int arrayInt[], const int bukuran);
{
int i, in j ;
void tukar (int *p1, int *p2);
ukuran = sizeof (ar)/sizeof (int);
for (i=0; i<=ukuran -2; i++)
for (j=ukuran -1; j>i; --j )
if (array int [j-1] > array int[j])
tukar(&arrayInt[j-1], &arrayInt[j]);
}
void tukar (Int *p1, Int*p2)
{
int sementara:
sementara = *p1; *p1 = *p2; *p2 = sementara;
` }
Ouputnya

Contoh bubble-sort

96
Untuk data ini 5 pass cukup
9.3. Selection-sort
• Mau mengurut array
A[awal] A[awal+1] .. A[akhir], sehingga memenuhi kriteria
A[awal] <= A[awal+1] <=… . . . . . . . <= A[akhir]
• Ide algoritma
for (i=Awal; i<=Akhir-1;i++)
• taruh unsur terkecil ke i dalam A[i]arrayI= AWAL

9.4. Aritmatika pada Pointer


Operasi tambah/kurang dapat dilakukan pada pointer, tapi
maknanya berbeda dengan tambah/kurang variabel biasa. Jika p,
suatu poiter ke objek dengan tipe tertentu, maka ekspresi p+1
memberikan alamat untuk objek berikutnya. Secara umum, p+i
memberikan alamat dari objek ke i setelah objek yg sekarang
ditunjuk oleh p. (i, suatu integer)
Contoh:
Misalkan p adalah pointer ke variabel bertipe int dan sati int
membutuhkan memeori 4 byte , jika p berisi alamat 3000,

97
maka : p+1 memberikan alamat 3004
p+2 memberikan alamat 3008
p+i memberikan alamat 3004 + i*4
Jika p dan q masing-masing menunju kke unsur-unsur suatu
array dan p>q, maka p-q menghasilkan suatu integer yang
menyatakan banyaknya unsur array anata p dan q.

98
99
MENYALIN STRING DENGAN Notasi Array dan Pointer
# include <stdio.h>
void salin1 (char *S2, const char *S1);
void salin2 (char *S2, const char *S1);
main(){
char string1[10], *string2 =“Hello”,
string3[10], string14[] =“ Apa kabar?”;
salin1(string1, string2);
printf(“string1=%d\n”string1);
salin2(string3, string4);
printf(“string3=%d\n”string3);
return(0); }
/*Salin string S1 ke S2, pakai notasi Array*/
void salin1 (char *S2, const char *S1);
{
int i;
for (i=0; S2[i] = S1[i]; i++);
/*tidak kerja apaapa disini*/
}
/*Salin string S1 ke S2, pakai notasi pointer */
void salin1 (char *S2, const char *S1);
{
int i;
for ( ; *S2 = *S1; S2++),S1++);
/*tidak kerja apaapa disini*/
}

Output

100
BAB. 10 Argumen untuk fungsi main()
10.1. Pengertian
Argumen untuk fungsi main()

Dua argumen argc dan argv, dapat dipakai oleh fungsi main untuk
berkomunikasi dengan Operating system.

• Variable argc memberikan jumlah argumen baris perintah


(comand line arguments) yang terdiri dari nama program (yang
executable) diikuti argumen lainnya yang diperlukan. comand line
diberikan kepada operating system untuk menjalankan program
• Array argv adalah suatu array dari pointer ke char, yaitu suatu
array of string. String-string ini adalah kata-kata yang membentuk
command line itu.
10.2 Array dari pointer

/* Program ini mencetak command-line-nya


# include <stdio.h>
main(int argc, char *argv [ ])
{
int i;
printf(“argc =%d\n”, argc);
for (i=0; i< argc; i++

101
printf(“argv = [%d]\n”, i, argv[i]);
return 0;
}
• Andaikan program ini di compile menjadi file executable bernama
coba maka perintah berikuit dalam UNIX
• coba saya suka C, menghasilkan respon di layar

• argv [argc] berisi pointer nol

10.3. Berkas File dan I/O

• Penyimpanan data dalam variable dan array di memori primer


bersifat sementara; semua data ini hilang ketika program berakhir
• File dipakai untuk menyimpan data secara permanen pada alat
penyimpan sekunder, mis disket
• File: koleksi data menurut format tertentu dalam memori (alat
penyimpan sekunder) dan mempunyai nama
• Program dapat menulis data ke file; program dapat membaca data
dari file.
• C mengandung file sebagai suatu barisan bytes yang berakhir
dengan suatu tanda end-of-file (EOF)

Suatu file n bytes dalam pandangan C


Berkas File dan I/O
• Sebelum dapat dibaca atau ditulis, suatun file harus dibuka dulu
dengan fungsi fopen yang prototipenya
FILE *fopen(const char, *nama, const char *modus;

102
Argumen pertama fopen adalah suatu string yang menya takan
nama file. Argumen kedua adalah suatu string yang menyatakan
modus/bagaimana file itu akan digunakan.
Fungsi fopen mengembalikan suatu pointer ke FILE. Tipe FILE
didefinisikan dalam <stdio.h>. Pointer ke FILE itu dipakai untuk
baca dari atau tulis ke file.
• Waktu suatu file di buka, file itu dikaitkan dengan suatu stream
yang merupakan saluran komunikasi antara program dengan file
itu.
• Membaca data suatu file pada dasarnya adalah membaca data
streamnya. menulis data ke suatu file pada dasarnya adalah
menulis data ke streamnya.

• Waktu program mulai eksekusi, tiga file secara otomatis dibuka;


1) Standard input, dengan file pointer stdin
2) Standard output, dengan file pointer stdout
3) Standard error, dengan file pointer stderr
• Stdin, terhubung ke keyboard, stdout dan stderr terhubung ke
layar monitor. Tapi stdin dan stdout dapat dialihkan ke file atau
pipe dalam lingkungan DOS/UNIX
• Modus untuk buka file: antara lain
read: “r”
write: “w”
APPEND: “a”

103
• Jika sutu file yang belum ada dibuka untuk di write atau di-
append, maka file itu akan dibuatkan
• Membuka suatu file yang sudah ada untuk di write akan
menyebabkan isi lamanya hilang
• Membuka suatu file yang sudah ada untuk di append tidak
menyebabkan isi lamanya hilang, data baru akan ditambahkan di
ujung.
• Mencoba membuka suatu file yang tidak ada untuk di read
adalah suatu error, jika terjadi error atau
fopen tidak berhasil membuka suatu file, maka
fopen akan mengembalikan pointer NULL

• File yang sudah selesai diproses harus ditutup dengan memanggil


fungsi fclose prototipenya
int fclose (FILE *filepointer);
• fclose memutuskan hubungan antara filepointer itu dengan file
yang bersangkutan yang dibuka dengan fopen dulu. File pointer
itu dapat dipakai lagi untuk file lain
104
• Untuk menulis data ke file, gunakan
int printf (“FILE *fp, const char, *format, . . . );
int fputc (int c, FILE *fp);
printf( format , argumen-argumen lain);
eqivalen dengan
printf( stdout, format , argumen-argumen lain);
putchar (c)
sama maksudnya dengan
fputc (c, stdout)
/* Program ini baca dari file, gunakan */
int fsscanf (“FILE *fp, const char, *format, . . . );
int fgetc (FILE *fp);
scanf( format , argumen-argumen lain);
eqivalen dengan
fscanf(stdin, format , argumen-argumen lain);
getchar ()
sama maksudnya dengan
fgetc (stdin)

/*menyalain dari standar input ke standar output


/ *karakter per karakter, huruf besar dijadikan huruf
/*kecil dengan memakai fungsi tolower dari standar
*/library
# include <stdio.h>
# include <ctype.h>
main ()
{
int c;
while ( (c = getchar()) != EOF)
putchar (tolower (c));
return 0;
}

105
10.4. Fungsi rekursif
• Fungsi yang memanggil dirinya secara langsung atau lewat fungsi
lain disebut fungsi rekursif. Proses pemanggilan diri itu disebut
rekursi (recursion)
• Contoh kita ingin membuat suatu fingsi rekursif untuk
memangkatkan suatu bilangan real tak-nol dengan suatu pangkat
berupa bilangan bulat

/*mennghitung x pangkat N untuk X≠0*\


double pangkat (double x, int N)
{
if (N == 0)
return 1.0;
else if (N > 0)
return (x* pangkat (x, N-1));
else */ N < 0*/
return (1/pangkat (x, -N));
}

106
• Latihan buat fungsi rekursif untuk mengalikan dua bilangan bulat
positif tanpa menggunakan operator perkalian
Jawab
int kali (int x, int N)
if (N==0)
return 0;
else
if (N>0)
return (x+ kali (x, N-1));

Ciri masalah yang dapat diselesaikan secara rekursif,adalah


masalah tersebut dapat direduksi menjadi satu atau lebih
masalah serupa yan g lebih kecil
Secara umum suatu algoritma rekursif selalu mengandung dua
macam kasus
1. satu atau lebih kasus yang pemecahan masalahnya dilakukan
dengan menyelesaikan masalah serupa yang lebih sederhana
(menggunakan recusive calls)

107
2. satu atau lebih kasus yang pemecahan masalahnya dilakukan
tanpa menggunakan menggunakan recusive calls, kasus ini
disebut kasus dasar atau kasus penyetop.
Supaya tidak terjadi rekursif yang tak berhingga, setiap langkah
rekursif haruslah mengarah ke kasus penyetop

/*contoh rekursif untuk problem manara hanoi*/

# include <stdio.h>
# include <stdlib.h>
void tulis langkah (int, int, int, int);
main(int argc, *argv[])
{
int jumlahcakram;
if (argc !=2 || atoi (argv[1]) < 1)
{
fprintf (stderr, “contoh penggunaan : %s 3\n”
argv[0]);
exit (1); }
jumlahCakram = atoi (argv [1]);
printf (“\n***Menara Hanoi***\n”;
printf (“Untuk memindahkan %d cakram dari \npasak 1”
“ke 2, lakukan langkah-langkah ini:\n\n”,
jumlahCakram);
tulislangkah (jumlahcakram, 1, 2, 3);
printf(“\n **** selesai ***\n”);
return 0;
}
/*contoh rekursif untuk problem manara hanoi*/
# include <stdio.h>
# include <stdlib.h>
void tulis langkah (int, int, int, int);
main(int argc, *argv[])
{
int jumlahcakram;
if (argc !=2 || atoi (argv[1]) < 1)
{
fprintf (stderr, “contoh penggunaan : %s 3\n”
argv[0]);
exit (1);
}
jumlahCakram = atoi (argv [1]);
108
printf (“\n***Menara Hanoi***\n”;
printf (“Untuk memindahkan %d cakram dari \npasak 1”
“ke 2, lakukan langkah-langkah ini:\n\n”,
jumlahCakram);
tulislangkah (jumlahcakram, 1, 2, 3);
printf(“\n **** selesai ***\n”);
return 0;
}

void tulislangkah
(int jumlahcakram, int awal, int akhir, int bantu);
{
if (jumlahcakram = =1)
fprintf (“Pindahkan sebuah cakram dari pasak %d ke“
“ %d. \n”,awal, akhir);
else
{
tulislangkah (jumlahcakram-1, awal, bantu, akhir);
printf(“Pindahkan sebuah cakram dari pasak %d ke“
“ %d. \n”,awal, akhir);
tulislangkah (jumlahcakram-1, awal, bantu, akhir);
\ }
}
• Bila program ini di-compile menjadi file executable bernama
hanoi,maka perintah
Hanoi 4
Akan memberikan output sbb:

109
110
BAB. 11 STRUCTURE

1. Pengertian
strukture adalah suatu koleksi dari satu atau lebih variable yang
bertype sama ataupun berbeda, dan dapat diperlakukan sebagai satu
kesatuan, bandingkan dengan array yang harus mempunyai unsur
yang bertipe sama
Contoh. structue mahasiswa {
chart *nama;
int umur;
int semester;
chart NIM;
};
Mendeklarasikan suatu strukture bernama mahasiswa yang terdiri
dari 4 anggota (member)
Strukture adalah keyword bahasa C yang mengawali deklarasi suatu
structure, Suatu deklarasi struct mendefinisikan suatu tipe data baru.
Sructure sering juga dinamakan record. Kombinasi antara pointer
dan structure memungkinkan pembentukan struktur data yang
kompleks yang diperlukan untuk penanganan masalah-maslah dunia
nyata, stuktur dapat berada disebelah kiri maupun sebelaha kanan
assigment, dapat disalurkan sebagai argumen ke fungsi dan dapat
dikembalikan sebagai nilai dari fungsi. Dua struktur tidak dapat
dibandingkan, karena mereka mungkin tidak disimpan pada byte-
byte memori yang berurutan
• Deklarasi
Contoh.
structue mahasiswa m1; (type baru memerlukan alokasi memori)
Menyatakan bahwa m1 adalah suatu variable berftipe struct
mahasiswa dan baginya disediakan memori secukupnya

111
Variabel m1 terdiri dari 4 anggota dengan nama-nama: nama,
umur, semester dan NIM.

Anggota suatu structur dapat diakses dengan:

• Menggunakan operator titik . dalam bentuk:


structure . anggota → mhs . nama
atau
(*pointer-ke-structure) . anggota → *pm . nama
• Menggunakan operator panah -> dalam bentuk:
pointer-ke structure -> .anggota → pm -> nama

/* contoh strukture */
#include <stdio.h>
/* definisi tipe baru: sruct mahasiswa;
tidak ada alokasi memori */
structue mahasiswa {
chart *nama;
int umur;
int semester;
chart NIM;
};
main ()
{
sruct mahasiswa mhs ={“unyil”,12, 1, “1294000001”};
sruct mahasiswa *pm = &mhs;
printf (“%-10s %11s %d %2d\n”,
mhs.nama, mhs.NIM, mhs.umur, mhs.semester);
printf (“%-10s %11s %d %2d\n”,
(*pm).nama, (*pm). NIM, (*pm).umur, (*pm). semester);

112
printf (“%-10s %11s %d %2d\n”,
pm → nama, pm → NIM, pm → umur, pm → semester);
mhs.nama = “melani”;
mhs.NIM = “1293000001”;
mhs.umur = mhs.umur -1;
mhs.semesttre ++;
printf (“%-10s %11s %d %2d\n”,
pm → nama, pm → NIM, pm → umur, pm → semester);
return 0;
}

2. Typedef, kunci typedef dipakai untuk membuat nama (identifier)


baru bagi suatu tipe data. Identifier lama tetap berlaku
• Nama yang dipilih dimaksudkan untuk memperjelas makna
program, dan juga seringkali untuk menyeder hanakan penulisan
Contoh. typedef chart * string;
typedef int bulat;
typedef double vektor [10];
typedef struct mahasiswa mhs;
typedef struct {
chart *nama;
chart *alamat;
int nomor;
long gaji;}
Karyawan;
• Nama-nama baru ini menjadi sinonim dari nama-nama lama ybs,
dan dapat dipakai untuk mendelakrasikan variable
Bulat I, array [5];

113
karyawan kar;
mhs daftar [50];
vektor v; atau double v [10];
STRING S = “abc”.
3. Struktur data dinamis

Struktur data seperti array adalah struktur data statis, karena


ukuran array dan alokasi memori untuk array sudah harus
ditentukan sebelum program dimulai dieksekusi dan tidak dapat
diubah selama program sedang berjalan. Struktur data dinamis
adalah struktur data yang ukuran dan alokasi memorinya dapat
ditambah atau dikurangi pada waktu program sedang berjalan.
Struktur data yang dapat tumbuh dan menciut ini sangat banyak
kegunaannya. Struktur data dinamis yang sangat mendasar yaitu
Link-List. Penguasaan terhadap link-List merupakan kunci untuk
menguasai struktur data dinamis lainnya

a. Self-referensial structure, yaitu struktur yang menunjuk pada


dirinya sendiri, Self-referensial structure adalah suatu struktur
yang mengandung anggotanya berupa pointer ke structure itu
sendiri.

Contoh structure node {


int data;
stucture node *nex;
};
Program ini menddefinisikan tipe tructure node
Struktur data yang bertipe structure node mempunyai dua anggota:
1. Data yang bertipe int
2. Next yang bertipe structure node * (dengan kata lain next
adalah pointer ke structure node)

114
Istilah Self-referensial berasal dari kenyataan bahwa pointer Next
itu menunjuk ke structure, dimana next merupakan anggotanya.
Structure-structure Self-referensial dapat digantikan bersama (di-
link) untuk membentuk struktur data seperti link, stack, queue,
dan tree.
/*contoh Link dari structure -structure Self-referensial
#include <stdio.h>
#structure node {
int data;
stucture node *nex;
};
Typedef struct node SIMPUL;
main(){
SIMPUL s1, s2, *psim;
s1.data = 100;
s1.next = &s2; /*data s1 menuju s2,data s2 dimasukan ke s1*/
s2.next = NULL; data s2 tidak menuju ke mana-mana
psim = &s1;
printf (“s1.data = %d\n”, s1.data);
printf (“s2.data = %d\n”, s2.data);
printf (“psim ->data = %d\n”, psim ->data );
printf (“psim ->next ->data = %d\n”, psim ->next->data );
Return 0; }

s1.data psim->data = 100;


s2.data psim->next->data = 275; →ambil datanya
psim menuju data ke 2, tanpa next hasilnya tetap 100
MEMORY leak = kebocoran memori
menggambarkan pointer Null

115
BAB 12. Alokasi Memori Dinamis
1. Pengertian, Alokasi dinamis ialah program yang dapat menggunakan
memori secara dinamis melalui fungsi malloc dan free. Program
dapat melakukan alokasi memori secara dinamis yaitu pada waktu
eksekusi, untuk mendapatkan memori bagi suatu variable (biasanya
structure Self-referensial) dan untuk membebaskan memori yang
sudah tidak dibutuhkan. Banyaknya memori yang dapat dialokasikan
secara dinamis tentu saja tergantung pada jumlah memori primer
yang masih tersedia. Alokasi memori dinamis biasanya melibatkan
fungsi malloc, fungsi free dan operatos sizeof
void * malloc(size_t size);
Pernyataan ini mengalokasikan ruang memori untuk suatu objek
yang ukurannya size byte. Blok memori ini tidak diinisialisasi, jika
sukses, malloc memberikan pointer ke blok memori itu; jika tidak,
malloc memberikan pointer NULL. size_t, merupakan tipe integer
unsigned yang didefinisikan dalam stdlib.h dan stddef.h. Nilai yang
dihasilkan operator sizeof bertipe size_t
void free(void *ptr);
Pernyataan ini membebaskan blok memori yang ditunjuk oleh pointer
ptr, yang tadinya diperoleh melalui fungsi malloc. Blok memori yang
dibebaskan ini dapat dialokasikan lagi untuk keperluan lain
2. Pointer ke void
Suatu pointer dapat diberi nilai dari pointer lain yang setipe. Jika
berlainan tipe, perlu pakai operator cast. Perkecualiannya: Pointer ke
void (yaitu pointer yang bertpe void *) merupakan pointer generik
yang dapat menerima nilai dari pointer apa saja dan pointer apa saja
dapat diberi nilai dari pointer ke void, tanpa operator cast. Pointer ke
void tidak dapat dideference, karena tipe objek nya tidak diketahui.
Pointer dapat diinisialisasi atau diberi nilai berupa 0, NULL, atau
suatu alamat. Pointer dengan nilai NULL tidak menunjuk apa-apa.

116
NULL adalah suatu konstanta simbolik yang didefinisikan dalam
stdio.h.

/*contoh penggunaan malloc dan free */


#include <stdio.h>
#include <stdlib.h>
void cetakpesan (void);
struct node { int data; stucture node *nex; };
Typedef struct node SIMPUL;
main(){
SIMPUL *psim, *psim1;
psim = malloc(sizeof(SIMPUL));
IF (psim != NULL){psim -> data = 100}
else {cetak pesan (); exit (1);}
psim1 = malloc(sizeof(SIMPUL));
IF (psim1){
psim1->next =275; psim ->next=psim1;}
else {
cetak pesan (); exit (1);}
printf (“psim->data =%d\n”, psim->data);
printf (“psim->next ->data =%d\n”, psim->next->data);
printf (“psim1 ->data = %d\n”, psim1 ->data );
psim1=psim ;
printf (“setelahpsim1=psim, psim1->next->data=%d\n”,
psim1->next->data );
free (psim ->next); free (psim);
return 0; }

void cetakpesan (void){


fprintf(stderr”*** malloc gagal dapatkan memori.\n”);
}

Outputnya:

117
3. Linked-List
Linked-List merupakan suatu barisan unsur/objek. Tipe objek
merupakan suatu self-referential structure. (disebut juga node/simpul)
yang mengandung alamat (pointer) untuk objek berikutnya . Satu
objek di-Linked (dihubungkan) dengan objek berikutnya oleh pointer
tersebut. Pointer penghubung untuk unsur terakhir biasanya diberi
nilai NULL.
Contoh

Ilustrasi ini menggambarkan linked-list yang terdiri dari 3 unsur.


Pointer P menunjuk ke unsur pertama. Pointer P diperlukan agar
unsur-unsur linked-list itu bisa diakses. Linked-list kosong (empty)
adalah linked-list yang tak punya unsur. Biasanya dinyatakan
dengan pointer yang bernilai NULL.
• Data disimpan dalam Linked-List secara dinamis. Unsur/simpul
dibuat menggunakan fungsi malloc pada waktu diperlukan. Suatu
simpul dapat mengandung data dengan tipe apa saja (termasuk
struct lain). Linked-list sesuai untuk aplikasi yang memuat jumlah
unsur dapat berubah-ubah atau tidak dapat diperkirakan pada
wal proses. Operator pada Linked-list antara lain; menyisipkan
(insert) unsur, menghapus (delete) unsur, mencari (search) unsur,
menentukan apakah suatu linked-list itu kosong. Berikut ini akan
diilustrasikan dalam bentuk skematis tentang: Menyisipkan suatu
unsur diposisi setelah unsur tertentu, Menyisipkan suatu unsur
antara 2 unsur tertentu berurutan, dan Menghapus unsur di
posisi setelah unsur tertentu berurutan

118
• Menyisipkan suatu unsur diposisi setelah unsur tertentu

• Menyisipkan suatu unsur antara 2 unsur tertentu berurutan

• Menghapus unsur di posisi setelah unsur tertentu berurutan

119
/*contoh penggunaan malloc dan free */
#include <stdio.h>
#include <stdlib.h>
struct simpul {
chart data;
struct simpul *next;};
typedef struct simpul SIMPUL;
typedef struct SIMPUL *PtrKeSIMPUL;
void cetakmenu (void);
void sisip(PtrKeSIMPUL*,char);
void cetaklist (PtrKeSIMPUL);
int kosong (PtrKeSIMPUL);
chart hapus (PtrKeSIMPUL*,chart;
main(){
PtrKeSIMPUL list = NULL
int pilihan;
char ch, info, buangan [80];
cetak menu();
pesan (); exit (1);}
printf (“ ? “); scanf (“%d”, &pilihan ); gets (buangan);
while (pilihan !=3){
switch (pilihan){
case 1;
printf (“Ketik satu huruf : “);
scanf(“%c”, &info); gets (buangan));
sisip(&list,info); cetak list (list);
break;.\n”);
}
case 2;
if(! Kosong (list) {
printf (“Ketik satu huruf yang mau dihapus: “);
scanf(“%c”, &info); gets (buangan);
char =hapus (&list,info);
if (ch != ‘\0’){
printf (“&c dihapus.\n”,info;); cetak list (list);}
else printf (“&c tidak ketemu .\n\n”, info);
} else printf (“list kosong .\n\n”);
break;
default;
printf (“Pilihan tidak sah.\n\”);; cetak menu ();
break;
} /* switch */
printf (“?”);
scanf(“%d”, &pilihan); gets (buangan);
} /* while */
printf ( ******selesai*******\n);
return 0;
}

120
void cetakmenu (void){
printf (“Pilihan anda:\n“
“ 1. Sisip satu unsur ke list.\n”
“ 2. hapus satu unsur dari list.\n”
“ 3. Selesai.\n”
}
/*sisip satu huruf dengan menjaga urutan menurut abjad*/
void sisip(PtrKeSIMPUL *plist, char info); {
PtrKeSIMPUL baru, sebelum, kini;
baru = malloc (sizeof(SIMPUL));
If (baru !=NULL) {
baru-> data = info;
baru->next =NULL
sebelum =NULL;
kini=*plist;
/*cari posisi*/
While (kini !=NULL && info > kini_>data){
sebelum = kini->next;
}
If (sebelum == NULL);{
baru->next = *plist;
*plist=baru; }
else {
sebelum->next=baru;
baru -> =kini;
}
} else {
printf (“%c tidak disisipkan,kehabisan memori.\n, info;
}
}
/*cetak list mulai dari unsur yang ditunjukoleh P*/
void cetaklist(PtrKeSIMPUL P){
If (P ==NULL)
Printf(“NULL\n\n);
else {
while (P !=NULL);{
printf(“%c-->”, P-> data);
P =P next;
}
Printf(“NULL\n\n;
}
/*hapus satu huruf dari list */
char hapus (PtrKeSIMPUL *plist, char info);{
PtrKeSIMPUL sebelum, kini, sementara;
if (info == (*plist->data) {
sementara = *plist;
121
*plist= *plist ->next;
Free(sementara);
return info;
}else {
Sebelum *plist;
kini = *plist->next;
while (kini != NULL && kini ->data !=info){
sebelum = kini;
kini = kini->next;
}
If (kini!=NULL;{
sementara = kini;
sebelum ->next=kini->next;
free(sementara);
return info;
}
}
Return ‘\0’;
}
/*contoh penggunaan malloc dan free */ else printf (“&c tidak ketemu .\n\n”, info); sebelum->next=baru;
#include <stdio.h> } else printf (“list kosong .\n\n”); baru -> =kini;
#include <stdlib.h> break; }} else {
struct simpul { default; printf (“%c tidak disisipkan,kehabisan
chart data; printf (“Pilihan tidak sah.\n\”);; cetak menu memori.\n, info; } }
struct simpul *next;}; (); /*cetak list mulai dari unsur yang
typedef struct simpul SIMPUL; break; ditunjukoleh P*/
typedef struct SIMPUL *PtrKeSIMPUL; /* switch */ void cetaklist(PtrKeSIMPUL P){
void cetakmenu (void); printf (“?”); If (P ==NULL)
void sisip(PtrKeSIMPUL*,char); scanf(“%d”, &pilihan); gets (buangan); Printf(“NULL\n\n);
void cetaklist (PtrKeSIMPUL); } /* while */ else {
int kosong (PtrKeSIMPUL); printf ( ******selesai*******\n); while (P !=NULL);{
chart hapus (PtrKeSIMPUL*,chart; return 0; printf(“%c-->”, P-> data);
main(){ } P =P next; }
PtrKeSIMPUL list = NULL void cetakmenu (void){ Printf(“NULL\n\n; }
int pilihan; printf (“Pilihan anda:\n“ /*hapus satu huruf dari list */
char ch, info, buangan [80]; “ 1. Sisip satu unsur ke list.\n” (PtrKeSIMPUL *plist, char info);{
cetak menu(); “ 2. hapus satu PtrKeSIMPUL sebelum, kini, sementara;
pesan (); exit (1);} “ 3. Selesai.\n” if (info == (*plist->data) {
printf (“ ? “); scanf (“%d”, &pilihan ); gets /*sisip satu huruf dengan menjaga urutan sementara = *plist;
(buangan); menurut abjad*/ *plist= *plist ->next;
while (pilihan !=3){ void sisip(PtrKeSIMPUL *plist, char info); { Free(sementara);
switch (pilihan){ PtrKeSIMPUL baru, sebelum, kini; char hapusreturn info;
case 1; baru = malloc (sizeof(SIMPUL)); }else {
printf (“Ketik satu huruf : “); If (baru !=NULL) { Sebelum *plist;
scanf(“%c”, &info); gets (buangan)); baru-> data = info; kini = *plist->next;
sisip(&list,info); cetak list (list); baru->next =NULL while (kini != NULL && kini ->data !=info){
break;.\n”); sebelum =NULL; sebelum = kini;
} kini=*plist; kini = kini->next; }
case 2; /*cari posisi*/ If (kini!=NULL;{
if(! Kosong (list) { While (kini !=NULL && info > kini_>data){ sementara = kini;
printf (“Ketik satu huruf yang mau dihapus: sebelum = kini->next; sebelum ->next=kini->next;
“); If (sebelum == NULL);{ free(sementara);
scanf(“%c”, &info); gets (buangan); baru->next = *plist; return info;
char =hapus (&list,info); *plist=baru; } } }
if (ch != ‘\0’){ else { Return ‘\0’;
printf (“&c dihapus.\n”,info;); cetak list (list);} }

122
BAB 13. enumeration (enum)

1. Pengertian, Dalam ANSI C, user dapat mnembuat tipe baru yang


disebut dengan enumeration, dengan kata kunci enum suatu tpe
enum merupakan suatu himpunan konstanta-konstanta integer
yang dipresentasikan dengan nama-nama simbolik (identifier-
identifier).
Contoh
enum hari {senin,selasa, rabu, kamis, jumat dan sabtu };
pernytaan ini mendelakrasikan suatu tipe baru: enum hari.
Enumarator-enumarator minggu, senin, selasa, rabu, kamis,
jumat dan sabtu mempresentasikan konstanta-konstan integer 0,
1, 3, 4, 5, dan 6. Kalau tidak dinyatakan lain secara eksplisit,
enumerator pertamam selalu bernilai 0. Secara otomatis
enumerator berikutnya bernilai integer berikutnya. Dalam
mendelakrasikan variable enum hari dapat dipakai sebagaimana
tipe-tipe lainnya.
Contoh:
Typedef enum hari harihari;
harihari nh1;
enum hari nh2;
nh1 = senin;
nh2 = kamis
Enumarator dapatdiberi nilai secara eksplisit
contoh
enum month{jan =1, Feb, mart, apr, may, jun, jul, aug, sept,
okt, nov, Dec};
enum buah {durian = 6, jeruk, manggis =2, duku};
pada pernyataan ini jeruk bernilai 7 dan duku bernilai 3
enum status {single = 1, lajang=1, married = 2, nikah =2};

123
tipe enum dipakai untuk memperjelas maksud program
contoh program
/*menggunakan tipe enum*/
#include <stdio.h>
enum month { jan =1, Feb, mart, apr, may, jun, jul, aug,
sept, okt, nov, Dec};
typedef enum month bulan;
main()
{
bulan b;
char *namabulan[] = {“Januari”, “Februari”, “Maret”, “April”,
“Mei, “Juni”, ”Ju;li”, “Agustus”, “September”, “Oktober”,
“November”, “Desember”};
for (b = Jan; b <= Des; b++;
printf(“%2d,%11s\n’, b,nama bulan [b]);
return 0;
}
Outputnya

Latihan
Buat versi rekursif dari fungsi cetaklist yang ada pada halaman ……..
Void cetaklist (PtrKeSIMPUL P) {
If (P ==NULL)
printf (“NULL\n\n);
else {
while ( P != NULL) {
printf (“%c --> “, p->data);
p = p ->next; }
printf (“NULL\n\n”);
}}

124
2. Sorting lagi
Mergin ialah proses penggabungan dua barisan terurut menjadi satu
barisan terurut
Contoh
4 7 10 11
di-merge dengan
-2 1 5 8 9
Menghasilkan
-2 1 4 5 7 8 9 10 11
Merge sort
1) Bagi barisan data menjadi dua subbarisan
2) Sort tiap subbarisan secara rekursif
3) Merge ke dua subbarisan yang sudah terurut itu menjadi barisan
terurut

3. Pointer ke fungsi
Nama dari suatu fungsi adalah pointer ke fungsi itu sendiri,
seperti pointer ke variable, pointer ke fungsi dapat diperlakukan
sebagai, Argumen untuk fungsi, Unsur dalam array, Nilai yang
dikembalikan fungsi, dan lain sebagainhya

Contoh Deklarasi

125
double (*pf) (double);
Pernyataan ini menyatakan bahwa pf adalah suatu pointer ke suatu
fungsi yang memerlu-kan satu argumen bertipe double dan
mengembalikan nilai double Pehatikan pernyataan berikut, bahwa
deklarasi diatas berbeda dengan
double *g (double);
Pernyataan ini menyatakan bahwa g adalah suatu fungsi yang
memerlukan satu argumen bertipe double dan mengembalikan
nilai bertipe double * (pointer ke double).

/*Contoh Penggunaan pointer-ke-fungsi */

#include <stdio.h>
Define N 5
int min (int *, int);
int jumlah (int *,int);
main(){
int a[N] = {5,7, -5, 3, 6};
pf = jumlah;
printf(“%d ==%d \n” , (*pf) (a,N), jumlah (a,N));
pf = min;
printf(“%d ==%d \n” , min (a,N), (*pf) (a,N));
return 0;
}
int min (int *a, int n); {
int I, m = a[0];
for ( i = n-1; i > 0, i- -;
if (a[i] < m) m = a[i];
return m;
int jumlah(int *a, int n); {
in i, j = a[0];
for ( i = 1; i < n, i++) j += a[i];
return j;
}

OUTPUT:

126
4. tipe-tipe dasar dalam bahasa C
Tipe-tipe Integral terdiri atas
char +unsigned char – signed char
short +unsigned short
int +unsigned
long +unsigned long
Tipe – tipe floting terdiri atas
float double long double
• Bitwise complemnet
ialah operator pembalik setiap bit dari representasi biner
argumennya. Dengan kata lain operator menghasilkan one’s
complement dari argumennya. Bit 0 menjadi 1 dan bit 1 menjadi 0

Operator operator Bitwise


Operasi bitwise dilakuan per bit, berkalu pada operand yang bertipe
integral, dalam representasi sebagi untaian bit (binary digit). Operasi
bitwise bergantung pada mesin komputer, karena mesin komputer yang
satu dengan yang lain bisa berbeda dalam hal merepresentasikan suatu
nilai sebagai untaian bit
Ada 6 operator bitwise;
- bitwise complement
<< left shift
>> right shift
& bitwise and
^ bitwise xor
| bitwise or

127
5. left shift and right shift
Operator left shift << menggeser ke kiri bit-bit dari operand
kirinya sebanyak posisi yang dinyatakan oleh operand kanannya. Bit
yang digeser keluar menjadi hilang, bit yang digeser masuk bernilai 0
Contoh

Operator left shift >> menggeser ke kanan bit-bit dari operand


kirinya sebanyak posisi yang dinyatakan oleh operand kanannya. Bit
yang digeser keluar menjadi hilang, jika operatornya unsigned, bit
yang digeser masuk bernilai 0, jika tidak, bit yang digeser masuk bisa
bit 0 atau bit tanda tergantung pada mesin computer yang digunakan
Contoh

bitwise and, bitwise xor, dan bitwise or


Operator-operator &, ^ dan|bekarja pada operandnya bit per bit

128
/*operator-operator bitwise*/
#include <stdio.h>
void cetakbit (unsigned char c); {
unsigned char bits = 0227; */bilangan oktal*/
unsigned char b1 = 0145;
unsigned char b2 = 0257;
unsigned char hasil;
printf(“bits : %#4o - - >”, bits); cetakbits (bits);
printf(“~bits : %#4o - - >”, hasil = ~bits); cetakbits (hasil);
printf(“bits << 2 : %#4o - - >”, hasil = bits <<2); cetakbits (hasil);
printf(“bits >> 3 : %#4o - - >”, hasil = bits >>3); cetakbits (hasil);
printf(“b1 : %#4o - - >”, b1); cetakbit (b1);
printf(“b2 : %#4o - - >”, b2); cetakbit (b2);
printf(“b1 && b2 : %#4o - - >”, hasail = b1&b2); cetakbit (hasil);
printf(“b1 ^ b2 : %#4o - - >”, hasail = b1^b2); cetakbit (hasil);
printf(“b1 |& b2 : %#4o - - >”, hasail = b1|b2); cetakbit (hasil);
printf(“b1 && b2 : %#4o - - >”, hasail = b1&b2); cetakbit (hasil);
return 0; }
void cetakbit (unsigned char c); {
unsigned char i, maks = 1 << 7; /*10000000*/
for(i =1; i<=8; i++) {
putchar ((c & maks) ? ‘1’ : ‘0’ ); c = c << 1;
}
putchar (‘\n’);
}
Outputnya:

Perhatikan perbedaan antara operator – operator bitwise: ~, &, |


dengan operator-operator logical: !, &&, ||

129
6. Union
Union mengikuti sintaks untuk struct, tetapi anggota-anggotanya
menempati bagian memori yang sama. Keyword union dipakai untuk
mendeklara sikan suatu tipe union yang baru
Contoh
Union int_float {
int i;
float f;
};
bahwa tipe Union int_float mempunyai anggota i dan f setelah ada
deklarasi tipe diatas, kita dapat mendelakrasikan variable-variable
bertipe union int_float.

Union int_float a, b;
Deklasari ini mengakibatkan memori dialokasi kan untuk variable a, b.
Masing-masing variable itu mendapat alokasi memori sebanyak yang
diperlukan untuk menyimpan anggota yang terbesar.
#include <stdio.h>
Union int_float {
int i
float f;};
typedef union int_float Bilangan;
main(){
BILANGAN b;
printf(“sizeof (BILANGAN) =%d \n”, size (BILANGAN));
printf(“sizeof (int) =%d \n”, size (int));
printf(“sizeof (float) =%d \n”, size (float));
b.i = 1234;
printf(“i: %10d f:%16.10e\n”, b.i, b.f);
b.f = 1234.;
printf(“i: %10d f:%16.10e\n”, b.i, b.f);
return 0;
};

130
BAB 14. Linier search dan Binary search
1. Pengertian
Untuk melacak suatu nilai tertentu dalam sebuah array yang belum
di-short, kita dapat gunakan pelacakan linier. Jika datanya sudah di-
short, ada cara yang secara umum lebih efisien, yaitu pelacakan niner
Contoh implementasi pelacakan linier;
/*lacak linier:mengembalikan indeks
*N== a[i] jika N ada dalam array a[awal] .. A[akhir];
* mengembalikan -1 jika tidak */
int lacaklinier (int N, int a[], int awal, int akhir) {
int i; enum {tidak, ya} ketemu;
ketemu = tidak; I = awal;
While (i <= akhir && !ketemu)
if (N ==a[]) ketemu = ya ; else i++;
if (ketemu ) return i; elese return -1;
}
0utput di PC 486:

Union dipakai:
a) Apabila diperlukan interpretasi ganda untuk satu bagian memori
tertentu, atau
b) Untuk menghemat memori , dengan membolehkan bagian memori
yang sama dipakai untuk tipe-tipe yang berlainan

Programer bertanggungjawab penuh tentang interpretasi mana yang


harus dipakai pada keadaan tertentu

131
Contoh implementasi pelacakan linier;
/*lacakbinier:mengembalikan indeks
*N== a[i] jika N ada dalam array a[awal] .. A[akhir] yang
sudah terurut; mengembalikan -1 jika tidak ketemu*/
int lacaklinier (int N, int a[], int awal, int akhir) {
int rendah, tengah, tinggi; enum {tidak, ya}ketemu;
rendah = awal; tinggi = akhir; ketemu = tidak;
While (rendah i <= tinggi && !ketemu)
if (N ==a[tengah]) ketemu = ya ;
else if (N <a [tengah]) tinggi = tengah – 1;
elese rendah = tengah +1; }
If (ketemu) return tengah; else return -1;
}
2. File lanjutan
Suatu file dapat dibuka dengan fungsi fopen dalam berbagai modus
modus arti
“w” Text file for writing
“r” Text file for reading
“a” Text file for appending
“rb” Binary text file for writing
“wb” Binary text file for writing
“ab” Binary text file for appending
“r+” Text file for reading and writing
“w+” Text file for writing and reading
“a+” Text file for writing and reading
“rb+” Binary text file for reading and writing
“wb+” Binary text file for writing and reading
“ab+” Binary text file for appending and reading

Text file:
Diinterpretasikan sebagai suatu sequence dari character-charakter
teks.
Binary file:
Diinterpretasikan sebagai suatu sequence dari byte
132
Text-file lebih portable, tetap binary–file lebih cepat untuk diproses
Untuk file yang dibuka dengan modus yang mengandung +, antara
operasi abaca dan tulis perlu diselingi dengan call ke salah satu
fungsi-fungsi berikut fflush, fseek, fsetpos, rewind.
Suatu yang sedang diproses dikaitkan dengan suatu variable
(indicator posisi file ) yang berisi file-offset, yaitu suatu nilai yang
menyatakan posisi byte yang sedang dibaca atau ditulis gterhadap
posisi awal file.
Biasanya suatu file diproses dari awal file ke akhir file secara
sekuensial. Tetapi file dapat juga diakses secara random, caranya
ialah indicator posisi file itu diberi nilai yang sesuai, dengan
memaki fungsi-fungsi:
- Int fseek (FILE *fp, long offset, int patokan);
- Long ftell (FILE *fp);
- Void rewind (FILE *fp);
- Int fgetpos (FILE *fp, fpos_t *pos);
- Int fgetpos (FILE *fp, const fpos_t *pos);
Fungsi fscanf dan fprintf dipakai untuk memproses file (melakukan
I/O menurut format tertentu. Untuk mempproses file secara
mentah (unformatted I/O, dapat digunakan fungsi fread dan fwrite.

3. Size_t fread (void *ptr, Size_t ukuran, Size_t jumlah, FILE *fp);
Fungsi fread membaca maksimum jumlah * ukuran byte dari file
yang ditunjuk oleh fp dan menyimpannya dalam array yang
ditunjuk oleh ptr. Nilai yang dikembalikan ialah jumlah unsure
yang berhasil ditransfer (bisa kurang dari jumlah, jika end-of-file
muncul). Jika end-of-file dijumpai, maka indicator end-of-file dibuat
on. Jika ukuran atau jumlah bwernilai nol, maka fread tidak
melakukan apa-apa kecuali mengembalikan nilai nol.

133
Size_t fwrie (const void *ptr, Size_t ukuran, Size_t jumlah, FILE *fp);
Fungsi fwrite melakukan kebalikan dari fread. Jika nilai yang
dikembalikan kurang dari jumlah berarti ada error. Jika jumlah
dan ukuran bernilai nol, maka fwrie tidak melakukan apa-apa
kecuali mengembalikan nilai nol.
/*Membuat suatu file untuk diakses secara random*/
#include <stdio.h>
#include <stdlib.h>
#define JMLrecord 1000
typedef
struct {
int nomor;
char nama[20];
char alamat[25];
int nilai;
} MHS;
main() {
int i;
mhs blankrecord = {0, “”, “”, 0};
FILE * fp;
fp = fopen (“mhs.dat”, “wb”);
if ( fp ==NULL) {
fprintf (stdeer, “Tidak berhasil buka file .\n”);
exit (EXIT_FAILURE);
}for ( i=1; i<= JMLrecord; i++;
fwrite (&blankrecord, sizeof (MHS), 1, fp);
fclose (fp);
printf (“ *** selesai***\n);
return 0;
}

134
/*Menulis ke file yang dibuat pakai program sebelum ini*/
#include <stdio.h>
#include <stdlib.h>
#define JMLrecord 100
typedef struct {
int nomor;
char nama[20];
char alamat[25];
int nilai;
} MHS;
main() {
int i;
mhs blankrecord = {0, “”, “”, 0};
FILE * fp;
fp = fopen (“mhs.dat”, “rb+”);
if ( fp ==NULL) {
fprintf (stdeer, “Tidak berhasil buka file .\n”);
exit (EXIT_FAILURE);
}
printf (“ketik nomor mahasiswa”
“(1 s/d %d, 0 untuk berhenti)\n?”, JMLrecord);
Scanf(“%d”, &mahasiswa.nomor);
While (mahasiswa.nomor !=0) {
Printf (“Ketik nama, alamat, nilai\n? “);
Scanf (“%s%s%d”, mahasiswa.nama,
mahasiswa.alamat, &mahasiswa.nilai);
fseek (fp, (mahasiswa.nomor -1) * sizeof(MHS), seek_set);
fwrite (&mahasiswa, sizeof(MHS), 1, FP);
printf (“Ketik nomor mahasiswa\n? “);
Scanf (“%d”, &mahasiswa.nomor);
}
135
fclose (fp);
return 0;
Contoh interaksi

/*Membaca file yang diisi pakai program sebelum ini*/


#include <stdio.h>
#include <stdlib.h>
typedef struct {
int nomor;
char nama[20];
char alamat[25];
int nilai;
} MHS;
main() {
mhs blankrecord = {0, “”, “”, 0};
FILE * fp;
fp = fopen (“mhs.dat”, “rb”);
if ( fp ==NULL) {
fprintf (stdeer, “Tidak berhasil buka file .\n”);
exit (EXIT_FAILURE);

136
}
printf (“%-6s%-21s%-26s%7s\n”, “Nomor”,
“nama Mhasiswa”, “Alamat Mahasiswa”, “Nilai”);
fread (&mahasiswa, sizeof (MHS), 1, fp);
while (!feof(fp)) {
if (mahasiswa.nomor !=0)
printf (“%-6s%-21s%-26s%7s\n”,
mahasiswa.nomor, mahasiswa.nama,
mahasiswa.alamat, mahasiswa.nilai);
fread (&mahasiswa, sizeof (MHS), 1, fp);
}
fclose (fp);
return 0;
}
Output :

Dalam standart-library stdio tersedia fungsi tmpfile yang membuka


suatu file sementara dalam modus “wb+”. File sementara ini akan
dihapus secara otomatis pada skhir eksekusi program. File ini juga akan
dihapus apabila ia ditutup dengan fclose.

137
Program berikut ini memperlihatkan contoh penggunaan fungi tmpfile
#include <stdio.h>
#include <stdlib.h>
main() {
FILE*fp, *pfsem;
Char nama [15];
Int c, bil1, bil2;
fprintf (“Ketik nama file yang akan berisi\n”
“pasangan-pasangan bilangan bulat:\n”;
scanf ( “%s”, nama);
pf = fopen (nama, “r+”);
if (pf ==NULL) {
printf (‘Tidak berhasil buka file %s.\n”, nama)
exit(EXIT FAILURE);
}
pfsem = tmpfile (); /* buka file sementara*/
if (pfsem == NULL
printf (‘Tidak berhasil buka file %s.\n”, nama)
exit(EXIT FAILURE);
}
fsnaf (pf, “%d”, bil1, bil2);
while (!feof(pf)) {
printf (pfsem, “%d + %d = %d\n”, bil1, bil2, bil1 +bil2);
}
rewind (pf‘), rewind (pfsem); /*balik ke awal*/
while ( (c = fgetc(pfsem)) != EOF) {
fput (c, pf);
}
fclose (fp); fclose (pfsem);
return 0;
}
138
Jika file masukan berisi;
-8 105
36 69
225 -25
Maka pelaksanaan program tersebut dengan file masukan akan
mengubah isi file masukan menjadi:
-8 105 = 94
36 69= 105
225 -25 = 200

4. PREPROSESOR
Ada suatu tahap yang dilalui oleh suatu program C sebelum ia
dikompilasi menurut tata bahasa C, yaitu tahap preprocessing yang
dilakukan oleh processor C. Preprocessing mengolah baris-baris
program yang dimulai dari #. # mengawali suatu preprocessor-
directive #include <namafile> atau #include “namafile”. directive
#include menyuruh preprosecessor menaruh salinan dari suatu file
ditempat directive tersebut. Jika nama file diapit tanda <>, maka
preprocessor akan mencari file itu dalam directory-directory baku
tertentu menurut system, misalnya /user/include dalam UNIX. Jika
nama file diapit tanda “ ” maka preprocessor akan mencari file itu
dalam directory yang memuat file yang sedang dikompilasi.
Misalnya,
#include <stdio.h>
#include “msort.h”
#include “abc.c”
Directive #include sangat berguna unutk program besar yang terdiri
dari berbagai >h file dan .c file. Directive dengan #define dapat
muncul dalam 2 bentuk
#define identifier teksPengganti
#define identifier (identifier ….. identifier) teksPengganti

139
Untuk setiap directive #define bentuk pertama, preprosesor
mengganti setiap keberadaan identifier setelah directive itu dengan
teksPengganti sebelum program dikompilasi, misalnya
#define PI 3,14
Menyuruh preprosesor mengganti setiap konstanta simbolik PI yang
muncul setelah directive tersebut dengan 3.14 sebelum program
dikompilasi. Mekanisme ini berguna untuk memperjelas program
dan mnempermudah perubahan konstanta. Tetapi hati-hati, semua
teks yang muncul setelah identifier pertama akan dianggap sebagai
teksPengganti. Macra tanpa argument berlaku sebagai konstanta
simbolik. Untuk macro yang berargumen, argument-argumennya
disubsutusikan dalam teks penggantipada waktu macro itu di-
expand oleh preprocessor (di-expand, maksudnya ialah identifier dan
argument-argumennya digantikan oleh teks pengganti dalam program)
Contoh
#define kuadrat (x) ((x)*(x))
Setelah itu dalam program dapat ditulis
x = kuadrat (a+b);
yang akan di-expand menjadi
x = ((a+b)*(a+b));
Perhatian, defines-definisi berikut mengandung masalah
#define kuadrat (x) x*x
#define kuadrat (x) ((x) * (x))
#define kuadrat (x) (x)*(x)
#define kuadrat (x) ((x)*(x));
Mengapa ?
Macro sering digunakan untuk menggantikan pemanggilan fungsi
dengan inline-code. Inline-code lebih efisien karena tidak perlu
melalui proses pemanggilan fungsi yang cukup memerlukan waktu.
Fungsi-fungsi dari standard library sering didefinisikan sebagai
macro, misalnya getchar dalam stdio.h didefinisikan sebagai berikut
140
#define getchar () getc (stdin)
Contoh
#define min(x,y) (((x) < (y)) ? (x) : (y))
Membuat macro yang dapat dipakai untuk mencari minimum dari
dua nilai. Definisi dari suatu macro dapat dihapus dengan directive:
#undef identifier
Perhatian ! Ekspresi dengan efek sampingan jangan dipakai sebagai
argument dari macro, karena argument macro mungkin dievaluasi
lebih dari satu kali
Contoh, min (i++, j++) /*tidak benar*/, apa yang terjadi

141
142

Anda mungkin juga menyukai