Anda di halaman 1dari 11

ALGORITMA & PEMOGRAMAN II SANWANI

STMIK ERESHA 161021450178


02TPLM002

1. (a) Tulis algoritma presedur/fungsi: Bubble Sort,


Selection Sort, Insertion Sort dan Shell Sort.

Algoritma Prosedur/Fungsi

- Prosedur Pengurutan Bubble Sort


procedure BubbleSort1(input/output L: LarikInt, input n: integer)
{ Mengurutkan larik L[1 ..n] sehingga terurut menaik dengan metode apung. }
{ K.Awal : x dan larik L[1..n] sudah terdefinisi nilainya. }
{ K.Akhir : elemen larik L terurut menaik, hingga L[1] ≤ L[2] ≤ … ≤ L[n]. }
DEKLARASl
i : integer { pencatan indeks larik }
k : integer { pencacah, untuk pengapungan pada setiap langkah }
temp : integer { peubah bantu untuk pertukaran }
ALGORITMA
for i  i to n-1 do
for k  n downto i+1 do
if L[k] < L[k-1] then
{pertukarkan L[k] dengan L[k-1] }
temp  L[k]
L[k]  L[k-1]
L[k-1]  temp
endif
endfor
endfor

- Prosedur Pengurutan Selection Sort


procedure SelectionSort(input/output L: LarikInt, input n: integer)
{ Mengurutkan larik L[1 ..n] sehingga terurut menaik dengan metode seleksi-
minimum }
{ K.Awal : x dan larik L[1..n] sudah terdefinisi nilainya. }
{ K.Akhir : elemen larik L terurut menaik, hingga L[1] ≤ L[2] ≤ … ≤ L[n]. }
DEKLARASl
i : integer { pencacah pass }
j : integer { pencacah untuk mencari nilai minimum }
imin : integer { indeks yang berisi nilai minimum sementara }
procedure Tukar (input/output a: integer, input/output b: integer )
{ mempertukarkan nilai a dan b }
ALGORITMA
for i  1 to n-1 do
{cari indeks dari elemen minimum di dalam larik L[1..i] }
imin  i
for j  i+1 to n do
if L[j] < L[imin] then
imin  j
endif
endfor
{ pertukarkan L[min] dengan L[i] }
Tukar(L[imin], L[i]
endfor

- Prosedur Pengurutan insertion Sort


procedure InsertionSort(input/output L: LarikInt, input n: integer)
{ Mengurutkan larik L[1 ..n] sehingga terurut menaik dengan metode pengurutan
sisip }
{ K.Awal : x dan larik L[1..n] sudah terdefinisi nilainya. }
{ K.Akhir : elemen larik L terurut menaik, hingga L[1] ≤ L[2] ≤ … ≤ L[n]. }
DEKLARASl
i : integer { pencacah pass }
j : integer { pencacah untuk penelusuran larik }
y : integer { peubah bantu agar L[k] tidak ditimpa selama pergeseran }
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

ketemu : boolean { untuk menyatakan posisi penyisipan ditemukan }


ALGORITMA
for i  2 to n do { mulai pass sampai pass n }
y  L[i] { cari pos tepat }
j  i – 1
ketemu  false
while ( j ≥ 1) and (not ketemu) do
if y < L[j] then
L[j+1]  L[j] { geser }
j  j-1
else
ketemu  true
endif
endwhile
{ pertukarkan maks dengan L[i] }
L[j+1]  y { sisipkan y pada tempat yang sesuai }
endfor

- Prosedur Pengurutan Shell Sort


procedure InsSort(input/output L: LarikInt, input n, start, step: integer)
{ Mengurutkan elemen larik L[start ..n] sehingga dengan metode pengurutan
sisip yg dimodifikasi untuk Shell Sort}
{ K.Awal : Elemen-elemen larik L[1..n] sudah terdefinisi nilainya. }
{ K.Akhir : Elemen-elemen larik L pada kenaikan sebesar step terurut menaik }
DEKLARASl
i : integer { pencacah step }
j : integer { pencacah untuk penelusuran larik }
y : integer { peubah bantu yang menyimpan nilai L[k] }
ketemu : boolean { untuk menyatakan posisi penyisipan ditemukan }
ALGORITMA
i = start + step;
while i ≤ n do
y  L[i] { sisipkan L[i] kedalam bag. yg sudah terurut }
j  i – step
ketemu  false
while ( j ≥ 1) and (not ketemu) do
if y < L[j] then
L[j+step]  L[j] { geser }
j  j-step
else
ketemu  true
endif
endwhile
{ j < 1 or ketemu }
L[j+step]  y { sisipkan y pada tempat yang sesuai }
i  i + step
endfor

- Prosedur Pengurutan Shell Sort (2)


procedure ShellSort(input/output L: LarikInt, input n: integer, step: integer)
{ Mengurutkan larik L sehingga terurut menaik dengan metode pengurutan Shell}
{ K.Awal : Elemen-elemen larik L[1..n] sudah terdefinisi nilainya. }
{ K.Akhir : Elemen-elemen larik L pada kenaikan sebesar step terurut menaik }
DEKLARASl
step, start : integer
ALGORITMA
step  n
while step > 1 do
step  step div 3 + 1
for start  1 to step do
InsSort(L,n,start,step)
endfor
endwhile
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

(b) Buat program untuk mengurutkan data:


X={3,10,15,2,13,4,9,8,10,17,18,19,65,45,13,54,44,6,11,30}
Menggunakan metode/algoritma diatas.

/* Praktikum Algoritma dan Pemograman 2


------------------------------------------------------
Nama : sanwani
NIM : 161021450178
------------------------------------------------------
Program - Bubble Sort Ascending
*/

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i,j,n;
int Arr[50];
int tmp;
cout << "\n ---------------------------------------------";
cout << "\n | >> Program Pengurutan Data << |";
cout << "\n | >> Secara Ascending << |";
cout << "\n | >> Bubble Sort << |";
cout << "\n ---------------------------------------------\n";
//onlygreatshare.blogspot.com
cout << "\n ==> Inputkan banyak data yg akan diurutkan: ";
cin >> n;
cout << "\n";
for(i=1; i<=n; i++)
{
cout<<"\tInputkan data ke-"<<i<<" = ";
cin>>Arr[i];
}

//Pengurutan secara Ascending (Bubble Sort)


for(i=1; i<=n; i++)
{
for(j=i; j<=n; j++)
{
if(Arr[i] > Arr[j])
{
tmp = Arr[j];
Arr[j] = Arr[i];
Arr[i] = tmp;
}
}
}
cout << "\n ---------------------------------------------\n";
cout << " ## Hasil Pengurutan data Secara Ascending ##\n";
cout << " ---------------------------------------------\n";
cout << "\n";
//onlygreatshare.blogspot.com
for(i=1;i<=n;i++)
{
cout<<"\tElement "<<i<<" = "<<Arr[i]<<endl;
}
cout << "\n Created By sanwani :)";
getch();
}
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

HASIL PROGRAM (BUBBLE SORT)

METODE SELECTION SORT DARI TERBESAR KE TERKECIL

#include<iostream>
#include<conio.h>
using namespace std;
void sanwani(int Aku[], int Kamu, int Kita){
int Sorting;

Sorting = Aku [Kamu];


Aku [Kamu] = Aku [Kita];
Aku [Kita] = Sorting;
} main(){
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

cout<<endl;
cout<<" Nama : sanwani "<<endl;
cout<<" Kelas : 02TPLM002 Reguler B "<<endl;
cout<<" Mata Kuliah : Algoritma & Pemrograman 2"<<endl;
cout<<endl;

cout<<" Sortinglah Data-Data Ini Dari Terbesar Ke Terkecil "<<endl<<endl;


cout<<" [ 3,10,15,2,13,4,9,8,10,17,18,19,65,45,13,54,44,6,11,30 ]
"<<endl<<endl;
cout<<" Hasilnya Adalah : "<<endl<<endl;

int i,n;
int Angka[]={3,10,15,2,13,4,9,8,10,17,18,19,65,45,13,54,44,6,11,30};
const int size = sizeof(Angka)/sizeof (Angka[0]);
for(i = size-1;i >0;i--)
for(n= 0;n<i;n++)

if(Angka[n]<Angka[n+1])
sanwani(Angka,n,n+1);
for(i=0; i<size; i++)
cout<<" "<<Angka[i];
cout<<endl;
getch (); }

HASIL PROGRAMNYA:
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

2. (a) Tulis algoritma rekursif untuk menghitung nilai:


• Faktorial bilangan integer
• Gcd dari dua bilangan integer
• Hanoi Tower
(b) Buat dan uji programnya

(a). Faktorial Bilangan Integer


Fungsi rekursi untuk faktorial
Program :
//menghitung n! Menggunakan definisi rekursi
//pre : n>=0
int factorial (int n){
int ans;
if (n == 0)
ans = 1;
else
ans = n * factorial (n-1); return(ans);
}

PROGRAM REKURSIF FAKTORIAL 01


#include <iostream>

using namespace std;

long int faktorial( long int a);

main(){
long int faktor;
long int n;
cout<<"Masukan Nilai Faktorial: ";
cin>>n;
faktor = faktorial(n);
cout<<n<<"! = "<<faktor<<endl;
return (0);
}

long int faktorial( long int a){


if(a==1 || a==0){
return(1);
}else if (a>1){
return(a*faktorial(a-1));
}else{
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

PROGRAM REKURSIF FAKTORIAL 02


#include <iostream>
using namespace std;

int fakt(int a);


int main()

{int z,x;
cout << "Masukkan angka = "; cin >> z;
cout << "Deretnya = ";
for (x=z+1; x>1; x--)
{cout << x-1 << "x";}
cout << "\nHasil = " << fakt(z)<< endl;
}

int fakt(int a)

if (a<=1)

a=1;

else

a=a*(fakt(a-1));

return (a);

}
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

(b). GCD dari 2 Bilangan Integer


Algoritma :
Deklarasi
a,b,tampung : integer
Deskripsi
While ( v != 0 )
Tampung = a % b ;
a = b ;
b = tampung ;
then
write(a)
endwhile

PROGRAM MENGHITUNG NILAI GCD DENGAN ALGORITMA REKURSIF


//Menghitung Nilai GCD dengan Algoritma Rekursif :

#include <iostream>

using namespace std;


int gcd(int c, int d)
{
if (d==0) return(c);
if (c<d) return(gcd(d,c));
return(gcd(c-d, d));
}

int main(int argc, char** argv) {


int a,b;
cout<<"Mausukkan angka : ";cin>>a;
cout<<"Mausukkan angka lagi : ";cin>>b;
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

cout<<"Hasil GCD = "<<gcd(a,b)<<endl;

return 0;

HASIL OUTPUT PROGRAM :

(b). Hanoi Tower


Algoritmanya:
A ← A
B ← B
C ← C
pindahpiringan(n, A, B, C) //n: banyaknya piringan, A: menara asal, B:
menara
// tujuan, C: menara bantuan
if(n = 1) then // statement akan mengentikan rekursif
A ← B
else
pindahpiringan (n-1, A, C, B) // C menjadi tujuan sementara (transit)
A ← B
pindahpiringan (n-1, C, B, A) //dari C tersebut di teruskan ke B sebagai
tujuan
// posisi n akan mengurang terus sampai n = 1 dimana
// balok dalam A dapat di set ke B
end
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

PROGRAM HANOI TOWER

// MENARA HANOI

#include <iostream>

using namespace std;

void MenaraHanoi(int N, char asal, char bantu, char tujuan);


//Definisi fungsi , tanpa titik koma

int main() //main program mengembalikan nilai int secara default

int piringan; // Deklarasi piringan bertipe integer

cout<< "\nPROGRAM MENARA HANOI\n";// Output pada layar judul program

cout<< "--------------------\n\n";// Output pada layar judul program

cout<< "Banyaknya piringan: ";


// Output pada layar untuk perintah memasukkan banyaknya piringan

cin >> piringan; // Menginputkan data piringan oleh user


cout<< endl; // Menempatkan kursor pada line berikutnya
MenaraHanoi(piringan,'A','B','C'); //pemanggilan fungsi MenaraHanoi
return 0;//memberitahu kepada sistem operasi bahwa program telah berakhir

void MenaraHanoi(int N, char asal, char bantu, char tujuan)


//Definisi fungsi
{
if( N == 1) //jika kondisi piringan hanya ada 1
cout<<"Piringan 1 dari "<<asal<< " ke " << tujuan <<endl;
//menampilkan hasil pemindahan dari asal ke tujuan

else //jika kondisi pertama salah


{
MenaraHanoi(N-1,asal,tujuan, bantu); //pindahkan piringan ke n-1

cout<<"Piringan " << N <<" dari " << asal << " ke " <<
tujuan<<endl;
//menampilkan hasil pemindahan piringan dari asal ke tujuan

MenaraHanoi(N-1, bantu, asal, tujuan);

}
ALGORITMA & PEMOGRAMAN II SANWANI
STMIK ERESHA 161021450178
02TPLM002

Anda mungkin juga menyukai