1 / 27

T0616 ALGORITMA DAN PEMROGRAMAN (14-15)

T0616 ALGORITMA DAN PEMROGRAMAN (14-15). SUBANDIJO UNIVERSITAS BINA NUSANTARA FAKULTAS ILMU KOMPUTER JAKARTA, 2005. DEFINISI POINTER. POINTER ADALLAH VARIABEL YANG NILAINYA ADALAH ALAMAT ( ADDRESS ) MEMORI VARIABEL LAIN.

lane-levy
Télécharger la présentation

T0616 ALGORITMA DAN PEMROGRAMAN (14-15)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. T0616 ALGORITMA DAN PEMROGRAMAN (14-15) SUBANDIJO UNIVERSITAS BINA NUSANTARA FAKULTAS ILMU KOMPUTER JAKARTA, 2005 T0616 - Algoritma dan Pemrograman

  2. DEFINISI POINTER • POINTER ADALLAH VARIABEL YANG NILAINYA ADALAH ALAMAT (ADDRESS) MEMORI VARIABEL LAIN. • MISAL V ADALAH VARIABEL YANG MEWAKILI DATA. MAKA KOMPILATOR AKAN MENENTUKAN ALAMAT SEL MEMORI UNTUK V YAITU &V. JIKA ALAMAT V DIBERIKAN KEPADA PV MAKA PV = &V • PV DISEBUT POINTER KE V KARENA IA MENUN-JUK LOKASI YANG DITEMPATI OLEH V. ALAMAT V NILAI V PV V T0616 - Algoritma dan Pemrograman

  3. DEFINISI POINTER • DATA YANG DIWAKILI OLEH V DIAKSES MENG-GUNAKAN OPERATOR * YANG DITULIS DI DEPAN PV SEHINGGA *PV DAN V MEWAKILI DATA YANG SAMA. • ISI YANG DITUNJUK OLEH PV ADALAH *PV (= V). • * DISEBUT CONTENT OF OPERATOR. IA JUGA DISEBUT SEBAGAI INDIRECTION OPERATOR KARENA DAPAT DIGUNAKAN UNTUK MENGISI NILAI SUATU VARIABEL SECARA TIDAK LANGSUNG YAITU MELALUI POINTER. • & DISEBUT ADDRESS OF OPERATOR T0616 - Algoritma dan Pemrograman

  4. MANFAAT POINTER • MENGIRIM KEMBALI LEBIH DARI SATU NILAI. • MENGOLAH ARRAY DENGAN CARA YANG LEBIH EFISIEN. • MEMBENTUK TIPE DATA YANG LEBIH KOM-PLEKS (LINKED-LIST, TREE, GRAPH). • MENGHASILKAN INFORMASI TENTANG MEMORI. ALAMAT V NILAI V PV V T0616 - Algoritma dan Pemrograman

  5. DEKLARASI DAN INISIALISASI POINTER • SINTAKS • <DATA_TYPE> *PTR_NAME ; • CONTOH • INT *PTR; • POINTER DAPAT DIBERI NILAI AWAL ALAMAT VARIABEL LAIN. IA JUGA DAPAT DIBERI NILAI 0, DISEBUT NULL POINTER YANG BIASA DIGUNA-KAN UNTUK MENGAKHIRI LINKED-LIST. • #DEFINE NULL 0 • … • INT U, V; • INT *PV = &V, *PU = NULL; T0616 - Algoritma dan Pemrograman

  6. CARA PENULISAN POINTER • int *p; OLD C • int * p; CLARITY • int* p; HAS A TYPE *int T0616 - Algoritma dan Pemrograman

  7. OPERATOR DAN DESKRIPSI POINTER • SIMBOL OPERATOR • CONTENT OF OPERATOR * • ADDRESS OF OPERATOR & • DESKRIPSI • SIMBOLIK PV  V • LOGIKAL PV MENUNJUK V • AKTUAL PV BERISI ALAMAT V, YAITU PV = &V T0616 - Algoritma dan Pemrograman

  8. CONTOH 1 main() { int u1, u2, v = 3; int *pv; u1 = 2 * (v + 5); pv = &v; u2 = 2 * (*pv + 5); printf(“\nu1 = %d u2 = %d”, u1, u2); } u1=16, u2=16 T0616 - Algoritma dan Pemrograman

  9. CONTOH 2 main() { int v = 3; int *pv = &v; printf(“\n*pv = %d v = %d”, *pv, v); *pv = 0; printf(“\n*pv = %d v = %d”, *pv, v); } *pv=3, v=3 *pv=0, v=0 T0616 - Algoritma dan Pemrograman

  10. CONTOH 3 main() { int u = 3, v; int *pu, *pv; pu = &u; v = *pu; pv = &v; printf(“\nu=%d &u=%d pu=%x *pu=%d”,u,&u,pu,*pu); printf(“\nv=%d &v=%d pv=%x *pv=%d”,v,&v,pv,*pv); } JIKA V DISIMPAN DI F8C DAN U DISIMPAN DI F8E, APA KELUARAN PROGRAM DI SAMPING? T0616 - Algoritma dan Pemrograman

  11. OPERASI PADA POINTER(1) • OPERAS HITUNG TIDAK BERLAKU DI POINTER KECUALI ‘-’ YANG DITAFSIRKAN SEBAGAI JARAK YANG MEMISAHKAN KEDUA ALAMAT. TIDAK ADA MAKNANYA ALAMAT DI TAMBAH ALAMAT. • POINTER BISA DITAMBAH ATAU DIKURANGI DENGAN NILAI INTEGER TERTENTU. MISALKAN PTR=PTR+1 DITAFSIRKAN SEBAGAI GESER POINTER SATU POSISI KE DEPAN. T0616 - Algoritma dan Pemrograman

  12. OPERASI PADA POINTER(2) • POINTER BISA DI-ASSIGN KE POINTER LAIN. MISALNYA, PTR1=PTR2 DITAFSIRKAN SEBAGAI BERIKAN PTR2 KE PTR1 SEHINGGA KEDUA POINTER SEKARANG MENUNJUK KE ALAMAT YANG SAMA YAITU ALAMAT YANG SEBELUMNYA DITUNJUK OLEH PTR2. • POINTER BISA DIBANDINGKAN DENGAN POINTER LAIN. SEBAGAI CONTOH, IF(PTR1 < PTR2) ... T0616 - Algoritma dan Pemrograman

  13. POINTER KE POINTER • char c = ‘x’; • char* pc = &c; • char** ppc = &pc; • char*** pppc = &ppc; • ***pppc = ‘X’; • pppcppcpcc x T0616 - Algoritma dan Pemrograman

  14. TRANSFER PARAMETER • BY VALUE: YANG DIKIRIM KE FUNGSI LAIN ADALAH NILAI DATA (R-VALUE). • BY LOCATION/ADDRESS: YANG DIKIRIM KE FUNGSI LAIN ADALAH ALAMAT (L-VALUE). T0616 - Algoritma dan Pemrograman

  15. CONTOH 4: BY VALUE void garis(char x) { int i; for(i=1; i<=10; i++) printf(“%c”, x); } main() { char c = ‘-’; garis( c ); } T0616 - Algoritma dan Pemrograman

  16. CONTOH 5: BY LOCATION void hitung(int x, int y, int *p, int *q) { *p = x + y; *q = x * y; } void main() { int x = 10, y = 5, p, q; hitung(x, y, &p, &q); printf(“x + y = %d, x * y = %d”, p, q); } T0616 - Algoritma dan Pemrograman

  17. CONTOH 6: BY VALUE/LOCATION? void tukar(char a, char b) { char c; c = a; a = b; b = c; } void main() { char x = ‘X’, y = ‘Y’; tukar(x, y); printf(“X = %c, Y = %c”, x,y); } PERTUKARAN DATA YANG DIHARAPKAN ANTARA X DAN Y TIDAK TERJADI. MENGAPA? T0616 - Algoritma dan Pemrograman

  18. CONTOH 7: BY VALUE/LOCATION #include<stdio.h> void f1(int u, int v) { u=0; v=0; printf(“\nDi dalam f1: u = %d, v = %d”, u, v); return 0; } void f2(int *pu, int *pv) { *pu=0; *pv=0; printf(“\nDi dalam f2: *pu = %d, *pv = %d”, *pu, *pv); return 0; } T0616 - Algoritma dan Pemrograman

  19. CONTOH 7: BY VALUE/LOCATION void main() { int u=1, v=3; printf(“\nSebelum panggil f1: u = %d, v = %d”, u, v); f1(u,v); printf(“\nSesudah panggil f1: u = %d, v = %d”, u, v); printf(“\nSebelum panggil f2: u = %d, v = %d”, u, v); f2(&u,&v); printf(“\nSesudah panggil f2: u = %d, v = %d”, u, v); return 0; } T0616 - Algoritma dan Pemrograman

  20. REFERENCE VARIABEL • ONLY ON C++ • VARIABEL REFERENCE ADALAH ALIAS ATAU SINONIM VARIABEL LAIN. JIKA VARIABEL LAIN DIUBAH MAKA VARIABEL REFERENCE JUGA BERUBAH, DAN SEBALIKNYA. • IA DIBENTUK DENGAN MENAMBAHKAN OPERATOR & DI TYPE SPECIFIER. • IA HARUS DIINISIALISASI. • CONTOH: • INT N = 33; • INT& R = N; //R ADALAH ALIAS DARI N T0616 - Algoritma dan Pemrograman

  21. FUNGSI SWAP() • FUNGSI SWAP() BERIKUT AKAN BANYAK ANDA TEMUI DI SORT DATA. void swap(int& x, int& y) { int temp; x = temp; x = y; y = temp; } T0616 - Algoritma dan Pemrograman

  22. CALL BY VALUE int x; Parameter formal x adalah variabel lokal. Ia adalah duplikasi parameter aktual. Ia tidak dapat mengubah parameter aktual. Parameter aktual mungkin konstan, variabel atau ekspresi. Parameter aktual adalah read only. CALL BY REFERENCE int &x; Parameter formal adalah referensi lokal. Ia adalah sinonim parameter aktual. Ia dapat mengubah parameter aktual. Parameter aktual harus variabel. Parameter aktual adalah read-write. CALL BY VALUE VS CALL BY REFERENCE(1) T0616 - Algoritma dan Pemrograman

  23. int main() { int x=2, y=4; printf(“Sebelum sqByVa x:%d”,x); printf(“Nilai balik sqByVa : %d”, sqByVa(x)); printf(“Sesudah sqByVa x:%d“,x); printf(“Sebelum sqByRe y:%d”,y); sqByRe(y); printf(“Sesudah sqByRe y:%d”,y); return 0; } int sqByVa(int a) { return a*a; } void sqByRe(int &yRe) { yRe *= yRe; } CALL BY VALUE VS CALL BY REFERENCE (2) ASUMSI: PROTOTIPE FUNGSI int sqByVa(int) DAN void sqByRe(int&) ADA DI ATAS MAIN() T0616 - Algoritma dan Pemrograman

  24. DANGLING POINTER • UNINITIALIZED POINTER • FLOAT * P; • *P = 3.14159; // ERROR. NO STORAGE HAS // BEEN ALLOCATED FOR *P • DEALLOCATED POINTER • FLOAT* Q = NEW FLOAT(3.14159); • DELETE Q; • *Q = 2.71828; //ERROR. Q HAS BEEN //DEALLOCATED • TIDAK ADA DANGLING REFERENCE KARENA REFERENCE HARUS DIINISIALISASI SEDANGKAN POINTER TIDAK. T0616 - Algoritma dan Pemrograman

  25. void swap( int &a, int & b) { int temp; temp = a; a = b; b = temp; } int main() { int x=4, y=8; swap(x,y); printf(“%d %d”,x,y); return 0; } void swap( int * a, int * b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int x=4, y=8; swap(&x,&y); printf(“%d %d”,x,y); return 0; } POINTER SEBAGAI PARAMETER T0616 - Algoritma dan Pemrograman

  26. int *fungsi(int *p) { int i, im , m = 0; for(i=0; i<5; i++) if(*(p+i)>m) { m = *(p+i); im = i; } return(p+im); } main(){ int a[] = {20, 40, 10, 50, 30}; int *ptr; ptr = fungsi(a); printf(“ m = %3d”,*ptr); } POINTER SEBAGAI RETURN VALUE APA RETURN VALUE DARI *fungsi()? T0616 - Algoritma dan Pemrograman

  27. THE END “...ALL YOU NEED IS LOVE…” T0616 - Algoritma dan Pemrograman

More Related