MODUL AJAR BAB 2 : Strategi Algoritma dan Pemrograman A. Identitas Modul Nama Penyusun : Ishlahus Sa’adah,S.Kom Tahun Penyusunan : 2023 Satuan Pendidikan : MAN Kelas/Fase : XI (Sebelas)/F Mata Pelajaran : Informatika B. Tujuan Pembelajaran ❶ Memahami proses pemrograman. ❷ Menguasai konsep dan penerapan rekursi. ❸ Menganalisis beberapa strategi algoritmik (algoritma greedy dan pemrograman dinamis) secara kritis untuk menyelesaikan suatu permasalahan dengan memberikan justifikasi efisiensi. ❹ Menguasai konsep dan penerapan larik dalam pemrograman. ❺ Menguasai konsep dan penerapan karakter dan string dalam pemrograman. ❻ Menerapkan strategi algoritmik tersebut ke dalam suatu program yang lebih kompleks Quote of the Day Kamu bukan adonan donat yang jika didiamkan sudah berkembang sendiri. Persiapkan bekal dan cari keberuntunganmu C. Materi Pembelajaran (Berdasarkan Rangkuman Buku Ajar Informatika kelas XI) 1) Proses Pemrograman Coding adalah proses menulis kode program. Pemrograman menurut “Oxford Dictionary of Computer Science” adalah seluruh aktivitas teknis yang dilakukan untuk menghasilkan suatu program , termasuk analisis kebutuhan dan seluruh langkah desain dan implementasi suatu program. Sedangkan orang yang alhi dalam pemrograman di sebut pemrogram atau programmer. Untuk menghasilkan suatu program yang benar dan bisa digunakan manusia, ada empat tahap dalam melakukan pemrograman, yaitu: Menganalisis Permasalahan (Analyzing)
Pemrogram menganalisis suatu kebutuhan yang menghasilkan definisi permasalahan yang perlu diselesaikan dengan program. Tahap ini menghasilkan pernyataan masalah yang menjelaskan masukan, keluaran, serta batasan-batasan dari program yang akan dibuat. Hasil tersebut dilakukan melalui proses berfikir komputasional. Berfikir komputasional adalah konsep berfikir melalui proses analisis dengan tahapan dekomposisi (menyederhanakan sesuatu yang rumit menjadi sederhana), Pengenalan pola (Mengenali pola persamaan/perbedaan dengan tujuan memprediksi solusi dalam menyelesaikan masalah), abstraksi (mengambil fitur-fitur penting dan mengabaikan fitur yang tidak penting) dan algoritma (langkah-langkah yang urut dalam menyelesaikan masalah). Mendesain Solusi (Problem Solving) Pemrogram merencakan strategi untuk menghasilkan keluaran berdasarkan masukan yang diterima. Mengimplentasikan Solusi dalam Bentuk Program (Coding). Pada tahap ini pemrogram akan menulis kode program untuk menjalankan solusi yang telah direncakan menggunakan suatu bahasa pemrograman. Bahasa pemrograman adalah sekumpulan aturan (sintaks) yang digunakan untuk menulis program komputer. Contohnya Python, Java, C++, Javascript, Ruby dan lain sebagainya. Menguji Program (testing) Setelah program dapat dijalankan, program tersebut harus diuji untuk memastikan program berjalan sesuai keinginan. Salah satu cara pengujian adalah menggunakan kasus uji (case test). Case test artinya membuat beberapa kasus yang mungkin terjadi kemudian mengujinya pada coding yang sudah dibuat, melihat hasilnya sesuai atau tidak a). Kegiatan Pembelajaran Praktik Materi Proses Pemrograman dengan bahasa C++ Pada dasarnya setiap bahasa pemrograman itu sama, yang membedakan adalah sintak dan simbol yang digunakan. Sintak merupakan aturan-aturan, prinsip, dan proses yang mengatur struktur dari bahasa pemrograman. Baik, apa saja sih sintaks dasar yang harus dipahami dari bahasa C++?, Mari kita bahas: Struktur Dasar Pemrograman C++ Bentuk atau struktur dasar program yang dibuat dengan C++ terdiri dari tiga bagian yaitu bagian include, bagian namespace, bagian fungsi.
*Penjelasan detail setiap bagian di atas* Bagian Deklarasi Include Pada bagian ini, kita mendefinisikan library (pustaka) apa saja yang akan kita gunakan di dalam program. Pada contoh di atas, kita menggunakan pustaka iostream. Library ini berisi fungsi-fungsi untuk melakukan input dan output. Bagian Deklarasi Namespace Bagian ini sebenarnya bersifat opsional, bisa ditulis bisa tidak. Pada contoh di atas, kita menggunakan namespace std. Karena fungsi-fungsi pada iostream dibungkus dalam namespace std. Apabila kita tidak menggunakan namespace std, maka untuk menggunakan fungsi cin dan cout yang ada pada iostream harus diawali dengan std:: Seperti ini: Jika tidak ingin menulis std:: terus-menerus, maka gunakanlah namespace std Bagian Fungsi Bagian ini adalah baigan terpenting, di sinilah kita akan banyak menulis kode program. Fungsi main() adalah fungsi yang akan dieksekusi pertamakali saat program dibuka. Fungsi ini wajib ada di setiap program yang dibuat untuk dieksekusi.
Penulisan Statement dan Ekspresi Statemen dan ekspresi adalah perintah-perintah yang ditulis di dalam fungsi. Penulisan statement dan ekspresi wajib diakhiri dengan titikkoma (;).Apabila tidak ada titik-koma, maka program akan error. White Space White Space biasanya dibuat dengan tab dan spasi. Penulisan block kode Blok kode adalah kumpulan dari beberapa statemen yang dibungkus dengan tanda kurung kurawal {...}
Pada contoh di atas terdapat dua blok program. Blok pertama adalah blok fungsi main() lalu blok kedua adalah blok perulangan for. Penulisan Komentar Komentar adalah bagian kode yang akan diabaikan oleh komputer. Ada dua cara penulisan komentar pada C++:Menggunakan garis miring ganda // atau garis miring bintang /**/. Komentar biasanya digunakan untuk memberikan informasi tambahan pada kode program dan juga menonaktifkan statement maupun blok kode. Penulisan String dan Karakter String merupakan kumpulan karakter atau kita juga bisa sebut dengan teks. String dalam program C++ ditulis dengan diapit tanda ptik ganda ("...") dan untuk karakter ditulis dengan tanda petik tunggal ('...').
2) Berfikir Komputasional Berikut ini adalah beberapa konsep yang digunakan dalam menyelesaikan persoalan komputasi, yaitu: Rekursi Rekursi adalah konsep dalam pemrograman di mana sebuah algoritma dapat memecah masalah menjadi bagian-bagian yang lebih kecil, kemudian memanggil dirinya sendiri untuk menyelesaikan masalah. Mirip dengan ide pekerjaan yang berulang-ulang, di mana kita memecah tugas besar menjadi tugas-tugas lebih kecil sampai tugas tersebut cukup sederhana untuk diselesaikan. . Algoritma Greedy Greedy secara harfiah berarti rakus atau tamak. Meskipun dalam pengertian sehari-hari, kata “rakus” dan “tamak” memiliki konotasi negatif, namun dalam konteks informatika, kita mengartikan greedy dalam konteks sebagai salah satu strategi penyelesaian masalah yang dapat berguna dalam merancang sebuah algoritma atau solusi bagi sebuah permasalahan komputasiona Sederhananya, teknik greedy berpedoman untuk selalu memilih serangkaian langkah yang optimal secara lokal untuk mendapatkan hasil akhir yang optimal secara global Pemrograman Dinamis Dalam menyelesaikan sebuah permasalahan optimasi (mencari nilai terbesar/ terkecil), terkadang kita harus memperhitungkan beberapa kemungkinan pengambilan langkah untuk menyelesaikan permasalahan tersebut. Kemungkinan-kemungkinan tersebut mungkin memiliki akibat/konsekuensi terhadap langkah-langkah selanjutnya, sehingga pendekatan seperti teknik greedy mungkin tidak akan menghasilkan jawaban yang optimal. Dalam hal ini, teknik dynamic programming (DP) mungkin akan lebih sesuai diterapkan. 3) Algoritma dan Bahasa Pemrograman
Larik (Array) Program perlu menyimpan banyak data dan deklarasi variabel klasik yang selama ini dipelajari mungkin tidak cukup. Oleh karena itu, diperlukan suatu cara untuk menyimpan kumpulan data tadi ke dalam suatu variabel berindeks. Salah satu cara dalam pemrograman untuk mengimplementasikan hal tersebut adalah larik, atau array Latihan Larik. Rancang dan buatlah sebuah program yang membaca N buah bilangan dan mencetaknya secara terbalik. Misalnya jika diberikan masukan 1 2 3 4 5 6, program akan mencetak 6 5 4 3 2 1 Jawaban: Karakter dan String Program tidak hanya mengolah data berupa angka. Program juga dapat mengolah data berupa kata-kata, baik yang sifatnya natural seperti bahasa manusia, atau yang bersifat formal dengan aturan tertentu, misalnya seperti penulisan senyawa kimia. Oleh karena itu, bahasa pemrograman dilengkapi dengan mekanisme untuk menyimpan data yang sifatnya adalah karakter dan string. String adalah rangkaian karakter dalam pemrograman. Karakter bisa berbentuk simbol, huruf, angka. Latihan string: Rancang dan buatlah sebuah program yang membaca sebuah kata sandi dan mencetak jumlah karakter yang berupa angka, huruf, dan simbol. Bedakan huruf kapital dan non kapital. Jawaban:
4) Proyek Praktik Lintas Bidang Praktik Lintas Bidang ini dirancang agar peserta didik dapat menganalisis permasalahan secara berkelompok dan membuat programnya. Perbedaannya adalah, problem yang diberikan lebih kompleks dari sebelumnya dan dapat diselesaikan menggunakan lebih dari satu strategi algoritmik. Permasalahan knapsack adalah salah satu permasalahan komputasional yang cukup populer dan dapat digunakan untuk mengilustrasikan bagaimana strategi penyelesaian masalah yang telah dipelajari pada topik Berpikir Komputasional (yaitu greedy dan dynamic programming) dapat digunakan untuk menyelesaikan permasalahan komputasional, dan bagaimana algoritma yang dihasilkan kemudian diimplementasikan menjadi sebuah algoritma. Latihan Knapsack: Apakah jenis optimasi pada permasalahan knapsack? Apakah mencari minimum, ataukah maksimum? Dan buatlah skem apada pemrogramannya (Coding). Jawaban: Knapsack adalah permasalahan optimasi mencari maksimum, yaitu total nilai barang yang terbesar yang dapat dimasukkan ke dalam wadah. Fungsi tujuan dari optimasi pada permasalahan knapsack adalah total nilai barang yang dimasukkan ke dalam wadah. Implementasi pada program sebagai berikut:
]