• Tidak ada hasil yang ditemukan

Lembar Kerja Praktikum 7 : Pointer dan ADT

Dalam dokumen Modul Algoritma dan Struktur Data (1) (Halaman 45-51)

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 = A

Dari 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

*

*

* * var

value

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

Dalam dokumen Modul Algoritma dan Struktur Data (1) (Halaman 45-51)

Dokumen terkait