Modul Algoritma Dan Pemrograman
Modul Algoritma Dan Pemrograman
MODUL 5
POINTER
A. Tujuan
1. Mahasiswa dapat memahami definisi dan kegunaan pointer.
2. Mahasiswa dapat mengetahui bagaimana mengimplementasikan pointer dalam
program.
B. Dasar Teori
1. Pengertian Pointer
Pointer adalah suatu variabel yang berisi alamat memory sebagai nilainya
dan berbeda dengan variabel biasa yang berisi nilai tertentu. Dengan kata lain,
pointer berisi alamat dari variabel yang mempunyai nilai tertentu.
Contoh: p = &n
tipe_data nama_variabel ;
tipe_data *nama_pointer;
tipe_data1 nama_variabel_biasa;
tipe_data2 *nama_variabel_pointer;
nama_variabel_pointer=&nama_variabel_biasa;
for(int i=0;i<xsize;i++)
{
a[i]=new double [ysize];
}
Dimana script diatas berguna untuk memesan jumlah blok pada Random
Access Memory (RAM) sebanyak jumlah elemen matriks A (baris A x kolom A)
dikali dengan 4 byte (ukuran sebuah data integer). Angka 4 juga dapat diganti
dengan “ sizeof(int)”, sehingga pernyataan tersebut menjadi:
a = (int *) malloc(brsA * klmA * sizeof(int));
5. Pemanfaatan pointer
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 (functionpointer).
a. Operasi pointer untuk array
void main()
{
int x[5], *p, k;
p = x;
x[0] = 5;
x[1] = x[0];
x[2] = *p + 2;
x[3] = *(p+1) - 3;
x[4] = *(x + 2);
for(k=0; k<5; k++){
cout<<"x["<<k<<"] = "<< x[k]<<"\n";}
getch();
}
void main()
{
static int tgl_lahir[] = { 13,9,1982 };
int *ptgl;
ptgl = tgl_lahir; /* ptgl berisi alamat array
*/
cout<<"Diakses dengan pointer\n";
cout<<"Tanggal = "<< *ptgl<<"\n";
b. Pointer aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan
nilai integer saja. Operasi yang biasa dilakukan adalah operasi penambahan
dan pengurangan.Operasi penambahan dengan suatu nilai menunjukkan lokasi
data berikutnya (index selanjutnya) dalam memori. Begitu juga operasi
pengurangan. Contohnya;
#include <iostream.h>
#include <conio.h>
void main()
{
int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*(penunjuk)<<" ada di alamat
memori " <<(penunjuk)<<"\n";
cout<<"Nilai "<<*(penunjuk+1)<<" ada di alamat
memori " <<(penunjuk+1)<<"\n";
cout<<"Nilai "<<*(penunjuk+2)<<" ada di alamat
memori " <<(penunjuk+2)<<"\n";
getch();
}
#include <iostream>
#include <conio>
void main()
{
char nama[5] = "Andi";
cout<<"Nama awal : "<<nama<<endl;
char *ptr;
ptr = nama;
*(ptr+3) = 'y';
cout<<"Nama menjadi : "<<nama<<endl;
getch();
}
d. Penghapusan pointer
Operator delete yaitu operator untuk membuat anda dapat
mengembalikan atau membebaskan memori tersebut. Ini adalah langkah yang
sangat penting menuju manajemen memori yang efektif. Memori yang
dibebaskan dapat digunakan kembali.
e. Pointervoid
Untuk membuat pointer yang bertipe data bebas yakni dengan meletakkan
kata kunci pada void pada bagian penentu tipe pointer, contoh:
Suatu pointervoid adalah pointer yang dapat menunjuk ke sembarang tipe data.
Contoh:
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr();
void *ptr; // Pointer tak bertipeint
int vint = 45;
float vfl = 17.5;
ptr = &vint; // menunjuk ke int
cout << "Nilai yang ditunjuk oleh ptr = "<< *(int
*)ptr << endl;
ptr = &vfl; // menunjuk ke float
cout << "Nilai yang ditunjuk oleh ptr = "<< *(float
*) ptr << endl;
getch();
}
- Keunggulan Pointer
- Kelemahan Pointer
C. Permasalahan
Membuat Operasi Matematika Matriks ordo 2 x 2 menggunakan pointer.
dengan catatan:
1. Dilarang menggunakan library math.h dan fungsi lainnya yang berisi fungsi
matematika, yang berisi fungsi pow(), sqrt() dll.
D. Hasil
D.1 Flowchart
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
output(c);
getch();
break;
case 2:
system("cls");
cout<<"\n Pengurangan Matrik A - Matrik B\n\n";
cout<<" Matriks A:\n";
input(a);
cout<<"\n\tMatriks A:\n";
output(a);
cout<<" Matriks B:\n";
input(b);
cout<<"\n\tMatriks B:\n";
output(b);
kurang(a,b,c);
cout<<"\t Hasil Pengurangan\n\n";
output(c);
getch();
break;
case 3:
system("cls");
cout<<"\n Perkalian Matrik A x Matrik B\n\n";
cout<<" Matriks A:\n";
input(a);
cout<<"\n\tMatriks A\n";
output(a);
cout<<" Matriks B:\n";
input(b);
cout<<"\n\tMatriks B\n";
output(b);
kali(a,b,c);
cout<<"\t Hasil Perkalian\n\n";
output(c);
getch();
break;
}
cout<<" Apakah Anda ingin kembali [Y/N] ";
cin>>kembali;
}while(kembali=='Y' || kembali=='y');
}
E. Analisa Program
#include <iostream.h>
Script di atas merupakan sebuah file header atau preprocessor directive yang
berfungsi untuk mengaktifkan penggunaan suatu perintah yang hendak digunakan
daam sebuah program. iostream.h berfungsi untuk memanggil perintah cin dan
cout pada program sebagai input dan output. Tanpa kehadiran file header ini akan
terjadi kesalahan setelah program di compile.
#include <conio.h>
#include <iomanip.h>
dari i=0 sampai i<4 yang berarti ada 4 kolom array yang digunakan untuk memuat
setiap nilai dari matriks.
Nilai matriks yang sudah di-input-kan, dapat ditampilkan dengan fungsi output
dengan menggunakan fungsi perulangan untuk menampilkan data yang telah
dimasukkan sebelumnya. Script di atas merupakan fungsi bernama output untuk
mengeluarkan nilai dari matriks. Fungsi ini memiliki satu parameter yaitu pointer p
bertipe float. Dengan menggunakan perintah cout fungsi akan menampilkan isi
dari pointer p secara berurutan dari blok memori yang ditunjuk oleh *(p+0) sampai
blok memori *(p+3). Terdapat perintah untuk mengatur lebar suatu data yang
ditunjukkan oleh perintah “setiosflags(ios::left)<<setw(2)”dimana
lebar data akan dibaca dari kiri dengan lebar 2 spasi.
Fungsi penjumlahan ini menggunakan dua buah matriks yang berbeda dimana
matriks yang digunakan yaitu matriks A dan matriks B. Fungsi penjumlahan ini
menggunakan prinsip array ditambah dengan fungsi penjumlahan pada umumnya.
Script di atas adalah fungsi bernama tambah untuk melakukan operasi penjumlahan.
Fungsi ini memiliki tiga argument yaitu pointer x, pointer y, dan pointer z, yang
ketiga-tiganya bertipe float. Pointer x dan y merupakan pointer yang akan
dilakukan operasi penjumlahan, dan pointer z adalah pointer tempat menyimpan nilai
hasil dari operasi penjumlahan pointer x dengan y. Nilai dari setiap z+i dimasukkan
dengan hasil penjumlahan dari nilai “*(x+i)” dengan “*(y+i)”.
Fungsi pengurangan ini menggunakan dua buah matriks yang berbeda dimana
matriks yang digunakan yaitu matriks A dan matriks B. Fungsi pengurangan ini
menggunakan prinsip array dengan fungsi pengurangan pada umumnya. Script di atas
adalah fungsi bernama kurang untuk melakukan operasi pengurangan. Fungsi ini
memiliki tiga argument yaitu pointer x, pointer y, dan pointer z, yang ketiga-tiganya
bertipe float. Pointer x dan y merupakan pointer yang akan dilakukan operasi
pengurangan, dan pointer z adalah pointer tempat menyimpan nilai hasil dari operasi
pengurangan pointer x dengan y. Nilai dari setiap z+i dimasukkan dengan hasil
pengurangan dari nilai “*(x+i)” dengan “*(y+i)”.
Fungsi perkalian ini menggunakan dua buah matriks yang berbeda dimana matriks
yang digunakan yaitu matriks A dan matriks B. Fungsi perkalian ini menggunakan
prinsip array ditambah dengan fungsi perkalian pada umumnya. Script di atas
merupakan fungsi bernama kali untuk melakukan operasi perkalian. Fungsi ini
memiliki tiga argument yaitu pointer x, pointer y, dan pointer z, yang ketiga-tiganya
bertipe float. Pointer x dan y merupakan pointer yang akan dilakukan operasi
perkalian, dan pointer z adalah pointer tempat menyimpan nilai hasil dari operasi
perkalian pointer x dengan y kemudian nilai dari setiap z+0 sampai z+3 dimasukkan
dengan hasil dari rumus perkalian matriks.
main()
{
char kembali;
int pilih;
float MA[4];
float MB[4];
float MC[4];
float *a = MA;
float *b = MB;
float *c = MC;
do
{
system("cls");
cout<<"\n\t Operasi Matematika Matrik Ordo 2 x
2\n\n";
cout<<" Pilih Operasi\n\n";
cout<<" [1] Penjumlahan\n [2] Pengurangan\n [3]
Perkalian\n\n";
cout<<" Pilihan : ";cin>>pilih;
switch(pilih)
{
Fungsi ini merupakan fungsi utama yang digunakan untuk menampilkan hasil dari
setiap operasi yang telah dilakukan. Terdapat variabel array untuk matrik A, B, dan C
bertipe data float dimana nilanya akan sama dengan nilai pointer a, b, dan c.
program menggunakan statement looping do-while yang berfungsi untuk menampilkan
perintah terlebih dahulu kemudian melakukan pengkondisian. Program juga
menggunakan statement control switch case yang berfungsi untuk mengarahkan suatu
program berdasarkan nilai yang diberikan untuk variabel pilih. Pada setiap case berisi
statement dan pemanggilan fungsi yang sesuai dengan operasi yang dipilih pada menu.
Tanda “{“ digunakan sebagai tanda awal untuk perintah switch case.
case 1:
system("cls");
cout<<"\n Penjumlahan Matrik A + Matrik B\n\n";
cout<<" Matriks A:\n";
input(a);
cout<<"\n\tMatriks A:\n";
output(a);
cout<<" Matriks B:\n";
input(b);
cout<<"\n\tMatriks B:\n";
output(b);
tambah(a,b,c);
cout<<"\t Hasil Penjumlahan\n\n";
output(c);
getch();
break;
Pada case 1 yang berarti kondisi jika variabel pilih bernilai 1. Fungsi ini
menggunakan argument karena fungsi ini akan memanggil fungsi-fungsi lain yang
sudah dideklarasikan sebelumnya sehingga fungsi ini memerlukan variabel untuk
dilewatkan (argument). Terdapat perintah system("cls")yang digunakan untuk
membersihkan layar. Kondisi ini akan memanggil fungsi input() yang akan
melakukan proses memasukkan data, output() yang akan melakukan proses
menampilkan data, dan tambah() untuk melakukan penjumlahan matriks. Script
getch() digunakan untuk mengambil input-an dari keyboard dan langsung
mengeksekusinya tanpa menekan tombol enter terlebih dahulu. Script break;
digunakan untuk mengakhiri perintah pada case 1.
case 2:
system("cls");
cout<<"\n Pengurangan Matrik A - Matrik B\n\n";
cout<<" Matriks A:\n";
input(a);
cout<<"\n\tMatriks A:\n";
output(a);
cout<<" Matriks B:\n";
input(b);
cout<<"\n\tMatriks B:\n";
output(b);
kurang(a,b,c);
cout<<"\t Hasil Pengurangan\n\n";
output(c);
getch();
break;
Pada case 2 yang berarti kondisi jika variabel pilih bernilai 2. Terdapat perintah
system("cls") yang digunakan untuk membersihkan layar. Kondisi ini akan
memanggil fungsi input() yang akan melakukan proses memasukkan data,
output() yang akan melakukan proses menampilkan data, dan kurang() untuk
melakukan pengurangan matriks. Script break; digunakan untuk mengakhiri
perintah pada case 2.
case 3:
system("cls");
cout<<"\n Perkalian Matrik A x Matrik B\n\n";
cout<<" Matriks A:\n";
input(a);
cout<<"\n\tMatriks A\n";
output(a);
cout<<" Matriks B:\n";
input(b);
cout<<"\n\tMatriks B\n";
output(b);
kali(a,b,c);
cout<<"\t Hasil Perkalian\n\n";
output(c);
getch();
break;
Pada case 3 yang berarti kondisi jika variabel pilih bernilai 3. Terdapat perintah
system("cls") yang digunakan untuk membersihkan layar. Kondisi ini akan
memanggil fungsi input() yang akan melakukan proses memasukkan data,
output() yang akan melakukan proses menampilkan data, dan kali() untuk
melakukan perkalian matriks. Script break; digunakan untuk mengakhiri perintah
pada case 3. Tanda “}” merupakan tanda akhir perintah switch case.
Script di atas akan meminta untuk mengisikan nilai pada variabel kembali dimana
nilainya akan digunakan sebagai pengkondisian pada perintah do while. Jika
variabel kembali bernilai “Y” atau “y” maka akan dilakukan perulangan program
dimulai dari perintah setelah statement do.
F. Kesimpulan
1. Pointer merupakan penunjuk suatu variabel. Untuk menunjuk suatu variabel, maka
pointer pasti memiliki alamat dari variabel yang ditunjuknya. Mekanisme pointer,
dimana dalam suatu fungsi dapat diakses oleh fungsi lain lebih sedikit memakai
memori dibandingkan dengan mekanisme copy dan paste nilai variabel satu ke
dalam variabel lain.Oleh karena itu, Pointer sangat berguna ketika dalam membuat
program yang besar, karena dapat menghemat memori yang digunakan program
2. Dalam mendeklarasikan suatu pointer, kita perlu menggunakan operator khusus
pointer. Terdapat dua operator yang digunakan pada pointer yaitu : operator
deference yang dilambangkan dengan symbol “&” yang berguna untuk
menunjukkan alamat dari suatu variabeldan operator reference yangdilambangkan
dengan symbol “*” yang berguna untuk menunjukkan nilai dari suatu variabel.
DAFTAR PUSTAKA
Anonim. 2022. “Modul Praktikum Algoritma dam Pemograman”. Laboratorium
Jaringan dan Komputer. Fakultas Teknik. Universitas Mataram.
Yuana, Rosihan Ari. 2005. Pemrograman C++ . Solo: Unversitas Negeri Solo.