# Tugas Pendahuluan Modul 5: Do-While, For, dan Switch Nama: Kayla Annaya Khairulainy NPM: 2206060605 ## 1. Teori <span style="color:red">(10 poin)</span> ### Jelaskan secara singkat apa itu perulangan Do-While! Adakah keunggulan yang ditawarkan oleh Do-While daripada jenis-jenis perulangan lainnya? **Jawaban:** *Loop do-while* merupakan sebuah *statement* yang dapat mengulang suatu fungsi apabila kondisi setelah kode tersebut dijalankan terpenuhi [1]. Pengulangan ini memiliki sifat yaitu mengecek kondisi setelah fungsi dijalankan sebanyak setidaknya satu kali, apakah kondisi tersebut memenuhi syarat atau tidak. Sehingga *loop* ini disebut sebagai *exit controlled loop* atau *post-tested loop* [1]. *Do-while statement* sebagai metode pengulangan mungkin tidak memiliki keunggulan yang signifikan dalam hal melakukan pengulangan itu sendiri, karena memakai sistem yang sama dengan *loop* lainnya dimana *loop* akan berjalan apabila kondisi memenuhi syarat. Namun, salah satu pembeda yang dapat menjadi unggulan dari *do while loop* dari *loop* lainnya adalah pada pengulangan ini, fungsi dalam *statement* pasti dijalankan setidaknya sekali walaupun kondisi awal yang masuk tak sesuai dengan syarat [2]. Hal ini dapat berguna karena *user* dapat melihat fungsi yang dijalankan program meskipun kondisi yang diberikan tak sesuai. Selain itu, *do while* loop cenderung lebih mudah dipahami dan dibaca oleh orang awam sehingga penggunaannya inklusif [2]. Cara kerja *loop do-while* adalah 1. Program akan mengeksekusi kode *statement* pada *loop* sehingga menghasilkan suatu kondisi (*output*). 2. *Output* akan dicek. 3. Apabila *output* TRUE, maka program kembali ke kode atasnya dan akan menjalankan *loop* kembali. 4. Apabila *output* FALSE, maka program akan keluar dari *loop* dan mengeksekusi kode setelah blok kode pengulangan. **Referensi:** [1] “do…while Loop in C,” GeeksForGeeks. [Online]. Available: https://www.geeksforgeeks.org/c-do-while-loop/. [Accessed: 18-Mar-2024] [2] "What is Do While Loop in C?," Shiksha Online. [Online]. Available: https://www.shiksha.com/online-courses/articles/introduction-do-while-loop-in-c/. [Accessed: 18-Mar-2024] ## 2. Analisis <span style="color:red">(60 poin)</span> ### Coba perhatikan 3 potongan program berikut: ### Program 1 ```c switch(expression) { case condition1: //code 1 case condition2: //code 2 case condition3: //code 3 } ``` ### Program 2 ```c switch(expression) { case condition1: //code 1 break; case condition2: //code 2 break; case condition3: //code 3 break; } ``` ### Program 3 ```c switch(expression) { case condition1: //code 1 break; case condition2: //code 2 break; case condition3: //code 3 break; default: //code 4 break; } ``` ### A. Coba jelaskan bagaimana alur eksekusi dari ketiga program tersebut! ### B. Adakah letak perbedaan dari mekanisme percabangan di antara ketiga program tersebut? Jika iya, apa perbedaannya? ### C. Apabila condition1, condition2, dan condition3 sama untuk ketiga program tersebut, apakah bagian kode yang dieksekusi beda, atau sama? Jelaskan! ### D. Pada program 3, menurut kalian apakah `break;` dibutuhkan atau tidak untuk default case? ### E. Untuk masing-masing program di atas, menurut kalian apakah mungkin untuk menggantikan percabangan switch-case dengan percabangan if sebagai alternatif? **Jawaban:** #### A. Alur eksekusi dari program 1. Program 1 Alur eksekusi program 1 dimulai dengan mengecek kondisi pada ekpresi awal dimulai dari kasus yang paling pertama, lalu lanjut ke kasus kedua sampai kasus terakhir. Kemudian, program akan lanjut melakukan fungsi sesuai dengan kasus yang cocok dengan kondisi yang ada dan mengakhiri program. Kekurangan program ini adalah akan terjadi *error* apabila *user* memasukkan kondisi atau *input* yang tidak masuk ke dalam kasus manapun. 2. Program 2 Alur program 2 dimulai dengan mengecek *input* yang dimasukkan *user* pada masing-masing kasus yang ada dimulai dari kasus pertama. Namun, apabila ada kasus yang cocok dengan *input*, maka *loop* akan segera berhenti sehingga program tak mengecek kondisi pada kasus setelah kasus yang cocok tersebut. Program kemudian akan menjalankan fungsi yang ada di dalam program dan mengakhiri program. 3. Program 3 Alur eksekusi program 3 mirip dengan program 2. Program ini akan mengecek kondisi mulai dari kasus yang pertama dan akan berhenti untuk mengecek kasus setelahnya apabila suatu kondisi yang dibutuhkan untuk kasus tersebut sudah terpenuhi. Program ini kemudian akan menjalankan fungsi yang ada di dalam kasus tersebut. Kemudian, program berakhir. Perbedaannya dengan kasus 2 adalah program 3 memiliki kode *default* yang memiliki fungsi mirip dengan *else*. Kode ini akan menghindari *error* dalam program apabila terdapat *input* yang tak masuk ke dalam kasus manapun dengan memberikan fungsi lain bagi kondisi tersebut. #### B. Adakah letak perbedaan dari mekanisme percabangan di antara ketiga program tersebut? Jika iya, apa perbedaannya? Ada 2 perbedaan percabangan yang paling mencolok di antara ketiga program tersebut. 1. Antara program 1 dan program 2 dan 3 terdapat perbedaan cabang yaitu program 1 akan terus mengalir dari satu kasus ke kasus lainnya tanpa adanya cabang *shortcut* menuju akhir dari kode sehingga semua kasus ditelusuri, sedangkan pada program 2 dan 3 terdapat cabang *shortcut* menuju akhir kode ketika kondisi sesuai dengan persyaratan (TRUE) sehingga kasus yang ditelusuri tetap berurutan namun *loop* akan langsung berhenti ketika menemukan kondisi yang sesuai. 2. Antara program 2 dan program 3 yaitu program 2 tidak memiliki cabang setelah kasus terakhir dan akan langsung menyelesaikan kasus terakhir sehingga bila ingin menjalankan fungsi tertentu, maka *input* yang diberikan harus masuk ke dalam salah satu kondisi. Pada program 3, terdapat satu cabang yang menjalankan fungsi tertentu bagi kondisi yang tidak masuk ke dalam persyaratan kasus manapun, baru program berakhir. #### C. Apabila condition1, condition2, dan condition3 sama untuk ketiga program tersebut, apakah bagian kode yang dieksekusi beda, atau sama? Jelaskan! Pemahaman saya terhadap soal ini adalah apabila ketiga kondisi sama dan hal ini berlaku pada ketiga program. Bila fungsi kode/*statement* sama : Kode yang diekskusi sama dan akan menghasilkan *output* yang sama pula **apabila** fungsi dalam *statement* tiap kasus sama. *Break* pada program 2 dan 3 tak begitu berpengaruh pada *output* karena ketiga kasus memiliki kondisi dan perintah yang sama, yang membedakan adalah untuk program 2 dan 3, kode yang dieksekusi hanyalah kode pada kasus 1. Bila fungsi kode/*statement* pada tiap kasus berbeda : Ketiga program akan sama-sama mengeksekusi kode untuk kasus 1 dan akan menghasilkan *output* yang sama, namun perbedaan akan berada pada baris berikutnya. Setelah menjalankan kode pada kasus 1, program 1 akan menjalankan kode pada kasus 2 dan 3 pula karena kondisi yang masuk sama-sama memenuhi syarat untuk kasus 2 dan 3, meningat syarat ini sama dengan syarat/*condition* yang ada pada kasus 1. Sehingga, pada program 1 akan terdapat **3 buah *output*.** Namun, program 2 dan 3 tidak akan melanjutkan untuk mengeksekusi kode untuk kasus 2 dan 3 dikarenakan adanya *break* setelah setiap kasus. Sehingga, pada program 2 dan 3 akan terdapat **1 buah *output*.** #### D. *Break* pada *default* Menurut saya pribadi, *break* pada *default* tak dibutuhkan karena *default* sendiri sudah berada di paling akhir program dan akan lanjut ke dalam blok kode di luar *switch* secara otomatis. Sehingga, penempatan *break* akan sia-sia dan tidak efisien, walaupun kode tersebut tidak akan berefek apa-apa terhadap keberlangsungan kode (tidak mengganggu). #### E. Penggantian percabangan *switch-case* dengan *if* Menurut saya sangat memungkinkan untuk *switch-case* ini digantikan dengan kode *if* yang dilengkapi dengan *else*. Prinsip *switch-case* dan *if-else* memiliki kesamaan yaitu akan mengeksekusi kode fungsi apabila kondisi yang masuk sesuai dengan syarat. Apabila kondisi tak sesuai, maka kode tidak akan dieksekusi. Kedua metode ini dapat digunakan untuk memberikan pilihan bagi komputer dan juga *user* untuk menjalankan fungsi. *If* dapat diibaratkan sebagai *case* yang menyatakan persyaratan kondisi yang dibutuhkan untuk menjalankan kode. *Else* dapat diibaratkan sebagai *default* yang memungkinkan untuk dilakukan fungsi lain apabila kondisi tidak masuk ke dalam persyaratan kondisi manapun. Hal ini dilakukan untuk mencegah terjadinya *error* dalam program. **Referensi:** - “Modul 5: Do-While, For, dan Switch,” Digilab. [Online]. Available: https://emas2.ui.ac.id/pluginfile.php/4390943/mod_resource/content/1/Modul%205%20-%20Do%20While%2C%20For%2C%20dan%20Switch.pdf. [Accessed: 19-Mar-2024] ## 3. Programming <span style="color:red">(30poin)</span> ### Amati kode berikut: ```c #include <stdio.h> int main(void){ int i, j, n; printf("Masukkan angka: "); scanf("%d", &n); for (i = 0;i < n;i++){ for (j = 0;j <= i;j++){ printf("*"); } printf("\n"); } return 0; } ``` ### Program tersebut bila dijalankan akan menghasilkan contoh sebagai berikut ``` Masukkan angka: 5 * ** *** **** ***** ``` ### Bisakah Anda memodifikasi program di atas agar menghasilkan contoh sebagai berikut: ``` Masukkan angka: 5 * ** *** **** ***** ``` **Jawaban:** ```c #include <stdio.h> int main(void) { int i, j, n; printf("Masukkan angka: "); scanf("%d", &n); // untuk menentukan jumlah baris pada program for (i = 0; i < n; i++) { // untuk menampilkan *space* kosong dengan tanda spasi sehingga dapat terlihat gambar segitiga for (j = n; j > i; j--) { printf(" "); } // untuk menampilkan bintang (*) untuk menentukan bentuk dari segitiga itu sendiri for (j = 0; j <= i; j++) { printf("*"); } printf("\n"); } return 0; } ``` **Referensi:** - “Modul 5: Do-While, For, dan Switch,” Digilab. [Online]. Available: https://emas2.ui.ac.id/pluginfile.php/4390943/mod_resource/content/1/Modul%205%20-%20Do%20While%2C%20For%2C%20dan%20Switch.pdf. [Accessed: 19-Mar-2024]