LAPORAN
AKHIR PRAKTIKUM
Mata
Praktikum : Perancangan
Analisis dan Algoritma
Praktikum
ke- : 1
Tanggal
Praktikum : 6 Oktober 2014
Materi :
Pengenalan PAA
NPM : 56412607
Nama : Rizky
Forino Leonardy
Ketua
Asisten :
Nama
Asisten :
Paraf
Asisten :
Jumlah
Lembar :
LABORATORIUM
INFORMATIKA
UNIVERSITAS
GUNADARMA
2014
LISTING :
#include <stdio.h>
#define rentang 10
void sortir(int[], int);
int main(){
int
koin[rentang], n, i, nilai, tmp[rentang];
printf("===================Penukaran
Koin=====================\n");
printf("Banyaknya
Koin : ");
scanf("%d",&n);
printf("\nMasukkan
Koin - koin : \n");
for
(i=0; i < n; i++){
printf("Koin
ke -%d : ", i+1);
scanf("%d",&koin[i]);
}
sortir(koin,n);
printf("\nKoin
yang tersedia adalah : \n");
for
(i=(n-1);i>=0;i--){
printf("%d
\t", koin[i]);
}
printf("\n");
printf("Masukkan
jumlah yang akan dipecah : ");
scanf("%d",
&nilai);
for(i=0;i<n;i++){
tmp[i] = nilai/koin[i];
nilai = nilai%koin[i];
}
for(i=0;i<n;i++){
printf("Koin
%d sebanyak %d \n", koin[i],tmp[i]);
}
return
0;
}
void sortir(int x[], int m){
int
i,j, tmp;
for(i=0;i<m-i;i++){
for(j=0;j<=(m-2);j++){
if(x[j]
< x[j+1]){
tmp
= x[j];
x[j]
= x[j+1];
x[j+1]
= tmp;
}
}
}
}
LOGIKA PROGRAM
Seperti yang kita ketahui, algoritma adalah urutan
langkah-langkah penyelesaian masalah yang disusun secara logis dan sistematis.
Langkah-langkah dalam algoritma haruslah logis dan dapat ditentukan bernilai
salah atau benar.
Pada pertemuan pertama praktikum TI ini, kita
mempelajari tentang algoritma Greedy, yaitu suatu algoritma yang mengambil
nilai tertinggi dan memsortingnya dari suatu kumpulan nilai tertentu. Misalnya:
Kita akan menukar koin, kita mempunyai 3 koin. Maka akan dilakukan pensortiran
nilai dari pecahan koin yang terbesar dahulu.
#include
<stdio.h>
Sebagai
standard library yang berfungsi untuk I/O package maksudnya digunakan
jika kita ingin pada program kita menggunakan fungsi standard input atau output
bisa dikatakan seperti portable input/output package. Tanpa menggunakan library
ini, kita tidak bisa menggunakan perintah-perintah input/output pada program
kita.
#define rentang 10
Library
diatas berguna untuk menentukan rentang jarak baris output
void sortir(int[],
int);
Pernyataan diatas adalah main procedure (prosedur
utama dalam program ini). Pada program ini, program utama berbentuk prosedur
untuk mengurutkan data yang kita input, disini yang akan diurutkan adalah
variable masukan dari int[] dan int.
int
main() {
Pernyataan di atas digunakan sebagai badan program.
Fungsinya sama seperti public.static.void.main(String args[]) { pada bahasa
pemrograman java.
int koin[rentang], n,
i, nilai, tmp[rentang];
Pernyataan di atas digunakan untuk mendefinisikan variable yang akan
digunakan dalam programnya. Tanda kurung siku [ ] menandakan variable tersebut
bertipe array.
printf("===================Penukaran
Koin=====================\n");
potongan
source code untuk menampilkan kalimat hasil outputnya Dan “\n” untuk memindahkan kursor kebawah.
printf("Banyaknya
Koin : ");
Pernyataan printf di atas digunakan untuk mencetak
tulisan yang ada diantara tanda kutip “ ”.
scanf("%d",&n);
Pernyataan scanf digunakan untuk menyimpan angka yang
kita input ketika program dieksekusi. %d digunakan untuk mengartikan data
inputan akan ditampilkan dalam bentuk decimal, dan &n untuk mengartikan
data inputan akan disimpan sementara pada variable n.
printf("\nMasukkan
Koin - koin : \n");
Sama
dengan Source code yang digunakan sebelumnya
yang gunanya untuk memasukan tulisan diantara tanda kutip “ ”.
\n digunakan untuk member jeda (enter) pada saat program dieksekusi.
for (i=0; i < n;
i++){
Pernyataan
for diatas digunakan sebagai kondisi
perulangan pada program. i = 0, akan
melakukan perulangan sebanyak i yang
kurang dari n dan setiap penjumlahan
i yang ditambah 1 (i++) disetiap
perulangan. Dan code “{“ digunakan
untuk memulai statement tsb.
printf("Koin ke -%d :
", i+1);
scanf("%d",&koin[i]);
}
source
code di atas akan dilaksanakan sebanyak kurang dari n yang dimulai dari 0 dan
menampilkan i dengan format “%d”. Source code di atas digunakan
untuk menginput nilai dalam format “%d” dan
di simpan pada suatu alamat dari variabel koin
dengan index tertentu. Dan simbol “}”digunakan
untuk mengakhiri statement program tsb, yaitu :
sortir(koin,n);
printf("\nKoin yang tersedia
adalah : \n");
for (i=(n-1);i>=0;i--){
printf("%d
\t", koin[i]);
}
sortir(koin,n);
source
code yang digunakan untuk mengurutkan nilai.
printf("\nKoin
yang tersedia adalah : \n");
Source
code yang tidak asing lagi yang gunanya untuk memanggil tulisan dan, digunakan
untuk memberi jeda pada kursor sebanyak 1 baris.
for (i=(n-1);i>=0;i--){
Source
code di atas adalah perulangan dengan nilai i = (n-1) dan melakukan perulangan sampai i lebih besar atau sama dengan 0
dengan pengurangan i sebanyak 1 di setiap pengulangannya. Dan code “{“digunakan untuk memulai
statement tersebut.
printf("%d
\t", koin[i]); }
Source
code yang digunakan untuk meperlihatkan hasil inputan source code yang diatas
dan dengan index sesuai nilai i dan
format yang digunakan adalah “%d”.
Hasil output yang terdiri dari source code:
printf("\n");
memberi
jeda enter pada source code
printf("Masukkan
jumlah yang akan dipecah : ");
scanf("%d",
&nilai);
Pernyataan printf di atas digunakan untuk mencetak
tulisan yang ada diantara tanda kutip, dan yang dibawahnya digunakan untuk memasukan jumlah koin
yang nantinya akan diproses untuk di pecah
for(i=0;i<n;i++){
sama
dengan yang sebelumnya Pernyataan for
diatas digunakan sebagai kondisi perulangan pada program. i = 0, akan melakukan perulangan sebanyak i yang kurang dari n dan
setiap penjumlahan i yang ditambah 1 (i++)
disetiap perulangan. Dan code “{“ digunakan
untuk memulai statement tersebut.
tmp[i] =
nilai/koin[i];
Source
code di atas adalah source code yang digunkan untuk menghasilkan nilai bagi
dari 2 variabel, yaitu variabel nilai dibagi koin dengan hasilnya di simpan pada
variabel tmp pada index tertentu.
nilai =
nilai%koin[i];
Di
atas adalah source code yang digunkan untuk menghasilkan sisa bagi dari nilai%koin.
}
Simbol
di atas digunkan untuk mengakhiri dari statement perulangan.
for(i=0;i<n;i++){
source
code perulangan sebelumnya
printf("Koin
%d sebanyak %d \n", koin[i],tmp[i]);
Source
code di atas digunakan untuk menampilakn kalimat yang ada di dalam kurung dan
varibelnya. Dengan format variabel koin[i]
dan tmp[i] adalah “%d”.
}
Simbol
di atas digunakan untuk mengakhiri dari statement dari perulangan yang ada di
atas.
return 0;
angka 0 ini
akan dikembalikan kepada sistem operasi. Nilai ini digunakan oleh sistem
operasi untuk disimpan di variabel ERRORLEVEL pada MS DOS, dimana 0 artinya
‘sukses’.
}
Symbol
untuk mengakhiri statement.
void sortir(int x[], int m){
int i,j, tmp;
for(i=0;i<m-i;i++){
for(j=0;j<=(m-2);j++){
if(x[j]
< x[j+1]){
tmp
= x[j];
x[j]
= x[+1];
x[j+1]
= tmp;
}
}
}
}
Blok
pernyataan di atas digunakan untuk mengurutkan angka yang telah kita input pada
saat program dieksekusi. Jika kita
menuliskan angka-angka terkecil terlebih dahulu, maka akan diurutkan ke dalam
nilai koin yang terbesar lalu terkecil.
Kesimpulan
dari program ini adalah diaplikasikan-nya dua buah algoritma yaitu algoritma
bubble sort dan algoritma greedy. Algoritma bubble sort digunakan untuk
menyortir sebuah array dengan bantuan satu buah variable temporary yang
digunakan untuk menggantikan array yang lebih besar dengan array yang nilainya
lebih kecil. Sedangkan algoritma greedy diaplikasikan karena untuk memecah uang
tersebut dihitung terlebih dahulu dari pecahan yang paling besar dilanjutkan
dengan variabel yang lebih kecil.
OUTPUT :
CONTOH LAIN :
Bisa
kita lihat output dan contoh lain diatas, kita menginput 3 nilai yang besar
terlebih dahulu lalu ke kekecil. Maka secara otomatis program mensortir nilai
dari kecil ke besar. Dan kita lalu memasukkan nilai koin yang ingin dipecah, yaitu
27. Maka secara otomatis disortir nilai yang lebih besar ke yang kecil yaitu
koin 7 sebanyak 3 = 21 dan koin 5 sebanyak 1 = 5 semua jumlah koin ada 26 jadi
sisa koin kurang 1 sebab inputan koin tidak ada nilai 1 jadi nilai koin maksimal 26. WASSALAMUALAIKUM
Tidak ada komentar:
Posting Komentar