Anda di halaman 1dari 23

Praktikum Algoritma dan Pemograman 2020

MODUL VI

POINTER
6.1 TUJUAN PRAKTIKUM
Adapun tujuan dari praktikum ini adalah:
1. Mahasiswa dapat memahami definisi dan kegunaan pointer.
2. Mahasiswa dapat mengimplementasikan pointer dalam program.
6.2 DASAR TEORI
6.2.1 Pointer
Pointer adalah suatu variabel penunjuk berisi nilai yang menuju kalimat
suatu lokasi memori tertentu. Jadi pointer tidak berisi nilai data melainkan berisi
suatu alamat memori. Lokasi memori tersebut bisa diwakili sebuah variabel atau
juga alamat memori secara langsung.
1. Deklarasi pointer
Jika terdapat sebuah variabel dengan tipe data tertentu maka untuk mendpatkan
alamat dari variabel tersebut adalah dengan menggunakan operator “&”.
Alamat ini lah yang kemudian akan disimpan kedalam variabel yang bertipe
pointer. Untuk mendeklarasikan variabel sebagai pointer, hanya perlu
menambahkan tanda asterisk (*) di depan nama variabel. Bentuk umum dari
pendeklarasian pointer:
Tipe_data
nama_variabel Atau
Tipe_data* nama_variabel

2. Cara mengakses struct


Pada pointer, terdapat beberapa operator yang dapat digunakan yaitu::
a. Deference (*)
Suatu operator yang berfungsi menyatakan satu variabel adalah variabel
pointer. Sama halnya dengan operator reference, peletakan simbol operator
deference diawal variabel. Operator deference ini akan membuat suatu variabel
pointer untuk menampung alamat. Contoh dari operator deference sebagai
berikut:
#include <iostream>
Using namespace std;

Modul V I– Pointer VI- 1


Praktikum Algoritma dan Pemograman 2020

Int main(){
Int a=5;
Int *b;
b=&a;
Cout<< “nilai variabel adalah :” <<a<<endl;
Cout<< “alamat variabel a adalah<<&a<<endl;
Cout<< “isi dari variabel b adalah <<b<<endl;
Cout<< “nilai yang tertampung pada variabel b: <<*b<<endl;
Return 0;
}

b. Reference (&)
Suatu operator yang berfungsi untuk menanyakan alamat dari suatu variabel.
Apabila anda memberikan symbol “&” pada awal variabel dan mencetak
hasilnya, maka yang akan tercetak adalah alamat dari variabel tersebut bukan
nilai yang ditampung oleh variabel tersebut. Bentuk contoh programnya
sebagai berikut [1]:
#include <iostream>
Using namespace std;

Int main(){
Int a=5;
Cout<< “alamat variabel a adalah :”<<&a<<endl;
Cout<< “nilai variabel a adalah” <<a<<endl;
Return 0;
}

3. Perbedaan pointer dan variabel biasa


a. Variabel biasa
Variabel biasa merupakan variabel yang berisi data atau nilai dengan
operator dilakukan seperti umumnya seperrti operator aritmatika, bitwise
dan lainnya. Dengan sifat statis maka contoh dari deklarasinya sebagai
berikut:
Int a;

b. Pointer
Pointer merupakan berisi alamat memori dari suatu variabel tertentu.
Membutuhkan operator khusus deperti operator deference atau reference
dan bersifat dinamis maka contoh dari deklarasi sebagai berikut:
Int *a;

Modul V I– Pointer VI- 2


Praktikum Algoritma dan Pemograman 2020

4. Pemanfaatan pointer
a. “void” pointer
“void” pointer adalah pointer yang dapat menyimak ke semua tipe data,
yaitu dengan mendeklarasikan pointer sebagai pointer tanpa tipe data.
Bentuk umum untuk mendeklarasikan pointer tanpa tipe data adalah sebagai
berikut:
Void *nama_pointer;

Berikut contoh program yang menggunakan “void” pointer:

#include <iostream>
#include <cstblib>
Using namespace std;
Int main(){
Void *p;
Int x;
Float y;
Cout<< “masukan nilai x :”; cin>>x;
Cout<< “masukan nilai y :”; cin>>y;
P=&x;
Cout<<endl;
Cout<< “nilai x=”<<*(int*)p<<endl;
Cout<< “alamat y=”<<*(int*)p<<endl;
P=&y;
Cout<< “nilai x=”<<*(float*)p<<endl;
Cout<< “nilai y=”<<*(float*)p<<endl;
Return EXIT_SUCCESS;
}

b. Opersari aritmatika pada pointer


Pointer dapat berperan sebagai operand dalam operasi aritmatika. Proses
semacam ini sering disebut pointer aromatic. Suatu variabel pointer hanya
dapat dilakukan operasi aritmatika dengan nilai integer saja. Hanya terdpat
dua operasi aritmatikanya yang dapat diterapkan pada pointer, yaitu operasi
penjumlahan dan pengurangan. Berikut contoh operasi aritmatika pada
pointer:
#include <iostream>
#include <conio.h>
Void main(){
Int nilai[3], *petunjuk;
Nilai[0]=125;
Nilai[1]=345;
Nilai[2]=750;
Petunjuk=&nilai[0];
Cout<<“nilai”<<*petunjuk<< “ada di alamat memori<<petunjuk;
Cout<<endl;
Cout<<“nilai”<<*(petunjuk+1)<<“ada di alamat memori

Modul V I– Pointer VI- 3


Praktikum Algoritma dan Pemograman 2020

<<(petunjuk+1);
Cout<<endl;
Cout<<“nilai”<<*(petunjuk+2)<<“ada di alamat memori
<<(petunjuk+2);
Cout<<endl;
Getch();
}

c. Pointer pada array


Pointer dan array memiliki hubungan yang dekat. Secara internal array
juga menyatakan alamat pada elemen pertama pada array, berikut contoh
program pointer pada array:
#include<iostream>
#include<conio>

void main(){
int i;
int nilai [5], *alamat;
alamat=nilai;
for(i=0;i<5;i++){
cout<<"Masukkan nilai "<<(i+1)<<" = ";
cin>>nilai[i];}
cout<<"\nHasil pengaksesan elemen array lewat pointer :
\n";
for(i=1;i<=5;i++){
cout<<"Elemen "<<i<<", Nilai"<<nilai[i];
cout<<", menempati alamat memori= ";
cout<<&nilai[i]<<endl;}
getch();}

d. Pointer pada string


Pointer dapat juga digunakan untuk menampilkan sebuah kata atau kalimat.
Berikut contoh program pointer pada string:
#include <iostream>
#include <cstblib>
Using namespace std;
Int main(){
Char *pstring= “UNIKOM”;
Cout<< “nilai string =”<<pstring<<endl;
Cout<< “alamat string =”<<&pstring<<endl;
Return EXIT_SUCCESS;
}
e. Pointer pada struct
Pointer pada struct akan menunjukan alamat letak dari variabel berikutnya.
Berikut contoh program pointer pada struct
#include<iostream>
#include<conio>

struct mahasiswa {
char nama[20];

Modul V I– Pointer VI- 4


Praktikum Algoritma dan Pemograman 2020

char nim[20];
};

void biodata(struct mahasiswa*mahasiswa){


cout<<"Nama : "<<mahasiswa->nama<<endl;
cout<<"NIM : "<<mahasiswa->nim<<endl;}

int main (){


mahasiswa fulan;
strcpy(fulan.nama,"GWS Adam");
strcpy(fulan.nim,"F1D018001");
biodata(&fulan);
getch();}
Adapun perbedaan dot operator dan arrow operator beserta contonya :
1) Dot operator
Dot operator (.) digunakan untuk mengakses elemen struct baik yang
bertipe pointer maupun tida. Jika elemen (field) harus dalam tanda
kurung (*field) . Contoh operator sebagai berikut:
Z=(*pos_xy).x;
2) Arrow operator
Arrow operator ( ) hanya digunakan untuk mengakses elemen struktur
yang bertipe pointer. Contoh penggunaanya sebagai berikut:
Z=pos_xy x;
f. Pointer pada pointer
Pointer dapat menunjukan ke pointer lain yang telah menujuk ke alamat
tertentu. Untuk mendeklarasikan pointer, yaitu menggunakan tanda asterisk
sebanyak dua kali (**). Berikut contoh program pointer pada pointer[2]:
#include <iostream>
Void main(){
Int andhika;
Int *sabirin;
Int **odik;
andhika=75;
cout<< “nilai Andhika :”<<andhika<<endl;
sabirin=&andhika;
odik=&sabirin;
cout<< “nilai sabirin hasil mengakses andhika :”;
cout<<sabirin<<endl;
cout<< “nilai odil hasil mengakses sabirin :”;
cout<<**odik<<endl;
getch();
}
5. Contoh implementasi pointer dalam sebuah program sederhana.
a. Contoh 1
#include <iostream>
Int main(){

Modul V I– Pointer VI- 5


Praktikum Algoritma dan Pemograman 2020

Long x;
X=10;
Cout<< “nilai x”<<x<<endl;
Cout<< “nilai *x”<<*x<<endl;
Cout<< “nilai &x”<<&x<<endl;
Return 0;
}
b. Contoh 2
#include <iostream>
Int main(){
Int var=2;
Int *pvar=&var;
Cout<<size of (pvar)<<endl;
Return 0;
}

Modul V I– Pointer VI- 6


Praktikum Algoritma dan Pemograman 2020

6.3 PERMASALAHAN
1. Buatlah program pengaturan penyimpanan berkas pada “Local Disk (D:)” serta
penjabar direktori berkas setiap berkas yang terdapat pada “Local Disk (D:)”.
Bermula dari program akan meminta pengguna untuk memasukkan bilangan N
untuk jumlah berkas yang terdapat pada “Local Disk (D:)”. Lalu program akan
meminta pengguna untuk memasukkan bilangan I untuk jumlah berkas yang
terdapat pada “Local Disk (D:)”. Selanjutnya program akan memasukkan nama
dari setiap berkas sesuai urutan dari berkas teratas (perhatikan ilustrasi di
samping) dengan hitungan dari terbesar hingga terkecil lalu akan masuk ke
dalam seperti pada keluaran di bawah.
Setiap menamai sebuah berkas, program akan meminta pengguna untuk
memasukkan bilangan K untuk jumlah berkas yang terdapat pada berkas yang
sedang dinamai. Namun, program akan terus-menerus meminta ulang
pengguna untuk memasukkan bilangan N, I, dan K jika memang tidak
memenuhi syarat batasan yang tertera dibawah.Program akan mengeluarkan
direktori setiap berkas, mulai dari berkas yang pertama dinamai sampai berkas
yang terakhir dinamai. Informasi berupa direktori berkas yang dihubungkan
dengan karakter “/” terus dilanjutkan sampai akhirnya menuju “Local Disk
(D:)” sebagai ujung direktori.

Formula :

Batasan :


 ( ) ∑

Modul V I– Pointer VI- 7


Praktikum Algoritma dan Pemograman 2020

6.4 HASIL PERCOBAAN


6.4.1 Program Direktori
1. Algoritma
a. Memasukkan jumlah total folder dalam Local Disk (D:)
b. Memasukkan jumlah folder dalam folder
c. Memberikan nama pada masing-masing folder dengan urutan terbesar
hingga terkecil
d. Mengurutkan nama sesuai urutan
e. Menentukan jumlah isi (berkas) pada folder
f. Memberikan kondisi untuk menamai berkas. Jika kondisi tidak terpenuhi
maka program akan terus menerus mengulang
g. Menampilkan nama dan direktori berkas
h. Stop
2. Flowchart

Gambar 6.1 Program direktori berkas

Gambar 6.2 Program direktori berkas

Gambar 6.3 Program direktori berkas

Modul V I– Pointer VI- 8


Praktikum Algoritma dan Pemograman 2020

Gambar 6.4 Program direktori berkas

Gambar 6.5 Program direktori berkas


3. Pseudocode
Step 1 : Start
Step 2 : Set n, i, k, kuota, catat ←1 sebagai integer
Step 3 : Set struct folder, char nama, folder *induk sebagai pointer
Step 4 : Set berkas[50], direktori[50], *jin
Step 5 : Set function dalam
Step 6 : If (kuota<n)
Step 7 : Set do
Step 8 : For (int t←0; t<tab; t++)
Step 9 : Print berkas [ibu].nama
Step 10 : If ((i←0) && (catat ← (kuota+1)))
Step 11 : goto repeat
Step 12 : While ((i<0) || (i>(n-quota)))
Step 13 : kuota += i
Step 14 : While (i>0)
Step 15 : For (int z←0; z<tab; z++)
Step 16 : Print berkas[ibu].nama
Step 17 : Input berkas[catat].nama
Step 18 : berkas[catat].induk ← &berkas[ibu]
Step 19 : Set catat++
Step 20 : Set i--
Step 21 : Set dalam (catat-1, tab+1)
Step 22 : Set function cari
Step 23 : Set nama [100]
Step 24 : For (int q←1; q<=n; q++)
Step 25 : If (strcmp(nama, berkas[q].nama) ← 0)
Step 26 : return q
Step 27 : return -1
Step 28 : Set function move
Step 29 : Set do
Step 30 : Print Masukkan nama file :
Step 31 : Input berkas[0].nama
Step 32 : catat← call function of move(berkas[0].nama)
Step 33 : While (i←-1)
Step 34 : do
Step 35 : Print Pindahkan ke dalam folder :
Step 36 : Input berkas[0].nama

Modul V I– Pointer VI- 9


Praktikum Algoritma dan Pemograman 2020

Step 37 : i← call function of move(berkas[0].nama)


Step 38 : While (i←-1)
Step 39 : berkas[catat].induk ← &berkas[i]
Step 40 : Print File berhasil dipindahkan!
Step 41 : Set function ganti
Step 42 : do
Step 43 : Print Masukkan nama file :
Step 44 : Input berkas[0].nama
Step 45 : catat← call function of ganti(berkas[0].nama)
Step 46 : While (catat ←-1)
Step 47 : Print Masukkan nama baru file :
Step 48 : Input berkas[0].nama
Step 49 : Strcpy (berkas[catat].nama, berkas[0].nama)
Step 50 : Print Nama file berhasil diganti!
Step 51 : do
Step 52 : Print Masukkan total folder :
Step 53 : Input n
Step 54 : While (n<1)
Step 55 : do
Step 56 : Print Masukkan jumlah folder dalam Local Disk (D:) :
Step 57 : Input i
Step 58 : While ((i<1) || (i>n))
Step 59 : kuota←i
Step 60 : While (i>0)
Step 61 : Input berkas[catat].nama
Step 62 : berkas[catat].induk←&berkas[0]
Step 63 : Set catat++
Step 64 : Set i--
Step 65 : Back:
Step 66 : For (int c←1; c<=n; c++)
Step 67 : Print berkas[c].nama
Step 68 : catat←0
Step 69 : For (jin ← &berkas[c]; jin ! = &berkas[0]; jin ← jin -> induk)
Step 70 : If (jin ← &berkas[c])
Step 71 : Strcpy (direktori[catat].nama, jin -> nama)
Step 72 : Set catat++
Step 73 : Print D:/
Step 74 : For (int x← (catat-1); x>=0; x--)
Step 75 : Print direktori[x].nama
Step 76 : Print berkas[c].nama
Step 77 : do
Step 78 : Print Masukkan Aksi :
Step 79 : Print 1. Pindah Berkas
Step 80 : Print 2. Ganti Nama Berkas
Step 81 : Print 3. Direktori Berkas
Step 82 : Print 0. Keluar
Step 83 : Print Masukkan Aksi
Step 84 : Input quota
Step 85 : Switch (quota)

Modul V I– Pointer VI- 10


Praktikum Algoritma dan Pemograman 2020

Step 86 : Case 1 : move ; break


Step 87 : Case 2 : ganti ; break
Step 88 : Case 1 : goto back ; break
Step 89 : While (quota!=0)
Step 90 : Finish

4. Source code
#include <iostream>
#include <stdio.h>
#include <string.h>

int n, i, k, kuota, catat=1;


struct folder{
char nama[100];
folder *induk;
}berkas[50], direktori[50], *jin;

void dalam(int ibu, int tab){


int i;
if(kuota<n){
do{
repeat :
for(int t=0; t<tab; t++) cout << "\t";
cout << "Masukkan jumlah folder dalam
folder " << berkas[ibu].nama << " : ";
cin >> i;
if((i==0) && (catat==(kuota+1))){
goto repeat;
}
}while((i<0) || (i>(n-kuota)));
kuota += i;
while(i>0){
for(int z=0; z<tab; z++)cout << "\t";
cout << "Nama folder ke - "<< (i) << "
dalam folder "<< berkas[ibu].nama << " : ";
gets(berkas[catat].nama);
berkas[catat].induk = &berkas[ibu];
catat++;
i--;
dalam(catat-1, tab+1);
}
}
}
int cari(char nama[100]){
for(int q=1; q<=n; q++){
if(strcmp(nama, berkas[q].nama) == 0){
return q;
}
}return -1;
}
int move(){
do{
cout << "Masukkan nama file : ";
gets(berkas[0].nama);
catat=cari(berkas[0].nama);
}while(i==-1);
do{

Modul V I– Pointer VI- 11


Praktikum Algoritma dan Pemograman 2020

cout << "Pindahkan ke dalam folder : ";


gets(berkas[0].nama);
i=cari(berkas[0].nama);
}while(i==-1);
berkas[catat].induk = &berkas[i];
cout << "File berhasil dipindahkan!";
}
int ganti(){
do{
cout << "Masukkan nama file : ";
gets(berkas[0].nama);
catat = cari(berkas[0].nama);
}while(catat==-1);
cout << "Masukkan nama baru file : ";
gets(berkas[0].nama);
strcpy(berkas[catat].nama, berkas[0].nama);
cout << "Nama file berhasil diganti!\n";
}

main(){
do{
cout << "Masukkan total folder : ";
cin >> n;
}while(n<1);
do{
cout << "Masukkan jumlah folder dalam Local Disk
(D:) : ";
cin >> i;
}while((i<1) || (i>n));
kuota=i;
while(i>0){
cout << "Nama folder ke - "<< (i) << " dalam
Local Disk (D:) : ";
gets(berkas[catat].nama);
berkas[catat].induk=&berkas[0];
catat++;
i--;
dalam(catat-1,1);
}
back :
for(int c=1; c<=n; c++){
cout << "\nDirektori folder " << berkas[c].nama
<< " : ";
catat=0;
for(jin = &berkas[c]; jin != &berkas[0]; jin =
jin -> induk){
if(jin == &berkas[c])continue;
strcpy(direktori[catat].nama, jin -> nama);
catat++;
}
cout << "D:/";
for(int x=(catat-1); x>=0; x--){
cout << direktori[x].nama << "/";
} cout << berkas[c].nama;
}
do{
cout << "\nMasukkan Aksi : \n \n1. Pindah Berkas
\n2. Ganti Nama Berkas \n3. Direktori Berkas \n0. Keluar\n
\nMasukkan Aksi: ";
cin >> kuota;

Modul V I– Pointer VI- 12


Praktikum Algoritma dan Pemograman 2020

switch(kuota){
case 1 : move(); break;
case 2 : ganti(); break;
case 3 : goto back; break;
}
}while(kuota!=0);
}

5. Hasil Program

Modul V I– Pointer VI- 13


Praktikum Algoritma dan Pemograman 2020

Gambar 6.6 Hasil program direktori berkas

Modul V I– Pointer VI- 14


Praktikum Algoritma dan Pemograman 2020

6.5 ANALISIS DATA


6.5.1 Program Direktori

#include <iostream>

Script “iostream” merupakan header file yang mendeklarasikan statement


“cout” dan “cin” yaitu statement yang berfungsi sebagai statement input/output
pada program.
#include <stdio.h>

Script “stdio.h” merupakan salah satu header file yang berfungsi untuk
mengaktifkan perintah “gets”, yaitu untuk menerima masukan tipe data string
tanpa harus melakukan penentuan tipe data terlebih dahulu.
#include <string.h>

Script “#include <string.h>” digunakan sebagai library yang


menyimpan fungsi – fungsi yang berfungsi untuk menangani string maupun
substring yang ada pada program yang dibuat.
struct folder{
char nama[100];
folder *induk;

Script “struct folder{“ merupakan pendeklarasian struct yang


bernama folder. Sedangkan “char nama[100];” merupakan potongan kode
dimana variabel nama akan menyimpan nama bertipe char dengan batasan 100.
Script “folder *induk;” merupakan pendeklarasian variabel pointer yaitu
induk.
berkas[50], direktori[50], *jin;
void dala (int inmdex, int tab);
int search(char nama[100]);
int move();
int change();

Script “berkas[50], direktori[50], *jin;” merupakan


pendeklarasian variabel berkas dengan batasan 50, varibel direktori dengan
batasan 50 dan variabel pointer yaitu “jin”. Script “void dalam(int index,
int tab);” merupakan pendeklarasian fungsi yang didalamnya terdapat indeks

dan tab yang memiliki tipe data int. Script “int search(char nama[100]);”
merupakan potongan kode yang berfungsi mendeklarasikan array nama yang
memiliki tipe data char dengan batasan 100. Script “int move();”
Modul V I– Pointer VI- 15
Praktikum Algoritma dan Pemograman 2020

merupakan fungsi main yang bernama move, dan “int change();”


merupakan fungsi main yang bernama change.
main(){
Script “main ()” merupakan dasar penyusunan blok pada sebuah program
C++ sebagai awal dan akhir eksekusi program. “int” merupakan return type
integer dalam peraturan C++ harus menggunakannya dan tanda “()” sebagai
tempat mengisi parameter untuk function tetapi dalam fungsi utama tidak
diperlukan dan dibiarkan dalam keadaan kosong.
do{
cout << "Masukkan total folder dalam Local Disk (D:) : ";
cin >> n;
}while(n<1);

Script “do{ cout << "Masukkan total folder dalam Local Disk
(D:) : "; “ merupakan suatu aksi yang dilakukan jika kondisi “while” yang

disebutkan setelahnya terpenuhi, namun jika tidak terpenuhi setidaknya aksi ini
akan menjalankan satu aksi. Script “cin >> n;” berfungsi sebagai variabel yang
menyimpan nilai total folder. Script “}while(n<1);” berfungsi sebagai
pengulangan, dimana jika pengulangan ini terpenuhi yaitu “n” lebih kecil dari 1
maka program akan menjalankan suatu aksi yang telah disebutkan pada “do”.
do{
cout << "Masukkan jumlah folder dalam Local Disk (D:) : ";
cin >> i;
}while((i<1) || (i>n));

Script “do{ cout << "Masukkan jumlah folder dalam Local Disk
(D:) : "; “ merupakan suatu aksi yang dilakukan jika kondisi “while” yang

disebutkan setelahnya terpenuhi, namun jika tidak terpenuhi setidaknya aksi ini
akan menjalankan satu aksi. Script “cin >> i;” berfungsi sebagai variabel yang
menyimpan nilai jumlah folder. Script “}while((i<1) || (i>n));” berfungsi
sebagai pengulangan, dimana jika pengulangan ini terpenuhi yaitu i lebih kecil
dari 1 atau “i” lebih besar dari “n” maka program akan menjalankan suatu aksi
yang telah disebutkan pada “do”.
quota=i;
while(i>0){
cout << "Masukkan nama folder ke - "<< (i) << " dalam Local Disk
(D:) : ";
gets(berkas[catat].nama);
berkas[catat].induk=&berkas[0];

Modul V I– Pointer VI- 16


Praktikum Algoritma dan Pemograman 2020

catat++;
i--;
dalam(catat-1,1);

Script “quota=i;” merupakan potongan kode yang yang menyatakan nilai


“quota” sama dengan “i”. Script “while(i>0){“ berfungsi sebagai pengulangan,
dimana selama “i” lebih besar dari 0 maka program akan menjalankan suatu aksi
tertentu. Script “cout << "Masukkan nama folder ke - "<< (i) << "
dalam Local Disk (D:) : "; ” merupakan suatu aksi yang dijalankan program

ketika pengulangan “while” terpenuhi. Script “gets(berkas[catat].nama);”


merupakan potongan kode untuk mengakses nilai nama pada berkas. Script
“catat++;” berfungsi untuk menambah nilai “catat”, sedangkan script “i--;”
berfungsi untuk mengurangi nilai “i”.
back :
for(int c=1; c<=n; c++){
cout << "\nDirektori folder " << berkas[c].nama << " : ";
catat=0;
for(jin = &berkas[c]; jin != &berkas[0]; jin = jin -> induk){
if(jin == &berkas[c])continue;
strcpy(direktori[catat].nama, jin -> nama);
catat++;

Script “back :” berfungsi untuk mengembalikan program. Script


“for(int c=1; c<=n; c++){“ berfungsi sebagai pengulangan dimana nilai “c”
adalah 1, “c” lebih kecil samadengan “n” dan “c” akan terus bertambah. Script
“cout << "\nDirektori folder " << berkas[c].nama << " : ";”
berfungsi untuk menampilkan direktori berkas yang ditunjuk pada layar. Script
“catat=0;” berfungsi untuk memberi nilai pada catat adalah 0. Script “for(jin
= &berkas[c]; jin != &berkas[0]; jin = jin -> induk){“ berfungsi

sebagai pengulangan, dimana jin adalah alamat berkas dari “c”, “jin” tidak sama
dengan alamat berkas 0 dan “jin” menunjuk alamat induk. Script “if(jin ==
&berkas[c])continue;” merupakan penyeleksian kondisi dimana jika “jin”

sama dengan alamat berkas “c”, maka program akan diulangi. Script
“strcpy(direktori[catat].nama, jin -> nama);” berfungsi untuk
menyimpan direktori suatu “berkas”, dan nama pada “jin”. Script “catat++;”
berfungsi untuk menambah nilai “catat”.

Modul V I– Pointer VI- 17


Praktikum Algoritma dan Pemograman 2020

cout << "D:/";


for(int x=(catat-1); x>=0; x--){
cout << direktori[x].nama << "/";
}cout << berkas[c].nama;
}

Script “cout << "D:/";” berfungsi untuk menampilkan “D” pada layar.
Script “for(int x=(catat-1); x>=0; x--){“ merupakan perulangan dimana
“x” adalah “catat” dikurangi satu, “x” lebih besar sama dengan 0 dan “x” akan
dikurangi. Script “cout << direktori[x].nama << "/";” berfungsi untuk
menampilkan direktori berkas suatu berkas. Script “}cout <<

berkas[c].nama;” berfungsi untuk menampilkan “nama” berkas yang yang di

input kan user pada layar.


do{
cout << "\nPilih Aksi: \n \n1. Pindah Berkas \n2. Ganti Nama
Berkas \n3. Direktori Berkas \n0. Keluar\n \nMasukkan Aksi: ";
cin >> quota;
switch(quota){
case 1 : move(); break;
case 2 : change(); break;
case 3 : goto back; break;
}
}while(quota!=0);

Script “do{“ berfungsi untuk menjalankan suatu aksi jika suatu kondisi
terpenuhi. Script “cout << "\nPilih Aksi: \n \n1. Pindah Berkas
\n2. Ganti Nama Berkas \n3. Direktori Berkas \n0. Keluar\n
\nMasukkan Aksi: ";” berfungsi untuk menampilkan pilihan pilih aksi, pindah

berkas, ganti nama, direktori berkas dan keluar pada layar. Script “cin >>
quota;” berfungsi untuk menyimpan nilai pilihan yang ditampilkan ke layar.

Script “switch(quota){ case 1 : move(); break; case 2 : change();


break; case 3 : goto back; break;” berfungsi sebagai penyeleksi kondisi

yang menggunakan switch case. Script “}while(quota!=0);” merupakan suatu


syarat kondisi dimana selama “quota” tidak sama dengan 0, maka program akan
menjalankan aksi yang disebutkan pada “do”.
void dalam(int ibu, int tab){
if(quota<n){

Script “void dalam (int ibu, int tab){“ merupakan

pendeklarasian fungsi yang didalamnya terdapat “ibu” dan “tab” yang bertipe
data int. Script “if(quota<n){“ berfungsi sebagai penyeleksi kondisi yaitu jika
“quota” lebih besar dari “n”.
Modul V I– Pointer VI- 18
Praktikum Algoritma dan Pemograman 2020

do{
repeat :
cout << "\tMasukkan jumlah folder dalam folder " <<
berkas[ibu].nama << " : ";
cin >> k;
if((k==0) && (catat==(quota+1))){
goto repeat;
}
}while((k<0) || (k>(n-quota)));

Script “do{“ berfungsi untuk menjalankan suatu aksi tertentu jika suatu
kondisi tertentu terpenuhi. Script “cout << "\tMasukkan jumlah folder
dalam folder " << berkas[ibu].nama << " : ";” berfungsi untuk

menampilkan pernyataan “masukkan jumlah folder dalam folder” pada


layar. Script “cin >> k;” merupakan variabel yang berfungsi menyimpan nilai.
Script “if((k==0) && (catat==(quota+1))){“ merupakan seleksi kondisi jika
“k” sama dengan 0, “catat” sama dengan “quota” ditambah 1 maka program
akan menjalankan suatu aksi tertentu. Script “goto repeat;” berfungsi untuk
mengembalikan program ke menu repeat jika seleksi kondisi if terpenuhi. Script
“}while((k<0)|| (k>(n-quota)));” merupakan potongan kode yang berisi
perulangan, yaitu selama “k” lebih kecil dari 0 atau “k” lebih kecil dari “n”
dikurangi “quota”.
quota += k;
while(k>0){
for(int z=0; z<tab; z++)cout << "\t";
cout << "\tfolder ke - "<< (k) << " dalam folder "<<
berkas[ibu].nama << " : ";
gets(berkas[catat].nama);
berkas[catat].induk = &berkas[ibu];
cout << "\t";
catat++;
k--;
dalam(catat-1, tab+1);

Script “quota += k;” berfungsi memberi nilai “quota” yang ditambah adalah
“k” . Script “while(k>0){“ berfungsi sebagai perulangan yaitu selama “k” lebih
besar dari 0. Script “for(int z=0; z<tab; z++)cout << "\t";” merupakan
perulangan dimana “z” sama dengan 0, “z” lebih kecil dari tab dan “z” akan
bertambah. Script “cout << "\tfolder ke - "<< (k) << " dalam folder
"<< berkas[ibu].nama << " : ";” berfungsi menampilkan nama folder ke

“n” dalam folder pada layar. Script “gets(berkas[catat].nama);” berfungsi


mengambil nilai pada berkas. Script “berkas[catat].induk = &berkas[ibu];”
Modul V I– Pointer VI- 19
Praktikum Algoritma dan Pemograman 2020

berfungsi memberi nilai “induk” pada berkas. Script “catat++;” berfungsi untuk
menambah nilai “catat”. Script “k--;” berfungsi untuk mengurangi nilai “k”.
int search(char nama[100]){
for(int q=1; q<=n; q++){
if(strcmp(nama, berkas[q].nama) == 0){
return q;
}
}return -1;

Script “int search(char nama[100]){“ merupakan suatu


pendeklarasian array “nama” yang bertipe data char dan memiliki batasan 100.
Script “for(int q=1; q<=n; q++){“ merupakan suatu perulangan dimana “q”
sama dengan 1, “q” lebih kecil sama dengan “n” dan “q” akan bertambah. Script
“if(strcmp(nama, berkas[q].nama) == 0){“ merupakan potongan kode yang
berfungsi sebagai penyeleksi kondisi dimana jika “nama” pada “berkas” adalah 0,
maka program akan “return q;” yaitu kembali ke “q”.
int move(){
do{
cout << "Masukkan nama berkas yang akan dipindahkan : ";
gets(berkas[0].nama);
i=search(berkas[0].nama);
}while(i==-1);
berkas[catat].induk = &berkas[i];

Script “int move(){“ merupakan variabel dengan tipe data int. Script
“do{“ merupakan potongan kode yang berfungsi untuk menjalankan suatu aksi
selama kondisi yang dimaksud terpenuhi. Script “cout << "Masukkan nama
berkas yang akan dipindahkan : "; ” berfungsi untuk menampilkan intruksi

kepada user untuk memasukkan nama berkas yang akan dipindahkan. Script
“gets(berkas[0].nama);” berfungsi untuk mengambil nilai pada variabel nama.
Script “}while(i==-1);” merupakan suatu perulangan yaitu selama i sama
dengan -1. Sedangkan script “berkas[catat].induk = &berkas[i];” berfungsi
memberikan nilai “induk” berkas dengan alamat berkas.
int change(){
do{
cout << "Masukkan nama berkas yang akan diganti namanya : ";
gets(berkas[0].nama);
catat = search(berkas[0].nama);
}while(catat==-1);
cout << "Masukkan nama baru berkas : ";
gets(berkas[0].nama);

Modul V I– Pointer VI- 20


Praktikum Algoritma dan Pemograman 2020

strcpy(berkas[catat].nama, berkas[0].nama);
cout << "Nama berkas berhasil diganti\n";
}
Script “int change(){“ merupakan variabel change dengan tipe data int.
Script “do{“ berfungsi untuk menjalankan suatu aksi selama kondisi yang
disebutkan terpenuhi. Script “cout << "Masukkan nama berkas yang akan
diganti namanya : ";” berfungsi untuk menampilkan intruksi kepada user

untuk meng input kan nama berkas yang akan diganti namanya pada layar. Script
“gets(berkas[0].nama);” berfungsi untuk mengambil nilai pada variabel
“nama”. Script “catat = search(berkas[0].nama);” berfungsi untuk variabel
catat mencari nama pada berkas. Script “}while(catat==-1);” merupakan suatu
perulangan yaitu selama nilai “catat” sama dengan -1, maka program akan
menjalankan “cout << "Masukkan nama baru berkas : ";” berfungsi
memberi intruksi pada user agar memasukkan nama nama baru pada berkas.
Script “cout << "Nama berkas berhasil diganti\n";” berfungsi untuk
mnampilkan nama berkas yang telah diganti oleh user.

Modul V I– Pointer VI- 21


Praktikum Algoritma dan Pemograman 2020

6.6 KESIMPULAN
Berdasarkan praktikum yang telah dilaksanaka, maka dapat kita ambil
beberapa kesimpulan :
1. Pointer merupakan variabel penunjuk alamat suatu lokasi memori tertentu,
pointer berfungsi untuk menyalin dan mengurus sebuah alamat dari variabel
yang dituju.
2. Beberapa pemanfaatan pointer dalam program antara lain void pointer, pointer
pada array, pointer pada struct, pointer pada string, dan pointer pada pointer.
Pointer digunakan untuk menunjuk nilai alamat memori pada suatu variabel
dan diakses menggunakan Pointer deference (&) untuk menunjuk alamat
memori variabel tersebut.

Modul V I– Pointer VI- 22


Praktikum Algoritma dan Pemograman 2020

DAFTAR PUSTAKA

[1] Mukharil, Adam Bactiar. “Pemrograman C&C++”. Informatika Bandung.


Bandung, 2018.
[2] Munir, Rinaldi dan Leony Lidya. “Algoritma dan Pemograman”. Bandung:
Informatika Bandung.2016.

Modul V I– Pointer VI- 23

Anda mungkin juga menyukai