Anda di halaman 1dari 110

Modul kelas Memulai Pemrograman Dengan C dalam bentuk cetak (buku)

maupun elektronik sudah didaftarkan ke Dirjen HKI, Kemenkumham RI.


Segala bentuk penggandaan dan atau komersialisasi, sebagian atau seluruh
bagian, baik cetak maupun elektronik terhadap modul kelas Memulai
Pemrograman Dengan C tanpa izin formal tertulis kepada pemilik hak cipta
akan diproses melalui jalur hukum.

Hak cipta dilindungi oleh Undang-undang © Dicoding 2017 – 2021

Pengenalan Kelas
Belajar bahasa pemrograman sama halnya dengan belajar bahasa apa
pun, dimulai dengan secara intuitif mengenal dan langsung memakai
bahasa tersebut untuk keperluan sehari-hari yang penting sesuai
kebutuhan, bukan dari teori bahasa. Seseorang dengan bahasa ibu
bahasa Indonesia, saat belajar bahasa Inggris, akan mulai mengenal
bahasa Inggris melalui “membaca” contoh-contoh kalimat sederhana,
yang sangat diperlukan dalam kehidupan sehari-hari, seperti mulai
menyapa “Selamat pagi”, “Jam berapa?”. Melalui contoh tersebut, ia akan
belajar kosakata penting dan pola kalimat misalnya kalimat pernyataan
SPOK (Subyek, Predikat, Obyek, Keterangan); struktur kalimat tanya,
kalimat aklamasi, dan lain-lain. Selanjutnya baru beranjak ke konsep yang
lebih kompleks yang ada pada bahasa asing tersebut, dan mengenal tata
bahasa secara lebih formal dan mulai menulis. Belajar pemrograman
pada hakekatnya sama dengan belajar bahasa natural: seseorang belajar
dari “membaca” program terlebih dulu, dari pada “menulis” kode
program. Proses menulis kode dapat dimulai setelah Anda membaca
contoh-contoh program yang menjadi pola pembangun program
kompleks. Bedanya dengan belajar bahasa natural, teks dalam bahasa
pemrograman yang ditulis bukan dilafalkan dan dipahami sebagai teks
“statik”, melainkan juga dapat dipahami maknanya saat dieksekusi oleh
mesin.
Tutorial ini disusun dengan pendekatan “3N” yaitu Niteni – Niru –
Nambahi yang diterapkan pada pembelajaran pertama bahasa
pemrograman. Seperti halnya belajar bahasa lain, belajar pemrograman
dalam bahasa C diawali dengan belajar membaca program kecil dalam
bahasa C bukan hanya memahami maknanya sebagai teks “statik”, tetapi
juga eksekusinya dengan mencoba mengeksekusi. Setelah itu,
mempelajari lebih dalam mengenai “tata bahasa” (grammar) dari
bahasanya untuk menyusun kalimat, paragraf dan wacana yang lebih
kompleks; yang dalam pemrograman adalah untuk melakukan problem
solving dengan menuliskan program dalam bahasa C. Contoh diberikan
untuk mengarahkan siswa belajar fokus ke semantik, dan bukan sintaks
dari bahasa. Penulisan program dalam sintaks bahasa tertentu (dalam hal
ini bahasa C) diharapkan mengalir secara natural.

Kecakapan Membaca di sini mohon diartikan sebagai : Reading literacy is


understanding, using, evaluating, reflecting on and engaging with texts in
order to achieve one’s goals, to develop one’s knowledge and potential
and to participate in society.

Pendekatan 3N juga mendasari metoda konstruktivis di mana siswa


mendekonstruksi dan mengkonstruksi pengetahuan dari semua yang
dipelajarinya. Di bagian awal, siswa diajak untuk mengenali program-
program kecil yang isinya adalah elemen pembangun program: ekspresi,
assignment, kondisional dan loop. Pada kenyataannya, sebuah program
mengandung campuran dari elemen pembangun tersebut. Siswa perlu
meramu dan mengintegrasikan pengetahuan dengan "membongkar"
sebuah program contoh dan mengambil elemennya untuk diadaptasi
kemudian mengkonstruksi kembali sebuah program utuh untuk
menyelesaikan persoalan yang dihadapinya.

Ini adalah hakekat dari Computational Thinking. Dekomposisi persoalan


dilakukan dengan memecah program menjadi bagian kecil elemen
sintaktikal, untuk membentuk solusi yang utuh. Pattern (pola) diharapkan
dapat terbentuk mulai dari elemen dasar sintaktikal yang dipelajari
melalui program kecil, menuju pola solusi untuk jenis-jenis persoalan
pembangun persoalan lebih besar.

Dengan dasar pemikiran dan pendekatan tersebut, Memulai


Pemrograman Dasar dengan Bahasa C ini terdiri atas beberapa modul.

 Pendahuluan : Memperkenalkan sejarah C, contoh aplikasi, dan


istilah-istilah yang dipakai. Juga dibahas IDE yang disarankan.

 Program Kecil dalam Bahasa C : Mengenalkan bahasa C dengan


program terkecil yaitu Halo Dunia.
 Inisialisasi dan Assignment : Mengenalkan apa itu variabel dan
tipe dasar yang ada, seperti integer(bilangan bulat), bilangan riil
(bilangan pecahan), dan karakter (huruf). Serta memahami dua cara
yang dapat dilakukan untuk mengisi nilai dari sebuah variabel, yakni
inisialisasi dan assignment.

 Konstanta : Mengenalkan arti konstanta, yakni variabel yang tidak


dapat diubah. Serta Mengenalkan perbedaan antara konstanta
dengan variabel.

 Baca-Tulis : Mengajarkan bagaimana memasukkan suatu nilai ke


variabel.

 Operasi Sederhana dengan Komputer : Mengajarkan operasi-


operasi yang ada di dalam C, seperti aritmatika, boolean,
perbandingan, dll.

 Instruksi Kondisional : Mengenalkan instruksi kondisional agar


program dapat berjalan sesuai alur yang ditetapkan.

 Instruksi Pengulangan : Mengenalkan instruksi pengulangan agar


program dapat mengulangi instruksi secara berulang, seperti for,
while-do, do-while, dan for.
 Array-Tabel : Mengenalkan array untuk menyimpan banyak nilai
dalam suatu bentuk matriks.

 Subprogram: Mengenalkan subprogram fungsi dan prosedur, yaitu


sebuah abstraksi suatu proses komputasi yang dapat dipanggil oleh
sebuah program.

 Penutup : Menguji pemahaman mengenai bahasa pemrograman C


melalui 5 latihan untuk memperdalam konsep pemrograman C
dalam sebuah program sederhana, seperti operasi komputasi,
instruksi kondisional, instruksi perulangan, tabel atau array, serta
fungsi dan prosedur.

Materi Pembelajaran

 Materi Bacaan Elektronik

Materi yang ada dalam kelas ini mayoritas berupa teks atau tulisan. Mengapa

demikian? Karena kami menemukan bahwa dalam proses belajar di bidang

pemrograman, bentuk materi pembelajaran yang paling efektif untuk diingat,

dimengerti, dan yang terpenting, dipraktikkan, adalah dalam bentuk teks.

 Forum Diskusi

Setiap kelas memiliki sebuah forum diskusi yang dapat Anda gunakan untuk

bertanya (dan menjawab) mengenai materi kelas. Instruktur kami yang terdiri

dari Curriculum Developer dan Academy Code Reviewer siap membantu

Anda melalui forum diskusi ini.

Tak hanya kami, Anda pun dapat berpartisipasi. Untuk meningkatkan retensi

ilmu yang Anda punya, berbagi adalah salah satu kuncinya. Jadi, silakan aktif

dan saling membantu di dalam forum.


Jika Anda menemui kendala perihal situs Dicoding dan administrasi kelas,

tanyakan kepada kami melalui tombol chat di kanan bawah layar Anda ketika

membuka situs Dicoding. Jangan gunakan forum diskusi ya karena itu salah

alamat.

Evaluasi Pembelajaran

 Ujian (Kuis, Ujian Akhir Kelas, Knowledge Check)

Terdapat berbagai jenis ujian di kelas guna mengecek pemahaman Anda pada

materi pembelajaran. Ketersediaan ujian beserta jenis ujian yang tersedia pada

setiap kelas dapat berbeda-beda. Setiap pertanyaan dalam ujian pasti

mencakup materi yang telah dibahas. Sehingga jika ada pertanyaan yang tidak

dapat Anda jawab, pastikan Anda mengulang kembali pembelajaran.

Ekspektasi
Dengan banyaknya jumlah siswa Dicoding Academy, kami tidak
mengharapkan siswa untuk membaca semua diskusi atau komentar pada
forum diskusi. Sebaliknya, bacalah hal-hal yang menurut Anda menarik
dan dapat membantu Anda dalam menyelesaikan kelas. Lebih baik lagi,
jika Anda dapat membantu siswa lainnya dengan memberikan jawaban di
bidang yang Anda pahami. Berbagi dalam forum diskusi ini dapat pula
membantu meningkatkan retensi ilmu Anda.

Peraturan paling penting adalah bersikap sopan dan memperlakukan


semua siswa lain dan instruktur, dengan hormat. Pelanggaran etika ini
dapat berakibat pada dikeluarkannya Anda dari kelas.
Anda akan memiliki akses ke forum diskusi kelas selama Anda aktif
terdaftar ke kelas ini. Saat masa belajar Anda sudah habis, maka forum
diskusi tidak akan dapat diakses. Namun jika Anda sukses menyelesaikan
kelas (lulus dan sampai mendapatkan sertifikat kompetensi dari
Dicoding), maka Anda tetap dapat mengakses forum diskusi kelas ini
walau masa belajar Anda untuk kelas ini telah habis.

Sebelum Memulai Bertanya


1. Sebelum membuat diskusi baru, gunakan fitur pencarian untuk cek
diskusi lama terlebih dahulu. Problem Anda mungkin pernah
dibahas dan dijawab solusinya, dalam forum. Dengan begitu, Anda
pun tidak perlu menghabiskan waktu untuk bertanya dan untuk
menunggu jawaban kembali.

2. Namun jika tidak menemukan diskusi lama dengan topik yang sama
dengan masalah Anda, silakan membuat diskusi baru. Simak cara
dan langkah berikut ini: https://help.dicoding.com/academy-
dicoding/aturan-membuat-pertanyaan-di-forum-diskusi-kelas/ .

Fitur Bermanfaat
 Mencari Posting
Anda dapat mencari topik atau diskusi menggunakan tiga cara yang
tersedia pada halaman utama forum diskusi.
1. Gunakan fitur “Cari Judul Diskusi” untuk mencari topik
berdasarkan judul atau pertanyaannya.
2. Gunakan fitur “Pilih Berdasarkan Modul” untuk melihat diskusi
berdasarkan modul kelasnya.
3. Gunakan fitur “Keyword Populer” untuk melihat diskusi
berdasarkan Keyword yang paling sering ditanyakan.
 Upvote dan Downvote Komentar pada Diskusi
Saat membuka sebuah diskusi, Anda akan menemukan komentar
beserta jawaban dari siswa dan instruktur di bagian bawah. Pada
setiap komentar terdapat tombol panah atas (˄) dan panah bawah
(˅). Klik tombol panah atas (˄) jika Anda merasa komentar atau
jawaban tersebut bijaksana, menarik, dan bermanfaat. Gunakan
tombol panah bawah (˅) jika Anda merasa komentar atau jawaban
tersebut tidak sopan, tidak membantu, atau bahkan tidak tepat.

Gunakan Fitur Upvote dan Downvote ini seperti arahan di atas,


sehingga kualitas komentar dan jawaban pada forum diskusi dapat
terjaga dengan baik.

 Approved Answer
Jika terdapat komentar/tanggapan berupa solusi terbaik dari
permasalahan yang Anda tanyakan, maka tandai komentar tersebut
sebagai jawaban terpilih. Caranya dengan menekan tombol
“Jawaban Terpilih” di sisi kanan atas komentar.

Fitur ini juga akan mempermudah siswa lainnya dengan pertanyaan


yang sama untuk menemukan titik terang solusinya.

Mengenal Teman Sekelas Anda


Berhubungan baik dengan teman sekelas dan instruktur merupakan
bagian penting dari kelas ini karena mereka dapat membantu jika Anda
mengalami kendala dalam pemahaman materi.

Oleh karena itu, kami ingin Anda meluangkan waktu untuk mencairkan
suasana dan saling mengenal. Membangun interaksi dengan siswa lain
akan membuat pengalaman belajar Anda jauh lebih menyenangkan dan
menarik.

Beberapa hal yang dapat Anda tulis pada perkenalan diri:


 Siapa Anda dan dari mana Anda berasal?
 Apa pekerjaan atau pendidikan Anda saat ini?
 Kenapa Anda mengambil pelatihan ini? Apakah mungkin karena
Anda sedang mengejar perubahan dalam karir, atau lainnya?

Cara Belajar Pemrograman


Pemrograman merupakan kemampuan yang harus selalu diasah. Kita
harus banyak-banyak membaca dari berbagai sumber dan bersahabat
dengan dokumentasi sebuah program. Selain membaca teori, kita juga
harus mempraktikkan apa yang telah kita pelajari. Bahkan jika dihitung
dari persentase, disarankan untuk 80% praktik dan 20% teori. Sehingga
waktu untuk menulis kode lebih banyak daripada teori. Ketika Anda
belajar teori lebih banyak, maka Anda juga harus meningkatkan
intensitas praktik Anda.

Dengan mempraktikkan teori yang dipelajari maka kita akan selalu


teringat kuat di dalam otak. Semisal kita membaca teori selama 5 menit,
maka kita harus meluangkan waktu untuk mempraktikkannya 5 kali lebih
banyak yaitu sekitar 25 menit. Konsep belajar pemrograman sarat praktik
inilah yang akan memudahkan Anda untuk mengingat dan meresapi
setiap maksud dari teori yang Anda pelajari. Berikut beberapa tips yang
dapat membantu Anda dalam belajar pemrograman:
Mengatur Waktu

Tidak ada waktu merupakan alasan klasik ketika belajar pemrograman.


Untuk mengatasi hal tersebut kita harus memiliki target belajar. Misalnya
dalam waktu satu minggu harus sudah bisa memahami konsep
perulangan dalam pemrograman. Target lain yang bisa dicoba adalah
target waktu, misal belajar 3,5 jam per minggu atau sama dengan 30
menit per hari. Durasi waktu belajar bisa disesuaikan dengan
kemampuan dan waktu yang Anda miliki.

Dengan memiliki target dan mengalokasikan waktu, maka Anda akan


lebih terarah dan memiliki pencapaian belajar yang lebih terukur. Perlu
diperhatikan juga bahwa bukan berarti semakin banyak waktu yang Anda
alokasikan untuk belajar akan menghasilkan hasil yang baik. Misal Anda
mengalokasikan waktu 60 jam per minggu untuk belajar pemrograman
atau lebih banyak. Hasil yang didapatkan bisa saja kurang efektif karena
terlalu lelah atau memaksakan diri. Kecuali kalau Anda benar-benar tidak
terpaksa melakukannya, tetapi cara tersebut sebaiknya dihindari.
Mengapa?

Otak kita bila dipaksakan, maka ia akan memproses informasi secara


tidak efektif. Selain itu bisa menciptakan sebuah illusion of
proficiency atau bisa disebut ilusi kemahiran. Memang benar semua
seolah teringat dengan jelas di kepala Anda dan tampak mudah. Namun,
ketika berhenti belajar misal dalam waktu sebulan, maka Anda dapat lupa
apa yang telah dipelajari sebelumnya atau sering disebut dengan
forgetting curve atau kurva lupa [1].

Untuk mengatasi permasalahan di atas maka kita dapat menerapkan


pola belajar dalam waktu singkat dan dilakukan secara kontinu. Hal
tersebut dilakukan supaya otak memiliki waktu untuk memproses setiap
informasi dan tidak cepat lelah. Maksud dari kontinu di atas adalah
dilakukan secara berulang-ulang dan mengingat kembali apa yang telah
dipelajari. Misal Anda telah belajar selama 30 menit pada pukul 19.00,
maka keesokan harinya sebelum Anda memulai belajar kembali harus
mengingat apa yang telah dipelajari kemarin. Lakukan secara teratur
maka proses belajar Anda akan menyenangkan.
Perhatikan Kondisi Tempat Belajar

Lingkungan tempat Anda belajar juga mempengaruhi kemampuan kita


dalam mempelajari sesuatu. Pernahkah Anda mengalami blank atau tidak
bisa mengingat apapun ketika masuk ruang kelas saat ujian semester?
Ketika Anda belajar di rumah, maka Anda akan merasa nyaman dan bisa
berpikir jernih. Namun, ketika sudah di depan kertas ujian Anda bingung
harus menjawab pertanyaan yang ada.

Hal tersebut terjadi karena otak Anda berasosiasi sesuai dengan konteks
di mana Anda sedang mempelajari sesuatu. Dalam proses belajar,
tempat atau suasana sangat penting supaya informasi yang kita pelajari
bisa cepat kita serap. Pastikan tempat yang Anda gunakan sesuai dengan
Anda karena tingkat kenyamanan setiap orang berbeda-beda. Selain itu
usahakan mencari tempat yang jauh dari distraksi atau gangguan misal
seperti suara bising kendaraan bermotor atau lalu lalang orang lewat.
Mulai dari yang Sederhana

Dalam memulai belajar pemrograman jangan langsung loncat belajar


yang sulit. Seperti sebuah pesan bijak, “Sesuatu yang besar dimulai dari
langkah yang kecil” maka kita harus mulai melangkah dari yang paling
sederhana dulu. Mulailah belajar mengenal penulisan sintaks, logika
pemrograman seperti percabangan atau perulangan, dan beberapa hal
dasar lainnya. Layaknya sebuah bangunan yang megah, kita harus
memperkuat fondasinya. Jika fondasi kita sudah kuat maka untuk
membangun bangunan apa pun di atasnya pasti tidak akan roboh. Begitu
pula dengan pemrograman jika kita memperkuat hal yang paling dasar
seperti logika pemrograman, penulisan pemrograman, dsb maka
pengembangannya akan lebih mudah.

B
Blok
Sekumpulan kalimat C yang ditulis di antara { dan }.
Body
Realisasi dari sebuah fungsi.

Bug
Galat atau error yang dapat membuat aplikasi kita tidak dapat berjalan
seperti keinginan.

C
C
Bahasa prosedural yang didesain untuk di-compile secara sederhana agar
mendukung akses ke low-level memory, pendukung bahasa dalam
instruksi mesin. Meskipun didesain secara minimal, C bisa digunakan
sebagai bahasa multi-platform.

D
Debug
Proses mencari dan menghilangkan galat atau error di dalam aplikasi
untuk kemudian memperbaikinya.

Definisi
Memberitahukan sifat (property) objek dan sekaligus mengalokasikan
memori untuk objek.

Deklarasi
Memberitahukan sifat (property) objek (terutama berkaitan dengan tipe).

Deklarasi Global
Deklarasi yang berlaku dalam satu unit translasi (file).

Deklarasi Lokal
Deklarasi yang hanya berlaku dalam blok tempat deklarasi.
Developer
Seseorang yang bertugas membangun atau mengembangkan sebuah
sistem.

Dokumentasi
Kumpulan informasi tentang cara penggunaan tools atau komponen,
serta informasi terkait.

H
Hardware
Perangkat fisik berupa komputer beserta segala instrumen
pendukungnya.

I
IDE
Sebuah tools membantu tak hanya dalam proses developing, bahkan
hingga optimasinya.

Inisialisasi
Memberikan nilai objek.

L
Lvalue
Ekspresi yang me-referensi suatu objek. Secara mudah, lvalue adalah nilai
di sebelah kiri ekspresi assignment. Contoh: identifier dengan tipe dan
kelas penyimpanan tertentu atau hasil indireksi dari pointer.

K
Konstanta
Sebuah nama yang isinya tidak boleh diubah, berbeda dengan variabel
yang isinya (nilainya) dapat diubah-ubah
O
Objek
Daerah memori bernama (sama dengan variabel).

P
Programmer
Seseorang yang menuliskan kode untuk menyusun sebuah program.

Prototipe
Deklarasi fungsi, menyatakan nama, tipe return value, nama dan tipe
parameter formal (argumen).

S
Scope
Daerah program tempat suatu nama dikenal.

Skill
Sebuah keahlian khusus yang dimiliki seseorang. Contohnya menguasai
bahasa pemrograman tertentu, mampu membuat arsitektur dengan
sempurna, dapat menulis kode dengan baik, dll.

Software
Kumpulan perintah agar komputer dapat berfungsi secara optimal sesuai
dengan kemauan.

V
Variabel
Nama yang dapat menampung nilai yang dapat diubah.
Daftar Referensi
[1] Praveen Shrestha. “Ebbinghaus Forgetting Curve”.
Psychestudy.com. https://www.psychestudy.com/cognitive/memory/ebbi
nghaus-forgetting-curve (diakses pada 27 Januari 2021).

Mengenal Bahasa C
Sejarah Singkat dan Versi
Bahasa C dikembangkan oleh Dennis M. Ritchie dan Brian W. Kernighan
pada awal tahun 1970. Bahasa C berkembang di lingkungan UNIX (±90%
sistem operasi UNIX ditulis dalam bahasa C).

Terdapat beberapa standar untuk bahasa C, standar di sini dapat


diartikan sebagai guideline dalam menuliskan bahasa C. Beberapa
Standar yang ada:

 Definisi Kernighan & Ritchie (K&R),


 ANSI-C (X-3.159 -1989-),
 Definisi AT&T (untuk superset C, C++), dan
 GNU Coding Standards.

Versi pada PC misalnya:

 Lattice C,
 Microsoft C/Microsoft QuickC, dan
 Turbo C/Borland C++.

Pada tahun 1986, dikembangkan superset C (kompatibel dengan C,


namun dilengkapi dengan kemampuan pemrograman berorientasi objek)
oleh Bjarne Stroustrup [Stroustrup-86], yaitu bahasa C++ (C with Class).

Catatan: Di dalam kelas ini memakai standar ANSI C. Contoh-contoh


sedapat mungkin dipilih bebas dari implementasi kompilator tertentu.
Jika ada contoh yang spesifik terhadap implementasi, implementasi
kompilator yang dipakai akan disebutkan.
Aplikasi dalam bahasa C
Bahasa C banyak dipakai untuk:

1. Membuat sistem operasi dan program-program sistem.


2. Pemrograman yang "dekat" ke perangkat keras (misalnya untuk
kontrol peralatan).
3. Membuat tool kit.
4. Menulis program aplikasi.

Kelebihan bahasa C, sehingga terpilih untuk aplikasi-aplikasi tersebut,


adalah kemampuannya untuk membuat kode yang compact, efisien
tanpa mengorbankan readability (beda dengan bahasa assembly yang
efisien namun susah dibaca, atau bahasa tingkat tinggi lain yang enak
dibaca namun tidak efisien). Walaupun tak dapat diingkari bahwa
program dalam bahasa C lebih sulit dibaca (karena compact)
dibandingkan dengan bahasa tingkat tinggi yang lain.

Sebagai bahan perkenalan, anda dapat membaca tentang bahasa C di C


(Programming Language) by Wikipedia.

Buku yang direkomendasikan untuk dibaca adalah yang ditulis oleh


penulis bahasa C Kernighan & Ritchie: "The C Programming Language",
yang informasi untuk mengaksesnya dapat diperoleh di The C
Programming Language by Wikipedia.

IDE Online
Kami sangat merekomendasikan Anda untuk menuliskan kembali kode
yang dicontohkan di kelas ini. Menuliskan kembali masuk ke pendekatan
"Niru" dari 3N (Niteni-Niru-Nambahi) yaitu metode pembelajaran yang
dipakai di kelas C ini.
Developer yang baik adalah yang mampu mencari solusi terhadap suatu
masalah dan juga mampu menuliskan solusi tersebut ke dalam source
code. Oleh karena itu menuliskan code adalah sebagian besar tugas dari
menjadi seorang developer.

Biasanya source code dituliskan ke dalam IDE (Integrated Development


Environment). IDE adalah aplikasi untuk membuat program. Fitur-fitur
dari IDE biasanya sangat lengkap dimulai dari mempermudah penulisan
kode, formatting kode, hingga compile dan running kode.

Bagi Anda yang masih belajar, disarankan untuk menggunakan compiler


online yang fiturnya minimalis akan tetapi sangat cocok untuk siswa yang
sedang mulai belajar programming. Compiler online hanya membutuhkan
browser dan koneksi internet saja, sedangkan untuk menggunakan IDE
client haruslah instalasi ke pc/komputer.

Compiler Online
Untuk mengikuti kelas ini cobalah salah satu dari compiler online yang
kami rekomendasikan. Tiap compiler online memiliki plus-minusnya
masing-masing, jadi pilihlah yang menurut Anda paling gampang dan
nyaman untuk digunakan.

Beberapa compiler online yang direkomendasikan adalah (urut abjad):

1. Jdoodle : https://www.jdoodle.com/c-online-compiler
2. Glot : https://glot.io/new/c
3. Onlinegdb : https://www.onlinegdb.com
4. Repl : https://repl.it/languages/c
5. TutorialsPoint
: https://www.tutorialspoint.com/compile_c_online.php

Catatan: Karena compiler ini sifatnya online, ada kemungkinan terjadi


problem teknis yang di luar jangkauan kita. Jika masalah ini terjadi di
salah satu compiler online tersebut, maka disarankan untuk
mencoba compiler online lainnya.

Pengantar Program Kecil dalam Bahasa C


Pada bagian ini, Anda belajar koding Bahasa C melalui contoh-contoh
program kecil sederhana. Diberikan sebuah potongan teks yang
merepresentasi sebuah program yang utuh dan penjelasan secukupnya,
Anda diminta untuk mencermati setiap “kalimat” terutama kalimat dalam
teks program.

Teks program dalam Bahasa C terdiri dari dua bagian:

1. Teks yang diproses oleh compiler.


2. Teks yang tidak diproses oleh compiler, yaitu yang dituliskan di
antara /* dan */ berisi komentar yang memudahkan Anda untuk
memahami sebuah program.

Anda dapat membedakan kedua jenis teks tersebut dari contoh-contoh


yang diberikan. Sebuah program dalam Bahasa C disimpan dengan
ekstensi “.c”. Sebuah program utama terdiri dari dua bagian, yaitu:

1. Kamus, yang berisi nama-nama yang dideklarasi, yang selanjutnya


dapat diacu untuk mengambil nilainya.
2. Program, yaitu satu atau lebih deretan instruksi yang Anda tulis
untuk dikerjakan.

Setiap kalimat dalam bahasa C, baik berupa deklarasi maupun instruksi,


selalu diakhiri dengan ”;” , atau diakhiri dengan suatu blok yang terdiri
dituliskan di antara { dan }.

Saran dalam proses belajar bagi pemula: Anda diharapkan membaca


cermat, dan mengetik ulang program kecil, bukan dengan melakukan
copy/paste karena inilah hakekat memrogram. Seiring dengan proses
mengetik, Anda melakukan proses berpikir dan mensinkronkan
kemampuan berpikir dengan kemampuan motorik. Anda mensinkronkan
kerja otak dengan kerja tangan serta panca indera.
Program Tanpa Kembalian Nilai
Contoh program paling sederhana adalah program menuliskan “Halo
Dunia!“, yang diberikan teksnya sebagai berikut. Program ini tidak
mengirimkan nilai apapun, hanya menuliskan sebuah string.

Badan program hanya terdiri dari satu instruksi menulis yaitu printf.
Karena menulis, maka memerlukan library standar untuk baca/tulis, yang
dalam program sebagai berikut ditulis dengan #include<stdio.h>.

1. /* File : halo.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Program menuliskan “Halo Dunia! ” dan “end-of-line” (ganti baris)


*/

4. #include<stdio.h>

5. int

6. main(void)

7. { /* Badan Program */

8. printf("Halo Dunia!\n ");

9. }

Rangkuman Kompetensi

1. Mengenal kerangka program utama (main) dalam bahasa C.


2. Membedakan baris komentar (yang tidak diproses oleh kompiler C)
dengan kalimat dalam bahasa C.
3. Mengenal program utama dalam bahasa C.
4. Mengenal instruksi menulis pesan ke layar.
Aktivitas kreatif

1. Gantilah program tersebut sehingga penulisnya adalah nama Anda,


dan menuliskan “Hello World!.”
2. Contoh program yang diberikan hanya menuliskan satu baris “Halo
Dunia!”. Modifikasilah sehingga menuliskan 3 baris “Halo Dunia!.”
3. Tuliskan sebuah puisi di layar, dengan memerintahkan program C
yang menulisnya, bukan Anda. Apa bedanya dengan Anda
menuliskan sendiri?

Inilah Computational Thinking!

Program kecil ini akan menjadi pola program apapun yang akan Anda
tulis, dengan mengenali kerangka program utama yang tidak
mengembalikan nilai, dan isinya. Anda juga belajar bekerja efisien dengan
melakukan modifikasi terhadap program yang pernah Anda buat, untuk
menghasilkan program lain yang mirip.

Pesan Penting yang perlu diingat bukan hanya untuk contoh pertama ini,
tetapi juga sepanjang Anda belajar pemrograman:

Ingat, jangan melakukan copy/paste dengan mencontek program orang


lain, karena dalam proses belajar Anda harus mengetik program anda
sendiri. Jika Anda hanya melakukan copy/paste, Anda tidak akan belajar.

Program Dengan Kembalian Nilai


Perbedaan program ini dengan program sebelumnya adalah bahwa
selain menuliskan sebuah string (deretan huruf) ke layar, pada akhir
eksekusi, program ini mengirimkan atau mengembalikan ke Anda (return)
sebuah nilai 0 yang dinyatakan oleh perintah return 0. Karena
mengirimkan sebuah nilai integer (Nol), awal program adalah int main.

Untuk contoh program ini, sepertinya pengiriman nilai 0 tersebut tidak


ada gunanya. Tetapi kelak, saat Anda memrogram sistem dan program
berinteraksi dengan lingkungan serta program lain, nilai kembalian ini
sangat berguna untuk men-cek apakah program Anda melakukan
tugasnya sesuai dengan spesifikasi, sampai selesai dengan baik yaitu
mengirimkan nilai 0. Oleh karena itu, selanjutnya, bentuk penulisan ini
yang dipakai sebagai “standar” penulisan dalam tutorial ini dan juga oleh
banyak tim developer, karena jika program dieksekusi dengan benar,
program lain yang memanfaatkannya dapat menangkap nilai 0 yang
dikirimkannya.

1. /* File : halo1.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Program untuk menuliskan Halo Dunia! ke layar */

4. #include<stdio.h>

5. int

6. main ()

7. {

8. /* KAMUS */

9.

10. /* ALGORITMA */

11. printf ("Halo Dunia!\n");

12. return 0;

13. }

Rangkuman Kompetensi

1. Membedakan makna void main dengan int main.


2. Memahami konsep return dan manfaatnya walaupun belum
memanfaatkannya.
Aktivitas kreatif

1. Melakukan studi dengan mencari contoh-contoh di internet, dan


membandingkan lebih banyak yang mana pemakaiannya: versi
Program ke-2 atau yang pertama.
2. Secara tidak sengaja, kelak, Anda akan menerima kembalian yang
bukan 0 jika terjadi masalah eksekusi.

Inilah Computational Thinking!

Program kecil ini akan menjadi pola program apapun yang akan Anda
tulis, dengan mengenali kerangka program utama, dan isinya. Setelah
selesai dieksekusi, program akan mengembalikan 0 jika semua baik-baik
saja. Beberapa kompilator akan menuliskan pesan bahwa program
berakhir dengan “exit code” 0.

Pengantar Pengisian Nilai Variabel


Variabel adalah nama yang dapat menampung nilai yang dapat diubah.
Variabel mempunyai type tertentu, yang menentukan type nilai yang
disimpannya. Pada bagian ini, Anda hanya belajar untuk mendefinisikan
dan mengisi variabel type dasar yaitu:

1. Integer (bilangan bulat), yaitu angka tanpa titik desimal.


Contoh nilai integer : 10 (artinya sepuluh).
Type integer dikenali bahasa C dengan kata kunci int.
2. Bilangan riil, yaitu angka yang dapat mempunyai pecahan yang
dituliskan sebagai angka di belakang titik desimal.
Contoh nilai riil : 0.5 (artinya setengah).
Type bilangan riil dikenali bahasa C dengan kata kunci float.
3. Karakter (huruf), yaitu huruf atau karakter lainnya yaitu angka,
karakter khusus, atau bahkan yang tidak kelihatan misalnya “spasi”,
akhir baris.
Type karakter (huruf) dikenali bahasa C dengan kata kunci char.
Pengisian nilai variabel dapat dilakukan dengan dua cara, yaitu:

1. Saat dideklarasikan, atau


2. Dengan instruksi “assignment.”

Untuk membuktikan bahwa pengisian nilai variabel sudah berjalan


dengan baik, perlu dibuktikan dengan menuliskan nilainya setelah
pengisian nilai dilakukan. Untuk ini akan dipakai instruksi printf yang
pernah dipakai pada program menuliskan Halo Dunia!

Pengisian Nilai dengan Inisialisasi


Pengisian nilai dapat dilakukan saat suatu variabel dideklarasi melalui
kalimat int i; yang artinya Anda menyatakan (declare) bahwa Anda akan
memakai sebuah variabel bernama i. Cermati deklarasi yang dituliskan
pada program sebagai berikut.

1. #include<stdio.h>

2. int main()

3. {

4. int i = 5;

5. }

Dengan mendeklarasikan suatu variabel berjenis int maka variabel


tersebut dapat menampung nilai bilangan bulat antara -32767 dan 32767.
Jika anda membutuhkan untuk nilai yang lebih besar, akan dibahas nanti
pada modul selanjutnya.

Selain ditentukan nilainya, nilai tersebut akan dicetak ke layar. Untuk


mencetak, komputer perlu diberitahu bagaimana suatu nilai
dicetak. %d pada teks program akan digantikan oleh nilai I di layar.
1. /* File : initvar.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Mengisi variabel i yg bertype in dengan nilai 5 dan menuliskannya


*/

4. #include<stdio.h>

5. int main ()

6. {/* Kamus */

7. int i = 5; /* deklarasi dan inisialisasi nilai variabel i dengan 5


*/

8. /* Algoritma */

9. printf ("Ini nilai i : %d \n", i);/*untuk mengamati dampak


inisialisasi*/

10. return 0;

11. }

Rangkuman Kompetensi

1. Memahami nama variabel dan bagaimana memperkenalkannya ke


program.
2. Memahami makna dan dampak konstruksi “=” dalam bahasa C,
dalam sebuah deklarasi variabel.
3. Memahami dampak eksekusi “%d” dan hubungannya dengan nilai
variabel, pada perintah printf dalam bahasa C.

Aktivitas kreatif

1. Latihan pemahaman nama variabel: gantilah teks program int


i; menjadi int I; atau int radius;int umur;int jumlah; dan amatilah
apa yang terjadi saat eksekusi.
2. Latihan pemahaman eksekusi:
Gantilah baris int i=5; dengan int i; dan amatilah apa yang terjadi.
Tuliskan beberapa baris nama variabel integer, misalnya j, k dan
cetaklah setelah deklarasinya. Kesimpulan apa yang Anda dapat?
3. Lakukan inisialisasi dengan nilai yang bukan 5 tetapi sesuai
perhitungan yang Anda inginkan. Untuk beberapa nilai, Anda akan
mengalami persoalan karena program tidak berjalan mulus.
Identifikasi kasus yang berjalan baik, dan yang berjalan dengan
tidak baik. Untuk yang tidak berjalan dengan baik, mengapa?
4. Lakukan percobaan dengan mengganti nama dan type variabel
sesuai dengan definisi nama dan nilai yang anda tentukan. Misalnya
:
int bebek=10; /* bebekku ada 10 */
float luas=2.5; /* luas kebunkan 2.5 hektar */
float keliling= 2* 3.14* 5.5; /* keliling dari sebuah lingkaran yang
jari-jarinya 5.5. cm */

Inilah Computational Thinking!

Nama "Variabel" dan isi (nilai yang disimpannya)


merupakan construct paling mendasar dalam pemrograman
prosedural/imperatif, termasuk bahasa C. Nama variabel ini dipakai
sebagai pengenal dari alamat memori yang akan dipakai menyimpan
nilai, yang type-nya ditunjukkan sebelum namanya. Pada contoh di atas,
nama i bertype integer (bilangan bulat, disingkat int), artinya akan
menyimpan nilai bilangan bulat. Tanda "=" dalam konteks ini adalah
sebuah "construct" (konstruksi) paling mendasar dalam bahasa C, yang
artinya : simpanlah nilai di ruas kanan ke dalam nama variabel di ruas kiri.

Ada 3 tahapan yang dilakukan kompiler melalui instruksi int i=5; yaitu
tahapan pendefinisian nama (i), alokasi memori untuk menyimpan nilai,
dan inisialisasi nilai variabel tersebut dengan nilai yang ada di ruas kiri.
Nilai tersebut dapat berupa hasil perhitungan, misalnya anda dapat
menuliskan:
int nilaiku=3*5; artinya komputer akan menghitung 3x5 (hasilnya 15) dan
akan menyimpan nilai 15 dalam variabel nilaiku.

Pada satu barus intruksi yang singkat ini, anda belajar melakukan
dekomposisi sebuah instruksi, mengenali bagian-bagiannya, dan
memahami maknanya untuk memahami urut-urutan instruksi yang akan
dilakukan mesin. Sekali anda paham makna dari satu kalimat, anda akan
memakainya sebagai pola pemahaman. Setiap pola instruksi program,
akan mempunyai pemaknaan eksekusi yang spesifik.

Pengisian Nilai dengan Assignment


Pengisian nilai variabel I pada program ini dilakukan dengan
melakukan assignment, yang dalam bahasa C dituliskan dengan tanda =.

Perhatikan bahwa “=”artinya adalah mengisi hasil perhitungan ruas kanan


ke nama variabel di ruas kiri, dan bukan berati tanda “sama dengan”. Di
sini Anda mulai mengenal “semantik” (makna) dari unit sintaktikal yaitu
simbol “=” dalam bahasa C.

1. /* File : assigni.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Mengisi variabel i yg ber-type in dengan nilai 5 dan menuliskannya


*/

4. #include<stdio.h>

5.

6. int main ()

7. {/* Kamus */

8. int i;

9.

10. /* Algoritma */

11. i = 5; /* sekarang variabel i akan bernilai 5 */


12. printf ("Ini nilai i : %d \n", i);

13.

14. i = i+1; /* nilai i ditambah 1, hasilnya disimpan kembali di i


*/

15. printf ("Ini nilai i : %d \n", i);

16.

17. return 0;

18. }

Rangkuman Kompetensi

1. Memahami makna dan dampak “=” dalam bahasa C, dalam


sebuah assignment.
2. Memahami dampak eksekusi “%d” dan hubungannya dengan nilai
variabel, pada perintah printf dalam bahasa C.
3. Membedakan perbedaan makna dari “=” pada suatu deklarasi,
dibandingkan dengan instruksi “assignment.”
4. Memahami bahwa hasil komputasi di ruas kanan tanda “=” akan
disimpan di variabel di ruas kiri, pada instruksi i = i + 1;.

Aktivitas kreatif

Lakukan inisialisasi, dan kemudian assignment dengan nilai yang berbeda.


Nilai variabel adalah nilai terakhir ketika diubah.

Inilah Computational Thinking!

Dalam melakukan problem solving, anda seharusnya memahami makna


dari setiap simbol. Pada kasus ini, simbol “=” dipakai sebagai sarana
untuk mengisikan nilai ke variabel, namun dalam konteks yang berbeda.
Pada bahasa C, arti “=” bukan “sama dengan”, tetapi “diisikan nilainya
ke ..”

Pada inisialisasi, pemberian nilai dilakukan sebagai bagian dari deklarasi


dan variabel hanya dideklarasi sekali dalam program, sehingga
pemberian nilai saat inisialisasi bukan merupakan instruksi.

Berbeda dengan deklarasi yang hanya dapat dilakukan satu kali, sebuah
instruksi dapat diulang dan dilakukan lebih dari satu kali.

Inisialisasi dan Assignment Nilai Bilangan Riil


Type bilangan riil dalam bahasa C dituliskan sebagai float. Ada dua cara
untuk menuliskan nilai bilangan riil, yaitu: bilangan bertitik desimal, atau
bilangan bertitik desimal diikuti dengan pangkatnya.

Nilai yang dapat disimpan pada bilangan ber-type float adalah antara
1.175494351 E – 38 sampai dengan 3.402823466 E + 38.

1. /* File : assignf.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Mengisi variabel i yg bertype in dengan nilai 5 dan menuliskannya


*/

4. #include<stdio.h>

5. int main()

6. { /* Kamus */

7. float f = 0.555;

8. float x= 1.5E3;

9. /* Algoritma */

10. printf ("Ini nilai f : %f \n", f);

11. printf ("Ini nilai f : %5.2f \n", f);


12. printf ("Ini nilai x : %10.2f \n", f);

13. return 0;

14. }

Rangkuman Kompetensi

1. Mengenal float untuk mendeklarasikan bilangan riil, dan cara


menuliskan bilangan riil dalam bahasa C.
2. Mengenal batasan nilai yang dapat disimpan dalam variabel
bertipekan float.

Aktivitas kreatif:

Nilai integer dan bilangan riil sebetulnya adalah angka numerik.


Eksplorasi jika nilai yang diberikan tidak cocok dengan type yang
diberikan, dengan mengkombinasikan program ini dengan program
sebelumnya.

Inilah Computational Thinking!

Pattern recognition! Semoga Anda dapat mengenali pola deklarasi dan


inisialisasi, yang pada program ini dipakai untuk type bilangan riil dengan
menggunakan pola deklarasi dan inisialisasi type integer.

Pengisian Nilai Bertipe Karakter (Char)


Sebuah karakter dikodekan menjadi kode ASCII atau kode lainnya dalam
komputer. Karakter dapat berupa : angka [‘0’ .. ‘9’], abjad huruf kecil
[‘a’..’z’], abjad huruf kapital ‘’A’..’Z’], karakter khusus selain abjad dan huruf
yang dapat Anda amati pada keyboard {!, @, #, $, ^, &, *, (, ), ?, “, ! ……. }
atau karakter lainnya yang tidak kelihatan.
Deklarasi sebuah nama yang isinya adalah karakter dalam bahasa C
dinyatakan dengan char. Sebuah variabel ber-type char hanya dapat
menampung satu karakter saja, dan nilainya dapat diberikan dalam
penulisan karakternya, atau kodenya.

Program berikut ini adalah contoh bagaimana Anda menyimpan sebuah


“nilai” karakter dalam variabel bertipekan char.

1. /* File: assignKar.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Program ini berisi contoh sederhana untuk mendefinisikan */

5. /* variabel bertype karakter */

6. #include<stdio.h>

7. int main ()

8. {

9. /* KAMUS */

10. char c = 65; /* inisialisasi nilai karakter dengan 65, kode


huruf ‘A’ */

11. char c1;

12. /* Algoritma */

13. /* penulisan karakter sebagai huruf */

14. printf ("Karakter = %c\n", c);

15. c1 = 'Z'; /* variabel c1 diisi dengan huruf ‘Z’ */

16. printf ("Karakter = %c\n", c1);

17.

18. /* penulisan karakter */


19. printf ("Karakter dalam kode ASCII = %d\n", c);

20. printf ("Karakter sebagai huruf = %c\n", c);

21. printf ("Karakter dalam kode ASCII = %d\n", c1);

22. printf ("Karakter sebagai huruf = %c\n", c1);

23.

24. return 0;

25. }

Rangkuman Kompetensi

1. Mengenal type char dan bagaimana mengisinya dengan kode ASCII


atau dengan karakternya.
2. Mengenal bagaimana mencetak sebuah karakter dalam bentuk
kode ASCII atau dalam wujud karakaternya.

Aktivitas kreatif

“\n” artinya ganti baris. Lakukan eksplorasi di internet untuk mencari


kode dari karakter “tidak kelihatan” lainnya.

Inilah Computational Thinking!

Sekali lagi, pola deklarasi dipakai untuk type char.

Rangkuman Pembelajaran Inisialisasi dan


Assignment
Contoh program di Modul Pengisian Nilai dengan Inisialisasi .

1. int main ()
2. {/* Kamus */

3. int i = 5; /* deklarasi dan inisialisasi nilai variabel i dengan 5


*/

4. /* Algoritma */

5. printf ("Ini nilai i : %d \n", i);/*untuk mengamati dampak


inisialisasi*/

6. return 0;

7. }

Contoh program di Modul Pengisian Nilai dengan Assignment .

1. int main ()

2. {/* Kamus */

3. int i;

4.

5. /* Algoritma */

6. i = 5; /* sekarang variabel i akan bernilai 5 */

7. printf ("Ini nilai i : %d \n", i);

8.

9. i = i+1; /* nilai i ditambah 1, hasilnya disimpan kembali di i */

10. printf ("Ini nilai i : %d \n", i);

11.

12. return 0;

13. }

Perhatikanlah kembali pada kedua contoh program di atas. Pada contoh


Program inisialisasi, Anda akan mengisi variabel dengan nilai bilangan
bulat pada saat nama variabel dideklarasikan, sedangkan pada program
assignment Anda mengisinya dengan instruksi assignment.

Contoh program di Modul Inisialisasi dan Assignment Nilai Bilangan Riil .

1. int main()

2. { /* Kamus */

3. float f = 0.555;

4. float x= 1.5E3;

5. /* Algoritma */

6. printf ("Ini nilai f : %f \n", f);

7. printf ("Ini nilai f : %5.2f \n", f);

8. printf ("Ini nilai x : %10.2f \n", f);

9. return 0;

10. }

Tentu saja variabel penyimpannya bertipekan bilangan bulat (integer)


yang dalam bahasa C dituliskan sebagai int. Sedangkan pada program di
atas Anda mengisi variabel ber-type float yaitu bilangan riil dengan angka
riil.

Selain itu, Anda belajar bahwa menuliskan suatu nilai membutuhkan


pedoman, format bagaimana nilai integer, nilai bilangan riil atau char
dituliskan.

Rangkuman Kompetensi

1. Membedakan deklarasi variabel yang langsung diinisialisasi nilainya,


dengan instruksi “assignment” yang dinyatakan oleh tanda =.
2. Memahami karakter yang dipakai sebagai kode untuk tampilan
yaitu %d %f %c.
3. Memahami perbedaan type integer, bilangan riil dan karakter, serta
memahami bagaimana nilai disimpan dan ditampilkan.

Latihan kreativitas

Untuk type karakter, format pencetakan dapat dilakukan


dengan %d atau %c. Bagaimana kalau format-nya tidak sesuai dengan
yang diberikan pada contoh?

Apa itu Konstanta


Konstanta secara konseptual adalah sebuah nama yang isinya tidak boleh
diubah, berbeda dengan variabel yang isinya (nilainya) dapat diubah-
ubah. Konstanta dapat dituliskan dalam bentuk literal sesuai dengan nilai
yang dimaksud. Kenapa konstanta dituliskan sebagai nama dari pada
sebagai literal ? agar sekali sebut nilainya dapat dipakai berkali-kali sesuai
makna yang terkandung dalam nama konstanta, dan untuk menghindari
literal yang bertebaran dalam sebuah program, yang dapat menimbulkan
ke-tidak-konsisten-an dalam penulisan (jika salah ketik, maka konstanta
yang maksudnya sama akan berbeda nilainya).

Ada tiga cara mendefinisikan konstanta dalam bahasa C, yaitu:

1. Dengan menuliskan nilainya secara langsung (disebut sebagai


"literal" sesuai konvensi penulisan dalam bahasanya). Dengan cara
ini, tidak mungkin muncul dalam deklarasi nama (karena tidak
bernama), dan juga tidak mungkin ditulis di ruas kiri tanda
assignment = karena akan menimbulkan salah sintaks.
2. Dengan memanfaatkan macro berkata kunci #define.
3. Dengan mendeklarasikan sebagai const kemudian menyebutkan
type dan nilainya.
Best practices : tuliskan nama konstanta sesuai dengan artinya, dan
biasanya dituliskan dalam huruf kapital.

Ketiga cara tersebut dituliskan sekaligus dalam sebuah program contoh


sebagai berikut.

1. /* File: konstanta.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Mendefinisikan konstanta bertype int, float, char */

5. #include<stdio.h>

6. #define FALSE 0

7. #define NOL 0

8. #define SATU 1

9. #define pi 3.1415

10. int main ()

11. {/* Kamus */

12. const int maks=3;

13. const float param =2.5;

14. const char cc = 65 ;

15. const char cA = 'A' ;

16. /* Algoritma */

17. printf ("PI = %6.2f\n", pi);

18. printf ("NOL = %d\n", NOL);

19. printf ("SATU = %d\n", SATU);

20. printf ("FALSE = %d\n", FALSE);


21. printf ("maks = %d\n", maks);

22. printf ("param = %f\n", param);

23. printf ("cc = %c\n", cc);

24. printf ("cA = %c\n", cA);

25. printf ("3\n"); /*tanpa memakai nama, tidak disarankan */

26. return 0;

27. }

Rangkuman Kompetensi

1. Memahami arti konstanta, dan membedakan antara konstanta


dengan variabel.
2. Mengaplikasikan berbagai cara mendefinisikan konstanta, dan
menuliskan hasilnya.

Aktivitas kreatif

1. Mendefinisikan nama konstanta yang nilainya tidak sesuai


maknanya. Contoh:
1. #define int SATU=7; const float PI=100.5;

Catatan : kreativitas seperti ini sebaiknya tidak dilakukan karena


membingungkan pembaca program dan bisa menimbulkan salah
pengertian.

2. Cobalah untuk mengubah nilai konstanta pada badan program


dengan melakukan assignment.
Inilah Computational Thinking!

Konsep Konstanta adalah salah satu construct dalam bahasa


pemrgraman prosedural/imperatif, termasuk dalam bahasa C, yang harus
dipahami bagaimana penulisan dan penggunaannya, serta mekanisme
pendefinisian dan penentuan nilai dalam program. Berbeda dengan
variabel yang nilainya dapat diganti-ganti, sebuah nama yang dideklarasi
sebagai konstanta akan dicegah untuk diubah nilainya.

Pengantar Baca-Tulis
Suatu program yang nilainya diberikan dengan assigment dan/atau
konstanta, tidak akan dapat dijalankan untuk data lain tanpa mengubah
programnya. Agar program dapat dijalankan dengan data yang berbeda
tanpa mengubah program, data diberikan dari luar program dengan
instruksi baca yaitu scanf dalam bahasa C, dengan menggunakan input
standar.

Seperti halnya pada printf di mana Anda harus mendefinisikan format


output, untuk membaca suatu data diperlukan format input, yang pada
umumnya sama dengan format output. Instruksi scanf juga harus disertai
dengan %d %f %c sesuai dengan type data yang dibaca.

Perbedaan antara instruksi membaca dan menulis adalah dari cara


menuliskan nama variabel yang nilainya dibaca. Berikut ini contohnya:

1. Untuk membaca nilai sebuah variabel integer bernama J,


instruksinya adalah scanf (“%d”, &J);.
2. Untuk membaca nilai sebuah variabel bilangan riil bernama X,
instruksinya adalah scanf (“%f”, &X);.
3. Untuk membaca nilai sebuah variabel bertype char bernama CX,
instruksinya adalah scanf (“%c”, &CX);.

Perhatikan tanda & sebelum nama variabel, yang harus dibaca dengan
“address of”, merupakan salah satu operator bahasa C yang akan
dijelaskan pada Modul 3. Address of artinya menunjukkan alamat dari
variabelnya, misalnya &J artinya alamat dari variabel bernama J.
Untuk tahap awal ini, kalimat scanf (“%d”, &J); bermakna memberikan
perintah kepada komputer, untuk menyimpan nilai yang diketikkan
dengan format %d (semuanya angka) ke alamat memori yang oleh
program dalam bahasa C dikenal melalui namanya yaitu variabel J. Tanpa
menuliskan karakter & nilai yang diketikkan tidak akan disimpan. Hal ini
akan dijelaskan lebih detail pada modul III. Untuk sementara ini, bagi
pemula, harap diperhatikan pola penulisan instruksi baca yang diberikan,
agar nilai yang dibaca dapat disimpan dengan benar pada variabel yang
diberikan.

Nilai yang diketikkan harus sesuai dengan "format" dan type data saat
nama variabel dideklarasikan:

Untuk type data integer, "%d" artinya adalah bahwa program akan
membaca data deretan bilangan saja, misalnya 12 sedangkan untuk "%f"
program akan membaca sederetan angka yang boleh mengandung titik
desimal 34.5 atau dalam format eksponen 3.5E+2 (artinya 350).
Perhatikan batasan nilai yang dapat disimpan dalam type int dan float
(baca spesifikasi bahasa C), biasanya integer terbatas dari -32768 s.d.
32767 sedangkan bilangan riil antara 10^-38 s.d 10^38. Beberapa varian
dari bilangan bulat adalah short, long sedangkan varian bilangan riil
adalah double.

Pembacaan dan Penulisan Nilai Bilangan Numerik


Bilangan numerik dibaca dengan pola instruksi seperti yang dijelaskan
sebelumnya. Arti dari %d dan %f dari pembacaan adalah bahwa untuk
integer, program akan membaca semua deretan angka yang diketikkan
sampai pengguna menekan “enter.”

1. /* File: bacaNum.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* contoh membaca nilai numerik: bilangan bulat, bilangan riil */


5. /* kemudian menuliskan nilai yang dibaca */

6. #include<stdio.h>

7. int main ()

8. {/* Kamus */

9. int a;

10. float x;

11. /* Program */

12. printf ("Contoh membaca dan menulis, ketik nilai integer: ");

13. scanf ("%d", &a); /* membaca nilai a yang bertype integer

perhatikan bahwa nama variabel ditulis dg &a*/

14. printf ("Nilai yang dibaca : %d \n", a);

15.

16. printf ("ketik nilai sebuah bilangan riil: ");

17. scanf ("%f", &x); /* membaca nilai a yang bertype integer*/

18. printf ("Nilai yang dibaca : %f \n", x);

19.

20. /* coba ketik : scanf ("%d", a);dan tuliskan nilainya. Apa

akibatnya ?*/

21. /* coba ketik : scanf ("%f", x);dan tuliskan nilainya. Apa

akibatnya ?*/

22.

23. return 0;

24. }
Rangkuman Kompetensi

1. Mengenal, memahami dan memakai instruksi membaca dan format


data input.
2. Data yang telah di-input dapat ditampilkan kembali dengan format
yang berbeda, asalkan cocok.
3. Memahami bagaimana data disimpan dan ditampilkan. Data yang
sama dapat ditampilkan dengan cara yang berbeda.
4. Mengacu ke program Halo Dunia, simpulkan mengapa untuk Halo
Dunia tidak dibutuhkan format %d %f %c.

Aktivitas kreatif

Cobalah untuk mengetikkan nilai numerik yang tidak sesuai dengan type-
nya, amatilah apa yang terjadi. Dari berbagai kombinasi input yang Anda
coba, simpulkan arti dari %d dan %f dengan lebih formal. Tuliskan aturan
yang jelas mengenai data yang diinput dengan menggunakan format
%d dan %f.

Inilah Computational Thinking!

Perintah Baca (scanf) dan Tulis (printf) adalah perintah dasar dalam
pemrograman prosedural/imperatif, termasuk dalam bahasa C. Ada
beberapa varian perintah ini, yang dapat Anda pelajari kelak. Pada
perintah "Baca", program menunggu sampai pengguna mengetikkan nilai
yang dibaca dan akan disimpan dalam nama variabel yang diberikan.
Sedangkan pada perintah "Tulis" program akan mencetak nilai variabel
sesuai pola yang diberikan dalam format nilai yang akan ditulis. Melalui
perintah Baca dan Tulis, program berinteraksi dengan penggunanya.

Urut-urutan membaca, perhitungan, penulisan harus dituliskan dengan


benar. Misalnya Anda tidak boleh menulis sebuah nilai variabel yang
belum pernah didefinisikan sebelumnya melalui inisialisasi nilai,
assignment atau pembacaan.

Membaca Nilai Sebuah Karakter


Variabel bertipekan karakter, dapat dibaca dari kode ASCII atau karakter
yang diketikkan. Untuk memasukkan nilai karakter, Anda tidak perlu
mengetikkan tanda petik, cukup ketikkan nilainya. Misalnya ketikkan Z
untuk mengisi nilai variabel bertype char dengan nilai ‘Z’. Format untuk
membaca disesuaikan dengan input-nya:

Jika dibaca dari kode ASCII, maka format pembacaannya adalah %d.

Jika dibaca dari huruf/angka atau karakternya, maka format


pembacaannya adalah %c.

1. /* File: bacakar.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. #include<stdio.h>

5. int main()

6. {/* Kamus */

7. char cc;

8. char c;

9.

10. /* Algoritma */

11. printf ("hello\n");

12. printf("baca 1 karakter saja : ");scanf ("%c ", &cc);

13. printf ("%c\n", cc);


14. printf("baca 1 karakter saja : ");scanf ("%d ", &c); /*ketikkan angka

65 */

15. printf ("%d\n", c);

16. return 0;

17. }

Rangkuman Kompetensi

Mengenal, memahami, dan mengaplikasi cara memasukkan (input) data


bertipekan char.

Aktivitas kreatif

1. Setiap pembacaan selalu diakhiri dengan mengetikkan [enter] yang


pada kenyataannya tidak disimpan. Lalu, bagaimana caranya untuk
mempunyai sebuah variabel yang isinya [Enter]?
2. Amati dan jelaskan apa yang terjadi jika dituliskan dua buah
instruksi sebagai berikut:
scanf ("%c ", &cc); scanf ("%c ", &cc);
3. Apa yang harus diketikkan sebagai input jika dituliskan instruksi
sebagai berikut:
scanf ("%c %c", &cc, &c);

Inilah Computational Thinking!

Setelah Anda memahami perintah baca dan tulis untuk bilangan numerik,
anda sekarang dapat mengenali pola untuk membaca dan menulis
variabel berjenis "karakter" yaitu sebuah huruf yang dikenali kode ASCII
nya.
Anda juga akan mengenali pola untuk format masing-masing type, yaitu
%d, %f, dan %c. Anda juga akan mampu membaca spesifikasi type yang
lain dalam tutorial di Internet terkait kompiler bahasa C yang anda pakai,
untuk membaca dan menuliskan variabel bertype lain yang tersedia
dalam bahasa tersebut.

Pengantar Operasi Sederhana dengan Komputer


Dengan mempunyai CPU (Central Processing Unit) yang terdiri dari ALU
(Arithmetic and Logical Unit), komputer dapat melakukan perhitungan
aritmetika (perhitungan kali, bagi, tambah, kurang), operasi logika (aljabar
boolean), atau perbandingan (sama, tidak sama, lebih besar, lebih kecil).
Dengan operasi dasar ini, Anda dapat melakukan proses komputasi yang
Anda butuhkan. Misalnya melakukan kalkulasi berdasarkan suatu rumus.
mengurutkan, mencari suatu nilai yang harganya tertentu, atau
melakukan operasi bit hitam putih menghasilkan gambar hitam/putih
dalam kodifikasi informasi.

Operasi Aritmatika
Berikut ini adalah contoh program-program yang melakukan perhitungan
aritmetika sederhana terhadap type numerik (bilangan integer dan
bilangan riil).

Pada pelajaran berhitung, Anda sudah mengenal prioritas perhitungan,


yaitu bahwa perkalian dan pembagian akan dilakukan setelah
penjumlahan dan pengurangan jika ditulis a+b*c-d, maka perhitungan
yang dilakukan adalah a + (b*c)-d.

Best Practices: Untuk tidak tergantung kepada prioritas bahasa


pemrograman, disarankan untuk menulis ekspresi aritmatika dengan
tanda kurung, sehingga perhitungan yang dilakukan akan selalu sesuai
dengan yang Anda maksudkan.

1. /* File : aritmatika.c */

2. /* Penulis : bu Dengklek, email inge@bebras.or.id*/


3. /* Operasi aritmatika bilangan integer dan bilangan riil :

4. Menuliskan jumlah, hasil perkalian, pembagian, modulo

5. dua buah variabel integer*/

6. #include<stdio.h>

7. int

8. main ()

9. {/* Kamus */

10. int x=5;

11. int y=8;

12. /* Program */

13. printf ("Ini nilai x + y : %d \n", x+y );

14. printf ("Ini nilai x - y : %d \n", x-y );

15. printf ("Ini nilai x * y : %d \n", x*y );

16. printf ("Ini nilai x / y : %d \n", x/y );

17. printf ("Ini nilai y / x : %d \n", y/x );

18. printf ("Ini nilai x mod y : %d \n", x%y );

19.

20. /* bandingkan dengan operasi pembagian bilangan riil */

21. float a=5, b=8;

22. printf ("Ini nilai a / b : %5.2f \n", a/b );

23. printf ("Ini nilai b / a : %5.2f \n", b/a );

24.

25. return 0;

26. }
Rangkuman Kompetensi

Mengenal operasi aritmatika dalam bahasa C, dan operator {+, *, / mod}


dan urutan perhitungannya.

Aktivitas kreatif

Lakukanlah perhitungan:

1. x+x+x
2. x*x+x

Inilah Computational Thinking!

Dengan tanda kurung, Anda mengidentifikasi komponen dari sebuah


ekspresi. Misalnya, program akan dapat melakukan ”dekomposisi” yang
sesuai dengan apa yang Anda pikirkan (dan tuliskan) dengan ekspresi:
(((1+2)/(7*5)*8)-7)+9.

Operasi Boolean
Perhatikan bahwa dalam bahasa C, tidak dikenal bilangan boolean yang
bernilai TRUE atau FALSE. False adalah nilai 0 dalam bahasa C, sedangkan
bukan 0 adalah True.

1. /* File: boolOP.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Contoh perhitungan aljabar boolen, perhatikan cara penulisan

5. AND dan OR serta NOT */


6. #include<stdio.h>

7. int main ()

8. {/* Kamus */

9. int TRUE=1;

10. int FALSE=0;

11. /* Algoritma */

12. printf ("Ini nilai TRUE AND TRUE : %d \n", TRUE && TRUE );

13. printf ("Ini nilai TRUE OR FALSE : %d \n", TRUE || FALSE);

14. printf ("Ini nilai FALSE AND TRUE : %d \n", FALSE && TRUE );

15. printf ("Ini nilai FALSE OR FALSE : %d \n", FALSE || FALSE );

16. printf ("Ini nilai NOT TRUE : %d \n", !TRUE);

17. printf ("Ini nilai NOT FALSE : %d \n", !FALSE );

18. return 0;

19. }

Rangkuman Kompetensi

Memahami bagaimana operasi boolean dilakukan terhadap variabel


boolean yang dalam bahasa C direpresentasi sebagai integer. Nilai “false”
direpresentasi dengan 0, sedangkan “true” adalah bukan 0.

Aktivitas kreatif

Modifikasilah program di atas sehingga Anda menghasilkan tabulasi


operasi boolean seperti yang biasa dituliskan, misalnya sebagai berikut:

---------- ---------- -----------


OR T F AND T F
NOT T F
T T TT T F
F T
F T FF F F
-----------
---------- ----------
---------- ----------
-----------
OR T F AND T F
NOT T F
T 1 0T 1 0
0 1
F 1 0F 0 0
-----------
---------- ----------

Inilah Computational Thinking!

Dengan pola pemahaman operator aritmatika, Anda dapat mengenali


pola operasi boolean. Lakukan operasi aritmatika hanya dengan 0 dan 1
(contoh tabel kreatif di mana TRUE ditulis sebagai 1 dan FALSE ditulis
sebagai 0), identifikasilah operator aritmatika yang berkesesuaian.

Operasi Perbandingan
Komputer mampu melakukan proses perbandingan, yaitu {lebih besar,
lebih kecil, sama dengan, atau tidak sama dengan} untuk nilai numerik.

Operator {sama dengan, tidak sama dengan} dapat dilakukan untuk


karakter, yaitu misalnya untuk membandingkan apakah nilai yang
diketikkan sama dengan ‘A’.

Hasil dari suatu perbandingan adalah nilai bolean (true atau false).

Daftar operator relasional (perbandingan) dalam bahasa C dan artinya:

Operator Arti
< Lebih kecil
> Lebih besar
! Tidak sama
== Sama dengan

Contoh operasi perbandingan diberikan pada program sebagai berikut,


amati hasil perbandingan yang dilakukan.
1. /* File: relasional.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Contoh perbandingan nilai numerik */

5. #include<stdio.h>

6. int main ()

7. {/* Kamus */

8. int X=5;

9. int Y=8;

10. /* Program */

11. printf ("Hasil X < Y : %d \n", X < Y);

12. printf ("Hasil X > Y : %d \n", X > Y);

13. printf ("Hasil X <= Y : %d \n", X <= Y );

14. printf ("Hasil X >= Y : %d \n", X >= Y );

15. printf ("Hasil X == Y : %d \n", X == Y ); /*operator kesamaan :

==*/

16. printf ("Hasil X != Y : %d \n", X != Y); /*operator ke-tidak-

samaan:!=*/

17.

18. printf ("Hasil X == X : %d \n", X == X ); /*operator kesamaan:

==*/

19. printf ("Hasil X != X : %d \n",X != X); /*operator ke-tidak-

samaan:!=*/

20.

21. return 0;
22. }

Rangkuman Kompetensi

Mengenal operator relasional yang akan dipakai untuk membandingkan


dua buah nilai.

Aktivitas kreatif

Seringkali, pengguna pemula lupa dan salah menuliskan “sama dengan”


dengan “=”. Karena “=” artinya adalah mengisikan nilai, maka bisa
berakibat fatal. Cobalah untuk mengganti secara sengaja “==” dengan “=”,
amatilah apa yang terjadi. Anda akan mendapat “surprise.”

Inilah Computational Thinking!

Salah satu kemampuan komputer adalah membandingkan dua buah


nilai. Tentu saja, nilai yang dibandingkan seharusnya ber-type sama. Anda
hanya bisa membandingkan misalnya dua orang, tidak bisa
membandingkan seseorang dengan sebuah jeruk karena “type”-nya tidak
sama. Operasi membandingkan akan banyak dipakai dalam problem
solving, terutama untuk proses-proses komputasi standar yang akan
Anda kenal berikutnya misalnya dalam persoalan search dan sort.

Gabungan Operasi Boolean dan Relasional


Seringkali Anda perlu untuk menuliskan suatu aturan atau kondisi dalam
bentuk misalnya, Anda akan keluar membeli gorengan jika mempunyai
uang lebih besar dari 5000 (rupiah) dan hari tidak hujan, yang dapat
ditulis sebagai ekspresi:
(uang > 5000) && (!hujan)

1. /* File: gabungan.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Contoh perbandingan nilai numerik */

5. #include<stdio.h>

6. int main ()

7. {/* Kamus */

8. int uang= 6000;

9. int hujan=0; /*artinya hujan bernilai FALSE */

10. /* Program */

11. printf ("uang>5000 dan tidak hujan: %d \n", (uang>5000) && (!

hujan));

12.

13. uang= 6000;

14. hujan=1; /*artinya hujan bernilai TRUE */

15. printf ("uang>5000 dan tidak hujan: %d \n", (uang>5000) && (!

hujan));

16.

17. return 0;

18. }

Rangkuman Kompetensi

Menggabungkan pemakaian operator.


Aktivitas kreatif

1. Tuliskanlah beberapa kondisi lainnya berdasarkan lebih banyak


variabel, dan tuliskanlah ekspresinya dalam bahasa C.

Inilah Computational Thinking!

Dengan memahami operator "campuran" ini, Anda dapat mengkomposisi


beberapa ekspresi dan juga melakukan dekomposisi dari sebuah ekspresi
yang hasilnya true atau false. Ekspresi terdiri dari beberapa sub-ekspresi
yang akan dikomputasi sesuai dengan urutannya. Sebuah ekspresi yang
hasil perhitungannya true atau false akan menjadi dasar
dari construct berikutnya yang dipeljari pada bagian selanjutnya, sebagai
bagian dari instruksi kondisional.

Operasi Penambahan Satu pada Nilai Integer


(Increment)
Operasi untuk menambahkan satu ke suatu nilai integer seringkali
diperlukan sehingga bahasa C menyediakan operator ++ yang artinya
adalah sebagai berikut:

i++ artinya setelah dieksekusi, nilainya bertambah dengan 1. Jika semula


nilai i adalah lima, setelah instruksi i++ maka nilai I menjadi 6.

++i artinya sebelum dieksekusi, nilainya bertambah dengan 1. Jika nilai i


adalah lima, setelah instruksi ++ maka nilai I menjadi 6.

1. /* File: inkremen.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */


3. /* Deskripsi : */

4. /* Efek dari operator ++ */

5. #include<stdio.h>

6. int main ()

7. {

8. /* Kamus */

9. int i;

10. /* Program */

11. i = 3;

12. printf ("Nilai i :%d %d\n", i, i++);

13. i = 3;

14. printf ("%d\n", ++i); /* sebelum dicetak, nilai i ditambah 1 */

15.

16. return 0;

17. }

Rangkuman Kompetensi
Memakai operator inkremen untuk maksud yang tepat.

Aktivitas kreatif

Selain inkremen, dikenal operator dekremen yaitu --.

Gantilah notasi ++ dengan – dan amati eksekusi programnya.

Inilah Computational Thinking!

Dengan melakukan dekomposisi nama variabel dan operator ++ dan


mengamati letaknya, Anda dengan mudah memahami urutan operasi
inkremen yang dilakukan terhadap nilai yang disimpan.

Dengan pola yang sama, Anda akan memahami operasi dekremen (--)
yang mempunyai pola operasi yang sama dengan ++, hanya saja efeknya
yang berbeda yaitu bukan menambah satu, melainkan mengurangi
dengan satu.

Pengantar Instruksi Kondisional


Dengan hanya menuliskan instruksi yang diberikan contohnya pada
program-program di modul sebelumnya, Anda selalu mendapatkan
program yang alur eksekusinya sama, yaitu sesuai dengan urutan
penulisan pada program. Program akan dieksekui mulai dari baris
pertama sampai dengan baris terakhir. Construct ini disebut sebagai
konstruksi sekuensial.

Pada bagian ini anda akan mengenal bagaimana instruksi dipilih untuk
dijalankan, yang disebut sebagai instruksi kondisional.

Instruksi if
Instruksi kondisional IF dalam bahasa C mempunyai pola kalimat sebagai
berikut:

1. if (/*kondisi*/)

2. {

3. /* instruksi atau deretan instruksi */

4. }

Dengan kondisi adalah sebuah ekspresi boolean, dan mengakibatkan


program hanya melakukan instruksi yang dituliskan di antara {} jika dan
hanya jika evaluasi kondisi benar.

1. /* File: IF1.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* contoh pemakaian IF satu kasus */

5. /* membaca nilai integer, menuliskan nilainya jika positif */

6. #include<stdio.h>

7. int

8. main ()

9. {
10. /* Kamus */

11. int a;

12. /* Program */

13. printf ("Contoh IF satu kasus \n");

14. printf ("Ketikkan suatu nilai integer ");

15. scanf ("%d", &a);

16. if (a >= 0)

17. {

18. printf ("Nilai a positif %d \n", a);

19. }

20. /* jika nilai a tidak positif maka program tidak melakukan apa-apa

*/

21. return 0;

22. }

Rangkuman Kompetensi

Mengenal kata kunci if dalam bahasa C dan dampak eksekusinya.


Aktivitas kreatif

Gantilah program yang menulis bilangan positif dengan bilangan lebih


besar dari 5.

Inilah Computational Thinking!

Instruksi if adalah salah satu komputasi yang dapat dilakukan dalam


algoritma. Pemroses bahasa C dapat melaksanakan instruksi tersebut
sesuai dengan penjelasan yang diberikan. Intruksi if akan berguna untuk
melakukan problem solving di mana persoalan didekomposisi menjadi
bagian yang memenuhi syarat saja yang ditangani. Misalnya sebuah
mesin ATM hanya akan mengeluarkan uang jika lembaran uang yang
tersedia ada dan cukup sesuai permintaan.

Instruksi if-else
Instruksi kondisional IF-ELSE dalam bahasa C mempunyai pola kalimat
sebagai berikut:

1. if (/*kondisi*/)

2. {

3. /* instruksi atau deretan instruksi yang dijalankan

4. jika evaluasi kondisi TRUE*/

5. }

6. else

7. {

8. /* instruksi atau deretan instruksi yang dijalankan

9. jika evaluasi kondisi FALSE */


10. }

Pada contoh program berikut, bilangan 0 akan digolongkan sebagai


“positif.”

1. /* File: IF_ELSE.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* contoh pemakaian IF dua kasus komplementer */

5. /* Membaca sebuah nilai, */

6. /* menuliskan 'Nilai a positif , nilai a', jika a >=0 */

7. /* 'Nilai a negatif , nilai a', jika a <0 */

8. #include<stdio.h>

9. int main ()

10. {

11. /* Kamus */

12. int a;

13. /* Program */

14. printf ("Contoh IF dua kasus \n");

15. printf ("Ketikkan suatu nilai integer :");

16. scanf ("%d", &a);

17. if (a >= 0)

18. {

19. printf ("Nilai a positif %d \n", a);

20. }
21. else /* a< 0 */

22. {

23. printf ("Nilai a negatif %d \n", a);

24. }

25. return 0;

26. }

Rangkuman Kompetensi

1. Mengenal perbedaan Anda instruksi kondisional if (...) {....} yang


dijelaskan sebelumnya dengan instruksi kondisional if (...) {....} else
{ .... } yang dijelaskan pada bagian ini.
2. Memahami eksekusi "sekuensial" yang akan dilakukan sebuah
instruksi if (...) {....} else { .... }.

Aktivitas kreatif

1. Anda dapat menuliskan eksekusi yang sama dari sebuah instruksi if


(...) {....} else { .... } dengan menuliskannya menjadi dua buah
instruksi if yang berurutan sebagai berikut : if ( <kondisi. ) {....}; if (<!
kondisi>) { .... } dengan melakukan transformasi kode pada contoh
program di atas. Namun, maknanya akan berbeda (lihat penjelasan
pada bagian "Inilah Computational Thinking!").

Inilah Computational Thinking!

Instruksi if() { } else { } adalah salah satu “tools” untuk melakukan


dekomposisi. Anda melakukan dekomposisi persoalan menjadi dua
bagian yang “disjoint”, yaitu bagian yang memenuhi syarat, dan yang tidak
memenuhi syarat. Masing-masing bagian ditangani dengan instruksi
(solusi) yang berbeda. Pola ini akan sering Anda perlukan, misalnya untuk
menuliskan instruksi yang menangani data valid dan data tidak valid
(error condition).

Dari segi eksekusi, sebuah instruksi if (...) {....} else { .... } dapat dituliskan
menjadi dua buah instruksi if yang berturutan dengan kondisi yang saling
menegasi. Dalam hal ini, Anda menuliskan konstruksi program yang salah
karena makna dari analisis if ... else .... adalah menentukan dalam satu
analisis, dua kondisi yang bertentangan. Program Anda benar dalam
eksekusinya, namun salah konstruksinya. Inilah Computational Thinking,
di mana dekomposisi suatu program menjadi elemen pemrograman
harus sesuai dengan analisis persoalannya. Misalnya saat Anda
menganalisis data yang valid dan tidak valid, Anda melakukan peninjauan
terhadap data valid, dan menentukan tindakan (dalam bentuk sederetan
instruksi) terhadap dua kasus tersebut berdasarkan satu analisis.

Kalimat if (...) {...} mempunyai pola analisis persoalan yang berbeda


dengan if (...) {... } else {... }.

Instruksi if-elseif
Blok instruksi else dapat dituliskan lebih dari satu. Jika ada lebih dari satu
tentunya harus disertai kondisi.

1. /* File: IF_ELSE_IF.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* contoh pemakaian IF tiga kasus */

5. /* Membaca sebuah nilai, */

6. /* menuliskan 'Nilai a positif , nilai a', jika a >0 */

7. /* 'Nilai Nol , nilai a', jika a = 0 */


8. /* 'Nilai a negatif , nilai a', jika a <0 */

9. #include<stdio.h>

10. int main ()

11. {

12. /* Kamus */

13. int a;

14. /* Program */

15. printf ("Contoh IF tiga kasus \n");

16. printf ("Ketikkan suatu nilai integer :");

17. scanf ("%d", &a);

18. if (a > 0)

19. {

20. printf ("Nilai a positif %d \n", a);

21. }

22. else if (a == 0)

23. {

24. printf ("Nilai Nol %d \n", a);

25. }

26. else /* a < 0 */

27. {

28. printf ("Nilai a negatif %d \n", a);

29. }

30. return 0;

31. }
Rangkuman Kompetensi

1. Mengenal perbedaan sintaktikal (bentuk/pola kalimat) if (...) {...}


dengan if (...) {...} else {....} dan dibandingkan dengan if (...) {...} else
if (...) {....} else {...}.
2. Memahami eksekusi dari satu kalimat banyak if sebagai sederetan
instruksi sekuensial mulai dari atas sampai terakhir, dengan "else"
terakhir yang merupakan kondisi "tersisa" dari sebelumnya.

Aktivitas kreatif

1. Cobalah membuat latihan dengan lebih dari 3 kasus, misalnya:


1. Berdasarkan kode hari dalam minggu, Anda akan menuliskan
(0=Minggu; 1=Senin; 2=Selasa; 3=Rabu; 4=Kamis; 5=Jumat;
6=Sabtu).
2. Berdasarkan kode bulan, Anda menuliskan nama bulan mulai
Januari s.d. Desember.
2. Apa perbedaan program di atas dengan program sebagai berikut:
1. /* File: IF_ELSE_IF1.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* contoh pemakaian IF tiga kasus */

5. /* Membaca sebuah nilai, */

6. /* menuliskan 'Nilai a positif , nilai a', jika a >0 */

7. /* 'Nilai Nol , nilai a', jika a = 0 */

8. /* 'Nilai a negatif , nilai a', jika a <0 */

9. #include<stdio.h>

10. int main ()


11. {

12. /* Kamus */

13. int a;

14. /* Program */

15. printf ("Contoh IF tiga kasus dengan tiga kalimat IF \n");

16. printf ("Ketikkan suatu nilai integer :");

17. scanf ("%d", &a);

18. if (a > 0)

19. {

20. printf ("Nilai a positif %d \n", a);

21. }

22. if (a == 0)

23. {

24. printf ("Nilai Nol %d \n", a);

25. }

26. if (a < 0)

27. {

28. printf ("Nilai a negatif %d \n", a);

29. }

30. return 0;

31. }

Untuk contoh ini (tanpa adanya "else" ) akan memberikan dampak


eksekusi yang berbeda, yang menjadikan program tidak efisien dan jika
analisis sub-persoalan salah, dapat "berbahaya" (kondisi yang sama
ditangani dengan sekumpulan instruksi yang berbeda).
Inilah Computational Thinking!

Dibandingkan dengan dekomposisi yang dapat dilakukan dengan


instruksi if sebelumnya, dengan instruksi if () { } else if () { } else if () {} else
{} Anda dapat melakukan dekomposisi persoalan menjadi berapapun
bagian yang Anda tentukan; masing-masing bagian memenuhi syarat
yang ditentukan yang melekat pada if sehingga setiap bagian ditangani
sesuai dengan syarat terkait. Pola if () { } else {} diaplikasikan untuk
membentuk struktur yang lebih kompleks, namun berpola sama.

Per dicatat bahwa analisis persoalan yang benar dan "sehat" adalah jika
setiap kondisi untuk kelompok instruksi harus berbeda dan tidak
beririsan karena merupakan dekomposisi untuk solusi yang diakibatkan
oleh kondisi yang berbeda. Penulisan tanpa "else" akan mengakibatkan
evaluasi ulang yang tidak mengeliminasi kasus yang sudah ditangani.

Pengantar Instruksi Pengulangan


Pengulangan adalah construct yang terakhir dalam pemrograman
prosedural, setelah sekuensial dan kondisional.

Instruksi pengulangan sangat penting dalam pemrograman, karena


memungkinkan komputer untuk mengulangi instruksi yang kita berikan
dalam program secara konsisten (dibandingkan manusia yang jika
mengulang akan cenderung melakukan kesalahan). Setiap bahasa
pemrograman menyediakan instruksi pengulangan dengan sintaks
(aturan penulisan)-nya masing-masing.

Bahasa C menyediakan tiga “construct” utama untuk pengulangan yaitu


bentuk:

1. for (...) { ...};


2. while (....) {.... };
3. do {....} while(.....);
Pengulangan for

Pengulangan for mempunyai pola instruksi sebagai berikut:


1. for (<kondisi-awal>; <kondisi-pengulangan>; <perubah-kondisi> ) {

2. /* Badan loop */

3. /* instruksi atau deretan instruksi yang diulang */

4. }

Program akan mengulang instruksi atau deretan instruksi dalam badan loop for,

sampai suatu saat kondisi-pengulangan bernilai FALSE.

Kondisi awal, kondisi-pengulangan dievaluasi dari ekspresi, dan perubah-kondisi

harus dipastikan bahwa suatu saat kondisi pengulangan tidak dipenuhi, yang

mengakibatkan instruksi for berhenti.

Pemakaian instruksi for yang paling sederhana adalah untuk mengulang sebanyak N

kali, dengan mendefinisikan pencacah (counter) adalah sebuah variabel bernama i,

dengan nilai I =0,1,2,3…… N, yang diberikan melalui contoh sebuah program yang

dibuat untuk menuliskan 3 baris teks sebagai berikut, bukan dengan menuliskan 3

baris instruksi printf tetapi dengan menggunakan for. Output dari program adalah 3

baris teks sebagai berikut:

"Saya senang belajar bahasa C"

"Saya senang belajar bahasa C"

"Saya senang belajar bahasa C"


Berikut ini adalah pola penggunaan pengulangan bentuk FOR yang didasari

pencacah. Dengan menulis instruksi for, perintah printf hanya perlu dituliskan satu

kali saja, karena merupakan instruksi yang akan diulang dengan dikontrol oleh

instruksi for.
1. /* File: for.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi :

4. /* print “Saya senang” sebanyak 3 kali */

5. #include<stdio.h>

6. int main ()

7. {

8. /* Kamus : */

9. int i;

10. /* Algoritma */

11. for (i=0; i<3; i++) {

12. printf ("Saya senang belajar bahasa C \n");

13. }

14. return 0;

15. }

Pada program di atas, pada awal eksekusi instruksi for, i bernilai 0 dan i akan

dievaluasi setiap kali pengulangan untuk nilai i=0,1,2, dengan hasil:


1. Pada saat I bernilai 0 atau 1 atau 2, ekspresi i < 3 akan menghasilkan TRUE.

2. Pada saat nilai i=3 maka ekspresi i < 3 akan menghasilkan FALSE (salah),

loop berhenti.

Nilai i bisa berubah dari 0 ke 1; 1 ke 2; 2 ke 3 karena setiap kali pelaksanaan, berkat

instruksi pengubah yaitu i++.

Instruksi for dapat digunakan untuk membuat pengulangan yang lebih umum, yang

akan dijelaskan kemudian.

Rangkuman Kompetensi

1. Mengenal pola kalimat fordalam bahasa C, khususnya untuk melakukan iterasi

i=0,1,2,3….

2. Mengaplikasikan pola pengulangan berdasarkan pencacah untuk mengulang

menulis teks.

Aktivitas kreatif :

1. Ubahlah teks program di atas sehingga mengulang untuk menuliskan teks

“Saya senang belajar bahasa C” sebanyak 1000 kali.


2. Tuliskan sebuah program yang dapat mengulang menuliskan “Saya seang

belajar bahasa C” sebanyak N kali, dengan nilai N yang akan ditentukan dari

deklarasinya.

3. Tuliskan sebuah program yang dapat mengulang menuliskan “Saya seang

belajar bahasa C” sebanyak N kali, dengan nilai N yang akan dibaca dengan

scanf.

Inilah Computational Thinking!

Loop adalah abstraksi dari proses pengulangan. Dengan hanya menuliskan satu baris

saja, program dapat mengulang melakukan sejumlah instruksi. Anda dapat

menuliskan ribuan baris hanya dengan menulis 3 baris instruksi program!

Pengulangan while-do
Pola kalimat while-do dalam bahasa C adalah sebagai berikut:

1. while (<kondisi-pengulangan>) {

2. /* Badan loop */

3. /* deretan instruksi yang diulang */

4.

5. }

Urutan instruksi yang dikerjakan dengan pola instruksi while tersebut


adalah sebagai berikut:
[1] Program melakukan evaluasi kondisi-pengulangan.

[2] Jika hasil evaluasinya benar, maka deretan instruksi dilaksanakan.

[1] Program melakukan evaluasi kondisi- pengulangan.

[2] Jika hasil evaluasinya benar, maka deretan instruksi dilaksanakan.

Diulang sampai suatu saat hasil evaluasi salah . . .

[1] Program melakukan evaluasi kondisi-pengulangan.

[2] Jika hasil evaluasinya salah, maka pengulangan dihentikan.

Deretan eksekusi di atas dapat diringkas penulisannya menjadi:

Selama kondisi-pengulangan benar,

Kerjakan deretan instruksi

Dengan demikian, ada kemungkinan bahwa deretan instruksi tidak


pernah dikerjakan, yaitu jika pada evaluasi pertama kali, hasil evaluasi
kondisi pengulangan bernilai salah (FALSE).

1. /* File: WHILEdo.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* print “Saya senang” sebanyak 3 kali */

5. #include<stdio.h>

6. int main ()
7. {

8. /* Kamus : */

9. int i=0;

10. /* Algoritma */

11. while (i<3) { /* program diulang selama nilai i < 3 */

12. printf ("Saya senang belajar bahasa C \n");

13. i++;

14. }

15. return 0;

16. }

Rangkuman Kompetensi

1. Mengenal, memahami pola kalimat while () { } dan mengaplikasikan


untuk program contoh.
2. Mengenal pola eksekusi dan abstraksi dari while () { }.

Aktivitas kreatif

1. Analisis bentuk pengulangan bagian ini, dan diskusikan mengenai


kesamaan dan perbedaannya dengan bentuk for dengan pencacah
yang dijelaskan sebelumnya.
2. Berikan contoh program yang mengandung instruksi pengulangan
WHILE yang tidak pernah dieksekusi instruksi dalam badan loop-
nya.
3. Ubahlah contoh program dalam bentuk for pada contoh
sebelumnya menjadi pengulangan dengan pola kalimat while () {}.
Inilah Computational Thinking!

Pada bagian ini, Anda diharapkan memahami abstraksi dari pengulangan,


yang dituliskan dengan bentuk pola kalimat yang lain. Untuk hasil
eksekusi program yang sama persis dengan contoh sebelumnya,
program dapat dituliskan instruksi yang berbeda.

Pengulangan do-while
Pola kalimat while-do dalam bahasa C adalah sebagai berikut:

1. do {

2. /* Badan loop */

3. /* deretan instruksi yang diulang */

4.

5. } while (<kondisi-pengulangan>) ;

Eksekusi dari pengulangan bentuk ini dapat diuraikan sebagai berikut:

[1] Program mengeksekusi deretan instruksi yang diulang.

[2] Program melakukan evaluasi kondisi-pengulangan.

[3] Jika hasil evaluasinya benar, maka deretan instruksi dilaksanakan.

[1] Program megeksekusi deretan instruksi yang diulang.

[2] Program melakukan evaluasi kondisi-pengulangan.

[3] Jika hasil evaluasinya benar, maka deretan instruksi dilaksanakan.


Diulang sampai evaluasi kondisi pengulangan hasilnya salah . . .

[1] Program megeksekusi deretan instruksi yang diulang.

[2] Program melakukan evaluasi kondisi- pengulangan.

[3] Jika hasil evaluasinya salah, maka pengulangan dihentikan.

Deretan eksekusi diatas dapat diringkas penulisannya menjadi:

Kerjakan deretan instruksi

Selama kondisi-pengulangan benar

Dengan demikian, dapat disimpulkan bahwa deretan instruksi dalam


badan loop pasti dikerjakan minimal satu kali.

1. /* File: doWHILE.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* print “Saya senang” sebanyak 3 kali */

5. #include<stdio.h>

6. int main ()

7. {

8. /* Kamus : */

9. int i=0;

10. /* Algoritma */

11. do {
12. printf ("Saya senang belajar bahasa C \n");

13. i++;

14. } while (i<5);

15. return 0;

16. }

Rangkuman Kompetensi

1. Mengenal, dan memahami pola kalimat do{ } while (); dan


mengaplikasikan untuk program contoh.
2. Mengenal pola eksekusi dan abstraksi dari do { } while ();.
3. Karena deretan instruksi dalam badan loop pasti dilaksanakan
minimal satu kali, Anda perlu melakukan analisis yang cermat yaitu
yakin bahwa instruksi dalam "badan loop" pasti dilaksanakan
minimal satu kali tanpa perlu diperiksa sebelumnya

Aktivitas kreatif

1. Ubahlah program contoh yang diberikan dalam bagian for menjadi


bentuk pengulangan yang dijelaskan pada bagian ini.
2. Ubahlah program contoh yang diberikan dalam bentuk while (..) {...}
menjadi bentuk pengulangan yang dijelaskan dalam bagian ini.

Inilah Computational Thinking!

Anda lakukan dekomposisi suatu construct pengulangan, dan Anda akan


menemukan bagian-bagian yang sama : kondisi pengulangan atau
kondisi berhenti, dan kumpulan instruksi yang diulang, Anda akan
memahami eksekusinya dari kata kunci yang diberikan.
Dengan melakukan dekonstruksi (dekomposisi program menjadi elemen-
elemen pembangunnya), Anda dapat mengkonstruksi ulang suatu
program menjadi bentuk yang lainnya, yang menghasilkan eksekusi yang
sama. Anda mengenali elemen pembangun program dari kata kunci yang
dipakai untuk menuliskan instruksi tersebut (aspek tekstual dan
sintaktikal), dan juga memahami aspek eksekusi programnya. Sebuah
program yang tampaknya berbeda akan sama efeknya (hasilnya) jika
dieksekusi. Konstruksi program yang baik dan benar adalah yang dekat
dengan maknanya.

Melalui berbagai bentuk loop, Anda mengenal bagaimana komputasi


dijalankan oleh komputer untuk dipakai memecahkan persoalan anda.

Forever
Program berikut ini adalah contoh program yang akan dijalankan terus
menerus, yang kelak akan berguna. Misalnya, program sistem operasi,
akan berjalan terus menerus menunggu sampai pengguna menekan
suatu tanda “exit”. sebuah "screen saver" juga akan menggambarkan
sesuatu di layar secara terus menerus.

Untuk saat ini, cara menghentikan program adalah dengan


menginterupsi eksekusi yaitu dengan menekan tombol [Ctrl] dan tombol
"c" secara bersamaan.

1. /* File: forever.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Loop terus menerus, akan sering dipakai untuk program menunggu

event */

5. #include<stdio.h>

6. int main ()
7. {/* Kamus : */

8.

9. /* Program */

10. printf("Program akan looping, akhiri dengan Ctrl-c ");

11. while (1) /* atau for (;;) */

12. { printf ("Tunggu ^c....\n");

13. /* program akan terus menerus dijalankan, sampai

diinterupsi*/

14. /* cara interupsi adalah dengan menekan tombol [Ctrl] dan

tombol "c" bersamaan*/

15. }

16. return 0;

17. }

Instruksi while (1) akan selalu menghasilkan benar sehingga instruksi


dalam badan loop while tersebut akan dieksekusi terus menerus.

Sedangkan for (;;) biasa dibaca sebagai forever artinya tidak ada yang
dilakukan pada awal, tidak ada definisi kondisi berhenti, dan tidak ada
instruksi pengubah. Artinya adalah badan loop akan dijalankan terus
menerus karena tidak ada awal dan tidak ada akhir.

JIka dalam badan loop tidak ada instruksi menulis, maka Anda tidak akan
tahu bahwa program sedang aktif menjalankan instruksi dalam badan
loop.

Rangkuman Kompetensi
1. Mengenal kerangka program yang akan berjalan tanpa henti, yaitu
program yang hidup terus menerus yang terkadang justru
dibutuhkan kelak.

Aktivitas kreatif

1. Anda dapat menambahkan instruksi untuk menangani ketukan


tombol/kunci yang lain (bukan interupsi) dalam badan loop.

Inilah Computational Thinking!

Pada contoh ini, Anda mempelajari pola sebuah program yang hidup
terus menerus (infinite loop), yang memang sengaja diprogram seperti
contoh di atas. Sebuah loop yang terus menerus akibat kesalahan
program tidak boleh terjadi. Misalnya program sebagai berikut:

1. #include <stdio.h>

2.

3. int main(void)

4. {

5. int a = 0;

6. while (a < 10) {

7. printf("%d\n", a);

8. if (a = 5)

9. printf("a equals 5!\n");

10. a++;

11. }

12. return 0;
13. }

Program di atas akan mengakibatkan program tidak pernah berhenti


karena instruksi if (a=5) akan mengakibatkan evaluasi kondisi pada if
selalu true dan a bernilai 5. Setelah instruksi if, a akan bernilai 6.

Pengantar Array - Tabel


Satu nama variabel yang pernah Anda deklarasikan, hanya berisi satu
nilai saja. Ada kasus di mana kita membutuhkan untuk menyimpan
sekumpulan nilai yang merupakan himpunan nilai yang maknanya
sejenis. Misalnya ada 5 anak, dan kita ingin menyimpan data umur
masing-masing anak yang ber-type integer. Untuk menyimpan data umur
kelima anak tersebut, kita dapat menuliskan 5 baris instruksi seperti
berikut:

int umur1;

int umur2;

int umur3;

int umur4;

int umur5;

Cara tersebut tidak praktis, bayangkan jika nilai yang disimpan untuk
1000 anak atau bahkan lebih. Program Anda akan sangat panjang hanya
untuk mendeklarasikan variabel saja.

Untuk mendefinisikan tabel umur yang dapat menampung 1000 nilai


integer, Anda cukup membuat deklarasi.

int umur[1000];

Dan Anda akan dapat mengakses elemennya dengan indeks yang dimulai
dari 0: umur[0], umur[1], … umur[999].
Tabel dikenal dengan istilah lain : array, vektor, larik,…

Inisialisasi Isi Tabel


Berikut ini adalah contoh cara inisialisasi nilai tabel sesuai type elemen
yang disimpannya, pada deklarasi tabel.

1. /* File: tabel1.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Mendefinisikan array dan mengisi nilainya */

5. #include<stdio.h>

6. int main ()

7. {/* Kamus : */

8. /* Kamus */

9. int Tab [5] = {1, 2, 3, 4, 5};/* Tab[0]=1; Tab[1]=2; . .. Tab[4]=5

*/

10. float TabX[3]= {1.5, 3.5E2, 9.99};

11. char Tabchar[4]= {'1', '2', '@', 'Z'};

12.

13. int i; /* untuk iterasi indeks tabel */

14. /* menuliskan isi Tab berderet ke kanan*/

15. for (i=0; i<5; i++) {

16. printf ("Tab[%d]= %d ;", i, Tab[i]);

17. }

18. printf ("\n");

19.
20. /* Latihan : tuliskan nilai TabX dan TabChar */

21.

22. return 0;

23. }

Rangkuman Kompetensi

1. Mengenal definisi tabel, kegunaannya secara sederhana untuk


menyimpan banyak nilai.
2. Mengenal cara deklarasi dan inisialisasi tabel, dan menuliskannya.

Aktivitas kreatif

1. Modifikasi program untuk menuliskan nilai berderet ke bawah.


2. Modifikasi program di atas, jika diinginkan outputnya adalah indeks
tabel, dan tabelnya sebagai berikut:
0 1
1 2
2 3
3 4
45
3. Ubah program sehingga hasil outputnya menjadi:
Tab[0] = 1
Tab[1] = 2
Tab[2] = 3
Tab[3] = 4
Tab[4] = 5

Inilah Computational Thinking!


Tabel merupakan salah satu cara untuk mengorganisasi sekumpulan data
yang penting dalam informatika. Tabel juga mengabstraksi sekumpulan
data ber-type sama, yang akan diolah sebagai sekumpulan nilai.
Menganalisis dan mengorganisasi data secara logis adalah penjabaran
operasional dari pilar algoritma dalam Computational Thinking.

Baca Tulis Isi Tabel


Seperti halnya dengan type primitif lainnya, selain menentukan nilai
variabel dengan melakukan inisialisasi pada saat deklarasi, proses
penentuan nilai dapat dilakukan dengan assignment, atau dari
pembacaan input. Berikut ini contoh program mendeklarasikan tabel dan
mengisi nilainya dari hasil pembacaan dari apa yang diketikkan pengguna
dengan instruksi scanf.

1. /* File: tabel1.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Mendefinisikan array dan mengisi nilainya dari input yang dibaca */

5. #include<stdio.h>

6. int main ()

7. {

8. /* Kamus */

9. int Tab [5];


10. int i;

11. /* baca isi Tab */

12. for (i=0; i<5; i++) {

13. scanf ("%d", &Tab[i]);

14. }

15.

16. /* menuliskan isi Tab berderet ke kanan*/

17. for (i=0; i<5; i++) {

18. printf ("Tab[%d]= %d ;", i, Tab[i]);

19. }

20. printf ("\n");

21.

22. return 0;

23. }

Rangkuman Kompetensi
Mengenal cara mengisi nilai elemen tabel dengan instruksi pembacaan.
Selanjutnya, Anda dapat melakukan proses lain dari hasil pembacaan.
Misalnya menghitung rata-rata, nilai tengah, atau lainnya.

Aktivitas kreatif

Ubahlah program di atas sehingga pengisian tabel dilakukan dengan


instruksi assignment. Diskusikan perbedaan, limitasi & kelebihan cara dari
berbagai cara pengisian tabel (inisialisasi, assignment, atau pembacaan
input) dan akibatnya. Memilih cara yang paling tepat untuk mendapatkan
hasil yang sama adalah mengolah kemampuan problem solving.

Inilah Computational Thinking!

Sekumpulan data yang akan diproses terkadang harus disimpan dalam


tabel, dan berasal dari data yang diinput oleh pengguna. Melalui contoh
program di atas, Anda akan menggunakannya untuk membaca dan
menyimpan data dari dunia nyata, seperti yang dicontohkan. Misalnya
saat Anda perlu memecahkan persoalan terkait sekumpulan objek (buku,
orang, barang,…). Hal ini akan dilatih pada modul latihan problem solving.

Maximum-Minimum
Diketahui sekumpulan nilai, proses yang paling sering diperlukan adalah
mengetahui nilai maksimum. Misalnya, Anda ingin mengetahui umur
yang paling tua, anak yang paling berat, nilai yang paling tinggi.

Selain nilai maksimum, diperlukan juga nilai minimum: anak yang paling
muda, dan berat badannya paling ringan (artinya paling kurus), atau
siswa yang nilainya paling rendah (untuk dapat diberi tutorial khusus).

Pada contoh berikut, diberikan ilustrasi tentang menentukan nilai


maksimum dari sekumpulan nilai yang disimpan pada tabel integer.
Karena proses yang perlu ditunjukkan adalah menentukan maksimum,
maka pengisian tabel dilakukan dengan inisialisasi untuk mempersingkat
program dan ketermudahan baca.

Penentuan nilai maksimum dilakukan dengan memeriksa elemen tabel


satu per satu, mulai dari elemen ke-1 sampai dengan elemen yang
terakhir, yaitu dengan membandingkan setiap elemen dengan nilai
maksimum sementara yang disimpan. Kenapa dimulai dari elemen ke-1?
Karena nilai maksimum sementara harus dipunyai saat proses
mengulang dimulai, sehingga secara umum, algoritma untuk
menentukan nilai maksimum yang disimpan pada Tabel bernama Tab
dengan 10 elemen adalah:

Tentukan Tab[0] sebagai nilai maksimum sementara yang diberi


nama max !

Untuk setiap elemen Tab[1] s.d. Tab[9] yang diakses dengan nama
Tab[i]

Jika nilai Tab[i] > max maka max=Tab[i]

/* selesai pemeriksaan Tab[1] s.d. Tab[9]: max adalah nilai paling


besar */

Program lengkap dalam bahasa C diberikan sebagai berikut:

1. /* File: max.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Mencari nilai maksimum dari sebuah tabel yang berisi 10 nilai

integer */

5. #include<stdio.h>

6. int main ()

7. {/* Kamus : */
8. int i;

9. int Tab[10]= { 1, 50 , 6 , 200, 3, 100, 30, 8, 99, 100 };

10. int max;

11. /* Algoritma */

12. max = Tab[0];

13. for (i=1;i< 10; i++) {

14. if (Tab[i]>max) {

15. max=Tab[i];

16. }

17. }

18. printf ("Nilai Max= %d", max); return 0;

19. }

Rangkuman Kompetensi

1. Memahami algoritma untuk menentukan nilai maksimum dari


sekumpulan nilai yang disimpan dalam sebuah tabel.
2. Koding algoritma yang diberikan menjadi program dalam bahasa C.

Aktivitas kreatif

1. Bangun algoritma lain dengan menggunakan pola algoritma


penentuan maksimum menjadi:
o Menentukan nilai minimum, dengan hanya mengubah
variabel max menjadi min dan mengubah satu karakter saja.
o Menentukan nilai rata-rata dari isi Tabel.
o Menentukan “median” dari isi tabel. Median adalah nilai
(min+max)/2.
o Jika ada kemungkinan bahwa nilai yang maksimum muncul
lebih dari satu kali (misalnya anak yang paling tua umurnya
sama), menentukan nilai maksimum dan sekaligus banyaknya
elemen tabel yang nilainya maksimum tersebut.
2. Karena Anda sudah mengenal berbagai bentuk loop, ubahlah
program contoh di atas menggunakan bentuk loop yang lain.

Inilah Computational Thinking!

Memakai pola program maksimum untuk menentukan minimum dengan


memodifikasi sesedikit mungkin, adalah Computational Thinking! Anda
tidak memulai solusi dari "nol", tetapi memanfaatkan pola program yang
sudah ada.

Sorting-Maximum Sort
Selain menentukan nilai maksimum/minimum, atau menyimpulkan
sesuatu dari sekumpulan nilai, proses mengurutkan adalah salah satu
proses yang penting dalam informatika.

Ada berbagai cara untuk melakukan pengurutan (sorting). Tentang


sorting dan berbagai metoda sorting dapat Anda pelajari bahkan
di: https://en.wikipedia.org/wiki/Sort , https://en.wikipedia.org/wiki/
Sorting_algorithm dan dari laman tersebut, Anda dapat mengakses setiap
metoda sorting.

Untuk metoda tertentu,


misalnya: https://en.wikipedia.org/wiki/Comparison_sort

Salah seorang ahli dalam bidang informatika, yaitu Donald Knuth, pada
tahun 1970-an sudah menuliskan satu buku yang layak Anda baca hanya
tentang sorting & searching, yang berjudul : "The Art of Computer
Programming: Volume 3: Sorting and Searching."

Proses sorting adalah proses yang paling menarik di dunia informatika,


karena ada banyak sekali algoritma yang sudah ditemukan, untuk
mendapatkan hasil yang sama yaitu data terurut. Dasar dari proses
sorting sangat beragam, antara lain dengan penyisipan (insertion),
pertukaran (exchange), seleksi/pemilihan (selection), penggabungan
(merging), perbandingan (comparison), atau lainnya. Algoritma sorting
menjadi dasar untuk mempelajari kinerja dan kompleksitas algoritma.

Pada tutorial ini, hanya akan disajikan satu metoda sorting yaitu dengan
menentukan nilai maksimum untuk mengurutkan nilai tabel terurut
mengecil, yaitu untuk suatu tabel Tab[N] dengan nilai sembarang, setelah
proses pengurutan, diperoleh properti: Tab[0] >= Tab[1] >= . . . Tab[N-1]

Algoritma secara umum untuk tabel dengan 10 elemen adalah:

Ulangi untuk Tab[0] s.d. Tab[9],

Sebut indeks saat ini adalah i

Tentukan indeks pada Tab[k] s.d. Tab [9] yang nilainya maksimum

Tukar isi Tab[i] dengan Tab[max]

Proses hanya perlu dilakukan s.d Tab[8] sebab yang terakhir yaitu Tab[9]
tidak perlu diurutkan lagi.

Program dalam bahasa C untuk algoritma di atas adalah sebagai berikut:

1. /* File: maxsort.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Mengurutkan elemen tabel dengan metoda makimum sort */

5. #include<stdio.h>
6. int main ()

7. {

8. /* Kamus : */

9. int i;

10. int Tab[10]= { 1, 50 , 6 , 200, 3, 100, 30, 8, 99, 100 };

11. int max; /* indek di mana Tab[max] bernilai maksimum */

12. int k, temp; /* variabel kerja */

13. /* Algoritma maximum sort menurun, indeks paling kecil berisi nilai

paling besar*/

14. for (i=0; i<9; i++ ){

15. /* tentukan indeks max, di mana Tab[max] bernilai maksimum */

16. /* untuk index tabel i..10 */

17. max = i;

18. for (k= i+1 ;k< 10; k++) {

19. if (Tab[k]> Tab[max]) {

20. max=k;

21. }

22. }

23.

24. /* Tukar nilai Tab[max] dengan tab[i] */

25. temp= Tab[i];

26. Tab[i]= Tab[max];

27. Tab[max] = temp;

28. }

29. for (i=0;i<10;i++) {


30. printf (" %d ; ", Tab[i]);

31. }

32. return 0;

33. }

Rangkuman Kompetensi

Mengenal, memahami dan mengimplementasi sebuah contoh program


untuk mengurutkan sekumpulan nilai yang disimpan dalam sebuah tabel,
dengan salah satu cara pengurutan paling sederhana, yaitu
memanfaatkan konsep nilai maksimum yang sudah dipelajari
sebelumnya.

Aktivitas kreatif

1. Ubahlah program di atas sehingga data terurut membesar, yaitu


bahwa T[0] justru berisi data yang paling kecil nilainya.
2. Ubahlah sehingga program bukan melakukan inisialisasi nilai, tetapi
membaca data ukuran tabel (N), dan isi tabel Tab[0] s.d. Tab[N-1].
3. Lakukan studi untuk mencari algoritma pengurutan nilai tabel
lainnya, dan implementasikan dalam bahasa C.

Inilah Computational Thinking!

Mengurutkan (sorting) nilai dari yang paling besar ke yang paling kecil
atau sebaliknya, adalah salah satu kecakapan yang diperlukan
dalam problem solving karena dengan data yang terurut, Anda dapat
menganalisis banyak hal. Misalnya dalam analisis trend Anda akan
mengurutkan data sesuai waktu, untuk menentukan ranking prestasi
atau kejuaraan, Anda mengurutkan sesuai capaian nilai.

Mengurutkan terkadang dibutuhkan bukan hanya terhadap satu nilai


saja, tetapi terhadap dua atau lebih nilai, Misalnya pada data perolehan
medali lomba nasional, Anda akan mengurutkan peserta berdasarkan
perolehan medali emas/perak/perunggu dan provinsinya.

Karena banyak dibutuhkan, librari atau modul program


untuk sorting sudah banyak tersedia dan tinggal dipakai. Dalam hal ini,
Anda harus memilih yang tepat untuk karakteristik data yang diolah.

Untuk saat ini, nilainya hanya nilai numerik. Suatu hari, Anda akan perlu
menentukan urutan bukan hanya dari nilai numerik, misalnya urutan
leksikografis seperti urutan dalam kamus. Data yang sudah terurut akan
memudahkan seseorang menganalisis, menyimpulkan dan memecahkan
persoalan.

Pada latihan butir 3, saat Anda mengubah-ubah teks program yang berisi
algritma sorting, seharusnya bagian program anda yang berubah
hanyalah bagian pengurutan saja, bagian membaca dan menulis akan
sama. Dekomposisi program menjadi 3 bagian yaitu : (1) baca data, (2)
proses pengurutan data, (3) menulis hasil --> inilah Computational
Thinking! Selanjutnya, Anda dapat memakai pola ini untuk proses apa
saja, selain pengurutan, misalnya proses pencarian atau proses kalkulasi
statistik --> Inilah Computational Thinking!

Searching-Sequential Search
Searching (mencari suatu nilai tertentu) adalah salah satu
elemen problem solving yang sama pentingnya dengan sorting. Misalnya,
Anda sering mencari informasi dengan mesin pencari, atau mencari
sebuah nomor telpon dalam buku alamat, mencari sebuah kata dalam
sebuah kamus.
Pada bagian ini, diberikan contoh pencarian paling sederhana yaitu
mencari apakah paling tidak ada sebuah elemen tabel yang bernilai X.

Jadi, program akan memeriksa satu per satu elemen tabel mulai dari
indeks paling kecil, dan akan berhenti jika nilai X yang dicari ditemukan,
atau posisi yang diperiksa sudah ada pada elemen terakhir. Elemen
terakhir akan diperiksa terpisah karena dalam badan loop ada instruksi
untuk maju (i++; ), sehingga mencegah untuk “kebablasan” memeriksa
elemen tabel yang indeksnya di luar batas.

1. /* File: seqsearch.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Menentukan posisi di mana elemen tabel bernilai X */

5. #include<stdio.h>

6. int main ()

7. {

8. /* Kamus : */

9. int i;

10. int Tab[10]= { 1, 50 , 6 , 200, 3, 100, 30, 8, 99, 100 };

11. int X=8; /* indek di mana Tab[max] bernilai maksimum */

12.

13. /* Algoritma sequential search paling sederhana */

14. /* program berhenti pada indeks I di mana nilai diketemukan */

15. i=0;

16. while ( (Tab[i]!=X) && (i<9) ){

17. i++;

18. } /* Tab[i] == X atau i==9 */


19. if (Tab[i]==X) {

20. printf("indeks bernilai X = %d", i);

21. } else {

22. printf("Nilai tidak diketemukan");

23. } return 0;

24. }

Pola program di atas adalah pola program untuk mencari sebuah nilai
yang indeksnya paling kecil, dengan aman.

Rangkuman Kompetensi

Mengenal salah satu versi sequential search.

Aktivitas kreatif

1. Ubahlah program di atas, jika yang dikehendaki sebagai output


adalah posisi dengan indeks paling besar.
2. Ubahlah program di atas sehingga akan mencetak semua posisi
indeks yang nilainya X, jika ternyata ada lebih dari satu nilai X yang
muncul.
3. Program di atas selalu mencari nilai yang sudah ditentukan.
Ubahlah program sehingga nilai yang disimpan pada tabel dan juga
nilai yang dicari (X) bukan diisi dengan inisialisasi, tetapi dengan
instruksi pembacaan (scanf).
4. Lakukan riset untuk mencari metoda-metoda pencarian lain dan
bandingkan apakah lebih efisien dan lebih "aman" dari yang sudah
dibahas di atas. Banyak buku tentang searching dalam bahasa C
yang ditulis.
5. Search dapat menjadi optimal jika data sudah terurut. Misalnya
kalau data tabel terurut membesar, tidak ada gunanya untuk
melanjutkan memeriksa yang dberikutnya saat suatu nilai sudah
lebih besar dari nilai yang sedang diperiksa. Ubahlah program di
atas sehingga lebih efisien.
6. Jika data terurut seperti pada buku telpon, Anda tidak akan mencari
berurutan mulai dari yang pertama, tetapi bisa mulai dengan
menebak di tengah, dan menentukan apakah harus mencari pada
bagian separuh di belakang atau di depan. Ini adalah ide dari binary
search, yang dapat Anda pelajari prinsip dan algoritmanya di
laman Binary Search Algorithm. Coba implementasi algoritma yang
dituliskan pada laman tersebut.

Inilah Computational Thinking!

Search adalah salah satu algoritma yang akan sering digunakan


dalam problem solving, maka salah satu modal yang diperlukan
adalah searching. Pada hakekatnya komputer adalah tempat menyimpan,
dan kita membutuhkan untuk mencari apa yang sudah disimpan. Nilai-
nilai yang disimpan dapat diorganisasi dalam struktur data yang lebih
rumit dari tabel, dan algoritma yang diimplementasi juga lebih optimal.
Untuk mendapatkan gambaran algoritma yang menggunakan struktur
data dan teknik yang lebih sulit, Anda dapat mulai membaca Search
Algorithm.

Saat Anda dekomposisi masalah kompleks, dan menyimpulkan bahwa


diperlukan search, Anda dapat memakai salah satu algoritma search yang
ada. Donald Knuth bahkan menulis sebuah buku yang isinya Searching
dan Sorting : "The Art of Computer Programming: Volume 3: Sorting and
Searching ".

Pengantar Subprogram
Subprogram adalah modul program yang dapat dipanggil oleh sebuah
program, sehingga program pemakai (yang memanggil) dapat
memanfaatkan tanpa mengetahui detail dari instruksi dalam modul
tersebut. Jadi, modul program merupakan abstraksi dari suatu proses
komputasi yang dijelaskan spesifikasinya.

Dalam pemrograman, subprogram direalisasi menjadi fungsi atau


prosedur. Dalam bahasa C, hanya dikenal fungsi. Konsep prosedur
diterjemahkan menjadi fungsi, yang tidak mengembalikan nilai apapun.
Hal ini akan dibahas lebih dalam di bagian pemrograman, karena secara
semantik, fungsi berbeda dengan prosedur:

 Fungsi melakukan komputasi dan mengirimkan hasil komputasi.


Komputasinya ditulis sebagai “algoritma” pada badan fungsi, dan
dilakukan dengan memakai nilai paramater yang disalin sebelum
komputasi, sehingga fungsi tidak akan pernah mengubah nilai
parameter.
 Prosedur melakukan komputasi dengan mengubah “state”, yaitu
state dari variabel (nilai), maupun state dari parameter. Akibatnya,
prosedur dapat mengubah nilai parameter.

Sebuah program utama dalam bahasa C juga merupakan sebuah fungsi,


yang namanya khusus yaitu main. Contoh program halo.c adalah program
utama dalam bentuk "fungsi" yang mengirimkan sebuah nilai integer
dengan instruksi return 0; sedangkan halo1.c adalah program utama
dalam bentuk “prosedur” karena tidak mengembalikan/mengirimkan nilai,
sehingga nilai yang dikirimkan oleh main diberi kode void.

Fungsi
Sebuah fungsi terdiri dari komponen-komponen sebagai berikut:

1. Nama fungsi, akan dipakai untuk “memanggil” fungsi tersebut jika


diperlukan.
2. Type kembalian, yang akan dipakai sebagai “kontrak” antara
pemanggil dan fungsi.
3. Parameter (tidak harus ada), yang menjadi “modal” dari fungsi untuk
melakukan komputasi.
4. Badan fungsi, yaitu deretan instruksi yang akan dieksekusi saat
fungsi dipakai.

Nama fungsi, parameter dan type kembalian mencerminkan konsep


fungsi dalam matematika, yaitu suatu pemetaan dari suatu nilai menjadi
nilai lain. Misalnya Inverse(X) yang menghasilkan -X. Nama fungsi,
parameter dan type kembalian disebut sebagai spesifikasi dari fungsi,
harus dijelaskan dengan baik dalam bentuk komentar.

Dari komponen-komponen tersebut, fungsi akan mempunyai pola


penulisan sebagai berikut:

1. <type-kembalian> Nama-fungsi (list parameter dipisahkan tanda koma) {

2. /* Spesifikasi: penjelasan ringkas tentang apa yang dilakukan fungsi

*/

3.

4. return <nilai>;

5. }

Sebuah fungsi akan mengirimkan nilai hasil komputasi dengan


instruksi return. Nilai ini akan dapat dimanfaatkan oleh pemanggilnya,
yaitu dengan: dipakai pada suatu ekspresi, atau disimpan dalam sebuah
variabel, atau dituliskan.

Berikut ini adalah contoh sebuah program utama dalam bahasa C (main)
yang memanfaatkan sebuah fungsi yang melakukan penjumlahan dua
buah integer, dan sebuah fungsi yang mengirimkan hasil inkremen dari
nilai yang diberikan padanya. Pada program di bawah ini ada dua buah
fungsi, yaitu:

1. Fungsi bernama add yang akan menerima dua buah integer sebagai
parameter, dan mengirimkan hasil penjumlahannya.
2. Fungsi bernama inkremen, yang akan mengirimkan hasil
penambahan 1 dari parameter yang diberikan.
1. /* File: fadd.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Fungsi yang menjumlahkan a+b */

5. #include<stdio.h>

6.

7. int add (int a, int b) {

8. /* fungsi bernama add yang menerima dua integer yaitu a dan b */

9. /* dan mengirimkan hasil penjumlahan a+b */

10. return(a+b);

11. }

12.

13. int inkremen (int a) {

14. /* Mengirimkan nilai a yang sudah ditambah dengan 1; perhatikan

bahwa nilai a TIDAK DIUBAH*/

15. return (a+1);

16. }

17. /************************/

18. int main() {

19. int x=10;

20. int y=25;

21. /* pemakaian/pemanggulan fungsi add */

22. printf("Hasil penjumlahan x+y = %d", add(x,y));

23. printf("Hasil penjumlahan 3+2 = %d", add(3,2));

24.
25. /* pemakaian/pemanggilan fungsi inkremen */

26. printf("nilai x : %d\n", x);

27. printf("nilai x setelah ditambah 1 : %d\n", inkremen(x));

28. printf("nilai 5 setelah ditambah 1 : %d\n", inkremen(5));

29.

30. return 0;

31. }

Contoh di atas mungkin belum terasa manfaatnya bagi Anda karena


komputasi yang dilakukan oleh fungsi sangat sederhana dan hanya 1
baris saja. Bayangkan jika instruksi yang dikerjakan sangat banyak,
seperti halnya teks lampiran, maka akan mengganggu pembacaan
program utama. Dengan membungkus menjadi fungsi, teks program
utama akan lebih mudah dibaca yaitu hanya dengan memanggil
(menyebutkan) nama fungsi berikut parameternya.

Selain fungsi yang Anda tuliskan sendiri, bahasa C menyediakan fungsi


yang siap pakai (Anda tidak perlu menuliskan body fungsi), yang
dikelompokkan dan siap dipakai dengan menuliskan "header file" yang
sesuai. https://en.wikipedia.org/wiki/C_standard_library.

Fungsi yang sering dibutuhkan pemrogram adalah fungsi untuk


membangkitkan bilangan random. Dalam library standar bahasa C,
fungsi int rand(void) mengirimkan bilangan pseudo-random dengan
rentang nilai 0 s.d RAND_MAX. RAND_MAX adalah sebuah konstanta yang
mungkin bervariasi nilainya tergantung implementasi, tetapi setidaknya
32767. Berikut ini contoh program untuk membangkitkan bilangan
random dengan rentang nilai MIN sampai MAX. Berikut ini contoh
program untuk membangkitkan bilangan random dengan rentang nilai
MIN sampai MAX dengan memanfaatkan operator modulo (sisa
pembagian) yaitu %.

1. /* File: random.c */
2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Pemakaian standard library untuk membangkitkan bilangan random */

5. #include<stdio.h>

6. #include <stdlib.h>

7. /************************/

8. int main() {

9. const int MIN=1;

10. const int MAX=100;

11. /* Program akan membangkitkan 5 bilangan random antar MIN sampai

MAX */

12. for(int i = 0; i<5; i++)

13. printf(" %d ", rand()%MAX + MIN);

14. return 0;

15. }

Rangkuman Kompetensi

1. Mengenal komponen pembangun fungsi (spesifikasi, body/badan


fungsi), dan memahami bagaimana mendefinisikan fungsi dalam
bahasa C.
2. Mengenal, mendefinisikan dan memakai fungsi dalam bahasa C.
3. Memahami fungsi sebagai perwujudan konsep fungsi dalam
matematika, dan memahami makna parameter yang dituliskan
pada definisi fungsi, dan pemakaian parameter saat fungsi
dipanggil. Fungsi melakukan komputasi dan mengirimkan hasilnya.
Walaupun dalam bahasa C dimungkinkan untuk mengubah
parameter (akan dibahas pda prosedur), fungsi sebaiknya tidak
mengubah nilai parameter.
Kelak, akan dikenal sebagai passing parameter by value. Khusus
tentang parameter, Anda perlu mulai membaca bacaan
pada Parameter (computer programming)

Aktivitas kreatif

1. Cobalah beberapa fungsi yang disediakan dalam library C, misalnya


fungsi untuk melakukan perhitungan matematika yang tersedia
dalam <math.h> dan beberapa terkait komputasi terhadap waktu
yang tersedia pada <time.h>

Inilah Computational Thinking!

Fungsi menunjukkan suatu abstraksi, di mana spesifikasi fungsi akan


mewakili sekumpulan proses komputasi yang dilakukan. Oleh karena itu,
pemilihan nama fungsi menjadi sangat penting, karena harus
mencerminkan apa yang dilakukan oleh fungsi itu. Parameter fungsi
memungkinkan fungsi dapat melakukan komputasi sesuai dengan nilai
parameter yang diberikan. Ini akan sangat berguna saat Anda melakukan
pemodelan dan simulasi, salah satu aspek penting dari Computational
Thinking. Anda dapat membangun model komputasi yang sama, yang
akan dieksekusi dengan berbagai nilai parameter. Perubahan parameter
dan hasil komputasi akan memungkinkan Anda melakukan simulasi
dengan berbagai nilai parameter, untuk menghasilkan suatu konklusi
atau memilih yang paling optimal.

Dengan menuliskan sebuah program menjadi beberapa Fungsi, Anda


melakukan dekomposisi sebuah program menjadi modul program yang
lebih kecil, di mana setiap fungsi akan melakukan komputasi dengan
spesifikasi tertentu yang jelas.
Prosedur
Konsep prosedur adalah konsep yang ada pada paradigma
pemrograman prosedural. Berbeda dengan fungsi yang melakukan
komputasi dan mengirimkan nilai sesuai type kembalian, sebuah
prosedur akan "dipanggil" dan dijalankan sebagai potongan program
yang tidak akan mengganggu state program [state program dinyatakan
sebagai nilai dari variabel pada program pemanggil].

Karena bahasa C hanya mengenal fungsi sebagai bentuk sintaktikal,


prosedur dalam bahasa C diimplementasi sebagai fungsi, dengan type
kembalian void.

Spesifikasi prosedur dapat mengandung atau tidak mengandung


parameter. Perbedaan antara fungsi dengan prosedur secara konseptual
adalah bahwa parameter prosedur dapat diubah nilainya. Parameter yang
diubah nilainya akan di-passing sebagai “pointer” dengan tanda *.
Parameter yang tidak diubah nilainya dituliskan seperti pada fungsi.
Parameter yang diubah nilainya yang pada spesifikasi prosedur dituliskan
dengan *, pada saat pemanggilan prosedur ditandai dengan &.

Untuk tahap awal ini, belum dijelaskan lebih detail mengenai arti * dan &.
Penjelasannya akan diberikan pada Modul selanjutnya, yaitu pada bagian
Pointer.

Berikut ini adalah contoh prosedur yang mengubah nilai parameter,


yaitu:

1. Prosedur plus1 (int * a) akan menambah satu pada nilai paramater


a yang diberikan, sehingga nilai a akan bertambah 1 setelah
prosedur dijalankan.
2. Prosedur plusd (int*a, int d) akan menambahkan d pada a sehingga
nilai a akan berubah setelah prosedur plusd dijalankan.
3. Prosedur swap (int *a, int *b) akan melakukan penukaran nilai dua
buah variabel a dan b yang merupakan dua buah parameter
prosedur tersebut.
1. /* File: proc.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */

4. /* Contoh program utama dan prosedur untuk menukar 2 buah nilai */

5. #include<stdio.h>

6.

7. void plus1 (int* a) {

8. /* prosedur menambahkan 1 ke parameter a */

9. /* "*a" artinya isi dari lokasi yang ditunjuk oleh a */

10. int temp;

11. *a= *a + 1;

12. }

13.

14. void plusd (int* a, int d) {

15. /* prosedur menambahkan d ke parameter a */

16. /* nilai a akan diubah, sedangkan nilai d tidak diubah */

17. int temp;

18. *a= *a + d;

19. }

20.

21. void swap (int* a, int* b) {

22. /* prosedur menukar nilai dua buah variabel a dan b */

23. /* "*a" artinya isi dari lokasi yang ditunjuk oleh a*/

24. int temp; /* variabel lokal */

25.
26. /* algoritma */

27. temp= (*a); *a= (*b); *b=temp;

28. }

29.

30. int main() {

31. int i=9;

32. int x=10;

33. int y=25;

34. int d=7;

35.

36. plus1(&i); /* perhatikan saat pemanggilan &i */

37. printf("nilai i+1: %d\n", i);

38.

39. i=8;

40. plusd(&i,d ); /* perhatikan saat pemanggilan &i dan d */

41. printf("nilai i+7: %d\n", i);

42.

43. plusd(&d,3 ); /* perhatikan saat pemanggilan &i */

44. printf("nilai d+3: %d\n", d);

45.

46. printf("nilai x dan y : %d, %d\n", x,y);

47. swap (&x, &y);

48. printf("nilai x dan y setelah swap : %d, %d\n", x,y);

49. return 0;

50. }
Rangkuman Kompetensi

1. Mengenal “prosedur” dan parameter dalam penulisan prosedur,


yang diartikan dapat berubah, atau tidak diubah:
1. Nilai parameter yang diubah pada definisi prosedur diberi
tanda *.
2. Nilai parameter yang tidak diubah, dituliskan namanya saja.
2. Memahami cara pemanggilan/pemakaian prosedur, dan
memerhatikan penulisan parameter saat pemanggilan/pemakaian
prosedur.

Catatan: Apa yang dijelaskan pada bagian ini adalah penyederhanaan


dan “pendangkalan” dari arti * dan & yang akan dijelaskan pada Modul
selanjutnya, setelah Anda mengenal pointer dan address dari variabel.
Bagian prosedur dapat di-skip.

Aktivitas kreatif

Untuk bermain-main dengan kode program yang diberikan, Anda boleh


mencoba untuk tidak peduli dengan pernak-pernik * dan & dan
melakukan sama seperti fungsi, pada contoh program di atas.
Eksplorasilah, diskusikan dengan teman, dan tariklah kesimpulan jika tata
cara penulisan dengan * dan & Anda abaikan.

Inilah Computational Thinking!

Prosedur adalah abstraksi dan dekomposisi program, seperti yang


dijelaskan pada fungsi.
Latihan Problem Solving dengan Membuat Program-program
Sederhana
Sebelum Anda menuliskan sebuah program, Anda perlu membuat
Spesifikasi.

Spesifikasi program adalah kalimat ringkas yang menyatakan:

1. Input yang diberikan pengguna program.


2. Komputasi yang dilakukan (sekuensial, kondisional, pengulangan).
jika terdiri dari beberapa tahap, maka dijelaskan dalam urutan
instruksi berdasarkan construct program yang sudah djelaskan.
3. Output yang dihasilkan program.

Anda dapat (dan sangat dianjurkan) untuk mengambil salah satu


program yang pernah dibahas sebagai pola solusi, dan menjelaskan
perbedaannya dengan program yang Anda hasilkan. Inilah Computational
Thinking!

Pada bagian ini diberikan sebuah contoh-contoh program sederhana,


yang dapat Anda pakai sebagai bahan belajar untuk membangun solusi
mulai dari sederhana sampai dengan yang lebih kompleks. Jika ada
menghadapi permintaan sebuah program kompleks, Anda perlu untuk
memahami abstraksinya, dan mendekomposisi menjadi persoalan-
persoalan yang lebih "melakukan satu hal", dan mengimplementasi
berdasarkan pola solusi yang Anda punyai.

I. Komputasi berdasarkan Rumus


Contoh berikut adalah contoh program perhitungan sederhana:

1. /* File: luaslink.c */

2. /* Penulis : Bu Dengklek, email inge@bebras.or.id */

3. /* Deskripsi : */
4. /* Membaca jari-jari, menghitung luas lingkaran */

5. /* latihan pemakaian konstanta */

6. #include<stdio.h>

7. int main ()

8. {/* Kamus */

9. const float pi = 3.1415;

10. float r;

11. /* program */

12. /* baca data */

13. printf ("Jari-jari lingkaran =");

14. scanf ("%f", &r);

15. /* Hitung dan tulis hasil */

16. printf ("Luas lingkaran = %f\n", pi * r * r);

17. printf ("Akhir program \n");

18. return 0;

19. }
Latihan soal kreatif

Berdasarkan contoh program komputasi sederhana untuk menghitung


luas lingkaran, Anda dapat menuliskan spesifikasi lebih jelas untuk
menyelesaikan persoalan berikut, mulai dari yang paling sederhana dan
mirip, kemudian mengembangkan menjadi program yang lebih kompleks
karena tidak hanya menyelesaikan satu persoalan saja, tetapi
menyelesaikan beberapa persoalan sekaligus.

1. JARAK. Tuliskanlah program yang:


1. Membaca nilai v (kecepatan), dan t (waktu tempuh) sebuah
mobil yang bergerak lurus beraturan dari kota A ke kota B.
2. Menghitung dan menuliskan jarak kota A ke kota B, yang
ditempuh mobil tersebut.
2. LUASPERSEGI. Tuliskanlah program yang membaca panjang dan
lebar sebuah lantai ruangan yang berbentuk persegi (dalam m),
kemudian menghitung luas lantai tersebut dalam m2.
3. KUBUS. Tuliskanlah sebuah program dalam bahasa C yang
membaca sisi kubus (dalam cm), dan menghitung serta menuliskan
volumenya.
4. Anda dapat menuliskan program kalkulasi apa pun berdasarkan
rumus yang sudah ditentukan [buatlah latihan mandiri, minimal
dari 50 rumus geometri, fisika, kimia, pertumbuhan mahluk secara
eksponensial dalam biologi, rumus bunga berbunga dalam bidang
ekonomi].
5. Untuk perhitungan berdasarkan rumus, Anda dapat melakukan
generalisasi, dan menuliskan sebuah program yang akan
memberikan pilihan kepada pengguna, untuk:
1. Memilih bentuk geometris segitiga, persegi, bujur sangkar,
belah ketupat, jajaran genjang, segi N-beraturan, elipse,
lingkaran.
2. Menentukan ciri dari bentuk geometris yang sudah dipilih,
dan meminta pengguna memasukkan data besaran untuk
menghitung luas dan kelilingnya (misalnya untuk segitiga, alas
dan tingginya sebab luas ditentukan oleh tinggi segitiga,
sedangkan keliling ditentukan oleh panjang ketiga sisinya).
3. Melakukan perhitungan sesuai rumus.
4. Mencetak ciri bentuk geometris yang dibaca dan menuliskan
hasil perhitungan luas dan kelilingnya.
6. Untuk sebuah bentuk geometris tiga dimensi, Anda dapat menulis
sebuah program untuk membaca cirinya dan menghitung luas
permukaan dan, volumenya.
7. Setelah program pada (5) dan (6) berjalan dengan baik, Anda dapat
menambahkan pengulangan sehingga program dapat dipakai
berulang (tidak hanya satu kali komputasi langsung berhenti).
1. Program berhenti setelan N kali dipakai pengguna.
2. Program berhenti setelah pengguna mengetikkan pilihan
tertentu, yang bukan merupakan pilihan bentuk geometris
yang diberikan.

II. Latihan Kondisional


Berdasarkan contoh program kecil untuk menentukan bilangan negatif,
nol dan positif, tuliskan spesifikasi program sebagai berikut, dan kodelah
programnya dalam bahasa C:

1. AIR - Sebuah program akan membaca T, yaitu temperatur air pada


tekanan atmosfir, dan menentukan apakah air tersebut dalam
keadaan beku, padat atau uap. Tentukan angka-angka yang
diperlukan untuk mengetes program ini.
2. BERATBADAN - Program yang akan membaca berat badan
seseorang, dan menentukan apakah termasuk Kurus, Ideal, atau
Gemuk, Kegemukan.
1. Buatlah aturan yang masuk akal, untuk menentukan berat
badan yang dikategorikan Kurus, Ideal, atau Gemuk,
Kegemukan.
2. Kriteria kategori tersebut ternyata berbeda untuk
anak-anak/dewasa; pria/wanita. Buatlah untuk masing-
masing, aturannya dan modifikasi programnya dengan
membaca umur orang, jenis kelaminnya, baru menentukan
berdasarkan aturan yang Anda buat.
3. BAJU - Sebuah program yang akan membaca ukuran panjang baju,
lebar bahu, dan akan menentukan apakah pemilik ukuran tersebut
harus diberi baju S (small), M (medium), atau L (large). Buatlah
aturannya yang masuk akal, dan Anda harus menjamin bahwa
setiap data akan diasosiasikan ke salah satu ukuran baju walaupun
tidak sama persis.

III. Latihan Loop - Pengulangan

1. Tuliskanlah sebuah program yang akan mencetak berbagai output


sebagai berikut, tergantung nilai N yang dibaca. N dapat berharga
antara 1 s.d. 1000.

N=1 N=2 N=3 N=4

* * * *
** ** **
*** ***
****

2. Tuliskanlah sebuah program yang akan mencetak berbagai output


sebagai berikut, tergantung nilai N yang dibaca. N dapat berharga
antara 1 s.d. 1000.

N=1 N=2 N=3 N=4

* ** *** ****
* ** ***
* **
*

3.
4. Tuliskanlah sebuah program yang akan mencetak berbagai output
sebagai berikut, tergantung nilai N yang dibaca. N dapat berharga
antara 1 s.d. 1000.

N=1 N=2 N=3 N=4

o oo ooo oooo
oo o*o o**o
ooo o**o
oooo

5.
6. Dengan mengambil pola program dari contoh-contoh loop, tuliskan
program yang akan menuliskan lagu anak ayam, dimulai dari:

Anak ayam turun 10; Mati 1 tinggal 9.

Anak ayam turun 9; Mati 1 tinggal 8.

...

Anak ayam turun 1; Mati 1 tinggal induknya.

7. Tuliskanlah sebuah program yang membaca sebuah nilai N,


kemudian menuliskan hasil penjumlahan deret tambah
1+2+3+4+5+6+ . . . +N= XXXX.
Contoh untuk berbagai nilai N:

N=1 N=2 N=3 N=4

1=1 1+2=3 1+2+3=6 1+2+3+4=10

8.
9. Tuliskanlah sebuah program yang membaca sebuah nilai N,
kemudian menuliskan hasil penjumlahan deret tambah dengan
suku bilangan ganjil saja 1+3+5+7+ . . . +N= XXXX.
Program harus dapat diulang untuk berbagai nilai N, sampai
pengguna mengetikkan N=0 tanda berhenti.

N=1 N=2 N=3 N=4

1=1 1+3=4 1+3+5=8 1+3+5+7=16

10. Tuliskan sebuah program yang membaca sebuah nilai N,


kemudian menuliskan hasil penjumlahan:
1. Deret : 1 +1/2 + 1/3 + ... +1/N
2. Deret : 1 - 1/20 + 1/30 - 1/40 ... 1/(N*10)
11. Tuliskan sebuah program yang melakukan pengulangan untuk
menghitung faktorial (N) : 1x2x3x... N dan cetaklah N terbesar yang
hasilnya masih lebih kecil dari 3267 (nilai maksimal yang dapat
disimpan dalam sebuah variabel integer).
12. Tuliskanlah sebuah program yang melakukan pengulangan
untuk menghitung deret fibonacci. Carilah rumus fibonacci
misalnya dari https://en.wikipedia.org/wiki/Fibonacci_number .
13. Tuliskan sebuah program untuk mencetak berbagai deret
yang ada di https://en.wikipedia.org/wiki/Sequence atau
pada https://www.mathsisfun.com/algebra/sequences-series.html
atau sumber lainnya.

Untuk membuat latihan lebih seru, setiap program yang mengandung


pengulangan di atas dapat Anda ubah sehingga dapat diulang sesuai
kriteria yang Anda tentukan. Ini Computational Thinking!

IV. Latihan Tabel


Untuk sekumpulan nilai numerik yang sudah dibaca dan disimpan dalam
tabel:

1. Tuliskan minimal 8 macam algoritma sorting dan 8 algoritma


searching, dengan melakukan eksplorasi contohnya di Internet.
Bandingkanlah algoritmanya, dan jelaskan mana yang lebih efisien.
2. Anggaplah sebuah tabel menyimpan satu kolom data pada sebuah
spreadsheet, misalnya excel. pelajari beberapa fungsi excel, dan
tuliskan fungsi/prosedur untuk mengimplementasi beberapa fungsi
yang ada di Excel (eksplorasi), seperti:
1. Untuk mengalolah data bertype integer count, countif, sum,
sumif, max, min, average, standar deviasi, dll.
2. Untuk menampilkan data dalam berbegai format, misalnya
data angka menjadi berbagai format akunting, currency,
tanggal.

V. Latihan Fungsi dan Prosedur

1. Tuliskan ulang program-program yang telah Anda implementasikan,


dengan mengelompokkan instruksi menjadi fungsi dan/atau
prosedur yang sesuai dengan konteksnya.
2. Untuk beberapa fungsi dan prosedur yang "mirip", tuliskan ulang
menjadi fungsi/prosedur yang diparameterisasi sesuai dengan
konteks dan penggunaannya.

Anda mungkin juga menyukai