Anda di halaman 1dari 52

MODUL PRAKTIKUM

ALGORITMA DAN PEMROGRAMAN 2


AII241

Disusun Oleh:

1 Veri Julianto, M.Si NIP. 199007112015041001


.
2 Winda Aprianti, M.Si NIK. 150801145
.
3 Yunita Prastyaningsih, M.Kom NIK. 110103048
.

TEKNIK INFORMATIKA

POLITEKNIK NEGERI TANAH LAUT

i
TAHUN 2017

HALAMAN PENGESAHAN

ALGORITMA DAN PEMROGRAMAN 2

AII241

Tanggal : ……………………
Dikaji ulang oleh : Ketua Jurusan Teknik Informatika
Disetujui oleh : Wakil Direktur 1 Bidang Akademik

Disiapkan Oleh:
Koordinator Team Teaching, Anggota, Anggota,

Winda Aprianti, M.Si. Veri Julianto, M.Si. Yunita Prastyaningsih


NIK. 150801145 NIP. 199007112015041001 NIK. 110103048

Diperiksa Oleh: Disahkan Oleh:


Ketua Jurusan, Wakil Direktur Bidang Akademik,

Veri Julianto, M.Si. Jaka Darma Jaya, M.P, M.Sc


NIP. 199007112015041001 NIP. 198404282011011003

ii
KATA PENGANTAR

Segala puji dan syukur penulis panjatkan ke hadirat Allah Swt. Alhamdulillahi
Rabbil’Aalamin, atas limpahan rahmat dan karunia-Nya penulis dapat menyelesaikan
penyusunan modul ini. Shalawat dan salam dengan ucapan Allahumma sholli ’ala Muhammad
wa ’ala ali Muhammad penulis sampaikan untuk junjungan kita Nabi besar Muhammad Saw.
Modul Praktikum Algoritma dan Pemrograman 2 ini disusun untuk memenuhi kebutuhan
pendidikan dalam kegiatan Praktikum mata kuliah Pemrograman Visual.
Seperti layaknya sebuah modul, maka pembahasan dimulai dengan menjelaskan tujuan
yang hendak dicapai dan disertai dengan latihan yang mengukur tingkat penguasaan materi
setiap topik. Dengan demikian pengguna modul ini secara mandiri dapat mengukur tingkat
ketuntasan yang dicapainya.
Penulis menyadari sepenuhnya bahwa modul ini tentu punya banyak kekurangan. Untuk
itu penulis dengan berlapang dada menerima masukan dan kritikan konstruktif dari berbagai
pihak demi kesempurnaannya di masa yang akan datang. Akhirnya kepada Allah jualah penulis
bermohon semoga semua ini menjadi amal saleh bagi penulis dan bermanfaat bagi pembaca.

Pelaihari, Maret 2017


Penulis,

iii
TATA TERTIB PRAKTIKUM

1. Mahasiswa peserta praktikum berpakaian sopan dan pantas, dan tidak diperkenankan
memakai alas kaki ke dalam ruang praktikum,
2. Sebelum kegiatan praktikum dimulai mahasiswa diharapkan untuk mempersiapkan diri
terlebih dahulu perihal materi perkuliahan yang akan dibahas.
3. Mahasiswa dilarang untuk memasuki ruangan sebelum dijinkan oleh dosen / instruktur /
asisten / staff / kepala laboratorium komputer.
4. Mahasiswa masing-masing menempati komputer yang telah disediakan
5. Mahasiswa menyiapkan buku modul praktek yang telah dibagikan
6. Mahasiswa mengerjakan materi dan tugas praktikum sesuai modul praktek 
7. Mahasiswa dilarang berbicara, bercakap-cakap apabila tidak diperintahkan oleh Dosen /
Instruktur Laboratorium Komputer baik sebelum maupun selama kegiatan berlangsung,
8. Mahasiswa mengisi absensi kehadiran praktikum yang telah disediakan
9. Selama kegiatan perkuliahan berlangsung mahasiswa diwajibkan untuk menjaga
ketertiban di dalam ruangan laboratorium komputer, mahasiswa mematikan komputer 
setelah selesai kegiatan perkuliahan lab.
10. Mahasiswa peserta praktikum dilarang main game, arogan, merokok, makan atau minum
di dalam ruangan laboratorium komputer, mahasiswa yang main game, arogan, makan,
atau minum akan langsung dikeluarkan dari laboratorium komputer.
11. Mahasiswa dilarang mengoperasikan (menggunakan, memindahkan peralatan
laboratorium), sebelum mendapat izin dari dosen / instruktur / asisten / staff / kepala
laboratorium komputer.
12. Apabila mahasiswa tidak mengerti cara mengoperasikan alat yang tersedia, agar
menanyakan kepada Dosen / Instruktur / Asisten / Staff Laboratorium Komputer.
13. Mahasiswa tidak mengganggu kegiatan belajar-mengajar. (Seperti : mengobrol, atau
menggunakan Telepon Seluler), keluar dan masuk Laboratoirum Komputer tanpa
meminta ijin terlebih dahulu kepada dosen yang bersangkutan.
14. Apabila kegiatan Laboratorium sudah selesai, mahasiswa diharuskan untuk
mengembalikan semua peralatan pada posisi semula,
15. Apabila terjadi kerusakan peralatan, agar mahasiswa segera melaporkan kepada Dosen /
Instruktur / Asisten / Staff / Kepala Laboratorium Komputer, adapun jika kerusakan
disebabkan oleh kelalaian mahasiswa maka yang bersangkutan diharuskan mengganti
kerusakan tersebut,
16. Apabila mahasiswa tidak mengikuti ketentuan diatas maka akan dikenakan sanksi baik
administrasi maupun akademik

iv
DAFTAR ISI

COVER MODUL PRAKTIKUM


HALAMAN PENGESAHAN
KATA PENGANTARi
TATA TERTIB PRAKTIKUM
DAFTAR ISI
PRAKTIKUM 1
PRAKTIKUM 2
PRAKTIKUM 3-4
PRAKTIKUM 5-6
PRAKTIKUM 7-8
PRAKTIKUM 10
PRAKTIKUM 11-12
PRAKTIKUM 13-14
PRAKTIKUM 15
PRAKTIKUM 16
DAFTAR PUSTAKA………………………………………………………………………..

v
Praktikum ke-1

1. Judul Materi

Konsep Struktur Data

2. Kemampuan Akhir Tahap Pembelajaran (KATP)

Mahasiswa dapat menggunakan struktur data pada pemrograman C++ secara benar (C3,
A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Sebuah struktur data adalah sekelompok elemen data yang dikelompokkan bersama
di bawah satu nama. Berbeda dengan array yang harus bertipe sama, unsur-unsur data
(dikenal sebagai elemen struktur atau field) dapat memiliki tipe data dan panjang yang
berbeda. Selain itu, array diakses melalui indeksnya sedangkan struktur diakses melalui
identifier atau nama variabel. Walaupun field-field tersebut berada dalam satu kesatuan,
masing-masing field tersebut tetap dapat diakses secara individual. Field-field tersebut
digabungkan menjadi satu dengan tujuan untuk kemudahan dalam operasinya.

Misalnya Anda ingin mencatat data-data mahasiswa dan pelajar dalam sebuah
program, Untuk membedakannya Anda dapat membuat sebuah record mahasiswa yang
terdiri dari field nim, nama, alamat dan ipk serta sebuah record pelajar yang terdiri dari
field-field nama, nourut, alamat dan jumnilai. Dengan demikian akan lebih mudah untuk
membedakan keduanya.

Deklarasi
Struktur data dapat dinyatakan dalam C ++ menggunakan sintaks berikut:
struct nama_struktur nama struktur, kata struct harus ada
{
tipe_data1 elemen1;
tipe_data2 elemen2;
tipe_data3 elemen3; elemen dari struktur/field


identifier yang digunakan untuk mengakses
} nama_objek;
struktur

1
atau sintaks berikut:
struct nama_struktur
{
tipe_data1 elemen1;
tipe_data2 elemen2;


} ;
struct nama_struktur nama_objek;

Enumerasi
Enumerasi adalah tipe data yang mempunyai elemen-elemen bertipe konstanta
dengan urutan yang sudah ditentukan. Nilai-nilai dari konstanta ini berupa nilai-nilai integer
yang diwakili oleh pengenal yang ditulis di antara tanda kurung kurawal “{ “ dan “}”. Tipe
ini dideklarasikan dengan kata kunci enum.

Enumerasi dapat dinyatakan dalam C ++ menggunakan sintaks berikut:


Enum nama_enumerasi {nilai1,nilai2,…}

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi struktur data
b. Tahapan latihan,
i. pemberian contoh-contoh source code kepada mahasiswa tentang
pendeklarasian dan pengaksesan struktur data pada pemrograman C++ dalam
codeblocks,
ii. mahasiswa mengidentifikasi komponen, cara mendeklarasikan dan
mengakses struktur data pada contoh yang diberikan.
iii. mahasiswa berlatih mendeklarasikan dan mengakses struktur data dengan
membuat source code yang memuat struktur data pada pemrograman C++
dalam codeblocks dari kasus permasalahan sehari-hari
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan

Contoh 1 merupakan contoh struktur data pada pemrograman C++ dalam codeblocks, baik
contoh struktur data dengan tipe data yang sama maupun struktur data dengan tipe data yang
berbeda. Contoh 1 merupakan contoh sederhana, yang memuat proses penginputan dan
proses menampilkan struktur data. Contoh 1 merupakan contoh pemrograman dari kasus

2
penginputan data diri mahasiswa meliputi nama, nim, semester, dan ipk, serta tanggal
penginputan data diri tersebut.

Contoh 1
#include <iostream>

using namespace std;

struct mahasiswa
{
char nim[10];
Contoh struktur dengan tipe
char nama[25];
int semester; data berbeda
float ipk;
};

struct mahasiswa mhs; // struct dapat dihilangkan

int main()
{
struct tanggal
{ Contoh struktur dengan tipe
int tanggal, bulan, tahun; data sama
}tgl;
// program mengakses field
cout << "Data inputan mahasiswa\n";
cout << "Tanggal\t: "; cin >> tgl.tanggal;
cout << "Bulan\t: "; cin >> tgl.bulan;
cout << "Tahun\t: "; cin >> tgl.tahun;

cout << "\nData Mahasiswa : \n"; Inputan data


cout << "NIM\t: "; cin >> mhs.nim;
cout << "Nama\t: "; cin >> mhs.nama;
cout << "Semester: "; cin >> mhs.semester;
cout << "IPK\t: "; cin >> mhs.ipk;

cout << "\nRekap inputan mahasiswa tanggal ";


cout << tgl.tanggal << "-" << tgl.bulan;
cout << "-" << tgl.tahun;
Output Data
cout << "\nNama: " << mhs.nama;
cout << ", NIM : " << mhs.nim;
cout << ", dengan IPK : " << mhs.ipk;
}

3
Sebutkan komponen dari pendeklarasian struktur data mahasiswa dan tanggal, serta
cara mengaksesnya!
Buatlah sebuah source code yang memuat struktur data dari permasalahan kehidupan
sehari-hari!
Contoh 2 merupakan contoh penggunaan enumerasi dalam struktur data pada codeblocks.
Contoh 2
#include <iostream>

using namespace std;

enum j_kel {pria, wanita};

int main ()
{
struct siswa
{
int nis;
string nama;
j_kel kelamin;
} A;

A.nis = 123;
A.nama = "Riri";
A.kelamin = wanita;

cout << "Nis\t: " << A.nis;


cout << "\nNama\t: " << A.nama;
cout << "\nKelamin : " << A.kelamin;
}

Buatlah penjelasan tentang source code pada Contoh 2!


Buatlah sebuah source code yang memuat enumerasi dalam struktur data dari kasus
pendataan mahasiswa dengan enumerasi berupa Jurusan Teknik Informatika,
Teknologi Industri Pertanian, dan Mesin Otomotif!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-1.


1) Buatlah program untuk menghitung spp mahasiswa menggunakan struktur, jika diketahui
a. D3
- spp tetap Rp 500.000
- spp var Rp 25.000/sks
b. S1
- spp tetap Rp 750.000

4
- spp var Rp 50.000/sks

2) Buat program untuk menghitung jumlah nilai akhir mahasiswa menggunakan struktur
dengan ketentuan :
Nilai akhir = (10%*tugas) + (20%*kuis) + (30%*mid) + (40%*uas)
Nilai Huruf :
Nilai akhir >85 : A
85 >= nilai akhir > 70 : B
70 >= nilai akhir > 55 : C
55 >= nilai akhir > 40 : D
Nilai akhir <=40 : E

3) Buatlah program menghitung durasi rental warnet menggunakan struktur, dengan


ketentuan perhitungannya:
30 detik = Rp. 130,-
Satuan waktu yang diinputkan dalam jam : menit : detik

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font : Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, listing program, hasil running, dan alur
jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat pada pertemuan yang akan datang.

5
Praktikum ke-2

1. Judul Materi

Struktur Array

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan Array dalam struktur data pada bahasa pemrograman C++
sesuai algoritma yang benar (C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Array adalah suatu struktur yang terdiri dari sejumlah elemen yan memiliki tipe data
yang sama. Elemen-elemen array tersusun secara sekuensial dalam memori komputer. Array
dapat berupa 1 dimensi, 2 dimensi, tiga dimensi ataupun multi dimensi. Ukuran array
dideklarasikan terlebih dahulu di awal, dimana ukuran array menandakan jumlah elemen
yang terkandung di dalam Array. Akibatnya array bersifat statis karena memiliki batasan
alokasi memori (ukuran).

Array dalam struktur adalah suatu komponen dalam struktur yang berbentuk array,
dapat berupa elemen berbentuk array, objek berbentuk array, ataupun elemen dan objek
sekaligus berbentu array.

Sintaks dari elemen berbentuk array.

struct nama_struktur
{
tipe_data1 elemen1[5];
tipe_data2 elemen2[5];

} nama_objek ;

Sintaks dari objek berbentuk array.

struct nama_struktur
{
tipe_data1 elemen1;
tipe_data2 elemen2;

} nama_objek[10] ;

6
Sintaks dari elemen dan objek berbentuk array.

struct nama_struktur
{
tipe_data1 elemen1[5];
tipe_data2 elemen2[5];

} nama_objek[10] ;

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi array dalamstruktur
data
b. Tahapan latihan,
i. mahasiswa mengingat kembali penggunaan array dalam pemrograman C++
pada codeblocks
ii. pemberian contoh-contoh source code kepada mahasiswa tentang
pendeklarasian dan pengaksesan array struktur data dalam pemrograman C+
+ pada codeblocks,
iii. mahasiswa mengidentifikasi komponen, cara mendeklarasikan dan
mengakses array dalam struktur data pada contoh yang diberikan.
iv. mahasiswa berlatih mendeklarasikan dan mengakses struktur data dengan
membuat source code yang memuat array dalam struktur data dalam
pemrograman C++ pada codeblocks dari kasus permasalahan sehari-hari
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan
Buatlah pemrograman yang memuat array tentang penginputkan data diri yang
meliputi nama dan umur!

Contoh penggunaan elemen struktur data berupa array dapat dilihat pada Contoh 1.

Contoh 1

#include <iostream>

using namespace std;

struct orang
{
char nama[5][30]; int umur[5];
};

7
main()
{
struct orang divisi;

int i;

for (i=0; i<=4;i++)


{
cout << "\nData ke-" << i+1;
cout << "\nNama : "; cin >>divisi.nama[i];
cout << "Umur : "; cin >> divisi.umur[i];
}

for (i=0; i<=4;i++)


{
cout << "\nData ke["<<i<<"] bernama ";
cout << divisi.nama[i]<<" dan berumur ";
cout << divisi.umur[i]<< " tahun";
}
}

Buatlah penjelasan mengenai alur program pada Contoh 1!

Buatlah program yang memuat elemen struktur data berupa array dari kasus
pendataan isi ruangan pada Gedung perkuliahan Teknik Informatika!

Contoh penggunaan objek struktur data berupa array dapat dilihat pada Contoh 2.

Contoh 2

#include <iostream>
using namespace std;

struct orang
{
char nama[30]; short umur;
}divisi[10];

main()
{
int i;
for (i=0; i<=9;i++)
{
cout << "\nData ke-" << i+1;
cout << "\nNama : "; cin >> divisi[i].nama;

8
cout << "Umur : "; cin >> divisi[i].umur;
}

for (i=0; i<=9;i++)


{
cout << "\nData ke["<<i<<"] bernama ";
cout << divisi[i].nama <<" dan berumur ";
cout << divisi[i].umur << " tahun";
}
}

Buatlah penjelasan mengenai alur program pada Contoh 2!

Buatlah program yang memuat objek struktur data berupa array dari kasus
pendataan isi ruangan pada Gedung perkuliahan Teknik Informatika!

Contoh penggunaan objek struktur data berupa array dapat dilihat pada Contoh 3.

Contoh 3

#include <iostream>
using namespace std;

struct orang
{
char nm_divisi[30];
char nama[5][30]; short umur[5];
}divisi[10];

main()
{
int i, j;
for (i=0; i<=9;i++)
{
cout << "\nData Divisi ke-" << i+1;
cout << "\nNama Divisi: "; cin >> divisi[i].nm_divisi;
cout << "\nAnggota divisi ke-“ << i+1:
for (j=0;j<=4;j++)
{
cout << "\nNama : "; cin >> divisi[i].nama[j];
cout << "Umur : "; cin >> divisi[i].umur[j];
}
}

9
}

Buatlah penjelasan mengenai alur program pada Contoh 3!

Buatlah program yang memuat elemen dan objek struktur data berupa array dari
kasus pendataan isi ruangan pada Gedung perkuliahan Teknik Informatika!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-2.


1) Buatlah program untuk menghitung spp mahasiswa menggunakan elemen struktur array,
jika diketahui
a. D3
- spp tetap Rp 500.000
- spp var Rp 25.000/sks
b. S1
- spp tetap Rp 750.000
- spp var Rp 50.000/sks

2) Buat program untuk menghitung jumlah nilai akhir mahasiswa menggunakan elemen dan
objek struktur array dengan ketentuan :
Nilai akhir = (10%*tugas) + (20%*kuis) + (30%*mid) + (40%*uas)
Nilai Huruf :
Nilai akhir >85 : A
85 >= nilai akhir > 70 : B
70 >= nilai akhir > 55 : C
55 >= nilai akhir > 40 : D
Nilai akhir <=40 : E

3) Buatlah program menghitung durasi rental warnet menggunakan objek struktur array,
dengan ketentuan perhitungannya:
30 detik = Rp. 130,-
Satuan waktu yang diinputkan dalam jam : menit : detik

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font : Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, listing program, hasil running, dan alur
jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat pada pertemuan yang akan datang.

10
11
Praktikum ke-3 dan Praktikum ke-4

1. Judul Materi

Pointer

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan Pointer dalam struktur data pada bahasa pemrograman C++
secara tepat (C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Pointer merupakan variabel yang digunakan untuk menunjukkan suatu alamat memori
komputer.

Pointer dapat dinyatakan dalam C ++ menggunakan sintaks berikut:


tipe_data *nama_pointer;

Operator pointer:
&nama_pointer  menunjukkan alamat nama_pointer

*nama_pointer  menunjukkan nilai dari alamat nama_pointer

Operasi pada Pointer

Pada pointer terdapat 3 jenis operator, yaitu operator penugasan, operator aritmatika, dan
operator logika.
a. Operator Penugasan
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.
b. Operator Aritmatika
Pada pointer dapat dilakukan operasi aritmatika, yaitu operasi penambahan dan
pengurangan. Namun operasi ini hanya terbatas untuk tipe data integer saja.
c. Operator Logika
Pada pointer dapat digunakan operator logika, yaitu
if (pernyataan)
{
perintah;

}

12
else
{
perintah;

}

Structure of Pointer
Pointer dapat diakses dengan struktur. Variabel pointer dari struktur dapat
dideklarasikan sebagai berikut.
struct nama_struktur

tipe_data1 elemen1;

tipe_data2 elemen2;

Pengaksesan Struktur
Elemen dari struktur melalui pointer dapat diakses dengan dua cara:
a. Merujuk pointer ke alamat lain untuk mengakses memori
Deklarasi untuk mengakses anggota stuktur melalui pointer dapat dilihat pada cara
berikut.

struct nama_struktur

tipe_data1 elemen1;

tipe_data2 elemen2;

…..

}*nama_pointer, nama_objek;

atau
struct nama_struktur

tipe_data1 elemen1;

tipe_data2 elemen2;

…..

};
13

main()
atau
struct nama_struktur

tipe_data1 elemen1;

tipe_data2 elemen2;

…..

Elemen pointer struktur dapat diakses menggunakan:

(*nama_pointer).elemen atau nama_pointer -> elemen

b. Menggunakan alokasi memori dinamis


Untuk mengakses elemen struktur menggunakan pointer, memori dapat dialokasikan
secara dinamis menggunakan malloc() function yang terdefinisi di bawah header
stdlib.h.

Deklarasi untuk menggunakan malloc()

nama_pointer = (cast-type*)malloc(byte-size)

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi pointer dalam
struktur data
b. Tahapan latihan,
i. pemberian contoh-contoh source code kepada mahasiswa tentang
pendeklarasian dan pengaksesan pointer dalam pemrograman C++ pada
codeblocks,
ii. pemberian contoh-contoh source code kepada mahasiswa tentang
pendeklarasian dan pengaksesan pointer struktur data dalam pemrograman
C++ pada codeblocks,
iii. mahasiswa mengidentifikasi komponen, cara mendeklarasikan dan
mengakses pointer dalam struktur data pada contoh yang diberikan.
iv. mahasiswa berlatih mendeklarasikan dan mengakses struktur data dengan
membuat source code yang memuat pointer dalam struktur data dalam
pemrograman C++ pada codeblocks dari kasus permasalahan sehari-hari
14
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan

Contoh penggunaan pointer dapat dilihat pada Contoh 1.

Contoh 1

#include <iostream>
using namespace std;

main()
{
int a, b;
a = 30;
b = a - 5;

int *ubah;
ubah = &a;
*ubah = 20;
ubah = &b;
*ubah = 10;

cout<<"\nNilai 1 = "<< a <<" dan nilai 2 = "<< b;


}

Jelaskan tentang sintaks yang terdapat pada Contoh 1!

Contoh penggunaan operator penugasan pada pointer dapat dilihat pada Contoh 2.

Contoh 2
float nilai,*p1,*p2; nilai = 14.54;
cout << "nilai = “ << nilai <<", alamatnya "<<&nilai;
p1 = &nilai;
p2 = p1;
cout << "\n nilai p1 = “ << *p2 <<", p1 menunjuk alamat "<<p1;
cout << "\n nilai p2 = “ << *p2 <<", p2 menunjuk alamat" <<p2;

Buatlah penjelasan mengenai alur program pada Contoh 2 dan buatlah contoh lain
untuk operato penugasan!

Contoh penggunaan operator aritmatika pada pointer dapat dilihat pada Contoh 3.

Contoh 3
#include <iostream>
using namespace std;

15
void main(){
int nilai[5], *penunjuk; clrscr();
nilai[0] = 125; nilai[1] = 345;
nilai[2] = 750; nilai[3] = 800;
nilai[4] = 900;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk<<" ada di alamat memori "<<penunjuk;
cout<<"\nNilai "<<*(penunjuk+1)<<" ada di alamat memori"<<penunjuk+1;
cout<<"\nNilai "<<*(penunjuk+2)<<" ada di alamat memori"<<penunjuk+2;
cout<<"\nNilai "<<*(penunjuk+3)<<" ada di alamat memori"<<penunjuk+3;
cout<<"\nNilai "<<*(penunjuk+4)<<" ada di alamat memori"<<penunjuk+4;
}

Buatlah contoh lain untuk operator aritmatika dan jelaskan!

Contoh penggunaan operator logika pada pointer dapat dilihat pada Contoh 4.

Contoh 4
#include <iostream>
using namespace std;
void main()
{
int *pa, *pb, a = 100, b = 10;
clrscr();
pa = &a; pb = &b;
if (*pa < *pb)
{
cout<<"pa menunjuk ke memori lebih RENDAH dari pb\n";
}
else if (*pa == *pb)
{
cout<<"pa menunjuk ke memori yang SAMA dengan pb\n";
}
else
{
cout<<"pa menunjuk ke memori lebih TINGGI dari pb\n";
}
}

Buatlah contoh lain untuk operator logika dan jelaskan!

Contoh penggunaan pointer void dapat dilihat pada Contoh 5.


Contoh 5
#include <iostream>
using namespace std;

main()

16
{
void *ptr; //pointer tidak bertipe

int vint = 50;


float vfl = 5.5;

ptr = &vint; //menunjuk ke int


cout << "Nilai yang ditunjuk ptr : " << *(int *) ptr << endl;
//type cast, karena ptr nya pointer void; berlaku juga kalau mau mengubah nilai

ptr = &vfl; //boleh juga menunjuk ke float


cout << "Nilai yang ditunjuk ptr : " << *(float *) ptr << endl;
}

Contoh penggunaan pointer array dapat dilihat pada Contoh 6.


Contoh 6
#include <iostream>
using namespace std;

main()
{
int tgl_lahir[]={24, 6, 1965};
int *ptgl;

ptgl = tgl_lahir;

cout << "Nilai yang ditunjuk oleh ptgl: " << *ptgl << endl;

cout << "\nPengaksesan menggunakan array\n";


for (int i = 0; i < 3; i++)
cout << tgl_lahir[i] << endl;

cout << "\nPengaksesan menggunakan notasi pointer\n";


for (int i=0; i<3; i++)
cout << *(ptgl+i) << endl;

cout << "\nPengaksesan menggunakan Pointer dengan jumlah elemen array dihitung
otomatis\n";
for (int i=0; i< sizeof (tgl_lahir)/sizeof(int); i++)
cout << * (ptgl+i) << endl;

cout << "\nPengaksesan menggunakan pointer dengan cara lain\n";


for (int i =0; i<sizeof(tgl_lahir)/sizeof(int); i++)
{
cout << *ptgl << endl;
ptgl++;

17
}
}

Buatlah contoh lain untuk pointer array dan jelaskan!

Contoh penggunaan pointer fungsi dapat dilihat pada Contoh 7.


Contoh 7
#include <iostream>
using namespace std;

void ubah_nilai (int &x)


{
x = 95;
}

main()
{
int nilai = 90;
cout << "Nilai mula-mula " << nilai << endl;

ubah_nilai (nilai);
cout << "Nilai sekarang " << nilai << endl;
}

Buatlah contoh lain untuk pointer fungsi dan jelaskan!

Contoh penggunaan pointer fungsi dapat dilihat pada Contoh 8.


Contoh 8
#include <iostream>
using namespace std;

struct Tanggal
{
int tgl, bln, thn;
};

struct Data
{
char nama [8];
struct Tanggal *Lahir,a;
}mhs;

main ()
{
mhs.Lahir = &mhs.a;
//struct Tanggal a;
//struct Data mhs = {&a};

18
cout << "Masukkan nama : "; cin >> mhs.nama;
cout << "Masukkan Tanggal = "; cin>> mhs.Lahir->tgl;
cout << "Masukkan Bulan = "; cin >> mhs.Lahir->bln;
cout << "Masukkan Tahun = "; cin >> mhs.Lahir->thn;

cout << mhs.nama << " lahir pada tanggal ";


cout << mhs.Lahir->tgl << "-" << mhs.Lahir->bln;
cout << "-" << mhs.Lahir->thn;
}

Buatlah contoh lain untuk struktur pointer fungsi dan jelaskan!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-3 dan praktikum ke-4.
1) Buatlah program untuk menghitung spp mahasiswa menggunakan struktur pointer, jika
diketahui
a. D3
- spp tetap Rp 500.000
- spp var Rp 25.000/sks
b. S1
- spp tetap Rp 750.000
- spp var Rp 50.000/sks

2) Buat program untuk menghitung jumlah nilai akhir mahasiswa menggunakan struktur
pointer dengan ketentuan :
Nilai akhir = (10%*tugas) + (20%*kuis) + (30%*mid) + (40%*uas)
Nilai Huruf :
Nilai akhir >85 : A
85 >= nilai akhir > 70 : B
70 >= nilai akhir > 55 : C
55 >= nilai akhir > 40 : D
Nilai akhir <=40 : E

3) Buatlah program menghitung durasi rental warnet menggunakan struktur pointer, dengan
ketentuan perhitungannya:
30 detik = Rp. 130,-
Satuan waktu yang diinputkan dalam jam : menit : detik

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font : Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, listing program, hasil running, dan alur
jalannya program.

19
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat pada praktikum ke-5.

20
Praktikum ke-5 dan Praktikum ke-6

1. Judul Materi

Stack

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan Stack pada bahasa pemrograman C++ secara tepat (C3, A3,
P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data
yang lain. Stack menggunakan konsep LIFO. LIFO merupakan salah satu konsep yang
efektif untuk menyimpan dan mengambil data, yaitu "terakhir masuk sebagai yang
pertama keluar" (Last In First Out). Hal ini berarti, pengambilan data akan berkebalikan
urutannya dengan penyimpanan data.
Ada beberapa istilah yang harus diketahui dalam stack, yaitu:
a. Top, yaitu bagian atas dari stack
b. Push, yaitu meletakkan sebuah elemen pada Top
c. Pop, yaitu menghapus/memindahkan elemen pada Top
d. IsEmpty, yaitu fungsi yang digunakan untuk mengecek apakah stack kosong
e. IsFull, yaitu fungsi yang digunakan untuk mengecek apakah stack sudah penuh

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi stack.
b. Tahapan latihan,
i. mahasiswa berlatih membuat Algoritma Push dan Pop pada Stack dalam
bentuk flowchart
ii. pemberian source code kepada mahasiswa tentang operasi pada stack dalam
pemrograman C++ pada codeblocks,
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan
Buatlah Algoritma Push dan Pop pada Stack dalam bentuk flowchart!

Stack dapat dinyatakan dalam array dengan mendefinisikan ukuran array sebagai
batas maksimum stack. Adapun deklarasi stack adalah sebagai berikut.

21
#define MAXSTACK 5

typedef struct{
char item[MAXSTACK]; //array yang berisi data tumpukan
int top; //indeks data yang teratas
} Stack;

Operasi pada Stack


a. Inisialisasi Stack, operasi untuk menciptakan stack kosong

void InisialisasiStack(Stack &s){


s.top = 0;
}

Jelaskan fungsi inisialisasi dan sebutkan cara pengaksesannya!

b. IsFull, fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh
int IsFull(Stack &s){
if (s.top == MAXSTACK)
return 1;
else
return 0;
}

Jelaskan fungsi IsFull dan sebutkan cara pengaksesannya!

c. Push, fungsi yang menambahkan sebuah elemen ke dalam stack dengan syarat stack tidak
penuh.

char push (int x, Stack &s){


if (IsFull(s) == 1)
cout<<"Stack Penuh! Tidak dapat menambah tumpukan data!";
else
{
s.item[s.top]=x; //array pada indek ke-n
++(s.top); // penambahan index
}
}

Jelaskan fungsi push dan sebutkan cara pengaksesannya!

d. IsEmpty, fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong
int IsEmpty(Stack &s){
if (s.top == 0)
return 1 ;
else
return 0;
}
22
Jelaskan fungsi IsEmpty dan sebutkan cara pengaksesannya!

e. Pop, fungsi yang mengeluarkan sebuah elemen dari stack dengan syarat stack tidak
kosong
char pop(Stack &s){
if (IsEmpty (s) == 1)//stack kosong
cout << "Stack masih kosong!";
else
{
-- (s.top);
return (s.item[s.top]);
}
}
Jelaskan fungsi Pop dan sebutkan cara pengaksesannya!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-5 dan ke-6.


1) Buatlah program Stack secara lengkap berdasarkan fungsi-fungsi yang telah ada pada
poin 6.
2) Jelaskan alur program Stack yang telah dibuat pada nomor 1

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara individu.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font : Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, listing program, hasil running, dan alur
jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat pada praktikum ke-7.

23
Praktikum ke-7 dan Praktikum ke-8

1. Judul Materi

Queue

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan Queue pada bahasa pemrograman C++ secara tepat (C3, A3,
P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Queue adalah konsep penyimpanan sekumpulan data yang sering digunakan. Pada
antrian data dapat disimpan dalam array atau linked list. Pada queue, penunjuk posisi depan
dan belakang harus disimpan. Apabila akan menambah data pada antrian maka
menaikkan penunjuk belakang dan meletakkan data pada posisi tersebut. Apabila akan
menghapus data pada antrian maka dihapus pada posisi depan dan menaikkan penunjuk
depan. Queue menggunakan konsep FIFO (First In First Out), artinya yang pertama masuk
maka yang pertama keluar.
Ada beberapa istilah yang harus diketahui dalam queue, yaitu:
a. Head/Front, yaitu elemen terdepan dari queue
b. Tail/Rear, yaitu elemen terakhir dari queue
c. Enqueue, yaitu meletakkan sebuah elemen pada Tail/Rear
d. Dequeue, yaitu menghapus/mengeluarkan elemen pada Head/Front
e. IsEmpty, yaitu fungsi yang digunakan untuk mengecek apakah queue kosong
f. IsFull, yaitu fungsi yang digunakan untuk mengecek apakah queue sudah penuh

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi queue.
b. Tahapan latihan,
i. mahasiswa berlatih membuat Algoritma Enqueue dan Dequeue pada Queue
dalam bentuk flowchart
ii. pemberian source code kepada mahasiswa tentang operasi pada queue dalam
pemrograman C++ pada codeblocks,
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan
Buatlah Algoritma Enqueue dan Dequeue pada Queue dalam bentuk flowchart!

24
Queue dapat dinyatakan dalam array dengan mendefinisikan ukuran array sebagai
batas maksimum queue. Adapun deklarasi queue adalah sebagai berikut.

#define MAXQUEUE 5

typedef struct{
char item[MAXQUEUE]; //array yang berisi data tumpukan
int head; //indeks data yang terdepan
int tail; //indeks data yang terakhir
} Queue;

Operasi pada Queue


a. Inisialisasi Queeu, operasi untuk menciptakan queue kosong

void InisialisasiQueue(Queue &s){


s.head = 0;
s.tail = 0;
}
Jelaskan fungsi inisialisasi dan sebutkan cara pengaksesannya!

b. IsFull, fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh
int IsFull(Queue &s){
if (s.tail== MAXQUEUE)
return 1;
else
return 0;
}

Jelaskan fungsi IsFull dan sebutkan cara pengaksesannya!

c. Enqueue, fungsi yang menambahkan sebuah elemen ke dalam queue dengan syarat queue
tidak penuh.

char enqueue (int x, Queue &s){


if (IsFull(s) == 1)
cout<<"Queue Penuh! Tidak dapat menambah antrian data!";
else
{
++(s.tail); // penambahan index
s.item[s.tail]=x; //array pada indek ke-n
}
}

Jelaskan fungsi enqueue dan sebutkan cara pengaksesannya!

d. IsEmpty, fungsi yang melakukan pengecekan apakah queue dalam kondisi kosong

25
int IsEmpty(Queue &s){
if (s.head == s.tail)
return 1 ;
else
return 0;
}

Jelaskan fungsi IsEmpty dan sebutkan cara pengaksesannya!

e. Dequeue, fungsi yang mengeluarkan sebuah elemen dari queue dengan syarat queue tidak
kosong
char dequeue(Queue &s){
if (IsEmpty (s) == 1)//Queue kosong
cout << "Queue masih kosong!";
else
{
++ (s.head);
return (s.item[s.head]);
}
}
Jelaskan fungsi Dequeue dan sebutkan cara pengaksesannya!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-7 dan ke-8.


1) Buatlah program Queue secara lengkap berdasarkan fungsi-fungsi yang telah ada pada
poin 6.
2) Jelaskan alur program Queue yang telah dibuat pada nomor 1

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara individu.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, listing program, hasil running, dan alur
jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat sebelum UTS Praktikum.

26
Praktikum ke-10

1. Judul Materi

Link List dan Double Link List

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan konsep Link List dan Double Link List pada bahasa
pemrograman C++ secara tepat (C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Secara konseptual, linked list merupakan deretan elemen yang berdampingan. Akan
tetapi, karena elemen-elemen tersebut dialokasikan secara dinamis (menggunakan malloc),
sangat penting untuk diingat bahwa kenyataannya, linked list akan terpencar-pencar di
memori. Pointer dari elemen ke elemen berarti sebagai penjamin bahwa semua elemen dapat
diakses.

Single linked list atau biasa disebut linked list terdiri dari elemen-elemen individu,
dimana masing-masing dihubungkan dengan pointer tunggal. Masing-masing elemen terdiri
dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer next.
Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan cara
menunjuk pointer next suatu elemen ke elemen yang mengikutinya. Pointer next pada
elemen terakhir merupakan NULL, yang menunjukkan akhir dari suatu list. Elemen pada
awal suatu list disebut head, dan elemen terakhir dari suatu list disebut tail.

Double linked list dibentuk dengan menyusun sejumlah elemen sehingga pointer next
menunjuk ke elemen yang mengikutinya dan pointer back menunjuk ke elemen yang
mendahuluinya. Info adalah data yang digunakan dalam simpul, back adalah pointer yang
menunjuk pada simpul sebelumnya, dan next adalah pointer yang menunjuk pada simpul
sesudahnya

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi queue.
b. Tahapan latihan,
i. pemberian source code kepada mahasiswa tentang operasi insert dan delete
pada link list dalam pemrograman C++ pada codeblocks,
ii. pemberian source code kepada mahasiswa tentang operasi pada double link
list dalam pemrograman C++ pada codeblocks,
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

27
6. Latihan
a. Link List
i. Insert
Insert sebagai node awal dari linked list
void insertashead(list insert)
{
insert->next=head;
head = insert;
}

Insert setelah node tertentu dari linked list


void insertafternode(int x, list insert)
{
list after;
after = head;
do
after = after->next;
while (after->datalist != x);
insert->next = after->next;
after->next = insert;
}

Insert sebelum node tertentu dari linked list


void insertbeforenode(int x, list insert)
{
list before, prevbefore;
if (head->datalist = x)
insertashead(insert)
else
{
before = head;
do
prevbefore = before;
before = before->next;
while (before->datalist != x);
insert->next = before;
prevbefore->next = insert;
}
}

Insert sebagai node akhir dari linked list


void insertastail(list insert)
{
list tail;
tail = head;
do
tail = tail->next;
while (tail->next != NULL);
tail->next = insert;
tail = tail->next;
}

28
ii. Delete
Buatlah program yang memuat:
Delete sebagai simpul pertama
Delete sebagai simpul tertentu
Delete sebagai simpul terakhir
b. Double Link List
Source code untuk double link list LIFO

#include <iostream >


#include <conio.h>
#include <malloc.h>

struct DoubleLinkedNode {
int bil;
struct DoubleLinkedNode *back;
struct DoubleLinkedNode *next;
};

struct DoubleLinkedNode *head, *tail, *hapus;

void bentuk_awal() {
struct DoubleLinkedNode *awal; int j=0;char jawab;
while(1){
awal=(struct DoubleLinkedNode*) malloc(sizeof (struct
DoubleLinkedNode));
cout<<"Masukkan bilangan :"; cin>>awal->bil;
if(j==0){
awal->next=NULL;
awal->back=NULL;
head = awal;
tail = awal;
}
else{
tail->next=awal;
awal->next=NULL;
awal->back=tail;
tail = awal;
}
cout<<"Ada data lagi(y/t): "; cin>>jawab;
if(jawab=='Y'||jawab=='y'){
j++;
continue;
}
else if(jawab=='T'||jawab=='t'){
//cout<<"Oke";
break;
}
else{

29
cout<<"Salah";
j++;
continue;
}
}
}

void tampil_list_lifo(){
struct DoubleLinkedNode *lifo;
cout<<endl<<"=========="<<endl;
cout<<"Data LIFO"<<endl;
cout<<"=========="<<endl;
lifo = tail;
while(lifo!=NULL){
cout<<lifo->bil<<endl;;
lifo=lifo->back;
}
cout<<"=========="<<endl;
}

void hapus_LIFO()
{
cout<<endl<<endl<<"!!!HAPUS LIFO!!!"<<endl<<endl;
if((head!=NULL)&&(head->next==NULL))
{
head->next=NULL;
cout<<"Data Kosong..."<<endl;
}
if(head!=NULL)
{
hapus=head;
head=hapus->next;
}
free(hapus);
hapus=NULL;
}

main(){
bentuk_awal();
tampil_list_lifo();
hapus_LIFO();
getch();
}
Jelaskan alur program source code di atas!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-10.


1) Buatlah sebuah program yang memuat sebuah single linked list untuk kasus
merepresentasikan data mahasiswa. Data mahasiswa berupa nim, nama, alamat, indeks

30
prestasi. Buatlah fungsi-fungsi untuk membangun single linked list, menelusuri,
menambah simpul, menghapus simpul
2) Tambahkan tampilan di output setelah anda mengerjakan percobaan di atas dengan
penghitungan indeks prestasi rata-rata, dimana iprata=total/jumlah_siswa;
total didapatkan dari menambahkan IP yang didapat tiap mahasiswa.
3) Implementasikan Double Linked List ini untuk memvisualisasikan antrian mobil
(menampilkan dengan metode FIFO) yang ada pada sebuah perparkiran. Data yang
digunakan adalah : no plat nomor, merk mobil, nama pemilik. Data ditambahkan dan
dikurangi berdasarkan no plat nomor.

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, listing program, hasil running, dan alur
jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat pada praktikum ke-11.

31
Praktikum ke-11 dan Praktikum ke-12

1. Judul Materi

Searching

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan metode searching dan membedakan metode-metode
searching pada bahasa pemrograman C++ secara tepat (C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah


argumen kunci dan dengan langkah-langkah tertentu akan mencari argument kunci tersebut
pada data yang telah dimiliki. Setelah proses pencarian dilaksanakan, akan diperoleh salah
satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak
ditemukan (unsuccessful).

Ada dua macam teknik pencarian yaitu pencarian sekuensial (sequential search) dan
pencarian biner (binary search). Perbedaan dari dua teknik ini terletak pada keadaan data.
Pencarian sekuensial digunakan apabila data dalam keadaan acak atau tidak terurut.
Sebaliknya, pencarian biner digunakan pada data yang sudah dalam keadaan urut.

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi Sequential dan
Binary search.
b. Tahapan latihan,
i. mahasiswa berlatih membuat Algoritma Sequential dan Binary search dalam
bentuk flowchart
ii. mahasiswa berlatih menerapkan sequential search untuk mencari argument
kunci pada kasus yang diberikan
iii. pemberian source code kepada mahasiswa tentang sequential search dalam
pemrograman C++ pada codeblocks,
iv. mahasiswa berlatih menerapkan binary search untuk mencari argument kunci
pada kasus yang diberikan
v. pemberian source code kepada mahasiswa tentang binary search dalam
pemrograman C++ pada codeblocks,
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

32
6. Latihan

Buatlah algoritma Sequential dan Binary search dalam bentuk flowchart!

a. Sequential Search
i. Manual

Algoritma pencarian dapat dijelaskan sebagai berikut : pencarian dimulai dari data
paling awal, kemudian ditelusuri dengan menaikkan indeks data, apabila data
sama dengan kunci pencarian dihentikan dan diberikan nilai pengembalian true,
apabila sampai indeks terakhir data tidak ditemukan maka diberikan nilai
pengembalian false.
Ilustrasi dari algoritma sequential search adalah sebagai berikut :
Kunci=3

ii. Program

#include <iostream.h>
#include <conio.h>

int main(){
int A[]={1,2,3,4,5,6,7,8,9,10};
int i, ketemu = 0, n = sizeof(A)/sizeof(A[0]);
int cari; cout<<"Masukkan data yang dicari : ";cin>>cari;
for(i=0; i<n;i++){
if (A[i]==cari){
ketemu=!ketemu;
break;
}
}

33
if(ketemu>=0)
cout<<"Data ditemukan di posisi : "<<i+1;
else
cout<<"Data tidak ditemukan";
getch();
}
Ubahlah program di atas menjadi program Sequential Search dengan Fungsi.

b. Binary Search

#include <iostream.h>
#include <conio.h>

int BinarySearch(int Data[], int x, int n) {


int L = 0, R = n-1, m, ketemu = 0;
while((L <= R) && (!ketemu)){
m = (L + R) / 2;
if(Data[m] == x)
ketemu = !ketemu;
else if (x < Data[m])
R = m - 1;
else
L = m + 1;
}
if(ketemu)
return m+1;
else
return -1;
}

int main(){
int Data[]={1,2,3,4,5,6,7,8,9,10};
int n = sizeof(Data);
int cari; cout<<"Masukkan data yang dicari : ";cin>>cari;
int ketemu = BinarySearch(Data, cari, n);
if(ketemu>0)
cout<<"Data ditemukan di posisi : "<<ketemu;
else
cout<<"Data tidak ditemukan";
getch();
}

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-11 dan ke-12.


1) Kerjakan secara manual menggunakan algoritma searching
Data 1: 3 17 9 32 25 29 34 5, cari : 34

34
Data 2: 15 21 6 35 37 24 4 21, cari : 24
2) m Searching dengan kasus yang diberikan.
3) Jelaskan alur program Searching yang telah dibuat pada nomor 2

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, hasil pengerjaan manual listing program,
hasil running, dan alur jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat sebelum prakikum ke-13.

35
Praktikum ke-13 dan Praktikum ke-14

1. Judul Materi

Sorting

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan metode sortg dan membedakan metode-metode sorting
pada bahasa pemrograman C++ secara tepat (C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Algoritma pengurutan (sorting algorithm) adalah algoritma yang mengurutkan data


menggunakan aturan tertentu. Ada 2 macam, yaitu urut naik (ascending) dan urut turun
descending)
a. urut naik (ascending) yaitu dari data yang mempunyai nilai paling kecil sampai paling besar
b. urut turun (descending) yaitu data yang mempunyai nilai paling besar sampai paling kecil.
Ada 2 metode sorting yang dipelajari, yaitu Buble dan Quick Sort.

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi Buble dan Quick
Sort.
b. Tahapan latihan,
i. mahasiswa berlatih membuat Algoritma Buble dan Quick Sort pada Queue
dalam bentuk flowchart
ii. mahasiswa berlatih menerapkan Buble Sort untuk mencari argument kunci
pada kasus yang diberikan
iii. pemberian source code kepada mahasiswa tentang Buble Sort dalam
pemrograman C++ pada codeblocks,
iv. mahasiswa berlatih menerapkan Quick Sort untuk mencari argument kunci
pada kasus yang diberikan
v. pemberian source code kepada mahasiswa tentang Quick Sort dalam
pemrograman C++ pada codeblocks,
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan

Buatlah algoritma Buble dan Quick Sort dalam bentuk flowchart!

36
a. Buble Sort
i. Manual

Misalkan kita punya data seperti ini: 6, 4, 3, 2 dan data ini akan diurutkan secara
ascending dengan menggunakan bubble sort. Berikut ini adalah proses yang terjadi:
Iterasi ke-1: 4, 6, 3, 2 :: 4, 3, 6, 2 :: 4, 3, 2, 6 (ada 3 pertukaran)
Iterasi ke-2: 3, 4, 2, 6 :: 3, 2, 4, 6 :: 3, 2, 4, 6 (ada 2 pertukaran)
Iterasi ke-3: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 1 pertukaran)
Iterasi ke-4: 2, 3, 4, 6 :: 2, 3, 4, 6 :: 2, 3, 4, 6 (ada 0 pertukaran) -> proses selesai

Urutkan Data: 3 17 9 32 25 29 34 5 secara descending dengan menggunakan


buble sort!

ii. Algoritma

for (i=0;i<=n-2;i++) {
for (j=n-1;j>i+1;j--) {
if Data[j] < Data[j-1]
Buble = A[j]
A[j] = A[j-1]
A[j-1] = Buble
}
}
Ubahlah algoritma di atas menjadi sebuah program Buble sort yang lengkap.

b. Quick Sort
i. Manual

37
ii. Algoritma

quickSort(int arr[], int left, int right) {


int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];

/* partition */
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];

38
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
Ubahlah algoritma di atas menjadi sebuah program Quick sort yang lengkap.

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-13 dan ke-14.


1) Kerjakan secara manual menggunakan algoritma buble dan quick sort
Data 1: 19 33 27 10 5 25 30 9
Data 2: 15 21 6 35 37 24 4 21
2) Buatlah program Sorting dengan kasus yang diberikan.
3) Jelaskan alur program Sorting yang telah dibuat pada nomor 2

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, hasil pengerjaan manual, listing program,
hasil running, dan alur jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat sebelum praktikum ke-15.

39
Praktikum ke-15
1. Judul Materi

Tree

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan Tree dan Graph pada bahasa pemrograman C++ secara tepat (C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Struktur pohon (tree) biasanya digunakan untuk menggambarkan hubungan yang


bersifat hirarkis antara elemen-elemen yang ada. Contoh penggunaan struktur pohon :
• Silsilah keluarga
• Hasil pertandingan yang berbentuk turnamen
• Struktur organisasi dari sebuah perusahaan
Sebuah binary tree adalah sebuah pengorganisasian secara hirarki dari beberapa buah
simpul, dimana masing-masing simpul tidak mempunyai anak lebih dari 2. Simpul yang
berada di bawah sebuah simpul dinamakan anak dari simpul tersebut. Simpul yang berada di
atas sebuah simpul dinamakan induk dari simpul tersebut.

Pohon biner dapat disajikan secara berurutan dengan menggunakan array atau file dan
list.

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi Tree.
b. Tahapan latihan,
i. mahasiswa berlatih menyajikan tree dengan array dan list
ii. mahasiswa berlatih membentuk pohon biner
iii. mahasiswa berlatih menerapkan metode traversal
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan

Penyajian pohon biner secara berurutan dalam sebuah array adalah sebagai berikut. Akar
pohon (simpul tingkat pertama) selalu menempati elemen pertama array. Simpul-simpul tingkat
2 diletakkan sebagai elemen ke-2 dan 3. Simpul-simpul pada tingkat 3 diletakkan sebagai
elemen ke-4, 5, 6, 7. Simpul-simpul tingkat 4 diletakkan sebagai elemen ke-8 sampai ke-15.

40
Simpul dalam pohon biner dapat disajikan dengan list sebagai berikut:

Deklarasi struktur pohon :


typedef char TypeInfo;
typedef struct Simpul *Tree;
struct Simpul {
TypeInfo Info;
tree Kiri, /* cabang kiri */
tree Kanan; /* cabang kanan */
};

Pohon Biner

Diketahui suatu persamaan ( A + B ) * ( ( B – C ) + D ), maka pembentukan pohon


biner dapat dilihat pada tabel di bawah ini :

41
7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-15.


Buatlah flowchart untuk pembentukan pohon biner untuk suatu persamaan yang diinputkan
(asumsi : persamaan yang diinputkan harus selalu benar). Lihat pembentukan tree pada
contoh table diatas dengan ketentuan sebagai berikut :
• Buatlah dua buah stack, tumpukan operator dan tumpukan operand.
• Cek karakter yang diinputkan :
1. Bila karakter yang dibaca berupa operator (‘+’, ‘-‘, ‘*’, ‘/’) dan tanda ‘(‘ maka
masukkan karakter tersebut ke tumpukan operator.
2. Bila karakter yang dibaca berupa operand ‘A’ .. ‘Z’ maka masukkan ke tumpukan
operand.
3. Bila karakter yang dibaca adalah tanda ‘(‘ lakukan hal berikut :
a. Pop tumpukan operator sampai dengan tanda ‘)’ dan tandai operator yang berada
diantaranya (‘+’, ‘-‘, ‘*’, ‘/’).
b. Bentuklah sebuah Simpul dengan Info adalah karakter operator tersebut
dengan Kiri dan Kanan bernilai null.
c. Pada tumpukan operand, pop 2 karakter teratas.
i.Apabila karakter pertama berupa karakter ‘A’ .. ‘Z’ bentuk Simpul dengan
Info adalah karakter operand dan pointer Kiri dan Kanan bernilai null.
Apabila berupa operator, bentuk pohon dengan menunjuk pointer Kiri dari
Simpul operator ke Simpul karakter pertama.
ii. Cek untuk karakter kedua dengan cara yang sama. Apabila karakter kedua
berupa operator, bentuk pohon dengan menunjuk pointer Kanan dari
Simpul operator ke Simpul karakter kedua.
d. Kemudian karakter operator hasil pop yang sudah ditandai masukkan ke
tumpukan operand.
e. Ulangi langkah 3 sampai pembentukan pohon selesai.
4. Hasil output berupa penelusuran linked list dari pohon teratas secara preorder.

Teknis pengerjaan tugas:


a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, hasil pengerjaan manual, listing program,
hasil running, dan alur jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat sebelum prakikum ke-16.

42
Praktikum ke-16
1. Judul Materi

Graph

2. Kemampuan Akhir Tahap Pembelajaran (KATP)


Mahasiswa dapat menerapkan Tree dan Graph pada bahasa pemrograman C++ secara tepat
(C3, A3, P4)

3. Alat dan Bahan


Alat dan bahan yang diperlukan adalah: Personal Computer (PC)/Laptop, Terminal, dan
Codeblocks.

4. Teori Singkat

Sebuath graph G=<V,E> terdiri dari sekumpulan titik (nodes atau vertices) V dan
sekumpulan garis (arcs atau edges) E. Sebuah garis menghubungkan dua titik u dan v; v
dikatakan adjacent to u. Pada graph berarah (directed graph), setiap garis mempunyai arah
dari u ke v dan dituliskan sebagai pasangan <u,v> atau u->v. Pada graph tak berarah
(undirected graph), garis tidak mempunyai arah dan dituliskan sebagai pasangan {u,v} atau
u<->v. Graph tak berarah merupakan graph berarah jika setiap garis tak berarah {u,v}
merupakan dua garis berarah <u,v> dan <v,u>.
Sebuah jalur (path) pada G adalah sekumpulan titik <v0, v1, v2, …, vn> sehingga
<vi, vi+1> (atau {vi, vi+1}), untuk setiap I dari 0 ke n-1 adalah garis pada G. Jalur menjadi
sederhana jika tidak ada dua titik yang identik. Jalur merupakan sebuah siklus jika v0=vn.
Jalur merupakan siklus yang sederhana jika v0=vn dan tidak ada dua titik yang identik.

Graph banyak digunakan untuk menggambarkan jaringan dan peta jalan, jalan kereta
api, lintasan pesawat, system perpipaan, saluran telepon, koneksi elektrik, ketergantungan
diantara task pada sistem manufaktur dan lain-lain. Terdapat banyak hasil dan struktur
penting yang didapatkan dari perhitungan dengan graph.

5. Pelaksanaan Praktikum

Tahapan pelaksanaan praktikum adalah sebagai berikut.


a. Tahapan uraian materi, yaitu penjelasan singkat tentang materi Graph.
b. Tahapan latihan,
i. mahasiswa mengingat kembali materi graph yang telah diberikan pada mata
kuliah matematika diskrit
ii. mahasiswa berlatih membuat program dengan algoritma djikstra
c. Tahapan tindak lanjut, yaitu pemberian tugas kepada mahasiswa.

6. Latihan

43
Berikan penjelasan tentang macam-macam graph!
Salah satu penerapan graph adalah algoritma djikstra. Berikut source code algoritma djikstra

#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<string.h>
#include<math.h>
#define IN 10000
#define N 9

//int dijkstra(int cost[][N], int source, int target);


int dijsktra(int cost[][N],int source,int target)
{
int dist[N],prev[N],selected[N]={0},i,m,min,start,d,j;
char path[N];
for(i=1;i< N;i++)
{
dist[i] = IN;
prev[i] = -1;
}

start = source;
selected[start]=1;
dist[start] = 0;
while(selected[target] ==0)
{
min = IN;
m = 0;
for(i=1;i< N;i++)
{
d = dist[start] +cost[start][i];
if(d< dist[i]&&selected[i]==0)
{
dist[i] = d;
prev[i] = start;
}
if(min>dist[i] && selected[i]==0)
{
min = dist[i];
m = i;
}
}
start = m;
selected[start] = 1;
}

start = target;

44
j = 0;
while(start != -1)
{
path[j++] = start+65;
start = prev[start];
}
path[j]='\0';
strrev(path);
//printf("%s", path);
return dist[target];
}

int main()
{
int cost[N][N],i,j,w,ch,co;
int source, target,x,y;
printf("\t****Lintaan Algoritma Terpendek (DIJKSRTRA's ALGORITHM)****\n\n");
for(i=1;i< N;i++)
for(j=1;j< N;j++)
cost[i][j] = IN;
for(x=1;x< N;x++)
{
for(y=x+1;y< N;y++)
{
printf(" Masukkan nilai dari jalur antara simpul %d dan %d: ",x,y);
scanf("%d",&w);
cost [x][y] = cost[y][x] = w;
}
printf("\n");
}
printf("\n Masukkan asal simpul: ");
scanf("%d", &source);
printf("\n Masukkan target simpul: ");
scanf("%d", &target);
co = dijsktra(cost,source,target);
printf("\n Jalur Terpendek: %d",co);

getch();
return(0);
}
Jelaskan alur program dari source code di atas!

7. Tugas

Berikut adalah beberapa tugas untuk praktikum ke-16.


Buatlah program dari penerapan graph pada permasalahan sehari-hari.
Teknis pengerjaan tugas:

45
a. Tugas dikerjakan secara kelompok.
b. Tugas dikumpulkan dalam bentuk laporan dengan format: A4, font: Times New
Roman, size 12, margin 4-3-3-3, cover sesuai format, menggunakan tata tulis ilmiah.
Laporan memuat latar belakang masalah, hasil pengerjaan manual, listing program,
hasil running, dan alur jalannya program.
c. Tugas juga dikumpulkan dalam bentuk softcopy program codeblocks dengan format
*.cpp
d. Tugas dikumpulkan paling lambat sebelum UAS.

46
DAFTAR PUSTAKA

Davis, Stephen Randy. 2004. C++ For Dummies 5th Edition. Indiana: Wiley Publishing, Inc

Kadir, Abdul. 2012. Algoritma dan Pemrograman Menggunakan Java. Yogyakarta: Andi.

Kadir, Abdul. 2013. From Zero to A Pro Pemrograman C++. Yogyakarta: Andi.

Sitorus, Lamhot & Sembiring, David J.M. 2012. Konsep dan Implementasi Struktur Data
dengan C++. Yogyakarta: Andi.

http://www.cplusplus.com/

47

Anda mungkin juga menyukai