MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
MODUL 8 POINTER
A. Tujuan Setelah mempelajari bab ini diharapkan mahasiswa akan mampu : 1. Mengenal dan memahami penggunaan pointer dalam listing program. 2. Membuat program sederhana dengan menerapkan konsep pointer
B. Petunjuk 1. Awali setiap aktivitas anda dengan doa, agar anda lancar dalam belajar 2. Pahami tujuan, dasar teori, dan latihan-latihan praktikum dengan baik 3. Kerjakan tugas-tugas praktikum dengan baik, jujur, dan sabar 4. Tanyakan kepada instruktur apabila ada hal-hal yang kurang jelas C. Alat dan Bahan 1. PC/ laptop yang memenuhi kapasitas untuk pemrograman bahasa C++ 2. Software C++ 3. Modul/handout materi yang akan di praktekkan D. POINTER Keunggulan menggunakan Pointer: 1. 2. 3. 4. 5. 6. 7.
1|P ag e
Penanganan terhadap array dan string akan lebih singkat, dan efisien. Memungkinkan suatu fungsi untuk menghasulkan lebih dari satu nilai. Memiliki kemampuan untuk mengirimkan alamat suatu fungsi ke fungsi yang lain. Kemampuan berkerja dengan memori yang telah dialokasikan secara dinamik. Memungkinkan untuk berhubungan langsung ke hardware. Untuk menciptakan data structure yang kompleks. Memungkinkan untuk berhubungan langsung dengan parameter command line.
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
Dengan menggunakan pointer yang benar, anda dapat menyusun sebuah program yang berkemampuan tinggi. Sebaliknya sedikit saja kesalahan dalam menggunakan pointer akan mengakibatkan kesalahan fatal pada program anda. Karena pointer dapat langsung menunjukan pada lokasi memori, jika lokasi yang ditunjuk salah, berarti data yang diambil juga akan salah, dan sudah tentu program anda akan menjadi salah juga. Operator deference (&) ampersand sign Operator ini biasa disebut dengan address of atau operator alamat. Dengan menggunakan operator deference variable akan menghasilkan alamat lokasi memori Operator reference (*) Operator ini biasa disebut value pointed by. Dengan menggunakan operator ini akan dihasilkan nilai yang berada pada suatu alamat memori Deklarasi Variabel Pointer Variabel pointer juga harus didelarasikan terlebih dahulu sebelum mulai digunakan bentuk umum cara mendeklarasikan variabel pointer adalah: Tipe *nama_var_pointer Tipe variabel sama dengan tipe yang dikenal oleh variabel biasa, misalnya int, float, char dan sebagainya. Nama variabel pointer juga mengikuti ketentuan nama variabel biasa. Yang membedakan variabel pointer dengan variabel biasa dengan menggunakan tanda asterisk (*) didepan nama varibel pada waktu deklarasi. Contoh : Int *ptr_x; Ptr merupakan variabel pointer, karena pada deklarasi digunakan tanda (*) didepan nama variabelya. Pengertian dalam deklarasi variabel pointer memiliki perbedaan dengan variabel biasa, jika dalam deklarasi variabel biasa: Float x; Dalam deklarasi pointer: Float *ptr_x; Artinya variabel pointer ptr_x akan menunjukkan pada variabel yang bertipe float. Jadi disini bukan ptr_x-nya yang bertipe float, melainkan variabel lain yang ditunjuk yang bertipe float. Contoh: dalam pendeklarasian yang salah : float y;
2|P ag e
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
Int *ptr_y; Benar : Float y; Float *ptr_y; Dan untuk mendeklarasikan sebuah variable y yang bertipe integer dengan variabel pointernya yy adalah: Int y; Int *yy;
dapat disederhanakan int y,*yy;
Ex : Mencetak Nama Alamat Dengan pointer
#include<stdio.h> #include void main() { int x; int *ptr_x; x=10.2; ptr_x=&x; printf("\n\nMenggunakan variabel biasa :"); printf("\nnilai dari x = %d ",x); printf("\nAlamat dari x = %u ",&x); printf("\n\nDengan menggunakan pointer : ); printf("\nnilai dari x =%d ",*ptr_x); printf("\nnlai dari x =%u ",ptr_x); } Input data Melalui Pointer Anda dapat juga mengimputkan suatu data kedalam variabel dengan dengan menggunankan pointernya, sebagai contoh tinjaulah program dibawah ini: Int x; Int *ptr_x; Ptr_x=&x; Printf(”inputkan nilai x : ”); Scanf(”%d”,ptr_x); Ingat! Menginputkan data dengan scanf() membutuhkan alamat dari variabel yang bersangkutan. Karena ptr_x merupakan alamat dari variabel x, maka ptr_x dapat digunakan dalam scanf(). Jadi pernyataan:
3|P ag e
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
Scanf(”%d”,ptr_x); Sama dengan: Scanf(”%d”,&x); Dimana &x juga menunjukkan alamat dari variabel x. Memberikan suatu nilai pada suatu variabel lewat pointer Nilai suatu variabel dapat juga diberikan lewat pointernya, nilai yang diberikan ini dapat berbentuk kostanta ataupun ekspresi aritmatika Contoh:
Int x; Int *ptr_x; Ptr_x=&x; *ptr_x=5; /*pemberian nilai kostanta*/ Sedangkan untuk pemberian nilai yang berupa ekpresi adalah: Int x,y=5,z=4; Int *p_x; P_x=&x; *p_x=5*y+z-2; /*pemberian nilai ekspresi*/ Contoh : Memberikan suatu variabel melalui pointer
#include<stdio.h> #include void main() { float a1,a2,a3; float *p_a3; clrscr(); printf("input bilangan pertama : "); scanf(%f",&a1); printf("input bilangan kedua : "); scanf(%f",&a2); p_a3=&a3; *p_a3=a1+a2; printf("\nNilai a3 (dari variabelnya) = &.3f",a3); printf("\nNilai a3 (dari pointernya) = &.3f",*p_a3); }
4|P ag e
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
Pointer dan fungsi Pengiriman data dari sebuah fungsi kefungsi lain dapat juga dilakukan dengan bantuan pointer, bila pointer digunakan, maka data yang dikirim harus berupa alamat variabel, bukan lagi nama variabel. Contoh_1: Mengirimkan data kesuatu fungsi dengan menggunakan pointer.
#include<stdio.h> #include void main() { float a,b,c; float *p_c=&c; clrscr(); printf("input bilangan pertama :"); scanf("%f",&a); printf("input bilangan kedua :"); scanf("%f",&b); jumlah(&a,&b,p_c) ; printf("hasilkali kedua bilangan = %.3f",*p_c); getch(); } jumlah(alm_a,alm_b,alm_c) float *alm_a,*alm_b,*alm_c; { *alm_c=*alm_a**alm_b; } Ket: *alm_c=*alm_a**alm_b; disini turbo c langsung mengetahui bahwa tanda (*) mana yang berarti pointer dan mana yang berarti tanda kali. Contoh_2: Kombinasi antara pengguna variabel biasa dan pointer
#include<stdio.h> 5|P ag e
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
#include void main() { float a,b,c; float *p_c=&c; clrscr; printf("input bilangan pertama :"); scanf("%f",&a); printf("input bilangan kedua :"); scanf("%f",&b); jumlah(a,b,p_c); printf("/njumlah kedua bilangan = %.3f",p_c); getch(); } jumlah(x,y,alm_c); float x,y,*alm_c; { *alm_c=x+y; } ) Contoh: dua dimensi (pointer)
Main { Float a[7][7]; Float n; Int brs,kol; Int i,j; Clrscr(); Printf(“input jumlah elemen (max – 7) : “); Scanf(“%f”,&n); For (i=0;j
S1 PTI – TE UM
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
{ Printf(”\n”); For (j=0;j
Hasil Kompilasi:
Contoh 2:
7|P ag e
S1 PTI – TE UM
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
Mula mula variabel tglahir di isi dengan tanggal , bulan , tahun melalui pengaksessan Variable pointer yang menunjuk alamat array tglahir . Untuk menampilkan tglahir [ ] Melalui variable pointer digunakan cara * (tgl +i) atau bisa juga dengan *tgl++. Setelah itu dijalankan maka hasil eksekusi akan ditampilkan :
Latihan: 1. Berikut ini adalah program yang menggunakan suatu pointer output dari fungsi. Jalankan program ini dan analisis alur programnya.
8|P ag e
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
2. program menghitung banyak karakter
9|P ag e
S1 PTI – TE UM
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
3.buatlah program untuk menjawab pertanyaan di bawah ini: aziz = 57082 defa = aziz dewi = defa +1 a. berapa nilai defa? b. berapa nilai dewi? aziz = 57082 defa = &aziz dewi = *defa+1 c. berapa nilai defa? d. berapa nilai dewi?
10 | P a g e
S1 PTI – TE UM
MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR
S1 PTI – TE UM
TUGAS 1. Buatlah program yang menampilkan kalimat terbalik dari suatu kalimat yang diinputkan Misal: Masukkan sebuah kalimat: kasur Kebalikannya: rusak 2. Buatlah program terdiri 3 variable a, b, c yang di inputkan dari fungsi main kemudian dilewatkan ke fungsi yang tanpa memerlukan nilai balikan. Outputnya adalah ketiga variable tersebut yang nilainya dua kali sebelumnya
11 | P a g e