I.
Tujuan
Setelah mengerjakan LKP 7 ini, anda diharapkan dapat: 1. Memahami konsep pointer di dalam Bahasa C 2. Memahami konsep copy value dan copy address 3. Menggunakan pointer di dalam program lainnya
II.
Dasar Teori
Pointer
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Lokasi memori tersebut mungkin diwakili oleh sebuah variabel atau mungkin juga lokasi bebas dalam memori. Sedangkan pointer sendiri yang berupa nilai ditampung dalam sebuah variabel yang disebut variabel pointer. Jadi variable pointer atau pointer berisi suatu nilai yang menyatakan alamat suatu lokasi.
Suatu variable pointer didefinisikan dengan bentuk :
Contoh : a *c b *d Var
2
*
3
*
Value
A * B * Address Step : 1. d=&a *d = 2 ; d = A 2. c=&b *c = 3 ; c = B 3. b=*d b = 2 ; &b = B 4. *d=*c *d = 2 ; d = ADari contoh di atas terlihat bahwa addres pada variabel pointer dapat berubah – ubah, apabila addres suatu variabel pointer berubah maka valuenya akan berubah sesuai addres yang ditunjuk oleh pointer tersebut. Apabila pada address yang ditunjuk oleh pointer tersebut mengalami perubahan value, maka value pada pointer juga akan berubah.
46/77
Fakultas Ilmu Komputer – Universitas Sriwijaya Contoh program :
Pemberian Memori Alokasi Pada Pointer
Sebuah pointer itu tidak memiliki alamat, sehingga pointer harus menumpang pada variabel lain. Namun sekarang kita memberikan alamat kepada variabel pointer sehingga pointer tidak lagi menumpang pada variabel lain.Untuk membuat alamat menggunakan malloc yang disesuaikan dengan panjang data.
Contoh Program :
Abstract Data Type (ADT)
ADT adalah definisi TYPE dan sekumpulan PRIMITIF (operasi dasar) terhadap TYPE 1: #include<iostream.h> 2: #include<conio.h> 3: void main() 4: { 5: int x; 6: float y; 7: long z; 8: 9: x = 3; 10: y = 3.7; 11: z = 1000; 12:
13: cout<<"isi variabel x = "<<x<<endl; 14: cout<<"isi variabel y = "<<y<<endl; 15: cout<<"isi variabel z = "<<z<<endl; 16:
17: cout<<endl; 18:
19: cout<<"alamat variabel x = "<<&x<<endl; 20: cout<<"alamat variabel y = "<<&y<<endl; 21: cout<<"alamat variabel z = "<<&z<<endl; 22:}
VariabelPointer = (TipeData *) malloc(sizeof(TipeData));
1: #include<iostream.h> 2: #include<conio.h> 3: #include<malloc.h> 4: 5: void main() 6: { 7: int *p; 8:
9: p =(int *)malloc(sizeof(int));//membuat alamat 10: 11: *p=5;//deklarasi nilai 12: 13: cout<<"isi P "<< *p<<endl; 14: cout<<"alamat P "<<p<<endl; 15: }
47/77
Fakultas Ilmu Komputer – Universitas Sriwijaya
tersebut. Selain itu, dalam sebuah ADT yang lengkap, disertakan pula definisi invarian dari TYPE dan aksioma yang berlaku. ADT merupakan definisi statik. Definisi type dari sebuah ADT dapat mengandung sebuah definisi ADT lain.
Misalnya:
ADT Waktu yang terdiri dari ADT JAM dan ADT DATE
GARIS yang terdiri dari dua buah POINT
SEGI4 yang terdiri dari pasangan dua buah POINT (Top, Left) dan (Bottom,Right)
Type diterjemahkan menjadi type terdefinisi dalam bahasa yang bersangkutan, misalnya menjadi record dalam bahasa Ada/Pascal atau struct dalam bahasa C. Primitif, dalam konteks prosedural, diterjemahkan menjadi fungsi atau prosedur.
Primitif dikelompokkan menjadi :
Konstruktor/Kreator, pembentuk nilai type. Semua objek (variabel) bertype tsb harus melalui konstruktor. Biasanya namanya diawali Make.
Selektor, untuk mengakses komponen type (biasanya namanya diawali dengan Get)
Prosedur pengubah nilai komponen (biasanya namanya diawali Get)
Validator komponen type, yang dipakai untuk mentest apakah dapat membentuk type sesuai dengan batasan
Destruktor/Dealokator, yaitu untuk .menghancurkan. nilai objek (sekaligus memori penyimpannya)
Baca/Tulis, untuk interface dengan input/output device
Operator relational, terhadap type tsb untuk mendefinisikan lebih besar, lebih kecil, sama dengan, dsb
Aritmatika terhadap type tsb, karena biasanya aritmatika dalam bahasa pemrograman hanya terdefinisi untuk bilangan numerik
Konversi dari type tersebut ke type dasar dan sebaliknya ADT biasanya diimplementasi menjadi dua buah modul, yaitu:
Definisi/Spesifikasi Type dan primitif.
o Spesifikasi type sesuai dengan bahasa yang bersangkutan.
o Spesifikasi dari primitif sesuai dengan kaidah dalam konteks prosedural, yaitu: Fungsi : nama, domain, range dan prekondisi jika ada
48/77
Fakultas Ilmu Komputer – Universitas Sriwijaya
Prosedur : Initial State, Final State dan Proses yang dilakukan
Body/realisasi dari primitif, berupa kode program dalam bahasa yang bersangkutan. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan selektor dan konstruktor.
Sebuah contoh pendeklarasian struktur dapat dilihat dibawah ini : struct data_tanggal { int tahun; int bulan; int tanggal; };
Anggota struktur diakses dengan menggunakan bentuk : variabel_struktur.nama_anggota
III.
Prepraktikum
1. Apa yang dimaksud dengan struktur ?
2. Diketahui definisi struktur dibawah ini (soal 2-6 berdasarkan yang detahui) : struct S { int I; char *c; char c2[100]; float x; #include<iostream.h>
typedef struct lingkaran{
float r;
float keliling;
float luas; };
void kllluas(lingkaran &L);
void main() { lingkaran L; cout<<"masukkan jari-jari :"; cin>>L.r; kllluas (L);
cout<<" keliling "<<L.keliling<<endl; cout<<" luas "<<L.luas;
}
void kllluas(lingkaran &L) {
L.keliling = 2*3.14*L.r; L.luas =3.14*L.r*L.r; }
49/77
Fakultas Ilmu Komputer – Universitas Sriwijaya long int l;
}
3. Berapakah struktur yang didefinisikan dari yang diketahui di atas ? 4. Berapakah anggota yang didefinisikan ?
5. Berapakah jumlah variabel struktur yang didefinisikan ? Jika ada, apa saja namanya ?
IV.
Kegiatan Praktikum
1. Terjemahkan prototipe/primitive kasus pointer di berikut ini ke dalam bahasa C dengan langkah-langkah : a. d=&a b. c=a c. e=&b d. b=c e. *d=c
Prototipe dan Primitif / Algoritma
a b c
2
3
5
A B C *d *e*
*
* * varvalue
address Cetak nilai dan alamat variabel-variabel di atas.2. Ubahlah program ADT pada contoh soal yang mana variable ADT merupakan variable pointer.
V.
Hasil LKP (ditulis tangan di kertas A4)
No Deskripsi Jawaban
50/77
Fakultas Ilmu Komputer – Universitas Sriwijaya 2
VI.
Evaluasi dan Pertanyaan
1. Untuk kasus pointer, ketikkan code berikut ; &c = d;
Apa yang terjadi ? alasanya ?
2. Untuk kasus pointer, hapus code &c = d;, ganti dengan kode berikut : d = &c;
Apakah masih error ? alasannya ?
3. Untuk kasus array, bagaimana jika nilai n diubah menjadi n=3 ?
51/77
Fakultas Ilmu Komputer – Universitas Sriwijaya