• Tidak ada hasil yang ditemukan

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR (3)

N/A
N/A
Protected

Academic year: 2018

Membagikan "LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR (3)"

Copied!
22
0
0

Teks penuh

(1)

LAPORAN PRAKTIKUM

ALGORITMA DAN STRUKTUR DATA I

Pointer

Modul IV

Disusun Oleh :

Syukur Jaya Mendrofa 201501072

Dosen Pengampu :

Oskar Ika Adi Nugroho S.T., MT

JURUSAN SISTEM INFORMASI

SEKOLAH TINGGI ILMU KOMPUTER (STIKOM)

“YOS SUDARSO”

PURWOKERTO

2016

(2)

Pointer

Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000.

Mendeklarasikan Variabel Pointer

Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :

Adapun nama_variabel adalah nama dari variabel pointer. Sebagai contoh :

int *px; / *contoh 1 */

char *pch1, *pch2; / *contoh 2 */

(3)

Mengatur Pointer agar Menunjuk ke Variabel Lain

Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int, maka

&x

berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu :

px = &x;

Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.

Mengakses Isi Suatu Variabel Melalui Pointer

Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary). Contoh penerapan operator * yaitu :

*px

yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan berikut

px = &x ; y = *px ;

(4)

Pada program di atas, dua pernyataan

px = &x ; y = *px ;

sebenarnya dapat digantikan dengan sebuah pernyataan berupa

y = x;

Seandainya pada program di atas tidak terdapat pernyataan

px = &x ;

(5)

maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x. Hal seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan “bug” yang bisa mengakibatkan komputer tidak dapat dikendalikan (hang).

Mengakses dan Mengubah isi Suatu Variabel Pointer

Contoh berikut memberikan gambaran tentang pengubahan isi suatu variabel secara tak langsung (yaitu melalui pointer). Mula-mula pd dideklarasikan sebagai pointer yang menunjuk ke suatu data bertipe float dan d sebagai variabel bertipe float. Selanjutnya

d = 54.5;

digunakan untuk mengisikan nilai 54,5 secara langsung ke variabel d. Adapun

pd = &d;

digunakan untuk memberikan alamat dari d ke pd. Dengan demikian pd menunjuk ke variabel d. Sedangkan pernyataan berikutnya

*pd = *pd + 10; (atau: *pd += 10; )

merupakan instruksi untuk mengubah nilai variabel d secara tak langsung. Perintah di atas berarti “jumlahkan yang ditunjuk pd dengan 10 kemudian berikan ke yang ditunjuk oleh pd, atau identik dengan pernyataan

d = d + 10;

Akan tetapi, seandainya tidak ada instruksi

pd = &d; maka pernyataan

*pd = *pd + 10; tidaklah sama dengan

d = d + 10;

(6)

Pointer dan Array (pointer to array)

Hubungan antara pointer dan array pada C sangatlah erat. Sebab sesungguhnya array secara internal akan diterjemahkan dalam bentuk pointer. Pembahasan berikut akan memberikan gambaran hubungan antara pointer dan array. Misalnya dideklarasikan di dalam suatu fungsi

static int tgl_lahir[3] = { 28, 08, 92};

dan

int *ptgl;

Kemudian diberikan instruksi

ptgl = &tgl_lahir[0]; //variabel array pointer bertipe integer

maka ptgl akan berisi alamat dari elemen array tgl_lahir yang berindeks nol. Instruksi di atas bisa juga ditulis menjadi

(7)

sebab nama array tanpa tanda kurung menyatakan alamat awal dari array. Sesudah penugasan seperti di atas,

*ptgl

(8)

Keterangan :

(9)

Pointer dan String (pointer to string)

Contoh hubungan pointer dan string ditunjukkan pada program berikut :

Pada program di atas,

char *pNama = “SYUKUR JAYA MENDROFA”;

akan menyebabkan kompiler

1. mengalokasikan variabel pNama sebagai variabel pointer yang menunjuk ke obyek bertipe char dan menempatkan konstanta “SYUKUR JAYA MENDROFA” dalam suatu memori

2. kemudian pointer pNama akan menunjuk ke lokasi string “SYUKUR JAYA MENDROFA”

Pernyataan di atas menyerupai pernyataan char Nama [] = “SYUKUR JAYA MENDROFA”; tetapi sebenarnya kedua pernyataan inisialisasi di depan tidaklah tepat sama. Sebab pNama adalah pointer (menyatakan alamat) yang dengan mudah dapat diatur agar menunjuk ke string lain (bukan string “SYUKUR JAYA MENDROFA”), sedangkan Nama adalah array (array menyatakan alamat yang konstan, tak dapat diubah).

(10)
(11)
(12)

Pointer dalam Fungsi

Pointer dan kaitannya dengan fungsi meliputi : 1. Pointer sebagai parameter fungsi

2. Pointer sebagai keluaran fungsi

Pointer Sebagai Parameter Fungsi

Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variabel internal dapat diubah oleh fungsi yang dipanggil.

Sebagai contoh dapat dilihat pada fungsi berikut.

void naikkan_nilai (int *x, int *y) { *x = *x + 2;

*y = *y + 2; }

 Fungsi di atas dimaksudkan agar kalau dipanggil, variabel yang berkenaan dengan parameter aktual dapat diubah nilainya, masing-masing dinaikkan sebesar 2. Contoh pemanggilan :

naikkan_nilai(&a, &b);

(13)

Pointer Sebagai Keluaran Fungsi (return value)

ƒ Suatu fungsi dapat dibuat agar keluarannya berupa pointer.

Misalnya, suatu fungsi menghasilkan keluaran berupa pointer yang menunjuk ke string nama_bulan, seperti pada contoh berikut.

char *nama_bulan(int n) {

static char *bulan[]=

{“Kode bulan salah”, “Januari”, “Februari”, Maret”, “April”, “Mei”, “Juni”, “Juli”, "Agustus”, “September”, “Oktober”, “Nopember”,“Desember”

};

return ( (n<1 | | n>12) ? bulan[0] : bulan[n] ); }

 Pada definisi fungsi di atas,

char *nama_bulan()

menyatakan bahwa keluaran fungsi nama_bulan() berupa pointer yang menunjuk ke obyek char (atau string).

 Dalam fungsi nama_bulan(), mula-mula array bernama bulan dideklarasikan dan sekaligus diinisialisasi agar menunjuk sejumlah string yang menyatakan nama bulan. Di bagian akhir fungsi, pernyataan

return ( (n<1 || n>12) ? bulan[0] : bulan[n] );

menyatakan bahwa hasil fungsi berupa pointer yang menunjuk ke

(14)
(15)

BAB II

cout << "*p1 == " << *p1 << endl; cout << "*p2 == " << *p2 << endl;

*p2 = 53;

cout << "*p1 == " << *p1 << endl; cout << "*p2 == " << *p2 << endl;

p1 = new int; *p1 = 88;

cout << "*p1 == " << *p1 << endl; cout << "*p2 == " << *p2 << endl;

cout << "Semoga Anda mengerti contoh ini!\n"; system ("pause");

(16)

Analisa

Program 001

int *p1, *p2 =>p1 dan p2 merupakan pointer bertipe int.

p1 = new int => mengalokasikan memori bertipe int dan menyimpan alamat dari memori teralokasi yaitu p1.

*p1 = 42 => artinya nilai yang disimpan didalam alamat p1 = 42.

p2 = p1 => artinya nilai yang disimpan didalam alamat p1 sama dengan nilai yang akan disimpan didalam p2 yaitu 42.

cout << "*p1 == " << *p1 << endl; artinya tampil *p1 == << masuk nilai yang telah disimpan didalam *p1 yaitu 42.

cout << "*p2 == " << *p2 << endl; artinya tampil *p2 == << masuk nilai yang telah disimpan didalam *p1 yaitu 42, karena p2 = p1.

Sekarang nilai *p2 = 53 artinya nilai yang disimpan dialamat *p2 sekarang berubah atau baru yaitu 53.

cout << "*p1 == " << *p1 << endl; artinya tampil *p1 == << masuk nilai baru disimpan didalam *p2 yaitu 53. Karena p2 = p1.

cout << "*p2 == " << *p2 << endl; artinya tampil *p2 == << masuk nilai yang baru disimpan didalam *p2 yaitu 53.

p1 = new int; artinya mengalokasikan memori bertipe int dan menyimpan alamat dari memori teralokasi yaitu p1.

*p1 = 88; artinya nilai yang baru disimpan didalam alamat p1sekarang adalah 88 atau menyimpan 88 didalam memori yang teralokasi.

cout << "*p1 == " << *p1 << endl; artinya tampil *p1 == << masuk nilai baru yang disimpan didalam alamat yang teralokasi yaitu *p1. Dimana nilai yang sudah disimpan dalam *p1= 88.

(17)

Program 002

cout << "Konstruktor dipanggil. " << endl; umurNya = 1;

}

KucingSederhana::~KucingSederhana() {

cout << "Destruktor dipanggil. " << endl; }

int main() {

cout << "KucingSederhana Meonk... " << endl; KucingSederhana Meonk;

cout << "KucingSederhana *pKucing = new KucingSederhana..." << endl;

KucingSederhana *pKucing = new KucingSederhana; cout << "delete pKucing... " << endl;

delete pKucing;

cout << "Keluar dan biarkan Meonk pergi... " << endl; system("pause");

(18)

Analisa

Program 002

Pada program ini file header #include <conio.h> ini tidak berfungsi.

Program ini mendefenisikan sebuah kelas, yakni KucingSederhana.

Kelas KucingSederhana memiliki 3 anggota, yaitu 2 anggota fungsi dideklarasikan public, dan yang satu menjadi anggota data dideklarasikan private.

public: KucingSederhana(); ~KucingSederhana(); private:

int umurNya;

private:

int umurNya; => tidak dapat diakses diluar kelas (merupakan anggota data).

public: KucingSederhana();

~KucingSederhana(); => dapat diakses dari luar kelas (merupakan anggota fungsi prototipe).

KucingSederhana::KucingSederhana() => ketika kelas KucingSederhana didefenisikan, kita hanya mencatumkan fungsi prototype untuk fungsi-fungsi anggota. Kenapa hanya menyediakan fungsi prototype pada defenisi kelas? Karena berkaitan dengan penyembunyian informasi, yaitu penyembunyian detail operasi data.

(19)

KucingSederhana::KucingSederhana() {

cout << "Konstruktor dipanggil. " << endl; umurNya = 1;

}

Dan

KucingSederhana::~KucingSederhana() {

cout << "Destruktor dipanggil. " << endl; }

cout << "KucingSederhana Meonk... " << endl; => tampil “KucingSederhana Meonk... “ kemudian new line.

KucingSederhana Meonk; => memanggil fungsi kucingSederhana

KucingSederhana::KucingSederhana(), oleh sebab itu tampil "Konstruktor dipanggil. " sedangkan umurNya = 1; tidak muncul karena merupakan anggota private.

cout << "KucingSederhana *pKucing = new KucingSederhana..."<< endl; => tampil "KucingSederhana *pKucing = new KucingSederhana..." kemudian new line.

KucingSederhana *pKucing = new KucingSederhana;

KucingSederhana *pKucing => memanggil fungsi kucingSederhana

KucingSederhana::KucingSederhana(), oleh sebab itu tampil "Konstruktor dipanggil. " sedangkan umurNya = 1; tidak muncul karena merupakan anggota private.

Atau pemanggilan fungsinya pake KucingSederhana Out; tidak harus pake

KucingSederhana *pKucing = new KucingSederhana;

cout << "delete pKucing... " << endl; => tampil "delete pKucing... " kemudian new line.

delete pKucing; => tidak ada pengaruhnya didalam program.

(20)

Program 003

cout << "intSatu: " << intSatu << endl; cout << "rSuatuRef: " << rSuatuRef << endl; cout << "&intSatu: " << &intSatu << endl; cout << "&rSuatuRef: " << &rSuatuRef << endl; system("pause");

return 0; }

Analisa

Program 003

Pada program ini file header #include <conio.h> ini tidak berfungsi.

Letak using namespace std; bisa didalam int main dan bisa diluar int main. Perbedaannya terlihat pada alamat memorynya saja.

using namespace std; diibaratkan seperti folder yang menyimpan berkas-berkas. Kita dapat membuat namespace untuk mengelompokkan fungsi-fungsi tertentu sehingga lebih sistematis.

int intSatu; artinya variabel intSatu bertipe integer.

(21)

menunjuk nilai yang telah disimpan dialamat yang dituju, yaitu nilai yang disimpan didalam alamat intSatu = 5.

intSatu = 5; artinya nilai dari variabel intSatu = 5.

cout << "intSatu: " << intSatu << endl; artinya tampil intSatu <<masuk nilai dari variabel yang telah disimpan didalam variabel intSatu =5.

cout << "rSuatuRef: " << rSuatuRef << endl; artinya tampil rSuatuRef<< masuk nilai intSatu =5, karena int &rSuatuRef = intSatu; artinya nilai dari variabel yang telah disimpan didalam intSatu bertipe integer sama dengan nilai dari variabel rSuatuRef. Atau &rSuatuRef artinya menunjuk nilai yang telah disimpan dialamat yang dituju, yaitu nilai yang disimpan didalam alamat intSatu = 5.

cout << "&intSatu: " << &intSatu << endl; artinya tampil &intSatu << masuk alamat dari int satu.

(22)

BAB III

KESIMPULAN

Berdasarkan dari kegiatan praktikum yang telah saya lakukan, saya dapat mengambil suatu kesimpulan:

1. Tipe variabel pointer adalah tipe variabel yang berisi alamat dari variabel yang sebenarnya.

2. Tipe variabel pointer harus sama dengan tipe varibel yang ditunjuk.

3. Hubungan antara pointer dan array pada C sangatlah erat, sebab sesungguhnya array secara internal akan diterjemahkan dalam bentuk pointer

4. Varibel pointer bisa berupa string, array atau tipe variabel yang lainnya. 5. Suatu pointer bisa saja menunjuk ke pointer lain (pointer to pointer)

Referensi

Dokumen terkait

Penulis menyadari banyak pihak yang telah membantu dalam penyusunan makalah ini.. Maka dengan rendah hati, penulis

Yang dimaksud hak-hak yang sesuai dengan perundang-undangan yang berlaku atau hak- hak yang telah diatur dalam perjanjian kerja, peraturan perusahaan, atau perjanjian kerja

pengendalian melalui program komputer, sehingga pembagian tanggung jawab fungsional dalam pelaksanaan transaksi dapat dikurangi. Perbedaan karakteristik Sistem Manual vs

Telah diadakan Pemeriksaan Barang sesuai dengan lampiran kontrak kepada Sekretariat Dewan Perwakilan Rakyat Daerah Kabupaten Puncak dan telah diterima dalam keadaan 100% baru, baik

Pengaruh Strategi Diferensiasi dan Positioning Produk Terhadap Motivasi Nasabah ( Studi Kasus Pada Produk Tabungan Investa Cendekia di BSM KCP Banyumanik2. Semarang )

Oleh karena itu, untuk mencegah penyakit HDB perlu dilakukan penyediaan benih yang bebas Xoo serta pemahaman mengenai waktu tanam yang sesuai dengan perkembangan penyakit Xoo

Instrumen yang digunakan dalam penelitian aspek kognitif ini berupa tes objektif tentang materi sistem koloid yang terdiri dari 25.. butir soal dengan 5 alternatif

Diagram Nilai TPC Abon pada Beberapa Waktu Penyimpanan Berdasarkan hasil pengujian kadar TPC pada abon selama penyimpanan pada suhu ruang, menunjukkkan bahwa kadar TPC