Laporan Praktikum Resmi Bab 8
-
Upload
mikha-joshua-steven-adrian -
Category
Documents
-
view
249 -
download
0
Transcript of 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
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.
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++) {
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.
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.
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++;
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; }
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++)
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.
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() {
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.
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.
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++) {
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 :
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; } }
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.
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]<<" ";
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.
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.
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))
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;
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.
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];
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)
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++)
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 :
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); }
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
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)
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++) {
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)
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) {
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
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.
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 .
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).