---
# System prepended metadata

title: TP_ALPROG1_RayindaRasyaHammam_2506599964

---

# Tugas Pendahuluan - Module 1: Introduction to C Programming

```
Nama : Rayinda Rasya Hammam
NPM  : 2506599964
```

## TEORI & PEMAHAMAN KONSEP (70 Poin)

*Jawablah pertanyaan berikut dengan penjelasan yang jelas dan terstruktur.*

### 1. Struktur & Kompilasi Program C

Bahasa C adalah bahasa yang dikompilasi (*compiled language*). Jelaskan secara rinci **empat tahap** proses kompilasi dari kode sumber (*source code*) hingga menjadi file eksekusi (*executable*):

1. Preprocessing
2. Compiling
3. Assembling
4. Linking

**JAWABAN:**

* Penjelasan Tahap Preprocessing: Merupakan fase pertama yang berisi mengenai menghilangkan komentar yang tidak diperlukan, menambahkan *header files* seperti #include <stdio.h>, menambahkan nama makro yang sesuai seperti #define PI 3.14159, dan menghasilkan output file dengan format .i
* Penjelasan Tahap Compiling: file .i akan di kompilasi menjadi output file dengan format .s yangmenjadi bahasa assembly.
* Penjelasan Tahap Assembling: file dengan format .s sebagai input yang akan menghasilkan file dengan format .o sebagai outputnya. File ini sudah berada pada level mesin seperti kode biner 0 dan 1. Tetapi beberapa function seperti printf tidak di convert sehingga file belum dapat dijalankan
* Penjelasan Tahap Linking: merupakan fase akhir yang menjadikan function akan terhubung, file akan berubah menjadi file yang dapat dijalankan/*executable*

**REFERENSI:**
- [1]GeeksforGeeks, “Compiling a C Program: Behind the Scenes,” GeeksforGeeks, Nov. 12, 2015. https://www.geeksforgeeks.org/c/compiling-a-c-program-behind-the-scenes/
- [2]GeeksforGeeks, “Types of C files after its compilation,” GeeksforGeeks, Oct. 22, 2020. https://www.geeksforgeeks.org/c/types-of-c-files-after-its-compilation/ (accessed Feb. 10, 2026).

### 2. Tipe Data & Format Specifier 

Dalam bahasa C, kita harus mendeklarasikan tipe data secara eksplisit (*static typing*).
a. Jelaskan perbedaan mendasar antara tipe data `int`, `float`, `double`, dan `char` dari segi penggunaan memori (size in bytes) dan fungsinya.
b. Lengkapi tabel Format Specifier berikut yang digunakan dalam fungsi `printf` dan `scanf`.

| Tipe Data        | Format Specifier | Contoh Kode                 |
| ---------------- | ---------------- | --------------------------- |
| Integer          | ...              | `int voltaage = 5;`         |
| Floating Point   | ...              | `float resistance = 330.33` |
| Character        | ...              | `char unit = 'V';`          |
| Double Precision | ...              | `double current = 0.0045;`  |

**JAWABAN:**

* a) Penjelasan Tipe Data: Tipe data `interger` merupakan tipe data yang menyimpan nilai bilangan bulat dengan penggunaan memori sebesar 4 bytes. Tipe data `float` merupakan tipe data yang menyimpan nilai pada level desimal dengan penggunaan memori sebesar 4 bytes. Tipe data `double` merupakan tipe data yang menyimpan nilai pada level desimal yang lebih presisi dibandingkan tipe data float, sehingga penggunaan memori lebih besar sebanyak 8 bytes. Tipe data `char` merupakan tipe data yang menyimpan satu karakter seperti "A", "c", "6" dengan penggunaan memori yang kecil sebesar 1 byte
* b) Tabel (Isi titik-titik di atas):

| Tipe Data        | Format Specifier | Contoh Kode                 |
| ---------------- | ---------------- | --------------------------- |
| Integer          | %d               | `int voltaage = 5;`         |
| Floating Point   | %f               | `float resistance = 330.33` |
| Character        | %c               | `char unit = 'V';`          |
| Double Precision | %lf              | `double current = 0.0045;`  |

**REFERENSI:**
- [1]GeeksforGeeks, “Data Types in C,” GeeksforGeeks, Jun. 30, 2015. https://www.geeksforgeeks.org/c/data-types-in-c/
- [2]GeeksforGeeks, “UserDefined Data Types In C,” GeeksforGeeks, Oct. 16, 2023. https://www.geeksforgeeks.org/cpp/c-user-defined-data-types/ (accessed Feb. 10, 2026).

### 3. Input / Output (I/O) dalam C

Dalam bahasa C, operasi Input dan Output standar ditangani oleh pustaka khusus.
a) Sebutkan *header file* yang wajib disertakan (`#include`) untuk menggunakan fungsi I/O standar.
b) Jelaskan fungsi dan sintaks dasar dari `printf()` dan `scanf()`.
c) Apa fungsi dari simbol ampersand (`&`) pada fungsi `scanf` (misal: `scanf("%d", &variabel)`)?

**JAWABAN:**

* a) Header file: #include <stdio.h>
* b) Penjelasan `printf` dan `scanf`: `printf` merupakan fungsi yang digunakan untuk menampilkan output pada layar. `scanf` merupakan fungsi yang digunakan untuk membaca input yang sudah diinput oleh pengguna
* c) Fungsi simbol `&`: Fungsi simbol ampersand `&` ypada fungsi `scanf` yaitu fungsi dapat menuliskan alamat memori yang sesuai dengan variabel yang dimaksud

**REFERENSI:** 
- [1]GeeksforGeeks, “Header Files in C,” GeeksforGeeks, Jul. 02, 2020. https://www.geeksforgeeks.org/c/header-files-in-c-cpp-and-its-uses/
- [2]GeeksforGeeks, “Basic Input and Output in C,” GeeksforGeeks, Dec. 13, 2018. https://www.geeksforgeeks.org/c/basic-input-and-output-in-c/

### 4. Escape Characters

*Escape sequence* digunakan untuk merepresentasikan karakter non-grafis (tidak terlihat) atau karakter khusus. Jelaskan fungsi dari karakter berikut dan berikan contoh outputnya jika disisipkan dalam sebuah string:
a) `\n`
b) `\t`
c) `\"`
d) `\\`

**JAWABAN:**

* a) `\n`: digunakan untuk melanjutkan output berikutnya pada baris baru (enter dalam keyboard).
* b) `\t`: digunakan untuk memberikan spasi secara horizonal seperti penggunaan tab pada keyboard.
* c) `\"`: digunakan untuk memberikan tanda kutip dalam output teks karena jika hanya menggunakan tanda kutip biasa dalam penggunaan teks akan terhitung sebagai format teks yang tidak akan menampilkan tanda kutip pada output.
* d) `\\`: digunakan untuk memberikan backslash pada teks

**REFERENSI:** 
- [1]GeeksforGeeks, “Escape Sequence in C,” GeeksforGeeks, Aug. 29, 2017. https://www.geeksforgeeks.org/c/escape-sequence-in-c/
- [2]GeeksforGeeks, “C++ Escape Sequences,” GeeksforGeeks, Jun. 02, 2024. https://www.geeksforgeeks.org/cpp/cpp-escape-sequences/

### 5. Operator Aritmatika

Dalam bahasa C, terdapat beberapa operator dasar untuk perhitungan matematika.
a) Sebutkan **5 operator aritmatika** dasar (Simbol dan Fungsinya) yang digunakan dalam C.
b) Jelaskan secara spesifik aturan **Integer Division** (Pembagian Bilangan Bulat). Apa yang terjadi jika kita melakukan operasi `5 / 2` dalam C? Bagaimana cara agar hasilnya menjadi `2.5`?
c) Jelaskan fungsi operator **Modulo (`%`)** dan batasan tipe data apa yang boleh menggunakannya.

**JAWABAN:**

* a) Daftar Operator:`+` digunakan dalam penjumlahan, `-` digunakan dalam pengurangan, `*` digunakan untuk perkalian, `/` digunakan untuk pembagian, `%` digunakan untuk mencari sisa dari pembagian
* b) Penjelasan Integer Division: integer division merupakan aturan mengenai pembagian bilangan bulat `int` akan menghasilkan bilangan bulat juga. Jika terdapat operasi 5/2 maka akan menghasilkan nilai 2 yang dimana 2 bukan merupakan pembulatannya. Pada integer division hasil yang ditampilkan hanya pada bilangan bulatnya saja, tidak sampai desimal. Untuk mendapatkan hasil yang diinginkan dapat menggunakan tipe data yang berbeda seperti float ataupun double.
* c) Penjelasan Modulo: modulo `%` merupakan operasi yang mencari nilai sisa dari suatu pembagian aritmatik. modulo tidak bisa digunakan di sembarang nilai, modulo memiliki batasan hanya dapat digunakan untuk tipe data bilangan bulat seperti `int`.

**REFERENSI:** 
- [1]GeeksforGeeks, “Arithmetic Operators in C,” GeeksforGeeks, Jul. 28, 2015. https://www.geeksforgeeks.org/c/arithmetic-operators-in-c/
- [2]GeeksforGeeks, “Floor and Ceil of Integer Division,” GeeksforGeeks, Jul. 09, 2025. https://www.geeksforgeeks.org/dsa/floor-and-ceil-of-integer-division/

### 6. Conditional Statement (Percabangan)

Jelaskan perbedaan struktur dan kegunaan antara:
a) `if - else`
b) `switch - case`
Kapan sebaiknya kita menggunakan `switch` dibandingkan `if-else`? 

**JAWABAN:**

* Penjelasan `if-else`: if-else merupakan struktur berurut yang melihat kondisi pada nilai tertentu, jika kondisi pada if terpenuhi maka program akan menjalankan hanya pada kondisi tersebut, else jika seluruh kondisi yang telah dibuat tidak memenuhi.
* Penjelasan `switch-case`: mirip dengan if-else pada switch-case struktur lebih simple dan terarah dengan mencocokkan nilai yang diinginkan. Digunakan untuk kondisi yang bercabang dengan nilai yang pasti
* Perbedaan & Kapan digunakan: jika data yang dimiliki merupakan nilai yang bulat/pasti seperti "2". Jika data yang dimiliki bersifat interval seperti > 80 maka gunakan if-else.

**REFERENSI:** 
- [1]GeeksforGeeks, “C if else Statement,” GeeksforGeeks, Sep. 11, 2022. https://www.geeksforgeeks.org/c/c-if-else-statement/
- [2]GeeksforGeeks, “Switch Statement in C,” GeeksforGeeks, Oct. 04, 2022. https://www.geeksforgeeks.org/c/c-switch-statement/
### 7. Loops 

Jelaskan karakteristik utama dan perbedaan antara ketiga jenis *loop* berikut:
a) `for` loop
b) `while` loop
c) `do-while` loop
Manakah dari loop di atas yang menjamin kode di dalam blok akan dijalankan **minimal satu kali**? Jelaskan alasannya.

**JAWABAN:**

* a) `for`: loop yang digunakan untuk pengulangan terus-menerus dengan pengulangan yang pasti seperti pengulangan hanya 10 kali, 20 kali, 6 kali, dll.
* b) `while`: loop yang digunakan untuk pengulangan terus menerus hingga mencapai kondisi yang diinginkan
* c) `do-while`: merupakan loop yang mirip dengan `while` tetapi kondisi yang harus dipenuhi berada dibawah program atau program berjalan terlebih dahulu sebelum melihat kondisi apa yang diinginkan.
* Loop yang pasti jalan 1 kali & Alasan: `do-while` menjadi loop yang pasti berjalan karena kondisi yang harus dipenuhi berada dibawah program, yang mengharuskan untuk menjalankan program kondisi sebelum melihat apakah kondisi setelah program berjalan telah memenuhi. Pada `for` dan `while` kondisi dilihat pada bagian awal sebelum program kondisi dijalankan.

**REFERENSI:**
- [1]GeeksforGeeks, “C for Loop,” GeeksforGeeks, Aug. 22, 2022. https://www.geeksforgeeks.org/c/c-for-loop/
- [2]GeeksforGeeks, “while Loop in C,” GeeksforGeeks, Sep. 25, 2022. https://www.geeksforgeeks.org/c/c-while-loop/
- [3]GeeksforGeeks, “do...while Loop in C,” GeeksforGeeks, Oct. 04, 2022. https://www.geeksforgeeks.org/c/c-do-while-loop/

## PRAKTIK & DEBUGGING (30 Poin)

*Implementasikan logika pemrograman ke dalam kode C dan perbaiki kode yang error. Bagian ini tidak perlu referensi.*

### 8. Coding Aritmatika: Kalkulator Hukum Ohm (10 Poin)

Lengkapi *skeleton code* di bawah ini untuk menghitung Tegangan.
**Ketentuan:**

* Tipe data variabel harus **float**.
* Output ditampilkan dengan **2 angka di belakang koma**.

**Skeleton Code (Lengkapi bagian `...`):**

```c
#include <stdio.h>

int main() {
    // 1. Deklarasi variabel (gunakan tipe data float)
    float current, resistance, voltage;

    // 2. Input Arus
    printf("Masukkan Arus (Ampere): ");
    scanf("%f", &current); // TODO: Isi format specifier dan variabel arus

    // 3. Input Hambatan
    printf("Masukkan Hambatan (Ohm): ");
    scanf("%f", &resistance); // TODO: Isi format specifier dan variabel hambatan

    // 4. Hitung Tegangan (Rumus V = I * R)
    voltage = current * resistance ; // TODO: Tulis rumus aritmatika

    // 5. Tampilkan Hasil (Gunakan format %.2f untuk 2 desimal)
    printf("Tegangan yang dihasilkan: %.2f Volt\n", voltage); 

    return 0;
}

```

**Screenshot Output:**
![image](https://hackmd.io/_uploads/rycAVM_v-g.png)



### 9. Coding Flow Control: Selektor Kode Warna (10 Poin)

Lengkapi kode berikut menggunakan **Switch Case** untuk menentukan warna gelang resistor berdasarkan angka input (0-2).

**Skeleton Code (Lengkapi bagian `...`):**

```c
#include <stdio.h>

int main() {
    int code;

    printf("Masukkan kode angka warna (0-2): ");
    scanf("%d", &code);

    // TODO: Lengkapi struktur switch case berikut
    switch (code) {
        case 0:
            printf("Warna: Hitam\n");
            break;
        case 1:
            printf("Warna: Kuning\n"); // Lengkapi
            break ; // Seharusnya di sini apa?
        case 2:
            printf("Warna: Merah\n");
            break;
        default:
            printf("Warna tidak dikenali / belum terdaftar\n");
            break ; // Seharusnya di sini apa?
    }

    return 0;
}

```

**Screenshot Output:**
![image](https://hackmd.io/_uploads/HyWtNf_vZg.png)
![image](https://hackmd.io/_uploads/H1yB0V_w-e.png)



### 10. Debugging (10 Poin)

Kode berikut bertujuan menghitung Daya, namun memiliki **5 kesalahan** (syntax/logic). Temukan, jelaskan, dan perbaiki.

**Kode Error:**

```c
#include <stdio.h>

int main() {
    float voltage = 12.5;
    float current; 
    float power;

    printf("Masukkan nilai arus: ");
    scanf("%f", current);  // Masalah 1

    power = voltage * current  // Masalah 2

    // Cek jika daya tinggi
    if (power > 50.0) {
        printf("High Power!\n");
    else {                      // Masalah 3
        printf("Low Power.\n");
    }  

    printf("Total Power: %d Watts", power); // Masalah 4

    return 0 // Masalah 5
}

```

**Analisis Error:**

1. Error 1: Tidak ada simbol ampersand `&` sebelum current
2. Error 2: Tidak ada `;` di akhir
3. Error 3: Tidak ada kurung penutup `}` untuk mengakhiri struktur if
4. Error 4: Kesalahan format specier `%d` untuk nilai integer. Sejak awal program sudah ditetapkan untuk menggunakan data tipe `float` seharusnya menjadi `%f`
5. Error 5: Tidak ada `;` di akhir

**Kode Perbaikan:**

```c
#include <stdio.h>

int main() {
    float voltage = 12.5;
    float current; 
    float power;

    printf("Masukkan nilai arus: ");
    scanf("%f", &current);  // Masalah 1

    power = voltage * current;  // Masalah 2

    // Cek jika daya tinggi
    if (power > 50.0) {
        printf("High Power!\n");
    }else {                      // Masalah 3
        printf("Low Power.\n");
    
    }

    printf("Total Power: %f Watts", power); // Masalah 4

    return 0; // Masalah 5
}

```

**Screenshot Output (Fixed):**
![image](https://hackmd.io/_uploads/HkkDVzOvbe.png)
