# Tugas Pendahuluan - Introduction to C ``` Nama : Radithya Fawwaz Syahdi NPM : 2306203066 ``` > Note: Soal Programming tidak perlu dicantumkan referensi, hanya soal Teori saja yang perlu referensi minimal 2. ## Teori ### 1. Sebutkan dan jelaskan minimal 10 tipe data dalam bahasa C! (10 poin) --- Dalam pemrograman C, tipe data pada umumnya dibagi menjadi empat tipe, yaitu tipe data dasar (int, float, char, double), tipe data turunan (array, pointer, structure, union), tipe data enumerasi (enum), dan tipe data kosong (void) 1. Tipe Data Integer Tipe data integer dalam C digunakan untuk menyimpan bilangan bulan, termasuk bilangan positif, negatif, dan nol tanpa bagian desimal. Nilai oktal, heksadesimal, dan desimal dapat disimpan dalam tipe data int dalam C. Kata kunci int digunakan untuk mendeklarasikan suatu variabel sebagai bilangan bulat, seperti : ```c int variabel_bulat = 1 ; ``` Rentang : -2.147.483.648 hingga 2.147.483.647 Ukuran : 4 byte Spesifikasi Format : %d 2. Tipe Data Character Tipe data character memungkinkan variabelnya untuk menyimpan hanya satu karakter. Ukuran karakter adalah 1 byte. Ini adalah tipe data paling dasar dalam C. Tipe ini menyimpan satu karakter dan membutuhkan satu byte memori di hampir semua kompiler. Kata kunci char digunakan untuk mendeklarasikan suatu variabel bertipe karakter, seperti : ```c char variabel_karakter = 'a' ; ``` Rentang : -128 hingga 127 atau 0 hingga 255 Ukuran : 1 byte Spesifikasi Format : %c 3. Tipe Data Float Dalam pemrograman C, tipe data float digunakan untuk menyimpan nilai floating-point. Float dalam C digunakan untuk menyimpan nilai desimal dan eksponensial. Float digunakan untuk menyimpan angka desimal atau angka dengan nilai floating point dengan presisi tunggal. Kata kunci float digunakan untuk mendeklarasikan suatu variabel sebagai floating point, seperti : ```c float variabel_ambang = 7.5 : ``` Rentang : 1.2E-38 hingga 3.4E+38 Ukuran : 4 byte Penentu Format : %f 4. Tipe Data Double Tipe data Double dalam C digunakan untuk menyimpan angka desimal atau angka dengan nilai floating point dengan presisi ganda. Tipe data ini digunakan untuk menentukan nilai numerik yang menyimpan angka dengan nilai desimal dalam C. Tipe data double pada dasarnya adalah tipe data presisi yang mampu menampung 64 bit angka desimal atau floating point. Karena double memiliki presisi yang lebih tinggi dibandingkan float, maka jelaslah bahwa tipe ini menempati dua kali lipat memori yang ditempati oleh tipe floating point. Tipe ini dapat dengan mudah menampung sekitar 16 hingga 17 digit setelah atau sebelum titik desimal. Kata kunci double digunakan untuk mendeklarasikan suatu variabel sebagai floating point presisi ganda, seperti : ```c double variabel_banyak = 2312312312.123123 ; ``` Kisaran : 1.7E-308 hingga 1.7E+308 Ukuran : 8 byte Penentu Format : %lf 5. Tipe Data Void Tipe data void dalam C digunakan untuk menentukan bahwa tidak ada nilai yang ada sehingga tidak memberikan nilai hasil kepada pemanggilnya. Tipe data ini tidak memiliki nilai serta tidak memiliki operasi dan digunakan untuk tidak mewakili apa pun. Void digunakan dalam berbagai cara sebagai tipe pengembalian fungsi, argumen fungsi sebagai void, dan penunjuk ke void. Contoh penerapan void pointers adalah : int val = 30 ; void* ptr = &val ; printf("%d", *(int*)ptr) ; Output : 30 6. Tipe Data Array Tipe data array memungkinkan penyimpanan serangkaian elemen berukuran tetap dengan tipe yang sama. Array menyediakan mekanisme untuk menggabungkan beberapa target data yang sama dengan nama yang sama. Indeks digunakan untuk mengakses elemen array, dengan indeks 0 untuk masukan pertama. Ukuran array ditetapkan pada waktu deklarasi dan tidak dapat diubah selama eksekusi program. Komponen array ditempatkan di wilayah memori yang berdekatan. Berikut adalah contoh deklarasi dan penggunaan array yang terdiri hanya dari bilangan bulat : ```c int numbers[5] ; numbers[0] = 10 ; numbers[1] = 20 ; numbers[2] = 30 ; numbers[3] = 40 ; numbers[4] = 50 ; for (int i = 0 ; i < 5 ; i++) { printf("%d ", numbers[i]) ; } ; printf("\n") ; Output : 10 20 30 40 50 ```c 7. Tipe Data Pointer Tipe data pointer melacak alamat memori tipe data lain. Saat pointer dideklarasikan, tipe data yang dirujuknya disebutkan terlebih dahulu, lalu nama variabel didahului oleh tanda bintang (*). Pengaksesan data yang salah dapat diatasi dengan mengubah nilai variabel menggunakan pointer lalu menentukan alamat memori variabel tersebut. Pointer umumnya digunakan dalam tugas-tugas seperti pointer fungsi, struktur data, dan alokasi memori dinamis. Berikut adalah contoh mendeklarasikan dan menggunakan pointer: ```c int num = 42 ; int *ptr ; ptr = num ; printf("%d\n", *ptr) ; Output : 42 ``` 8. Tipe Data Struktur Tipe data struktur memungkinkan pembuatan tipe data komposit dengan memungkinkan pengelompokan banyak tipe data di bawah satu nama. Struktur memungkinkan untuk membuat struktur data unik dengan menggabungkan berbagai jenis variabel. Karakteristik tipe data struktur adalah : a. Anggota atau bidang struktur digunakan untuk merujuk ke setiap variabel di dalamnya. b. Tipe data apa pun, termasuk berbagai struktur, dapat menjadi anggota struktur. c. Anggota struktur dapat diakses dengan menggunakan operator titik (.). Contoh penerapan deklarasi struktur adalah sebagai berikut : ```c struct Buah { int harga ; char nama ; float berat ; } ; ``` 9. Tipe Data Union Tipe data union memungkinkan penyimpanan berbagai tipe data dalam alamat memori yang sama. Berbeda dengan struktur, di mana setiap anggota memiliki ruang memori terpisah, semua anggota union berbagi satu ruang memori. Nilai hanya dapat dipegang oleh satu anggota union pada saat tertentu. Union sangat berguna dalam merepresentasikan banyak tipe data secara bergantian. Seperti struktur, anggota union dapat diakses dengan menggunakan operator titik (.). Contoh dari pendeklarasian Union adalah : ```c union NumericValue { int intValue ; float floatValue ; char stringValue[20] ; } ; ``` 10. Tipe Data Enumerasi Sekumpulan konstanta bernama atau enumerator yang mewakili kumpulan nilai yang terhubung dapat didefinisikan dalam bahasa C menggunakan tipe data enumerasi (enum). Enumerasi memungkinkan untuk memberi nama yang masuk akal pada sekelompok nilai penting dan membuat kode lebih mudah dibaca dan dikelola. Berikut contoh pendefinisian enumerasi dalam bahasa C : ```c enum Warna { Merah, Kuning, Hijau, Biru, } ; ``` ### Referensi: - “Data Types in C,” GeeksforGeeks, Jun. 30, 2015. [Online]. Available : https://www.geeksforgeeks.org/data-types-in-c/. [Diakses : 09 Febuari 2025] - "Data Types in C," JavaTpoint, Jan. 05, 2014. [Online]. Available : https://www.javatpoint.com/data-types-in-c. [Diakses : 09 Febuari 2025] --- ### 2. Jelaskan apa yang dimaksud dengan #include <math.h> dalam bahasa C! (10 poin) --- #include adalah cara untuk menyertakan file standar atau yang ditentukan pengguna dalam program dan biasanya ditulis di awal program C. Direktif praprosesor #include dibaca oleh praprosesor dan memerintahkannya untuk memasukkan konten file header yang ditentukan pengguna atau sistem ke dalam program C berhubungan. File-file ini sebagian besar diimpor dari file header luar. Proses mengimpor berkas semacam itu yang mungkin ditentukan oleh sistem atau pengguna dikenal sebagai Penyertaan Berkas (File Inclusion). Direktif praprosesor ini memberi tahu kompiler untuk menyertakan berkas dalam program kode sumber. Ada dua metode utama untuk menggunakan #include dalam program C, yaitu : a. Menggunakan tanda kurung siku <> untuk mengakses file header sistem yang telah ada sebelumnya yang terletak di direktori sistem standar. Saat mengimpor berkas menggunakan metode ini, praprosesor menggunakan jalur direktori yang telah ditentukan sebelumnya untuk mengakses berkas. Contoh penerapannya adalah : ```c #include <math.h> ``` b. Menggunakan tanda kutip ganda "" untuk mengakses berkas header program pengguna atau berkas yang ditentukan pengguna. Saat menggunakan metode ini, praprosesor mengakses direktori saat ini tempat “header_file” sumber berada atau direktori sistem standar. ```c #include "user_defined_file" ``` Saat terdapat barisan direktif #include <math.h> di awal program C, artinya file header tersebut diakses dari direktori file standar sehingga dapat digunakan dalam program C tersebut. Header math.h mendefinisikan dan memungkinkan berbagai fungsi matematika untuk digunakan dalam program tersebut, seperti sqrt (akar), log (logaritma), dan lain sebagainya. Semua fungsi yang tersedia di file header ini menerima double sebagai argumen dan mengembalikan double sebagai hasilnya. ### Referensi: - “#include in C,” GeeksforGeeks, Nov. 25, 2019. [Online]. Available : https://www.geeksforgeeks.org/c-c-include-directive-with-examples/. [Diakses : 09 Febuari 2025] - “C Library - <math.h>,” Tutorials Point, Jun. 08, 2019. [Online]. Available : https://www.tutorialspoint.com/c_standard_library/math_h.htm. [Diakses : 09 Febuari 2025] --- ### 3. Jelaskan perbedaan antara for, while, dan do-while loop! (10 poin) --- Loop dalam pemrograman digunakan untuk mengulang blok kode hingga kondisi yang ditentukan terpenuhi. Pernyataan loop memungkinkan programmer untuk mengeksekusi pernyataan atau sekelompok pernyataan beberapa kali tanpa pengulangan kode. Dalam bahasa C, loop umumnya dibagi menjadi tiga jenis, yaitu : 1. Do/While Loop Do/while loop merupakan varian while loop. Loop ini akan mengeksekusi blok kode satu kali, sebelum memeriksa apakah kondisinya benar, kemudian akan mengulang perulangan selama kondisinya benar. Loop akan selalu dijalankan minimal satu kali, bahkan jika kondisinya salah, karena blok kode dijalankan sebelum kondisinya diuji. Sintaksi do/while loop pada umumnya adalah : ```c do { // Kode yang akan dieksekusi } while (condition) ; ``` 2. While Loop While loop hanya bergantung pada pengecekan kondisi pengujian. Apabila kondisinya benar, kode di dalam loop ini akan dieksekusi terus-menerus selama kondisinya tetap benar. Loop akan terputus ketika kondisinya salah akibat diperbarui di dalam loopnya sendiri sehingga kode akan berhenti dieksekusi. Sintaksi while loop pada umumnya adalah : ```c while (condition) { // Kode yang akan dieksekusi } ; ``` 3. For Loop For loop merupakan struktur kendali perulangan yang memungkinkan programmer untuk menuliskan perulangan yang akan dieksekusi sejumlah kali tertentu. For loop memungkinkan programmer untuk melakukan n langkah secara bersamaan dalam satu baris. Dalam pemrograman C, for loop memiliki tiga komponen yang berhubungan dengan variabel yang mengendalikan jalannya loop, yaitu : a. Initialization dieksekusi sebelum kondisi for loop diuji. Bagian ini biasanya digunakan untuk menetapkan variabel kontrol loop sebelum kode loop dieksekusi. b. Condition menentukan jika kode di dalam loop akan dieksekusi atau tidak. Apabila kondisi benar, loop akan berjalan dan tidak akan berhenti selama kondisi untuk mengeksekusinya tetap benar. c. Update dieksekusi setelah kode di dalam loop dieksekusi sekali. Bagian ini biasanya digunakan untuk memperbarui variabel kendali loop sehingga loop dapat dihentikan setelah jumlah iterasi yang ditetapkan. Sintaksi umum for loop adalah : ```c for (initialization ; condition ; update) { // Kode yang akan dieksekusi } ; ``` Perbedaan utama antara ketiga loop adalah sebagai berikut : 1. Kode di dalam do/while loop akan dieksekusi sekali sebelum kondisi untuk menjalankan loop diuji, sedangkan kode di dalam while dan for loop tidak akan dieksekusi sama sekali jika kondisi yang diuji salah. 2. Terdapat semikolon setelah condition di sintaksi do/while loop, sedangkan di sintaksi while dan for, tidak terdapat semikolon setelah condition. 3. Initialization dan update variabel kendali merupakan bagian dari sintaksi for loop, sedangkan initialization variabel kendali untuk while dan do/while loop harus ditetapkan di luar dan sebelum loop dimulai dan update variabel tersebut harus dilakukan di dalam kode kedua loop tersebut. ### Referensi: - “C Do While Loop,” W3School, Jan. 04, 2024. [Online]. Available : https://www.w3schools.com/c/c_do_while_loop.php. [Diakses : 09 Febuari 2025] - “C - Loops,” GeeksforGeeks, Oct. 08, 2022. ‌ [Online]. Available : https://www.geeksforgeeks.org/c-loops/. [Diakses : 09 Febuari 2025] --- ### 4. Jelaskan apa yang menyebabkan terjadinya infinite loop? Hal ini dapat terjadi pada jenis looping statement apa saja? (10 poin) --- Infinite loop dijalankan saat kondisi pengujian loop tidak pernah bernilai salah sehingga kode di dalam loop akan dijalankan berulang kali. Sebuah program tidak akan keluar dari infinite loop saat kondisinya selalu benar. Infinite loop dapat menghasilkan keluaran secara terus-menerus tanpa berhenti atau tidak sama sekali. Kesalahan infinite loop dapat diatasi dengan menggunakan variabel kendali loop yang selalu diperbarui setelah setiap kali kode di dalam loop dieksekusi. Pembaruan variabel kendali loop secara tahap-bertahap harus mendekati kondisi pengujian yang salah agar program dapat keluar dari loop. Infinite loop dapat terjadi pada ketiga jenis loop utama dalam pemrograman C, yaitu do/while, while, dan for loop. Pada do/while dan while loop, jika kondisi pengujian atau variabel kontrol loop selalu benar dan tidak diperbarui di dalam blok kode loop tersebut, maka kedua loop tersebut akan terus berjalan tanpa berhenti. ```c while (1) { // Kode Fawwaz } ; ``` Sedangkan pada for loop, kode di dalam akan terus berjalan jika ketiga komponen sintaksi loop kosong atau update variabel kendali loop tidak berfungsi semestinya baik di sintaksi maupun di dalam for loopnya. ```c for ( ; ; ) { // Kode Fawwaz } ; ``` ### Referensi: - “Infinite Loop in C,” JavaTpoint, Sep. 28, 2020. [Online]. Available : https://www.javatpoint.com/infinite-loop-in-c. [Diakses : 09 Febuari 2025] - “C - Loops,” GeeksforGeeks, Oct. 08, 2022. ‌ [Online]. Available : https://www.geeksforgeeks.org/c-loops/. [Diakses : 09 Febuari 2025] --- ## Programming ### 1. Buatlah program yang menampilkan output berupa teks "Hello [Nama Anda]!" dalam bahasa C! Cantumkan kode program dan screenshot hasil outputnya! (20 poin) --- ```c #include <stdio.h> int main () { printf("Hello Radithya Fawwaz Syahdi!") ; return 0 ; } ``` ![Screenshot 2025-02-10 020606](https://hackmd.io/_uploads/rJupBYIKyl.png) ![Screenshot 2025-02-10 123902](https://hackmd.io/_uploads/rkmPNVPK1l.png) ### 2. Himpunan A berisi bilangan 1 - 50 (inklusif) yang habis dibagi 3 dan 5. Dengan **WHILE** loop, buatlah program yang akan print semua elemen dari A, tetapi skip 5 bilangan pertama dari A! Cantumkan kode program dan screenshot hasil outputnya! (20 poin) --- ```c #include <stdio.h> int main () { int i = 0, j = 0 ; printf("Berikut adalah anggota dari himpunan A selain lima anggota pertamanya, yaitu :\n") ; while (i < 50) { i++ ; if (i % 3 == 0 || i % 5 == 0) { j++ ; if (j > 5) { printf("%d\n", i) ; } ; } ; } ; return 0 ; } ``` ![Screenshot 2025-02-10 025032](https://hackmd.io/_uploads/r1KSPKLt1l.png) ![Screenshot 2025-02-10 124351](https://hackmd.io/_uploads/B1GSNVPFJe.png) ### 3. Alien-Drawing? (20 poin) > Hint: Gunakan for loop. Buatlah program yang akan menampilkan output suatu shape dengan panjang yang ditentukan oleh user. Program akan menerima input panjang dari user, kemudian program akan menampilkan sebuah shape dengan panjang tersebut. Contoh output program adalah sebagai berikut: Test Case 1: Input: ```bash 1 ``` Output: ```bash * ``` Test Case 2: Input: ```bash 2 ``` Output: ```bash * * * * ``` Test Case 3: Input: ```bash 3 ``` Output: ```bash * * * * * * * * ``` Test Case 4: Input: ```bash 6 ``` Output: ```bash * * * * * * * * * * * * * * * * * * * * ``` --- ```c #include <stdio.h> int main () { int panjang ; printf("Masukkan panjang alas segitiga.\n") ; scanf("%d", &panjang) ; printf("\n") ; for (int barisan = 1 ; barisan <= panjang ; barisan++) { for (int ruang = 1 ; ruang <= panjang - barisan ; ruang++) { printf(" ") ; } ; for (int bintang = 1 ; bintang <= barisan ; bintang++) { if (bintang == 1 || bintang == barisan) { printf("* ") ; } else { printf(" ") ; } ; } ; printf("\n") ; } ; for (int barisan = 1 ; barisan <= panjang ; barisan++) { for (int ruang = 2; ruang <= barisan ; ruang++) { printf(" ") ; } ; for (int bintang = barisan ; bintang <= panjang ; bintang++) { if (bintang == 1 || bintang == barisan || bintang == panjang) { printf("* ") ; } else { printf(" ") ; } ; } ; printf("\n") ; } ; return 0 ; } ; ``` ![Screenshot 2025-02-10 150746](https://hackmd.io/_uploads/ryL-V4DK1g.png) ![Screenshot 2025-02-10 150807](https://hackmd.io/_uploads/r1uMN4wtkg.png)