# Pembahasan CS3 Alprog Selasa > Author: Misc/Dwi > Waktu pengerjaan ~25 menit ## Pendekatan: CS3: kita diberikan beberapa fungsi dan beberapa syarat yaitu: :::info #### Fungsi 1 > A = $x^3 + 8y^2 - z^2 + 10$ #### Fungsi 2 > *B = Volume prisma segitiga dengan alas x, tinggi segitiga y, dan tinggi prisma z* (Note: Bulatkan B ke integer terdekat) (Note: Jika negatif, tambah line "Tidak memungkinkan!") #### Fungsi 3 > C = $\sqrt{x^2 + y^2 + z^2}$ (Note: Bulatkan C ke integer terdekat) ::: tiga fungsi diatas sebenarnya sederhana untuk di implementasikan di c, tantangan utama kita adalah menggunakan pointer agar tidak perlu menggunakan variabel dengan scope global kita akan memanfaatkan fungsi fungsi yang terdapat di library `<math.h>` untuk memudahkan pembulatan dan kuadrat <br> ## Breakdown fungsi ### 1. Fungsi A = $x^3 + 8y^2 - z^2 + 10$ Dalam modul ini, kita diharuskan menggunakan pointer. Oleh karena itu, kita akan menggunakan pointer untuk variabel A, sehingga kita dapat menerapkan konsep pass-by-reference. Dengan menggunakan pointer yang menunjuk ke alamat A, kita dapat langsung memodifikasi nilainya dalam fungsi. Untuk fungsinya sendiri, kita bisa mendeklarasikan operasinya secara eksplisit dalam c ```c void fungsi1(int x, int y, int z, int *A) { *A = (x * x * x) + (8 * y * y) - (z * z) + 10; } ``` --- ### 2. Fungsi B = Volume Prisma, ($a = x$ ; $t = y$ ; $t_p = z$) Ingat bahwa formula untuk Voluma prisma adalah: ![image](https://hackmd.io/_uploads/Bk3Uqn2qJg.png) Kita gunakan konsep yang sama dengan pointer menunjuk pada variabel B, dan deklarasi operasi eksplisit Kita akan menggunakan fungsi round() dari library <math.h> untuk memudahkan pembulatan kita ```c void fungsi2(int x, int y, int z, int *B) { *B = round(0.5 * x * y * z); } ``` --- ### 3. Fungsi C = $\sqrt{x^2 + y^2 + z^2}$ Sekali lagi, dengan menggunakan konsep pointer yang sama tetapi kali ini menunjuk pada variabel C, dan deklarasi fungsi eksplisit ```c void fungsi3(int x, int y, int z, int *C) { *C = round(sqrt((x * x) + (y * y) + (z * z))); } ``` --- ### 4. Fungsi utama (`int main()`) Terakhir, kita perlu menyiapkan program agar dapat menerima input dari pengguna, menginisialisasi variabel yang diperlukan, serta memanggil fungsi-fungsi yang telah kita buat sebelumnya. **Ingat!** Dalam fungsi-fungsi di atas, kita menggunakan pointer sebagai argumen. Oleh karena itu, saat memanggil fungsi, kita harus memberikan alamat variabel dengan menggunakan `&` (ampersand), seperti `&var`. ```c int main() { int x, y, z, A, B, C; printf("PR Machine\n"); printf("Halo Upin & Ipin (dah besar)!\n"); printf("Masukkan X: "); scanf("%d", &x); printf("Masukkan Y: "); scanf("%d", &y); printf("Masukkan Z: "); scanf("%d", &z); fungsi1(x, y, z, &A); fungsi2(x, y, z, &B); fungsi3(x, y, z, &C); printf("\nA: %d + %d - %d + 10 = %d\n", x * x * x, 8 * y * y, z * z, A); printf("B: 1/2 x %d x %d x %d = %d", x, y, z, B); if (B < 0) // Volume tidak mungkin negatif { printf(" (Tidak memungkinkan!)\n"); } else { printf("\n"); } printf("C: SQRT(%d + %d + %d) = %d\n", x * x, y * y, z * z, C); return 0; } ``` --- ### Full Code: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> void fungsi1(int x, int y, int z, int *A) { *A = (x * x * x) + (8 * y * y) - (z * z) + 10; } void fungsi2(int x, int y, int z, int *B) { *B = round(0.5 * x * y * z); } void fungsi3(int x, int y, int z, int *C) { *C = round(sqrt((x * x) + (y * y) + (z * z))); } int main() { int x, y, z, A, B, C; printf("PR Machine\n"); printf("Halo Upin & Ipin (dah besar)!\n"); printf("Masukkan X: "); scanf("%d", &x); printf("Masukkan Y: "); scanf("%d", &y); printf("Masukkan Z: "); scanf("%d", &z); fungsi1(x, y, z, &A); fungsi2(x, y, z, &B); fungsi3(x, y, z, &C); printf("\nA: %d + %d - %d + 10 = %d\n", x * x * x, 8 * y * y, z * z, A); printf("B: 1/2 x %d x %d x %d = %d", x, y, z, B); if (B < 0) { printf(" (Tidak memungkinkan!)\n"); } else { printf("\n"); } printf("C: SQRT(%d + %d + %d) = %d\n", x * x, y * y, z * z, C); return 0; } ``` --- ## Terima Kasih!