Kamis, 10 Desember 2009

tugas algoritma

#include
#include

//menggunakan ADT
typedef int angka;
typedef char huruf;

typedef struct Date{
angka dd;
angka mm;
angka yyyy;
};

//struct utama
typedef struct Rental{
huruf ID[9];
huruf Nama[35];
Date tglRental;
};

//variabel 'sewa'
struct {
angka komik;
angka bayar;
} sewa;

//fungsi yang mengembalikan nilai angka untuk menghitung bayar sewa
angka baySewa(angka x){
angka hargaKomik=2000;
return hargaKomik*sewa.komik;
}

main(){
Rental penyewa;
printf("Input Data Sewa\n");
printf("ID : ");scanf("%s",&penyewa.ID);
printf("Nama : ");scanf("%s",&penyewa.Nama);
printf("Tanggal Sewa\n");
printf("Hari : ");scanf("%d",&penyewa.tglRental.dd);
printf("Bulan : ");scanf("%d",&penyewa.tglRental.mm);
printf("Tahun : ");scanf("%d",&penyewa.tglRental.yyyy);
printf("Jumlah Komik = ");scanf("%d",&sewa.komik);

printf("\n--Data Rental Komik--\n");
printf("ID : %s\n",penyewa.ID);
printf("Nama : %s\n",penyewa.Nama);
printf("Date : %d - %d - %d\n",penyewa.tglRental.dd,penyewa.tglRental.mm,penyewa.tglRental.yyyy);

//panggil fungsi baySewa, nilai kembaliannya dikirim ke bayar sewa asli
sewa.bayar = baySewa(sewa.komik);

//tampilkan bayar sewa asli
printf("Bayar Sewa = %d\n",sewa.bayar);
getch();
}

Kamis, 12 November 2009

Matrix

Algoritma perkalian matrik:
1.Deklarasikan variabel i,j,k,bar_a,kol_a,kol_b,bar_b,mat_a[][],mat_b[][],mat_c[][]
2.masukkan baris_a, kolom_a, baris_b, kolom_b
3.proses looping
bar_a!=kol_b || kol_a!=bar_b
jika y, kolom A=baris B & Baris A=kolom B!!
jika t, cetak nilai matriks A
4.inisialisasi i=0;i
5.inisialisasi j=0;j
6.masukkan mat_a[i][j]
7.cetak nilai matriks B
8.inisialisasi j=0;j
9.inisialisasi k=0;k
10.masukkan mat_b[j][k]
11.inisialisasi i=0;i
12.inisialisasi k=0;k
13.jumlahkan mat_c[i][k]=0
14.inisialisasi j=0;j
15.jumlahkan mat_c[i][k]=mat_c[i][k]+(mat_a[i][j]*mat_b[j][k])
16.inisialisasi i=0;i
17.inisialisasi k=0;k
18.cetak mat_c[i][k]
19.tanya lagi
20.jawab
21.proses looping
jawab=y
jika y, kembali ke proses no 2
jika t, jawab=

Selasa, 10 November 2009

Matrix

Matrix Chain MultiplicationReviewPerkalian matriks berantai (Matrix Chain Multiplication), sesuai dengannamanya, adalah perkalian dari serangkaian matriks. Operasi perkalianmatriks adalah operasi yang bersifat asosiatif, yaitu urutan operasi yangdilakukandapatdiubah-ubahdenganbebasdantetaptidakakanberpengaruh pada hasil akhir operasi.Jika kita melakukan perkalian antara dua buah matrix, syaratyangharusdipenuhiadalahbanyaknyajumlahkolompadamatrixpertamaharussamadenganjumlahbaris matrixyangkedua. Yangharus dicari jalan keluarnya dalam hal ini adalah jika kita mengalikanmatriks-matriks tersebut sesuai urutannya, proses yang dilakukan seringkali tidak efektif dan memakan waktu lama. Ini dikarenakan oleh banyaknyaoperasi perkalian integer yang dilakukan.Misalnya diberikan 2 buah matriks :A(3x5)B(5x4)Jumlah perkalian (usaha) yang diperlukan untuk mendapatkan hasilperkalian dari matriks tersebut adalah :3x5x4 = 60 perkalian.Ternyatapilihanurutanperkalianmatriksyangberbedaakanmembutuhkan jumlah perkalian (usaha) yang berbeda pula. Sehinggadenganmemilihurutanperkalianmatriksyangtepat,kitabisamenyelesaikan perkalian matriks berantai tersebut dengan lebih cepat danefisien. Karena dengan memilih urutan perkalian yang tepat, kita dapatmereduksi jumlah perkalian yang harus dilakukan untuk mendapatkan solusiakhir dari perkalian matriks berantai tersebut.Dengan menggunakan metode Matrix Chain Multiplication ini,kita dapat menyelesaikan permasalahan Bagaimana kita mendapatkan rantaiperkalian pada beberapa matrix yang akan menghasilkan biaya komputasiyang paling optimum. MCMini dapat dikerjakan dengan 3 cara yaituiterative (bottom up), memorized, dan rekursif (top down)..Table of scalar multiplications.Split indextable generated by applet.Product computed by applet.Ket gambar :Rumus mencari nilai m adalah sebagai berikut :-1. m [i,j] = 0 -Digunakan apabila indeks ke-i=ke-j2. m[i,j]=m[i,k]+m[k+1,j]+pi-1 pk pj -Digunakan apabila indeks ke-i < ke-j.TujuanMatrixChainMultiplication merupakan contoh Algoritma dariDynamic Programing di mana algoritma MCM tersebut bertujuan untukmenghasilkan biaya komputasi yang paling optimum.

Senin, 19 Oktober 2009

Sejarah ALGORITMA

Algortima adalah jantung ilmu computer atau informatika. Banyak cabang dari ilmu komputer yang diacu dalan terminologi algoritma,misalnya algoritma perutean (routing) pesan di dalam jaringan komputer, algoritma berensenham untuk menggambar garis lurus (bidang grafik kumputer), algoritma Knuth-Morris-Pratt untuk mencari suatu pola di dalam teks (bidang information retrievel), dan sebagainya.
Ditinjau dari asal usul kata, kata “algoritma” sendiri mempunyai sejarah yang cukup aneh. Kata ini tidak muncul di dalam kamus Webster sampai akhir tahun 1957. Orang hanya menemukan kata algorism yang berarti proses menghitung dengan angka Arab. Anda dikatakan algorist jika Anda menggunakan angka Arab. Para ahli bahasa berusaha menemukan asal kata algorism ini, namun hasilnya kurang memuaskan. Akhirnya para ahli sejarah matematika menemukan asal mula kata tersebut. Kata algorism berasal dari nama penulis buku arab yang terkenal, yaitu Abu Ja’afarMuhammad Ibnu Musa al-Khuwarizmi (al-Khuwarizmi dibaca orang barat menjadi algorism).Al-Khuwarizmi menulis buku yang berjudul Kital al jabar wal-muqabala, yang artinya “Buku pemugaran dan pengurangan” (The book of restoration and reduction). Dari judul buku ini kita juga memperoleh akar kata “aljabar” (algebra). Perubahan dari kata algorism menjadi algoritm muncul karena kata algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm beubah menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa/lumrah, maka lambat laun kata algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna aslinya. Dalam bahasa Indonesia, kata algorithm diserap menjadi “algoritma”.
Pada tahun 1950, kata algoritma perama kali digunakan pada “algoritma Euclidean” (Euclid’s algorithm). Euclid, seorang matematikawan Yunani (lahir pada tahun 350 M), dalam bukunya yang berjudul Element menuliskan langkah-langkah untuk menemukan pembagi bersama terbesar (common greatest divisor atau gcd), dari dua buah bilangan bulat, m dan n (tapi Euclid tidak menyebut metodenya itu sebagai algoritma, baru abad modernlah ornag-orang menybut metodenya itu sebagai “algoritma Euclidean”), Pembagi terbesar dari dua buah bilangan bulat tak-negatif adalah bilangan bulat positif terbesar yang habis membagi kedua bilangan tersebut.Misalnya, m=80 dan n=12.Semua factor pembagi adalah1, 2, 4, 5, 8, 10, 16, 20, 40, 80Dan semua factor pembagi 12 adalah1, 2, 3, 4, 6, 12Maka gcd(80,12)=4Langkah-langkah mencari gcd(80,12) dengan algoritma Euclidean sebagai berikut :80 dibagi 12 hasilnya = 6, sisa = 8 (atau: 80 = 6.12 + 12 dibagi 8 hasilnya = 1, sisa = 4 (atau: 12 = 1.8 + 4)8 dibagi 4 hasilnya = 2, sisa = 0 (atau: 8 = 4.2 + 0)
Karena pembagian yang terakhir menghasilkan 0, maka sisa pembagian terakhir sebelum 0, yaitu 4, menjadi gcd(80,12). Jadi, gcd(80,12) = gcd(12,8) = gcd(4,0) = 4.
Contoh-contoh algoritma yang sudah dijelaskan di atas memberi dua pesan penting. Pertama, sebuah algoritma harus benar. Kedua, algoritma harus berhenti, dan setelah berhenti,algoritma membri hasil yang benar. Menurut Donald E. Knuth dalam bukunya yang berjudul The art of Computer Programming, sebuah algoritma harus mempunyai lima ciri penting:1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah trbatas.2. Setiap langkah harus didefinisikan dengan tepat dan tidak brarti-dua (ambiguous). Misalnya, pernyataan “bagilah p dengan sejumlah beberapa bilangan bulat positif”,pernyataan ini dapat bermakna ganda. Berapakah yang dimaksud dengan “beberapa”? Algoritma menjadi jelas jika langkah tersebut ditulis “bagilah p dengan 10 buah bilangan bulat positif”.3. Algoritma memiliki nol atau lebih masukan (input). Maukan ialah besaran yang diberikan kepada algoritma untuk diproses. Algoritma Euclidean mempunyai dua buah masukan, m dan n.4. Algortima mempunyai nol atau lebih keluaran (output). Keluaran dapat berupa pesan atau besaran yang memiliki hubungan dengan masukan.5. Algoritma harus sangkil (effective). Setiap langkah harus sederhana shingga dapat dikerjakan dalam sejumlah waktu yang masuk akal.