Algorithm and Programming
Algorithm and Programming
Programming
HIMTI KIT
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.
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.
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.
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
#𝑖𝑛𝑐𝑙𝑢𝑑𝑒.
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.
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
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.
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.
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.
Data type yang digunakan bisa mengikuti tabel, tetapi jangan lupa untuk dijadikan huruf kecil.
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 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
%c Untuk Char
%s Untuk String
%f Untuk Float
%x Untuk Hexadecimal
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
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
\b Backspace
\n Newline, linefeed
\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
\\ Backslash
𝑠𝑐𝑎𝑛𝑓() universitas menerima input enter saat kita selesai memasukkan nama
𝑔𝑒𝑡𝑐ℎ𝑎𝑟() menghisap enter yang kita klik saat selesai memasukkan nama
Function Kegunaan
Operator Aritmatika
Operator yang berfungsi untuk melakukan operasi matematika.
Simbol Fungsi
+ Pertambahan
- Pengurangan
* Perkalian
/ Pembagian
% Modulo (sisa hasil bagi)
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
Operator Logika
Operator yang berfungsi untuk melakukan pernyataan logika. Operator ini akan lebih terlihat
saat kalian nanti membuat statement if else.
Simbol Fungsi
Kedua statement di kiri dan di kanan harus benar untuk jadi 1 (true).
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:
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:
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:
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>]
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).
Format/Syntax Structure
Structure bisa memuat semua tipe data dan variabel di dalamnya. Berikut contoh Format/Syntax
structure:
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
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.
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.
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>;
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>;
Saat ini dimana komputer sudah sangat kuat, penggunaan pointer sebenarnya sudah tidak
diperlukan kecuali untuk kasus-kasus khusus yang harus membutuhkan pointer.
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.
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
Statement if return 1 merupakan kondisi akhir, recursion akan berhenti saat sudah mengenai kondisi akhir. Bisa
dilihat pada step tracing dibawah.
Allocation vs Deallocation
- Memory allocation → proses pengalokasian memori (RAM).
- Memory deallocation → proses pembersihan memori (RAM) dari alokasi yang dilakukan.
Disimpan di stack memory (daerah memori Disimpan di heap memory (daerah memori
terstruktur) free-floating)
Function Kegunaan
calloc( ) Mengalokasikan ukuran memori spesifik dan mengisi tiap value yang dialokasi
Contiguous Allocation
dengan angka 0
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>);
free()
Format:
- free(<variabel malloc>);
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
Function Penjelasan
fclose() Function untuk menutup file. File yang sudah dibuka harus ditutup
setelah dipakai agar tidak terjadi error lebih lanjut.
fopen()
Format penggunaan fopen()
Contoh
fclose()
Format penggunaan fclose() untuk menutup file sesudah digunakan
Contoh
fscanf()
Format penggunaan fscanf() untuk membaca file
Contoh
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.
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
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.
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.
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.
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