Program Penukaran Uang

28
LAPORAN PRAKTIKUM STRUKTUR DATA ALGORITMA II “ GREEDY ALGORITHM ” DISUSUN OLEH : BAGAS TRI PAMUNGKAS M0513011 ASISTEN DOSEN : - DIAN SUPRABA (M0512012) - DWI PUTRI PERTIWI (M0511015) - RIZAL KUSUMAJATI N (M0511050) - RIO PAHLEVY RYB (M0511048) JURUSAN INFORMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SEBELAS MARET SURAKARTA Kamis, 24 Oktober 2014

description

Laporan Program Penukaran Uang

Transcript of Program Penukaran Uang

LAPORAN PRAKTIKUMSTRUKTUR DATA ALGORITMA II

“ GREEDY ALGORITHM ”

DISUSUN OLEH :BAGAS TRI PAMUNGKAS

M0513011

ASISTEN DOSEN :- DIAN SUPRABA (M0512012)- DWI PUTRI PERTIWI (M0511015)

- RIZAL KUSUMAJATI N (M0511050)- RIO PAHLEVY RYB (M0511048)

JURUSAN INFORMATIKAFAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS SEBELAS MARETSURAKARTA

Kamis, 24 Oktober 2014

A. PENUKARAN UANG

Program ini digunakan untuk menukarkan suatu nilai uang dengan beberapa uang/koin yang nilainya lebih kecil. Program ini menggunakan algoritma greedy untuk penyelesaiannya. Berikut adalah source code program untuk penukaran uang.

SOURCE CODE

ANALISA

Program akan meminta user memasukkan jumlah uang yang akan ditukar dan jumlah koin yang tersedia. Jumlah uang yang akan ditukar dimasukkan dalam variabel goal. Sedangkan jumlah koin masuk ke variabel jml.

Program meminta user memasukkan nilai-nilai nominal koin melalui looping for. Jumlah yang dimasukkan akan sesuai dengan nilai jml yang diinputkan sebelumnya, karena jml adalah ukuran dari array koin[]. Nilai-nilai nominal koin akan masuk ke array koin[] dengan ukuran jml, yaitu koin[0] sampai koin[jml-1]. Setelah semua diinputkan, array koin[] akan disorting mengunakan algoritma bubble sort dari yang terbesar ke terkecil. Karena pada algoritma greedy diambil koin dengan nilai terbesar terlebih dahulu.

Program mencetak koin yang dibutuhkan untuk menukar nominal uang dengan menggunakan looping for. Pada source code terdapat variabel ulangan untuk menghitung menghitung jumlah koin yang ditukarkan untuk setiap nominal koin. Misalnya untuk menukar uang nominal 45, terdapat koin dengan nominal terbesar yaitu 10 dibutuhkan sebanyak 4 buah. Untuk menentukan sisa setelah ditukar koin sebelumnya menggunakan perhitungan modulus. Misalnya untuk menukar uang 45 dengan koin bernominal 10 masih tersisa 5, maka nilai 5 akan ditukar oleh koin selanjutnya yang bernominal berbeda dan lebih kecil. Sedangkan variabel langkah digunakan untuk menghitung jumlah total koin dari semua nominal yang dibutuhkan untuk pertukaran. Apabila ada kekurangan uang dalam menggunakan algoritma greedy ini, program akan mencetak melalui if(goal>0) System.out.println(“Kurang “ +goal);

HASIL EKSEKUSI

Pada eksekusi ini akan diinputkan uang yang ditukar sejumlah 3800, dengan jumlah jenis koin sebanyak 3. Nilai nominal koin yaitu :

Koin 1 bernilai 200 Koin 2 bernilai 500 Koin 3 bernilai 100

Nilai nominal koin diinputkan melalui looping pada source code baris 20-23 untuk mengisi array koin[]. Sehingga terisi pada array koin, koin[0]=200, koin[1]=500, dan koin[3]=100. Kemudian array koin[] diurutkan dengan menggunakan source code baris 27 – 35 dari nilai yang terbesar ke terkecil. Sehingga didapatkan :

Koin[0] = 500 Koin[1] = 200 Koin[2] = 100

Setelah terurut, nilai-nilai koin akan dicetak pada “Koin yang tersedia = “ . Program akan menghitung koin yang dibutuhkan melalui looping for pada baris 44-49, loopig dilakukan 3 kali karena ukuran array berjumlah 3. Variabel ulangan menujukkan jumlah koin yang dibutuhkan pada array koin[j], pendeklarasian goal digunakan untuk menentukan sisa uangnya, dan variabel langkah untuk menentukan total koinnya.

untuk j=0

ulangan = goal/koin[0] = 3800/500 = 7goal = goal%koin[0] = 300langkah = 0 + 7 = 7

untuk j = 1ulangan = goal/koin[1] = 300/200 = 1goal = goal%koin[1] = 100langkah = 7 + 1 = 8

untuk j = 2ulangan = goal/koin[2] = 100/100 = 1goal = goal % koin[2] = 0langkah = 8 + 1 = 9

Maka dari percobaan di atas dihasilkan keluaran jumlah koin tiap nominal yang dibutuhkan dan total koin. Berikut adalah hasil eksekusinya :

B. PROGRAM PEMILIHAN AKTIVITAS

Program ini digunakan untuk menyeleksi aktivitas yang optimal berdasarkan waktu mulai dan waktu selesai. Program akan memilih aktivitas mana yang akan dikerjakan dari aktivitas yang diinputkan user.

SOURCE CODE

ANALISA

Program akan meminta user untuk memasukkan jumlah user dan masuk ke variabel n bertipe integer. Dideklarasikan array s dan f yang memiliki ukuran n yaitu jumlah aktivitas. Array s adalah waktu start dan aray f adalah waktu finish setiap aktivitas

Kemudian user memasukkan waktu start dan finish setiap aktivitas dengan menggunakan looping for. Input start dan finish dipisahkan oleh spasi.

Program melakukan sorting untuk mengurutkan waktu finish dari yang terkecil ke yang terbesar. Algoritma sorting menggunakan bubble sort

Program menampilkan aktivitas-aktivitas yang sudah disorting menggunakan looping for.

Program mencetak aktivitas yang dilayani. Program mencetak aktivitas yang pertama yaitu di indeks 0 kemudian aktivitas di indeks 1 dan seterusnya. Jika nilai s[i] >= f[i-1] maka program akan mencetak aktivitas tersebut.

HASIL EKSEKUSI

Program memasukkan aktivitas-aktivitas kemudian disorting berdasarkan nilai finish, lalu program mencetak aktivitas optimal yang dilayani.

C. PROGRAM INTEGER KNAPSACK

Program ini adalah implementasi knapsack yang digunakan untuk menghitung solusi optimal berdasarkan weight, profit dan density.

SOURCE CODE

ANALISA

Program mendeklarasikan sebuah array dua dimensi yaitu array[][]. Untuk array[][0] sebagai weight dan array[][1] sebagai profit. Mula-mula program meminta user memasukkan jumlah bilangan, kemudian memasukkan masing-masing weight dan profit. Setelah itu memasukkan jumlah kapasitas maksimum disimpan ke variabel k :

Berikut contoh eksekusi untuk input profit dan weight :

Untuk mencari nilai optimal dari greedy by profit, Program mensorting nilai-nilai yang diinputkan tadi berdasarkan nilai profit. Nilai profit diurutkan dari yang bernilai besar ke rendah, karena pada Knapsack untuk mencari solusi berdasarkan profit dipilih nilai profit terbesar dulu.

Kemudian program akan mencetak weight, profit, density, dan nilai greedy by profit yang telah diurutkan berdasarkan profit. Pada contoh eksekusi, nilai profit yang digunakan adalah 7 dan 4 dengan jumlah weight = 6 + 3 = 9. Karena kapasitas maksimum 10 maka tidak memungkinkan lagi untuk menambah weight lagi. Nilai 1 menunjukkan bahwa weight, profit, dan density pada baris tersebut digunakan, sedangkan 0 menunjukkan tidak digunakan.

Hasil eksekusinya dari greedy by profit. Ditemukan total bobot = 9 total profit =11

Untuk mencari nilai optimal dari greedy by density, maka program melakukan sorting berdasarkan density dari yang terbesar ke yang terkecil. Density adalah hasil bagi dari profit/weight. Pada program ini density dideklarasikan di array[i][2].

Kemudian program akan mencetak weight, profit, density, dan nilai greedy by density yang telah

diurutkan berdasarkan density. Pada contoh eksekusi, nilai density yang digunakan adalah 1.5 , 1.3333 , dan 0.8 dengan jumlah weight = 2+3+5 = 10 dan jumlah profit = 3+4+4 = 11. Karena kapasitas maksimum 10 maka tidak memungkinkan lagi untuk menambah weight lagi.

Berikut adalah hasil eksekusi dari greedy bt density yang menghasilkan :Total bobot = 10Total profit = 11

Untuk mencari nilai optimal dari greedy by weight maka program melakukan sorting berdasarkan nilai weight dari yang terkecil ke terbesar.

Kemudian program akan mencetak weight, profit, density, dan nilai greedy by weight yang telah

diurutkan berdasarkan weight. Pada contoh eksekusi, nilai weight yang digunakan adalah 2 + 3 + 5 = 10 dan jumlah profit = 3+4+4 = 11. Karena kapasitas maksimum 10 maka tidak memungkinkan lagi untuk menambah weight lagi.

Berikut adalah hasil eksekusi dari greedy by weightyang menghasilkan :Total bobot = 10Total profit = 11

Nilai-nilai total bobot dan total profit pada greedy by profit tersimpan di variabel totWP dan totPPNilai-nilai total bobot dan total profit pada greedy by density tersimpan di variabel totWD dan totPD.Nilai-nilai total bobot dan total profit pada greedy by weight tersimpan di variabel totWW dan totPW

Solusi optimal dari knapsack ditentukan dengan acuan total profit terbanyak dan total bobot terkecil. Berikut adalah source code untuk mencari solusi optimal

Solusi optimal ditemukan yaitu profit terbesar = 11 dan bobot =9

D. PROGRAM FRACTIONAL KNAPSACK

Program ini hampir sama dengan knapsack. Pada fractional knapsack, nilai beban tidak ada yang tersisa.

SOURCE CODE

ANALISA

Jalannya program ini sama dengan program integer knapsack sebelumnya. Perbedaan pada saat perhitungan greedy by profit, greedy by density, dan greedy by weight. Karena pada program ini bobot tidak ada yang tersisa. Mula-mula program meminta user menginput jumlah bilangan, kemudian input nilai weight dan profit masing-masing serta jumlah kapasitas maksimum knapsack.

Program mensorting berdasarkan profit lalu melakukan perhitungan dengan source code berikut

Nilai k digunakan untuk menggunakan bobot yang tersisa, berikut adalah hasil eksekusi pada Greedy by Profit

Pada hasil eksekusi di atas dapat dilihat bahwa total bobot adalah 10 dan total bobot 11.8 , apabilai menggunakan knapsack biasa total bobotnya adalah 9 yang diperoleh dari 6 dan 3 serta total profit 11 diperoleh dari 7+4. Total profit diatas dihasilkan dari 7+4+(1/5*4) sehingga diperoleh 11.8

Setelah itu, program mensorting greedy by density lalu melakukan perhitungan dengan source code

Pada hasil eksekusi di atas dapat dilihat bahwa total bobot adalah 10 dan total bobot 12.833333 . Total profit diatas dihasilkan dari 3+4+(5/6*7) sehingga diperoleh 12.8333

Setelah itu, program mensorting greedy by weight lalu melakukan perhitungan dengan source code

Pada hasil eksekusi di atas dapat dilihat bahwa total bobot adalah 10 dan total bobot 11 . Total profit diatas dihasilkan dari 3+4+4 = 11

Setelah menghitung semua tipe greedy, lalu ditemukan solusi optimalnya yaitu bobot 10 dengan profit 12.8333

E. PROGRAM PENJADWALAN

SOURCE CODE

ANALISAMula-mula program meminta user menginput banyak proses yang menjadi nilai dari variabel n bertipe integer. Kemudian memasukkan masing-masing t, nilai t masuk variabel array[i] bertipe folat dengan ukuran n.

Kemudian program melakukan sorting t untuk mengurutkan dari yang terkecil ke yang terbesar.

Program melakukan perhitungan penjadwalan untuk menentukan total aktivitas minimum dengan menggunakan proses looping sebagai berikut

HASIL EKSEKUSI

Berikut adalah contoh input oleh user berupa banyak proses dan nilai t;

Kemudian program mengurutkan nilai t menjadi

Untuk memperoleh aktivitas minimum berikut adalah perhitungannya:- Tot1 = 2 * (4-0) = 8 - Tot2 = 2 * (4-1) = 6- Tot3 = 3 * (4-2) = 6- Tot4 = 4 * (4-3) = 4

Jadi total aktivitas minimum = 8+6+6+4 = 24