PRAKTIKUM 15 Fungsi : Passing Parameter by Value & by References A. Tujuan Pembelajaran 1. Memahami perbedaan pengiriman parameter secara nilai dan secara alamat. 2. Memecah program dalam fungsi fungsi yang sederhana. 3. Menjelaskan tentang pemrograman terstruktur. B. Laporan Resmi 1. Untuk setiap listing program dari percobaan-percobaan diatas, ambil capture outputnya. a) Definisi function untuk menentukan bilangan terbesar dari 2 bilangan inputan. Source code : #include <stdio.h> int banding(int satu, int dua){ if(satu > dua){ return(0); }else{ return(1); } } main(){ int ang1, ang2, pros; printf("angka 1 : "); scanf("%d", &ang1); printf("angka 2 : "); scanf("%d", &ang2); pros = banding(ang1, ang2); if(pros == 0){ printf("bilangan %d lebih besar dari %d\n", ang1, ang2); }else{ printf("bilangan %d lebih besar dari %d\n", ang2, ang1); } } Output : Analisa : b) Buatlah function permutasi dan kombinasi dengan menghitung permutasi dan kombinasinya. Source code : #include <stdio.h> int permutasi(int par1, int par2){ int a, b, sum1=1, sum2=1; for(a=1; a<=par1; a++){ sum1 = sum1 * a; } b = par1 - par2; for(a=1; a<=b; a++){ sum2 = sum2 * a; } return(sum1/sum2); } int kombinasi(int par1, int par2){ int a, b, sum1=1, sum2=1, sum3; for(a=1; a<=par1; a++){ sum1 = sum1 * a; } for(a=1; a<=par2; a++){ sum3 = sum3 * a; } b = par1 - par2; for(a=1; a<=b; a++){ sum2 = sum2 * a; } return(sum1/(sum2*sum3)); } main(){ int ang1, ang2; printf("input n : printf("input r : printf("permutasi printf("kombinasi } "); scanf("%d", &ang1); "); scanf("%d", &ang2); : %d\n", permutasi(ang1, ang2)); : %d\n", kombinasi(ang1, ang2)); Output : Analisa : c) Buatlah sebuah function untuk mengubah dua bilangan masukan, masing-masing dinaikan dengan 2. Masukkan dilakukan di main(). Selanjutnya tampilkan. Source code : #include <stdio.h> void ubah(int *, int *); main(){ int an1, an2; printf("angka 1 : "); scanf("%d", &an1); printf("angka 2 : "); scanf("%d", &an2); printf("sebelum pengubahan\n"); printf("x = %d y = %d\n", an1, an2); ubah(&an1, &an2); } void ubah(int *ang1, int *ang2){ int ang3; ang3 = *ang1; *ang1 = *ang2+2; *ang2 = ang3+2; printf("proses pengubahan\n"); printf("x = %d y = %d\n", *ang1, *ang2); } Output : Analisa : d) Buatlah sebuah program yang menerima input besar sudut dalam derajat dan panjang sisi. Source code : #include <stdio.h> #include <math.h> float segitiga(float, float); main(){ float derajat, panjang, hasil; printf("derajat sudut : "); scanf("%f", &derajat); printf("panjang sisi : "); scanf("%f", &panjang); hasil = segitiga(derajat, panjang); printf("panjang sisi segitiga = %.2f\n", hasil); } float segitiga(float x, float y){ float rad; rad = x * 3.142 / 180.0f; return(tan(rad)*y); } Output : Analisa : 2. Tuliskan kesimpulan dari percobaan yang telah anda lakukan. Dari percobaan diatas saya dapat mendefinisikan serta mengimplementasikan passing parameter by value dan passing parameter by reference. Untuk pass by value itu tidak dapat mengubah nilai suatu variabel. Jika pass by reference dapat mengganti nilai suatu variabel dikarenakan langsung diganti dengan alamat variabel tersebut. 3. Jelaskan perbedaan antara pass by value dengan pass by reference ! Berikan contoh function call dan definisi fungsinya ! Jawab : Pass by Value mengirimkan parameter berdasarkan nilai variabel asalnya yang akan dihubungkan terhadap paramater fungsi pemanggil. Source code : void tukar(int x, int y){ int z; z = x; x = y; y = z; printf("\nNilai di akhir fungsi tukar()\n"); printf("x = %d y = %d\n", x, y); } Pass by Reference mengirimkan parameter berdasarkan alamat dari nilai tertentu, maka dari itu bila ada nilai yang dirubah dari alamat asalnya maka akan terjadi perubahan juga terhadap nilai yang di panggil. Source code : void tukar(int *px, int *py){ int z; z = *px; *px = *py; *py = z; printf("\nNilai di akhir fungsi tukar()\n"); printf("x = %d y = %d\n", *px, *py); }