LAPORAN PRAKTIKUM VII POINTER
Disusun untuk Memenuhi Matakuliah Praktikum Dasar Pemrograman C++ Dibimbing oleh Bapak Wahyu Sakti Gunawan Irianto
Oleh: Dwitha Fajri Ramadhani 160533611410 S1 PTI’16 OFF B
UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA November 2016
POINTER Tujuan Setelah mempelajari bab ini diharapkan mahasiswa akan mampu : 1. Mengetahui arti dan fungsi pointer dalam pemrograman. 2. Memahami penggunaan pointer dalam listing program. 3. Mengetahui keunggulan pointer pada suatu program. 4. Membuat program sederhana dengan menerapkan konsep pointer.
DASAR TEORI Pada programmer pemula hal yang sulit dipahami adalah pointer. Pointer adalah pada dasarnya sama dengan veriabel lain. Dengan pointer setiap variable diletakan pada alamat memori yang besarnya cukup untuk menampung nilai dari sebuah variable tipe data. Pada sebuah komputer PC misalnya satu byte data secara umum dialokasikan untuk tipe data char, 2 byte untuk tipe data short, 4 byte untuk tipa data int, long dan float serta 8 byte untuk tipe data double. Tiap-tiap byte data memori mempunyai alamat yang unik. Sebuah variable alamat merupakan alamat dimana sebuah byte data pertama dapat dialokasikan. Sebagai contoh misalnya dapat didefinisikan dalam program sebagai berikut : char huruf; short angka; float amount; Sehingga pengaturan memorinya dapat diilustrasikan sebagai berikut :
Gambar 13.1. Ilustrasi Pengaturan Data Pada Sebuah Memori
Pada gambar diatas variable letter diletakan pada alamat 1200, number pada alamat 1201 dan amount pada alamat 1203.
Ketika programmer mendeklarasikan sebuah variable, sama halnya dengan menginformasikan compiler dua sesuatu yaitu : nama variable dan tipe variable. Misalnya kita akan mendeklarasikan tipe variable integer dengan nama variable k sehingga dapat ditulis: Int k Pada tipe variable integer merupakan tipe data yang digunakan compiler dimana memori yang terpakai adalah dua byte. Setiap kali komputer menyimpan data, maka sistem operasi akan mengorganisasikan lokasi pada memori pada alamat yang unik. Misal untuk alamat memori 1776, hanya sebuah lokasi yang memiliki alamat tersebut. Dan alamat 1776 pasti terletak antara 1775 dan 1777. Dalam pointer, terdapat 2 jenis operator yang biasa digunakan. Kegunaan pointer yang utama adalah untuk menyimpan alamat memori dari sebuah variabel (data type atau object dari class). Selain menyimpan alamat dari variabel, pointer juga dapat digunakan untuk menyimpan alamat dari sebuah fungsi (function pointer). Function pointer telah digunakan sejak dikenalkannya bahasa C, dan banyak digunakan untuk sebuah fungsi callback atau untuk meningkatkan readability dari sebuah code. Sebenarnya jika programer akan mendeklarasian sebuah variable, seorang programer tidak diharuskan menentukan lokasi sesungguhnya pada memory, karena 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". Perhatikan contoh dibawah ini: ted = &andy; Akan memberikan variable ted alamat dari variable andy, karena variable andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sebagai berikut : andy = 25; fred = andy; ted = &andy; Maka hasilnya adalah sebagai berikut:
Gambar 13.2. Operator Alamat (&)
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 : beth = *ted; (dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.
Gambar 13.3. Operator Reference
Ekspresi dibawah ini semuanya benar, perhatikan pernyataan program dibawah : andy == 25 &andy == 1776 ted == 1776 *ted == 25 Ekspresi pertama merupakan assignation bahwa andy=25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel
andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar : *ted == andy
Deklarasi variabel bertipe 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 variable pointer dan x adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal) 1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar di bawah ini:
Gambar 13.4. Variabel pointer px menunjuk ke variabel x
Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :
Gambar 13.7. deklarasi variabel pointer
Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointernya. Dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya, maupun bab-bab berikutnya. Adapun nama_var_pointer adalah nama dari variabel pointer. Perhatikan contoh berikut ini: int *px; char *pch1, *pch2; float * greatnumber;
Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char.
Gambar 13.6. Ilustrasi Pendeklarasianvariabel pointer
Inisialisasi Pointer Dalam melakukan pemrogaman dengan menggunakan pointer yang pertama perlu dilakukan dalam membuat program adalah dengan melakukan inisialisasi pointer tersebut. Untuk lebih jelasnya perhatikan contoh dibawah ini: int number; int *tommy = &number; pernyataan diatas akan sama atau ekivalen dengan pernyataan dibawah ini: int number; int *tommy; tommy = &number; Seperti pada array, inisialisasi isi dari pointer dapat dilakukan dengan deklarasi seperti contoh berikut : char * terry = "hello"; Misalkan kata "hello" disimpan pada alamat 1702 dan seterusnya, maka deklarasi tadi dapat digambarkan sebagai berikut:
Gambar 13.7. deklarasi hello pada mulai alamat 1702
terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!' maka ekspresi yang digunakan ada 2 macam :
terry[4] = '!'; *(terry+4) = '!'; Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan:
Gambar 13.8 Deklarasi “Hello” pada Alamat Terry[4] Diisi !
Perhatikan contoh program dibawah, dimana char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4. Terdapat 3 buah pointer : char *mychar; short *myshort; long *mylong; ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000, sehingga jika dituliskan : mychar++; myshort++; mylong++; mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa ukuran dalam bytes.
Gambar 13.9. Lokasi Memori Ukuran Byte Perhatikan ekspresi dibawah ini : *p++; *p++ = *q++;
Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu alamat yang ditunjuk, bukan nilai yang dikandungnya).
Ekspresi kedua, yang
dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian keduanya ditambahkan 1 atau dengan kata lain : *p = *q; p++; q++; Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya.
Keunggulan menggunakan pointer : 1. Untuk menciptakan data struktur yang kompleks. 2. Memungkinkan suatu fungsi untuk menghasilkan lebih dari satu nilai. 3. Memiliki kemampuan untuk mengirimkan alamat suatu fungsi ke fungsi yang lain. 4. Penanganan terhadap array dan string akan lebih singkat dan efisien. 5. Memungkinkan untuk berhubungan langsung ke hardware. 6. Memungkinkan untuk berhubungan langsung dengan paramenter command line. 7. Kemampuan bekerja dengan memori yang telah dialokasikan secara dinamik.
Latihan 1 Pemrograman C++ Nama Program
: Menambahkan Nilai Suatu Bilangan dengan Pointer
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
//header file yang melibatkan cout #include
#include //deklarasi fungsi utama int main() { system("color F0"); //deklarasi pointer *pBil int *pBil; //deklarasi variabel bilX=77 int bilX=77; pBil=&bilX; //output nilai awal cout<<"Isi bilX = "<
x *p p &x
= = = =
"<
*p=25; cout<<"Nilai cout<<"Nilai cout<<"Nilai cout<<"Nilai return 0;
x *p p &x
= = = =
"<
}
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk memanggil nilai menggunakan pointer Nilai p=&x, Kemudian deklarasi variabel x bernilai 40. Program akan menampilkan nilai x, *p, p, &x. Kemudian deklarasi variabel p bernilai 25. Dan program akan menampilkan nilai x, *p, p, &x.
Latihan 3 Pemrograman C++ Nama Program
: Menambahkan nilai variabel awal dengan pointer
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include void ubah(int *b) { *b = *b+22; } int main() { system ("color F0"); int a=12; cout<< "Isi nilai semula
= "<
ubah(&a); cout<< "Isi nilai sekarang = "<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk menampilkan nilai semula dan nilai sekarang. Dengan mendeklarasikan nilai a=12. Kemudian tampilkan “nilai semula”. Setelah itu dengan fungsi ubah *b=*b+22;
kemudian melakukan pemanggilan ubah(&a); sehingga nilai sekarang
adalah menampilkan hasil a, yaitu 34.
Latihan 4 Pemrograman C++ Nama Program
: Pointer Void
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include using namespace std; int main() { system ("color F0"); void *tunjuk; float n_float = 25.5; char n_char = 'D'; tunjuk = &n_float; cout<<"Nilai yang ditunjuk adalah : " <<*(float *)tunjuk<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk menunjuk nilai dari n_float = 25 dengan cara *(float*)tunjuk yang merupakan pointer void atau pointer yang dapat menunjuk ke sembarang tipe data, jadi dalam satu pointer dapat menunjuk ke tipe data int, float, char, dan lain-lain. Sama halnya dengan menunjuk nilai dari n_char=D, dengan menggunakan pointer void *(char*)tunjuk, program akan menampilkan hasil dari masing-masing nilai yang ditunjuk.
Latihan 5 Pemrograman C++ Nama Program
: Nilai Ubah variabel
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include int main() { system("color F0"); void *p_void; float var_f=3.9; p_void=&var_f; cout<< "Nilai variabel *(float *)p_void=7.8;
= "<
cout<< "Nilai ubah variabel = "<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk mengubah nilai variabel var_f, yang mula-mula diberi nilai 3.9, lalu pointer p_void menunjuk &var_f, kemudian menampilkan dari nilai var_f yaitu 3.9. Nilai ubah variabel var_f dengan menggunakan pointer void atau pointer yang dapat menunjuk ke sembarang tipe data, jadi dalam satu pointer dapat menunjuk ke tipe data int, float, char, dan lain-lain. Yaitu dengan menunjuk *(float*)p_void=7.8; sehingga program menampilkan nilai ubah variabel var_f bernilai 7.8.
Tugas Praktikum 1 Pemrograman C++ Nama Program
: Membalik Kata
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include void line() { for(int i=0; i<2; i++) cout<<"**--------------------**"; cout<
: ";
cin.getline(kata, sizeof(kata)); jumlah=strlen(kata)-1; cout<=0; j--) { tunjuk=&kata[j]; balik=*(int *)tunjuk; cout<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk membalik kata dari karakter akhir ke karakter awal, dengan menggunakan pointer *tunjuk, variabel char kata[100], char balik, dan int jumlah. Kemudian user diperintahkan untuk menginput kata, kemudian masuk ke proses pembalik kata, dimana jumlah=strlen(kata)-1; masuk ke perulangan int j=jumlah, dimana j lebih dari sama dengan 0, j--. Variabel tunjuk menggunakan pointer &kata[j]; dan balik menggunakan pointer void yaitu *(int*)tunuk, kemudian program akan menampilkan nilai dari balik.
Tugas Praktikum 2 Pemrograman C++ Nama Program
: Fungsi Pointer Hari
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include char *nama_hari (int n) { static char*hari[]= {"Kode hari Salah!!", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu","Minggu"
};
return ((n<1 || n>7)? hari[0]: hari[n]); } int main() {
system ("color F0"); int hr; cout<<"Hari (1-7) : ";
cin>>hr;
cout<<"Hari ke- "<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk menampilkan nama hari menggunakan fungsi pointer *nama_hari sesuai angka yang di input oleh user, dimana apabila user menginputkan nilai antara 1 hingga 7 maka program akan menampilkan nama hari sesuai urutan, dan apabila user tidak menginputkan nilai 1 hingga 7 maka program akan menampilkan kode hari salah!!
Tugas Praktikum 3 Pemrograman C++ Nama Program
: Menjawab pertanyaan dengan pointer
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include int main() { system ("color F0"); int aziz=70, *defa, *dewi; cout<<" aziz = 70\n"; cout<<" defa = aziz\n"; cout<<" dewi = aziz + 3\n\n"; defa=&aziz; cout<<" a. Berapakah nilai Defa ?? \n"; cout<<"
Nilai Defa = "<<*defa<
dewi=&aziz; cout<<" b. Berapakah nilai Dewi ?? \n"; cout<<"
Nilai Dewi = "<<*dewi+3;
cout<<"\n\n aziz = 70\n"; cout<<" defa = &aziz\n"; cout<<" dewi = *aziz + 3\n\n"; defa=&aziz; cout<<" a. Berapakah nilai Defa ?? \n"; cout<<"
Nilai Defa = "<<*defa;
dewi=&aziz; cout<<"\n b. Berapakah nilai Dewi ?? \n"; cout<<" getch(); }
Nilai Dewi = "<<*dewi+3;
Output Program
Penjelasan Program
:
:
Program di atas digunakan untuk menjawab pertanyaan sesuai dengan pernyataan yang ada di atasnya. Awalnya deklarasikan nilai “aziz=70”, nilai “defa=aziz”. Nilai “dewi=aziz+3. Kemudian ditanyakan berapa nilai defa maka akan muncul 70. Ketika ditanya nilai dewi maka akan muncul 73. Program diulang sekali lagi menggunakan pointer dimana berfungsi untuk mengetahui alamat suatu memori dalam bahasa C++.
Tugas Rumah 1 Pemrograman C++ Nama Program
: Pemberi Huruf Kapital pada setiap huruf pertama dari string
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include #include int main() { system ("color F0"); int i, jum; char string[100]; cout<<"Masukkan kalimat : "; cin.getline(string,100); if((string[0]>='a')&& (string[0]<='z')) string[0]=(char)string[0]-32; jum=1; for(i=0; i<(int)strlen(string); i++){ if( (string[jum]>='A') && (string[jum]<='Z') ) string[jum]=(char)string[jum]+32; jum++; } for(i=1; string[i]!='\0'; i++) { if(string[i]==' ') { if(string[i+1]>='a' && string[i+1]<='z') string[i+1]=(char)(string[i+1]-32); } } cout<<"\nHasil akhir : "<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk mengubah huruf awal kata menjadi huruf kapital, program ini menggunakan pointer untuk mengubah huruf. Program diatas diawali dengan pendeklarasian variabel i, jum yang bertipe integer dan string yang bertipe data char , kemudian user diminta untuk menginputkan kalimat yang nantinya huruf pertamanya menjadi huruf kapital, kemudian program akan memproses menggunakan perulangan for dan kemudian program akan menampilkan hasil dari kalimat yang diinputkan, sehingga kegunaan program ini ialah untuk mengubah awal kalimat dari huruf kecil menjadi huruf besar.
Tugas Rumah 2 Pemrograman C++ Nama Program
: Program 4 Variabel
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include void line() { for (int i=0; i<50; i++) cout<<"="; cout<>w; cout<<" Masukkan Nilai X : "; cin>>x; cout<<" Masukkan Nilai Y : "; cin>>y; cout<<" Masukkan Nilai Z : "; cin>>z; cout<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk memasukkan nilai empat variabel. Awalnya program mendeklarasikan empat dan fungsi pointer. Kemudian user memasukkan nilai variabel w, x, y, z, dengan tipe data float (desimal). Lalu dengan menggunakan rumus dan memanggil fungsi pointer, kemudian akan diketahui hasilnya. Hasil kemudian ditampilkan.
Tugas Rumah 3 Pemrograman C++ Nama Program
: Penghitung Jumlah Kata
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include void line() { for (int i=0; i<50; i++) cout<<"="; cout<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk menghitung jumlah karakter dalam sebuah kata. Mula-mula program mendeklarasikan fungsi “jumlah” untuk kemudian dipanggil setelah user input kata. User dapat input data karena memiliki tipe data integer dan char yang mengandung 100 karakter. Kemudian setelah user memasukkan kata, maka dengan menggunakan rumus fungsi jumlah, akan diketahui jumlah karakter, dan program akan menampilkan hasil dari jumlah karakter.
Tugas Rumah 4 Pemrograman C++ Nama Program
: Nama Bulan dengan fasilitas array pointer
Bahasa Pemrogramam
: C++
Compiler
: MinGW Developer Studio
Script program
:
#include #include #include char *nama_bulan (int n) { static char*bulan[]= {"Kode bulan Salah!!", "Januari", "Februari", "Maret", "April", "Mei", "Juni","Juli", "Agustus", "September", "Oktober", "November", "Desember" }; return ((n<1 || n>12)? bulan[0]: bulan[n]); } int main() { system ("color F0"); int bln; cout<<"Bulan (1-12) : "; cin>>bln; cout<<"Bulan ke- "<
Output Program
:
Penjelasan Program
:
Program di atas digunakan untuk menampilkan nama bulan menggunakan fungsi pointer *nama_bulan sesuai angka yang di input oleh user, dimana apabila user menginputkan nilai antara 1 hingga 12 maka program akan menampilkan nama hari sesuai urutan, dan apabila user tidak menginputkan nilai 1 hingga 12 maka program akan menampilkan kode bulan salah!!
KESIMPULAN 1.
Pointer adalah variabel yang berisi alamat memori sebagai nilainya dan berbeda dengan variabel biasa yang mempunyai nilai tertentu.
2.
Operator deference variable menghasilkan alamat lokasi memori apabila menggunakan.
3.
Operator reference menghasilkan nilai yang berada pada suatu lokasi memori apabila menggunakan.
4.
Dengan menggunakan pointer, kita dapat menyusun program yang kompleks, namun jika ada kesalahan sedikitpun maka itu bisa fatal.
5.
Void pointer dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya.
DAFTAR RUJUKAN 1.
Tim Asisten Dosen. 2016. Modul 7 Pointer. Malang : Universitas Negeri Malang.
2.
Kadir, Abdul. 2007. Panduan Pemrograman Visual C++. Yogyakarta: Andi