# Tugas Pendahuluan Modul 2 - Array and Function ``` Nama : Hasan Abdullah Azzam NPM : 2406428314 ``` > Note: Soal Programming tidak perlu dicantumkan referensi, hanya soal Teori saja yang perlu referensi minimal 2. ## Teori ### 1. Jelaskan apa itu array dan keuntungan menggunakan array dibandingkan dengan variabel biasa! (10 poin) --- **Array** merupakan salah satu struktur data di dalam bahasa c yang memungkinkan user untuk mengumpulkan beberapa data yang memiliki tipe yang sama dalam satu variabel dan tersimpan dalam alamat memori yang berurutan. Keuntungan dalam menggunakan variabel **array** adalah user bisa mengumpulkan suatu data yang memiliki tipe yang sama dan menyimpanya kedalam satu variabel saja, daripada seperti tipedata biasa seperti int, char, float yang hanya bisa minyimpan satu data saja. halini lah yang menyebabkan **array** sering digunakan dalam program yang membutuhkan bebera data yang memiliki kesamaan dari jenis yang sama. selain itu ketika menggunakan **array** lokasi tiap data mudah ditemukan dan ketika ingin mengaksesnya kita hanya memerlukan **indeks** lokasi dari tiap **elemen**. ### Referensi: - “C Arrays,” GeeksforGeeks, May 14, 2015. https://www.geeksforgeeks.org/c-arrays/ . [Diakses: 16-Februari-2025] - “C Arrays,” www.w3schools.com. https://www.w3schools.com/c/c_arrays.php . [Diakses: 16-Februari-2025] - “Arrays in C | Digilab UI,” Digilabdte.com, 2025. https://learn.digilabdte.com/books/algorithm-programming/page/arrays-in-c . [Diakses: 16-Februari-2025] ‌ ‌ --- ### 2. Jelaskan apa yang dimaksud dengan array 1D dan 2D serta jelaskan perbedaan keduanya! (10 poin) **Array 1D** merupakan jenis array yang hanya memiliki satu indeks dan kumpulan data didalamya berada pada alamat yang linier. Sedangakan **array 2D** merupakan jenis array yang memiliki 2 indeks masing- masing mewakili baris dan kolom biasa digunakan pada program yang membutuhkan matriks. Jika **array 1D** banyak berguna pada program yang membutuhkan kumpulan data linier, **Array 2D** banyak digunakkan pada data majemuk dan bertumpuk, seprti pada kasus matriks, data yang tersimpan lebih mudah diakses karena kita bisa memisahnya menjadi 2 indeks masing-masing ### Referensi: - “Arrays in C | Digilab UI,” Digilabdte.com, 2025. https://learn.digilabdte.com/books/algorithm-programming/page/arrays-in-c#bkmrk-one-dimensional-arra (accessed Feb. 16, 2025). - “C Arrays,” GeeksforGeeks, May 14, 2015. https://www.geeksforgeeks.org/c-arrays/ (accessed Feb. 16, 2025). ‌ --- ### 3. Jelaskan apa itu function dan bagaimana cara penggunaannya! (10 poin) **function** merupakan sebuah kumpulan code yang akan menjalankan tugas-tugas spesifik sesuai yang telah ditentukan, kelebihan dari penggunaan **function** adalah modularitas pada saat penggunaanya,selain itu, kita bisa melakukkaan program berulang dengan hanya memanggilnya. Untuk menggunakan suatu **function** kita harus memastikkan **function** tersebut telah di deklarasikan sebelum fungsi **main** dijalankan atau sudah ada diaalam header yang kita masukkan, selanjutanya kita bisa memanggilnya dengan menyatakanya dalam program **main**. didalam **function** biasanya membutuhkan beberapa parameter yang berfungsi sebagai variabel yang akan digunakan didalam **function** tersebut. ### Referensi: - “Function | Digilab UI,” Digilabdte.com, 2025. https://learn.digilabdte.com/books/algorithm-programming/page/function (accessed Feb. 16, 2025). - “C Functions,” www.w3schools.com. https://www.w3schools.com/c/c_functions.php (accessed Feb. 16, 2025). - “C Functions,” GeeksforGeeks, Oct. 09, 2022. https://www.geeksforgeeks.org/c-functions/?ref=shm (accessed Feb. 16, 2025). ‌ ‌ ### 4. Jelaskan perbedaan antara pass-by-value dan pass-by-reference! serta jelaskan juga apa yang dimaksud dengan scope variabel dalam function (10 poin) Metode **Pass-by-value** akan menduplikat variabel paramter kedalam fungsi, semua perubahn didalamnya tidakakan mempengaruhi variabel asli di luar fungsi. Metode **pass-by-reference**, sebaliknya dalaman metode ini alamat variabel akan dikirimkan sehingga semua perubahan didalam fungsi akan langsung mempengaruhi variabel asli melalaui alamat yang diterima.dalam C matode ini tidak bisa langsung digunakan tetapi harus menggunakan pointer. ### scope Variabel: - **Global**: var yang berfungsi diseluruh program didalam ataupun diluar fungsi. - **Local**: var hanya dapat digunakan didalam function dimana dia dinyatakan. tetapi setiap pemanggilan function, nilai variabel akan tereset karena diinisialisasikan ulang. - **Static**: hampir mirip dengan local variabel, tetapi nilainya akan tetap sama dan tidak direset di pemanggilan, karena variabel akan tetap tersimpan di setiap pemanggilan Function dan poses inisialisasi hanya dilakukkan dipemanggilan awal. ### Referensi: - “Pass by Value vs Pass ... | Digilab UI,” Digilabdte.com, 2025. https://learn.digilabdte.com/books/algorithm-programming/page/pass-by-value-vs-pass-by-reference (accessed Feb. 17, 2025) - “W3Schools.com,” W3schools.com, 2024. https://www.w3schools.com/c/c_scope.php (accessed Feb. 17, 2025) ‌ --- ## Programming ### 1. Buatlah program yang akan melakukan perkalian pada 2 buah matrix yang diinput oleh user. Gunakan juga function minimal 2 untuk mempermudah perhitungan matrix. (30 poin) --- #### Contoh output yg benar: ``` Input matrix 1 : 3 4 2 1 Input matrix 2 : 2 3 4 7 Hasil perkalian : 22 37 8 13 ``` Code Kalian : ```c // Nama: Hasan Abdullah Azzam // NMP : 2406428314 // Deskripsi : program untuk menghitung perkalian dari 2 buah matriks yang memiliki dimensi sama // note: untuk mengatur ukuran matriks bisa dengan mengatur besar var size. // tugas pendahuluan alprog 2 no 1 #include <stdio.h> //fungsi input, berfungsi untuk memasukkan ke dua matriks yang ingin di hitung. void input(int size, int arr[2][size][size]){ for(int k = 0; k<2;k++){ printf("\nMatriks ke-%d\n",k+1); printf("Masukkan elemen matrikx %d X %d\n", size,size); printf("-------------------------------\n"); for(int i = 0; i < size;i++){ for(int j = 0; j < size; j++){ scanf("%d", &arr[k][i][j]); } } } } // fungsi perkalian,untuk menghitung hasil perkalian matriks void perkalian(int size, int arr[2][size][size]){ for(int i = 0; i < size; i++){ for(int j = 0; j < size;j++){ arr[2][i][j] = 0; for(int k = 0; k < size;k++){ arr[2][i][j] += arr[0][i][k]*arr[1][k][j]; } } } } // fungsi untuk menampilkan matriks void printmatriks(int size, int arr[2][size][size]){ for(int i = 0; i < size;i++){ for(int j = 0; j < size; j++){ printf("%d ",arr[2][i][j]); } printf("\n"); } } int main(){ int size = 2;// var untuk menentukan ukuran matriks int arr[2][size][size];// var matriks, 3 dimensi // diambil indeks = 2 untuk membuat 3 matriks, 2 matriks awal untuk perhitungan dan 1 matrik hasil int quit = 0; int condition = 1; printf("kalkulator perkalian matriks\n"); while(condition == 1){ printf("\n============================\n"); input(size, arr); perkalian(size, arr); printf("\nberikut hasil perkalian matriks %d X %d\n",size,size); printf("-------------------------------\n"); printmatriks(size,arr); printf("-------------------------------\n"); printf("\nApakah ingin melanjutkan perhitungan (1 = Ya, 0 = Tidak): "); scanf("%d", &condition); } return 0; } ``` SS Output Program Kalian : ![Output Program](https://hackmd.io/_uploads/BknliyJ5yx.png) ### 2. Buatlah sebuah program yang mengenkripsi isi dari array berikut dengan melakukan shifting sebanyak 1 kali. (30 poin) Contoh shifting ```a --> b```, ```b --> c```, dst. ``` char hero[5][10] = {"gusion", "fanny", "yin", "johnson", "nana"}; ``` #### Contoh output yg benar: ``` Hero 1: hvtjpo Hero 2: gbooz Hero 3: zjo Hero 4: kpiotpo Hero 5: obob ``` --- Code Kalian : ```c // Nama: Hasan Abdullah Azzam // NMP : 2406428314 // Deskripsi : program enkripsi string dengan men-shifthing-nya dengan hruruf selanjutnya. // tugas pendahuluan alprog 2 no 2 #include <stdio.h> #include <string.h> int main(){ // var stirng yang sudah ditentukkan. char hero[5][10] = {"gusion", "fanny", "yin", "johnson", "nana"}; int len; //pengulangan untuk setiap string for( int i = 0; i < 5;i++){ // len sebagai variabel yang menyimpan panjang string dari fungsi strlen yang ada di string.h // diperbarui di setiap pengulangan. len = strlen(hero[i]); printf("hero %d : ",i+1); // pengulangan untuk setiap char di satu string for (int j = 0; j < len;j++){ //shifting tiap char dengan menggantikanya dengan huruf selanjutnya // char merujuk pada ASCII, sehingga hany perlu (+1) hero[i][j]=hero[i][j]+1; printf("%c",hero[i][j]); } printf("\n"); } return 0; } ``` SS Output Program Kalian : ![Output Program](https://hackmd.io/_uploads/rJc9Pyyc1x.png)