Konsep Pemrograman Function
MODULARITAS Program panjang dibagi atas function-function Modularity pengembangan program dapat dilakukan secara bertahap, modul per modul, function per function. Readibility program dipecah menjadi sejumlah function, masing-masing function lebih mudah dipahami alur logikanya daripada alur logika sebuah program panjang. Code reuse function yang sudah jadi dan benar dapat digunakan oleh program lain. Function-function dapat dikumpulkan di dalam sebuah perpustakaan function. Function
VARIABEL LOKAL dan GLOBAL Berdasarkan lokasi deklarasi Variabel lokal Dideklarasi di dalam blok function Hanya bisa digunakan di dalam blok tsb Tidak diinisialisasi dengan nilai awal Baru eksis ketika blok tersebut aktif Didisalokasi ketika blok berakhir Variabel global Disebut juga variabel eksternal Dideklarasi di luar function Eksis mulai dari posisi deklarasi Diinisialisasi dengan nilai nol Function
VARIABEL LOKAL dan GLOBAL int main() { int a, b = 10; printf("1: %d %d\n", a, b); printf("nilai a ? "); scanf("%d", &a); printf("2: %d\n", a); { int a = 50; printf("3: %d\n", a); a = a * 2; printf("4: %d\n", a); b = b * 2; printf("5: %d\n", b); } printf("6: %d\n", a); a += 5; printf("7: %d\n", a); return 0; var. lokal 1: 2 10 nilai a ? 30 2: 30 3: 50 4: 100 5: 20 6: 30 7: 35 var. lokal Function
VARIABEL LOKAL dan GLOBAL # include <stdio.h> int i; char c; float f; int main() { printf("%d %d %f\n", i, c, f); i = 10; printf("1: %d\n", i); { int i; printf("nilai i ? "); scanf("%d", &i); printf("2: %d\n", i); } printf("3: %d\n", i); return 0; var. global 0 0 0.000000 1: 10 nilai i ? 25 2: 25 3: 10 Function
VARIABEL POINTER Variabel pointer Berisi alamat memori komputer atau alamat memori variabel Di alamat tersebut terdapat data Variabel pointer yang tidak mengacu alamat diberi nilai NULL Dideklarasi dengan simbol * Dimanipulasi dengan operator & address of mengembalikan alamat memori operan * content of R-value: mengambil nilai di lokasi memori L-value: menyimpan nilai ke lokasi memori Function
VARIABEL POINTER Letak simbol * menempel di kiri nama variabel pointer Deklarasi variabel pointer int *pi; float *pf; char *ps; Letak simbol * menempel di kiri nama variabel pointer di antara tipe data dan variabel pointer menempel di kanan tipe data Function
VARIABEL POINTER int *pi, bulat; float *pf, pecah; bulat = 10; Function
MANIPULASI DATA MELALUI POINTER int main () { int *pi, bulat; float *pf, pecah; printf("bulat dan pecah : "); scanf("%d %f", &bulat, &pecah); pi = &bulat; pf = &pecah; printf("%d %.1f\n", *pi, *pf); *pi = *pi * 2; *pf = *pf + 5; printf("%d %.1f\n", bulat, pecah); return 0; } bulat dan pecah : 10 20 10 20.0 20 25.0 Function
MEMORI ILEGAL { int *p; *p = 888; } Variabel p dideklarasi sebagai pointer yang menunjuk sebuah integer. Pada saat dideklarasi p berisi sampah memori. Sampah memori ini diinterpretasikan sebagai alamat memori sebuah integer dan bilangan 888 dimasukkan ke dalam alamat tersebut. Hal ini dapat menimbulkan run-time error. Function
TIPE DATA TIDAK SESUAI { int *p; float bil; p = &bil; } Variabel p dideklarasi sebagai pointer yang mengacu sebuah integer tetapi digunakan mengacu sebuah float. Hal ini menyebabkan pointer p tidak berfungsi sebagaimana mestinya. Function
DEEP COPY, SHALLOW COPY Shallow copy Deep copy Menyalin alamat memori Menyalin objek di alamat memori Function
SHALLOW COPY shallow copy # include <stdio.h> int main () { int bulat1, bulat2, *p1, *p2; p1 = &bulat1; p2 = &bulat2; scanf("%d", &bulat1); p2 = p1; printf("%d %d\n", *p1, *p2); *p1 = *p1 * 2; return 0; } shallow copy 10 10 10 20 20 Function
SHALLOW COPY A B C p1 = &bulat1; 10 p2 = &bulat2; //* A 10 10 p2 = p1; //* B *p1 = *p1 * 2; //* C 10 10 10 20 20 A B C Function
DEEP COPY deep copy # include <stdio.h> int main () { int bulat1, bulat2, *p1, *p2; p1 = &bulat1; p2 = &bulat2; scanf("%d", &bulat1); *p2 = *p1; printf("%d %d\n", *p1, *p2); *p1 = *p1 * 2; return 0; } deep copy 10 10 10 20 10 Function
DEEP COPY A B C p1 = &bulat1; 10 p2 = &bulat2; //* A 10 10 *p2 = *p1; //* B *p1 = *p1 * 2; //* C 10 10 10 20 10 A B C Function
DEFINISI FUNCTION Function definition ialah penulisan function secara lengkap, mencakup: Masukan kepada function (daftar parameter). Tipe data yang dikembalikan (tipe function). Variabel lokal yang digunakan. Instruksi untuk mengubah input menjadi output. tipe_function nama_function (daftar_parameter) { deklarasi_variabel_lokal; instruksi; ... return ekspresi; } Function
DEFINISI FUNCTION Daftar parameter Tipe function Menampung masukan yang diberikan kepada function untuk diolah. Berupa deklarasi data: tipe data dan nama parameter. Daftar parameter disebut juga formal parameter. Jika tidak perlu parameter maka dikosongkan atau ditulis void. Tipe function int, long, char, float, double, struct, atau pointer. Jika function tidak mengembalikan hasil maka tipe function ditulis void. Jika tipe function bukan void maka di dalam function terdapat instruksi return. Function
DEFINISI FUNCTION tipe function nama function daftar parameter float luaslingkaran (float r) { float luas; luas = 3.14159 * r * r; return luas; } variabel lokal isi function Function
DEFINISI FUNCTION # include <stdio.h> float luaslingkaran(float r) { float luas; luas = 3.14159 * r * r; return luas; } int main() { float radius, luas; printf("radius lingkaran ? "); scanf("%f", &radius); luas = luaslingkaran(radius); printf("luas lingkaran = %.2f\n", luas); return 0; radius lingkaran ? 10 luas lingkaran = 314.16 Function
DEKLARASI FUNCTION float luaslingkaran(float); int main() { float radius, luas; printf("radius lingkaran ? "); scanf("%f", &radius); luas = luaslingkaran(radius); printf("luas lingkaran = %.2f\n", luas); return 0; } float luaslingkaran(float r) { float luas; luas = 3.14159 * r * r; return luas; deklarasi function definisi function Function
PENGIRIMAN PARAMETER Passing by value Nilai parameter aktual disalin kepada parameter formal. Parameter aktual berupa variabel, nilai konstanta, atau ekspresi. Passing by reference atau by location Alamat memori parameter aktual disalin kepada parameter formal. Parameter formal mengacu parameter aktual. Isi parameter aktual dapat diubah melalui parameter formal. Sebuah function boleh menggunakan salah satu atau kedua cara pengiriman tersebut. Function
MEKANISME PASSING VALUE int jumlahganda(int n1, int n2) { int n3; n3 = 2 * (n1 + n2); return n3; } int main() { int bil1, bil2, bil3; printf("bil 1? "); scanf("%d",&bil1); printf("bil 2? "); scanf("%d",&bil2); bil3 = jumlahganda(bil1, bil2); printf("jumlah ganda = %d\n", bil3); return 0; bil 1? 10 bil 2? 20 jumlah ganda = 60 Function
MEKANISME PASSING VALUE int jumlahganda(int n1, int n2) ... int main() { int bil1, bil2, bil3; printf("bil 1? "); scanf("%d",&bil1); printf("bil 2? "); scanf("%d",&bil2); bil3 = jumlahganda(bil1, bil2); printf("jumlah ganda = %d\n", bil3); return 0; } //C //A //B //C A B C Function
MEKANISME PASSING VALUE int jumlahganda(int n1, int n2) { int n3; n3 = 2 * (n1 + n2); return n3; } //C //D //E //F C D E F Function
MEKANISME PASSING VALUE int main() { int bil1, bil2, bil3; //A printf("bil 1? "); scanf("%d",&bil1); printf("bil 2? "); scanf("%d",&bil2); //B bil3 = jumlahganda(bil1, bil2); //C printf("jumlah ganda = %d\n", bil3); return 0; } //G G Function
MEKANISME PASSING REFERENCE void jumlahganda (int n1, int n2, int *n3) { *n3 = 2 * (n1 + n2 ); } int main() { int bil1, bil2, bil3; printf("bil1 ? "); scanf("%d",&bil1); printf("bil2 ? "); scanf("%d",&bil2); jumlahganda(bil1, bil2, &bil3); printf("jumlah ganda = %d\n", bil3); return 0; bil 1? 25 bil 2? 35 jumlah ganda = 120 Function
MEKANISME PASSING REFERENCE void jumlahganda (int n1, int n2, int *n3) int main() { int bil1, bil2, bil3; printf("bil1 ? "); scanf("%d",&bil1); printf("bil2 ? "); scanf("%d",&bil2); jumlahganda(bil1, bil2, &bil3); printf("jumlah ganda = %d\n", bil3); return 0; } //C //A //B //C A B C Function
MEKANISME PASSING REFERENCE void jumlahganda (int n1, int n2, int *n3) { *n3 = 2 * (n1 + n2 ); } //C //D C D Function
MEKANISME PASSING REFERENCE int main() { int bil1, bil2, bil3; printf("bil1 ? "); scanf("%d",&bil1); printf("bil2 ? "); scanf("%d",&bil2); jumlahganda(bil1, bil2, &bil3); printf("jumlah ganda = %d\n", bil3); return 0; } //E E Function
LUAS DAN VOLUME KOTAK (A) Tulis program untuk menghitung luas permukaan dan volume kotak. Program ditulis dalam bentuk beberapa function. Function hitung luas permukaan kotak (by value) Function hitung volume kotak (by value) Function
LUAS DAN VOLUME KOTAK (A) float hitung_luas (float pj, float lb, float tg) { return (2 * pj * lb + 2 * pj * tg + 2 * lb * tg); } float hitung_volume (float pj, float lb, float tg) { return (pj * lb * tg); int main() { float panjang, lebar, tinggi, luas, volume; printf("panjang lebar tinggi ? "); scanf("%f %f %f", &panjang, &lebar, &tinggi); luas = hitung_luas (panjang, lebar, tinggi); volume = hitung_volume (panjang, lebar, tinggi); printf("luas permukaan = %.2f\n", luas); printf("volume = %.2f\n", volume); return 0; panjang lebar tinggi ? 2 3 4 luas permukaan = 52.00 volume = 24.00 Function
LUAS DAN VOLUME KOTAK (B) Gabung ke dalam sebuah function Hitung luas masukan: panjang, lebar, tinggi Keluaran: luas Hitung volume Keluaran: volume Hitung luas dan volume Keluaran: luas (by reference), volume (by reference) Function
LUAS DAN VOLUME KOTAK (B) void hitung_ls_vol (float pj, float lb, float tg, float *luas, float *isi) { *luas = 2 * pj * lb + 2 * pj * tg + 2 * lb * tg; *isi = pj * lb * tg; } int main() { float pj, lb, tg, ls, vol; printf("panjang lebar tinggi ? "); scanf("%f %f %f", &pj, &lb, &tg); hitung_ls_vol(pj, lb, tg, &ls, &vol); printf("luas permukaan = %.2f\n", ls); printf("volume = %.2f\n", vol); return 0; panjang lebar tinggi ? 2 3 4 luas permukaan = 52.00 volume = 24.00 Function
MENGURUTKAN TIGA BILANGAN Tulis program untuk membaca tiga bilangan bulat dan menampilkan ketiga bilangan tersebut dalam keadaan terurut menaik (ascending). Ketiga bilangan: bil1, bil2, bil3 Atur ketiga bilangan sehingga: bil bil2 bil3 Jika bil1 > bil2 tukar bil1 dan bil2 Jika bil1 > bil3 tukar bil1 dan bil3 Jika bil2 > bil3 tukar bil2 dan bil3 Terjadi 3 kali pertukaran nilai. Tukar nilai dijadikan FUNCTION. Function
MENGURUTKAN TIGA BILANGAN Tulis program untuk membaca tiga bilangan bulat dan menampilkan ketiga bilangan tersebut dalam keadaan terurut menaik (ascending). Ketiga bilangan: bil1, bil2, bil3 Atur ketiga bilangan sehingga: bil bil2 bil3 Jika bil1 > bil2 tukar bil1 dan bil2 Jika bil1 > bil3 tukar bil1 dan bil3 Jika bil2 > bil3 tukar bil2 dan bil3 Terjadi 3 kali pertukaran nilai. Tukar nilai dijadikan FUNCTION. Function
MENGURUTKAN TIGA BILANGAN (A) Function untuk menukar dua nilai. Berapa buah parameter formal? z = x; x = y; y = z; Dua parameter formal: x dan y, by reference. z jadikan variabel lokal. Function
MENGURUTKAN TIGA BILANGAN (A) void tukar(int*, int*); int main() { int bil1, bil2, bil3; printf("ketik 3 bilangan: "); scanf("%d %d %d", &bil1, &bil2, &bil3); if (bil1 > bil2) tukar (&bil1, &bil2); if (bil1 > bil3) tukar (&bil1, &bil3); if (bil2 > bil3) tukar (&bil2, &bil3); printf("diurutkan: %d %d %d\n", bil1, bil2, bil3); return 0; } void tukar(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; ketik 3 bilangan: 50 30 10 diurutkan: 10 30 50 Function
MENGURUTKAN TIGA BILANGAN (A) int main() { ... if (bil1 > bil2) tukar (&bil1, &bil2); //A } void tukar(int *a, int *b) { int temp; //A temp = *a; //B *a = *b; //C *b = temp; //D } A B C D Function