download

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