T0616 ALGORITMA DAN PEMROGRAMAN (11-12) SUBANDIJO UNIVERSITAS BINA NUSANTARA FAKULTAS ILMU KOMPUTER JAKARTA, 2005 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman LINGKUP IDENTIFIER (1) IDENTIFIER GLOBAL: IDENTIFIER YANG DIDEKLARASIKAN DILUAR FUNGSI DAN DILETAKKAN DI ATAS SEMUA FUNGSI YANG ADA DALAM SUATU PROGRAM. LINGKUP MELIPUTI SELURUH PROGRAM IDENTIFIER YANG DIDEKLARASIKAN SECARA GLOBAL DAPAT DIDEKLARASIKAN KEMBALI (REDECLARED) DI DALAM FUNGSI. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman LINGKUP IDENTIFIER (2) IDENTIFIER LOKAL: IDENTIFIER YANG DIDEKLARASIKAN DI DALAM SUATU FUNGSI, TERMASUK DAFTAR PARAMETER. LINGKUP TERBATAS PADA FUNGSI. JUGA DIKENAL DENGAN NAMA AUTOMATIC DAN STACK 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman LINGKUP IDENTIFIER (3) KEUNTUNGAN MENGGUNAKAN IDENTIFIER GLOBAL ADALAH TRANSFER DATA ANTAR-FUNGSI LEBIH SEDERHANA. KERUGIAN MENGGUNAKAN IDENTIFIER GLOBAL DATA TIDAK TERJAGA DENGAN BAIK. SETIAP FUNGSI DAPAT MENGUBAH NILAI VARIABEL TANPA SEPENGETAHUAN FUNGSI LAIN SEHINGGA PROGRAM TIDAK MODULAR. JIKA PROGRAM MAKIN BESAR MAKA PELUANG TERJADINYA EROR MAKIN BESAR PULA SEHINGGA SULIT UNTUK MELACAK KESALAHAN. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman LINGKUP IDENTIFIER (4) KEUNTUNGAN MENGGUNAKAN IDENTIFIER LOKAL: CONVENIENT. EFFICIENT. LOCAL COPIES. KERUGIAN MENGGUNAKAN IDENTIFIER LOKAL: SHORT LIFETIME . RESTRICTED COMMUNICATION. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman LINGKUP IDENTIFIER (4) int x; fungsi1() { … } int y; fungsi2() { int z; … scope vari. z scope variable x main() { scope variable y int y; z, y : hanya dikenal main … z di main <> z di fungsi2() 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH 1 PROGRAM BERIKUT MENUNJUKKAN PERUBAHAN NILAI VARIA-BEL X, GLOBAL SEKALIGUS LOKAL YANG SALING MEMPENGA-RUHI. #include<stdio.h> int x = 10; F(int n){ return x+=n; } main() { int x=5; x += F(x); printf(“\n x = %d”, x); x = 10 + 5 = 15 x = 5 + F(5) = 5 + 15 = 20 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH 2 APA KOMENTAR ANDA TENTANG PROGRAM BERIKUT? MANA PERNYATAAN YANG BENAR DAN MANA YANG SALAH? main() { x = 11; int x; { x = 22; y = 33; int y; x = 44; y = 55; } x = 66; y = 77; 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman KLAS PENYIMPANAN LINGKUP (LOKAL | GLOBAL) DAN PERMANENCE ATAU UMUR VARIABEL: AUTO, EXTERN, STATIC, DAN REGISTER. KECUALI EXTERN YANG GLOBAL, VARIABEL YANG LAIN SEMUANYA LOKAL. KECUALI REGISTER YANG DISIMPAN DI MIKROPROSESOR, SEMUA VARAIBEL LAIN DISIMPAN DI RAM. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman AUTO DIDEKLARASIKAN DI DALAM FUNGSI. LINGKUP LOKAL TERHADAP FUNGSI. SEMBARANG VARIABEL YANG DIDEKLARASIKAN DI DALAM FUNGSI DIARTIKAN SEBAGAI VARIA-BEL OTOMATIS. KATA KUNCI AUTO BERSIFAT OPSIONAL KARE-NA DEFAULT ADALAH OTOMATIS. DIBENTUK SAAT FUNGSI DIPANGGIL, DIHAPUS SAAT FUNGSI SELESAI DIEKSEKUSI. NAMA LAIN ADALAH LOCAL DAN STACK. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH long Fak(auto int n) { auto int i; auto long prod = 1; if(n>1) for( i =2; i <=n; i++) prod *= i; return (prod); } 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman EXTERN DIDEKLARASIKAN DI LUAR FUNGSI. LINGKUPNYA GLOBAL. DIGUNAKAN ANTARA LAIN UNTUK PASSING PARAMETER DAN KOMPILASI TERPISAH. KATA KUNCI EXTERN SEBAIKNYA DITULIS DI DALAM FUNGSI YANG AKAN MENGGUNAKAN VARIABEL EKSTERNAL. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH 1 #Iinclude<stdio.h> int x = 1947; void main() { extern int x; void cetak(void); printf(“\nmain(): x = %d”,x); cetak(); } void cetak(void) { extern int x; printf(“\ncetak(): x=%d”, x); } OUTPUT: main(): x = 1947 cetak(): x = 1947; 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH 2 MAIN.C DAN FUNGSI.C DI-KOMPILASI TERPISAH. int gX; main(){ int aZ; gx = 1947; aZ = fungsi(gX); printf(“\n%d\t%d”, aZ,gX); } extern int gX; fungsi(int argY){ int iZ; gX = 7491; iZ = argY; return(iZ); } 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman STATIC (1) DIDEKLARASIKAN DI DALAM FUNGSI DAN DIAWALI DENGAN KATA KUNCI STATIC. LINGKUPNYA LOKAL TERHADAP FUNGSI. NILAI VARIABEL STATIC TETAP ADA MESKIPUN BLOK DI MANA IA DIDEFINISIKAN BERAKHIR. TIDAK HILANG SAAT SAAT FUNGSI SELESAI DIEKSEKUSI. NILAI TETAP ADA DI MEMORI HISTORY SENSITIVE. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman STATIC (2) NILAI VARIABEL STATIC DALAM FUNGSI TETAP DIPERTAHANKAN DI ANTARA PEMANGGILAN FUNGSI YANG SAMA. DAPAT DIBERI NILAI AWAL DENGAN DEFAULT = 0. INISIALISASI HANYA DILAKUKAN SATU KALI YAITU SAAT ALOKASI MEMORI YANG DILAKU-KAN OLEH KOMPILATOR. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH void main() { int i; void tes(); for( i=1; i<4. i++) { printf(“\nIterasi ke- %d”,i); tes(); } void tes() { int lupa = 0; static int ingat = 1; printf(“\nLupa =%d, Ingat = %d”, lupa++, ingat++); } 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman EXTERNAL STATIC KLAS PENYIMPANAN STATIC JUGA DAPAT DIAPLIKASIKAN PADA VARIABEL EXTERNAL IA HANYA DAPAT DIAKSES OLEH KODE YANG ADA PADA FILE DI MANA IA DIDEKLA-RASIKAN. /* FILE: XXX.C */ static int count; static char name[8]; main() { … /* program body */ } 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman REGISTER (1) DEKLARASI DI DALAM FUNGSI DAN DIAWALI DENGAN KATA KUNCI REGISTER. LINGKUP LOKAL. DISIMPAN DI REGISTER MIKROPROSESOR, BUKAN DI MEMORI. DIGUNAKAN UNTUK MEMPERCEPAT EKSEKUSI. TIDAK SEMUA TIPE VARIABEL DAPAT BERUPA VARIABEL REGISTER, BIASANYA HANYA UNTUK INTEGER, CHAR, DAN POINTER. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman REGISTER (2) BANYAK VARIABEL REGISTER SANGAT TERBA-TAS, BIASANYA DUA ATAU TIGA. MENDEKLARASIKAN SUATU VARIABEL SEBAGAI VARIABEL REGISTER BELUM TENTU DITERIMA. JIKA TIDAK DITERIMA IA AKAN DIPERLAKUKAN SEBAGAI VARAIBEL OTOMATIS. DEKLARASI HANYA BERLAKU JIKA ADA REGISTER YANG KOSONG. 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH (1) #include<stdio.h> #include<time.h> main() { time_t awal, akhir; register int f, f1, f2; int i, j, n=23; time(&awal); for(j=1; j<=30000;j++) { f1=1; f2=1; for(i=1; i<=n; i++) { f=(i<3? 1: f1+f2; f2=f1; f1=f; } time(&akhir); printf(“\ni=%d Fib=%d”,i,f); printf(“\Elapsed time =%.01f dtk”,difftime(akhir,awal); 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman CONTOH (2) main() { register unsigned int cepat; unsigned int lambat; long awalLoop, akhirLoop; long timer(); cepat=1; awalLoop=timer(); while(cepat<65535) { cepat+=1; } akhirLoop = timer(); waktu=akhirLoop- awalLoop; printf(“\nWaktu eksekusi 1= %d clock”, waktu); lambat=1; awalLoop=timer(); while(lambat<65535) { lambat+=1; } akhirLoop = timer(); waktu=akhirLoop- awalLoop; printf(“\nWaktu eksekusi 2= %d clock”, waktu); 2/24/2019 T0616 - Algoritma dan Pemrograman
T0616 - Algoritma dan Pemrograman THE END “...ALL YOU NEED IS LOVE…” 2/24/2019 T0616 - Algoritma dan Pemrograman