Upload
mukmin1st
View
7
Download
0
Embed Size (px)
DESCRIPTION
algoritma dan struktur data
Citation preview
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
POINTER & STRUCT
1. Dasar Teori
A. Pointer
Pengertian Pointer
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.
Pendeklarasian Variabel dan Pointer
Dalam bahasa C / C++ terdapat format dalam deklarasi variabel.
Format deklarasi variabel dalam bahasa C / C++ adalah sebagai berikut:
Seperti halnya variabel lain, variabel pointer juga harus
dideklarasikan terlebih dahulu sebelum digunakan. Bentuk umum deklarasi
pointer adalah :
Setiap variabel yang dideklarasikan disimpan di dalam slot - slot
memory yang memiliki nomor sendiri – sendiri. Dengan pointer kita dapat
mengetahui nomor – nomor memory ini dan sekaligus memanipulasi isi
dari variabel yang ―ditunjuk‖ oleh pointer ini.
Agar suatu variabel pointer dapat menunjuk ke variabel lain,
variabel pointer ini harus diisi dengan alamat dari variabel yang hendak
ditunjuk. Sintaksis proses penunjukan pointer ke variabel lain adalah:
tipe_data1 nama_variabel_biasa;
tipe_data2 *nama_variabel_pointer;
nama_variabel_pointer=&nama_variabel_biasa;
tipe_data *nama_pointer
tipe_data nama_variabel
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Pernyataan pertama merupakan deklarasi variabel biasa (yang
hendak ditunjuk oleh pointer) bernama nama_variabel_biasa dengan tipe
data tipe_data1. Pernyataan kedua merupakan deklarasi variabel pointer
bernama nama_variabel_pointer dengan tipe data tipe_data2. Sedangkan
pernyataan ketiga adalah pengisian variabel pointer
nama_variabel_pointer dengan alamat variabel nama_variabel_biasa
(yang hendak ditunjuknya).
Mengakses Variabel Dengan Pointer
Dalam bahasa C / C++ kita bisa mengakses variabel dengan dua cara
yaitu :
Secara langsung
Metode ini adalah metode paling dasar dan paling sering
digunakan sebagai cara yang umum untuk melakukan akses ke dalam
variabel. Akses ini berupa pemberian nilai atau pengembalian nilai
kembalian. Metode ini menjadi standar dalam deklarasi variabel di bahasa
C / C++. Syntax yang digunakan adalah :
tipe_data nama_variabel;
tipe_data nama_variabel = nilai variabel;
Secara tidak langsung dengan menggunakan pointer
Karena pointer adalah variabel yang menunjuk variabel lain, maka
kita dapat mengakses variabel lain dengan memanipulasi nilai yang
ruangan memory-nya ditunjuk oleh pointer tersebut. Dalam bahasan
pointer ada dua operator yang memegang kunci operasi pada pointer,
yaitu operator & dan operator *.
Operator &
Operator & merupakan operator alamat. Pada saat
pendeklarasian variabel, user tidak diharuskan menentukan lokasi
sesungguhnya pada memory, hal ini akan dilakukan secara otomatis
oleh kompiler dan operating sysem pada saat run-time. Jika ingin
mengetahui dimana suatu variable akan disimpan, dapat dilakukan
dengan memberikan tanda ampersand (&) didepan variable , yang
berarti "address of". Contoh : tif = &ub;
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Penulisan tersebut berarti akan memberikan variable tif alamat
dari variable ub. Karena variabel ub diberi awalan karakter
ampersand (&), maka yang menjadi pokok disini adalah alamat
dalam memory, bukan isi variabel.
Operator *
Operator * merupakan operator reference. Dengan
menggunakan pointer, kita dapat mengakses nilai yang tersimpan
secara langsung dengan memberikan awalan operator asterisk (*)
pada identifier pointer, yang berarti "value pointed by". Contoh : tif
= *ub; Penulisan tersebut berarti nilai variabel tif sama dengan nilai
yang ditunjuk oleh variabel ub.
Kemudian dalam teknis penggunaan pointer, pengaksesan variabel
dilakukan dengan cara menggunakan kedua operator tersebut. Jika kita
ingin melihat alamat dari variabel yang ditunjuk kita gunakan operator &.
Sedangkan untuk mengetahui nilai variabel yang ditunjuk kita gunakan
operator *.
B. Struct
Definisi
Beberapa variabel (dapat berbeda tipe) yang dikelompokkan menjadi satu
dengan sebuah nama baru.
Penggunaan Struct
Struct digunakan untuk membuat tipe data baru.
Contoh:
struct motor {
float volts; //voltage of the motor
float amps; //amperage of the motor
int phases; //# of phases of the motor
float rpm; //rotational speed of motor
};
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
typedef struct motor motor;
Cara Menggunakan Tipe Data Baru
motor p, q, r;
Mendefinisikan tiga variable – p, q, dan r – masing masing
bertipe data motor
motor M[25];
Mendeklarasikan array M berisi 25 data bertipe motor
motor *m;
Mendeklarasikan variabel pointer yang menyimpan alamat slot
memori yang berisi data bertipe motor
Cara Membuat Struct
Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah
sebagai berikut:
struct nama_tipe_struktur
{
tipe field1;
tipe field2;
...
...
tipe fieldn;
}
variabel_struktur;
Cara Mengakses Elemen Struct
Elemen dari struktur dapat diakses dengan menggunakan bentuk
variabel_struktur.nama_field antara variabel_struktur dan nama_field
dipisahkan dengan operator titik (disebut operator anggota struktur).
Contoh:
Deklarasi
motor p;
motor q[10];
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Maka cara pengaksesannya:
p.volts — is the voltage
p.amps — is the amperage
p.phases — is the number of phases
p.rpm — is the rotational speed
q[i].volts — is the voltage of the ith motor
q[i].rpm — is the speed of the ith motor
C. Pointer pada Struct
Cara Memasukkan Alamat Struct ke Pointer
Seperti halnya pointer untuk variabel biasa yang menunjukkan alamat letak
dari nilai variabelnya, pointer untuk struktur juga menunjukkan alamat letak
dari variabel strukturnya. Pointer untuk struktur juga dideklarasikan secara
sama dengan variabel pointer biasa, yaitu dengan menggunakan asterisk di
muka nama variabel pointernya.
Berikut ini adalah contoh deklarasi variabel pointer untuk struktur ini:
struct
{
char Nama[5];
float IP;
}
Mahasiswa, *PM;
PM = &Mahasiswa;
Atau:
struct
{
char Nama[5];
float IP;
}
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Mahasiswa, *PM = &Mahasiswa;
Cara Mengakses Elemen - Elemen Struct Via Pointer
Telah diketahui bahwa nilai-nilai elemen suatu struktur dapat
diakses dengan menggunakan operator titik (‗.‘). Selain dapat menggunakan
operator titik, untuk operasi pointer dapat juga digunakan operator ‗->‘ atau
operator ‗*‘ untuk mengakses elemen-elemen suatu struktur. Misalnya
untuk mengakses nilai elemen IP dari variabel struktur Mahasiswa dapat
dilakukan dengan menggunakan nama variabelnya atau dengan pointer
yang menunjuk ke nama variabelnya sebagai berikut:
nama_struct.nama_elemen
Contoh : Mahasiswa.IP
atau
nama_variabel_pointer->nama_elemen_struct (melalui pointer)
Contoh : PM->IP
atau
(*nama_variabel_pointer). nama_elemen_struct (melalui pointer)
Contoh : (*PM).IP
PM adalah pointer yang menunjuk ke alamat variabel Mahasiswa.
(*PM) menunjukkan nilai data di lokasi yang ditunjukkan oleh pointer PM,
yaitu nilai variabel struktur Mahasiswa.
(*PM).IP menunjukkan nilai elemen IP untuk variabel struktur
Mahasiswa.
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
2. Uji Coba
Percobaan 1
Pointer
Ketiklah program di atas
1. Apa yang terjadi di memori komputer setelah bagian deklarasi variable
dieksekusi?
2. Jelaskan proses yang terjadi ketika baris 11 dieksekusi. Apa guna operator
&?
3. Jika data x dilambangkan dengan kotak dan pointer px dilambangkan titik,
ilustrasikan dengan gambar kondisi x dan px sebelum dan sesudah baris 11
dieksekusi
4. Jelaskan maksud baris 16
5. Ganti baris 8 dengan float *px. Jalankan program lalu amati apa yang
terjadi. Apa yang dapat anda simpulkan?
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Percobaan 2
Passing by Value dan Passing by Reference
Ketiklah program di atas
1. Apa beda kode pada baris 14 dan 17?
2. Bagaimana cara mengakses isi variabel pointer?
3. Bagaimana cara mengakses data yang alamatnya disimpan oleh variabel
pointer?
4. Pindahkan baris 16 dan 17 ke baris 10. Compile ulang. Apa yang terjadi?
Mengapa?
5. Pindahkan baris 16 dan 17 ke baris antara baris 11 dan 12. Compile ulang.
Apa yang terjadi? Mengapa?
6. Jelaskan perbedaan penggunaan * pada bagian deklarasi variabel dan
bagian badan program!!!
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Percobaan 3
Alokasi Memori Dinamis
Ketiklah program di atas
1. Apa guna dari baris 5 – 9?
2. Apa beda baris 21 – 22 dengan baris 25 – 26?
3. Jelaskan cara mengakses field sebuah struct menggunakan pointer!
4. Tambahkan kode sesudah baris 26 untuk mengubah nilai m.volts menjadi
30 dan m.amps menjadi 40. Kemudian tampilkan isi m.volts dan m.amps.
Akses dilakukan melalui pointer pm menggunakan operator ->
5. Tambahkan hal berikut pada program di atas
deklarasikan pm2 sebagai variabel pointer to motor
sesudah baris ke 26 salin nilai pm ke pm2
Tampilkan nilai m menggunakan pm2
ilustrasikan dengan gambar pm, pm2 dan m sebelum dan sesudah
penyalinan nilai
Materi 1
Praktikum Algoritma Dan Struktur Data
Laboratorium Komputer Dasar
Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya
Percobaan 4
Alokasi Memori Dinamis
Ketiklah kode program di atas
1. Jelaskan baris 7 – 9. Apa beda ptr dan pptr
2. Jika pada bagian badan program terdapat
pptr
*pptr
**pptr
Jelaskan hasil keluarannya!
3. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 12 dan 13 dieksekusi
4. Berapa nilai i & j setelah baris 14 dieksekusi? Tampilkan dengan printf()
5. Berapa nilai i & j setelah baris 15 dieksekusi? Tampilkan dengan printf()
6. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 16 dieksekusi
7. Berapa nilai i & j setelah baris 17 dieksekusi? Tampilkan dengan printf()
8. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 17 dieksekusi