Apa Itu Program Komputer? Program komputer adalah serangkaian instruksi yang ditulis oleh manusia untuk mengatur bagaimana komputer bekerja. Menurut KBBI, komputer adalah alat elektronik otomatis yang dapat menghitung dan mengolah data dengan akurat sesuai instruksi, serta mampu menampilkan hasil pengolahan tersebut dalam berbagai bentuk, termasuk multimedia seperti film, musik, dan televisi. Komputer terdiri dari empat komponen utama: unit input, unit output, unit penyimpanan, dan unit kontrol. Perkembangan Teknologi Komputer (Garis Waktu) 1834 - The Analytical Engine Charles Babbage memperkenalkan konsep mesin analisis, yang menjadi cikal bakal komputer modern. Mesin ini dirancang untuk melakukan perhitungan angka secara otomatis. 1944 - Mark I & Mesin Colossus Colossus adalah komputer elektronik pertama yang digunakan Inggris untuk memecahkan kode komunikasi rahasia Jerman dalam Perang Dunia II. 1953 - Bahasa Komputer Pertama Grace Hopper mengembangkan bahasa pemrograman pertama, yang dikenal dengan nama COBOL, membuka jalan bagi komunikasi manusia dan mesin. 1969 - ARPANET Proyek ARPANET dari Departemen Pertahanan AS menciptakan jaringan komputer pertama yang menggunakan sistem packet-switching, cikal bakal internet. 1971 - Email Pertama Ray Tomlinson mengirim email pertama dengan menggunakan simbol '@', yang hingga kini menjadi standar alamat email. 1981 - IBM Personal Computer (PC) IBM merilis PC pertama, menjadikan komputer sebagai alat yang terjangkau dan bermanfaat untuk masyarakat luas. 1984 - Apple Macintosh Apple memperkenalkan Macintosh dengan antarmuka grafis, memudahkan interaksi pengguna dan komputer. 1990 - Website Pertama Tim Berners-Lee membuat situs web pertama di server CERN, memperkenalkan prinsip dasar World Wide Web. Artificial Intelligence (AI) AI adalah kemampuan sistem komputer untuk meniru proses berpikir dan pembelajaran manusia. AI digunakan dalam berbagai bidang, seperti pengenalan wajah, chatbot, hingga mobil otonom. Industri 4.0 Revolusi industri keempat ini menggabungkan otomatisasi, pertukaran data, dan teknologi canggih seperti AI, IoT, dan big data dalam proses produksi untuk efisiensi maksimal. Internet of Things (IoT) IoT menghubungkan perangkat fisik ke internet sehingga mereka dapat saling berkomunikasi dan bertukar data secara otomatis, seperti smart home dan sistem sensor industri. Data Science Data Science adalah ilmu yang menggabungkan statistik, analisis data, dan pemrograman untuk menemukan pola dan informasi penting dari data besar yang kompleks. Cara Kerja Komputer Input Data dimasukkan melalui alat input seperti keyboard, mouse, atau sensor (contoh: sensor suhu LM35DZ). Process Data diproses oleh CPU menjadi informasi yang bermanfaat. Contohnya: mengurutkan angka agar lebih mudah dipahami. Output Hasil pengolahan ditampilkan lewat alat output seperti monitor, printer, atau speaker. Misal: nomor antrean di bank yang muncul di layar. Perangkat Lunak dan Pemrograman Software / Program Sekumpulan instruksi yang mengatur bagaimana komputer bekerja. Istilah program lebih digunakan oleh kalangan profesional, sedangkan pengguna lebih akrab dengan istilah aplikasi. Pemrogram (Programmer) Orang yang menulis dan mengembangkan program agar sesuai dengan kebutuhan. Pemrograman Proses menyelesaikan masalah melalui algoritma dan menerjemahkannya dalam bahasa pemrograman agar bisa dijalankan oleh komputer. Algoritma dan Visualisasinya Algoritma Langkah-langkah sistematis untuk menyelesaikan masalah yang bisa dijalankan oleh komputer. Kriteria Algoritma Menurut Donald E. Knuth Input: Menerima data awal. Output: Menghasilkan setidaknya satu hasil. Definiteness: Instruksi harus jelas. Finiteness: Memiliki akhir yang pasti. Effectiveness: Operasi harus sederhana dan efisien. Pseudo-code Representasi logika algoritma dalam bentuk narasi setengah kode yang mudah dibaca manusia. Flowchart Diagram visual dari alur logika program dengan simbol-simbol khusus untuk setiap proses. Kelebihan dan Kekurangan Flowchart Kelebihan: Komunikatif dan mudah dimengerti. Visualisasi logika seperti perulangan mudah terlihat. Memudahkan deteksi kesalahan secara visual. Kekurangan: Rumit untuk logika kompleks. Tidak praktis jika digambar manual. Sulit dikonversi langsung ke kode. Struktur Kontrol dalam Algoritma Struktur Sekuensial: Instruksi dijalankan satu per satu secara berurutan. Struktur Seleksi: Satu alternatif: hanya dieksekusi jika kondisi terpenuhi. Dua alternatif: hanya salah satu dari dua blok dijalankan. Banyak alternatif: seperti switch dalam bahasa pemrograman. Struktur Perulangan: Pengujian di depan (misal: while). Pengujian di belakang (misal: do...while). Struktur Gabungan: Gabungan dari struktur-struktur di atas untuk algoritma kompleks. Variabel dan Konstanta Variabel: Nilai yang bisa berubah-ubah, digunakan untuk menyimpan masukan dan hasil proses (misal: Panjang, Lebar). Konstanta: Nilai tetap yang tidak berubah (contoh: angka 2 pada rumus keliling). Aturan Penamaan Variabel: Harus diawali huruf. Nama harus deskriptif. Gunakan huruf kapital sebagai pemisah antar kata (CamelCase). Pengujian Program Jenis Kesalahan: Syntax Error: Salah penulisan kode. Execution Error: Kesalahan saat menjalankan. Logic Error: Hasil tidak sesuai meski program berjalan. Tujuan Uji Coba: Menemukan kesalahan. Memastikan fungsi sesuai tujuan. Efisiensi dan kemudahan perawatan kode. Pengujian Komprehensif: Normal Data: Data yang benar dan wajar. Exceptional Data: Data tak valid (karakter aneh, teks). Extreme Data: Nilai batas (paling kecil dan paling besar). Metode Pengujian: Dry-Run: Menjalankan kode secara manual. Trace Table: Menelusuri variabel secara tabel. Breakpoints: Menghentikan eksekusi untuk analisis. Kompilator dan Proses Pemrograman 1. Hubungan Antar Komponen Komputer Dalam proses menjalankan program, terjadi interaksi antara beberapa komponen berikut: Pengguna (User): Memberikan perintah atau input melalui antarmuka program. Perangkat Lunak (Software): Termasuk: Sistem Operasi (Operating System): Seperti MacOS, Microsoft Windows, dan Linux. Bertugas mengatur hubungan antara perangkat keras dan perangkat lunak. Aplikasi Pengguna: Seperti pengolah kata, browser, pemutar video, game, dan lainnya. Perangkat Keras (Hardware): Merupakan bagian fisik komputer yang meliputi: CPU (Central Processing Unit) RAM (Random Access Memory) Media penyimpanan (HDD, SSD, USB) Perangkat jaringan (Network Adapter) Perangkat input/output (keyboard, mouse, layar) Semua elemen ini bekerja secara bersama untuk menjalankan instruksi yang ditulis oleh programmer. 2. Bahasa Pemrograman dan Metode Eksekusinya Dalam dunia pemrograman, terdapat beberapa cara bahasa dijalankan oleh komputer: Compiled Language (Bahasa Kompilasi): Contoh: C, C++ Kode sumber diterjemahkan sepenuhnya ke dalam bahasa mesin sebelum dijalankan. Proses dilakukan oleh compiler, menghasilkan file executable (.exe di Windows, .out di Linux). Keunggulan: Eksekusi cepat karena telah dikompilasi. Kekurangan: Kurang fleksibel untuk debugging secara langsung. Interpreted Language (Bahasa Interprestasi): Contoh: Python, Perl Kode dieksekusi baris per baris secara langsung oleh interpreter tanpa dikompilasi penuh sebelumnya. Cocok untuk skrip cepat dan pengembangan awal. Kekurangan: Lebih lambat dibanding bahasa kompilasi. Virtual Machine-based Language: Contoh: Java Kode sumber dikompilasi ke bytecode, lalu dijalankan oleh Java Virtual Machine (JVM). Portabel antar platform karena tidak bergantung sistem operasi. JVM bertindak seperti interpreter dengan efisiensi lebih baik. 3. Struktur Dasar Program C++ Struktur bahasa C++ memiliki beberapa komponen utama sebagai berikut: a. Preprocessing Directive #include Diawali dengan tanda #. Menyisipkan kode pustaka (library) sebelum proses kompilasi. iostream adalah library standar untuk input/output. #include akan memanggil file header yang berisi deklarasi fungsi dan objek penting seperti std::cout. b. Fungsi Utama Program int main() { ... } int main() adalah titik awal eksekusi program C++. Wajib ada dalam setiap program C++. { ... } menandai blok utama dari fungsi main. c. Komentar dalam Program // Ini komentar satu baris /* Ini komentar lebih dari satu baris */ Komentar digunakan untuk memberi keterangan pada kode dan tidak dijalankan oleh compiler. // untuk komentar satu baris. /* */ untuk komentar lebih dari satu baris. d. Pernyataan (Statement) std::cout << "Hello World!\n"; Merupakan instruksi atau tindakan yang harus dilakukan oleh program. std::cout adalah objek dari library iostream untuk menampilkan teks ke layar. Simbol << digunakan untuk mengirim teks ke layar. \n menghasilkan baris baru. Semua statement diakhiri dengan titik koma ;. e. Kurung Kurawal Penutup } Menutup blok fungsi main. Kurung kurawal digunakan untuk membatasi blok kode pada fungsi, kondisi, maupun perulangan. 4. Proses Kompilasi Kode Sumber Berikut ini adalah tahapan umum dari proses kompilasi pada bahasa seperti C/C++: Preprocessing: Menyisipkan file header, makro, dan menyelesaikan direktif #include, #define, dll. Compilation: Kode sumber diterjemahkan ke dalam bahasa mesin atau intermediate representation. Assembly: Kode dikonversi ke bentuk spesifik mesin (machine code). Linking: Menyatukan semua bagian program dan library menjadi satu file executable yang utuh. TIPE DATA DALAM C++ Tipe data dalam C++ diklasifikasikan menjadi tiga kategori utama: Tipe Data Primer (Primary Data Types) Tipe Data Turunan (Derived Data Types) Tipe Data Buatan Pengguna (User-defined Data Types) 1. Tipe Data Primer a. Integer (Bilangan Bulat) Digunakan untuk menyimpan angka bulat tanpa desimal. Kata kunci: int Ukuran memori: 4 byte Rentang nilai: dari -2.147.483.648 hingga 2.147.483.647 Versi modifikasi: short untuk integer berukuran lebih kecil long untuk integer berukuran lebih besar Contoh deklarasi dan inisialisasi: int a; int b = 1402; int c = -971; b. Floating Point (Bilangan Pecahan) Menyimpan angka desimal presisi tunggal. Kata kunci: float Ukuran memori: 4 byte Perlu ditambahkan suffix f pada inisialisasi literal. Contoh: float x; float y = 14.02f; c. Double Floating Point Menyimpan angka desimal dengan presisi ganda (lebih akurat dari float). Kata kunci: double Ukuran memori: 8 byte Nilai literal default dianggap sebagai double, tidak perlu suffix f. Contoh: double x; double y = 14.02; d. Character (Karakter) Menyimpan satu karakter ASCII. Kata kunci: char Ukuran memori: 1 byte Rentang: 0–255 (berbasis ASCII) Nilai dapat berupa karakter atau bilangan ASCII. Contoh: char huruf = 'x'; char data1 = 'A', data2 = 'Z', data3 = '9'; e. Wide Character Menyimpan karakter Unicode (digunakan untuk bahasa Jepang, Korea, dll). Kata kunci: wchar_t Ukuran memori: 2–4 byte Prefix literal: L Contoh: wchar_t ch = L'あ'; f. Boolean Menyimpan nilai logika: true (1) atau false (0) Kata kunci: bool Contoh: bool x = true; bool y = false; g. Void Tidak menyimpan nilai. Kata kunci: void Biasanya digunakan untuk fungsi yang tidak mengembalikan nilai. void tampilkanMenu() { std::cout << "Menu Utama"; } 2. Variabel Variabel adalah representasi dari lokasi dalam memori untuk menyimpan data. Nilainya dapat berubah selama program berjalan. Bersifat sementara (volatile), akan hilang jika program ditutup atau direstart. Sintaks deklarasi: tipe_data nama_variabel; tipe_data var1, var2; Sintaks inisialisasi: tipe_data nama_variabel = nilai; Contoh: int x = 1402; float y = 14.02f; char z = 't'; 3. Identifier (Pengenal) Digunakan untuk memberi nama variabel, fungsi, kelas, dll. Aturan penamaan: Minimal 1 karakter Harus diawali huruf atau _ Tidak boleh mengandung spasi atau karakter khusus seperti @, $, % Bersifat case-sensitive (Data ≠ data) Tidak boleh menggunakan kata kunci C++ (seperti if, else, while, dll) Best practice: Gunakan gaya camelCase untuk nama yang terdiri dari beberapa kata. Contoh: totalHarga, jumlahSiswa, inputUser 4. Konstanta (Constant) Nilai tetap yang tidak bisa diubah setelah dideklarasikan. Kata kunci: const Contoh: const double PI = 3.14159; double luas = (9 * 9) * PI; // PI = 3.14; // akan menyebabkan error 5. Type Conversion dan Type Casting a. Implicit Type Conversion Konversi otomatis oleh compiler saat menyimpan nilai ke tipe data kompatibel. Contoh: short a = 1402; int b; b = a; // otomatis dikonversi ke int b. Explicit Type Casting Konversi dilakukan secara manual oleh programmer. Dua bentuk: Fungsi (Functional): y = int(x); Gaya C (C-like): z = (int)x; 6. Type Inference (auto) C++ dapat menentukan tipe data otomatis saat deklarasi menggunakan kata kunci auto. Catatan penting: Harus disertai nilai saat deklarasi. Contoh valid: auto count = 0; // int auto pil = 'k'; // char auto total = 14.02f; // float auto num = 41110179.115;// double Contoh tidak valid: auto x; // Error: tidak ada nilai awal INPUT/OUTPUT DASAR 1. Output (Keluaran ke layar) Menggunakan library iostream dan objek std::cout. Menampilkan teks atau nilai ke layar. Contoh: std::cout << "Hello World\n"; std::cout << "Aplikasi Rental Mobil" << std::endl; int kode = 1402; std::cout << "Kode prodi TI: " << kode << "\n"; 2. Input (Masukan dari pengguna) Menggunakan library iostream dan objek std::cin. Menerima input dari keyboard (command line). Contoh: int p; std::cout << "Masukkan pilihan (1-4): "; std::cin >> p; std::cout << "Nilai p: " << p << "\n"; char x; std::cout << "Ketik 1 karakter: "; std::cin >> x; std::cout << "Karakter input: " << x << "\n"; Ekspresi dalam C++ Definisi: Ekspresi adalah kombinasi dari konstanta, variabel, dan operator yang menghasilkan suatu nilai. Ekspresi dapat berdiri sendiri atau menjadi bagian dari pernyataan (statement). Jenis-Jenis Ekspresi: 1. Constant Expression - Hanya terdiri dari nilai tetap (konstanta). - Contoh: 5 int z = 43; x = (2 / 3) * 4; 2. Integral Expression - Menghasilkan nilai bertipe integer, langsung atau melalui konversi. - Contoh (x dan y bertipe int): x * y x + int(5.0) 3. Floating Expression - Menghasilkan nilai float secara langsung atau dari konversi. - Contoh (p dan q bertipe float): p + q 14.02 4. Relational Expression (Boolean) - Menghasilkan nilai boolean: true atau false. - Contoh: x <= y x + y > 2 a - b >= x - y 5. Logical Expression - Menggabungkan dua atau lebih ekspresi relasional. - Contoh: x > y && x == 10 x == 7 || y == 14 6. Pointer Expression - Menghasilkan nilai berupa alamat memori. - Contoh: &x ptr 7. Bitwise Expression - Memanipulasi data pada level bit. - Contoh: x >> 2 Operator dalam C++ 1. Unary Operator - Operator: ++, -- - Hanya satu operand. - Contoh: x++; // sama dengan x = x + 1 y--; // sama dengan y = y - 1 2. Arithmetic Operator - Operator: +, -, *, /, % - Digunakan untuk operasi matematika dasar. - Contoh: x = y * z; a = b + c / d; - Catatan: Hati-hati terhadap overflow, misalnya 2147483647 + 1. 3. Relational Operator - Digunakan untuk membandingkan dua operand. - Operator: <=, >=, ==, !=, <, > - Contoh: 5 == 5 // true 6 > 5 // true 5 != 5 // false 4. Logical Operator - Menggabungkan kondisi boolean. - Operator: && (AND), || (OR), ! (NOT) - Contoh: true && false // false true || false // true !true // false 5. Bitwise Operator - Melakukan operasi pada bit. - Operator: & (AND), | (OR), ^ (XOR), ~ (NOT), << (shift kiri), >> (shift kanan) - Contoh: x & y x >> 2 6. Assignment Operator - Memberi nilai ke variabel. - Operator: =, +=, -=, *=, /= - Contoh: x = 8; x += 8; // sama dengan x = x + 8 7. Ternary Operator - Operator ?: digunakan sebagai alternatif if-else singkat. - Format: kondisi ? nilai_true : nilai_false; - Contoh: char hasil = (5 >= 5) ? 'y' : 't'; Operator Precedence dan Associativity - Precedence: Urutan eksekusi berdasarkan prioritas operator. - Associativity: Urutan eksekusi saat operator memiliki prioritas sama. - Contoh: x = 4 + 2 * 9; // * dieksekusi dulu, hasil: 22 y = 9 * (5 + 2); // () dieksekusi dulu, hasil: 63 Referensi lengkap: https://en.cppreference.com/w/cpp/language/operator_precedence Komentar dalam C++ Komentar digunakan untuk memberi penjelasan dalam kode dan tidak akan dieksekusi. 1. Komentar satu baris: // Hitung total pembayaran total_bayar = (total + pajak) - diskon; 2. Komentar blok (multi-baris): /* Tampilkan total pembayaran setelah dikurangi diskon */ std::cout << "Total bayar: " << total_bayar << std::endl; Error dan Warning 1. Compile-time Error: - Terjadi saat proses kompilasi. - Contoh: lupa titik koma, variabel belum dideklarasikan. 2. Run-time Error: - Terjadi saat program dijalankan. - Contoh: pembagian dengan nol, file tidak ditemukan. 3. Logic Error: - Program tidak menghasilkan hasil sesuai yang diharapkan meskipun tanpa error. 4. Warning: - Kompilasi berhasil, tapi ada peringatan dari compiler. - Contoh: int n; std::cout << n << '\n'; // Warning: variabel 'n' belum diinisialisasi Modul 5 : Percabangan Bersyarat BOOLEAN EXPRESSION (Ekspresi Boolean) 1. Pengertian Tipe Data Boolean - Dalam bahasa C++, tersedia tipe data Boolean (bool) yang hanya memiliki dua kemungkinan nilai: `true` (benar) dan `false` (salah). - Nama Boolean diambil dari George Boole, seorang matematikawan asal Inggris yang mengembangkan logika Boolean. - Dalam implementasinya: - Setiap bilangan selain nol (baik positif maupun negatif) dianggap sebagai `true`. - Bilangan nol (`0`) dianggap sebagai `false`. 2. Ekspresi Boolean - Ekspresi Boolean merupakan pernyataan logika yang menghasilkan nilai `true` atau `false`. - Biasanya ekspresi ini melibatkan operator relasional (seperti `==`, `!=`, `<`, `>`, dll). - Ekspresi aritmatika dalam ekspresi Boolean dievaluasi terlebih dahulu, lalu dibandingkan. - Contoh: - `10 == 20` akan menghasilkan `false`. - `x == 10` bernilai `true` hanya jika nilai `x` memang 10. - `x != y` bernilai `true` jika nilai `x` tidak sama dengan `y`. PERNYATAAN IF 1. Struktur Dasar if - Pernyataan `if` digunakan untuk membuat percabangan logika berdasarkan kondisi. - Format dasar: if (kondisi) { pernyataan; } - Kondisi di dalam kurung harus berupa ekspresi Boolean. 2. Contoh Penggunaan: if (nilai >= 70) { cout << "LULUS"; } 3. Gaya Penulisan (Coding Style) - Jika hanya satu pernyataan setelah `if`, kurung kurawal `{}` boleh dihilangkan. if (nilai >= 70) cout << "LULUS"; - Jika lebih dari satu pernyataan, **wajib** menggunakan kurung kurawal: if (nilai >= 70) { cout << "LULUS"; cout << endl; } PERNYATAAN IF ... ELSE 1. Format Dasar: - Menambahkan cabang jika kondisi `if` bernilai `false`. if (kondisi) { statement1; } else { statement2; } 2. Contoh: if (nilai >= 70) { cout << "LULUS"; } else { cout << "TIDAK LULUS"; } 3. Percabangan if ... else if ... else - Digunakan ketika terdapat lebih dari dua kemungkinan kondisi: if (nilai >= 70) { cout << "LULUS"; } else if (nilai >= 50) { cout << "UJIAN ULANG"; } else { cout << "TIDAK LULUS"; } 4. Contoh Kasus: - Konversi nilai ke huruf berdasarkan skala: if (nilai > 80) cout << "A"; else if (nilai >= 70) cout << "B"; else if (nilai >= 50) cout << "C"; else cout << "D"; PERNTAAN SWITCH ... CASE 1. Struktur Dasar: - Digunakan untuk percabangan berdasarkan nilai dari suatu variabel. - Lebih efisien dibandingkan if-else jika hanya memeriksa nilai yang tetap. switch (variabel) { case nilai1: statement1; break; case nilai2: statement2; break; default: statement_default; break; } 2. Contoh: int prodi = 2; switch (prodi) { case 1: cout << "Ilmu Komputer\n"; break; case 2: cout << "Teknologi Informasi\n"; break; default: cout << "Tidak Diketahui\n"; break; } PERCABANGAN BERSARANG (NESTED) 1. If Bersarang (Nested If) - Merupakan penggunaan `if` di dalam blok `if` lain. if (nilai >= 50) { if (nilai >= 70) { cout << "LULUS"; } else { cout << "UJIAN ULANG"; } } else { cout << "TIDAK LULUS"; } 2. Switch Bersarang - Switch dapat digunakan di dalam `if`, dan sebaliknya. - Contoh: if (jenis == 1) { switch (pilihan) { case 1: cout << "Aksi 1"; break; } } // Atau sebaliknya switch (jenis) { case 1: if (nilai > 70) cout << "Bagus"; break; } KESALAHAN UMUM DALAM PERCABANGAN 1. Salah Gunakan Tanda Perbandingan - Kesalahan umum adalah menggunakan `=` (assignment) sebagai perbandingan, padahal seharusnya `==`. if (input = 2) // Salah! Ini melakukan assignment, bukan perbandingan 2. Salah Menggunakan Operator Logika `||` dan `&&` - Banyak pemula bingung membedakan OR (`||`) dan AND (`&&`). - `x > 0 || x <= 10` → selalu `true` untuk semua nilai `x`. - `x > 0 && x <= 10` → hanya `true` jika `x` di antara 1 dan 10. 3. Tautology - Ekspresi logika yang selalu bernilai `true`, tidak peduli nilai variabelnya. - Contoh: ``` x > 0 || x <= 10 // Selalu true ``` 4. Contradiction - Ekspresi logika yang selalu bernilai `false`. - Contoh: ``` x == 0 && x > 10 // Tidak pernah bisa true ``` CATATAN TAMBAHAN: - Gunakan `==` untuk membandingkan dua nilai, dan `=` hanya untuk memberikan nilai (assignment). - Penggunaan `else if` sangat berguna untuk menghindari tumpukan `if` yang tidak efisien. - Setiap `case` dalam `switch` sebaiknya diakhiri dengan `break;` agar tidak mengeksekusi case lain secara tidak sengaja. - Gunakan komentar untuk menjelaskan logika percabangan yang kompleks. PERULANGAN DALAM C++ 1. PERNYATAAN WHILE - Digunakan untuk mengeksekusi blok kode berulang selama kondisi bernilai true. - Sintaks: while (kondisi) { statement; } - Contoh: int x = 1; while (x < 3) { cout << x << "\n"; x++; } - Jika hanya satu pernyataan, tanda kurung kurawal {} boleh dihilangkan. - Kondisi dievaluasi di awal setiap iterasi. 2. PERNYATAAN DO ... WHILE - Menjalankan blok kode terlebih dahulu, kemudian mengevaluasi kondisi. - Cocok jika perulangan minimal harus dijalankan satu kali. - Sintaks: do { statement; } while (kondisi); - Contoh: int x = 1; do { cout << x << "\n"; x++; } while (x < 3); 3. PERBANDINGAN WHILE VS DO ... WHILE - while: kondisi dicek sebelum blok dijalankan. - do ... while: blok dijalankan dulu, lalu kondisi dicek. - Contoh: int x = 4; while (x < 3) { cout << x << "\n"; // Tidak dijalankan x++; } do { cout << x << "\n"; // Dieksekusi sekali x++; } while (x < 3); 4. PERNYATAAN FOR - Digunakan untuk perulangan dengan inisialisasi, kondisi, dan increment yang jelas. - Sintaks: for (inisialisasi; kondisi; increment) { statement; } - Contoh: for (int x = 1; x < 3; x++) { cout << x << "\n"; } 5. PERBANDINGAN WHILE DAN FOR - Fungsi sama, hanya berbeda dalam struktur penulisan. // Menggunakan while int x = 1; while (x < 3) { cout << x << "\n"; x++; } // Menggunakan for for (int x = 1; x < 3; x++) { cout << x << "\n"; } 6. PERULANGAN BERSARANG - Perulangan di dalam perulangan lain. - Contoh: bool ulang = true; while (ulang) { for (int x = 1; x <= 2; x++) { cout << x << "\n"; if (x % 2 == 0) { ulang = false; } } } 7. MENGHENTIKAN PERULANGAN SECARA UMUM - Perulangan akan terus berjalan selama kondisi bernilai true. - Jika kondisi menjadi false di tengah body perulangan, blok tetap dieksekusi sampai akhir sebelum berhenti. - Contoh: bool ulang = true; while (ulang) { for (int x = 1; x <= 2; x++) { cout << x << "\n"; if (x % 2 == 0) { ulang = false; } } cout << "C++ Rocks!\n"; cout << "In your dream\n"; } 8. PERNYATAAN BREAK - Digunakan untuk langsung keluar dari perulangan. - Contoh: int input, jlh = 0; while (true) { cin >> input; if (input < 0) break; jlh += input; } cout << "Jumlah: " << jlh << "\n"; - Break menambah titik keluar di luar kondisi. - Bisa diganti dengan variabel Boolean tapi memakan memori lebih besar. 9. PERNYATAAN CONTINUE - Melompati sisa pernyataan dan kembali ke awal perulangan. - Tidak keluar dari perulangan. - Dapat diganti dengan else/if untuk hasil lebih terstruktur. 10. PERNYATAAN GOTO - Melompat ke label tertentu dalam kode. - Sintaks: goto label; ... label: statement; - Tidak disarankan karena membuat kode sulit dibaca (spaghetti code). - Sering digunakan pada bahasa lama seperti FORTRAN dan BASIC. 11. PERULANGAN TAK TERBATAS (INFINITE LOOP) - Perulangan yang tidak pernah berhenti karena kondisi selalu true. - Bisa disengaja (misalnya: server listener) atau tidak disengaja (bug). - Contoh: while (true) { // tanpa break } GLOSARIUM - Perulangan: proses menjalankan blok kode berulang-ulang - Kondisi: ekspresi boolean yang menentukan apakah perulangan dilanjutkan - Iterasi: satu kali siklus perulangan - break: keluar dari perulangan secara langsung - continue: melompat ke iterasi berikutnya - goto: melompat ke lokasi tertentu dalam program - infinite loop: perulangan yang tidak memiliki akhir - spaghetti code: kode yang tidak terstruktur dan sulit dipahami PENGERTIAN ARRAY - Array adalah struktur data berupa kumpulan elemen yang memiliki tipe data yang sama, dan disimpan secara berurutan di dalam blok memori. - Nama array mengikuti aturan penamaan identifier (seperti variabel biasa). - Akses ke elemen array dilakukan menggunakan indeks (index), dimulai dari 0. - Setiap elemen array disimpan di lokasi memori yang berurutan. - Semua elemen array harus memiliki tipe data yang sama (misalnya: int, float, char). DEKLARASI DAN INISIALISASI ARRAY - Dalam C++, array dapat dideklarasikan dan diinisialisasi dengan berbagai cara. - Bentuk umum deklarasi: tipe_data nama_array[ukuran]; - Inisialisasi dapat dilakukan saat deklarasi: tipe_data nama_array[ukuran] = {nilai1, nilai2, ..., nilaiN}; CONTOH DEKLARASI DAN INISIALISASI - Misalnya, sebuah program membutuhkan array untuk menyimpan jumlah handphone dari lima responden: 3, 2, 1, 2, 1. - Kode program: int jumlahHP[5] = {3, 2, 1, 2, 1}; MENGAKSES ELEMEN ARRAY - Elemen array diakses dengan menggunakan indeks, misalnya: jumlahHP[2]; // Mengakses elemen ke-3 (nilai = 1) - Pertanyaan: Berapa nilai elemen array pada indeks ke-3? Jawaban: jumlahHP[3] = 2; AKSES INDEX DI LUAR BATAS - Jika mencoba mengakses elemen di luar batas ukuran array (misalnya jumlahHP[10]), akan terjadi *undefined behavior*. - Hal ini dapat menyebabkan program crash atau memunculkan nilai acak. - Oleh karena itu, selalu pastikan indeks yang digunakan valid (antara 0 hingga ukuran_array - 1). ARRAY MULTIDIMENSI - Array berdimensi satu digunakan untuk menyimpan data linear (vektor). - Jika ingin menyimpan data dalam bentuk baris dan kolom (matriks), digunakan array dua dimensi (2D array). - Sintaks: tipe_data nama_array[baris][kolom]; CONTOH ARRAY 2D DAN AKSESNYA - Misal, terdapat array 2D berikut: int matriks[2][3] = { {1, 2, 3}, {4, 5, 6} }; - Untuk mengakses nilai pada baris ke-1, kolom ke-3: cout << matriks[0][2]; // Output: 3 PENGERTIAN STRING DALAM C++ - String adalah rangkaian karakter yang diakhiri dengan karakter null ('\0'). - Dalam C dan C++, string dapat disimpan sebagai array karakter: char pesan[6] = "Halo"; - Atau dapat menggunakan tipe data string (objek): string pesan = "Halo"; C-STRING (ARRAY KARAKTER) - C-string secara eksplisit harus menyediakan ruang untuk karakter null ('\0'). - Contoh: char teks[12] = "Hello world"; - Jika tidak menyediakan ruang yang cukup, maka akan terjadi buffer overrun (kelebihan memori). BUFFER OVERRUN - Buffer overrun terjadi saat menulis data melebihi kapasitas array. - Hal ini menyebabkan program menjadi tidak stabil atau rentan terhadap serangan keamanan. - Untuk menghindarinya, pastikan kapasitas array cukup, dan validasi input pengguna. PENGAMANAN INPUT STRING - Untuk menghindari buffer overrun, gunakan metode input yang aman. - cin hanya membaca input sampai spasi. - Untuk membaca input string yang mengandung spasi, gunakan: ```cpp fgets(nama_array, ukuran, stdin); // di C getline(cin, nama_variabel_string); // di C++ RANGKUMAN Array adalah kumpulan variabel dengan tipe data yang sama dan disimpan secara berurutan. Elemen array diakses menggunakan indeks, dimulai dari 0. Array dapat berdimensi satu (1D), dua (2D), atau lebih. C-string adalah array karakter yang diakhiri dengan karakter null ('\0'). Buffer overrun adalah kesalahan umum yang harus dihindari. Gunakan metode input yang aman saat bekerja dengan array karakter. GLOSARIUM Array: Struktur data yang berisi sekumpulan elemen sejenis. Indeks: Posisi elemen dalam array, dimulai dari 0. Multidimensi: Array dengan lebih dari satu dimensi. String: Rangkaian karakter, dalam C berupa array karakter. C-string: String dalam bentuk array karakter (null-terminated). Buffer overrun: Kesalahan akibat menulis melebihi kapasitas array. PENGERTIAN FUNGSI - Fungsi adalah sekumpulan perintah yang dikelompokkan menjadi satu unit untuk menjalankan tugas tertentu. - Contoh kasus: Mencari akar kuadrat dari sebuah bilangan. - Metode yang sering digunakan: Newton-Raphson (https://en.wikipedia.org/wiki/Newton%27s_method). PERMASALAHAN DALAM PROGRAM TANPA FUNGSI - Dalam proyek besar, sering kali diperlukan banyak perhitungan akar kuadrat, misalnya untuk: - Menghitung jarak dua titik (dalam bidang geometri) - Menyelesaikan persamaan kuadrat - Aplikasi dalam dunia teknik dan fisika - Tanpa fungsi, programmer harus menyalin (copy-paste) kode yang sama berulang kali. - Hal ini membuat kode menjadi tidak efisien, sulit dibaca, dan sulit dipelihara. SOLUSI: FUNGSI UNTUK KODE YANG DAPAT DIGUNAKAN KEMBALI - Dengan menggunakan fungsi, kita dapat menulis satu kali dan memanggilnya berkali-kali. - Fungsi membuat kode lebih modular, mudah dibaca, diuji, dan diperbaiki. - Fungsi juga membantu dalam proses debugging dan pengorganisasian program besar. JENIS-JENIS FUNGSI DALAM C++ - Ada dua jenis fungsi dalam C++: 1. **Built-in Function** (fungsi bawaan): Disediakan oleh compiler dan tersedia dalam library. 2. **User-defined Function** (fungsi buatan pengguna): Dibuat sendiri oleh programmer sesuai kebutuhan. - Fungsi built-in tersedia melalui *library*, yang dapat digunakan dengan *preprocessor directive* seperti `#include`. KONSEP DASAR FUNGSI DALAM C++ - Fungsi adalah blok kode yang menerima input (parameter), memprosesnya, dan mengembalikan hasil (return value). - Dalam penerapannya, fungsi bersifat seperti *kotak hitam* (black box). Programmer cukup tahu: - Nama fungsi - Parameter yang harus diberikan - Hasil yang dikembalikan - Tanpa perlu tahu bagaimana fungsi bekerja secara internal. CONTOH FUNGSI BUILT-IN: MENCARI AKAR KUADRAT - Untuk menyederhanakan kode yang menghitung akar kuadrat, kita bisa menggunakan fungsi `sqrt()` dari library `cmath`. - Contoh: ```cpp #include #include using namespace std; int main() { double x = 16.0; cout << "Akar dari " << x << " adalah " << sqrt(x); return 0; } FUNGSI-FUNGSI MATEMATIKA (LIBRARY: cmath) 1. Fungsi Pangkat pow(base, exponent) Contoh: pow(2, 3) menghasilkan 8. 2. Fungsi Logaritma log10(x) untuk logaritma basis 10 Contoh: log10(100) hasilnya 2 3. Fungsi Trigonometri sin(x), cos(x), tan(x) dengan x dalam radian Contoh: cos(0) menghasilkan 1 FUNGSI MAXIMUM DAN MINIMUM (LIBRARY: algorithm) Fungsi max(a, b) mengembalikan nilai terbesar dari dua nilai. Fungsi min(a, b) mengembalikan nilai terkecil. Contoh: int x = 10, y = 20; int terbesar = max(x, y); // Hasil: 20 FUNGSI WAKTU / CLOCK (LIBRARY: ctime) Digunakan untuk mengukur waktu eksekusi program. Tipe data: clock_t (ekuivalen dengan unsigned long) Konversi ke detik dilakukan dengan membagi hasil clock dengan CLOCKS_PER_SEC. Contoh: #include clock_t start = clock(); // kode program clock_t end = clock(); double durasi = double(end - start) / CLOCKS_PER_SEC; FUNGSI UNTUK KARAKTER (LIBRARY: cctype) toupper(ch) => ubah karakter ke huruf besar tolower(ch) => ubah karakter ke huruf kecil isupper(ch) => cek apakah karakter huruf besar islower(ch) => cek apakah karakter huruf kecil isalpha(ch) => cek apakah karakter huruf isdigit(ch) => cek apakah karakter digit (0-9) FUNGSI ANGKA ACAK (LIBRARY: cstdlib) Fungsi rand() menghasilkan angka acak pseudo-random. Fungsi srand(seed) digunakan untuk menentukan titik awal deret acak (seed). Jika seed sama, maka urutan angka acak yang dihasilkan juga akan sama. Contoh: srand(time(0)); // seed berdasarkan waktu saat ini int acak = rand() % 100; // angka acak 0-99 FUNGSI MANIPULASI I/O (LIBRARY: iomanip) Fungsi setw(n) digunakan untuk mengatur lebar spasi saat menampilkan output. Contoh: #include cout << setw(10) << "Data"; RANGKUMAN Fungsi adalah blok kode yang dapat digunakan untuk menyelesaikan tugas spesifik dan bisa dipanggil berulang kali. Fungsi membuat kode lebih terorganisir dan mudah digunakan ulang (reusable). Ada dua jenis fungsi: built-in dan user-defined. C++ memiliki berbagai library untuk menyediakan fungsi bawaan, seperti cmath, ctime, cstdlib, cctype, algorithm, dan iomanip. Dokumentasi lengkap fungsi dalam C++ dapat diakses di: http://www.cplusplus.com/reference/ DASAR FUNGSI DALAM C++ Pentingnya Fungsi - Ketika program menjadi semakin kompleks, penting bagi programmer untuk menyusun struktur kode yang baik agar mudah dibaca, dirawat, dan dikembangkan. - Salah satu teknik manajemen kode adalah dengan memecah kode kompleks menjadi beberapa bagian kecil yang disebut *fungsi*. - Selama ini, program hanya menggunakan satu fungsi utama yaitu `main()`. - Menuliskan seluruh program dalam satu fungsi disebut sebagai *kode monolitik* (monolithic code). Kerugian Kode Monolitik - Sulit ditulis dan dikelola karena semua logika terkonsentrasi dalam satu tempat. - Proses debugging menjadi sulit karena seluruh bagian saling berkaitan. - Menemukan kesalahan (error) membutuhkan lebih banyak waktu karena tidak ada pemisahan tanggung jawab antar bagian kode. - Perubahan kecil pun membutuhkan pemahaman terhadap seluruh program. - Tidak memungkinkan penggunaan kembali bagian kode yang sama untuk tugas serupa (*code reuse*). Solusi: Membagi Program Menggunakan Fungsi - Dengan pendekatan *divide and conquer*, program besar dipecah menjadi fungsi-fungsi kecil yang lebih sederhana. - Fungsi dapat digunakan untuk: - Menyederhanakan logika program - Meningkatkan keterbacaan kode - Memfasilitasi penggunaan ulang kode - Fungsi utama (`main()`) dapat berperan sebagai *koordinator* yang mengatur alur eksekusi antar fungsi. - Ada dua jenis fungsi: 1. **Built-in function**: Fungsi yang telah disediakan oleh C++ dalam pustaka (*library*) tertentu. 2. **User-defined function**: Fungsi yang ditulis oleh programmer sesuai kebutuhan program. MENULIS DAN MENGGUNAKAN FUNGSI Struktur Fungsi dalam C++ - Setiap fungsi terdiri dari dua aspek utama: 1. **Pendefinisian fungsi**: Menentukan struktur fungsi lengkap (nama, parameter, tipe data, dan isi fungsi). 2. **Pemanggilan fungsi**: Cara memanfaatkan fungsi yang sudah didefinisikan dalam program. Empat Bagian Utama dalam Definisi Fungsi: 1. **Name** (Nama) - Merupakan identifier unik yang merepresentasikan fungsi. - Nama sebaiknya jelas dan sesuai dengan tugas yang dilakukan fungsi. 2. **Type** (Tipe Nilai Balik / Return Type) - Menunjukkan tipe data yang akan dikembalikan oleh fungsi. - Jika fungsi tidak mengembalikan nilai, digunakan tipe `void`. 3. **Parameter / Argument** - Parameter formal adalah variabel yang digunakan dalam definisi fungsi untuk menerima input. - Jenis dan jumlah parameter harus didefinisikan secara eksplisit. - Contoh: `int tambah(int a, int b)` memiliki dua parameter bertipe `int`. 4. **Body (Isi Fungsi)** - Terletak di dalam kurung kurawal `{ }`. - Berisi serangkaian pernyataan yang akan dieksekusi saat fungsi dipanggil. Contoh Pendefinisian dan Pemanggilan Fungsi: ```cpp #include using namespace std; // Definisi fungsi int kali(int a, int b) { return a * b; } int main() { int hasil = kali(4, 5); // Pemanggilan fungsi cout << "Hasil perkalian: " << hasil; return 0; } PASS BY VALUE Pengertian: Dalam C++, parameter fungsi secara default dikirim dengan metode pass by value (call by value). Artinya, nilai dari parameter aktual (actual parameter) disalin ke parameter formal. Perubahan yang dilakukan pada parameter formal tidak memengaruhi nilai asli di pemanggil. Contoh: void ubahNilai(int x) { x = 100; } int main() { int a = 10; ubahNilai(a); cout << a; // Output tetap 10 } PROSES EKSEKUSI DAN PROTOTYPE FUNGSI Apa yang Terjadi Jika Fungsi Didefinisikan Setelah main()? Jika fungsi didefinisikan setelah main() tanpa deklarasi sebelumnya, maka compiler akan memberikan error. Hal ini karena compiler membaca kode dari atas ke bawah dan tidak mengetahui keberadaan fungsi tersebut saat dipanggil. Solusi: Gunakan Function Prototype Function prototype adalah deklarasi singkat dari fungsi yang diletakkan di atas main() agar compiler mengenali fungsi tersebut sebelum digunakan. Contoh: int tambah(int, int); // Function prototype int main() { cout << tambah(3, 4); return 0; } int tambah(int a, int b) { return a + b; } DEKLARASI GLOBAL VS LOKAL Pengertian: Variabel lokal: Dideklarasikan di dalam fungsi. Hanya bisa diakses dalam fungsi tersebut. Variabel global: Dideklarasikan di luar fungsi (biasanya di atas main()). Dapat diakses oleh semua fungsi dalam program. Perbandingan: Variabel lokal dan variabel global memiliki perbedaan mendasar dalam hal ruang lingkup, keamanan, kinerja, dan penggunaannya. Variabel lokal hanya dapat diakses di dalam fungsi atau blok tempat variabel tersebut dideklarasikan. Hal ini membuatnya lebih aman karena bersifat privat dan tidak dapat diakses dari bagian lain program, sehingga mengurangi risiko konflik data. Selain itu, variabel lokal cenderung lebih efisien dalam penggunaan memori karena hanya aktif selama fungsi berjalan. Sebaliknya, variabel global dapat diakses dari seluruh bagian program, termasuk semua fungsi. Meskipun hal ini membuat variabel global sangat berguna untuk menyimpan data yang bersifat umum atau perlu diakses banyak fungsi, namun penggunaannya rentan terhadap konflik karena bisa diubah dari berbagai tempat dalam program. Selain itu, variabel global dapat memboroskan memori karena tetap berada di memori selama program berjalan. Oleh karena itu, variabel lokal lebih cocok untuk menyimpan data sementara yang hanya dibutuhkan dalam satu fungsi, sedangkan variabel global lebih tepat digunakan untuk menyimpan data yang dibutuhkan secara menyeluruh dalam program. Contoh: int globalVar = 10; void tampil() { int lokalVar = 5; cout << globalVar << ", " << lokalVar; } RANGKUMAN Fungsi membantu memecah kode program besar menjadi bagian-bagian kecil yang modular dan dapat digunakan kembali. Komponen utama dalam fungsi: Name, Type, Parameter, Body Parameter terdiri dari dua jenis: Formal parameter: Dituliskan saat mendefinisikan fungsi Actual parameter: Diberikan saat memanggil fungsi C++ menggunakan metode pass by value secara default, di mana perubahan dalam fungsi tidak memengaruhi nilai asli. Untuk mencegah error saat mendefinisikan fungsi setelah main(), gunakan function prototype. Penggunaan variabel global dan lokal harus disesuaikan dengan kebutuhan dan ruang lingkup data.