Anda di halaman 1dari 73

Algorithm &

Programming
HIMTI KIT

HIMTI BINUS UNIVERSITY 2023


Notes
Beberapa gambar dan background pada dokumen ini dibuat dengan AUTOMATIC1111 stable-diffusion-
webui dengan model deliberate-v2 dan v2-1_768-ema-pruned
Terdapat referensi di akhir dokumen untuk materi pembelajaran lebih detail
Daftar Isi

Algoritma 5
Algoritma yang baik 5
Pembuatan Algoritma 5
Pembuatan Algoritma: Pseudocode 6
Pseudocode 6
Basic Computer Operations 6
Pembuatan Algoritma: Flowchart 8
Flowchart 8
Flowchart Symbols 8
Structure Theorem 10
Selection 10
Repetition 10
Bahasa C 11
Sejarah singkat 11
Mengapa C? 11
IDE yang bisa dipakai untuk C dan C++ 11
Setup MinGW 11
Dasar Bahasa C 12
C Standard Library 12
Template Struktur Dasar 13
C Character and ASCII 14
Comments 14
Aturan Bahasa C 15
Rekomendasi Pemakaian return 0 15
Ingat Titik Koma 15
Perhatikan Case Syntax dan Variabel (Case Sensitive) 15
Hindari Reserved Keywords 17
Identifier 18
Tipe Data (Data Type) 18
Type Casting 19
Variable 19
Char dan String 19
Constant 20
Keywords 21
Static Keyword 21
Register Keyword 21
External Keyword 22
Input dan Output 23
Format Specifier 23
Penggunaan Format Specifier 23
Input 24
Output 24
Contoh Input dan Output 24
Escape Sequences 26
Advanced Input 28
Getchar() untuk multiple input scanf 28
Input string untuk menampung kalimat 28
Advanced Output 30
Custom Field Width 30
Float Precision Specifying (angka di belakang koma) 30
String Manipulation 31
String Manipulation Function 31
strcmp() 32
Operators 33
Operator Assignment 33
Operator Aritmatika 33
Shorthand Operators 34
Increment dan Decrement 35
Operator Perbandingan 36
Operator Logika 36
Selection (Control Statement) 38
Ternary 38
If-else 38
Penggunaan Ternary dan If-else 39
Switch 39
Repetition 41
For 41
While 41
Do-while 42
Break and Continue 43
Array 44
Format/Syntax Array 44
Array untuk String 44
Multi-Dimensional Array 45
Structure 46
Format/Syntax Structure 46
Contoh Membuat Structure 46
Deklarasi Structure 46
Assigning and Retrieving Values to Structure 47
Other Structure Types 47
Local Structure 47
Nested Structure 48
Structure in the form of array 48
Typedef 49
Union 50
Pembuatan dan Deklarasi Union 50
Perbedaan Structure dan Union 50
Perbedaan size structure dan union 51
Enumeration 52
Format/Syntax Enumeration 52
Deklarasi variabel langsung 52
Deklarasi dalam function 52
Contoh Penggunaan Enumeration 52
Pointer 53
Pointer Operators 53
Pointer Format/Syntax 53
Contoh Penggunaan Pointer 53
Void Pointer 54
Mengapa Pointer digunakan? 54
Function 55
Format/Syntax Function 55
Tipe Passing Parameter 56
Passing by value 56
Passing by reference 56
Contoh Penggunaan Function 57
Recursive Function 58
Format/Syntax Recursive Function 58
Contoh Recursive Function 58
Memory Allocation (malloc) 59
Tipe Memory Allocation 59
Algoritma
Algoritma merupakan prosedur yang berisi langkah-langkah yang terurut untuk mencapai
suatu tujuan atau memecah suatu masalah. Algoritma bisa kita temui di kehidupan kita
sehari-hari. Contohnya ketika kita ingin memasak makanan.

Dalam programming, algoritma berisi fungsi-fungsi yang dibuat secara terstruktur untuk
memecahkan masalah dengan menggunakan komputer. Perancangan algoritma
merupakan langkah awal dalam pembuatan kode karena akan menjadi basis dari
program yang akan dibuat.

Algoritma yang baik


- Memiliki langkah-langkah dan alur yang tepat
- Mencapai hasil yang tepat dengan waktu yang efisien
- Tidak menggunakan kata-kata yang ambigu
- Mudah untuk dimengerti dan di implementasi ke dalam programming
- Tiap-tiap bagian dimulai dan diakhiri dengan jelas

Pembuatan Algoritma
Algoritma bisa dibuat dan disampaikan dalam beberapa bentuk:
- Bentuk tulisan dengan pseudocode
- Bentuk grafik dengan flowchart
Pembuatan Algoritma: Pseudocode

Pseudocode
Pseudocode adalah teknik pembuatan algoritma yang menggunakan bahasa manusia atau
informal. Untuk membuat pseudocode, kita bisa menggunakan keyword-keyword programming
seperti if, else, print, set, add, while, dan yang lainnya. Pseudocode ini merupakan kode semu
atau palsu yang bukan untuk di compile. Namun, pseudocode dapat menjelaskan bagaimana
suatu program bekerja dan memberikan gambaran yang lebih mudah dicerna.

Basic Computer Operations


Ada beberapa operasi komputer dasar yang bisa dipakai dalam membuat pseudocode.

1. Input
Operasi yang dilakukan oleh komputer untuk mendapat informasi atau data. Contohnya
adalah get name dan read score.

2. Output
Operasi yang dilakukan oleh komputer untuk menampilkan atau mengeluarkan informasi.
Contohnya adalah print name dan dan display score.

3. Compute
Operasi yang dilakukan oleh komputer untuk melakukan perhitungan matematika.
Contohnya adalah add, subtract, divide, dan multiply.
4. Value storing
Operasi yang dilakukan oleh komputer untuk menyimpan value ke dalam suatu variabel.
Contohnya adalah set count to 0.

5. Selection
Operasi yang dilakukan oleh komputer untuk mengambil keputusan sesuai dengan kriteria
yang sudah ditentukan. Contohnya:

6. Repetition
Operasi yang lakukan oleh komputer untuk melakukan perulangan. Contohnya:
Pembuatan Algoritma: Flowchart

Flowchart
Flowchart merupakan teknik pembuatan algoritma yang menggunakan diagram untuk
menjelaskan alur dari suatu program. Flowchart membantu memberikan visualisasi algoritma
yang dibuat.

Flowchart Symbols
Flowchart memiliki beberapa simbol yang memiliki fungsinya masing-masing.

Pada contoh flowchart dibawah, diandaikan jika nilai mahasiswa berada di rentang 70 - 74, maka
nilai akan dinaikkan menjadi 75 supaya lulus.
Structure Theorem
Dengan menggunakan structure theorem, kita bisa dengan jelas membagi program komputer
menjadi beberapa bagian / struktur kendali. Bagian-bagian tersebut berupa sequence, selection,
dan repetition.

Sequence
Sequence adalah struktur urutan perintah atau pernyataan. Sequence dalam programming
biasanya dimulai dari atas dan bergerak ke akhir program.

Selection
Selection adalah struktur pemilihan dalam suatu program. Pada selection, kita bisa memilih dari
beberapa opsi yang sudah ditetapkan. Dalam if-else, pernyataan yang benar akan menjalankan
program pada opsi if. Jika pernyataan tidak sesuai, maka else akan berjalan.

Repetition
Repetition adalah struktur yang memuat beberapa perintah atau pernyataan yang bisa diulang-
ulang. Perintah atau pernyataan tersebut akan berulang jika suatu kondisi terpenuhi.
Bahasa C

Sejarah singkat
Bahasa C merupakan bahasa pemrograman yang dikembangkan dari bahasa B yang dibuat pada
tahun 1967 oleh Martin Richards. Pada tahun 1972, Dennis Ritchie mengembangkan C bersama
dengan Ken Thompson di Bell Labs, New Jersey dan pertama kali dipakai pada komputer DEC
PDP-11. Pada tahun 1989, standar pemrograman bahasa C pertama kali ditetapkan dan
disahkan.

Mengapa C?
1. Mudah dimengerti: bahasa pemrograman mesin low level (mirip assembly) namun mudah
dimengerti.
2. Portable: dapat dipakai pada microcontroller sederhana sampai supercomputer.
3. Universal: dapat dipakai di berbagai implementasi dan aplikasi.
4. Support yang luas: memiliki komunitas yang besar dan library yang berbagai macam.

IDE yang bisa dipakai untuk C dan C++


Bahasa C dan C++ memiliki banyak compiler dan IDE yang bisa dipakai. Berikut dua IDE yang
paling sering digunakan di kalangan mahasiswa BINUS:
- Code::Blocks
- Visual Studio Code

Setup MinGW
Code::Blocks maupun Visual Studio Code memerlukan compiler gcc (untuk C) dan compiler g++
(untuk C++) untuk bisa menjalankan kodenya. MinGW merupakan folder compiler lengkap untuk
C dan C++ yang bisa diinstal melalui sourceforge atau sumber lainnya. Jangan lupa untuk
mencatat path instalasi MinGW. Setelah terinstal, masukan path instalasi MinGW ke Environment
Variables (Windows). Instalasi untuk MacOS maupun Linux bisa dicari melalui Google (karena saya
pengguna Windows dan cuma ngerti instalasi di Windows hahaha).
Dasar Bahasa C

C Standard Library
Library merupakan kumpulan fungsi yang sudah dibuat dan dimuat ke dalam suatu bahasa
pemrograman. C memiliki beberapa library standar yang bisa dipakai dengan menggunakan
#𝑖𝑛𝑐𝑙𝑢𝑑𝑒.

Beberapa library C yang bisa dipakai antara lain:


- <math.h> untuk fungsi matematika
- <stdio.h> untuk fungsi input dan output
- <stdlib.h> untuk fungsi utility general
- <string.h> untuk fungsi string
- <time.h> untuk fungsi waktu dan tanggal
Template Struktur Dasar
Ada berbagai jenis struktur dasar yang bisa dipakai. Dibawah ini merupakan template struktur
dasar yang akan dipakai selama pembelajaran Algorithm and Programming.

Pada C, statement 𝑟𝑒𝑡𝑢𝑟𝑛 0 pada template di atas berfungsi untuk me-return angka 0 karena
function main merupakan int. Jika function merupakan void, maka tidak perlu untuk menggunakan
statement 𝑟𝑒𝑡𝑢𝑟𝑛 0. Sama jika kita menggunakan C++, karena C++ sudah otomatis mengecek
function dan me-return value yang sesuai jika tidak ada statement return pada function 𝑚𝑎𝑖𝑛().

Ada beberapa template C lain yang bisa dipakai selain seperti menggunakan 𝑣𝑜𝑖𝑑 𝑚𝑎𝑖𝑛() atau
𝑚𝑎𝑖𝑛() saja.
C Character and ASCII
Karakter dalam C ditulis menggunakan huruf alfabet lalu di translate dan dibaca dengan ASCII
oleh komputer. Kita bisa menggunakan ASCII secara langsung dalam C untuk penggunaan
karakter yang luas dan lebih akurat.

Berbagai ASCII bisa dilihat di website ini: https://www.asciitable.com/

Comments
Berguna untuk memberi catatan atau komentar pada kode. Gunakan // untuk komentar satu
baris dan /∗ ∗/ untuk komentar banyak baris.

Ada juga shortcut 𝐶𝑇𝑅𝐿 + / yang bisa dipakai untuk memberi comment secara cepat. Namun
pemakaian shortcut ini terbatas hanya pada aplikasi yang kompatibel seperti Visual Studio Code.
Untuk menghilangkan comment dari shortcut ini, cukup pilih semua lalu klik shortcut lagi. Sama
seperti cara memberi comment.
Aturan Bahasa C

Rekomendasi Pemakaian return 0


Dalam file yang berbentuk Format/Syntax c, disarankan untuk memakai return 0 di akhir setiap
function 𝑖𝑛𝑡 𝑚𝑎𝑖𝑛() karena file dan compiler c tidak mendeteksi return secara otomatis.
Pemakaian return 0 juga disarankan untuk mencegah error yang akan muncul saat nanti submit
kode di quiz algo.

Contoh-contoh program pada file ini dijalankan menggunakan file dengan Format/Syntax
cpp sehingga return 0 tidak dibutuhkan. Jika kalian nanti tidak menggunakan return 0 dan
mendapat error di quiz algo, coba tambahkan return 0 sebagai langkah awal penyelesaian
error.

Ingat Titik Koma


Titik koma merupakan salah satu elemen yang sangat penting dan fatal dalam C. Titik koma bisa
mempengaruhi keberhasilan seseorang dalam membuat program bahasa C. Jangan pernah
melupakan titik koma di akhir setiap statement dalam C!

Perhatikan Case Syntax dan Variabel (Case Sensitive)


Jangan lupa untuk memperhatikan huruf kapital. Bahasa C sangat intoleran terhadap
penggunaan huruf kapital yang salah dan dapat berakibat fatal sama seperti titik koma.
Perhatikan juga penggunaan huruf kapital saat membuat variabel baru.
Hindari Reserved Keywords
Bahasa C memiliki beberapa keyword yang diamankan dan tidak boleh digunakan menjadi nama
variabel. Keyword-keyword ini merupakan kata yang spesial, misalnya nama function loop di C
yaitu while atau do-while. Berikut beberapa reserved keywords:

auto double int struct _Bool

break else long switch _Complex

case enum register typedef _Imaginary

char extern return union inline

const float short unsigned restrict

continue for signed void

default goto sizeof volatile

do if static while
Identifier
Identifier merupakan mekanisme penamaan yang ada pada bahasa C. Dalam C, kita bisa
membuat dan menamai function, variable, constant, dan komponen lainnya.

Tipe Data (Data Type)


Bahasa C memiliki beberapa tipe data:
Tipe Data Ukuran Range Nilai Format/Syntax Keterangan
Specifier

Int 4 bytes 2,147,483,648 s/d %d bilangan bulat


2,147,483,647

Long Int 8 bytes 2,147,483,648 s/d %ld bilangan bulat


2,147,483,647

Long Long Int 8 bytes 9,223,372,036,854 %lld bilangan bulat


,775,808
s/d
9,223,372,036,854
,775,807

Unsigned Int 4 bytes 0 %u bilangan bulat non


s/d 4,294,967,295 negatif

Unsigned Long Int 8 bytes 0 %lu bilangan bulat non


s/d 4,294,967,295 negatif

Unsigned Long 8 bytes 0 %llu bilangan bulat non


Long Int s/d negatif
18,446,744,073,70
9,551,615

Float 4 bytes 3.4E-38 %f bilangan pecahan


s/d
3.4E+38

Double 8 bytes 1.7E-308 %lf bilangan pecahan


s/d
1.7E+308

Char 1 byte -128 %c karakter


s/d
127
Type Casting
Type casting merupakan function dalam C untuk mengubah atau mengkonversi variabel ke tipe
data lain. Berikut adalah Format/Syntax casting:
- <tipe data baru> <variabel yang ingin diubah>

Spasi dalam type casting tidak akan berpengaruh, tetapi jangan menambah lebih dari satu
spasi. Contoh: bebas antara (𝑖𝑛𝑡)𝑎𝑛𝑔𝑘𝑎 atau (𝑖𝑛𝑡) 𝑎𝑛𝑔𝑘𝑎.

Variable
Variabel pada bahasa pemrograman berfungsi untuk menyimpan suatu value atau informasi.
Setiap variabel yang dibuat memiliki name, address (L-value), type, size, dan data (R-value). Isi
dari variabel dapat diganti saat program dijalankan atau saat runtime.

Deklarasi variabel bisa mengikuti Format/Syntax berikut:


- <data type> <variable name>;
- <data type> <variable name> = <initial value>;

Data type yang digunakan bisa mengikuti tabel, tetapi jangan lupa untuk dijadikan huruf kecil.

Char dan String


Assignment value untuk variabel char dan string memiliki cara yang sedikit berbeda. Coba lihat
contoh pada gambar dibawah:
Constant
Constant merupakan variabel yang tidak memiliki address. Value dari constant tidak bisa diubah
dan harus memuat initial value. Const dipakai untuk menampung value yang konstan seperti
contoh dibawah ini yaitu Pi.

Format/Syntax deklarasi const:


- const <data type> <variable name> = <initial value>;

Macro
Macro merupakan identifier yang mirip seperti constant yang hanya berfungsi untuk menampung
value. Bedanya, macro bisa diubah/redefine sedangkan constant tidak. Macro juga tidak memiliki
scope jadi bisa di declare dimanapun dan bisa diakses dimanapun di dalam file. Macro juga tidak
memerlukan titik koma di belakang.

Format/Syntax:
- #define <nama variabel> <value>
Keywords
Static Keyword
Static keyword digunakan di bahasa C sebagai deklarasi variabel global. Cukup mengikuti format
static <data type> <nama variabel> untuk deklarasi variabel static.

Variabel Normal Variabel Static

Variabel tidak menyimpan perubahan dan Perubahan value akan disimpan saat di
akan mengambil value initial deklarasi di dalam function

Register Keyword
Keyword register dipakai di bahasa C untuk menyimpan variabel langsung ke memori register
CPU dibanding dengan menggunakan memori RAM. Alhasil variabel yang berada di register CPU
akan cenderung lebih cepat karena dekat dengan CPU.

Format register:
- register <data type> <nama variabel>
External Keyword
External keyword dalam digunakan dalam C untuk mengakses variabel di file lain. Variabel
harus di deklarasi terlebih dahulu di file lain untuk dipakai.

Format external:
- #include “<nama file>”
- extern <data type> <nama variabel di file lain>;
Input dan Output
Format Specifier
Format/Syntax specifier dalam bahasa C memberi informasi kepada sistem tentang
Format/Syntax data yang ingin kita input atau output. Format/Syntax specifier digunakan oleh
𝑝𝑟𝑖𝑛𝑡𝑓() dan 𝑠𝑐𝑎𝑛𝑓(). Simbol yang digunakan oleh Format/Syntax specifier adalah %. Berikut
beberapa Format/Syntax specifier yang ada dalam C:

%d Untuk Int

%ld Untuk Long Int

%lld Untuk Long Long Int


(biasanya akan sering dipakai untuk quiz algo karena output angka yang
diminta soal sering lebih dari kapasitas Int biasa)

%c Untuk Char

%s Untuk String

%f Untuk Float

%lf Untuk Double

%x Untuk Hexadecimal

%e Untuk floating-point (contoh: 1.234500e+10)


Kegunaan dan lebih banyak Format/Syntax specifier juga bisa dilihat di tabel tipe data diatas.

Penggunaan Format Specifier


Format/Syntax specifier digunakan pada 𝑠𝑐𝑎𝑛𝑓() dan 𝑝𝑟𝑖𝑛𝑡𝑓() dan mengikuti Format/Syntax
sebagai berikut:
- scanf(“<Format specifier”, &“variabel”)
- printf(“<Format specifier”, “variabel”)

Input
Dalam bahasa C, ada beberapa statement input yang bisa dipakai, antara lain:
- 𝑔𝑒𝑡𝑠() atau “get string” untuk mendapat input string
- 𝑔𝑒𝑡𝑐ℎ𝑎𝑟() untuk mendapat input karakter
- 𝑠𝑐𝑎𝑛𝑓() untuk menggunakan format specifier
Info lebih banyak bisa dilihat di website ini: https://www.studymite.com/blog/strings-in-c

Format/Syntax Input dengan 𝑠𝑐𝑎𝑛𝑓():


- scanf(“<Format specifier”, &“variabel”)

Berbeda dengan 𝑝𝑟𝑖𝑛𝑡𝑓(), 𝑠𝑐𝑎𝑛𝑓() membutuhkan salah satu operator C yaitu “&” atau ampersand
untuk memasukkan nilai ke dalam memory variabel. Operator ampersand ini menunjukkan
address dari variabel kepada 𝑠𝑐𝑎𝑛𝑓() sehingga 𝑠𝑐𝑎𝑛𝑓() bisa memasukkan value ke memory
variabel yang tepat.

Ada beberapa kasus saat kita tidak perlu operator ampersand. Input string tidak perlu memakai
ampersand.

Output
Dalam bahasa C, ada beberapa statement output yang bisa dipakai, antara lain:
- 𝑝𝑢𝑡𝑠() yang secara otomatis akan memberi newline (enter) di akhir
- 𝑝𝑟𝑖𝑛𝑡𝑓() yang menggunakan Format/Syntax specifier

Contoh Input dan Output


Berikut contoh program untuk menerima double (angka koma) dan menggantinya menjadi
integer (angka bulat) dengan type casting.
Escape Sequences
Statement 𝑝𝑟𝑖𝑛𝑡𝑓() memiliki beberapa escape sequences yang bisa dipakai untuk mengatur
output. Berikut beberapa escape sequence yang bisa dipakai:

\a Bell, alert, system beep

\b Backspace

Huruf d dihapus oleh \b dan diganti dengan ld

\n Newline, linefeed

Escape character \n diletakkan dimanapun sama saja

\t Tab / Horizontal tab

Sama seperti memencet tombol Tab di keyboard

\v Vertical tab

\r Carriage return

Sama seperti tombol Home di keyboard. Setelah Hello World, cursor akan
maju ke awal, mengganti dan mengetik ulang kata setelah \r yaitu Hi
Binusians!

\’ Single quote
Memasukkan kutip satu ke dalam 𝑝𝑟𝑖𝑛𝑡𝑓()

\” Double quote

Memasukkan kutip dua ke dalam 𝑝𝑟𝑖𝑛𝑡𝑓()

\\ Backslash

Memasukkan garis miring terbalik ke dalam 𝑝𝑟𝑖𝑛𝑡𝑓()

\xdd Hexadecimal notation

\ddd Octal notation


Advanced Input
Ada beberapa operator dan function yang bisa digunakan untuk membuat input lebih baik dan
mengatasi error.

Getchar() untuk multiple input scanf


Function 𝑔𝑒𝑡𝑐ℎ𝑎𝑟() bisa digunakan setelah 𝑠𝑐𝑎𝑛𝑓() untuk menghisap input karakter extra untuk
𝑠𝑐𝑎𝑛𝑓() berikutnya. Function ini tidak akan berguna jika kita hanya memiliki satu 𝑠𝑐𝑎𝑛𝑓().

𝑠𝑐𝑎𝑛𝑓() universitas menerima input enter saat kita selesai memasukkan nama

𝑔𝑒𝑡𝑐ℎ𝑎𝑟() menghisap enter yang kita klik saat selesai memasukkan nama

Input string untuk menampung kalimat


Bisa dilihat di contoh input string diatas bahwa %s hanya bisa menerima satu kata saja. Jika kita
memasukkan dua kata, maka hanya kata pertama yang akan masuk ke dalam variabel. Untuk
mengatasinya, kita bisa menggunakan Format/Syntax specifier %[^\𝑛] yang berarti mengambil
input sampai user menekan enter (newline).
Bisa juga kita membuat stop Format/Syntax sendiri. Misalnya dengan menggunakan tanda
bintang.
Advanced Output
Statement 𝑝𝑟𝑖𝑛𝑡𝑓() juga memiliki berbagai parameter yang bisa digunakan untuk membuat output
dengan berbagai Format/Syntax dan juga tertata.

Custom Field Width


Dengan menggunakan Format/Syntax specifier, kita bisa menentukan minimum field dari output
dengan menggunakan angka. Contohnya adalah %5d yang berarti kita membuat field output %d
berukuran minimal 5 spasi.

Float Precision Specifying (angka di belakang koma)


Kita bisa menentukan jumlah angka dibelakang koma untuk output angka berkoma seperti float
dan double. Contohnya %.2lf yang berarti output hanya akan mengeluarkan paling banyak dua
angka dibelakang koma. Akan dilakukan pembulatan seperlunya jika ada lebih banyak angka
dibelakang seperti contoh dibawah ini.
String Manipulation
Dengan menggunakan library <string.h>, kita bisa memanipulasi string seperti menghitung
panjang string, string copy operation, string compare, dan yang lainnya. Jangan lupa untuk
menambah library <string.h> di bagian atas file untuk menggunakan function-function dibawah.

String Manipulation Function


Berikut beberapa function yang diberikan oleh library <string.h>

Function Kegunaan

strlen() Menghitung panjang string

Spasi juga ikut terhitung

strcpy() Memasukkan string ke variabel saat assignment dengan tanda sama


dengan tidak bisa

Memasukkan string ke variabel (kecuali deklarasi) harus menggunakan


cara ini

strcat() Concatenate string

strcmp() Membandingkan dua string dan mengeluarkan output berupa angka


strcmp()
Berikut detail outputnya
- return 0 jika kedua string sama
- return 1 jika ASCII huruf pertama pada string pertama lebih besar dari ASCII huruf
pertama string kedua
- return -1 jika ASCII huruf pertama pada string pertama lebih kecil dari ASCII huruf
pertama string kedua

H memiliki nomor ASCII 72, sedangkan B memiliki nomor ASCII 66.


Operators
Operator Assignment
Operator yang berfungsi untuk meng-assign atau memberi nilai. Contohnya assignment value
ke variabel.

Operator Aritmatika
Operator yang berfungsi untuk melakukan operasi matematika.

Simbol Fungsi

+ Pertambahan

- Pengurangan

* Perkalian

/ Pembagian
% Modulo (sisa hasil bagi)

10 dibagi 3 sisa satu sehingga modulo


nya satu

++ Increment (tambah satu)

-- Decrement (kurang satu)

Shorthand Operators
Kita bisa menyingkat operator aritmatika dengan cara berikut:

Simbol Fungsi

+= x+=1
Sama dengan x = x + 1

-= x-=1
Sama dengan x = x - 1

*= x*=1
Sama dengan x = x * 1

/= x/=1
Sama dengan x = x / 1
Increment dan Decrement
Increment dan decrement merupakan salah satu operator yang paling berguna pada C.
Kegunaannya akan terlihat saat kalian nanti membuat for loop.

Letak dari operator increment dan decrement akan mempengaruhi program kalian. Berikut
perbandingannya.

Peletakan increment dan decrement ini tidak berpengaruh jika dilakukan diluar 𝑝𝑟𝑖𝑛𝑡𝑓() atau
pada saat assignment variabel karena hasil akan selalu tersimpan ke variabel.
Operator Perbandingan
Operator yang berfungsi untuk membandingkan dua variabel atau value dengan output binary 1
(true) atau 0 (false).

Simbol Fungsi

== sama dengan

!= tidak sama dengan

> lebih besar dari

< lebih kecil dari

>= lebih besar atau sama dengan dari

<= lebih kecil atau sama dengan dari

Operator Logika
Operator yang berfungsi untuk melakukan pernyataan logika. Operator ini akan lebih terlihat
saat kalian nanti membuat statement if else.

Simbol Fungsi

&& (AND) 1 (true): statement kiri dan kanan benar


0 (false): statement kiri atau kanan ada yang salah

Kedua statement di kiri dan di kanan harus benar untuk jadi 1 (true).

|| (OR) 1 (true): statement kiri atau kanan ada yang benar


0 (false): statement kiri dan kanan salah
Untuk contoh true, karena statement di kanan benar maka menjadi true
karena hanya butuh satu yang benar.

! (NOT) 1 (true): value bukan yang ada di dalam kurung


0 (false): value sama dengan yang ada di dalam kurung

Pada contoh true, statement tersebut artinya “tidak benar bahwa 5 sama
dengan 6”. Maka outputnya adalah 1 (true).
Selection (Control Statement)
Selection atau control statements pada bahasa C berfungsi sebagai logika pengendalian
pilihan. Ada beberapa selection atau control statement pada C, antara lain ternary, if-else, dan
switch.

Ternary
Ternary merupakan control statement yang paling dasar dalam C. Kemampuannya dasar dan
kodenya bisa ditulis secara singkat dalam satu baris. Value dari ternary juga bisa langsung
dimasukkan ke dalam variabel. Format/Syntax penulisannya adalah sebagai berikut:
- <kondisi> ? <statement jika kondisi true> : <statement jika kondisi false>;
- <nama variabel> = <kondisi> ? <statement kondisi true> : <statement kondisi false>;

If-else
Statement if-else merupakan control statement yang paling umum dipakai di setiap bahasa
pemrograman. Dalam C, Format/Syntax if-else adalah sebagai berikut:
Statement if-else juga bisa dipakai jika kita memiliki lebih banyak kondisi dengan Format/Syntax
else if seperti gambar dibawah. Statement if-else akan mengecek kondisi 1 terlebih dahulu, lalu
pindah untuk mengecek kondisi 2 bila kondisi 1 sudah tidak terpenuhi dan seterusnya.

Statement if-else dalam bahasa C juga bisa dipakai secara singkat seperti ini:

Penggunaan Ternary dan If-else


Penggunaan ternary sangat disarankan ketimbang menggunakan if-else jika statement yang
ingin kita buat hanya satu saja. Ternary akan membuat kode lebih singkat dalam satu baris dan
efisien. Berikut perbandingan kode ternary dan if-else untuk mencari status kelulusan seorang
mahasiswa.
Switch
Statement switch merupakan control statement yang cukup populer dalam C. Switch
menawarkan perbandingan variabel langsung tanpa kondisi. Dalam quiz algo dan pelajaran
lainnya, switch biasa digunakan untuk membuat menu aplikasi bersamaan dengan do-while.

Untuk menggunakan switch, kita harus mendeklarasi variabel kontrol terlebih dahulu. Berikut
contoh Format/Syntax switch dan penggunaannya:

Pada switch, 𝑑𝑒𝑓𝑎𝑢𝑙𝑡: sebenarnya tidak memerlukan 𝑏𝑟𝑒𝑎𝑘; Hanya case yang memerlukan
𝑏𝑟𝑒𝑎𝑘; agar tidak terjadi code loop atau freeze pada output terminal.
Repetition
Repetition atau loop berfungsi untuk melakukan perulangan statement. Bahasa C memiliki
beberapa statement repetition yaitu for, while, dan do-while.

For
For merupakan statement perulangan dalam C yang kita gunakan jika kita mengetahui jumlah
perulangan yang ingin kita lakukan. Statement repetition for menggunakan variabel untuk
mengetahui banyaknya perulangan yang sudah dilakukan. Format/Syntax dari for adalah sebagai
berikut:

Penjelasan:
- <deklarasi> merupakan deklarasi variabel perulangan untuk meng-track jumlah
repetition yang sudah dilakukan. Contohnya ingin deklarasi variabel perulangan dengan
value 1.
- <target> merupakan kondisi dari variabel perulangan untuk terus melakukan
perulangan. Misalnya membuat kondisi variabel perulangan <10 yang berarti for akan
melakukan perulangan saat variabel perulangan masih dibawah 10.
- <perubahan> merupakan perubahan variabel yang ingin dilakukan setiap perulangan.
Misalnya ingin variabel perulangan naik.

Gambar diatas berarti: dengan variabel perulangan i yang value nya 1, lakukan perulangan
selama i dibawah 10 dan tambah i sebanyak satu kali setiap perulangan. Program akan meng-
output value i setiap perulangan. Output berhenti di angka 9 karena saat i ditambah menjadi 10,
statement for mendeteksi i sudah tidak <10, sehingga loop berhenti.

While
While mirip seperti for, hanya saja tidak ada <deklarasi> dan <perubahan>. While akan terus
berulang selama kondisi yang ada di dalam kurung while terpenuhi atau true. Berikut
Format/Syntax while:

Contoh while untuk melakukan perulangan selama input bukan huruf x:


Pada contoh gambar diatas, deklarasi input merupakan deklarasi kosong. Jika variabel input
terdeklarasi dengan value huruf x, maka statement di dalam while tidak akan pernah dijalankan
karena while mengecek kondisi terlebih dahulu.

Do-while
Do-while mirip seperti while. Bedanya do-while akan melakukan statement do terlebih dahulu
tanpa mengecek kondisi while. Format/Syntax do-while adalah sebagai berikut:

Contoh pemakaian do-while:

Bisa dilihat dari gambar, walaupun input sudah memiliki value x, statement
𝑝𝑟𝑖𝑛𝑡𝑓("𝑀𝑎𝑠𝑢𝑘𝑘𝑎𝑛 𝑖𝑛𝑝𝑢𝑡: ") tetap dijalankan terlebih dahulu tanpa langsung terminate.
Break and Continue
Break dan continue merupakan statement yang bisa digunakan dalam selection dan repetition.
Break berarti keluar dari program dan continue akan terus melanjutkan program.

Contoh break: bisa dipakai pada statement do-while untuk menambah kondisi. Pada contoh
dibawah, kondisi ditambah menjadi huruf x dan z yang akan mengakhiri do-while.

Contoh continue: bisa dipakai untuk meloloskan angka tertentu pada for loop seperti pada contoh
dibawah. Jika value i sama dengan 5, for loop akan mereset tanpa program berhenti.

Jika dibandingkan dengan memakai break pada for loop yang sama, maka hasilnya seperti ini:

For loop akan langsung terminate saat mendeteksi value i sama dengan 5.
Array
Array merupakan bentuk penyimpanan data atau value pada setiap bahasa pemrograman. Array
bertindak sebagai sebagai lemari yang menyimpan barang-barang dengan label angka. Label
atau index dari array dimulai dari angka 0. Jadi barang atau value pertama dalam array akan
memiliki label atau posisi 0.

Format/Syntax Array
Format/Syntax deklarasi
- <tipe data> <nama array>[<ukuran>] = {<berbagai value>};
Format/Syntax pemanggilan
- <nama array>[<index>]

Array di print dari index ke-0 sampai index ke-9

Array untuk String


Deklarasi string memiliki kasus khusus karena string ini akan membuat reservasi index terakhir
khusus untuk karakter “\0”. Jadi kita perlu melebihkan ukuran array string sebanyak satu index.

Contohnya kita ingin menyimpan kata “BINUS” ke dalam variabel yang bernama univ. Karena
BINUS memiliki 5 huruf, kita harus membuat ukuran array menjadi 6. Bisa juga membuat array
string tanpa menulis ukuran (contoh: 𝑐ℎ𝑎𝑟 𝑢𝑛𝑖𝑣[] = “𝐵𝐼𝑁𝑈𝑆”;).

Huruf B I N U S

Index 0 1 2 3 4

Array string akan menyimpan kata atau kalimat dengan membagi tiap huruf ke dalam index
masing-masing. Jadi kita bisa output array string per huruf.
Atau bisa juga dengan menggunakan for loop untuk kustomisasi.

Multi-Dimensional Array
Kita juga bisa membuat array yang memiliki dimensi lebih dari satu untuk menampung struktur
data yang lebih kompleks. Disarankan untuk tidak membuat array lebih dari tiga dimensi (tiga
dimensi sudah termasuk cukup ekstrem).

Grafik index array 2D


Structure
Structure adalah metode untuk mengelompokkan beberapa variabel yang terkait. Structure mirip
seperti dictionary di Python atau bahasa pemrograman lainnya. Misal variabel nama mahasiswa,
nim, dan jurusan dapat dimasukkan ke dalam structure yang bernama mahasiswa.

Format/Syntax Structure
Structure bisa memuat semua tipe data dan variabel di dalamnya. Berikut contoh Format/Syntax
structure:

Jangan lupa untuk memberi titik koma di akhir deklarasi structure.

Contoh Membuat Structure


Berikut adalah contoh structure yang berisikan data mahasiswa:

Deklarasi Structure
Structure bisa dibuat dengan Format/Syntax berikut:
- struct <nama structure> <nama variabel>
- <nama structure> berarti nama dari struct yang sudah kita buat
- <nama variabel> berarti nama dari struct yang ingin kita deklarasikan

Artinya kita membuat structure mahasiswa dengan nama mhs.


Assigning and Retrieving Values to Structure
Setelah kita mendeklarasi structure, kita bisa mulai memasukkan lalu mengambil data dengan
Format/Syntax <nama variabel structure>.<nama variabel member>. Mengambil data dari
structure juga memakai Format/Syntax yang sama.

Other Structure Types


Local Structure
Kita bisa langsung membuat dan mendeklarasi structure di dalam function. Pada contoh dibawah,
dibuat structure yang menampung int x dan y. Lalu dua structure bernama coord1 dan coord2 di
deklarasikan.
Nested Structure
Kita juga bisa mendeklarasi structure di dalam structure.

Dan diakses dengan cara seperti ini

Structure in the form of array


Structure bisa dibuat dalam bentuk array untuk menampung banyak data dan bisa dipanggil sama
dengan array biasa.

Bisa melakukan assignment dan panggilan dengan cara berikut


Typedef
Keyword typedef dapat membuat structure menjadi tipe data custom baru. Dengan menggunakan
typedef, kita tidak perlu deklarasi structure, cukup deklarasi variabel typedef dan tulis nama
variabel yang ingin dibuat sebelum titik koma terakhir struct.

Variabel structure mhs menjadi variabel yang bisa dideklarasikan.


Union
Union merupakan metode pengelompokkan dan penyimpanan data yang mirip dengan structure.
Format pembuatan dan deklarasi union mirip dengan structure. Bedanya bila structure
menggunakan lokasi memory terpisah untuk setiap variabel, union hanya memakai satu memory
location untuk menyimpan semua variabel.

Pembuatan dan Deklarasi Union


Pembuatan dan deklarasi union mirip seperti structure.

Perbedaan Structure dan Union


Perbedaan dari structure dan union bisa dilihat pada gambar dibawah.

Gambar diambil dari GeeksforGeeks


Perbedaan size structure dan union
Karena union menggunakan lokasi memory yang sama untuk menyimpan data, union akan
memiliki memory footprint yang lebih kecil.

Structure mengalokasi memori sebesar 100 untuk nama dan jurusan, dan 11 untuk nim. Sehingga totalnya adalah
211.
Union mengalokasikan ukuran memori mengikuti ukuran member yang paling besar yaitu 100. Jadi ukuran union
adalah 100.
Enumeration
Enumerasi adalah tipe data dengan jumlah dan value data yang bisa kita tentukan. Tipe data
enumeration biasa digunakan untuk deklarasi value constant.

Format/Syntax Enumeration
Deklarasi variabel langsung
Nama variabel enum langsung di deklarasikan di pembuatan enum.

Deklarasi dalam function


Nama variabel di deklarasi pada function.

Contoh Penggunaan Enumeration


Pointer
Setiap variabel dalam bahasa C dan C++ memiliki address pada memory (RAM). Address
memory ini yang digunakan oleh variabel untuk mengetahui lokasi penyimpanan value di
memory. Pointer merupakan suatu variabel yang digunakan untuk menampung address
memory variabel lain.

Pointer Operators
Pointer juga memiliki beberapa operator untuk bisa dipakai. Operator pointer seperti “&” sudah
kita pakai diatas pada statement 𝑠𝑐𝑎𝑛𝑓(). Operator “&” pada 𝑠𝑐𝑎𝑛𝑓() berarti input akan
dimasukkan ke variabel yang memiliki address tersebut.

Dua operator yang dipakai oleh pointer antara lain:


- & sebagai operator penunjuk address
- * sebagai operator dereferencing (untuk mengakses value pointer)

Pointer Format/Syntax
Deklarasi pointer memiliki Format/Syntax sebagai berikut:
- <data type>* <nama pointer>;
- <nama pointer> = &<nama variabel yang ingin disimpan addressnya>;
- <data type>* <nama pointer> = &<nama variabel yang ingin disimpan addressnya>;

Contoh Penggunaan Pointer


Contoh penggunaan pointer:

Disarankan untuk menempelkan dereferencing operator (*) pada tipe data dan bukan pada
nama variabel supaya tidak membingungkan antara nama variabel dan pointer. Seperti contoh
di atas yaitu int* atau char* dan bukan int *a atau char *b.
Void Pointer
Kita juga bisa menggunakan tipe data void untuk menyimpan address dari suatu variabel. Pointer
yang berbentuk void ini hanya akan menyimpan address, value tidak dapat diubah menggunakan
pointer yang void.

Format:
- void* <nama pointer>;
- void* <nama pointer> = &<nama variabel>;

Pointer bertipe data void digunakan untuk:


- malloc() dan calloc() yang dapat mengalokasikan memori bertipe data apapun karena
return nya void*.
- Implementasi generic function

Mengapa Pointer digunakan?


Bahasa C dibuat pada saat sistem operasi komputer jauh lebih lemah dibanding komputer saat
ini. Pada masa itu, semua program yang dibuat harus menggunakan memory efisien. Pointer
memampukan operasi variabel dan function lain seperti if-else dan array untuk menggunakan
memori paling sedikit.

Saat ini dimana komputer sudah sangat kuat, penggunaan pointer sebenarnya sudah tidak
diperlukan kecuali untuk kasus-kasus khusus yang harus membutuhkan pointer.

Penjelasan lebih lanjut bisa dibaca di web ini.


Function
Function merupakan kumpulan baris kode yang digabung menjadi bagian-bagian untuk
mengatur jalannya kode. Function membagi pekerjaan kode ke dalam tipe kerja nya masing-
masing, contohnya function untuk menambah dua angka.

Contoh lain dari function yaitu function 𝑖𝑛𝑡 𝑚𝑎𝑖𝑛() yang kita sudah pakai untuk menjalankan
setiap kode kita. Function 𝑖𝑛𝑡 𝑚𝑎𝑖𝑛() merupakan function inti yang akan selalu dijalankan
pertama kali oleh compiler C dan C++.

Format/Syntax Function
Function memiliki Format/Syntax sebagai berikut:

Setiap data type memerlukan return kecuali function yang memiliki data type void.

Parameter dalam function adalah variabel sementara yang hanya dapat digunakan di dalam
function tersebut. Parameter menampung value yang dilempar saat pemanggilan function.

Contoh function void yang tidak memerlukan return.


Tipe Passing Parameter
Ada dua cara pelemparan parameter yang bisa dipakai:

Passing by value
Passing by value berarti value yang akan akan dilempar ke parameter function saat
pemanggilan. Value yang ditampung di parameter function dapat diganti secara terpisah dan
tidak akan mempengaruhi value pada variabel function pemanggil.

Passing by reference
Passing by reference berarti value yang akan dilempar ke parameter function adalah alamat
dari variabel. Dengan alamat, kita bisa mengubah value yang berada di function pemanggil
secara langsung dari function yang kita buat.

Dengan memiliki alamat dari variabel, kita bisa mengganti valuenya dari bagian kode manapun.
Contoh Penggunaan Function
Berikut adalah contoh function untuk menambah dua nilai dan mengembalikan hasil
pertambahan nya ke function pemanggil.
Recursive Function
Recursive function merupakan function yang sengaja dibuat untuk memanggil dirinya sendiri.
Walaupun terdengar sama dengan repetition atau loop, recursive function memiliki beberapa
perbedaan dengan repetition.

Repetition Recursive

kode program akan cenderung lebih panjang kode programnya lebih singkat dan mudah
untuk mengakomodasi logika yang banyak dipahami

membutuhkan alokasi memori yang relatif membutuhkan alokasi memori yang relatif
lebih kecil karena penggunaan memory akan lebih besar karena function akan menyimpan
reset setiap loop value recursive

repetition akan berhenti apabila kondisi sudah recursive akan berhenti apabila semua
terpenuhi atau false operasi sudah selesai

repetition akan berjalan lebih cepat recursive dapat menghambat sistem jika
terjadi terlalu banyak recursive kondisi akhir
yang sulit dicapai

Format/Syntax Recursive Function


Statement recursive dari suatu function dapat ditulis dengan cara berikut:
- return <nama function> + <nama function>(parameter);

Contoh Recursive Function


Berikut contoh recursive function untuk mencari faktorial suatu angka:

Statement if return 1 merupakan kondisi akhir, recursion akan berhenti saat sudah mengenai kondisi akhir. Bisa
dilihat pada step tracing dibawah.

Step tracing recursive function factorial


Memory Allocation and Deallocation
Dalam C, kita bisa membuat alokasi memori untuk variabel atau array yang kita pakai. Memory
allocation akan menggunakan pointer void. Ukuran per data type bisa dilihat pada tabel ini.
Function dari memory allocation membutuhkan library <stdlib.h>.

Allocation vs Deallocation
- Memory allocation → proses pengalokasian memori (RAM).
- Memory deallocation → proses pembersihan memori (RAM) dari alokasi yang dilakukan.

Static Memory Allocation vs Dynamic Memory Allocation (tabel)

Static Memory Allocation Dynamic Memory Allocation

Dialokasikan saat compile time Dialokasikan saat run time

Disimpan di stack memory (daerah memori Disimpan di heap memory (daerah memori
terstruktur) free-floating)

Deallocated saat program berakhir Deallocated saat program berakhir

Static Memory Allocation


Static allocation berarti kita memesan memori sebesar ukuran yang telah kita tentukan. Salah
satu contoh static memory allocation yang sudah kita pakai yaitu alokasi size string dengan char
kata[10]. Karena ukuran char 1 byte (sesuai dengan tabel ini), artinya kita mengalokasikan
memori sebesar 10 byte untuk variabel kata.
Dynamic Memory Allocation
Dynamic allocation berarti sistem akan menentukan ukuran yang akan dipesan di memori dan
mengubahnya sesuai dengan ukuran value yang tersimpan. Variabel penampung dynamic
memory allocation haruslah sebuah pointer.

Berikut beberapa function dynamic memory allocation:

Function Kegunaan

malloc( ) Mengalokasikan ukuran memori spesifik


Memory Allocation

calloc( ) Mengalokasikan ukuran memori spesifik dan mengisi tiap value yang dialokasi
Contiguous Allocation
dengan angka 0

realloc( ) - Memindahkan lokasi memori alokasi ke lokasi memori yang lain


Reallocation
- Untuk mengganti ukuran alokasi

free( ) Membersihkan value pada lokasi alokasi menjadi garbage value (angka
random)

malloc()
Format:
- <data type>* malloc (sizeof(<data type>));
- <data type>* malloc (<jumlah yang diinginkan> * sizeof(<data type>));
- <data type>* <nama variabel> = <data type>* malloc (<jumlah memory> * sizeof(<data
type>));

calloc()
Format:
- <data type>* calloc(<jumlah memory>, sizeof(<data type>);
- <data type>* <nama variabel> = <data type>* calloc(<jumlah memory>, sizeof(<data
type>);

Mirip seperti int numbers[100]


realloc()
Format:
- <data type>* realloc(<variabel malloc>, <jumlah memory> * sizeof(<data type>));
- <data type>* <nama variabel> = <data type>* realloc(<variabel malloc>, <jumlah
memory> * sizeof(<data type>));

free()
Format:
- free(<variabel malloc>);

Value 10 dibersihkan dari memori menjadi garbage value


File Processing and Handling
Bahasa C memiliki fungsi-fungsi yang dapat digunakan untuk membuat, mengakses, dan
mengubah file txt maupun bin. Dalam kelas algo, akses file txt akan dibutuhkan untuk
menampung input yang besar yang digunakan oleh quiz algo (lupa, kalau tidak salah ya).

Beberapa hal yang bisa dilakukan kepada file dalam C ataupun C++ antara lain:
- Membuat file baru
- Menampung file baru
- Membaca isi file
- Menulis isi file
- Menutup file

Mode File
Function-function file processing memiliki berbagai mode yang bisa digunakan untuk keperluan
file tertentu. Berikut mode-modenya untuk handling file txt.

Mode Penjelasan

r Read Mode
- Membuka file untuk dibaca
- Return null jika file tidak ditemukan

w Write Mode (Overwrite mode)


- Membuka file untuk ditulis
- Overwrite jika ada file yang sama
- Membuat file baru jika file tidak ditemukan

a Append Mode (Safe writing mode)


- Membuka file untuk di append
- Akan menambah text di akhir file (tidak akan overwrite)
- Membuat file baru jika file tidak ditemukan

r+ Reading and Writing Mode


- Membuka file untuk dibaca dan ditulis
- Return null jika file tidak ditemukan

w+ Reading and Writing Mode


- Membuka file untuk dibaca dan ditulis
- Overwrite jika ada file yang sama
- Membuat file baru jika file tidak ditemukan

a+ Reading and Append Mode


- Membuka file untuk dibaca dan di append
- Akan menambah text di akhir file (tidak akan overwrite)
- Membuat file baru jika file tidak ditemukan
Function File Processing

Function Penjelasan

fopen() Function untuk membuka file

fscanf() Sama seperti 𝑠𝑐𝑎𝑛𝑓() tetapi untuk membaca isi file

fprintf() Sama seperti 𝑝𝑟𝑖𝑛𝑡𝑓() tetapi untuk menulis isi file

fclose() Function untuk menutup file. File yang sudah dibuka harus ditutup
setelah dipakai agar tidak terjadi error lebih lanjut.

fopen()
Format penggunaan fopen()

Contoh

Membuka file tes.txt dengan mode append dan menyimpan ke variabel fp

fclose()
Format penggunaan fclose() untuk menutup file sesudah digunakan

Contoh
fscanf()
Format penggunaan fscanf() untuk membaca file

Contoh

Contoh isi file

Contoh print isi file. Fscanf akan mengambil angka paling atas terlebih dahulu untuk mengetahui jumlah loop.
%[&\n] berarti setelah mengambil angka depan, fscanf akan mengambil karakter sampai akhir (sampai newline)
fprintf()
Format penggunaan fprintf() untuk menulis file

Contoh

Sebelum fprintf

Saat fprintf

Sesudah fprintf
Sorting
Sorting seperti namanya merupakan proses pengurutan data. Dalam C, tidak ada fungsi khusus
untuk sorting, kita harus membuat function sorting kita sendiri. Ada beberapa tipe sorting dalam
C yang bisa dibuat.

Tipe-tipe sorting
Tipe sorting dalam C dapat dibagi menjadi dua level kesusahan.

Basic Sorting
1. Bubble sort: akan mengambil dua angka, bisa dari awal ataupun akhir index,
membandingkan kedua angka, dan menukar posisi index kedua angka. Angka terkecil
akan dipindah ke index yang lebih kecil, angka yang lebih besar akan pindah ke index
kanan. Lalu bubble sort akan mengambil kedua angka berikutnya setelah index angka
sebelumnya. Penukaran ini akan terus berlangsung sampai tidak ada kedua angka yang
index angka di kanan lebih kecil. Dengan cara ini, angka yang terbesar akan selalu pindah
ke index paling kanan dan angka paling kecil akan berada di kiri.

Gambar dari enjoyalgorithms.com

Contoh bubble sort dari programiz.com

2. Selection sort: akan mencari angka terkecil lalu menukarnya dengan index pertama.
Setelah itu selection sort akan mencari angka terkecil lagi (selain yang sudah ditukar) lalu
menukarnya dengan index kedua. Proses akan terus berlanjut hingga angka di index
paling kanan sudah terbesar.
Gambar dari enjoyalgorithms.com

Contoh selection sort dari programiz.com

3. Insertion sort: akan menggunakan array tambahan, contohnya array temp. Pertama kita
ambil angka dari index pertama lalu memasukkan value nya ke array temp. Angka
kedua akan diambil dan dibandingkan dengan array temp untuk mengetahui posisi index
angka yang tepat. Proses akan terus berlangsung hingga semua angka yang ada di
array awal sudah terambil.

Gambar dari commons.m.wikimedia.org


Contoh insertion sort dari programiz.com

Intermediate Sorting
1. Quick sort: menggunakan sistem divide and conquer. Visualisasi interaktif dari quick sort
bisa dilihat di website ini.
2. Merge sort: menggunakan sistem divide and conquer seperti quick sort, tetapi juga
menggunakan sistem sub-array. Merge sort ini lebih efisien dari quick sort. Visualisasi
interaktif dari merge sort bisa dilihat di website ini.
Searching
Searching merupakan suatu proses untuk menemukan angka atau value pada array. Function
searching akan sangat dibutuhkan untuk menemukan value pada array yang besar secara
cepat dan efisien. Dalam C, searching juga tidak memiliki function secara khusus sehingga kita
harus membuatnya secara manual.

Tipe-tipe searching
Ada dua tipe searching yang bisa dibuat dalam C.

Linear Search
Linear search merupakan search paling sederhana, dengan mencari value satu-satu dengan
menggunakan loop. Search ini sangat tidak efisien untuk array berukuran besar karena jika value
ada di akhir array, maka program akan membuang waktu membaca value array dari awal.

Visualisasi interaktif dari linear search dapat dilihat di website ini.

Contoh linear search dari programiz.com

Binary Search
Binary search adalah search yang secara efisien akan membagi jangkauan search tiap kali
melihat value. Binary search membutuhkan array untuk diurutkan terlebih dahulu dari angka yang
terkecil hingga terbesar. Jadi, binary search akan pertama kali membagi dua array di tengah. Jika
value lebih kecil dari angka di tengah, maka jangkauan search baru akan dibuat dari index
pertama hingga index sebelum angka tengah. Setelah itu, jangkauan baru ini akan dicari lagi nilai
tengahnya. Jika angka yang ingin dicari lebih besar dari nilai tengah jangkauan baru ini, maka
nilai awal jangkauan baru akan menjadi index setelah index nilai tengah dan nilai akhir akan
menjadi index akhir dari array. Proses ini akan terus berjalan sampai nilai ditemukan atau tidak
ditemukan.

Visualisasi interaktif dari binary search dapat dilihat di website ini.


Contoh binary search from programiz.com
Sorting and Searching Time Complexity
Sorting and searching memiliki efisiensi dan kecepatan program yang bisa diukur dengan time
complexity measurement. Time complexity biasa diukur dengan menggunakan Big-O notation.

Algoritma Sorting Kasus Terburuk Kasus Rata-Rata Kasus Terbaik

Bubble Sort O(n2) O(n2) O(n2)

Selection Sort O(n2) O(n2) O(n2)

Insertion Sort O(n2) O(n2) O(n)

Quick Sort O(n2) O(n log n) O(n log n)

Merge Sort O(n log n) O(n log n) O(n log n)


Tabel time complexity dari HIMTI KIT Algorithm and Programming 2022

Kasus terburuk merupakan waktu dimana program memproses array dengan jumlah paling
banyak dan paling tidak ideal. Contohnya adalah saat menggunakan linear search, angka yang
ingin kita temukan berada di index terakhir. Seperti yang sudah dikatakan sebelumnya, program
akan membuang waktu mencari value-value yang pasti tidak sama dari awal index.

Kasus terbaik terjadi array merupakan array yang ideal dan angka yang ingin kita cari langsung
ditemukan saat pertama kali melakukan loop atau sorting langsung hanya dalam satu loop.
References
ALGORITHM & PROGRAMMING - HIMTI KIT 2022
https://www.asciitable.com/
https://www.geeksforgeeks.org/escape-sequence-in-c/
https://www.simplilearn.com/tutorials/c-tutorial/Format/Syntax-specifiers-in-c
https://prepinsta.com/all-about-c-language/Format/Syntax-specifiers-in-c/difference-between-e-f-and-g/
https://stackoverflow.com/questions/33930147/what-is-in-scanff-variablename-in-c-programming
https://www.studymite.com/blog/strings-in-c
https://www.programiz.com/c-programming/string-handling-functions
https://www.programiz.com/c-programming/library-function/string.h/strcmp
https://www.programiz.com/c-programming/ternary-operator
https://www.programiz.com/c-programming/c-break-continue-statement
https://www.tutorialspoint.com/cprogramming/c_typedef.htm
https://www.geeksforgeeks.org/structure-vs-union-in-c/
https://www.programiz.com/c-programming/c-enumeration
https://www.programiz.com/c-programming/c-pointers
http://duramecho.com/ComputerInFormat/Syntaxion/WhyCPointers.html
https://www.w3schools.com/c/c_structs.php
https://www.javatpoint.com/static-in-c
https://www.tutorialspoint.com/register-keyword-in-c
https://www.scaler.com/topics/c-extern/
https://www.geeksforgeeks.org/void-pointer-c-cpp/
https://www.guru99.com/stack-vs-heap.html
https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/
https://www.includehelp.com/cpp-tutorial/difference-between-const-and-define.aspx
https://www.enjoyalgorithms.com/blog/introduction-to-sorting-bubble-sort-selection-sort-and-insertion-sort
https://commons.m.wikimedia.org/wiki/File:Insertion-sort-example.gif
https://www.geeksforgeeks.org/quick-sort-vs-merge-sort/
https://www.programiz.com/dsa/bubble-sort
https://www.programiz.com/dsa/selection-sort
https://www.programiz.com/dsa/insertion-sort
https://www.programiz.com/dsa/linear-search
https://www.programiz.com/dsa/binary-search

Anda mungkin juga menyukai