9016 words
45 minutes
Learn C language
NOTE

Jika ingin belajar pemerograman, maka materi bacaan ini bisa menjadi referensi untuk belajar bahasa pemrograman C. Maka dari itu, semangat yaa!

TIP

If you want to use English or another language, please use the translation feature in your browser.


Click tombol dibawah ini jika sudah membaca pengenalan.
Lihat apa yang konten ini sajikan Daftar isi.

A letter from author#

gif Halo semuanya, saya Axel— penulis dari blog ini. Saya disini berniat menuangkan kembali ilmu yang saya telah pelajari dari bahasa pemerograman C, murni dari pengalaman saya. Alasan kenapa saya menuliskan blog ini secara khusus adalah untuk membantu kamu yang baru mau terjun di dunia pemrograman… karena saya tau betapa sulitnya belajar dari sumber yang kurang jelas, penjelasan yang bertele-tele, dan tidak ada contoh yang nyata.
Maka dari itu saya bakal jelaskan dengan cara yang gampang dipahami untuk orang awam tanpa pengetahuan teknis.

Sebelum kamu belajar pemerograman, kamu harus tau alasan kenapa tertarik pada pemerograman — coba baca Manfaat coding.
Serta harus tau masing masing kegunaan tombol-tombol dalam keyboard.

95% Disekolah selama ini mungkin hanya di ajarkan mata pelajaran formal saja, jarang sekali ada tempat yang mengajarkan keahlian spesifik tentang bagaimana cara membangun teknologi, bagaimana cara mengetahui cara kerja dari beberapa teknologi yang kita gunakan selama ini.
Dan baru pertama kalinya mungkin kamu merasa bingung sekaligus aneh melihat konsep baru yang kedengaran rumit padahal gampang sedikit susah.

“Semua yang anda kira sulit, sebenarnya akan mudah jika tau caranya” — Dr. John smith.
Kemudahan datang setelah kesulitan, fasih mengaji berawal dari pelafalan yang belepotan.

Okelah saya cukupkan sampai disini aja, selamat belajar — santai aja bacanya.
saya yakin 100% semua konsep pemerograman akan berguna jika sudah dikuasai, apalagi mempermudah saat belajar bahasa pemerograman lain nantinya.
gif

Pengenalan: Apa itu Pemerograman Bahasa C?#

Pemerograman adalah suatu cara bagaimana manusia bisa memerintah mesin komputasi (komputer bukan cuma laptop dan pc loh yaa!) melakukan tugas tertentu untuk mempermudah kebutuhan sehari-hari yang berkaitan erat dengan teknologi yang kita gunakan seperti misalnya Aplikasi mobile, Websites, mesin manufaktur, robot, dan lainnya. — dalam bentuk kode program yang menjadi rangkaian alur sistematis tentang apa yang harus dikerjakan komputer.
Intinya ilmu pemerograman itu untuk membuat sebuah software atau yang kita kenal aplikasi, — ingat itu.

Bahasa C adalah bahasa pemrograman yang dikembangkan pada tahun 1972 oleh Dennis Ritchie di Bell Labs. Bahasa ini dirancang untuk sistem operasi Unix(OS perangkat komputer zaman dulu) dan menjadi salah satu bahasa pemrograman yang paling populer dan berpengaruh dalam sejarah pengembangan perangkat lunak.

Apa yang bisa dipelajari dari bahasa C?#

Bahasa C memiliki banyak kelebihan, seperti:

  • Portabilitas: Kode yang ditulis dalam bahasa C dapat dijalankan di berbagai platform tanpa perlu banyak perubahan.
  • Efisiensi: Bahasa C menghasilkan kode yang sangat efisien dan cepat, sehingga cocok untuk pengembangan sistem operasi, perangkat keras, dan aplikasi yang membutuhkan performa tinggi.
  • Kontrol yang Tinggi: Bahasa C memberikan kontrol yang tinggi terhadap memori dan sumber daya sistem, memungkinkan pengembang untuk mengoptimalkan kinerja aplikasi.
  • Struktur yang Jelas: Bahasa C memiliki struktur yang jelas dan mudah dipahami, sehingga cocok untuk pemula yang ingin belajar pemrograman.
  • Komunitas yang Besar: Bahasa C memiliki komunitas yang besar dan aktif, sehingga banyak sumber daya, tutorial, dan forum yang tersedia untuk membantu pemula belajar.
  • Aplikasi yang Banyak: Bahasa C digunakan dalam pengembangan aplikasi-aplikasi tingkat tinggi, seperti sistem operasi, perangkat lunak, dan game.

coding icon

Kenapa disarankan belajar bahasa C?#

Jika niatmu memang mau terjun di dunia pemerograman, maka ini adalah langkah awal yang tepat. Bahasa C adalah bahasa pemrograman yang paling dasar dan banyak digunakan dalam dunia pemrograman. Bahasa ini sangat penting untuk memahami konsep-konsep pemrograman lainnya, seperti bahasa pemrograman lain seperti C++, Java, dan Python.

Bagaimana cara belajar bahasa pemrograman C?#

Untuk belajar bahasa pemrograman C, kamu bisa mengikuti langkah-langkah berikut:

  1. Menyiapkan lingkungan pengembangan, anggaplah kode editor yang ada di komputer
  2. Memahami konsep dasar pemrograman
  3. Menulis kode
  4. Menjalankan kode
  5. Mengulang langkah-langkah tersebut sampai mahir serta terbiasa.

gif

tips & alur belajar pemerograman C#

urutankegiatanjangka waktu
1.fokus pelajari sintaksis, Tipe data, sampai input output1 minggu pertama
2.merambah ke penggunaan konstanta & operator1 minggu berikutnya
3.mencoba menggunakan struktur kontrol untuk berbagai kebutuhan & latihan proyek kecil program sederhana1 minggu berikutnya
4.pelajari subprogram dan struktur data2 minggu
5.Latihan membuat program yang lumayan kompleks gabungan konsep diatas1 minggu
6.(opsional) pelajari cara pemerosesan file, pointer, alokasi memori, dan library (meskipun untuk practical cenderung jarang dipakai kalau dari preferensi saya pada bahasa pemerograman C, jadi opsional tetapi cukup bermanfaat dipelajari)3 minggu - lebih
7.(opsional) merambah pelajari bahasa pemrograman lain seperti Python dan Javascript3 minggu - lebih (tergantung passion anda bidang tertentu)

Sebelum memulai menulis kode, ada yang perlu disiapkan…#

Hal pertama yang perlu kamu siapkan pada device komputer atau gadget lainnya; adalah code editor / text editor.
Gunanya untuk mengotak atik baris kode yang akan dituliskan nantinya.
Untuk belajar bahasa C, disarankan menggunakan code editor yang sederhana. Ada banyak code editor yang bisa kamu gunakan, namun disini saya sarankan untuk menggunakan Dev C++. Atau pun juga ada Visual Studio Code adalah code editor yang banyak digunakan oleh para developer — silahkan pilih sesuka hati pakai yang mana.
A. Link download software kode editor dev C.
Nah sekalian setelah download, coba tonton tutorial pemakaian aplikasinya.

B. Link download software Visual Studio Code VSCode.
Nah sekalian setelah download, coba tonton tutorial pemakaian aplikasinya.

Apa saja yang harus dipelajari dalam bahasa C?#

Oh iya.. ini juga sebagai daftar isi dari apa yang bakal kita bahas.
Untuk mempelajari bahasa C, berikut adalah beberapa konsep dasar yang perlu dipahami:

  • Sintaks Dasar: Memahami cara penulisan kode, seperti penggunaan tanda kurung, titik koma, dan struktur program.
  • Tipe Data dan Variabel: Memahami tipe data dasar seperti integer, float, char, dan lainnya.
  • Input output dan contoh penggunaannya: Memahami cara membuat perintah input dan output.
  • Konstanta: Memahami cara mendeklarasikan variabel dan konstanta, serta cara menggunakannya dalam kode.
  • Operator: Memahami operator-operator yang digunakan dalam pemrograman, seperti operator aritmatika, operator relasional, dan operator logika.
  • Struktur Kontrol: Memahami cara menggunakan struktur kontrol yang akan mengatur alur sistem bekerja.
    • Percabangan: Memahami cara membuat keputusan program berdasarkan kondisi tertentu. (if-else, switch case).
    • Perulangan: Memahami cara menggunakan perulangan untuk menjalankan blok kode secara berulang. (for, while, do-while).
  • Study case #1: Mempraktekan dan memahami contoh penggunaan kombinasi konsep diatas.
  • Subprogram: Memahami cara membuat subprogram untuk memecah kode menjadi bagian-bagian yang lebih kecil dan terorganisir.
    • Fungsi: Memahami cara mendeklarasikan dan menggunakan fungsi untuk memecah kode menjadi bagian-bagian yang lebih kecil dan terorganisir.
    • Prosedur: Memahami cara membuat subprogram yang tidak mengembalikan nilai.
    • Prosedur dengan nilai kembalian: Memahami cara membuat subprogram yang mengembalikan nilai.
  • Struktur Data: Memahami struktur data seperti array, linked list, tree, dan graph.
    • Array: Memahami cara menggunakan array untuk menyimpan kumpulan data dengan tipe yang sama.
    • Linked List: Memahami cara kerja linked list dan bagaimana menggunakan pointer untuk mengakses dan mengelola data.
    • Tree: Memahami konsep tree dan bagaimana menggunakan struktur tree dalam pemrograman.
    • Graph: Memahami konsep graph dan bagaimana menggunakan struktur graph dalam pemrograman.
  • Pemrosesan File: Memahami cara membaca dan menulis file.
  • Pointer: Memahami konsep pointer dan bagaimana menggunakannya untuk mengakses memori secara langsung.
  • Alokasi Memori: Memahami alokasi memori dinamis menggunakan malloc dan free.
  • Penggunaan Library: Memahami cara menggunakan library yang sudah ada untuk mempermudah pengembangan.
  • Demonstrasi story Game dengan bahasa C: Contoh sederhana membuat game simple dari gabungan berbagai konsep yang sudah dipelajari barusan.

Apa saja yang harus dipersiapkan untuk belajar bahasa C?#

Untuk belajar bahasa C, berikut adalah beberapa hal yang perlu dipersiapkan:

  • Lingkungan Pengembangan: Siapkan lingkungan pengembangan seperti IDE (Integrated Development Environment) atau teks editor yang mendukung bahasa C, seperti Code::Blocks, Visual Studio Code, atau Dev-C++.
  • Kompiler: Pastikan kamu memiliki kompiler C yang terpasang di komputermu, seperti GCC (GNU Compiler Collection) atau Clang.
  • Buku atau Sumber Belajar: Cari buku atau sumber belajar online yang membahas bahasa C secara mendalam, seperti video atau tutorial online.
  • Proyek Praktis: Siapkan proyek praktis yang bisa kamu kerjakan untuk menerapkan konsep-konsep yang telah dipelajari, seperti membuat program sederhana, kalkulator, atau permainan kecil.
  • Komunitas dan Dukungan: Bergabunglah dengan komunitas online yang aktif di bidang pemrograman C, seperti Stack Overflow, Reddit, atau Discord community, untuk mendapatkan bantuan dan dukungan dari developer lain.

oke! saya cukupkan pendahuluannya sekian saja..
Next kita bahas konsep dasar bahasa C.


coding icon

Konseptual dasar bahasa pemerograman C#

Disini akan saya coba kenalkan beberapa konsep yang perlu kamu mengerti untuk membuat sebuah perintah di program C beserta penjelasannya.

Mulai sekarang dan selanjutnya selama belajar pemerograman C, kita akan sering berinteraksi dengan media CLI (Command line interface) atau disebut juga sebagai Terminal (semacam media input output program sederhana dengan antarmuka/tampilan 2d dalam bentuk teks saja) biasanya dia akan terbuka jika kode program di eksekusi. — contohnya kayak gini: img Kalau dari sudut pandang developer di code editor, kira-kira bakal seperti ini bagian ngoding-nya:
gif Oke cukup begitu saja gambaran awal sebelum mulai belajar..


Fondasi awal dari segalanya…#

Struktur Program C#

Struktur kode itu seperti serangkaian aturan yang harus dipatuhi agar program yang kamu buat bisa dijalankan.
Struktur kode itu tidak bisa rubah secara ngawur.. Ibaratnya seperti aturan saat membuat puisi atau pantun tergantung jenisnya sih.. Gunanya supaya menjaga keindahan, fungsionalitas, dan kerapihan dari kode itu sendiri.

Lihat bagaimana penulisan awal struktur program..
sebelum menulis perintah~
(Perintah dianggap juga sebagai Syntax— Aturan-aturan yang mengatur bagaimana kode harus ditulis agar dapat dipahami oleh komputer… Dengan kata lain Syntax merupakan aturan tata bahasa yang digunakan untuk menulis perintah tersebut agar dapat dipahami oleh komputer).

#include <stdio.h>
int main() {
//your code...
return 0;
}

penjelasan:

  1. #include <stdio.h>: adalah bagian kepala atau yang disebut header yang gunanya untuk memasukkan library stdio.h, yang berisi fungsi-fungsi sebuah formula untuk input output.
  2. int main(): adalah fungsi utama dari program C, di mana kode program akan dijalankan.
  3. //your code...: adalah komentar, tidak akan di eksekusi mesin, jadi hanya sebagai pesan saja yang mendeskripsikan tentang kode ini untuk apa pada programmer.
    di dalam {} inilah kamu bisa menuliskan perintah yang di inginkan.
  4. return 0;: untuk menghentikan program ketika selesai eksekusi dan mengembalikan nilai 0.
    opsional tapi lebih baik ditulis saja yaa.
PERINGATAN TERKAIT SELURUH MATERI UNTUK KEDEPANNYA JUGA
  • Khusus untuk kamu sebagai pemula, selalu ingat ini… Dalam setiap hendak membuat program C, Pastikan pembuatan file nya benar seperti pertama-belajar.c Pastikan ekstensi di akhirnya adalah .c, bukan .txt .cpp .js etc.. Ada beberapa rules yang harus di ingat:
    • Nama file harus sama dengan kegunaannya begitupula dengan variabel, jangan gaje — contoh baik:kalkulator.c.
    • Perhatikan huruf besar dan kecilnya baik dari file ataupun kode program yang kamu buat nantinya.
    • Dalam penamaan file dan variabel tidak boleh pakai spasi dan karakter aneh @#%$ !*&.c. sebagai gantinya kalau diperlukan pemisah sebagai jarak penamaan, gunakan _ (underscore) contoh: pertama_belajar.c atau - (Dash/strip) contoh: first-time.c
  • Ketika kamu membuat program C, kamu harus menambahkan #include <library> dan itu wajib beserta struktur programmya.
  • ketika kamu menjumpai error, coba analisis kode kamu tulis apakah ada typo atau kurang penggunaan simbol wajib seperti (){}[]: dan ;
  • setiap kode yang kamu ciptakan, Wajib diberi tanda ; sebagai bagian akhirnya. (misal: printf("hallo!");)
  • disarankan ngasih komentar sebagai dokumentasi ringkas dari kutipan sebuah kode.. yaa seperti yang saya lakukan supaya pembaca tidak bingung ini kode apaan🤔.. beberapa bentuk komentar seperti //blablabla.. dan /*blablabla..*/.
    juga sebuah komentar gak akan di eksekusi mesin, jadi aman aja untuk dituliskan.
  • ketika kamu membuat sebuah perintah maka letakkan di dalam fungsi main().
    kecuali jika membuat sebuah function, maka boleh saja letakkan di luar fungsi main() *nanti dibahas.
TIP

Jangan cuma membaca contohnya lalu di-skip mentang mentang paham, tapi coba kamu bikin sendiri secara kreatif dari contoh yang ada. Cobalah juga salin kode contoh untuk di running di kode editor.. supaya bisa memahami cara kerja-nya.

Tipe Data dan Variabel#

Biar saya jelaskan sedikit, Setiap komputer itu butuh tipe data… Lalu apa itu tipe data? menurut saya itu adalah semacam Aneka dari jenis informasi yang bisa komputer olah. Contohnya aplikasi kalkulator standar deh, itu butuh data numerik.. bukan abjad untuk di proses perhitungannya, yaa mungkin beda lagi kalau ada kalkulator sains.
Setiap informasi itu pasti punya jenis yang berbeda: ada yang angka, huruf, simbol, dan lainnya.
contoh lagi kalau kamu punya akun sosial media.. pasti harus input username dan password, itu umumnya pakai tipe data karakter(username) dan angka(password) untuk diproses sistem, bahkan macam-macam tipe data bisa digabung penggunaannya untuk keunikan. jadii…

Tipe data adalah jenis data yang bisa digunakan dalam program.
Tipe data ini akan mempengaruhi bagaimana data akan disimpan dan diolah oleh komputer.

Variabel adalah tempat penyimpanan nilai yang dapat berubah-ubah.
ibaratnya seperti ember yang bisa diisi dengan air, di mana air itu adalah nilai yang akan disimpan.

// tipe data primitif
int a; // tipe data integer ~ menyimpan bilangan bulat 12345...
float b; // tipe data float ~ menyimpan bilangan desimal 3.14...
double c; // tipe data double ~ menyimpan bilangan desimal dengan banyak digit 123.456789...
char d; // tipe data karakter ~ menyimpan karakter 'a', 'b', 'c', '1', '2', '3', ...
// serta menyimpan macam-macam simbol seperti '@$#!^&%*()<>?/|\'
/*cara pengisian nilai*/
int a = 10; // diberi nilai
int b; // nilai kosong
TIP

cara serupa diatas juga diterapkan pada tipe data lainnya.

NOTE

tipe data primitif adalah tipe data yang paling umum digunakan.

  • int adalah tipe data integer yang menyimpan bilangan bulat.
  • float adalah tipe data yang menyimpan bilangan desimal dengan presisi sedang.
  • double adalah tipe data yang menyimpan bilangan desimal dengan presisi tinggi.
  • char adalah tipe data yang menyimpan karakter tunggal.

untuk mendeklarasikan tipe data beserta variabel ingat cara berikut:
<ruas kiri> <tengah> = <nilai(opsional)>;
ruas kiri adalah tipe data, ruas tengah adalah nama variabel, dan = adalah operator untuk mengisi nilainya. Note: penamaan variabel bebas kok ngasihnya contoh int skibidi.

Konstanta#

Kalau tadi variabel itu bisa dimanipulasi nilainya.. kalau konstanta tidak bisa.
Mirip seperti konsep di matematika yang menggunakan konstanta sebagai nilai tetap.
contohnya adalah pi = 3.14.

how to use constanta
int a = 10;
int hasil_perkalian = a * 2;
------------------------------------
const float phi = 10;
// phi tidak bisa diubah nilainya
// biasanya diletakkan dalam fungsi main
------------------------------------
// alternative
#define n = 10;
//biasanya diletakkan diluar fungsi main
/*
Perhatikan bahwa konstanta yang didefinisikan dengan #define tidak memiliki tipe data, dan penggantian nilai dilakukan secara harfiah.
*/
NOTE
  • const adalah keyword yang digunakan untuk mendeklarasikan konstanta.
  • #define adalah preprocessor directive yang digunakan untuk mendefinisikan konstanta.
  • Konstanta biasanya digunakan untuk nilai-nilai yang tidak akan berubah selama program berjalan, seperti nilai pi, euler, atau nilai tetap lainnya.
  • Konstanta tidak bisa di deklarasikan di dalam function.
  • Konstanta biasanya diletakkan di luar fungsi main() untuk memudahkan akses dan penggunaan di seluruh program.
SUPER WARNING
  • *Setiap pen-deklarasian varibel, konstanta ataupun sebuah fungsi Ada yang namanya Case Sensitive, yaitu dimana huruf besar dan kecil akan dianggap berbeda. Contohnya: int Angka dan int angka kedua variabel tersebut adalah entitas berbeda meskipun beda satu huruf saja.
    hal ini pun berlaku pada pembuatan sintaks lain, seperti kata kunci int, char, float, if, else, printf, dll —pun juga harus dituliskan dalam huruf kecil. Bahkan kamu memberikan nama pada file pun tidak boleh sama persis, harus unik setidaknya; seperti contoh.txt dan Contoh.txt.
  • const memungkinkan deklarasi konstanta dengan tipe data tertentu, sedangkan #define tidak.
  • Konstanta yang didefinisikan dengan const akan muncul dalam informasi debugging, sedangkan konstanta #define tidak.
  • const dapat memiliki scope lokal (dalam blok fungsi atau kode), sedangkan #define biasanya bersifat global.
TIP

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.

Input output dan contoh penggunaannya#

Secara harfiah, input artinya nilai masukkan (maksudnya nilai yang kamu berikan)
sedangkan output adalah nilai yang dikeluarkan setelah diproses oleh program.

// output
printf("Hello World!"); // output Hello World!
// input
char a;
scanf("%c", &a);
// output program
printf("Your input successful to process! \n");
printf("This is the output: %c", a); // this is the output : blabla...from input
NOTE
  • printf adalah sebuah perintah yang mencetak nilai ke layar, biasanya ada di terminal.
  • scanf adalah sebuah perintah yang menerima input dari user.
  • %c adalah format spesifier untuk karakter, yang digunakan dalam scanf untuk membaca input karakter.
  • %d adalah format spesifier untuk integer, yang digunakan dalam scanf untuk membaca input bilangan bulat.
  • %f adalah format spesifier untuk float, yang digunakan dalam scanf untuk membaca input bilangan desimal.
  • %lf adalah format spesifier untuk double, yang digunakan dalam scanf untuk membaca input bilangan desimal dengan presisi tinggi.
  • %s adalah format spesifier untuk string, yang digunakan dalam scanf untuk membaca input string.
  • & adalah operator yang digunakan untuk mengambil alamat dari variabel, sehingga scanf dapat menyimpan nilai input ke dalam variabel tersebut.
TIP

Beberapa typografi supaya penulisan output lebih rapih dan indah:

  • \n adalah karakter typografi yang digunakan untuk membuat baris baru.
  • \t adalah karakter typografi yang digunakan untuk membuat tab.
  • \\ adalah karakter typografi yang digunakan untuk membuat backslash.
  • \" adalah karakter typografi yang digunakan untuk membuat tanda kutip.
  • \' adalah karakter typografi yang digunakan untuk membuat tanda kutip tunggal.
IMPORTANT

Sampai sini dulu…
Silahkan experiment dengan menggunakan printf dan scanf serta penggunaan berbagai variabel untuk memahami cara kerjanya. ini penting untuk anda ketahui. silahkan coba di text editor sendiri atau online compiler di bawah ini 👇
built-in online compiler kemudian lihat eksekusi programmnya apakah jalan atau error.
Note: Jika program yang error.. itu terkadang dari kesalahan anda sendiri seperti penulisan sintaks yang salah, makanya coba intropeksi apa yang salah dari hasil tulisan anda lalu coba perbaiki.


Operator#

Dalam pemrograman C, operator itu seperti alat khusus yang kita gunakan untuk melakukan berbagai macam operasi atau pengolahan terhadap nilai-nilai (disebut juga operand).

Misalnya, kalau Anda punya angka 5 dan 3, lalu Anda ingin menambahkannya, Anda butuh alat + (operator penjumlahan). Kalau Anda ingin membandingkan apakah 5 lebih besar dari 3, Anda butuh alat > (operator perbandingan “lebih dari”).

Intinya Operator adalah operasi yang dilakukan untuk mengolah nilai-nilai dalam program.
Sekarang, mari kita lihat beberapa jenis operator lain yang mungkin terdengar rumit tapi sebenarnya punya kegunaan yang jelas.
utama (sering dipakai):

tambahan :

Operator Aritmatika#

Penggunaannya sama seperti operasi matematika dasar yang kamu pelajari di sekolah.
mari implementasikan ke dalam kode program

int a = 10;
int b = 5;
// operator use case
int c = a + b; // c = 15
int d = a - b; // d = 5
int e = a * b; // e = 50
int f = a / b; // f = 2
int g = a % b; // g = 0

operator Relasional#

IMPORTANT

disini kamu akan mengenal tentang konsep biner, yaitu 1 dan 0.
1 = true,
0 = false.

Dengan kata lain, operator relasional akan menghasilkan nilai boolean, yaitu true atau false.

  • True adalah logika yang di anggap benar.
  • False adalah logika yang di anggap salah.

Operator relasional digunakan untuk membandingkan dua nilai dan menghasilkan nilai boolean (true atau false).

int a = 10;
int b = 5;
// operator use case
int c = a > b; // c = true
int d = a < b; // d = false
int e = a == b; // e = false
int f = a != b; // f = true
int g = a >= b; // g = true
int h = a <= b; // h = false
IMPORTANT

nilai true dan false di C adalah nilai boolean yang merepresentasikan logika benar dan salah.
biasanya diwakili oleh angka 1 = true dan 0 = false oleh komputer.
yah secara sederhana seperti komputer mengembalikan benar atau salah berdasarkan pengecekan kondisi. ibaratnya seperti manusia yang membedakan ini benar atau salah berdasarkan kondisi yang dilihatnya.

TIP
  • > adalah operator yang digunakan untuk membandingkan apakah nilai a lebih besar dari nilai b.
  • < adalah operator yang digunakan untuk membandingkan apakah nilai a lebih kecil dari nilai b.
  • == adalah operator yang digunakan untuk membandingkan apakah nilai a sama dengan nilai b. penulisan operatornya = =
  • != adalah operator yang digunakan untuk membandingkan apakah nilai a tidak sama dengan nilai b. penulisan operatornya ! =
  • >= adalah operator yang digunakan untuk membandingkan apakah nilai a lebih besar dari sama dengan nilai b. penulisan operatornya > =
  • <= adalah operator yang digunakan untuk membandingkan apakah nilai a lebih kecil dari sama dengan nilai b. penulisan operatornya < =

Operator Logika#

Operator logika digunakan untuk menggabungkan beberapa kondisi atau ekspresi logika.

int a = 10;
int b = 5;
// operator use case && || ! !=
int c = (a > b) && (a < 20); // c = true
int d = (a < b) || (a > 20); // d = false
int e = !(a == b); // e = true
-----------------------------
/*Contoh lainnya:*/
int f = (a > b) || (a < 20) && (a != b); // f = true
int g = (a < b) && (a > 20) || (a == b); // g = false
int h = !(a > b) && !(a < 20); // h = true
int i = !(a < b) || !(a > 20); // i = false
-----------------------------
int j = (a > b) && (a < 20) || (a != b); // j = true
int k = (a < b) && (a > 20) || (a == b); // k = true
int l = !(a > b) && !(a < 20) || (a != b); // l = false
int m = !(a < b) || !(a > 20) && (a == b); // m = true
TIP
  • && adalah operator logika AND yang digunakan untuk menggabungkan dua ekspresi logika, dimana kedua ekspresi dalam () harus bernilai true agar hasilnya true.
  • || adalah operator logika OR yang digunakan untuk menggabungkan dua ekspresi logika, dimana minimal salah satu ekspresi harus bernilai true agar hasilnya true.
  • ! adalah operator logika NOT yang digunakan untuk menegasikan nilai boolean, yaitu jika nilai true maka akan menjadi false, dan sebaliknya.

Silahkan coba satu persatu contoh di atas untuk tau cara kerjanya
terserah mau experiment di text editor sendiri atau online compiler di bawah ini 👇
online compiler
gif mampus mulai pusing tuh 😹

Tambahan konsep operator lainnya#

Operator Penugasan#

Operator ini digunakan untuk memberikan nilai ke sebuah variabel. Simbol dasar adalah = .

  • = : Menugaskan nilai di sebelah kanan ke variabel di sebelah kiri.
  • += : Menugaskan hasil penjumlahan (variabel = variabel + nilai).
  • -= : Menugaskan hasil pengurangan (variabel = variabel - nilai).
  • *= : Menugaskan hasil perkalian (variabel = variabel * nilai).
  • /= : Menugaskan hasil pembagian (variabel = variabel / nilai).
  • %= : Menugaskan sisa hasil bagi (variabel = variabel % nilai).
Contoh penerapannya:
#include <stdio.h>
int main() {
int x = 10; // Operator penugasan '='
printf("--- Operator Penugasan ---\n");
printf("Nilai awal x: %d\n", x);
x += 5; // x = x + 5; (10 + 5 = 15)
printf("x setelah x += 5: %d\n", x);
x -= 3; // x = x - 3; (15 - 3 = 12)
printf("x setelah x -= 3: %d\n", x);
x *= 2; // x = x * 2; (12 * 2 = 24)
printf("x setelah x *= 2: %d\n", x);
x /= 4; // x = x / 4; (24 / 4 = 6)
printf("x setelah x /= 4: %d\n", x);
x %= 3; // x = x % 3; (6 % 3 = 0)
printf("x setelah x %= 3: %d\n", x);
return 0;
}

Operator unary#

Operator ini hanya memerlukan satu nilai (operand(disebut nilai untuk operasi)) untuk bejalan.

  • + : Menunjukkan nilai positif (jarang digunakan karena default-nya positif).
  • - : Mengubah tanda nilai menjadi negatif.
  • ++ : Menambah nilai variabel sebanyak 1. (Bisa ++variabel atau variabel++)
  • -- : Mengurangi nilai variabel sebanyak 1. (Bisa —variabel atau variabel—)
  • ! : Operator logika NOT. Membalikkan nilai boolean (true menjadi false, false menjadi true).
  • & : Mengambil alamat memori dari sebuah variabel (Operator Referensi).
  • * : Mengakses nilai pada alamat memori yang ditunjuk (Operator Dereferensi/Pointer).
  • sizeof : Mengembalikan ukuran (dalam byte) dari tipe data atau variabel.
Contoh penggunaannya:
#include <stdio.h>
int main() {
int a = 5;
int b = 10;
int c = -7;
int ukuran_int;
int is_true = 1; // 1 dianggap true, 0 dianggap false
printf("--- Operator Unary ---\n");
printf("Nilai positif: %d\n", +a); // +a = 5
printf("Nilai negatif: %d\n", -c); // -c = 7
// Increment/Decrement
printf("Nilai a awal: %d\n", a); // 5
printf("a++ (post-increment): %d\n", a++); // Akan mencetak 5, baru a jadi 6
printf("Nilai a sekarang: %d\n", a); // 6
printf("Nilai b awal: %d\n", b); // 10
printf("++b (pre-increment): %d\n", ++b); // b jadi 11, baru dicetak 11
printf("Nilai a awal (lagi): %d\n", a); // 6
printf("a-- (post-decrement): %d\n", a--); // Akan mencetak 6, baru a jadi 5
printf("Nilai a sekarang: %d\n", a); // 5
printf("Nilai b awal (lagi): %d\n", b); // 11
printf("--b (pre-decrement): %d\n", --b); // b jadi 10, baru dicetak 10
// Logika NOT
printf("is_true awal: %d\n", is_true); // 1 (true)
printf("!is_true (NOT): %d\n", !is_true); // 0 (false)
// sizeof
ukuran_int = sizeof(int); // Mengembalikan ukuran tipe data int dalam byte
printf("Ukuran int: %d bytes\n", ukuran_int);
// Operator & (alamat) dan * (nilai di alamat)
int var = 100;
int *ptr; // Deklarasi pointer
ptr = &var; // &var mengambil alamat memori dari 'var'
printf("Alamat memori var: %p\n", (void*)ptr); // %p untuk alamat
printf("Nilai yang ditunjuk ptr (*ptr): %d\n", *ptr); // *ptr mengakses nilai di alamat yang ditunjuk ptr
return 0;
}

Operator Ternary (kondisional)#

Ini adalah operator yang ringkas untuk ekspresi if-else sederhana.
Operator ini unik karena memerlukan tiga operand dan digunakan untuk keputusan singkat.
? : : Disebut juga operator kondisional. Sintaksnya: kondisi ? nilai_jika_benar : nilai_jika_salah;.

contoh penggunaannya:
#include <stdio.h>
int main() {
int nilai = 75;
char *status; // Untuk menyimpan string
printf("--- Operator Ternary ---\n");
// Jika nilai >= 60, status adalah "Lulus", jika tidak "Gagal"
status = (nilai >= 60) ? "Lulus" : "Gagal";
printf("Nilai Anda: %d, Status: %s\n", nilai, status);
nilai = 50;
status = (nilai >= 60) ? "Lulus" : "Gagal";
printf("Nilai Anda: %d, Status: %s\n", nilai, status);
return 0;
}

Silahkan coba satu persatu contoh di atas untuk tau cara kerjanya
terserah mau experiment di text editor sendiri atau online compiler di bawah ini 👇
online compiler
gif


Struktur Kontrol#

Struktur kontrol itu ibaratnya kayak aturan bermain dalam program kita. Mereka membantu program untuk mengambil keputusan dan melakukan tindakan yang berbeda tergantung pada kondisi tertentu. Tanpa struktur kontrol, program kita hanya akan berjalan lurus dari atas ke bawah tanpa bisa “berpikir” atau “memilih”.
Ada dua jenis utama struktur kontrol yang akan kita bahas:

  1. Percabangan (Conditional Statements): Ini seperti saat kita di persimpangan jalan dan harus memilih belok kanan, kiri, atau lurus. Program akan mengecek suatu kondisi, dan jika kondisi itu benar, ia akan melakukan satu hal; jika salah, ia akan melakukan hal lain.

  2. Perulangan (Looping Statements): Ini seperti saat kita harus melakukan hal yang sama berkali-kali, misalnya suatu kondisi dimana harus mengocok kartu sebanyak 52 kali. Program akan mengulang blok kode tertentu selama kondisi tertentu masih terpenuhi. (Kita fokus pada percabangan dulu ya!)

Percabangan#

A. if-else: Si Penentu Pilihan “Ya atau Tidak”#

if-else adalah percabangan yang paling sederhana. Ia memeriksa apakah suatu kondisi benar atau tidak. Jika benar, ia akan menjalankan perintah di dalamnya. Jika tidak, ia akan melompati perintah tersebut dan melanjutkan ke perintah setelahnya dalam if-else.
Contohnya berikut:

#include <stdio.h>
int main() {
int usia;
printf("Masukkan usia Anda: ");
scanf("%d", &usia); // Membaca input usia dari pengguna
if (usia >= 18) { // Kondisi: apakah usia lebih dari atau sama dengan 18?
printf("Anda boleh menonton film dewasa. Selamat menikmati! \n");
} else if (usia >= 12) {
printf("Anda boleh menonton film anak-anak. Selamat menikmati! \n");
}
else {
printf("Maaf, Anda belum cukup umur untuk menonton film dewasa. \n");
}
return 0; // Menandakan program berakhir dengan sukses
}
TIP
  • Didalam blok if ataupun else memerlukan statement kondisi ( //kondisi ) dan blok kode jika kondisi terpenuhi dalam { //kode }.
  • if artinya jika kondisi ini blablabla…
  • else if artinya jika selain itu kondisi ini blablabla…
  • else artinya kalau seluruh kondisi di atas tidak terpenuhi maka ia akan aktif (kode pengecualian).

B. Switch Case: Si Pemilih Banyak Opsi#

switch-case itu seperti menu di restoran atau tombol pilihan di mesin minuman otomatis. Anda punya banyak pilihan bisa memilihnya sendiri berdasarkan keinginan, dan Anda memilih salah satunya. Daripada harus bertanya pada pengkondisian “Apakah ini A? Kalau tidak, apakah ini B? Kalau tidak, apakah ini C?” berulang-ulang (yang bisa jadi panjang dengan if-else if-else if), switch-case Bisa membuat kode lebih rapi dan mudah dibaca ketika Anda memiliki banyak opsi untuk satu variabel.
Contohnya berikut:

#include <stdio.h>
int main() {
int hari;
printf("Masukkan angka hari (1-7): ");
scanf("%d", &hari);
switch (hari) { // Kita akan cek nilai variabel 'hari'
case 1:
printf("Hari ini adalah Minggu. \n");
break;
case 2:
printf("Hari ini adalah Senin. \n");
break;
case 3:
printf("Hari ini adalah Selasa. \n");
break;
case 4:
printf("Hari ini adalah Rabu. \n");
break;
case 5:
printf("Hari ini adalah Kamis. \n");
break;
case 6:
printf("Hari ini adalah Jumat. \n");
break;
case 7:
printf("Hari ini adalah Sabtu. \n");
break;
default: // Jika angka yang dimasukkan tidak 1-7
printf("Angka yang Anda masukkan tidak valid untuk hari. \n");
break;
}
return 0;
}
PENJELASAN
  • Pada contoh diatas, switch (hari) akan memeriksa nilai dari variabel hari. Setiap case akan memeriksa apakah nilai hari sama dengan angka yang di dalamnya. Jika ya, ia akan menjalankan perintah di dalamnya. Jika tidak, ia akan melompati perintah tersebut dan melanjutkan ke perintah setelahnya.
  • default adalah perintah yang akan dijalankan jika tidak ada case yang sesuai dengan nilai hari (mirip kayak blok else di if-else).

  • switch(//variabel) akan memeriksa apakah nilai //variabel sama dengan nilai case yang di dalam {// case-nya}.
  • break adalah perintah yang akan menghentikan perulangan atau percabangan. Jika tidak ada break, ia akan menjalankan perintah di bawahnya, meskipun kondisi tidak terpenuhi — Akan sangat berbahaya kalau anda lupa memberi break ~ jadi wajib diberi untuk setiap case yaa!.
  • KESIMPULAN: Switch berbeda dengan if-else karena switch membutuhkan input untuk pengecekan nilainya, sedangan if else tidak membutuhkan input setidaknya mampu melakukan pengecekan nilai langsung di dalam sistem yang sudah diberikan dalam program.
TIP

Kapan Menggunakan if-else dan Kapan switch-case?
Gunakan if-else ketika:

  • Anda punya dua kemungkinan (benar/salah, ya/tidak).
  • Anda perlu memeriksa rentang nilai (misalnya, usia >= 18 atau nilai > 70 && nilai <= 100).
  • Anda punya kondisi yang kompleks dengan operator logika (&& (AND), || (OR), ! (NOT)).

Gunakan switch-case ketika:

  • Anda ingin kode lebih rapi dan mudah dibaca dibandingkan banyak if-else if-else.
  • Anda punya satu variabel yang bisa memiliki banyak nilai diskrit (nilai yang jelas dan terpisah, bukan rentang), dan Anda ingin melakukan tindakan berbeda untuk setiap nilai.

(sedikit info: Nilai diskrit adalah nilai-nilai yang terpisah dan dapat dihitung, biasanya dalam bentuk bilangan bulat, yang tidak dapat dipecah menjadi nilai yang lebih kecil atau desimal. Contohnya adalah jumlah siswa dalam satu kelas atau jumlah mobil di tempat parkir. Sebaliknya, nilai kontinu adalah nilai yang dapat diukur dan dapat memiliki nilai di antara titik-titik yang terukur, seperti tinggi badan atau suhu. yah anda bisa cari tau sendiri di pelajaran matematika).


gif

Perulangan#

Bayangkan Anda memiliki tugas yang harus diulang berkali-kali. Misalnya, menulis suatu kalimat sebanyak 100 kali.. Melakukannya secara manual pasti sangat melelahkan, bukan?

Nah, dalam dunia pemrograman, kita punya perulangan (atau dalam bahasa Inggris disebut loop) yang bertugas persis seperti itu: membuat komputer melakukan suatu pekerjaan berulang kali secara otomatis.

Analogi sederhana-nya#

Anggap saja perulangan itu seperti mesin fotokopi otomatis. Anda cukup memberikan satu dokumen (program yang ingin diulang) dan memberitahu berapa banyak salinan yang Anda inginkan (berapa kali perulangan harus berjalan). Mesin fotokopi akan melakukannya tanpa Anda perlu menekan tombol satu per satu.

Jenis-jenis Perulangan di Bahasa C#

Dalam bahasa C, ada beberapa “mesin fotokopi” yang bisa kita gunakan, yaitu:

  • A. for loop (Perulangan “Untuk”): Ini seperti Anda sudah tahu pasti berapa banyak salinan yang Anda inginkan.
    Contoh: “Untuk 10 kali, cetak tulisan ‘Halo!’”
    Sangat cocok jika Anda sudah tahu dari awal berapa kali tugas harus diulang.

  • B. while loop (Perulangan “Selama”): Ini seperti Anda terus menyalin dokumen selama masih ada kertas di baki. Anda tidak tahu pasti berapa banyak salinan yang akan dibuat, tapi Anda tahu bahwa perulangan akan berhenti jika syaratnya tidak terpenuhi.
    Contoh: “Selama persediaan barang masih ada, masukkan ke dalam keranjang.”
    Sangat cocok jika perulangan bergantung pada suatu kondisi yang bisa berubah.

  • C. do-while loop (Perulangan “Lakukan Selama”): Ini mirip dengan while loop, tapi ada satu perbedaan penting: tugas pasti akan dilakukan minimal satu kali, baru kemudian dicek kondisinya.
    Contoh: “Lakukan proses belanja, lalu cek apakah Anda ingin belanja lagi. Jika ya, ulangi.”
    Cocok jika Anda ingin memastikan bahwa kode di dalam perulangan dijalankan setidaknya sekali.

Contoh dari masing masing tiga perulangan diatas#

A. For loop (Perulangan “Untuk”)#

Ini cocok ketika kita sudah tahu pasti berapa kali kita ingin mengulang sesuatu.

Skenario: Kita ingin mencetak angka dari 1 sampai 3.

Logika: “Untuk angka i yang dimulai dari 1, selama i masih kurang dari atau sama dengan 3, dan i bertambah 1 setiap putaran, cetak nilai i.”

#include <stdio.h> // Untuk fungsi printf
int main() {
printf("--- Demonstrasi 'for' Loop ---\n");
// 'i' adalah penghitung kita
// Dimulai dari 1; berhenti saat i > 3; i bertambah 1 setiap putaran
for (int i = 1; i <= 3; i++) {
printf("Angka: %d\n", i); // Cetak nilai 'i' saat ini
}
printf("Selesai 'for' Loop!\n");
return 0;
}
Output Program
--- Demonstrasi 'for' Loop ---
Angka: 1
Angka: 2
Angka: 3
Selesai 'for' Loop!

B. while Loop (Perulangan “Selama”)#

Ini cocok ketika kita ingin mengulang sesuatu selama suatu kondisi masih benar. Kita mungkin tidak tahu berapa kali tepatnya akan berulang.

Skenario: Kita ingin mencetak angka mulai dari 1, tapi hanya selama angka itu masih kurang dari atau sama dengan 3.

Logika: “Selama angka a (yang dimulai dari 1) masih kurang dari atau sama dengan 3, cetak angka a, lalu tambahkan a.”

#include <stdio.h> // Untuk fungsi printf
int main() {
printf("\n--- Demonstrasi 'while' Loop ---\n");
int a = 1; // Inisialisasi penghitung 'a'
// Perulangan akan berjalan selama 'a' kurang dari atau sama dengan 3
while (a <= 3) {
printf("Angka: %d\n", a); // Cetak nilai 'a'
a++; // Penting: Jangan lupa ubah nilai 'a' agar kondisi suatu saat salah (biar tidak looping terus tanpa henti)
}
printf("Selesai 'while' Loop!\n");
return 0;
}
Output Program
--- Demonstrasi 'while' Loop ---
Angka: 1
Angka: 2
Angka: 3
Selesai 'while' Loop!

C. do-while Loop (Perulangan “Lakukan… Selama”)#

Ini mirip while loop, tapi aksi di dalamnya PASTI akan dijalankan setidaknya SATU KALI, baru kemudian kondisinya dicek.

Skenario: Kita ingin mencetak angka, dan kita menjamin setidaknya satu angka akan tercetak, meskipun kondisi awalnya mungkin sudah salah.

Logika: “Lakukan (cetak angka b), lalu tambahkan b. Ulangi proses ini selama b masih kurang dari atau sama dengan 3.”

#include <stdio.h> // Untuk fungsi printf
int main() {
printf("\n--- Demonstrasi 'do-while' Loop ---\n");
int b = 1; // Inisialisasi penghitung 'b'
do {
printf("Angka: %d\n", b); // Cetak nilai 'b'
b++; // Tambahkan 'b'
} while (b <= 3); // Cek kondisi SETELAH melakukan aksi
printf("Selesai 'do-while' Loop!\n");
// Contoh menarik do-while:
// Bagaimana jika kondisi awalnya sudah salah?
printf("\n--- Contoh 'do-while' jika kondisi awal salah ---\n");
int c = 5; // Nilai 'c' sudah lebih dari 3
do {
printf("Ini PASTI tercetak setidaknya sekali: %d\n", c);
c++;
} while (c <= 3); // Kondisi 'c <= 3' (5 <= 3) adalah false, tapi tetap dijalankan sekali!
printf("Selesai 'do-while' Loop (kondisi salah)!\n");
return 0;
}
Output Program
--- Demonstrasi 'do-while' Loop ---
Angka: 1
Angka: 2
Angka: 3
Selesai 'do-while' Loop!
--- Contoh 'do-while' jika kondisi awal salah ---
Ini PASTI tercetak setidaknya sekali: 5
Selesai 'do-while' Loop (kondisi salah)!

Anda bisa lihat bahwa meskipun dengan int c = 5; di contoh do-while kedua (kondisi c <= 3 sudah salah dari awal), baris printf tetap dieksekusi sekali. Itulah perbedaan utamanya!
Perbedaan utama antara while dan do-while:

  • while: Perulangan dieksekusi selama kondisi benar.
  • do-while: Perulangan dieksekusi setidaknya sekali, lalu dicek kondisi.

Study Case: contoh implementasi gabungan dari materi diatas#

Oke cukup sampai sini dulu sebagai istirahat, mari praktikkan apa yang sudah dipelajari dengan membuat program sederhana dari berbagai konsep yang sudah dipelajari seperti sintaksis, tipe data dan variabel, konstanta, input output, operator dan struktur kontrol. restauran-foods

restaurant menu
#include <stdio.h> // Diperlukan untuk fungsi input/output seperti printf dan scanf
#include <string.h> // Diperlukan untuk fungsi string seperti strcmp
// Konstanta untuk harga menu
#define HARGA_NASI_GORENG 15000
#define HARGA_MIE_AYAM 12000
103 collapsed lines
#define HARGA_ES_TEH 5000
#define PAJAK_PERSEN 10 // Pajak 10%
int main() {
// Deklarasi variabel
int pilihanMenu;
int kuantitasNasiGoreng = 0;
int kuantitasMieAyam = 0;
int kuantitasEsTeh = 0;
int totalHargaMakanan = 0;
int totalHargaMinuman = 0;
int totalHargaKeseluruhan = 0;
float pajakAmount = 0.0;
float hargaBersih = 0.0;
char lanjutPesan; // Untuk konfirmasi melanjutkan pemesanan
printf("=======================================\n");
printf(" Selamat Datang di Restoran Kami!\n");
printf("=======================================\n");
do {
// Menampilkan menu
printf("\n--- Menu Hari Ini ---\n");
printf("1. Nasi Goreng (Rp %d)\n", HARGA_NASI_GORENG);
printf("2. Mie Ayam (Rp %d)\n", HARGA_MIE_AYAM);
printf("3. Es Teh (Rp %d)\n", HARGA_ES_TEH);
printf("4. Selesai Memesan\n");
printf("-----------------------\n");
printf("Masukkan pilihan Anda: ");
scanf("%d", &pilihanMenu); // Menggunakan operator aritmatika dan input
// Menggunakan operator relasional dan logika untuk validasi pilihan
if (pilihanMenu >= 1 && pilihanMenu <= 3) {
int kuantitas;
printf("Masukkan kuantitas: ");
scanf("%d", &kuantitas);
if (kuantitas > 0) { // Operator relasional
switch (pilihanMenu) {
case 1:
kuantitasNasiGoreng += kuantitas; // Operator aritmatika
totalHargaMakanan += kuantitas * HARGA_NASI_GORENG;
printf("%d Nasi Goreng ditambahkan.\n", kuantitas);
break;
case 2:
kuantitasMieAyam += kuantitas;
totalHargaMakanan += kuantitas * HARGA_MIE_AYAM;
printf("%d Mie Ayam ditambahkan.\n", kuantitas);
break;
case 3:
kuantitasEsTeh += kuantitas;
totalHargaMinuman += kuantitas * HARGA_ES_TEH;
printf("%d Es Teh ditambahkan.\n", kuantitas);
break;
}
} else {
printf("Kuantitas harus lebih dari 0.\n");
}
} else if (pilihanMenu == 4) {
printf("Pesanan Anda akan diproses.\n");
break; // Keluar dari loop do-while
} else {
printf("Pilihan tidak valid. Silakan coba lagi.\n");
}
// Konfirmasi untuk melanjutkan pemesanan
printf("\nApakah Anda ingin memesan lagi? (y/n): ");
scanf(" %c", &lanjutPesan); // Perhatikan spasi sebelum %c untuk membersihkan buffer
} while (lanjutPesan == 'y' || lanjutPesan == 'Y'); // Operator logika
// Menghitung total dan pajak
totalHargaKeseluruhan = totalHargaMakanan + totalHargaMinuman; // Operator aritmatika
pajakAmount = (float)totalHargaKeseluruhan * PAJAK_PERSEN / 100; // Type casting dan operator aritmatika
hargaBersih = totalHargaKeseluruhan + pajakAmount;
// Menampilkan struk pembayaran
printf("\n\n=============== Struk Pembayaran ===============\n");
printf("Item Kuantitas Harga\n");
printf("-----------------------------------------------\n");
if (kuantitasNasiGoreng > 0) { // Operator relasional
printf("Nasi Goreng %d Rp %d\n", kuantitasNasiGoreng, kuantitasNasiGoreng * HARGA_NASI_GORENG);
}
if (kuantitasMieAyam > 0) {
printf("Mie Ayam %d Rp %d\n", kuantitasMieAyam, kuantitasMieAyam * HARGA_MIE_AYAM);
}
if (kuantitasEsTeh > 0) {
printf("Es Teh %d Rp %d\n", kuantitasEsTeh, kuantitasEsTeh * HARGA_ES_TEH);
}
printf("-----------------------------------------------\n");
printf("Total Harga Makanan : Rp %d\n", totalHargaMakanan);
printf("Total Harga Minuman : Rp %d\n", totalHargaMinuman);
printf("Total Keseluruhan : Rp %d\n", totalHargaKeseluruhan);
printf("Pajak (%d%%) : Rp %.0f\n", PAJAK_PERSEN, pajakAmount);
printf("Total Bayar : Rp %.0f\n", hargaBersih);
printf("===============================================\n");
printf(" Terima Kasih Atas Kunjungan Anda!\n");
printf("===============================================\n");
return 0; // Menandakan program berakhir dengan sukses
}

in English context but similary code like above ☝️👇

laptop Store
#include <stdio.h> // Required for input/output functions like printf and scanf
#include <string.h> // Not strictly necessary for this revised version but often useful for string manipulation
// Constants for product prices
#define PRICE_LAPTOP 1200
#define PRICE_SMARTPHONE 800
103 collapsed lines
#define PRICE_HEADPHONES 150
#define SALES_TAX_PERCENT 8 // 8% sales tax
int main() {
// Variable declarations
int productChoice;
int laptopQuantity = 0;
int smartphoneQuantity = 0;
int headphonesQuantity = 0;
int totalGadgetCost = 0;
int totalAccessoryCost = 0;
int grandTotalBeforeTax = 0;
float salesTaxAmount = 0.0;
float finalAmountDue = 0.0;
char continueShopping; // For confirming whether to continue adding items
printf("==========================================\n");
printf(" Welcome to ElectroMart Online!\n");
printf("==========================================\n");
do {
// Displaying the product catalog
printf("\n--- Product Catalog ---\n");
printf("1. Laptop ($ %d)\n", PRICE_LAPTOP);
printf("2. Smartphone ($ %d)\n", PRICE_SMARTPHONE);
printf("3. Headphones ($ %d)\n", PRICE_HEADPHONES);
printf("4. Proceed to Checkout\n");
printf("-------------------------\n");
printf("Enter your choice: ");
scanf("%d", &productChoice); // Uses arithmetic operators and input
// Using relational and logical operators for choice validation
if (productChoice >= 1 && productChoice <= 3) {
int quantity;
printf("Enter quantity: ");
scanf("%d", &quantity);
if (quantity > 0) { // Relational operator
switch (productChoice) {
case 1:
laptopQuantity += quantity; // Arithmetic operator
totalGadgetCost += quantity * PRICE_LAPTOP;
printf("%d Laptop(s) added to cart.\n", quantity);
break;
case 2:
smartphoneQuantity += quantity;
totalGadgetCost += quantity * PRICE_SMARTPHONE;
printf("%d Smartphone(s) added to cart.\n", quantity);
break;
case 3:
headphonesQuantity += quantity;
totalAccessoryCost += quantity * PRICE_HEADPHONES;
printf("%d Headphone(s) added to cart.\n", quantity);
break;
}
} else {
printf("Quantity must be greater than 0.\n");
}
} else if (productChoice == 4) {
printf("Processing your order...\n");
break; // Exit the do-while loop
} else {
printf("Invalid choice. Please try again.\n");
}
// Confirmation to continue shopping
printf("\nDo you want to add more items? (y/n): ");
scanf(" %c", &continueShopping); // Note the space before %c to clear the buffer
} while (continueShopping == 'y' || continueShopping == 'Y'); // Logical operator
// Calculating total and sales tax
grandTotalBeforeTax = totalGadgetCost + totalAccessoryCost; // Arithmetic operator
salesTaxAmount = (float)grandTotalBeforeTax * SALES_TAX_PERCENT / 100; // Type casting and arithmetic operators
finalAmountDue = grandTotalBeforeTax + salesTaxAmount;
// Displaying the checkout summary
printf("\n\n=============== Checkout Summary ===============\n");
printf("Item Quantity Price\n");
printf("-----------------------------------------------\n");
if (laptopQuantity > 0) { // Relational operator
printf("Laptop %d $ %d\n", laptopQuantity, laptopQuantity * PRICE_LAPTOP);
}
if (smartphoneQuantity > 0) {
printf("Smartphone %d $ %d\n", smartphoneQuantity, smartphoneQuantity * PRICE_SMARTPHONE);
}
if (headphonesQuantity > 0) {
printf("Headphones %d $ %d\n", headphonesQuantity, headphonesQuantity * PRICE_HEADPHONES);
}
printf("-----------------------------------------------\n");
printf("Total Gadget Cost : $ %d\n", totalGadgetCost);
printf("Total Accessory Cost : $ %d\n", totalAccessoryCost);
printf("Subtotal : $ %d\n", grandTotalBeforeTax);
printf("Sales Tax (%d%%) : $ %.2f\n", SALES_TAX_PERCENT, salesTaxAmount);
printf("Final Amount Due : $ %.2f\n", finalAmountDue);
printf("===============================================\n");
printf(" Thank You for Shopping with Us!\n");
printf("===============================================\n");
return 0; // Indicates successful program termination
}

Demonstrasi Story game Dengan bahasa C (Terminal output)#

img

Story Game Horror
#include <stdio.h>
#include <stdlib.h> // Untuk system("cls") atau system("clear")
#include <string.h> // Untuk strlen, strcspn
#include <time.h> // Untuk delay (meskipun tidak presisi, hanya simulasi)
// --- Definisi Karakter dan Status ---
// Menggunakan enum untuk ID karakter dialog agar lebih mudah dibaca
typedef enum {
NARATOR, // Narator cerita
434 collapsed lines
PROTAGONIS, // Protagonis (pemain)
RIO, // Teman 1
SISKA // Teman 2
} KarakterID;
// Struktur untuk menyimpan status protagonis
typedef struct {
int kewarasan; // Tingkat kewarasan (semakin rendah, semakin buruk)
int obor_dinyalakan; // Flag: 0 = belum, 1 = sudah
int peta_ditemukan; // Flag: 0 = belum, 1 = sudah
int jimat_ditemukan; // Flag: 0 = belum, 1 = sudah
int rio_selamat; // Flag: 0 = hilang/mati, 1 = selamat
int siska_selamat; // Flag: 0 = hilang/mati, 1 = selamat
} StatusPemain;
// --- Variabel Global ---
// Inisialisasi status pemain di awal game
StatusPemain status_pemain = {100, 0, 0, 0, 1, 1}; // Kewarasan awal 100, item belum ada, teman selamat
char nama_pemain[50]; // Nama yang akan diinput pengguna
// --- Fungsi Utilitas ---
// Fungsi untuk menjeda tampilan dan menunggu input pengguna
void tekan_enter_untuk_lanjut() {
printf("\n[Tekan ENTER untuk melanjutkan...]\n");
int c;
while ((c = getchar()) != '\n' && c != EOF); // Membersihkan buffer input
getchar(); // Menunggu ENTER
}
// Fungsi untuk menjeda tampilan sebentar (simulasi delay)
// abaikan saja karna fungsi ini template saya dapat dari internet
void delay(int milliseconds) {
long pause;
clock_t now,then;
pause = milliseconds*(CLOCKS_PER_SEC/1000);
now = then = clock();
while( (now-then) < pause )
now = clock();
}
// Fungsi untuk membersihkan layar konsol
void bersihkan_layar() {
#ifdef _WIN32
system("cls"); // Untuk Windows
#else
system("clear"); // Untuk Linux/macOS
#endif
}
// Fungsi untuk menampilkan dialog dari karakter tertentu
void tampilkan_dialog(KarakterID karakter, const char *dialog) {
bersihkan_layar();
printf("----------------------------------------\n");
switch (karakter) {
case PROTAGONIS:
printf(">> %s: %s\n", nama_pemain, dialog);
break;
case RIO:
printf(">> Rio: %s\n", dialog);
break;
case SISKA:
printf(">> Siska: %s\n", dialog);
break;
default: // NARATOR
printf(">> NARATOR: %s\n", dialog);
break;
}
printf("----------------------------------------\n");
tekan_enter_untuk_lanjut();
}
// Fungsi untuk menampilkan pilihan dan mendapatkan input pengguna
int tampilkan_pilihan(const char *narasi, const char *pilihan1, const char *pilihan2, const char *pilihan3) {
int pilihan;
char input_buffer[10];
bersihkan_layar();
printf("----------------------------------------\n");
printf(">> NARATOR: %s\n", narasi);
printf("----------------------------------------\n");
printf("Pilihan Anda:\n");
printf("1. %s\n", pilihan1);
if (pilihan2) printf("2. %s\n", pilihan2);
if (pilihan3) printf("3. %s\n", pilihan3);
printf("----------------------------------------\n");
printf("Masukkan nomor pilihan Anda: ");
while (1) {
if (fgets(input_buffer, sizeof(input_buffer), stdin) != NULL) {
if (sscanf(input_buffer, "%d", &pilihan) == 1) {
input_buffer[strcspn(input_buffer, "\n")] = 0;
if ((pilihan == 1 && pilihan1) ||
(pilihan == 2 && pilihan2) ||
(pilihan == 3 && pilihan3)) {
break;
}
}
}
printf("Pilihan tidak valid. Masukkan nomor yang benar: ");
}
return pilihan;
}
// --- Segmen Cerita (Fungsi-fungsi untuk setiap bagian cerita) ---
void prolog() {
bersihkan_layar();
printf("----------------------------------------\n");
printf("SELAMAT DATANG DI 'TEROR PUNCAK ARWAH'\n");
printf("----------------------------------------\n");
printf("Sebuah kisah horor tentang petualangan camping yang salah.\n");
printf("Masukkan nama panggilanmu (sebagai protagonis cerita) : ");
fgets(nama_pemain, sizeof(nama_pemain), stdin);
nama_pemain[strcspn(nama_pemain, "\n")] = 0;
// kumpulan dialog-prolog
tampilkan_dialog(NARATOR, "Di suatu hari yang cerah, aku dan teman teman berkumpul di posko ronda kampung awi \n untuk mempersiapkan perlengkapan sesuai yang direncanakan untuk hari H Camping nanti.");
tampilkan_dialog(NARATOR, "bareng dua temen gue, Rio sama Siska, lagi siap-siap buat camping di Gunung Salak.");
tampilkan_dialog(RIO, "Woy, Kalian!" );
tampilkan_dialog(RIO, "udah siap belum? Jangan sampai ada yang ketinggalan, apalagi nyali lo!");
tampilkan_dialog(SISKA, "Rio, jangan gitu dong! " );
tampilkan_dialog(SISKA, "Udah, santai aja. Ini kan cuma camping biasa.");
tampilkan_dialog(NARATOR, "Padahal, Gunung Salak ini terkenal angker. Ada cerita tentang pendaki yang hilang tanpa jejak, atau ketemu makhluk aneh.");
tampilkan_dialog(NARATOR, "Tapi, kami bertiga emang bandel. Penasaran banget sama mitos 'Puncak Arwah' yang katanya nggak boleh didaki sembarangan.");
tampilkan_dialog(NARATOR, "Malam itu, kami mulai perjalanan...");
}
void chapter1_perjalanan_dan_kabut() {
char buffer[256];
tampilkan_dialog(NARATOR, "Kami mulai mendaki. Udara makin dingin, pepohonan makin rapat. Suara serangga malam bikin suasana makin sunyi.");
tampilkan_dialog(RIO, "Gila, sepi banget ya. Kok merinding gini sih gue?");
tampilkan_dialog(SISKA, "Perasaan lo aja kali, Rio. Jangan mikir yang aneh-aneh.");
tampilkan_dialog(NARATOR, "Nggak lama, kabut tebal mulai turun. Cepat banget, sampai jarak pandang cuma beberapa meter.");
int pilihan = tampilkan_pilihan(
"Kabut makin pekat. Apa yang harus dilakukan?",
"Lanjut jalan, takut kemalaman",
"Cari tempat berteduh sementara",
"Coba nyalain obor (kalau ada)"
);
if (pilihan == 1) {
tampilkan_dialog(NARATOR, "Kami nekat lanjut jalan. Tiba-tiba, Rio teriak!");
tampilkan_dialog(RIO, "Aduh! Ada yang nyenggol gue!");
tampilkan_dialog(NARATOR, "Nggak ada siapa-siapa di sekitar kami. Cuma kabut. Kewarasan lo sedikit goyah.");
status_pemain.kewarasan -= 10;
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else if (pilihan == 2) {
tampilkan_dialog(NARATOR, "Kami berteduh di bawah pohon besar. Suara-suara aneh mulai terdengar dari dalam kabut. Kayak bisikan, tapi nggak jelas.");
tampilkan_dialog(SISKA, "Denger nggak sih? Ada suara apa itu?");
tampilkan_dialog(NARATOR, "Kewarasan lo sedikit goyah karena suasana yang mencekam.");
status_pemain.kewarasan -= 7;
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else { // pilihan == 3
tampilkan_dialog(NARATOR, "Lo coba nyalain obor yang lo bawa. Cahayanya sedikit menembus kabut.");
if (status_pemain.obor_dinyalakan == 0) { // Hanya nyalakan obor sekali
status_pemain.obor_dinyalakan = 1;
tampilkan_dialog(NARATOR, "Obor berhasil dinyalakan. Sedikit menenangkan, tapi kabutnya tebal banget.");
status_pemain.kewarasan -= 3; // Kurang sedikit karena masih takut
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else {
tampilkan_dialog(NARATOR, "Obor lo udah nyala. Tapi kabutnya tetep bikin merinding.");
status_pemain.kewarasan -= 5;
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
}
}
tampilkan_dialog(NARATOR, "Akhirnya, kami sampai di pos 1. Malam pertama di gunung angker ini baru saja dimulai.");
}
void chapter2_malam_pertama_di_pos() {
char buffer[256];
tampilkan_dialog(NARATOR, "Kami buru-buru pasang tenda dan nyalain api unggun. Cahaya api sedikit mengusir hawa dingin dan rasa takut.");
tampilkan_dialog(SISKA, "Fiuh, akhirnya sampai juga. Gue udah capek banget.");
tampilkan_dialog(RIO, "Malam ini kita jaga-jaga ya. Jangan sampai tidur pulas semua.");
tampilkan_dialog(NARATOR, "Saat kami lagi ngobrol, tiba-tiba ada suara ranting patah dari arah kegelapan hutan.");
int pilihan = tampilkan_pilihan(
"Suara itu makin dekat. Apa yang akan Anda lakukan?",
"Cek sumber suara dengan obor",
"Tetap di tenda dan pura-pura nggak denger",
"Terbangun dan teriak minta tolong"
);
if (pilihan == 1) {
if (status_pemain.obor_dinyalakan) {
tampilkan_dialog(NARATOR, "Lo bawa obor, perlahan mendekati sumber suara. Tiba-tiba, seekor monyet besar melompat dari balik semak!");
tampilkan_dialog(NARATOR, "Lo kaget, tapi cuma monyet. Kewarasan lo aman, tapi jantung deg-degan.");
// Jumpscare ringan
printf("\n!!! JUMPSCARE !!!\n"); delay(500);
tampilkan_dialog(NARATOR, "Monyet itu cuma lewat. Fiuh.");
status_pemain.kewarasan -= 5; // Tetap sedikit berkurang karena kaget
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else {
tampilkan_dialog(NARATOR, "Lo coba cek tanpa obor. Gelap banget. Tiba-tiba, lo ngerasa ada yang nyentuh pundak lo dari belakang!");
// Jumpscare berat
printf("\n!!! JUMPSCARE !!! SEBUAH TANGAN DINGIN MENYENTUH PUNDAKMU !!!\n"); delay(1000);
tampilkan_dialog(NARATOR, "Lo langsung putar balik, tapi nggak ada siapa-siapa. Cuma dingin. Kewarasan lo anjlok.");
status_pemain.kewarasan -= 25;
sprintf(buffer, "Kewarasan Anda berkurang drastis! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
}
} else if (pilihan == 2) {
tampilkan_dialog(NARATOR, "Kalian bertiga pura-pura nggak denger. Suara itu makin dekat, lalu berhenti tepat di luar tenda.");
tampilkan_dialog(NARATOR, "Ada suara napas berat, lalu bau melati yang kuat. Kalian cuma bisa berdoa dalam hati.");
status_pemain.kewarasan -= 15;
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else { // pilihan == 3
tampilkan_dialog(PROTAGONIS, "TOLONG! ADA APA ITU?!");
tampilkan_dialog(NARATOR, "Teriakan lo bikin Rio sama Siska kaget. Suara di luar tenda langsung hilang.");
tampilkan_dialog(RIO, "Lo kenapa sih, " );
tampilkan_dialog(RIO, "Bikin kaget aja!");
tampilkan_dialog(NARATOR, "Kewarasan lo berkurang karena panik, dan bikin temen-temen lo khawatir.");
status_pemain.kewarasan -= 10;
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
}
tampilkan_dialog(NARATOR, "Malam itu terasa sangat panjang. Tidur pun nggak nyenyak.");
}
void chapter3_teman_hilang_dan_jejak() {
char buffer[256];
tampilkan_dialog(NARATOR, "Pagi hari. Gue bangun, tapi Rio nggak ada di tenda. Siska juga panik.");
tampilkan_dialog(SISKA, "Rio mana? Dia nggak ada di kantong tidur!");
tampilkan_dialog(PROTAGONIS, "Jangan-jangan... dia diculik?");
tampilkan_dialog(NARATOR, "Kami cari-cari di sekitar tenda, tapi nggak ada jejak. Cuma ada sehelai kain sobek yang kayaknya punya Rio.");
int pilihan = tampilkan_pilihan(
"Rio hilang! Apa yang harus kita lakukan?",
"Ikuti jejak kain sobek itu ke dalam hutan",
"Tetap di pos dan tunggu sampai pagi betul",
"Coba cari bantuan ke bawah gunung (walaupun sinyal nggak ada)"
);
if (pilihan == 1) {
tampilkan_dialog(NARATOR, "Kami nekat ikutin jejak kain sobek itu. Makin masuk hutan, makin gelap dan menyeramkan.");
tampilkan_dialog(NARATOR, "Kami menemukan sebuah peta tua yang tergeletak di tanah.");
status_pemain.peta_ditemukan = 1;
tampilkan_dialog(NARATOR, "Anda menemukan Peta Tua! Semoga ini membantu.");
status_pemain.kewarasan -= 15;
sprintf(buffer, "Kewarasan Anda berkurang. (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else if (pilihan == 2) {
tampilkan_dialog(NARATOR, "Kami memutuskan nunggu di pos. Tapi rasa khawatir bikin kami nggak tenang.");
tampilkan_dialog(NARATOR, "Tiba-tiba, dari arah hutan, terdengar suara tawa cekikikan yang makin dekat.");
status_pemain.kewarasan -= 20;
sprintf(buffer, "Kewarasan Anda berkurang drastis! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
status_pemain.rio_selamat = 0; // Rio tidak selamat jika menunggu
tampilkan_dialog(NARATOR, "Rio tidak kembali. Kami harus pergi.");
} else { // pilihan == 3
tampilkan_dialog(NARATOR, "Kami coba turun gunung, tapi sinyal HP nggak ada sama sekali. Kami tersesat di tengah hutan.");
tampilkan_dialog(NARATOR, "Siska mulai panik. Kami berdua makin putus asa.");
status_pemain.kewarasan -= 25;
sprintf(buffer, "Kewarasan Anda berkurang sangat drastis! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
status_pemain.rio_selamat = 0; // Rio tidak selamat jika turun gunung
}
tampilkan_dialog(NARATOR, "Malam kedua di gunung ini. Lebih mengerikan dari yang pertama.");
}
void chapter4_puncak_teror() {
char buffer[256];
tampilkan_dialog(NARATOR, "Kami terus berjalan, atau berusaha bertahan. Tiba-tiba, kami sampai di sebuah area terbuka.");
tampilkan_dialog(NARATOR, "Ada pohon beringin raksasa di tengahnya, dengan akar-akar yang menjuntai seperti tangan. Di bawahnya, ada sesajen.");
tampilkan_dialog(NARATOR, "Dan di sana... kami melihat Rio, berdiri membelakangi kami, tubuhnya kaku.");
tampilkan_dialog(SISKA, "RIO! Lo kenapa?! Jangan bikin takut dong!");
tampilkan_dialog(NARATOR, "Rio perlahan berbalik. Matanya hitam pekat, dan senyumnya... bukan senyum Rio.");
tampilkan_dialog(NARATOR, "Sosok itu tertawa melengking. 'Kalian... mangsa baru...'");
status_pemain.kewarasan -= 30;
sprintf(buffer, "Kewarasan Anda di ambang batas! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
int pilihan = tampilkan_pilihan(
"Ini bukan Rio! Apa yang akan Anda lakukan?",
"Lari sekuat tenaga!",
"Coba lawan dengan obor (jika ada)",
"Mencoba berkomunikasi dengan entitas itu (jika punya peta)" // Perbaikan di sini
);
if (pilihan == 1) {
tampilkan_dialog(NARATOR, "Kami lari pontang-panting. Sosok itu mengejar dengan kecepatan mengerikan.");
if (status_pemain.obor_dinyalakan) {
tampilkan_dialog(NARATOR, "Obor lo sedikit menghalau, tapi sosok itu makin dekat!");
status_pemain.kewarasan -= 20;
sprintf(buffer, "Kewarasan Anda terus menurun! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else {
tampilkan_dialog(NARATOR, "Tanpa obor, kami lari dalam kegelapan. Siska teriak!");
printf("\n!!! JUMPSCARE !!! SISKA TERSERET KE DALAM KEGELAPAN !!!\n"); delay(1000);
tampilkan_dialog(NARATOR, "Siska hilang! Lo sendirian sekarang!");
status_pemain.kewarasan -= 40;
sprintf(buffer, "Kewarasan Anda hancur! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
status_pemain.siska_selamat = 0;
}
} else if (pilihan == 2 && status_pemain.obor_dinyalakan) {
tampilkan_dialog(PROTAGONIS, "PERGI KAU! JANGAN GANGGU KAMI!");
tampilkan_dialog(NARATOR, "Lo ayunkan obor ke arahnya. Sosok itu mundur sedikit, tapi matanya makin merah menyala.");
tampilkan_dialog(NARATOR, "Obor lo nggak cukup kuat. Dia cuma terdiam sesaat, lalu menerkam!");
status_pemain.kewarasan -= 35;
sprintf(buffer, "Kewarasan Anda sangat terguncang! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
status_pemain.rio_selamat = 0; // Rio tetap tidak selamat
status_pemain.siska_selamat = 0; // Siska juga mungkin tidak selamat
} else if (pilihan == 3 && status_pemain.peta_ditemukan) { // Perbaikan di sini: hanya cek peta_ditemukan
tampilkan_dialog(PROTAGONIS, "Aku tahu kau siapa! Aku tahu kau terjebak di sini!");
tampilkan_dialog(NARATOR, "Sosok itu berhenti. Wajahnya menunjukkan ekspresi terkejut, lalu marah, lalu sedih.");
// Logika di sini sekarang hanya bergantung pada peta_ditemukan, bukan buku_ditemukan
tampilkan_dialog(NARATOR, "Lo ingat petunjuk dari peta itu. Lo ceritakan penderitaan entitas itu.");
tampilkan_dialog(NARATOR, "Sosok itu menangis, lalu perlahan memudar, meninggalkan sebuah jimat kuno.");
status_pemain.jimat_ditemukan = 1;
tampilkan_dialog(NARATOR, "Anda menemukan Jimat Kuno!");
status_pemain.kewarasan += 40; // Kewarasan pulih drastis
sprintf(buffer, "Kewarasan Anda pulih! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
} else { // Pilihan 2 tanpa obor, atau Pilihan 3 tanpa peta
tampilkan_dialog(NARATOR, "Lo coba lawan atau bicara tanpa persiapan. Sosok itu langsung menerkam lo!");
status_pemain.kewarasan -= 50;
sprintf(buffer, "Kewarasan Anda hancur lebur! (Kewarasan: %d)", status_pemain.kewarasan);
tampilkan_dialog(NARATOR, buffer);
status_pemain.rio_selamat = 0;
status_pemain.siska_selamat = 0;
}
}
// --- Ending ---
void ending_selamat_dengan_trauma() {
bersihkan_layar();
printf("----------------------------------------\n");
printf("--- ENDING: SELAMAT, TAPI TRAUMA ---\n");
printf("----------------------------------------\n");
tampilkan_dialog(NARATOR, "Lo berhasil turun gunung, sendirian atau bareng Siska. Tapi Rio hilang tanpa jejak.");
tampilkan_dialog(NARATOR, "Pengalaman di Puncak Arwah itu bikin lo nggak bisa tidur nyenyak lagi. Setiap suara ranting patah, bikin lo merinding.");
tampilkan_dialog(NARATOR, "Lo nggak akan pernah lagi naik gunung. Mimpi buruk itu terus menghantui.");
printf("\nAnda selamat, tapi dengan trauma yang mendalam.\n");
}
void ending_terjebak_di_gunung() {
bersihkan_layar();
printf("----------------------------------------\n");
printf("--- ENDING: TERJEBAK DI GUNUNG ---\n");
printf("----------------------------------------\n");
tampilkan_dialog(NARATOR, "Kewarasan lo hancur. Lo nggak bisa lagi bedain mana nyata mana ilusi.");
tampilkan_dialog(NARATOR, "Lo terus berkeliaran di hutan, mencari sesuatu yang nggak ada. Akhirnya, lo hilang, sama kayak pendaki-pendaki sebelumnya.");
tampilkan_dialog(NARATOR, "Puncak Arwah mengklaim korban barunya.");
printf("\nGAME OVER! Anda hilang di Gunung Salak.\n");
}
void ending_damai_dan_pulih() {
bersihkan_layar();
printf("----------------------------------------\n");
printf("--- ENDING: DAMAI DAN PULIH ---\n");
printf("----------------------------------------\n");
tampilkan_dialog(NARATOR, "Berkat Jimat Kuno, lo berhasil menenangkan entitas di Puncak Arwah.");
tampilkan_dialog(NARATOR, "Rio dan Siska (jika mereka selamat) ditemukan dalam keadaan shock, tapi selamat.");
tampilkan_dialog(NARATOR, "Lo melaporkan kejadian itu, dan Puncak Arwah kini terasa lebih tenang. Lo pulang dengan hati yang damai, meskipun dengan cerita yang luar biasa.");
printf("\nSELAMAT! Anda berhasil membawa kedamaian ke Puncak Arwah dan menyelamatkan teman-teman (jika memungkinkan)!\n");
}
void ending_kerasukan() {
bersihkan_layar();
printf("----------------------------------------\n");
printf("--- ENDING: KERASUKAN ---\n");
printf("----------------------------------------\n");
tampilkan_dialog(NARATOR, "Kewarasan lo benar-benar nol. Sosok itu berhasil menguasai tubuh lo.");
tampilkan_dialog(NARATOR, "Lo bukan lagi " );
tampilkan_dialog(NARATOR, "Sekarang, lo adalah bagian dari Puncak Arwah. Entitas baru yang akan menghantui pendaki selanjutnya.");
tampilkan_dialog(NARATOR, "Senyum mengerikan terukir di wajah lo. Mata lo bersinar merah.");
printf("\nGAME OVER! Anda menjadi bagian dari teror Puncak Arwah!\n");
}
// --- Fungsi Utama Game ---
int main() {
prolog();
chapter1_perjalanan_dan_kabut();
// Cek kewarasan sebelum lanjut
if (status_pemain.kewarasan <= 20) {
tampilkan_dialog(NARATOR, "Kewarasan lo udah terlalu rendah. Lo nggak bisa lanjut lagi.");
ending_terjebak_di_gunung();
return 0;
}
chapter2_malam_pertama_di_pos();
// Cek kewarasan setelah chapter 2
if (status_pemain.kewarasan <= 10) {
tampilkan_dialog(NARATOR, "Pikiran lo udah kalut. Lo nggak sanggup lagi.");
ending_terjebak_di_gunung();
return 0;
}
chapter3_teman_hilang_dan_jejak();
// Cek kewarasan setelah chapter 3
if (status_pemain.kewarasan <= 0) {
tampilkan_dialog(NARATOR, "Lo udah bener-bener gila.");
ending_kerasukan(); // Ending kerasukan jika kewarasan 0 atau di bawahnya
return 0;
}
chapter4_puncak_teror();
// Penentuan Ending akhir
if (status_pemain.kewarasan >= 70 && status_pemain.jimat_ditemukan) {
ending_damai_dan_pulih();
} else if (status_pemain.kewarasan <= 0) {
ending_kerasukan();
} else if (status_pemain.kewarasan <= 30) {
ending_terjebak_di_gunung();
} else {
ending_selamat_dengan_trauma();
}
printf("\nTerima kasih udah main 'TEROR PUNCAK ARWAH'!\n");
tekan_enter_untuk_lanjut();
return 0;
}

online compiler#

Kalau kamu penasaran ingin coba materi yang kamu pelajari tadi, silahkan coba di online compiler di bawah ini 👇


Click tombol ini jika ingin —
Kembali ke atas.
Lihat daftar isi untuk lanjut materi.

Sekian saya cukupkan dari ribuan kata yang telah saya tuliskan. Terima kasih banyak sudah membaca.
Capek njir 😊 Funfact: Pengerjaan artikel ini membutuhkan waktu 2 hari 1 malam… thats insane. gif gif

Learn C language
https://luminarysirx.my.id/posts/clanguage/
Author
Axel Kenshi
Published at
2026-06-13
License
CC BY-NC-SA 4.0