laporan praktikum resmi bab 8

36
LAPORAN PRAKTIKUM RESMI ALGORITMA & STRUKTUR DATA 1 Disusun oleh : Nama : Joshua Steven Adrian NIM : 201301015 Dosen pengampu : Yosef Murya Kusuma Ardhana.S.T., M.Kom JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO PURWOKERTO 2014

Upload: mikha-joshua-steven-adrian

Post on 14-May-2017

249 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laporan Praktikum Resmi Bab 8

LAPORAN PRAKTIKUM RESMI

ALGORITMA & STRUKTUR DATA 1

Disusun oleh :

Nama : Joshua Steven Adrian

NIM : 201301015

Dosen pengampu :

Yosef Murya Kusuma Ardhana.S.T., M.Kom

JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO

PURWOKERTO 2014

Page 2: Laporan Praktikum Resmi Bab 8

2

BAB I

TEORI DASAR

Shell sort : mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak teretentu, lalu dilakukan pertukaran jika diperlukan.

Merge sort : suatu teknik pengurutan dengan menggabungkan setiap kali dua deretan elemen dan melakukan pengurutan terhadap elemen-elemen tersebut.

Mekanisme merge sort :

List harus dibagi dua menjadi sublist secara terurut. Setiap dua sublist yang berdekatan digabung hingga membentuk sublist yang lebih besar,

lalu tukar elemen yang terkecil di sebelah kiri dari elemen yang lebih besar. Proses terebut dilakukan berulang hingga sublist yang terbentuk hnya tinggal satu. Sublist yang terakhir terbentuk.

Page 3: Laporan Praktikum Resmi Bab 8

3

BAB II

PENJELASAN PROGRAM

Pada penjelasan program bab ini akan dijelaskan mengenai bagaimana melakukan sorting (shell & merge) pada Program 8.1, dan Program 8.2.

Listing Program 8.1

/* * biasa.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; void shellsort(int a[], int n) { int j, i, m, mid; for(m=n/2;m>0;m/=2) { for(j=m;j<n;j++) { for(i=j-m;i>0;i-=m) { if(a[i+m]>=a[i]) break; else { mid=a[i]; a[i]=a[i+m]; a[i+m]=mid; } } } } } int main() { int a[10],i,n; cout<<"Inputkan banyak data yang akan disorting:"; cin>>n; for(i=0;i<n;i++) {

Page 4: Laporan Praktikum Resmi Bab 8

4

cout<<"Data "<<i+1<<"="; cin>>a[i]; } cout<<"Data sebelum sorting:"; for(i=0;i<n;i++) cout<<a[i]<<" "; shellsort(a,n); cout<<"\nData setelah sorting:"; for(i=0;i<n;i++) cout<<a[i]<<" "; return 0; } Output Program 8.1

Hasil output dari Program 8.1 adalah sebagai berikut :

Penjelasan Program 8.1

Berikut penjelasan dari Listing Program 8.1 :

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

Page 5: Laporan Praktikum Resmi Bab 8

5

Int main digunakan untuk memulai /memainkan program.

data h;

Yang dimaksud int i, j, iMin, n, Urut, Tmp, Arr[50]; adalah tipe data i, j, iMin, n, Urut, Tmp, Arr[50] berbentuk int/ integer (bilangan bulat).

Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

Yang dimaksud Urut = 1; adalah urut bernilai 1.

for(i=0; i<n; i++){ cout<<"masukkan data ke"<<i+1<<"="; cin>>Arr[i]; }

Merupakan statement for yang berfungsi untuk perulangan.

for(i=0; i<n-1; i++){ iMin = i; for(j=Urut; j<n; j++){ if(Arr[j] < Arr[iMin]){ iMin = j; if(Arr[i] != Arr[iMin]){ Tmp = Arr[i]; if(Arr[i] > Arr[iMin]) { Arr[i] = Arr[iMin]; Arr[iMin] = Tmp; } } } }

merupakan statement for dalam for & if dalam if.

Urut = Urut+1; }

Merupakan rumus urut.

cout<<"\nSetelah Pengurutan\n"; Merupakan title.

Page 6: Laporan Praktikum Resmi Bab 8

6

for(i=0; i<n; i++){ cout<<"Elemen ke"<<i+1<<"="<<Arr[i]<<endl; }

Merupakan statement for yang berfungsi untuk perulangan.

Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

Listing Program 8.2

/* * b.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include "iostream" using namespace std; int a[50]; void merge (int,int,int); void merge_sort(int low,int high){ int mid; if(low<high) { mid=(low+high)/2; merge_sort(low,mid); merge_sort(mid+1,high); merge(low,mid,high); } } void merge(int low, int mid, int high){ int h,i,j,b[50],k; h=low; i=low; j=mid+1; while((h<=mid)&&(j<=high)) { if(a[h]<=a[j]) { b[i]=a[h]; h++;

Page 7: Laporan Praktikum Resmi Bab 8

7

} else{ b[i]=a[j]; j++; } i++; } if(h>mid) { for(k=j;k<=high;k++) { b[i]=a[k]; i++; } } else{ for(k=h;k<=mid;k++) { b[i]=a[k]; i++; } } for(k=low;k<=high;k++)a[k]=b[k]; } int main() { int num,i; cout<<"Inputkan banyak data yang akan diurutkan:"; cin>>num; cout<<endl; cout<<"Masukan ("<< num <<") data:"<<endl; for(i=1;i<=num;i++) { cin>>a[i]; } merge_sort(1,num); cout<<endl; cout<<"Setelah Pengurutan (Merge Sort) :"<<endl; for(i=1;i<=num;i++) cout<<a[i]<<" "; cout<<endl<<endl<<endl<<endl; return 0; }

Page 8: Laporan Praktikum Resmi Bab 8

8

Output Program 8.2

Hasil output dari Program 8.2 adalah sebagai berikut :

Penjelasan Program 8.2

Berikut penjelasan dari Listing Program 8.2 :

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

Int main digunakan untuk memulai /memainkan program.

Yang dimaksud int i, j, n, Tmp, Arr[50]; adalah tipe data i, j, n, Tmp, Arr[50] berbentuk int/ integer (bilangan bulat).

Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

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

Page 9: Laporan Praktikum Resmi Bab 8

9

{ cout<<"masukan data ke"<<i+1<<"="; cin>>arr[i]; }

Merupakan statement for yang berfungsi untuk perulangan.

Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

for(i=1;i<n;i++) { for(j=0;j<n-1;j++) { if(arr[j]>arr[j+1]) { tmp = arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } }

merupakan statement for dalam for & if dalam if.

cout<<"\nsetelah pengurutan data\n"; Merupakan title.

for(i=0;i<n;i++){ cout<<"\nelemen ke"<<i+1<<":"<<arr[i]<<endl; }

Merupakan statement for yang berfungsi untuk perulangan.

Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

Page 10: Laporan Praktikum Resmi Bab 8

10

Tugas Praktikum

Pada bagian ini kita akan membahas tugas praktikum ,berikut pertanyaan praktikumnya :

a. Modifikasi program 8.1, 8.2 dengan menggunakan tipe data abstrak (struct, typedef,

dan typedef & struct).

Jawaban :

a. Program 8.1

- Listing Program 8.1 dengan tipe data abstrak (struct)

/* * s8.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; struct data { int i,n; int j,m,mid; }h; void shellsort(int a[],int n) { for(h.m=n/2;h.m>0;h.m/=2) { for(h.j=h.m;h.j<n;h.j++) { for(h.i=h.j-h.m;h.i>=0;h.i-=h.m) { if(a[h.i+h.m]>=a[h.i]) break; else { h.mid=a[h.i]; a[h.i]=a[h.i+h.m]; a[h.i+h.m]=h.mid; } } } } } int main() {

Page 11: Laporan Praktikum Resmi Bab 8

11

data h; h.i; h.n; int a[10]; cout<<"Inputkan banyak data yang akan disorting :"; cin>>h.n; for(h.i=0;h.i<h.n;h.i++) { cout<<"Data "<<h.i+1<<"="; cin>>a[h.i]; } cout<<"Data sebelum sorting :"; for(h.i=0;h.i<h.n;h.i++) cout<<a[h.i]<<" "; shellsort(a,h.n); cout<<"\nData setelah sorting :"; for(h.i=0;h.i<h.n;h.i++) cout<<a[h.i]<<" "; return 0; } Output Program 8.1 dengan tipe data abstrak (struct)

Hasil output dari Program 8.1 dengan tipe data abstrak (struct) adalah sebagai berikut :

Penjelasan Program 8.1 dengan tipe data abstrak (struct)

Berikut penjelasan dari Listing Program 8.1 dengan tipe data abstrak (struct):

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Page 12: Laporan Praktikum Resmi Bab 8

12

Yang dimaksud using namespace std;adalah standar device sebuah program.

struct data { int i,n; int j,m,mid; }h;

Merupakan statement struct (tipe data abstrak).

Yang dimaksud void shellsort(int a[],int n) merupakan statement prosedur dengan nama shellsort.

for(h.m=n/2;h.m>0;h.m/=2) { for(h.j=h.m;h.j<n;h.j++) { for(h.i=h.j-h.m;h.i>=0;h.i-=h.m) { Merupakan statement for dalam for dalam for. For berfungsi untuk melakukan perulangan /looping. if(a[h.i+h.m]>=a[h.i]) break; else { h.mid=a[h.i]; a[h.i]=a[h.i+h.m]; a[h.i+h.m]=h.mid; } } } } } Merupakan statement if- else yang berfungsi untuk memilih /menyeleksi sebuah program. Int main digunakan untuk memulai /memainkan program.

data h; h.i; h.n; int a[10]; Yang dimaksud adalah data h merupakan statement struct(tipe data abstrak), h i adalah tipe data i berbentuk h, h n adalah tipe data n berbentuk h, int a[10]; adalah tipe data a berbentuk int/integer(bilangan bulat) dengan panjang 10. Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

Page 13: Laporan Praktikum Resmi Bab 8

13

for(h.i=0;h.i<h.n;h.i++) { cout<<"Data "<<h.i+1<<"="; cin>>a[h.i]; } cout<<"Data sebelum sorting :"; for(h.i=0;h.i<h.n;h.i++) cout<<a[h.i]<<" ";

Merupakan statement for dalam for dalam for. For berfungsi untuk melakukan perulangan /looping.

shellsort(a,h.n); merupakan statement pemanggilan prosedur shellsort.

Cout berfungsi sebagai input/masukkan dalam program.

for(h.i=0;h.i<h.n;h.i++) cout<<a[h.i]<<" ";

Merupakan statement for dalam for dalam for. For berfungsi untuk melakukan perulangan /looping.

Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

- Listing Program 8.1 dengan tipe data abstrak (typedef)

/* * t8.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; typedef int i,n; typedef int j,i,m,mid; void shellsort(int a[],int n) { j j; i i; m m; mid mid; for(m=n/2;m>0;m/=2) { for(j=m;j<n;j++) {

Page 14: Laporan Praktikum Resmi Bab 8

14

for(i=j-m;i>=0;i-=m) { if(a[i+m]>=a[i]) break; else { mid=a[i]; a[i]=a[i+m]; a[i+m]=mid; } } } } } int main() { int a[10]; n n; i i; cout<<"Inputkan banyak data yang akan disorting :"; cin>>n; for(i=0;i<n;i++) { cout<<"Data "<<i+1<<"="; cin>>a[i]; } cout<<"Data sebelum sorting :"; for(i=0;i<n;i++) cout<<a[i]<<" "; shellsort(a,n); cout<<"\nData setelah sorting :"; for(i=0;i<n;i++) cout<<a[i]<<" "; return 0; } Output Program 8.1 dengan tipe data abstrak (typedef)

Hasil output dari Program 8.1 dengan tipe data abstrak (typedef) adalah sebagai berikut :

Page 15: Laporan Praktikum Resmi Bab 8

15

Penjelasan Program 8.1 dengan tipe data abstrak (typedef)

Berikut penjelasan dari Listing Program 8.1 dengan tipe data abstrak (typedef):

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

typedef int i,n; typedef int j,i,m,mid;

Merupakan statement typedef (tipe data abstrak).

Yang dimaksud void shellsort(int a[],int n) merupakan statement prosedur dengan nama shellsort. j j; i i; m m; mid mid; Yang dimaksud dengan j j;adalah tipe data j berbentuk j, i i;adalah tipe data i

berbentuk i, m m;adalah tipe data m berbentuk m, & mid mid;adalah tipe data mid berbentuk mid.

for(m=n/2;m>0;m/=2) { for(j=m;j<n;j++) { for(i=j-m;i>=0;i-=m) { if(a[i+m]>=a[i]) break; else { mid=a[i]; a[i]=a[i+m]; a[i+m]=mid; } }

Page 16: Laporan Praktikum Resmi Bab 8

16

} } } Merupakan statement for dalam for dalam for, dan iif –else. for berfungsi untuk

melakukan perulangan/looping., & if-else berfungsi untuk menyeleksi /pemilihan& statement perulangan.

Int main digunakan untuk memulai /memainkan program.

int a[10]; n n; i i; Yang dimaksud dengan int a[10];adalah tipe data a berbentuk int/integer(bilangan

bulat) dengan panjang 10, n n;adalah tipe data n berbentuk n, & i i;adalah tipe data i berbentuk i .

Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

for(i=0;i<n;i++) { cout<<"Data "<<i+1<<"="; cin>>a[i]; }

Merupakan statement for yang berfungsi untuk melakukan perulangan /looping.

Cout berfungsi sebagai input/masukkan dalam program.

for(i=0;i<n;i++) cout<<a[i]<<" ";

Merupakan statement for yang berfungsi untuk melakukan perulangan /looping.

shellsort(a, n); merupakan statement pemanggilan prosedur shellsort.

Cout berfungsi sebagai input/masukkan dalam program.

for(i=0;h.i<n;i++) cout<<a[i]<<" ";

Merupakan statement for dalam for dalam for. For berfungsi untuk melakukan perulangan /looping.

Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

Page 17: Laporan Praktikum Resmi Bab 8

17

- Listing Program 8.1 dengan tipe data abstrak (typedef & struct)

/* * ts 8.1.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; typedef struct shell{ int a[10],i,n; }a; void shellsort(int a[], int n) { int j, i, m, mid; for(m=n/2;m>0;m/=2) { for(j=m;j<n;j++) { for(i=j-m;i>0;i-=m) { if(a[i+m]>=a[i]) break; else { mid=a[i]; a[i]=a[i+m]; a[i+m]=mid; } } } } } int main() { shell a; cout<<"Inputkan banyak data yang akan disorting:"; cin>>a.n; for(a.i=0;a.i<a.n;a.i++) { cout<<"Data "<<a.i+1<<"="; cin>>a.a[a.i]; } cout<<"Data sebelum sorting:"; for(a.i=0;a.i<a.n;a.i++) cout<<a.a[a.i]<<" ";

Page 18: Laporan Praktikum Resmi Bab 8

18

shellsort(a.a,a.n); cout<<"\nData setelah sorting:"; for(a.i=0;a.i<a.n;a.i++) cout<<a.a[a.i]<<" "; return 0; } Output Program 8.1 dengan tipe data abstrak (typedef & struct)

Hasil output dari Program 8.1 dengan tipe data abstrak (typedef & struct) adalah sebagai berikut :

Penjelasan Program 8.1 dengan tipe data abstrak (typedef & struct)

Berikut penjelasan dari Listing Program 8.1 dengan tipe data abstrak (typedef & struct):

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

typedef struct shell{ int a[10],i,n; }a;

Merupakan statement typedef struct (tipe data abstrak).

Yang dimaksud void shellsort(int a[], int n) merupakan statement prosedur dengan nama fungsi shellsort.

Page 19: Laporan Praktikum Resmi Bab 8

19

Yang dimaksud dengan int j, i, m, mid; adalah tipe data j, i,m,mid berbentuk int/integer (bilangan bulat).

for(m=n/2;m>0;m/=2) { for(j=m;j<n;j++) { for(i=j-m;i>=0;i-=m) { if(a[i+m]>=a[i]) break; else { mid=a[i]; a[i]=a[i+m]; a[i+m]=mid; } } } } } Merupakan statement for dalam for dalam for, dan iif –else. for berfungsi untuk

melakukan perulangan/looping., & if-else berfungsi untuk menyeleksi /pemilihan& statement perulangan.

Int main digunakan untuk memulai /memainkan program.

shell a; merupakan statement typedef struct. Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

for(a.i=0;a.i<a.n;a.i++) { cout<<"Data "<<a.i+1<<"="; cin>>a.a[a.i]; }

Merupakan statement for yang berfungsi untuk melakukan perulangan /looping.

Cout berfungsi sebagai input/masukkan dalam program.

for(a.i=0;a.i<a.n;a.i++) cout<<a.a[a.i]<<" ";

Merupakan statement for yang berfungsi untuk melakukan perulangan /looping.

shellsort(a.a,a.n); merupakan statement pemanggilan prosedur shellsort.

Page 20: Laporan Praktikum Resmi Bab 8

20

Cout berfungsi sebagai input/masukkan dalam program.

for(a.i=0;a.i<a.n;a.i++) cout<<a.a[a.i]<<" "; Merupakan statement for dalam for dalam for. For berfungsi untuk melakukan perulangan /looping. Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

b. Program 8.2

- Listing Program 8.2 dengan tipe data abstrak (struct)

/* * s8.2.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; struct jkt { int num,i; int mid,h,j,k; }z; int a[50]; void merge(int,int,int); void merge_sort(int low,int high) { if(low<high) { z.mid=(low+high)/2; merge_sort(low,z.mid); merge_sort(z.mid+1,high); merge(low,z.mid,high); } } void merge(int low,int mid,int high) { int b[50]; z.h=low; z.i=low; z.j=mid+1; while((z.h<=mid)&&(z.j<=high))

Page 21: Laporan Praktikum Resmi Bab 8

21

{ if(a[z.h]<=a[z.j]) { b[z.i]=a[z.h]; z.h++; } else { b[z.i]=a[z.j]; z.j++; } z.i++; } if(z.h>mid) { for(z.k=z.j;z.k<=high;z.k++) { b[z.i]=a[z.k]; z.i++; } } else { for(z.k=z.h;z.k<=mid;z.k++) { b[z.i]=a[z.k]; z.i++; } } for(z.k=low;z.k<=high;z.k++) a[z.k]=b[z.k]; } int main() { jkt z; cout<<"Inputkan banyak data yang akan diurutkan :"; cin>>z.num; cout<<endl; cout<<"Masukkan ( "<< z.num <<" ) data: "<<endl; for(z.i=1;z.i<=z.num;z.i++) { cin>>a[z.i]; } merge_sort(1,z.num); cout<<endl; cout<<"Setelah Pengurutan (Merge Sort) :"<<endl; for(z.i=1;z.i<=z.num;z.i++) cout<<a[z.i]<<" "; cout<<endl<<endl<<endl<<endl; return 0;

Page 22: Laporan Praktikum Resmi Bab 8

22

}

Output Program 8.2 dengan tipe data abstrak (struct)

Hasil output dari Program 8.2 dengan tipe data abstrak (struct) adalah sebagai berikut :

Penjelasan Program 8.2 dengan tipe data abstrak (struct)

Berikut penjelasan dari Listing Program 8.2 dengan tipe data abstrak (struct):

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

struct jkt { int num,i; int mid,h,j,k; }z;

Merupakan statement struct (tipe data abstrak).

Yang dimaksud int a[50]; adalah tipe data a berbentuk int (bilangan bulat) dengan panjang 50.

Page 23: Laporan Praktikum Resmi Bab 8

23

void merge(int,int,int); merupakan statement prosedur dengan nama merge.

void merge_sort(int low,int high) merupakan statement prosedur dengan nama merge_sort.

if(low<high) { z.mid=(low+high)/2; merge_sort(low,z.mid); merge_sort(z.mid+1,high); merge(low,z.mid,high); } Merupakan statement if yang berfungsi untuk memilih /menyeleksi sebuah program.

void merge(int low,int mid,int high) merupakan statement prosedur dengan nama merge.

Yang dimaksud dengan int b[50]; adalah tipe data b berbentuk int/integer (bilangan bulat) dengan panjang 50.

z.h=low; z.i=low; z.j=mid+1;

Yang dimaksud “z.h” bernilai sama dengan low, “z.i” bernilai sama dengan low, “z.j” bernilai mid+1.

while((z.h<=mid)&&(z.j<=high)) { if(a[z.h]<=a[z.j]) { b[z.i]=a[z.h]; z.h++; } else { b[z.i]=a[z.j]; z.j++; } z.i++; } Merupakan statement while dan if-else. While berfungsi untuk melakukan perulangan suatu program., dan if-else berfungsi untuk memilih /menyeleksi sebuah program. if(z.h>mid) { for(z.k=z.j;z.k<=high;z.k++) { b[z.i]=a[z.k];

Page 24: Laporan Praktikum Resmi Bab 8

24

z.i++; } } else { for(z.k=z.h;z.k<=mid;z.k++) { b[z.i]=a[z.k]; z.i++; } } for(z.k=low;z.k<=high;z.k++) a[z.k]=b[z.k]; } Merupakan statement if –else (berfungsi untuk memilih /menyeleksi sebuah program) yang didalamnya terdapat for (berfungsi untuk menyeleksi /pemilihan& statement perulangan). Int main digunakan untuk memulai /memainkan program.

jkt z; jkt z; merupakan statement struct(tipe data abstrak). Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

for(z.i=1;z.i<=z.num;z.i++) { cin>>a[z.i]; } Merupakan statement for yang berfungsi untuk melakukan perulangan /looping. merge_sort(1,z.num); merupakan statement pemanggilan prosedur merge_sort.

Cout berfungsi sebagai input/masukkan dalam program.

for(z.i=1;z.i<=z.num;z.i++) cout<<a[z.i]<<" "; cout<<endl<<endl<<endl<<endl; Merupakan statement for yang berfungsi untuk melakukan perulangan /looping. Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

- Listing Program 8.2 dengan tipe data abstrak (typedef)

Page 25: Laporan Praktikum Resmi Bab 8

25

/* * ts8.2.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; typedef int num,i,mid; typedef int h, j, k, b; int a[50]; void merge(int,int,int); void merge_sort(int low,int high) { mid f; if(low<high) { f=(low+high)/2; merge_sort(low,f); merge_sort(f+1,high); merge(low,f,high); } } void merge(int low,int mid,int high) { h y; j n; k m; i s; b v[50]; y=low; s=low; n=mid+1; while((y<=mid)&&(n<=high)) { if(a[y]<=a[n]) { v[s]=a[y]; y++; } else { v[s]=a[n]; n++; } s++; } if(y>mid) { for(m=n;m<=high;m++)

Page 26: Laporan Praktikum Resmi Bab 8

26

{ v[s]=a[m]; s++; } } else { for(m=y;m<=mid;m++) { v[s]=a[m]; s++; } } for(m=low;m<=high;m++) a[m]=v[m]; } int main() { num g; i s; cout<<"Inputkan banyak data yang akan diurutkan :"; cin>>g; cout<<endl; cout<<"Masukkan ( "<< g <<" ) data: "<<endl; for(s=1;s<=g;s++) { cin>>a[s]; } merge_sort(1,g); cout<<endl; cout<<"Setelah Pengurutan (Merge Sort) :"<<endl; for(s=1;s<=g;s++) cout<<a[s]<<" "; cout<<endl<<endl<<endl<<endl; return 0; }

Output Program 8.2 dengan tipe data abstrak (typedef)

Hasil output dari Program 8.2 dengan tipe data abstrak (typedef) adalah sebagai berikut :

Page 27: Laporan Praktikum Resmi Bab 8

27

Penjelasan Program 8.2 dengan tipe data abstrak (typedef)

Berikut penjelasan dari Listing Program 8.2 dengan tipe data abstrak (typedef):

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

typedef int num,i,mid; typedef int h, j, k, b;

Merupakan statement typedef (tipe data abstrak).

Yang dimaksud dengan int a[50]; adalah tipe data a berbentuk int (bilangan bulat) dengan panjang 50.

void merge(int,int,int); merupakan statement prosedur dengan nama merge.

void merge_sort(int low,int high) merupakan statement prosedur dengan nama merge_sort.

Yang dimaksud dengan mid f; adalah tipe data f berbentuk mid.

if(low<high) { f=(low+high)/2; merge_sort(low,f); merge_sort(f+1,high); merge(low,f,high); }

Page 28: Laporan Praktikum Resmi Bab 8

28

Merupakan statement if yang berfungsi untuk memilih /menyeleksi sebuah program.

void merge(int low,int mid,int high) merupakan statement prosedur dengan nama merge.

h y; j n; k m; i s; b v[50]; Yang dimaksud dengan h h; adalah tipe data h berbentuk h (bilangan bulat), j n; adalah tipe data n berbentuk j (bilangan bulat), k m; adalah tipe data m berbentuk k (bilangan bulat) , i s; adalah tipe data s berbentuk i (bilangan bulat), dan b v[50]; adalah tipe data v berbentuk b (bilangan bulat) dengan panjang 50.

y=low; s=low; n=mid+1;

Yang dimaksud “y” bernilai sama dengan low, “s” bernilai sama dengan low, “n” bernilai mid+1.

while((y<=mid)&&(n<=high)) { if(a[y]<=a[n]) { v[s]=a[y]; y++; } else { v[s]=a[n]; n++; } s++; } Merupakan statement while dan if-else. While berfungsi untuk melakukan perulangan suatu program., dan if-else berfungsi untuk memilih /menyeleksi sebuah program. if(y>mid) { for(m=n;m<=high;m++) { v[s]=a[m]; s++; } } else

Page 29: Laporan Praktikum Resmi Bab 8

29

{ for(m=y;m<=mid;m++) { v[s]=a[m]; s++; } } for(m=low;m<=high;m++) a[m]=v[m]; } Merupakan statement if –else (berfungsi untuk memilih /menyeleksi sebuah program) yang didalamnya terdapat for (berfungsi untuk menyeleksi /pemilihan& statement perulangan). Int main digunakan untuk memulai /memainkan program.

num g; i s; Yang dimaksud dengan num g; adalah tipe data g berbentuk num (bilangan bulat), i s; adalah tipe data s berbentuk i (bilangan bulat). Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

for(s=1;s<=g;s++) { cin>>a[s]; } Merupakan statement for yang berfungsi untuk melakukan perulangan /looping. merge_sort(1,g); merupakan statement pemanggilan prosedur merge_sort.

Cout berfungsi sebagai input/masukkan dalam program.

for(s=1;s<=g;s++) cout<<a[s]<<" "; cout<<endl<<endl<<endl<<endl; Merupakan statement for yang berfungsi untuk melakukan perulangan /looping. Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

- Listing Program 8.2 dengan tipe data abstrak (typedef & struct)

Page 30: Laporan Praktikum Resmi Bab 8

30

/* * k.cpp * * Created on: Apr 23, 2014 * Author: ACER */ #include <iostream> using namespace std; typedef struct jkt { int a[50]; int num,i; }z; void merge(int,int,int); void merge_sort(int low,int high) { int mid; if(low<high) { mid=(low+high)/2; merge_sort(low,mid); merge_sort(mid+1,high); merge(low,mid,high); } } void merge(int low,int mid,int high) { jkt z; int h,j,b[50],k; h=low; z.i=low; j=mid+1; while((h<=mid)&&(j<=high)) { if(z.a[h]<=z.a[j]) { b[z.i]=z.a[h]; h++; } else { b[z.i]=z.a[j]; j++; } z.i++; } if(h>mid) { for(k=j;k<=high;k++) {

Page 31: Laporan Praktikum Resmi Bab 8

31

b[z.i]=z.a[k]; z.i++; } } else { for(k=h;k<=mid;k++) { b[z.i]=z.a[k]; z.i++; } } for(k=low;k<=high;k++) z.a[k]=b[k]; } int main() { jkt z; cout<<"Inputkan banyak data yang akan diurutkan :"; cin>>z.num; cout<<endl; cout<<"Masukkan ( "<< z.num <<" ) data: "<<endl; for(z.i=1;z.i<=z.num;z.i++) { cin>>z.a[z.i]; } merge_sort(1,z.num); cout<<endl; cout<<"Setelah Pengurutan (Merge Sort) :"<<endl; for(z.i=1;z.i<=z.num;z.i++) cout<<z.a[z.i]<<" "; cout<<endl<<endl<<endl<<endl; return 0; }

Output Program 8.2 dengan tipe data abstrak (typedef & struct)

Page 32: Laporan Praktikum Resmi Bab 8

32

Hasil output dari Program 8.2 dengan tipe data abstrak (typedef & struct) adalah sebagai berikut :

Penjelasan Program 8.2 dengan tipe data abstrak (typedef & struct)

Berikut penjelasan dari Listing Program 8.2 dengan tipe data abstrak (typedef & struct):

Tanda yang diawali /* dan diakhiri tanda */ merupakan script untuk membuat sebuah komentar pada pemrograman C++ yang didalamnya mengandung sebuah perintah atau teks, maka saat program dirunning atau dijalankan tidak akan dibaca oleh compiler.

#include atau disebut sebagai pengarah preprocessor #include berfungsi untuk menginstruksikan compiler untuk menyertakan berkas C++ sumber yang lain sebelum kompilasi dimulai.

<iostream> merupakan pengarah praprosesor yang input/masukkannya menggunakan cout ,dan penampung data ke programnya/outpunya menggunakan cin.

Yang dimaksud using namespace std;adalah standar device sebuah program.

typedef struct jkt { int a[50]; int num,i; }z;

Merupakan statement typedef struct (tipe data abstrak).

void merge(int,int,int); merupakan statement prosedur dengan nama merge.

void merge_sort(int low,int high) merupakan statement prosedur dengan nama merge_sort.

Yang dimaksud int mid; adalah tipe data mid berbentuk int (bilangan bulat).

if(low<high) {

Page 33: Laporan Praktikum Resmi Bab 8

33

mid=(low+high)/2; merge_sort(low,mid); merge_sort(mid+1,high); merge(low,mid,high); } Merupakan statement if yang berfungsi untuk memilih /menyeleksi sebuah program.

void merge(int low,int mid,int high) merupakan statement prosedur dengan nama merge.

jkt z; int h,j,b[50],k;

Yang dimaksud dengan jkt z; merupakan statement typedef struct, & int h,j,b[50],k; adalah tipe data h,j,b[50],k berbentuk int (bilangan bulat), b[50] memiliki panjang 50.

h=low; z.i=low; j=mid+1;

Yang dimaksud “h” bernilai sama dengan low, “z.i” bernilai sama dengan low, “j” bernilai mid+1.

while((h<=mid)&&(j<=high)) { if(z.a[h]<=z.a[j]) { b[z.i]=z.a[h]; h++; } else { b[z.i]=z.a[j]; j++; } z.i++; } Merupakan statement while dan if-else. While berfungsi untuk melakukan perulangan suatu program., dan if-else berfungsi untuk memilih /menyeleksi sebuah program. if(h>mid) { for(k=j;k<=high;k++) { b[z.i]=z.a[k]; z.i++; } } else

Page 34: Laporan Praktikum Resmi Bab 8

34

{ for(k=h;k<=mid;k++) { b[z.i]=z.a[k]; z.i++; } } for(k=low;k<=high;k++) z.a[k]=b[k]; } Merupakan statement if –else (berfungsi untuk memilih /menyeleksi sebuah program) yang didalamnya terdapat for (berfungsi untuk menyeleksi /pemilihan& statement perulangan). Int main digunakan untuk memulai /memainkan program.

jkt z; jkt z; merupakan statement struct(tipe data abstrak). Cout berfungsi sebagai input/masukkan dalam program.

Cin berfungsi sebagai output/keluaran dalam program.

for(z.i=1;z.i<=z.num;z.i++) { cin>>a[z.i]; } Merupakan statement for yang berfungsi untuk melakukan perulangan /looping. merge_sort(1,z.num); merupakan statement pemanggilan prosedur merge_sort.

Cout berfungsi sebagai input/masukkan dalam program.

for(z.i=1;z.i<=z.num;z.i++) cout<<a[z.i]<<" "; cout<<endl<<endl<<endl<<endl; Merupakan statement for yang berfungsi untuk melakukan perulangan /looping. Return 0 digunakan untuk menampilkan hasil running di IMD.

Tanda “{“ dan “}” berfungsi untuk membuka dan menutup badan prosedur.

Page 35: Laporan Praktikum Resmi Bab 8

35

BAB III

KESIMPULAN

Shell sort : mengurutkan data dengan cara membandingkan suatu data dengan data lain yang memiliki jarak teretentu, lalu dilakukan pertukaran jika diperlukan.

Merge sort : suatu teknik pengurutan dengan menggabungkan setiap kali dua deretan elemen dan melakukan pengurutan terhadap elemen-elemen tersebut.

Jadi dengan melakukan sorting (shell & merge) seperti pada Program 8.1, Program 8.2, &

Program 8.1, 8.2 (tipe data abstrak) maka dapat memudahkan pengguna untuk mengurutkan

suatu data dengan jarak yang berbeda serta semakin memahami cara memodifikasi suatu

program dengan tipe data abstrak .

Page 36: Laporan Praktikum Resmi Bab 8

36

BAB IV

DAFTAR PUSTAKA

1. Modul praktikum algoritma & struktur data 1 (bab 8 sorting (shell & merge) ).

2. Ardhana. YM Kusuma. 2013. Struktur Data dalam Ilustrasi Eclips Indigo C ++.

Yogyakarta: CAPS (Center of Academic Publishing Service).