KONSEP PEMROGRAMAN | PRAKTIKUM 15 – FUNGSI PARAMETER PASS BY VALUE & PREFERENCE ULFA OCTA PRISNANDA | 2103157029
A.
Percobaan Soal 1 a. Definisikanlah function untuk menentukan bilangan terbesar dari 2 bilangan yang diinputkan di main(). Function mempunyai parameter berupa 2 buah bilangan yang akan dibandingkan dan memberikan return value berupa bilangan yang terbesar. Sertakan pula prototype function tsb. b. Tulislah prototipe fungsi untuk fungsi tersebut. c. Buat function main() untuk memanggil function konversi(), setelah sebelumnya meminta masukan nilai suhu, satuan asal dan satuan tujuannya. Jawab : Koding : #include <stdio.h> int cariTerbesar(int,int); main() { int bil1,bil2,max; printf("PRAKTIKUM 15\nULFA OCTA P | 2103157029\n"); printf("\n======================================== \n"); printf("Mencari Bilangan Terbesar dari 2 Bilangan"); printf("\n======================================== \n"); printf("\nMasukkan bilangan pertama \t = "); scanf("%d", &bil1);
|
printf("\nMasukkan bilangan kedua \t = "); scanf("%d", &bil2); max = cariTerbesar(bil1,bil2); printf("\nBilangan %d adalah bilangan yang lebih besar\n\n",max); } int cariTerbesar(int input1,int input2) { if(input1 < input2) return input2; else return input1; }
Output :
Analisa :
Parameter dilewatkan ke fungsi dengan pass by value jadi perubahan pada variabel parameter formal tidak berpengaruh terhadap variable di fungsi pemanggil. Selanjutnya nilai yang lebih besar akan di return ke pemanggil.
Soal 2 Buatlah suatu fungsi permutasi() dan kombinasi() untuk menghitung permutasi dan kombinasi dari suatu pasangan bilangan, yang dinyatakan dengan formula:
Jawab : Koding : #include <stdio.h> int permutasi(int,int); int kombinasi(int, int); int faktorial(int); main() { int n,r,hslPermutasi,hslKombinasi; printf("PRAKTIKUM 15\nULFA OCTA P | 2103157029 \n"); printf("\n======================================== \n"); printf("Mencari Hasil Permutasi dan Kombinasi"); printf("\n======================================== \n"); printf("\nMasukkan n \t = "); scanf("%d", &n);
printf("\nMasukkan r \t = "); scanf("%d", &r); hslPermutasi = permutasi(n,r); hslKombinasi = kombinasi(n,r); printf("\nHasil permutasi dari %d dan %d adalah %d",n,r,hslPermutasi); printf("\nHasil kombinasi dari %d dan %d adalah %d\n\n",n,r,hslKombinasi); }
int faktorial(int bil) { int i,jum = 1; for(i=bil;i>0;i--) jum = jum * i; return jum; } int permutasi(int fn_n,int fn_r) { return faktorial(fn_n) / faktorial(fn_n-fn_r); } int kombinasi(int fn_n,int fn_r) { return faktorial(fn_n) / ( faktorial(fn_r) * faktorial(fn_n-fn_r) ); }
Output :
Analisa : Bahwa dalam program ini untuk memanggil fungsi factorial tidak hanya dalam main () , tapi bisa fungsi yang lainnya.
Soal 3 Buatlah sebuah fungsi untuk mengubah dua bilangan masukan, masing-masing dinaikkan dengan 2. Masukan dilakukan di main(). Selanjutnya tampilkan hasil akhir bilangan setelah dirubah di main(). Gunakan pass by reference ! Jawab : Koding : #include <stdio.h> void increment(int *X) { (*X)+=2;
printf("Nilai di dalamfungsi = %d",*X); } int main(void) { int bilangan; printf("Praktikum 15 \n ULFA OCTA P | 2103157029\n"); printf("\n\t=============================================\n"); printf("\t\tFUNGSI TANPA RETURN"); printf("\n\t==========================================\n");
printf("\n\nMasukkan bilangan bulat: "); scanf("%d",&bilangan); /*menampilkannilaiawal */ printf("\nNilaiawal = %d\n",bilangan); /*memanggilfungsi increment*/ increment(&bilangan); /*menampilkannilaiakhir*/ printf("\nNilaiakhir = %d\n",bilangan); return 0; }
Output :
Analisa : Yang dimasukkan adalah alamat memori . jadi yang ada di dalam fungsi mempengaruhi di luar fungsi karena parameter by value.
Soal 4 Perhatikan gambar segitiga ABC di samping ini, dengan sudut ABC adalah siku-siku. Buatlah sebuah program yang menerima input berupa : besar sudut BAC (dalam besaran derajat), dan panjang sisi AB (dalam meter). Program tersebut bisa menampilkan output berupa panjang sisi BC (dalam meter). Jawab : Koding : #include <stdio.h> #include <math.h> #define PHI 3.142857f; float cariBC(float,float); float radian(float); main() { float sudutBAC,sisiAB,sisiBC; printf("PRAKTIKUM 15\nULFA OCTA P | 2103157029\n"); printf("\n======================================== \n\n"); printf("Menghitung sisi BC dari segitiga"); printf("\n======================================== \n"); printf("\nMasukkan besaran sudut BAC (derajat) \t = "); scanf("%f", &sudutBAC); printf("\nMasukkan panjang sisi AB (meter) \t = "); scanf("%f", &sisiAB); sisiBC = cariBC(sudutBAC,sisiAB); printf("\nPanjang sisi BC adalah %.2f meter\n\n",sisiBC); getchar();
} float cariBC(float fn_sudutBAC,float fn_sisiAB) { return tan(radian(fn_sudutBAC)) * fn_sisiAB; } float radian(float derajat) { return (derajat / 180.0f) * PHI; }
Output :
Analisa : Menghitung sudut segitiga menggunakan fungsi float dan radian, untuk mengkonversi sudut derajat ke radian.
B.
Tugas Tambahan Jelaskan perbedaan antara pass by value dengan pass by reference ! Berikan contoh function call dan definisi fungsinya ! Jawab :
FUNCTION CALL DEFINITION
PASS BY VALUE tambah(a,b); inttambah(int x, int y) { //pernyataan }
PASS BY REFERENCE tambah(&a,&b); inttambah(int *x,int *y) { //pernyataan }
C. Kesimpulan 1. Dalam bahasa C, program terdiri dari fungsi-fungsi yang terstruktur. 2. Parameter dapat dikirim pada fungsi dengan pass by value dan pass by reference. 3. Pass by value hanya mengirimkan nilai dari variable dikirimkan. 4. Pass by reference mengirim alamat dari variable yang dikirimkan.