Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Bab-10

BAB 10 POINTER 5.1 Tujuan • Tujuan bab 10 ini, adalah: • • Praktikan memahami dan mengerti algoritma Pointer Praktikan bisa membuat program dengan menggunakan Pointer Praktikan mengetahui penggunaan Pointer 5.2 Pengertian Pointer Variabel bertipe array merupakan suatu tipe data yang bersifat statis (ukuran dan urutannya sudah pasti). Selain itu ruang memori yang dipakai olehnya tidak dapat dihapus bila variabel bertipe array tersebut sudah tidak digunakan lagi pada saat program dijalankan. Untuk memecahkan hal tersebut maka diperlukan suatu tipe data yang bersifat dinamis. Perubah dinamis adalah suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi. Dengan kata lain pada saat program dikompilasi, lokasi untuk perubah tersebut belum ditentukan. Kompiler hanya akan mencatat bahwa suatu perubah akan diperlakukan sebagai perubah dinamis. Pada perubah Statis, isi pengingat pada lokasi tertentu (nilai perubah) adalah data sesungguhnya yang akan diolah. Pada perubah dinamis, nilai perubah adalah alamat lokasi lain yang menyimpan data sesungguhnya. Ilustrasi: 10 A 1000 A Gambar 1. Ilustrasi perubah statis 10 1000 Gambar 2. Ilustrasi perubah dinamis Pada gambar 1 di atas. perubah A adalah perubah Statis. Dalam hal ini 1000 adalah nilai data yang sesungguhnya dan disimpan pada perubah (lokasi) A. Sedangkan pada gambar 2 diatas perubah A adalah perubah dinamis. Nilai perubah ini, misalnya 10. Nilai ini bukan nilai data yang sesungguhnya, tetapi lokasi dimana data yang sesungguhnya berada. Jadi dalam hal ini data yang sesungguhnya tersimpan pada lokasi 10. Perubah dinamis disebut juga pointer yang artinya kira-kira menunjuk ke sesuatu. Nilai data yang ditunjuk oleh suatu pointer biasanya disebut sebagai simpul/node. Jadi Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua Tabel 1. Perbedaan Array dengan Pointer  Kriteria Sifat Ukuran Alokasi variabel Array Statis Pasti Saat program dijalankan sampai selesai Pointer Dinamis Sesuai Kebutuhan Dapat diatur sesuai kebutuhan 5.3 Deklarasi Pointer Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk Umum : Tipe_data *nama_pointer; Tipe data pointer mendefinisikan tipe dari obyek yang ditunjuk oleh pointer. Secara teknis, tipe apapun dari pointer dapat menunjukkan lokasi (dimanapun) dalam memori. Bahkan operasi pointer dapat dilaksanakan relatif terhadap tipe dasar apapun yang ditunjuk. Contoh, ketika kita mendeklarasikan pointer dengan tipe int*, kompiler akan menganggap alamat yang ditunjuk menyimpan nilai integer - walaupun sebenarnya bukan (sebuah pointer int* selalu menganggap bahwa ia menunjuk ke sebuah obyek bertipe integer, tidak peduli isi sebenarnya). Karenanya, sebelum mendeklarasikan sebuah pointer, pastikan tipenya sesuai dengan tipe obyek yang akan ditunjuk. Contoh : int *px; char *sh; Contoh Algoritma 1 : Algoritma BacaVariabelPointer {program utama untuk membaca dan menampilkan variable pointer} Deklarasi X, Y : integer PX : Pointer to integer Deskripsi X ← 87 PX ← ↑X Y ← ↑PX Write(‘Alamat X = ‘,↑X) Write(‘Isi PX = ‘,PX) Write(‘Isi x = ‘,X) Write(‘Nilai yang ditunjuk oleh PX = ‘,↑PX) Write(‘Nilai Y = ‘,Y) Contoh Program 1 : //Program BacaVariabelPointer #include <stdio.h> #include <conio.h> main() { int x,y; /* x dan y bertipe int */ int *px; /* px pointer yang menunjuk objek */ x = 87; px = &x; /* px berisi alamat dari x */ y = *px; /* y berisi nilai yang ditunjuk px */ printf("Alamat x = %p\n", &x); printf("Isi px = %p\n", px); printf("Isi x = %i\n", x); printf("Nilai yang ditunjuk oleh px = %i\n", *px); printf("Nilai y = %i\n", y); getch(); } 5.4 Operasi Pointer a. Operasi Penugasan Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain. Contoh Algoritma 2 : Algoritma OperasiPenugasanPointer {program utama untuk membaca dan menampilkan hasil operasi penugasan dengan pointer} Deklarasi Y : real X1, X2 : pointer to real Deskripsi Y ← 13.45 X1 ← ↑Y X2 ← X1 Write(’Nilai variabel Y = ’,Y,’ada di alamat’,X1) Write(’Nilai variabel Y = ’,Y,’ada di alamat’,X2) b. Operasi Aritmatika Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan. Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index selanjutnya) dalam memori. Begitu juga operasi pengurangan. Contoh Algoritma 3 : Algoritma OperasiAritmetika {program utama untuk membaca dan menampilkan hasil operasi aritmetika dengan pointer} Deklarasi Nilai : array[0..2] of integer Penunjuk : pointer to integer Deskripsi nilai[0] ← 125 nilai[1] ← 345 nilai[2] ← 750 penunjuk ← ↑nilai[0] write(’Nilai’, ↑penunjuk, ’ ada di alamat memori ’, penunjuk) write(’Nilai’, ↑(penunjuk+1),’ ada di alamat memori ’, (penunjuk+1)) write(’Nilai’, ↑(penunjuk+2),’ ada di alamat memori %p\n", penunjuk+2) c. Operasi Logika Suatu pointer juga dapat dikenai operasi logika. Contoh Algoritma 4 : Algoritma OperasiLogika {program utama untuk membaca dan menampilkan hasil operasi logika dengan pointer} Deklarasi a, b : integer Pa, Pb : pointer to integer a ← 100 b ← 200 pa ← ↑a pb ← ↑b if (pa < pb) then write(‘pa menunjuk ke memori lebih rendah dari pb’) else if (pa = pb) then write(’pa menunjuk ke memori yang sama dengan pb’) else write(‘pa menunjuk ke memori lebih tinggi dari pb’) 5.5 Pointer Dan String Contoh Algoritma 4 : Algoritma PointerString {program utama untuk membaca dan menampilkan hasil string dengan tipe pointer} Deklarasi nama1, nama2 : pointer to string namax : string ↑nama1 ← ’SPIDERMAN’ ↑nama2 ← ’ GATOTKACA’ write(‘SEMULA : ’) write(‘Saya suka ‘,nama1) write(’Tapi saya juga suka ’, nama2); /* Penukaran string yang ditunjuk oleh pointer nama1 dan nama2 */ write(’SEKARANG :’) write(’Saya suka ’, ↑nama1) write("Dan saya juga masih suka, ↑nama2) Contoh Algoritma 5 : Procedure misteri1(input/output s : Pointer to string) {algoritma untuk membaca dan menampilkan hasil string dengan tipe pointer memakai procedure} while ( ↑s ≠ '\0' ) do if (↑s >= 'a') and (↑s <= 'z' ) then ↑s -= 32 ++s endwhile Algoritma PointerString {program utama untuk membaca dan menampilkan hasil string dengan tipe pointer dengan procedure} Deklarasi string : array of string string[] ← ‘characters’ write(‘String sebelum proses adalah ‘, string) misteri1(string) write(‘String setelah proses adalah ‘, string) 5.6 Pointer Menunjuk Suatu Array Contoh Algoritma 6 : Algoritma PointerArray {program utama untuk membaca dan menampilkan hasil array dengan tipe pointer} Deklarasi tgl_lahir[] : array of integer Ptgl : pointer to integer tgl_lahir[] ← ‘13,9,1982’ ptgl ← tgl_lahir /* ptgl berisi alamat array */ write(‘Diakses dengan pointer’) write(‘Tanggal = ‘, *ptgl) write(‘Bulan ‘, ↑(ptgl + 1)) write(‘Tahun = ‘,↑ (ptgl + 2)) write(‘Diakses dengan array biasa’) write(‘Tanggal = ‘, tgl_lahir[0]); write(‘Bulan = ‘, tgl_lahir[1]) write(‘Tahun = ‘, tgl_lahir[2]) 5.7 Memberi Nilai Array Dengan Pointer Contoh Algoritma 7 : Algoritma PointerNilaiArray {program utama untuk membaca dan menampilkan nilai array dengan pointer} Deklarasi x : array(0..5) of integer p : pointer to integer k : integer p←x x[0] ← 5 /* x[0] diisi dengan 5 sehingga x[0] = 5 */ x[1] ← x[0] /* x[1] diisi dengan x[0] sehingga x[1] = 5 */ x[2] ← ↑p + 2 /* x[2] diisi dengan x[0] + 2 sehingga x[2] = 7 */ x[3] ← ↑(p+1) - 3 /* x[3] diisi dengan x[1] - 3 sehingga x[3] = 2 */ x[4] ← ↑(x + 2) /* x[4] diisi dengan x[2] sehingga x[4] = 7 */ for k→0 to 5 do write(’x[k] = ’, x[k])