T0616 ALGORITMA DAN PEMROGRAMAN (11-12) SUBANDIJO UNIVERSITAS BINA NUSANTARA FAKULTAS ILMU KOMPUTER JAKARTA, 2005 7/11/2017 T0616 - Algoritma dan Pemrograman 1 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 2 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 7/11/2017 T0616 - Algoritma dan Pemrograman 3 LINGKUP IDENTIFIER (3) • KEUNTUNGAN MENGGUNAKAN IDENTIFIER GLOBAL ADALAH TRANSFER DATA ANTARFUNGSI 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 4 LINGKUP IDENTIFIER (4) • KEUNTUNGAN MENGGUNAKAN IDENTIFIER LOKAL: • CONVENIENT. • EFFICIENT. • LOCAL COPIES. • KERUGIAN MENGGUNAKAN IDENTIFIER LOKAL: • SHORT LIFETIME . • RESTRICTED COMMUNICATION. 7/11/2017 T0616 - Algoritma dan Pemrograman 5 LINGKUP IDENTIFIER (4) int x; fungsi1() { … } int y; fungsi2() { int z; … } main() { int z; int y; … } 7/11/2017 scope vari. z scope variable x scope variable y z, y : hanya dikenal main z di main <> z di fungsi2() T0616 - Algoritma dan Pemrograman 6 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; x = 10 + 5 = 15 } main() { int x=5; x = 5 + F(5) = 5 + 15 = 20 x += F(x); printf(“\n x = %d”, x); } 7/11/2017 T0616 - Algoritma dan Pemrograman 7 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; } 7/11/2017 D T0616 - Algoritma dan Pemrograman 8 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 9 AUTO • DIDEKLARASIKAN DI DALAM FUNGSI. • LINGKUP LOKAL TERHADAP FUNGSI. • SEMBARANG VARIABEL YANG DIDEKLARASIKAN DI DALAM FUNGSI DIARTIKAN SEBAGAI VARIABEL OTOMATIS. • KATA KUNCI AUTO BERSIFAT OPSIONAL KARENA DEFAULT ADALAH OTOMATIS. • DIBENTUK SAAT FUNGSI DIPANGGIL, DIHAPUS SAAT FUNGSI SELESAI DIEKSEKUSI. • NAMA LAIN ADALAH LOCAL DAN STACK. 7/11/2017 T0616 - Algoritma dan Pemrograman 10 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); } 7/11/2017 T0616 - Algoritma dan Pemrograman 11 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 12 CONTOH 1 #Iinclude<stdio.h> int x = 1947; void main() { extern int x; void cetak(void); printf(“\nmain(): x = %d”,x); cetak(); } 7/11/2017 void cetak(void) { extern int x; printf(“\ncetak(): x=%d”, x); } • OUTPUT: main(): x = 1947 cetak(): x = 1947; T0616 - Algoritma dan Pemrograman 13 CONTOH 2 • MAIN.C DAN FUNGSI.C DIKOMPILASI TERPISAH. int gX; main(){ int aZ; gx = 1947; aZ = fungsi(gX); printf(“\n%d\t%d”, aZ,gX); } 7/11/2017 extern int gX; fungsi(int argY){ int iZ; gX = 7491; iZ = argY; return(iZ); } T0616 - Algoritma dan Pemrograman 14 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 15 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 DILAKUKAN OLEH KOMPILATOR. 7/11/2017 T0616 - Algoritma dan Pemrograman 16 CONTOH void main() { int i; void tes(); for( i=1; i<4. i++) { printf(“\nIterasi ke%d”,i); tes(); } } 7/11/2017 void tes() { int lupa = 0; static int ingat = 1; printf(“\nLupa =%d, Ingat = %d”, lupa++, ingat++); } T0616 - Algoritma dan Pemrograman 17 EXTERNAL STATIC • KLAS PENYIMPANAN STATIC JUGA DAPAT DIAPLIKASIKAN PADA VARIABEL EXTERNAL • IA HANYA DAPAT DIAKSES OLEH KODE YANG ADA PADA FILE DI MANA IA DIDEKLARASIKAN. 7/11/2017 /* FILE: XXX.C */ static int count; static char name[8]; main() { … /* program body */ } T0616 - Algoritma dan Pemrograman 18 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 19 REGISTER (2) • BANYAK VARIABEL REGISTER SANGAT TERBATAS, 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. 7/11/2017 T0616 - Algoritma dan Pemrograman 20 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); } 7/11/2017 T0616 - Algoritma dan Pemrograman 21 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=akhirLoopawalLoop; 7/11/2017 printf(“\nWaktu eksekusi 1= %d clock”, waktu); lambat=1; awalLoop=timer(); while(lambat<65535) { lambat+=1; } akhirLoop = timer(); waktu=akhirLoopawalLoop; printf(“\nWaktu eksekusi 2= %d clock”, waktu); } T0616 - Algoritma dan Pemrograman 22 THE END “...ALL YOU NEED IS LOVE…” 7/11/2017 T0616 - Algoritma dan Pemrograman 23
© Copyright 2024 Paperzz