BISNIS PLAN AS@KOM



v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

st1\:*{behavior:url(#ieooui) }
<!– /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:””; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} h1 {mso-style-next:Normal; margin-top:12.0pt; margin-right:0in; margin-bottom:3.0pt; margin-left:0in; mso-pagination:widow-orphan; page-break-after:avoid; mso-outline-level:1; font-size:16.0pt; font-family:Arial; mso-font-kerning:16.0pt;} p.MsoHeading7, li.MsoHeading7, div.MsoHeading7 {mso-style-next:Normal; margin-top:12.0pt; margin-right:0in; margin-bottom:3.0pt; margin-left:0in; mso-pagination:widow-orphan; mso-outline-level:7; font-size:12.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} p.MsoTitle, li.MsoTitle, div.MsoTitle {margin:0in; margin-bottom:.0001pt; text-align:center; mso-pagination:widow-orphan; font-size:16.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”; font-weight:bold;} p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent {margin-top:0in; margin-right:0in; margin-bottom:0in; margin-left:18.7pt; margin-bottom:.0001pt; text-align:justify; line-height:150%; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} p.MsoBodyText2, li.MsoBodyText2, div.MsoBodyText2 {margin-top:0in; margin-right:0in; margin-bottom:6.0pt; margin-left:0in; line-height:200%; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} p.MsoBodyText3, li.MsoBodyText3, div.MsoBodyText3 {margin-top:0in; margin-right:0in; margin-bottom:6.0pt; margin-left:0in; mso-pagination:widow-orphan; font-size:8.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} p.MsoBodyTextIndent2, li.MsoBodyTextIndent2, div.MsoBodyTextIndent2 {margin-top:0in; margin-right:0in; margin-bottom:6.0pt; margin-left:14.15pt; line-height:200%; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} @page Section1 {size:595.3pt 841.9pt; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:4017326; mso-list-type:hybrid; mso-list-template-ids:-946292220 67698713 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-number-format:alpha-lower; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l1 {mso-list-id:272051894; mso-list-type:hybrid; mso-list-template-ids:1709759620 -620206422 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-text:”3\.%1″; mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.25in;} @list l1:level2 {mso-level-number-format:alpha-lower; mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in;} @list l2 {mso-list-id:413015986; mso-list-type:hybrid; mso-list-template-ids:776226860 67698713 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1 {mso-level-number-format:alpha-lower; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l3 {mso-list-id:833298165; mso-list-type:hybrid; mso-list-template-ids:-1089841282 67698713 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l3:level1 {mso-level-number-format:alpha-lower; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l4 {mso-list-id:1010839396; mso-list-type:hybrid; mso-list-template-ids:1979894972 67698703 -117911656 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l4:level1 {mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l4:level2 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in; mso-ansi-font-size:12.0pt; font-family:Wingdings;} @list l5 {mso-list-id:1068574137; mso-list-type:hybrid; mso-list-template-ids:1826254268 1847989546 67698713 700218090 617660206 67698691 67698693 67698689 67698691 67698693;} @list l5:level1 {mso-level-start-at:0; mso-level-number-format:bullet; mso-level-text:-; mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.25in; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} @list l5:level2 {mso-level-number-format:alpha-lower; mso-level-tab-stop:1.25in; mso-level-number-position:left; margin-left:1.25in; text-indent:-.25in;} @list l5:level3 {mso-level-start-at:3; mso-level-number-format:alpha-upper; mso-level-tab-stop:1.75in; mso-level-number-position:left; margin-left:1.75in; text-indent:-.25in; mso-ansi-font-weight:bold;} @list l5:level4 {mso-level-text:%4; mso-level-tab-stop:2.25in; mso-level-number-position:left; margin-left:2.25in; text-indent:-.25in;} @list l6 {mso-list-id:1193417225; mso-list-type:hybrid; mso-list-template-ids:-1277776460 1764364798 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l6:level1 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; mso-ansi-font-size:12.0pt; font-family:Wingdings;} @list l7 {mso-list-id:1254512160; mso-list-type:hybrid; mso-list-template-ids:-98248908 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l7:level1 {mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l8 {mso-list-id:1379161294; mso-list-type:hybrid; mso-list-template-ids:-661461526 -562015746 1764364798 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l8:level1 {mso-level-number-format:bullet; mso-level-text:-; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} @list l8:level2 {mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in; mso-ansi-font-size:12.0pt; font-family:Wingdings;} @list l9 {mso-list-id:1717006486; mso-list-type:hybrid; mso-list-template-ids:-633942378 67698713 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l9:level1 {mso-level-number-format:alpha-lower; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l10 {mso-list-id:1794010671; mso-list-type:hybrid; mso-list-template-ids:97392332 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l10:level1 {mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l11 {mso-list-id:1943611971; mso-list-type:hybrid; mso-list-template-ids:-926930784 256415674 67698709 67698703 67698703 67698713 67698715 67698703 67698713 67698715;} @list l11:level1 {mso-level-number-format:roman-upper; mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.5in;} @list l11:level2 {mso-level-number-format:alpha-upper; mso-level-tab-stop:1.0in; mso-level-number-position:left; text-indent:-.25in;} @list l11:level3 {mso-level-tab-stop:117.0pt; mso-level-number-position:left; margin-left:117.0pt; text-indent:-.25in;} @list l12 {mso-list-id:2017263620; mso-list-type:hybrid; mso-list-template-ids:58991888 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l12:level1 {mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l13 {mso-list-id:2056931532; mso-list-type:hybrid; mso-list-template-ids:-1297743046 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l13:level1 {mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in;} @list l13:level2 {mso-level-legal-format:yes; mso-level-text:”%1\.%2″; mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.5in;} @list l13:level3 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3″; mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.5in;} @list l13:level4 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3\.%4″; mso-level-tab-stop:.75in; mso-level-number-position:left; margin-left:.75in; text-indent:-.5in;} @list l13:level5 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3\.%4\.%5″; mso-level-tab-stop:1.0in; mso-level-number-position:left; margin-left:1.0in; text-indent:-.75in;} @list l13:level6 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3\.%4\.%5\.%6″; mso-level-tab-stop:1.0in; mso-level-number-position:left; margin-left:1.0in; text-indent:-.75in;} @list l13:level7 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3\.%4\.%5\.%6\.%7″; mso-level-tab-stop:1.25in; mso-level-number-position:left; margin-left:1.25in; text-indent:-1.0in;} @list l13:level8 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8″; mso-level-tab-stop:1.25in; mso-level-number-position:left; margin-left:1.25in; text-indent:-1.0in;} @list l13:level9 {mso-level-legal-format:yes; mso-level-text:”%1\.%2\.%3\.%4\.%5\.%6\.%7\.%8\.%9″; mso-level-tab-stop:1.5in; mso-level-number-position:left; margin-left:1.5in; text-indent:-1.25in;} ol {margin-bottom:0in;} ul {margin-bottom:0in;} –>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:””;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:”Times New Roman”;
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}

BISNIS PLAN

AS@KOM

I. DESKRIPSI AWAL

1. Latar Belakang

Perkembangan teknologi pada saat ini sudah tidak terbendung lagi. Bahkan pada saat sekarang setiap detik manusia tidak akan lepas dengan teknologi. Mulai dari bangun tidur hingga tidur lagi, hidup kita pasti berhubungan dengan teknologi. Dengan perkembangan teknologi, maka memudahkan kita pada segala sesuatu. Bahkan saat ini teknologi sudah merupakan suatu trend kehidupan. Pemakaian teknologi merupakan simbul dari kemodernan seseorang atau bisa menunjukkan status sosial seseorang, Semakin canggih produk yang kita gunakan dengan memanfaakan tehnologi, maka menunjukkan semakin tinggi status sosial kita atau dipandang lebih modern.

Teknologi saat ini yang paling cepat berkembang adalah teknologi telekomunikasi dan teknologi informasi. Perkembangan ini sangat terlihat akselerasinya dalam kehidupan, dan hampir setiap sisi kehidupan kita selalu merasakan manfaat adanya perkembangan teknologi informasi dan telekomunikasi tersebut. Perkembangan tersebut akan menumbuhkan pula bisnis di bidangnya, sebagai contoh adalah internet dan komputer. Setiap perkembangan teknologi akan mendukung munculnya teknologi baru, atau fasilitas baru dalam suatu produk tersebut. Oleh karena itu maka produk-produk teknologi tersebut setiap saat akan naik dan terus meningkat jumlahnya.

Perkembangan teknologi komputer contohnya sangat jelas kita rasakan saat ini. Dalam teknologi prosesor sendiri, setiap tahun terjadi inofasi baru yang lebih baik. Perkembangan prosesor sebagai contoh keluarga Pentium 486, Pentium I, Pentium II, Pentium III, Pentium IV dan sekarang core to duo. Prosesor merupakan otak dari komputer dan pengatur segala proses komputer. Konsumen biasanya menyesuaikan anggaran yang dimiliki untuk dapat memiliki komputer sendiri. Karena teknologi adalah mahal, untuk membeli sebuah unit komputer yang dapat mengikuti perkembangannya memerlukan banyak dana.

Segala aspek kehidupan kini terpengaruh oleh perkembangan teknologi informasi dan komunikasi terutama komputer. Segala macam kegiatan manusia sudah dipermudah dengan adanya komputer. Namun demikian, banyak praktisi dalam dunia kerja yang kesulitan mengikuti perkembangan jaman karena usia yang tidak muda lagi, waktu yang mendesak dan dikejar deadline atas suatu pekerjaan tertentu hingga tidak memadainya skill untuk menyelesaikan pekerjaan tersebut tepat waktu.

Keadaan tersebut mengakibatkan keberadaan jasa rental dan pengetikan komputer tetap eksis walaupun telah banyak pesaing yang muncul di kota salatiga sendiri. Jasa pengetikan menggunakan komputer tetap memiliki tempat tersendiri di masyarakat kini. Namun tidak disangkal, bahwa usaha rental dan pengetikan saat ini tidak dapat bertahan apabila hanya menggantungkan diri pada satu jenis usaha saja. Kenyataannya sekarang ini masyarakat dengan mudah dapat memperoleh satu unit komputer jika hanya digunakan untuk mengetik. Keberadaan komputer di rumah-rumah telah banyak. Namun kebanyakan pemilik komputer kurang memiliki keterampilan yang cukup untuk merawat komputer yang dimiliki. Oleh karena itu, usaha rental dapat dikembangkan dengan sub usaha servis komputer.

Jenis bisnis lain yang cukup berkembang dewasa ini adalah teknologi digital. Maraknya perkembangan handphone, terutama yang dilengkapi fasilitas kamera dan pemutar lagu, merupakan pasar yang potensial untuk dikembangkan lebih lanjut. Peluang usaha cetak foto digital dari handphone menjadi tren usaha yang cukup menjanjikan income yang tinggi. Agar dapat survive, maka bentuk usaha yang didirikan harus memiliki banyak produk jasa.

II. PERMASALAHAN

Kondisi masyarakat yang sebagian besar masih berada di bawah garis kemiskinan diperparah dengan kondisi perekonomian negara yang masih belum stabil. Banyak perusahaan yang bangkrut dan pengangguran bertambah semakin menambah permasalahan yang ada. Lapangan kerja tetap sedangkan pencari kerja bertambah. Oleh sebab itu, jiwa wirausaha harus dikembangkan. Dengan berwirausaha, kita dapat menciptakan lapangan pekerjaan dan membantu pemerintah membangun perekonomian.

Dalam dunia bisnis komputer, rental memang tidak se-menjanjikan seperti lima tahun yang lalu. Saat itu jenis usaha ini masih sedikit dan komputer masih mahal. Keuntungan yang didapat dapat mencapai 3 juta per bulan, hanya dari jasa pengetikan saja. Pada tahun ini, telah banyak muncul jenis usaha rental dan pengetikan komputer khususnya di salatiga. Ditambah lagi, komputer telah mudah diperoleh dengan harga yang murah. Oleh sebab itu, perlu adanya diferensiasi jasa dalam sebuah perusahaan. Sebuah rental dewasa ini juga harus mengembangkan jenis usaha jasa lain selain pengetikan, misalnya: cetak foto, servis komputer dan juga pelatihan singkat.

Permasalahan lain yang ditemui mengenai lisensi software yang harus dipatuhi semua pengusaha komputer. Masyarakat Indonesia telah terbiasa menggunakan Windows sebagai sistem operasi dan Microsoft sebagai aplikasinya yang sama-sama buatan Microsoft Corporation. Kenyataannya, harga software buatan Microsoft ini bagi masyarakat Indonesia masih sangat mahal dan tidak terjangkau. Apabila memakai software bajakan, maka pihak kepolisian dapat sewaktu-waktu melakukan sweeping sehingga pengusaha dapat menanggung kerugian yang tidak kecil. Solusi yang dapat dipergunakan adalah dengan menggunakan software open source seperti Linux yang sekarang sedang marak, dengan resiko masyarakat belum menguasai teknologi linux.

III. MAKSUD DAN TUJUAN

Maksud didirikannya Perusahaan ini adalah sebagai wadah usaha yang berusaha mewujudkan tujuan utama perusahaan. Adapun tujuan utama didirikannya usaha ini adalah untuk memperoleh keuntungan sebesar-besarnya, tanpa keluar dari jalur bisnis yang sesuai dengan aturan yang baik dan benar. Tujuan sosial dari perusahaan ini adalah membantu mengurangi pengangguran. Sedangkan tujuan pendidikan dari perusahaan ini adalah mengenalkan kepada masyarakat mengenai Sistem Operasi Open Source.

Perusahaan ini memenuhi permintaan masyarakat akan jasa seputar pengetikan, servis komputer, dan cetak foto digital serta jenis jasa lain yang sesuai dengan kebutuhan masyarakat mengenai komputer.

IV. Profile Company

As@Kom merupakan nama perusahaan yang dipilih sebagai branding produk jasa perusahaan ini. Nama ini dipilih karena mudah diucapkan dan mudah diingat oleh semua orang baik tua ataupun muda, laki-laki ataupun perempuan. Karakter @ pada kata As@Kom dibaca sebagai huruf a (asakom). Sedangkan Kom berarti mewakili bentuk usahanya yang bergerak di bidang komputer.

Pemilihan nama ini merupakan hasil diskusi keluarga (Bapak Slamet Mat Yasir, Ibu Hardanik, Asmira Ani Kusuma dan Fatkhurohim) pada satu tahun yang lalu, tepatnya tanggal 12 September 2007 (tanggal pembuatan logo). Setelah ditetapkan, perusahaan sementara menjalankan usaha secara sederhana dalam bidang pengetikan, privat, servis komputer panggilan dan jasa penjualan komputer. Saat itu belum ada pembukuan perusahaan sehingga keluar masuk keungan tidak terkontrol. Modal awal perusahaan adalah satu unit komputer dan satu unit printer dan menempati lokasi kos di Salatiga.

Mulai proposal ini ditetapkan dan disetujui oleh pemilik modal, maka secara resmi nama As@kom digunakan sebagai merk perusahaan jasa yang didirikan oleh Fatkhurohim sebagai pengusaha dan Aris Wicaksono sebagai investor. Pengusaha bertanggung jawab langsung kepada investor atas pemakaian modal.

Lokasi perusahaan: Jl. Osamaliki No.9, Salatiga, Jawa Tengah, Indonesia. Menempati sebuah ruko paling utara di pasar Andong Salatiga, depan RSUD Salatiga.

V. Bentuk Kerjasama

Perusahaan ini berdiri sebagai hasil kerjasama antara pengusaha dan investor. Adapun secara global, bentuk kerjasama tersebut adalah sebagai berikut:

1. Investor menanamkan modal kepada perusahaan sebanyak Rp. 15.000.000,- dengan sistem bagi hasil 50:50

2. Penguasaha berkewajiban menjalankan usaha tersebut dengan menggunakan modal dari investor untuk memperoleh keuntungan sebesar-besarnya.

3. Pengusaha bertanggung jawab penuh atas jalannya perusahaan dan melakukan pelaporan secara berkala kepada pemilik modal

4. Segala kebijakan perusahaan yang bersifat umum, dapat diambil oleh pengusaha

5. Segala kebijakan perusahaan yang bersifat khusus dan penting diambil dengan persetujuan pemilik modal.

6. Pengusaha membuat perencanaan anggaran perusahaan tiap bulan untuk dilaporkan kepada investor

Adapun rencana anggaran untuk membangun usaha ini adalah sebagai berikut:

SKENARIO 1 RENCANA ANGGARAN PEMBENTUKAN USAHA

Berikut ini disediakan skenario kedua dari rencana anggaran, perbedaannya hanya pada unit komputer. Pada skenario 1 menggunakan 1 unit server P4 dan 4 unit client P3 650MHz dengan layar CRT (tabung), sedangkan pada skenario2 menggunakan unit server yang sama dan 3 buah client dengan perincian 2 unit client P3 450 MHz dengan layar LCD dan 1 unit P3 650MHz layar CRT. Pertimbangan dari skenario2 adalah penghematan listrik dengan pemakaian layar LCD.

SKENARIO 2 RENCANA ANGGARAN PEMBENTUKAN USAHA

VI. Strategi Pemasaran

Strategi utama adalah membentuk semacam jaring laba-laba. Strategi pemasaran dibagi menjadi dua :

q Pembentukan Jaringan :

- Stakeholder toko komputer yang murah

- Stakeholder toko kertas yang murah

- Stakeholder toko tinta yang murah.

- Konsumen Mahasiswa dan Pelajar: STAIN, Satya WAcana, STIBA, SMU Kristen I, SMK Kristen I, Praktikan Sekolah Kedokteran

- Konsumen Kantor Pemerintah: Kelurahan Salatiga, Kelurahan Noborejo, Kelurahan lain

- Konsumen Umum

q Pembentukan Layanan “Jemput Bola “ :

- Layanan antar hasil ketikan maupun servis panggilan

- Menawarkan kerjasama dengan rental yang tidak bisa melayani servis komputer

- Informasi melalui media brosur/ buletin ke daerah sentra pemakai Jasa Komputer (perkantoran, pusat bisnis, kampus, sekolah, fotokopi)

- Pemanfaatan internet

VII. Analisis Pelayanan Dan Operasional

A. Deskripsi Harga

Penentuan harga produk jasa perusahaan sebagai berikut:

  1. Jasa Rental Komputer

Ditetapkan harga jasa rental komputer per jam = Rp1.500,-

  1. Pengetikan dan Cetak

Pengetikan dan Cetak:

- B. Indonesia, A4 = Rp1.600,-

- B. Indonesia, F4 = Rp1.700,-

- B. Arab, Inggris, Jawa (A4) = Rp1.700,-

- B. Arab, Inggris, Jawa (F4) = Rp1.800,-

  1. Cetak Foto

Kertas F4 = 20 x 30 cm = 600 cm2

Harga baku = Rp10.000/600 cm2 = Rp100 / 6 cm2

Harga dasar = Rp500,- (Cetak foto ukuran 2 x 3)

- 2 x 3 = Rp500,-

- 3 x 4 = Rp600,-

- 4 x 6 = Rp800,-

  1. Translate

- Inggris >< Indonesia = Rp2.600,-

- Arab >< Indonesia = Rp3.500,-

  1. Jasa Servis Komputer

- Servis Komputer = Rp70.000,-

- Servis Panggilan = Rp82.000,-

  1. Cek Komputer

- Cek Bulanan Komputer (panggil) = Rp32.000,-

- Cek kondisi (nonpanggilan) = Rp20.000,-

  1. Instal Program

- Instal Program (panggil) = Rp39.000,-

- Instal Program (nonpanggilan) = Rp24.000,-

- Paket program = Sistem Operasi, Aplikasi Kantor, Audio Video, Olah gambar sederhana

- Penambahan program di luar paket = Rp5.000 tiap program

  1. Jasa Penjualan

- Jasa penjualan komputer (dll) mengambil keuntungan 10% dari harga jual

  1. Pembuatan Skripsi*

- Pembuatan skripsi = Rp860.000,-

Keterangan:

* tidak dicantumkan dalam list harga

* proses person to person

* jumlah halaman standar 70 lembar A4 80 gram

* penambahan halaman harga Rp.4.000/lembar

* judul dari konsumen

* tanggung jawab mulai pembuatan proposal, 5 x revisi bimbingan, 1x revisi setelah ujian skripsi

* produk berupa satu bendel skripsi 70 lembar A4 80 gram tanpa jilid + 2 buah CD + 2 buah casing CD

  1. Pembuatan Makalah**

** Harga per lembar = Rp3.000,-

** Jumlah halaman tidak dibatasi

  1. Scan Foto**

- Scan foto menjadi file tanpa cropping = Rp3.000,-

- Scan foto menjadi file dengan cropping = Rp3.000,- + 250 per gambar

B. Tata Letak As@Kom Center :

Lay out As@Kom Center adalah salah satu output perencanaan fasilitas ruang usaha. Ada dua jenis penataan letak AC, yaitu tata ruang server room As@Kom Center sebagai server kontrol atas workstation dan pusat pelayanan. Demikian juga dengan tata ruang main room yang berhadapan langsung dengan customer .

C. Target Usaha

1. Target Jangka Pendek ( 3 bulan ke depan )

- Berdirinya As@Kom di Salatiga, secara bertahap mulai akhir September 2008.

- Usaha mulai berjalan bulan Oktober 2008

- Menjadi pusat jasa pengetikan, rental, cetak foto dan jasa servis komputer untuk daerah pemasaran seputar lokasi.

- Terbentuknya kekuatan pasar yang stabil, mengikat pelanggan lama dan mencari pelanggan baru.

- Memiliki system informasi online melalui internet, sehingga memudahkan pemasaran.

- Mencapai target pendapatan kotor 1.500.000,- rupiah per bulan

2. Target Jangka Menengah (6 bulan kedepan)

- Menjaga kepuasan pelanggan

- Membentuk jaringan kerja lebih kuat di kantor pemerintah, khususnya servis komputer

- Menambah jenis usaha penjualan minuman ringan

- Mencapai target pendapatan kotor 2.000.000,- rupiah per bulan

3. Target Jangka Panjang :

- Mencapai pendapatan kotor 2.500.000,- per bulan

- Membentuk 3 cabang baru di daerah lain untuk memperluas jaringan usaha

VIII. Analisis Pemasaran

Untuk mencapai target jangka pendek, menengah dan jangka panjang diperlukan langkah awal yang akan menjadi pondasi bagi pencapaian target-target selanjutnya. Bentuk awal usaha ini adalah rental, pengetikan, cetak foto dan servis komputer.

Beberapa hal yang perlu mendapat perencanaan dan analisis sebelum diputuskan untuk mendirikan usaha ini adalah :

1. Analisis Pasar

Dunia pendidikan Indonesia memasukkan kurikulum pendidikan TIK pada SD, SLTP dan SMA/SMK. Diharapkan lulusan dari jenjang pendidikan tersebut mampu menguasai pemakaian komputer. Tuntutan pemerintah tersebut sukar sekali dipenuhi karena masih jarang sekolah yang memiliki laboratorium komputer memadai. Banyak guru yang menugaskan para siswanya untuk mengerjakan tugas di luar sekolah dengan mengetik Hasilnya untuk kemudian dikumpulkan. Apabila tahun 2005, pemakai komputer adalah para mahasiswa, maka tahun 2006, siswa SMA telah diharuskan mampu menggunakan komputer. Hingga tahun 2007-2008 siswa SMP dan SD telah dididik untuk mempelajari komputer. Oleh sebab itu, pangsa pasar dari kalangan pendidikan sangat potensial.

Sejalan dengan hal tersebut, pemerintah juga mensyaraktan agar tenaga guru memiliki ijazah minimal S1 sehingga banyak guru yang mengambil studi lanjut. Tugas-tugas yang diberikan kepada mereka umunya harus diketik menggunakan komputer. Kalangan ini juga merupakan pasar yang potensial.

Bukan rahasia lagi bahwa di kantor pemerintah pun sumber daya manusianya masih minim kualitas. Terutama dalam memanfaatkan komputer. Pada kenyataannya penggunaan komputer di instansi pemerintah sudah merupakan sebuah keharusan. Akibatnya sering terjadi kerusakan komputer di lembaga/instansi tersebut. Hal ini merupakan pasar servis yang cukup potensial untuk dimasuki.

Hal yang menjadi hambatan adalah pesaing. Pada tahun ini, telah banyak berdiri rental di salatiga. Di depan kampus salatiga sendiri tercatat terdapat 3 buah rental. Sedangkan di Satya Wacana juga telah banyak terdapat rental komputer. Di STIBA sendiri terdapat 3 rental komputer. Namun demikian, di sekitar SMA Kristen dan SMP 1, 2, 3 belum ditemukan rental yang cukup dekat.

2. Identifikasi Segmen Customer

Maksud melakukan identifikasi atau segmentasi di sini dimaksudkan agar barang yang dipasarkan dapat memenuhi sasaran pembeli yang tepat sehingga marketing effort dapat lebih difokuskan ke segmen customer tertentu. Mengidentifikasi atau melakukan segmentasi retailer atau customer bisa dilakukan berdasarkan ;

a. Faktor demografi (kelompok umur , gender , klasifikasi profesi dsb.)

b. Faktor geografi (depan kampus, sekolah, perkampungan kos, dekat kantor, dekat rumah sakit, dekat pasar, dsb.)

c. Faktor behaviour (profesi, kebiasaan, kecenderungan, tren, perilaku musiman, dsb.)

Sesuai dengan lingkup usaha jasa dan, customer yang paling relevan di sini adalah mereka yang diklasifikasikan memiliki profesi sebagai pelajar, mahasiswa dan pekerja kantor (demografi).

3. Identifikasi Need Customer

Kemungkinan-kemungkinan customer /User need adalah :

a. Pengetikan makalah dan skripsi dari mahasiswa (bahasa Indonesia, Arab, Inggris)

b. Pengetikan tugas-tugas sekolah dari SMP, SMK, SMA sekitar

c. Jasa transalate dari mahasiswa STIBA dan STAIN

d. Cetak foto dari kamera untuk semua jenis user

e. Jasa Servis panggilan dari pelanggan sebelumnya (kantor Kelurahan dan perorangan)

f. Sedikit kemungkinan layanan penjualan komputer perorangan

g. Pembuatan tugas makalah dan skripsi dari mahasiswa ekstensi STAIN Salatiga

h. Jasa rental komputer dari konsumen umum, SD dan SLTP

i. Jasa training singkat komputer dari konsumen pelajar

j. Jasa cetak dokumen dari pengetikan yang pernah dicetak

4. Strategi Pemasaran

Strategi utama adalah membentuk semacam jaring laba-laba. Strategi pemasaran dibagi menjadi dua :

q Pembentukan Jaringan :

- Stakeholder toko komputer yang murah

- Stakeholder toko kertas yang murah

- Stakeholder toko tinta yang murah.

- Konsumen Mahasiswa dan Pelajar: STAIN, Satya WAcana, STIBA, SMU Kristen I, SMK Kristen I, Praktikan Sekolah Kedokteran

- Konsumen Kantor Pemerintah: Kelurahan Salatiga, Kelurahan Noborejo, Kelurahan lain

- Konsumen Umum

q Pembentukan Layanan “Jemput Bola “ :

- Layanan antar hasil ketikan maupun servis panggilan

- Menawarkan kerjasama dengan rental yang tidak bisa melayani servis komputer

- Informasi melalui media brosur/ buletin ke daerah sentra pemakai Jasa Komputer (perkantoran, pusat bisnis, kampus, sekolah, fotokopi)

- Pemanfaatan internet

IX. Analisis Pelayanan Dan Operasional

1. Jenis Layanan

a. Pengetikan

Pengetikan merupakan jasa pengetikan yang dilakukan dengan bantuan komputer. Yang diketik adalah naskah tulisan tangan atau hasil ketikan terdahulu yang ingin dipindahkan menjadi sebuah file untuk diedit di kemudian hari.

Pelanggan datang ke rental dengan membawa bahan ketikan, kemudian bernegosiasi dengan perusahaan mengenai waktu penyelesaian dan pembayaran jasa.

Perusahaan mengerjakan pekerjaan sesuai dengan kesepakatan waktu dan harga. Pelanggan datang kembali pada waktu yang ditentukan untuk mengambil produk dan melakukan pembayaran.

b. Rental

Pelanggan datang langung ke perusahaan, menggunakan komputer sesuai keperluan dan melakukan pembayaran kepada server setelah selesai sesuai tarif.

c. Cetak Foto

Pelanggan datang ke perusahaan, menyerahkan file foto atau gambar untuk dicetak, server melakukan editing yang diminta bila perlu kemudian melakukan Pencetakan. Pelanggan membayar harga sesuai tarif yang ditentukan.

d. Translate

Pelanggan datang ke perusahaan, menyerahkan file untuk diterjemahkan. Melakukan trnsaksi mengenai harga dan waktu. Perusahaan menerima pekerjaan dan mengerjakan sesuai kesepakatan. Pelanggan kembali pada waktu yang ditentukan dan melakukan pembayaran.

e. Servis

Layanan jasa servis komputer dapat melalui dua tahap. Tahap pertama pelanggan datang ke perusahaan membawa barang servisan. Melakukan transaksi mengenai waktu dan harga. Perusahaan mengerjakan servis sesuai kesepakatan. Pelanggan datang pada waktu yang disepakati dan melakukan pembayaran. Atau tahap kedua adalah pelanggan mengambil servis panggilan.

f. Cek Komputer

Jasa ini merupakan jasa dimana perusahaan melakukan cek bulanan komputer pelanggan atau jasa servis yang tidak diteruskan oleh pelanggan.

g. Instal Program

Instal program merupakan jasa layanan servis ringan berupa servis software untuk komputer yang tekena virus atau kerusakan software tanpa melakukan servis hardware.

h. Jasa Penjualan

Merupakan jasa merakit komputer atau jasa membantu pelanggan membeli komputer di stakeholder milik perusahaan.

i. Pembuatan Skripsi dan makalah

Merupakan jasa pembuatan skripsi dan makalah bagi mahasiswa. Jasa ini merupakan bisnis undercover.

j. Scan Foto

Pelanggan membawa foto atau gambar yang ingin di scan, melakukan transaksi harga, perusahaan melakukan scan, pelanggan membayar sesuai tarif.

2. Inquiry dari Customer :

Kemungkinan Struktur dasar Waiting line layanan pengetikan adalah:

Customer…

Customer5

Customer4

Jenis Layanan

Pengetikan

Servis

Lainnya…

Operator

Teknisi

Lainnya…

Produk1

Produk2

Produk3

Produk Layanan

Customer1

Customer2

Customer3

Dengan asumsi – asumsi initial state berikut ini, maka dapat dianalisis :

Keterangan:

* Perkiraan kapasitas maksimal jasa adalah 1000 unit (lembar) per bulan/2 rim

Kemampuan Operator mengetik = 50 WPM (kata Per Menit) = 10 lembar per jam

Target pengetikan per bulan 1 rim

Target cetak foto per bulan 20 lembar

Target Penjualan komputer 1 unit per bulan

Pembuatan skripsi diperkirakan 1 buah tiap 6 bulan/1 semester (860000/6)

Servis Komputer diperkirakan seminggu satu kali

3. Identifikasi Complain Report & Klasifikasinya :

Identifikasi setiap inquiry customer perlu di record dengan baik perusahaan, dengan tujuan :

a. Selalu memegang teguh etika layanan First In First Served.

b. Dari kategori (Ringan–Sedang–Berat) maka dapat diperkirakan service time yang diperlukan.

c. Dapat direcord rata-rata Actual Service Time berdasarkan tingkat kesulitan masing–masing.

d. Sebagai masukan untuk produktivitas perusahaan (self benchmarking).

e. Sebagai masukan untuk perencanaan Stock of Parts (Fast Moving/ Slow Moving parts).

f. Sebagai data Statistik Internal Perusahaan untuk bahan Internal Improvement.

Reg. No: ………

Tanggal : ………………………Jam : ………….

Nama Customer : ………………………………

Address / Tlp : …………………………………..

…………………………………………………………

Jenis Jasa : ………………………………………..

Keterangan : ……………………………………..

…………………………………………………………

Complain : ………………………………………..

…………………………………………………………

Received by : …………………………………….

 

Served by : tgl / jam :

…………………….. …………………………

Fault Remark

…………………………………………………………

……………………………………………….

naskah ketikan

Customer Label Form

Contoh Customer Label Form

X. Analisis Aspek Organisasi Dan Manajemen

Organisasi adalah wadah serta proses kerjasama sejumlah manusia yang terikat dalam hubungan formal untuk mencapai suatu tujuan yang telah ditentukan. Organisisasi hanya merupakan alat bagi manajemen, sedangkan manajemen merupakan sebuah proses yang khas, yang terdiri dari tindakan-tindakan, perencanaan, pengorganisasian, penggerakan dan pengawasan yang dilakukan untuk menentukan serta mencapai sasaran yang telah ditetapkan melalui pemanfaatan sumber daya manusia serta sumber lainnya.

  1. Struktur Organisasi As@Kom

Untuk memudahkan koordinasi dan kontrol serta membentuk perusahaan yang dinamis dan mampu mengikuti perkembangan teknologi komputer, maka diperlukan sebuah organisasi yang strukturnya tertulis di bawah ini.

Diagram Struktur Organisasi As@Kom

Depart. R&D

Depart. T&M

CITY 1 = Salatiga

DIREKTUR UTAMA

CITY 3 = …….

CITY 2 = ……..

Operator 2

Cust

Cust

Cust

Operator 3

Cust

Cust

Cust

Operator 1

Cust

Cust

Cust

INVESTOR

Diagram Struktur Organisasi As@Kom Keseluruhan

1.1 Job Deskripsi Dari Organisasi Pusat.

q Investor :

- Sebagai penanam modal

- Memperoleh laba perusahaan

q Direktur Utama :

- Mengkoordinasikan jalannya perusahaan

q Departemen R & D :

- Mengadakan rekruitmen dan training untuk pegawai dan teknisi

- Litbang dan penelitian dibidang komputer

- Memantau perkembangan teknologi dan tren komputer

q Departemen Marketing & Trading :

- Pengadaan barang untuk perusahaan

- Studi kelayakan pasar terhadap barang yang akan dipasarkan

- System pemasaran terpusat

q Operator:

- Managemen (administrasi, keuangan, marketing) As@Kom

- Melakukan pekerjaan pengetikan, servis, dan segala kegiatan perusahaan

Catatan:

Sementara waktu, Posisi Direktur Utama, sekaligus mengerjakan fungsi dua Departemen dan operator.

2. Tenaga Kerja

3.1 Kebutuhan Tenaga Kerja

Tenaga kerja yang direncanakan dalam awal pendirian, maka sedikitnya terdapat satu seorang direktur yang merangkap operator sekaligus teknisi. Berarti dalam sebuah rental sedikitnya terdapat seorang tenaga kerja. Namun dalam perkembangannya lagi, bukan tidak mungkin akan dilakukan perekrutan lagi untuk menambah kapasitas pelayanan. Untuk sementara, tenaga kerja telah terpenuhi dengan adanya seorang direktur merangkap operator dan teknisi.

Karyawan yang diperlukan hendaknya memiliki kemampuan jasmani dan kemampuan potensi yang sama, yaitu sehat, tidak cacat jasmani, mudah dilatih, disiplin dan loyalitas tinggi. Dalam tujuan jangka panjang, direncanakan untuk membentuk cabang di daerah lain yaitu sebanyak 3 cabang lagi. Bila hal ini tercapai, maka tenaga kerja yang dibutuhkan adalah: seorang direktur utama, 4 orang operator, 1 orang teknisi merangkap kurir. Kualifikasi aktual dan jabatan karyawan rental ini dapat dilihat pada tabel berikut :

Tabel Jabatan Dan Jumlah Karyawan*

Jabatan

Jumlah (Orang)

Manajer Utama

1

Teknisi

1

Operator

4

Jumlah TK

5

* Untuk 1 unit pusat dan 3 unit cabang

3.2 Strategi Rekruitment

Tenaga Kerja

Tenaga kerja untuk Rental dapat diperoleh melalui seleksi setelah lowongan kerja berikut syarat-syaratnya diumumkan terlebih dahulu di media massa. Penerimaan tenaga kerja dilakukan secara bertahap sesuai dengan kebutuhan dan kegiatan yang dilaksanakan mulai dari pembangunan Rental sampai Rental siap beroperasi. Proses seleksi tenaga kerja tampak pada Diagram Sistem Rekruitmen Tenaga Kerja di bawah ini.

Apabila banyak calon yang tidak memenuhi syarat, kita perlu meninjau kembali persyaratan yang kita inginkan. Calon yang diterima kemudian dilatih dengan intensitas yang sesuai dengan tempat kerja agar pelaksanaan operasi Rental dapat sesuai dengan apa yang kita harapkan.

Direktur

( Fatkhurohim )

Investor

(Aris Wicaksono)

Perkenalan ke Java Programming Sawaluddin Introduction Course


Perkenalan ke Java Programming Sawaluddin Introduction Course Objectives Upon yang melengkapkan jalan, anda akan mengerti –Course Objectives Create, menyusun, dan Jawa yang dikelola memprogram – Primitive data mengetik – Java menguasai mengalir – Methods – Arrays (karena mengajar Jawa di dua semester, ini bisa menjadi akhir) – diorientasikan dengan Benda memprogram – Core Java kelas (berayun, kekecualian, internationalization, multithreading, multi-media, I/O, menciptakan jaringan kerja, Koleksi-Koleksi Jawa Kerangka) Tujuan Jalan, cont. You akan dapat kepada – Develop memprogram – Write program sederhana yang memakai macam data primitif, pernyataan kontrol, metode, dan pajangan-pajangan. – Create dan penggunaan metode – Develop GUI interface dan Java applets – Write menarik bagi memproyeksikan – Establish yayasan kukuh di Jawa konsep memprogram Konsep Programming di Keadaan Besar? What adalah Jawa? Menyusun di Keadaan Besar? What adalah Computers Used For? – Pengolahan Kata (i.e., mengetik beberapa dokumen dan pencetakan mereka) – Business
Yang dilibatkan dengan Komputer? System/Hardware Designers (orang bentuk itu komputer dan produk Manufacturers (orang yang sebetulnya membangun danberhubungan) Software Designers (orang bentuk itu lamaranmengumpulkan komputer) Programmers (orang yang menulisuntuk dipakai dengan komputer) program komputer untuk mencapai menjalankan lamaran, permainan dan bungkus perangkat halus lain). User (orang yang membeli dan memakai perangkat halus) – We sedang bermaksud memainkan bagian Pemrogram di jalan ini, walaupun kami juga akan mendesain program kami (perangkat halus) dan oleh karena itu kami juga akan menjadi Perancang Perangkat Halus. Kalau kami menguji program kami, kami akan berpura-pura bahwa kami adalah Pemakai. Pengujian adalah sebagian penting menyusun untuk menjamin bahwa Pemakai bahagia dengan perangkat halus yang tidak penuh Hama! Apa ialah program? A program secara tradisional diketahui sebagai – urutan perintah kaleng itu

Object Oriented Programming adalah apa? Object Oriented yang memprogram ialah – metode menyusun yang membolehkan seorang pemrogram membangun model masalah “dunia nyata yang” lebih” alami dalam komputer. – berdasarkan ciptaan benda yang sering melambangkan kesepadanan dunia nyata mereka, tetapi tidak selalu. For Example, menganggap skenario pemrograman dan usaha berikut menghasilkan beberapa benda yang mungkin dipakai di benda mengorientasikan program. Juga, mencoba memikirkan pelaksanaan yang mana mungkin diperlukan untuk bergaul dengan benda. Itu ialah, kami memerlukan informasi yang mana untuk tahu tentang benda dan bagaimana kami mendapat informasi? Contoh: Mesin Kasir Bank yang diotomatkan (KASIR OTOMATIS) Persoalan Penting Kalau memperkembangkan Perangkat Halus: There adalah beberapa persoalan penting kalau memperkembangkan perangkat halus komputer macam yang mana pun. Perangkat halus “baik” yang mana pun harus melekat sampai ukuran ini: C orrectness – meyakinkan bahwa

Jawa adalah apa? Characteristics of Java History  JAVA ialah: – A yang memprogram bahasa dari Minggu Mikro- Sistem. – Object-Oriented – Interpreted Java, 20 Mei, Oak  James Gosling dan Minggu Micro- Systems History HotJava – The terlebih dulu dimungkinkan dengan1995, Minggu World J2SE, J2ME, dan J2EE (tidak disebut JDK Evolutions Jawa Web browser di buku, tetapi bisa membicarakan di sini secara opsional) Java ialah diorientasikan Java sederhana Characteristics of Java Java sehat dan Java diterjemahkan  Java disebarkan dengan benda  Java mudah dibawa  Java ialah arsitektur-netral  Java aman kuat Java dinamik Java ialah multithreaded Java’s kinerja Java 2 SDK v 1,2 JDK 1,1 (1996)  JDK 1,02 (1995) JDK Versions Java 2 Java 2 SDK v 1,3 (a.k.a JDK 1,3, 2000) (a.k.a JDK 1,2, 1998) SDK v 1,4 (a.k.a JDK 1,4, 2002)

– J2EE bisa dipergunakan untuk memperkembangkan lamaran server-sampingan seperti Jawa servlets dan Java ServerPages. Java Micro Edition (J2ME). – J2ME bisa dipergunakan untuk memperkembangkan lamaran untuk alat yang bisa berpindah-pindah seperti ponsel. Ini mengalir menggunakan J2SE untuk memperkenalkan Jawa yang memprogram.  Borland JBuilder  Forte lewat matahari MicroSystems Java IDE Tools  IBM Visual Age for Java  WebGain Café Microsoft Visual J++ EtcJCreator, When yang memprogram di Jawa, anda biasanya akan memakai komponen menggolongkan anda kelas dari kelas Jawa perpustakaan berikut: kelas yang dibuat tersedia kepada anda oleh orangmembuat sendiri lain Most pelajaran-pelajaran yang anda buat akan memakai kelas lain dengan menciptakan dan memakai benda yang kepunyaan kelas itu. Using perpustakaan kelas Jawa setiap kali mungkin adalah gagasan baik sejak – kelas dengan cermat ditulis dan efisien.

Publik kelas Selamat Datang {gangguan udara umum kekosongan utama (Tali [] args) {System.out.println (Selamat Datang ke Jawa! On menguasai garis);}} Menciptakan dan menyusun Programs On menguasai garis – Jawa– javac file.java Executing Applications classname Example javac Welcome.java Jawa Selamat Datang Output:…  Comments Menyusun dan mengalirkan Anatomi Program Java Program  Classes  Blocks  Statements  Modifiers  Reserved kata Package The Komentar metode utama di Jawa, komentar didahului olehMethods dua bantingan (//) secara berjejer, atau tertutup di antara/* dan */di sesuatu atau garis lipat ganda. Waktu penyusun melihat//, itu mengabaikan sama sekali teks sesudah//di garis sama. Waktu itu melihat/*, memindai untuk berikutnya */dan mengabaikan teks yang mana pun di antara/* dan */. Package The detik garis di program (bungkus chapter1;) menetapkan nama bungkus, chapter1, untuk Sambutan kelas. Keahlian menyusun sumber

(;).
Blocks
Classes
The class is the essential Java construct. A class is a template or blueprint for objects. To program in Java, you must understand classes and be able to write and use them. The mystery of the class will continue to be unveiled throughout this book. For now, though, understand that a program is defined by using one or more classes.
Methods
What is System.out.println? It is a method: a collection of statements that performs a sequence of operations to display a message on the console. It can be used even without fully understanding the details of how it works. It is used by invoking a statement with a string argument. The string argument is enclosed within parentheses. In this case, the argument is “Welcome to Java!” You can call the same println method with a different argument to print a different message.
main Method
The main method provides the control of program flow. The Java interpreter executes the application by invoking the main method.

The main method looks like this:
public static void main(String[] args) {
// Statements;
}
Displaying Text in a Message Dialog Box
you can use the showMessageDialog method in the JOptionPane class. JOptionPane is one of the many predefined classes in the Java system, which can be reused rather than “reinventing the wheel.”
The showMessageDialog Method
JOptionPane.showMessageDialog(null, “Welcome to Java!”,”Example 1.2″, JOptionPane.INFORMATION_MESSAGE));

The exit Method
Use Exit to terminate the program and stop all threads.

NOTE: When your program starts, a thread is spawned to run the program. When the showMessageDialog is invoked, a separate thread is spawned to run this method. The thread is not terminated even you close the dialog box. To terminate the thread, you have to invoke the exit method.

ntroduce Programming dengan Example Identifiers , Variabel, dan Constants Primitive Data Types byte, pendek, int, panjang, mengapung, dobel, mengarangkan, boolean Expressions Operators, Prioritas, Associativity, Operand Evaluation Order: ++, –, *,/, %, +=, -=, *=,/=, %=, ^, &, |, +, -, mendapat Masukan dari Input Dialog Boxes Case Studies (Computing Mortgage, dan Perkomputeran berganti) Gaya dan Documentation Guidelines Syntax Errors, Runtime Errors, dan Logic Errors

public class Area {
public static void main(String[] args) {
double radius, area ;

// Compute the first area
radius = 1.0;
area = radius*radius*3.14159;
System.out.println(“The area is “ + area + ” for radius “+radius);

// Compute the second area
radius = 2.0;
area = radius*radius*3.14159;
System.out.println(“The area is “ + area + ” for radius “+radius);

}
}

Identifier adalah urutan peran yang terdiri atas surat, angka, menggaris-bawahi (), dan lambang dolar ($). Identifier harus mulai dengan surat, menggaris-bawahi (), atau lambang dolar ($). Tidak bisa mulai dengan angka. Identifier tidak bisa menjadi kata dipesan. (melihat Appendix A, “Java Keywords,” untuk daftar kata dipesan). Identifier tidak bisa benar, palsu, or
null. Identifier bisa panjang yang mana pun.

// Compute the first area
radius = 1.0;
area = radius*radius*3.14159;
System.out.println(“The area is “ + area + ” for radius “+radius);

// Compute the second area
radius = 2.0;
area = radius*radius*3.14159;
System.out.println(“The area is “ + area + ” for radius “+radius);

Declaring Variables

int x; // Declare x to be an
// integer variable;
double radius; // Declare radius to
// be a double variable;
char a; // Declare a to be a
// character variable;
Declaring and Initializing
in One Step

 int x = 1;
 double d = 1.4;
 float f = 1.4;
Is this statement correct?

 int x = 1;
 double d = 1.4;
 float f = 1.4;
Is this statement correct?
Declaring and Initializing
in One Step

SLIDE 2

Introduce Programming denganData primitif mengetik dan Operations Primitive Data Types –Example • Identifiers, Variabel, dan Constants byte, pendek, int, panjang, mengapung, dobel, mengarangkan, boolean Operators, Prioritas, Associativity, Operand EvaluationExpressions Order: ++, –, *,/, %, +=, -=, *=,/=, %=, ^, & Getting, |, +, -, Case Studies (Computing Mortgage, danInput dari Input Dialog Boxes Syntax Style dan Documentation Guidelines Perkomputeran berganti) Errors, Runtime Errors, dan Logic Errors Introducing Programming dengan Contoh Contoh 2,1 memperhitungkan Bidang Circle This program memperhitungkan bidang lingkaran. A identifier adalah urutan peran yang terdiri atas surat,Identifiers angka, menggaris-bawahi (), dan lambang dolar ($). A identifier harus mulai dengan surat, menggaris-bawahi (), atau lambang dolar ($). Tidak bisa mulai dengan angka. A identifier tidak bisa dipesan

Variables //memperhitungkan yang pertama area radius = 1.0; bidang = radius*radius*3.14159; System.out.println (bidang adalah “ + bidang +”untuk radius +radius) ; ” //Menghitung detik area radius = 2.0; bidang = radius*radius*3.14159; System.out.println (bidang adalah “ + bidang +”untuk radius +radius) ; Declaring Variables int x;//Menyatakan x untuk menjadi an //bilangan bulat variable; ganda radius;//Menyatakan radius to //adalah seorang pengganti variable; mengarangkan;//Menyatakan untuk menjadi a //watak variable; Assignment Statements x = 1;//memberi 1 orangnya ke x; radius = 1,0;//memberi 1,0 ke radius; = ‘A';//Assign ‘A’ ke a; ” Menyatakan dan Initializing di Satu Step int x = 1; ganda D = 1.4; mengapung f = 1.4; Is pernyataan ini benar? Constants terakhir datatype CONSTANTNAME = VALUE; Terakhir ganda PI = 3,14159;

Terakhir int SIZE = 3; Data yang Menurut Angka mengetik byte 8 bit pendek 16 bit int 32 bit panjang 64 bit mengapungkan 32 kekang dobel 64 bit Operators +, -, *,/, dan % 5/2 menyerahkan bilangan bulat 2. 5.0/2 menyerahkan nilai ganda 2,5 5 % 2 hasil 1 (sisa pembagian) memperhatikan Perhitungan yang memerlukan nomor titik mengapung ialah approximated karena nomor ini tidak disimpan dengan ketepatan benar-benar. Misalnya, System.out.println (1 – 0,1 – 0,1 – 0,1 – 0,1 – 0,1); mendasar 0,5000000000000001, tak ada 0,5, dan System.out.println (1,0 – 0,9); mendasar 0,09999999999999998, tak ada 0,1. Bilangan bulat disimpan secara persis. Oleh karena itu, perhitungan dengan bilangan bulat menghasilkan hasil bilangan bulat tepat. Number Literals A harfiah adalah nilai terus-menerus yang muncul secara langsung di program. Misalnya, 34, 1.000.000, dan 5,0 ialah literals di pernyataan berikut: Int saya = 34; panjang L = 1000000; ganda D = 5,0; Bilangan Bulat Literals bilangan bulat harfiah

Memegang. Misalnya, pernyataan byte B = 1000 akan menyebabkan kesalahan himpunan, karena 1000 tidak bisa disimpan di variabel byte macam. Bilangan bulat harfiah diasumsikan untuk menjadi int macam, yang nilainya di antara -231 (-2147483648) ke 231–1 (2147483647). Untuk menunjukkan bilangan bulat harfiah macam panjang, melampirkannya dengan surat L atau l. L lebih disukai karena l (lowercase L) dengan mudah bisa dikelirukan dengan (angka sesuatu). Titik mengapung Literals titik Mengapung literals ditulis dengan titik desimal. Dengan kelalaian, titik mengapung harfiah dianggap sebagai nilai macam ganda. Misalnya, 5,0 dianggap sebagai nilai ganda, tak ada nilai pengapung. Anda bisa membuatkan sejumlah pengapung dengan melampirkan surat f atau F, dan menjadikan sejumlah seorang pengganti dengan melampirkan surat D atau D. For Example, anda bisa menggunakan 100.2f atau 100.2F untuk pengapung

Int x = K;//(Wrong) panjang K = x;//(fine,implicit melemparkan) Type byte Pengecoran pendek  int  panjang  mengapung  ganda Casting Macam, cont. Pengecoran tersirat ganda D = 3; (pelebaran macam) Pengecoran gamblang int saya = (int) 3,0; (macam membatasi) Apa salah? Int x = 5/2.0; Data Peran Macam mengarangkan surat = ‘A'; (ASCII) mengarangkan numChar = ‘4’; (ASCII) mengarangkan surat = ‘\u0041′; (Unicode) mengarangkan numChar = ‘\u0034′; (Unicode) Peran istimewa mengarangkan rekening = ‘\t’; Unicode Format Appendix B: ASCII Character Set ASCII Character Set, cont. Melemparkan di antara mengarangkan dan Macam Numerik boolean Macam dan Operators boolean lightsOn = sebenarnya; boolean lightsOn = palsu; boolean B = (1 > 2);  && (dan) (1 < x) & & (x 1) & (x++ x) & & (1 > x++) Bagaimana (1 == x) | (10 > x++)? (1 == x) || (10 > x++)? Prioritas operator Bagaimana Caranya Untuk menilai 3 + 4 * 4 >  var++, var — 5 * (4 + 3) – ++i Operator Precedence ! (macam) Casting +, – (Unary tambah dan minus), ++var, — var +, – (Binary *,/, % (Perkalian, pembagian, dan modulus) (tidak) tambahan dan pengurangan) <, , > = (Perbandingan) ==, !=; (Kesetaraan) & | ^ (Exclusive OR) (Unconditional AND) (Unconditional OR) && (Conditional AND) Short-circuit AND =, +=, -=, *=,/=, %= (Tugas|| (Conditional OR) Short-circuit OR operator)

Operand Evaluation Order The prioritas dan associativity peraturan menetapkan perintah operator, tetapi tidak menetapkan perintah di yang operands seorang operator biner dinilai. Operands dinilai dari diwariskan pada sebelah kanan di Jawa. Yang sebelah kiri operand seorang operator biner dinilai di muka bagian yang sebelah kanan yang mana pun operand dinilai. Operand Evaluation Order, cont. Jika bukan operands mempunyai akibat sampingan yang mengubah nilai variabel, perintah operand evaluasi tidak relevan. Menarik bagi kasus bangun waktu operands mempunyai akibat sampingan. Misalnya, x menjadi 1 di kode berikut, karena dinilai ke 0 terlebih dahulu ++a dinilai ke 1. Int = 0; int x = + (++a); Tetapi x menjadi 2 di kode berikut, karena ++a dinilai ke 1, lalu dinilai ke 1. Int = 0; int x = ++a +

Ganda doubleValue =Double.parseDouble (doubleString); Di mana doubleString adalah sehelai tali numerik seperti “123.45”. Contoh 2,2 memasuki Masukan dari Dialog Boxes Example 2,3 Hipotek Menghitung Contoh 2,4 Perkomputeran berganti Programming Style dan Proper Naming Conventions  Appropriate Comments Documentation Block Styles Appropriate CommentsIndentation dan Jarak melapisi Include ringkasan di awal program untuk menerangkan apa yang dilakukan oleh program, kuncinya tampil, struktur data pendukungnya, dan teknik unik yang mana pun itu menggunakan. Masukkan nama anda, kelas bagian, perintah, tanggal, dan deskripsi ringkas di awal program. Choose nama berarti dan deskriptif.Menyebutkan Conventions Variables dan nama metode: – Use lowercase. Jika nama terdiri atas beberapa kata, merangkaikan semua di sesuatu, menggunakan lowercase untuk kata pertama, dan capitalize surat pertama masing-masing kata berikut di nama. Misalnya, radius variabel dan bidang, dan metode computeArea. Menyebutkan Rapat,

Constants: – Capitalize semua surat di konstan. Misalnya, terus-menerus PI. Proper Indentation dan Spacing Indentation – Indent dua tempat. Spacing – Use tempat kosong garis untuk memisahkan bagian-bagian kode. Rintangi Styles Use akhir–garis gaya untuk penyangga. Runtime Syntax Errors – Detected oleh penyusun Memprogram Errors Logic Errors – ProducesErrors – Causes program untuk memperhentikan Kesalahan Himpunan hasil salah publik kelas ShowSyntaxErrors {gangguan udara umum kekosongan utama (Tali [] args) {saya = 30; System.out.println (i+4);}} Runtime Errors publik kelas ShowRuntimeErrors {gangguan udara umum kekosongan utama (Tali [] args) {int saya = 1/0;}} Kesalahan Logika publik kelas ShowLogicErrors {//Memutuskan jika sejumlah yang di antara 1 dan 100 gangguan udara yang umum secara inklusif kekosongan utama (Tali [] args) {//Cepat pemakai untuk memasuki sejumlah Tali masukan = JOptionPane.showInputDialog (null, “Silahkan masuk bilangan bulat :”, ShowLogicErrors”, JOptionPane.QUESTION MESSAGE); int jumlah = Integer.parseInt (masukan); number 0) && (i = 0);
{
area = radius*radius*PI;
System.out.println(
“The area for the circle of radius ” +
radius + ” is ” + area);
}
This mistake is hard to find, because it is not a compilation error or a runtime error, it is a logic error.
This error often occurs when you use the next-line block style.
The if…else Statement
if (booleanExpression) {
statement(s)-for-the-true-case;
}
else {
statement(s)-for-the-false-case;
}

if…else Example
if (radius >= 0) {
area = radius*radius*PI;

System.out.println(“The area for the “
+ “circle of radius ” + radius +
” is ” + area);
}
else {
System.out.println(“Negative input”);
}
Multiple Alternative if Statements
if (score >= 90)
grade = ‘A’;
else
if (score >= 80)
grade = ‘B’;
else
if (score >= 70)
grade = ‘C’;
else
if (score >= 60)
grade = ‘D’;
else
grade = ‘F’;
Note
The else clause matches the most recent if clause in the same block. For example, the following statement
int i = 1; int j = 2; int k = 3;
if (i > j)
if (i > k)
System.out.println(“A”);
else
System.out.println(“B”);
is equivalent to
int i = 1; int j = 2; int k = 3;
if (i > j)
if (i > k)
System.out.println(“A”);
else
System.out.println(“B”);
Note, cont.
Nothing is printed from the preceding statement. To force the else clause to match the first if clause, you must add a pair of braces:
int i = 1;
int j = 2;
int k = 3;
if (i > j) {
if (i > k)
System.out.println(“A”);
}
else
System.out.println(“B”);
This statement prints B.
Nested if Statements
Example 3.1 Using Nested if Statements
This program reads in number of years and loan amount and computes the monthly payment and total payment. The interest rate is determined by number of years.

switch Statements
switch (year) {
case 7: annualInterestRate = 7.25;
break;
case 15: annualInterestRate = 8.50;
break;
case 30: annualInterestRate = 9.0;
break;
default: System.out.println(
“Wrong number of years, enter 7, 15, or 30″);
}

Beralih Peraturan Pernyataan perubahan Grafik Aliran Pernyataan perubahan-ucapan harus menyerahkan nilai mengarangkan, byte, pendek, atau int macam dan selalu harus dilingkungi di tanda kurung. Value1,…, dan valueN harus mempunyai macam data sama sebagai nilai perubahan-ucapan. Pernyataan menghasilkan di pernyataan kasus dilaksanakan waktu nilai di pertandingan pernyataan kasus nilai perubahan-ucapan. (pernyataan kasus dilaksanakan di urutan bertahap. ) Keyword pecah suka rela, tetapi sebaiknya dipergunakan di akhir masing-masing kasus untuk mengakhiri sisa pernyataan perubahan. Jika pernyataan patah tulang tidak hadir, pernyataan kasus berikutnya akan dilaksanakan. Beralih Peraturan Pernyataan, cont. Kasus kelalaian, yang suka rela, bisa dipergunakan untuk melakukan tindakan waktu tak satu kasus yang ditetapkan pun benar. Perintah kasus (memasukkan kasus kelalaian) tidak berarti.
is equivalent to

y = (x > 0) ? 1 : -1;

Ternary operator
Binary operator
Unary operator
Conditional Operator
if (num % 2 == 0)
System.out.println(num + “is even”);
else
System.out.println(num + “is odd”);

System.out.println(
(num % 2 == 0)? num + “is even” :
num + “is odd”);

Conditional Operator, cont.
(booleanExp) ? exp1 : exp2

Repetitions
while Loop Flow Chart
while Loop Flow Chart, cont.
Example 3.2: Using while Loops

TestWhile.java
Caution
Don’t use floating-point values for equality checking in a loop control. Since floating-point values are approximations, using them could result in imprecise counter values and inaccurate results. This example uses int value for data. If a floating-point type value is used for data, (data != 0) may be true even though data is 0.

// data should be zero
double data = Math.pow(Math.sqrt(2), 2) – 2;

if (data == 0)
System.out.println(“data is zero”);
else
System.out.println(“data is not zero”);
do-while Loop
for Loops
for (initial-action; loop-continuation-condition; action-after-each-iteration) {
//loop body;
}

int i = 0;
while (i < 100) {
System.out.println(“Welcome to Java! ” + i);
i++;
}
Example:
int i;
for (i = 0; i < 100; i++) {
System.out.println(“Welcome to Java! ” + i);
}
for Loop Flow Chart
for Loop Example
for Loop Examples
Which Loop to Use?
Caution
Adding a semicolon at the end of the for clause before the loop body is a common mistake, as shown below:

for (int i=0; i<10; i++);
{
System.out.println(“i is ” + i);
}
Caution, cont.
Similarly, the following loop is also wrong:
int i=0;
while (i<10);
{
System.out.println(“i is ” + i);
i++;
}
In the case of the do loop, the following semicolon is needed to end the loop.
int i=0;
do {
System.out.println(“i is ” + i);
i++;
} while (i num2)
return num1;
else
return num2;
}
Calling Methods
public class MaxBilangan {
pubic static int max(int num1, int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
public static void main(String args[]) {
int i = 5, j = 2 ;
int k =max(i,j) ;

System.out.println(“The maximum “ + i + “ and “ + j
“ is “ + k ) ;
}
}

Calling Methods, cont.
Calling Methods, cont.
CAUTION
A return statement is required for a nonvoid method. The following method is logically correct, but it has a compilation error, because the Java compiler thinks it possible that this method does not return any value.
public static int xMethod(int n) {
if (n > 0) return 1;
else if (n == 0) return 0;
else if (n < 0) return –1;
}
To fix this problem, delete if (n<0) in the code.
Passing Parameters
public static void nPrintln(String message, int n) {
for (int i = 0; i num2)
return num1;
else
return num2;
}

Ambiguous Invocation
Sometimes there may be two or more possible matches for an invocation of a method, but the compiler cannot determine the most specific match. This is referred to as ambiguous invocation. Ambiguous invocation is a compilation error.
Ambiguous Invocation
public class AmbiguousOverloading {
public static void main(String[] args) {
System.out.println(max(1, 2));
}
public static double max(int num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
public static double max(double num1, int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
}

min, max, abs, and random
 max(a, b)and min(a, b)
Returns the maximum or minimum of two parameters.
 abs(a)
Returns the absolute value of the parameter.
 random()
Returns a random double value
in the range [0.0, 1.0).
Example 4.4 Computing Mean and Standard Deviation
Generate 10 random numbers and compute the mean and standard deviation
Example 4.5 Obtaining Random Characters
Write the methods for generating random characters. The program uses these methods to generate 175 random characters between ‘!’ and ‘~’ and displays 25 characters per line. To find out the characters between ‘!’ and ‘~’, see Appendix B, “The ASCII Character Set.”
Example 4.5 Obtaining Random Characters, cont.
Case Studies
Example 4.6 Displaying Calendars

The program reads in the month and year and displays the calendar for a given month of the year.
Design Diagram

Recursion (Optional)
Example 4.7 Computing Factorial

factorial(0) = 1;
factorial(n) = n*factorial(n-1);

Example 4.7 Computing Factorial, cont.
Example 4.7 Computing Factorial, cont.
Fibonacci Numbers
Example 4.8 Computing Finonacci Numbers
0 1 1 2 3 5 8 13 21 34 55 89…
f0 f1
fib(2) = fib(0) + fib(1);
Fibonacci Numbers, cont
Fibonnaci Numbers, cont.
Towers of Hanoi
Example 4.9 Solving the Towers of Hanoi Problem

Solve the towers of Hanoi problem.
Towers of Hanoi, cont.

CAUTION Using notasi steno, anda mempunyai untuk menyatakan, menciptakan, dan initialize aneka-ragam semua di satu pernyataan. Membelahnya akan menyebabkan kesalahan sintaksis. Misalnya, pengikut-pengikut ialah wrong: ganda [] myList; myList = {1,9, 2,9, 3,4, 3,5}; Example 5.1 Testing Arrays Objective: program menerima 6 nomor dari papan tuts, menemukan jumlah dan hitungan paling besar kejadian jumlah yang paling besar masuk dari papan tuts. Bagaimana anda memasuki 3, 5, 2, 5, 5, dan 5, jumlah yang paling besar adalah 5 dan hitungan kejadiannya adalah 4. Example 5.2 Assigning Grades Objective: membaca angka mahasiswa (int) dari papan tuts, mendapat angka terbaik, dan lalu memberi angka mendasarkan di mengikuti scheme:

– Grade jika kodi ialah > = best–10; – Grade ialah B jika kodi ialah > = best–20; – Grade ialah C jika kodi ialah > = best–30; – Grade ialah D jika kodi ialah > = best–40; – Grade ialah F lain. Memberikan Pajangan-Pajangan kepada Methods Java penggunaan lewat nilai untuk memberikan parameter sampai metode. Ada perbedaan penting di antara memberikan nilai variabel macam data primitif dan memberikan pajangan-pajangan. For parameter nilai macam primitif, nilai sebenarnya diberikan. Mengubah nilai parameter lokal di dalam metode tidak mempengaruhi nilai variabel di luar metode. For parameter macam pajangan, nilai parameter berisi referensi sampai pajangan; surat keterangan ini diberikan sampai metode. Ganti yang mana pun sampai aneka-ragam yang terjadi di dalam badan metode akan mempengaruhi aneka-ragam asli bahwa

Example 5.5
Counting Occurrence of Each Letter
 Generate 100 lowercase letters randomly and assign to an array of characters.
 Count the occurrence of each letter in the array.
 Find the mean and standard deviation of the counts.
Example 5.6
Copying Arrays
In this example, you will see that a simple assignment cannot copy arrays in the following program. The program simply creates two arrays and attempts to copy one to the other, using an assignment statement.
Copying Arrays
Copying Arrays
Using a loop:
int[] sourceArray = {2, 3, 1, 5, 10};
int[] targetArray = new int[sourceArray.length];

for (int i = 0; i < sourceArrays.length; i++)
targetArray[i] = sourceArray[i];

The arraycopy Utility
arraycopy(sourceArray, src_pos, targetArray, tar_pos, length);

Example:
System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);
Multidimensional Arrays
Declaring Variables of Multidimensional Arrays and Creating Multidimensional Arrays

int[][] matrix = new int[10][10];
or
int matrix[][] = new int[10][10];
matrix[0][0] = 3;

for (int i=0; i<matrix.length; i++)
for (int j=0; j 2, 6, 5, 4, 8, 1, 9 (size = 7)
2, 6, 5, 4, 8, 1 => 2, 6, 5, 4, 1, 8 (size = 6)
2, 6, 5, 4, 1 => 2, 1, 5, 4, 6 (size = 5)
2, 1, 5, 4 => 2, 1, 4, 5
2, 1, 4 => 2, 1, 4,
2, 1 => 1, 2
Sort it to produce 1, 2, 4, 5, 6, 8, 9
Exercise 5.5: Bubble Sort
int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted

Pass 1: 2, 5, 4, 8, 1, 6, 9
Pass 2: 2, 4, 5, 1, 6, 8, 9
Pass 3: 2, 4, 1, 5, 6, 8, 9
Pass 4: 2, 1, 4, 5, 6, 8, 9
Pass 5: 1, 2, 4, 5, 6, 8, 9
Pass 6: 1, 2, 4, 5, 6, 8, 9
carakan tanpa

bahasa java sawaluddin tutor



st1\:*{behavior:url(#ieooui) }
<!– /* Font Definitions */ @font-face {font-family:Palatino; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-alt:”Book Antiqua”; mso-font-charset:0; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} @font-face {font-family:”Monotype Sorts”; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:0 0 0 0 0 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:””; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Times New Roman”; mso-fareast-font-family:”Times New Roman”;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:-2; mso-list-type:simple; mso-list-template-ids:112251004;} @list l0:level1 {mso-level-start-at:0; mso-level-number-format:bullet; mso-level-text:*; mso-level-tab-stop:none; mso-level-number-position:left; margin-left:0in; text-indent:0in;} @list l0:level1 lfo1 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:10.0pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo2 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:12.0pt; font-family:”Times New Roman”;} @list l0:level1 lfo3 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:11.5pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo4 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:14.0pt; font-family:”Times New Roman”;} @list l0:level1 lfo5 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:12.0pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo6 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:14.0pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo7 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:10.5pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo8 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:9.0pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo9 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:7.5pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo10 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:12.5pt; font-family:Palatino;} @list l0:level1 lfo11 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:13.0pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo12 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:12.0pt; font-family:”Courier New”;} @list l0:level1 lfo13 {mso-level-numbering:continue; mso-level-text:•; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:8.5pt; font-family:”Times New Roman”;} @list l0:level1 lfo14 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:11.0pt; font-family:”Times New Roman”;} @list l0:level1 lfo15 {mso-level-numbering:continue; mso-level-text:; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:13.5pt; font-family:”Monotype Sorts”;} @list l0:level1 lfo16 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:10.0pt; font-family:”Times New Roman”;} @list l0:level1 lfo17 {mso-level-numbering:continue; mso-level-text:–; mso-level-tab-stop:none; mso-level-number-position:left; mso-level-legacy:yes; mso-level-legacy-indent:0in; mso-level-legacy-space:0in; margin-left:0in; text-indent:0in; mso-ansi-font-size:14.0pt; font-family:”Courier New”;} ol {margin-bottom:0in;} ul {margin-bottom:0in;} –>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:””;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:”Times New Roman”;
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}

Introduction to
Java Programming

Sawaluddin

Introduction

Course Objectives

Course Objectives

FUpon completing the course, you will understand

Create, compile, and run Java programs

Primitive data types

Java control flow

Methods

Arrays (for teaching Java in two semesters, this could be the end)

Object-oriented programming

Core Java classes (Swing, exception, internationalization, multithreading, multimedia, I/O, networking, Java Collections Framework)

Course Objectives, cont.

FYou will be able to

Develop programs

Write simple programs using primitive data types, control statements, methods, and arrays.

Create and use methods

Develop a GUI interface and Java applets

Write interesting projects

Establish a firm foundation on Java concepts

Programming Concepts

FProgramming in the Big Picture?

FWhat is JAVA?

Programming in the Big Picture?

F What are Computers Used For?

- Word Processing   (i.e., typing up some documents and printing them)

Business Applications   (i.e., accounting, spreadsheets, presentations,…)

Engineering Applications   (i.e., scientific analysis, simulations)

Database Management   (i.e., police records, stock market, …)

Entertainment   (i.e., games, multimedia applications, …)

Manufacturing   (i.e., CAD/CAM, robotics, assembly, …)

Many more things

Who is Involved With Computers ?

FSystem/Hardware Designers (The people that design computers and related products)

FManufacturers (The people that actually build and assemble computers)

FSoftware Designers (The people that design applications to be used with the computers)

FProgrammers (The people that write computer programs to achieve working applications, games and other software packages).

FUser (The people that buy and use the software)

We are going to play the part of the Programmer in this course, although we will also be designing our programs (software) and hence we will also be the Software Designer. When we test our programs, we’ll pretend that we are the User.  Testing is an important part of programming to ensure that the User is happy with software that is not full of Bugs!

What is program?

FA program is traditionally known as

a sequence of instructions that can be executed by a computer to solve some problem.

Here, we will learn to write our own programs to solve some very simple problems.
There are different styles (types) of programming:

procedural (structured)

logical (specifying constraints and conditions)

object-oriented

What is Object Oriented Programming ?

FObject Oriented programming is

a method of programming that allows a programmer to build a more natural model of a “real world” problem within the computer.

based on the creation of objects which often represent their real world equivalent, but not always.

FFor example, consider the following programming scenario and try to come up with some objects that might be used in an object oriented program.  Also, try to think of what operations might be needed to interact with the objects.  That is, what information do we need to know about the objects and how do we get the information ?

Example: An Automated Bank Teller Machine (ATM)

Important Issues When Developing Software:

FThere are several important issues when developing any type of computer software.  Any “good” software MUST adhere to these standards:

FC orrectness – Make sure that your program does what it is supposed to do.

FR obustness – Make sure that the program does not crash.  Exhaustive testing helps prevent this.

FI nterface Usability – Make sure that the interface is easy to use and intuitive.

FS implicity – Keep the code as simple as possible, while still meeting requirements.  Modifications are often required and hence code maintenance is a big issue.

FP resentation and Documentation – Make sure that software is thoroughly documented for maintenance purposes.  (Don’t forget about the TA’s that need to mark your assignments)

FE fficiency – Make sure that the software is time and space efficient.

What Is Java?

FHistory

FCharacteristics of Java

FJAVA is:

An programming language from SUN Microsystems.

Object-Oriented

Interpreted

History

FJames Gosling and Sun Microsystems

FOak

FJava, May 20, 1995, Sun World

FHotJava

The first Java-enabled Web browser

FJDK Evolutions

FJ2SE, J2ME, and J2EE (not mentioned in the book, but could discuss here optionally)

Characteristics of Java

FJava is simple

FJava is object-oriented

FJava is distributed

FJava is interpreted

FJava is robust

FJava is secure

FJava is architecture-neutral

FJava is portable

FJava’s performance

FJava is multithreaded

FJava is dynamic

JDK Versions

FJDK 1.02 (1995)

FJDK 1.1 (1996)

FJava 2 SDK v 1.2 (a.k.a JDK 1.2, 1998)

FJava 2 SDK v 1.3 (a.k.a JDK 1.3, 2000)

FJava 2 SDK v 1.4 (a.k.a JDK 1.4, 2002)

JDK Editions

FJava Standard Edition (J2SE)

J2SE can be used to develop client-side standalone applications or applets.

FJava Enterprise Edition (J2EE)

J2EE can be used to develop server-side applications such as Java servlets and Java ServerPages.

FJava Micro Edition (J2ME).

J2ME can be used to develop applications for mobile devices such as cell phones.

This courses uses J2SE to introduce Java programming.

Java IDE Tools

FForte by Sun MicroSystems

FBorland JBuilder

FMicrosoft Visual J++

FWebGain Café

FIBM Visual Age for Java

FJCreator,

FEtc

FWhen programming in JAVA, you will usually use the following building blocks:

Fclasses from the JAVA class libraries

Fclasses you create yourself

Fclasses that other people make available to you

FMost of the classes that you make will be using other classes by creating and using objects belonging to that class.

FUsing the JAVA class libraries whenever possible is a good idea since

the classes are carefully written and are efficient.

it would be silly to write code that is already available to you.

Getting Started with Java Programming

FA Simple Java Application

FCompiling Programs

FExecuting Applications

A Simple Application

Example 1.1

//This application program prints Welcome

//to Java!

public class Welcome {

public static void main(String[] args) {

System.out.println(“Welcome to Java!”);

}

}

Creating and Compiling Programs

FOn command line

javac file.java

Executing Applications

FOn command line

java classname

Example

javac Welcome.java

java Welcome

output:…

Compiling and Running a Program

Anatomy of a Java Program

FComments

FPackage

FReserved words

FModifiers

FStatements

FBlocks

FClasses

FMethods

FThe main method

Comments

In Java, comments are preceded by two slashes (//) in a line, or enclosed between /* and */ in one or multiple lines. When the compiler sees //, it ignores all text after // in the same line. When it sees /*, it scans for the next */ and ignores any text between /* and */.

Package

The second line in the program (package chapter1;) specifies a package name, chapter1, for the class Welcome. Forte compiles the source code in Welcome.java, generates Welcome.class, and stores Welcome.class in the chapter1 folder.

Reserved Words

Reserved words or keywords are words that have a specific meaning to the compiler and cannot be used for other purposes in the program. For example, when the compiler sees the word class, it understands that the word after class is the name for the class. Other reserved words in Example 1.1 are public, static, and void. Their use will be introduced later in the courses.

Modifiers

Java uses certain reserved words called modifiers that specify the properties of the data, methods, and classes and how they can be used. Examples of modifiers are public and static. Other modifiers are private, final, abstract, and protected. A public datum, method, or class can be accessed by other programs. A private datum or method cannot be accessed by other programs. Modifiers are discussed in Chapter 6, “Objects and Classes.”

Statements

A statement represents an action or a sequence of actions. The statement System.out.println(“Welcome to Java!”) in the program in Example 1.1 is a statement to display the greeting “Welcome to Java!” Every statement in Java ends with a semicolon (;).

Blocks

Classes

The class is the essential Java construct. A class is a template or blueprint for objects. To program in Java, you must understand classes and be able to write and use them. The mystery of the class will continue to be unveiled throughout this book. For now, though, understand that a program is defined by using one or more classes.

Methods

What is System.out.println? It is a method: a collection of statements that performs a sequence of operations to display a message on the console. It can be used even without fully understanding the details of how it works. It is used by invoking a statement with a string argument. The string argument is enclosed within parentheses. In this case, the argument is “Welcome to Java!” You can call the same println method with a different argument to print a different message.

main Method

The main method provides the control of program flow. The Java interpreter executes the application by invoking the main method.

The main method looks like this:

public static void main(String[] args) {

// Statements;

}

Displaying Text in a Message Dialog Box

you can use the showMessageDialog method in the JOptionPane class. JOptionPane is one of the many predefined classes in the Java system, which can be reused rather than “reinventing the wheel.”

The showMessageDialog Method

JOptionPane.showMessageDialog(null, “Welcome to Java!”,”Example 1.2″, JOptionPane.INFORMATION_MESSAGE));

The exit Method

Use Exit to terminate the program and stop all threads.

NOTE: When your program starts, a thread is spawned to run the program. When the showMessageDialog is invoked, a separate thread is spawned to run this method. The thread is not terminated even you close the dialog box. To terminate the thread, you have to invoke the exit method.

SLIDE 2

Primitive Data Types and Operations

FIntroduce Programming with an Example

Identifiers, Variables, and Constants

FPrimitive Data Types

byte, short, int, long, float, double, char, boolean

FExpressions

FOperators, Precedence, Associativity, Operand Evaluation Order: ++, –, *, /, %, +=, -=, *=, /=, %=, ^, &, |, +, -,

FGetting Input from Input Dialog Boxes

FCase Studies (Computing Mortgage, and Computing Changes)

FStyle and Documentation Guidelines

FSyntax Errors, Runtime Errors, and Logic Errors

Introducing Programming with an Example

Example 2.1 Computing the Area of a Circle

This program computes the area of the circle.

Identifiers

FAn identifier is a sequence of characters that consist of letters, digits, underscores (_), and dollar signs ($).

FAn identifier must start with a letter, an underscore (_), or a dollar sign ($). It cannot start with a digit.

FAn identifier cannot be a reserved word. (See Appendix A, “Java Keywords,” for a list of reserved words).

FAn identifier cannot be true, false, or
null.

FAn identifier can be of any length.

Variables

// Compute the first area

radius = 1.0;

area = radius*radius*3.14159;

System.out.println(“The area is “ + area + ” for radius “+radius);

// Compute the second area

radius = 2.0;

area = radius*radius*3.14159;

System.out.println(“The area is “ + area + ” for radius “+radius);

Declaring Variables

int x; // Declare x to be an

// integer variable;

double radius; // Declare radius to

// be a double variable;

char a; // Declare a to be a

// character variable;

Assignment Statements

x = 1; // Assign 1 to x;

radius = 1.0; // Assign 1.0 to radius;

a = ‘A'; // Assign ‘A’ to a;

Declaring and Initializing
in One Step

Fint x = 1;

Fdouble d = 1.4;

Ffloat f = 1.4;

Is this statement correct?

Constants

final datatype CONSTANTNAME = VALUE;

final double PI = 3.14159;

final int SIZE = 3;

Numerical Data Types

byte 8 bits

short 16 bits

int 32 bits

long 64 bits

float 32 bits

double 64 bits

Operators

+, -, *, /, and %

5/2 yields an integer 2.

5.0/2 yields a double value 2.5

5 % 2 yields 1 (the remainder of the division)

NOTE

Calculations involving floating-point numbers are approximated because these numbers are not stored with complete accuracy. For example,

System.out.println(1 – 0.1 – 0.1 – 0.1 – 0.1 – 0.1);

displays 0.5000000000000001, not 0.5, and

System.out.println(1.0 – 0.9);

displays 0.09999999999999998, not 0.1. Integers are stored precisely. Therefore, calculations with integers yield a precise integer result.

Number Literals

A literal is a constant value that appears directly in the program. For example, 34, 1,000,000, and 5.0 are literals in the following statements:

int i = 34;

long l = 1000000;

double d = 5.0;

Integer Literals

An integer literal can be assigned to an integer variable as long as it can fit into the variable. A compilation error would occur if the literal were too large for the variable to hold. For example, the statement byte b = 1000 would cause a compilation error, because 1000 cannot be stored in a variable of the byte type.

An integer literal is assumed to be of the int type, whose value is between -231 (-2147483648) to 231–1 (2147483647). To denote an integer literal of the long type, append it with the letter L or l. L is preferred because l (lowercase L) can easily be confused with 1 (the digit one).

Floating-Point Literals

Floating-point literals are written with a decimal point. By default, a floating-point literal is treated as a double type value. For example, 5.0 is considered a double value, not a float value. You can make a number a float by appending the letter f or F, and make a number a double by appending the letter d or D. For example, you can use 100.2f or 100.2F for a float number, and 100.2d or 100.2D for a double number.

Scientific Notation

Floating-point literals can also be specified in scientific notation, for example, 1.23456e+2, same as 1.23456e2, is equivalent to 123.456, and 1.23456e-2 is equivalent to 0.0123456. E (or e) represents an exponent and it can be either in lowercase or uppercase.

Arithmetic Expressions

Shortcut Assignment Operators

Increment and
Decrement Operators

Increment and
Decrement Operators, cont.

Increment and
Decrement Operators, cont.

Assignment Expressions and Assignment Statements

Prior to Java 2, all the expressions can be used as statements. Since Java 2, only the following types of expressions can be statements:

variable op= expression; // Where op is +, -, *, /, or %

++variable;

variable++;

–variable;

variable–;

Numeric Type Conversion

Consider the following statements:

byte i = 100;

long k = i*3+4;

double d = i*3.1+k/2;

int x = k; //(Wrong)

long k = x; //(fine,implicit casting)

Type Casting

Fdouble

Ffloat

Flong

Fint

Fshort

Fbyte

Type Casting, cont.

Implicit casting

double d = 3; (type widening)

Explicit casting

int i = (int)3.0; (type narrowing)

What is wrong? int x = 5/2.0;

Character Data Type

char letter = ‘A'; (ASCII)

char numChar = ‘4’; (ASCII)

char letter = ‘\u0041′; (Unicode)

char numChar = ‘\u0034′; (Unicode)

Special characters

char tab = ‘\t’;

Unicode Format

Appendix B: ASCII Character Set

ASCII Character Set, cont.

Casting between char and Numeric Types

The boolean Type and Operators

boolean lightsOn = true;

boolean lightsOn = false;

boolean b = (1 > 2);

F&& (and) (1 < x) && (x < 100)

F|| (or) (lightsOn) || (isDayTime)

F! (not) !(isStopped)

Comparison Operators

Boolean Operators

Truth Table for Operator !

Truth Table for Operator &&

Truth Table for Operator ||

Truth Table for Operator ^

The & and | Operators

&&: conditional AND operator

&: unconditional AND operator

||: conditional OR operator

|: unconditional OR operator

exp1 && exp2

(1 < x) && (x < 100)

(1 < x) & (x < 100)

The & and | Operators

If x is 1, what is x after this expression?

(x > 1) & (x++ < 10)

If x is 1, what is x after this expression?

(1 > x) && ( 1 > x++)

How about (1 == x) | (10 > x++)?

(1 == x) || (10 > x++)?

Operator Precedence

How to evaluate

3 + 4 * 4 > 5 * (4 + 3) – ++i

Operator Precedence

Fvar++, var–

F+, – (Unary plus and minus), ++var,–var

F(type) Casting

F! (Not)

F*, /, % (Multiplication, division, and modulus)

F+, – (Binary addition and subtraction)

F<, <=, >, >= (Comparison)

F==, !=; (Equality)

F& (Unconditional AND)

F^ (Exclusive OR)

F| (Unconditional OR)

F&& (Conditional AND) Short-circuit AND

F|| (Conditional OR) Short-circuit OR

F=, +=, -=, *=, /=, %= (Assignment operator)

Operator Associativity

When two operators with the same precedence are evaluated, the associativity of the operators determines the order of evaluation. All binary operators except assignment operators are left-associative.

a – b + c – d is equivalent to  ((a – b) + c) – d

Assignment operators are right-associative. Therefore, the expression

a = b += c = 5 is equivalent to a = (b += (c = 5))

Operand Evaluation Order

The precedence and associativity rules specify the order of the operators, but do not specify the order in which the operands of a binary operator are evaluated. Operands are evaluated from left to right in Java.

The left-hand operand of a binary operator is evaluated before any part of the right-hand operand is evaluated.

Operand Evaluation Order, cont.

If no operands have side effects that change the value of a variable, the order of operand evaluation is irrelevant. Interesting cases arise when operands do have a side effect. For example, x becomes 1 in the following code, because a is evaluated to 0 before ++a is evaluated to 1.

int a = 0;

int x = a + (++a);

But x becomes 2 in the following code, because ++a is evaluated to 1, then a is evaluated to 1.

int a = 0;

int x = ++a + a;

Getting Input from Input Dialog Boxes

String string = JOptionPane.showInputDialog(

null, “Prompt Message”, “Dialog Title”,

JOptionPane.QUESTION_MESSAGE));

where x is a string for the prompting message and y is a string for the title of the input dialog box.

Convertting Strings to Integers

The input returned from the input dialog box is a string. If you enter a numeric value such as 123, it returns “123”. To obtain the input as a number, you have to convert a string into a number.

To convert a string into an int value, you can use the static parseInt method in the Integer class as follows:

int intValue = Integer.parseInt(intString);

where intString is a numeric string such as “123”.

Convertting Strings to Doubles

To convert a string into a double value, you can use the static parseDouble method in the Double class as follows:

double doubleValue =Double.parseDouble(doubleString);

where doubleString is a numeric string such as “123.45”.

Example 2.2
Entering Input from Dialog Boxes

Example 2.3
Computing Mortgages

Example 2.4
Computing Changes

Programming Style and Documentation

FAppropriate Comments

FNaming Conventions

FProper Indentation and Spacing Lines

FBlock Styles

Appropriate Comments

Include a summary at the beginning of the program to explain what the program does, its key features, its supporting data structures, and any unique techniques it uses.

Include your name, class section, instruction, date, and a brief description at the beginning of the program.

Naming Conventions

FChoose meaningful and descriptive names.

FVariables and method names:

Use lowercase. If the name consists of several words, concatenate all in one, use lowercase for the first word, and capitalize the first letter of each subsequent word in the name. For example, the variables radius and area, and the method computeArea.

Naming Conventions, cont.

FClass names:

Capitalize the first letter of each word in the name. For example, the class name ComputeArea.

FConstants:

Capitalize all letters in constants. For example, the constant PI.

Proper Indentation and Spacing

FIndentation

Indent two spaces.

FSpacing

Use blank line to separate segments of the code.

Block Styles

Use end-of-line style for braces.

Programming Errors

FSyntax Errors

Detected by the compiler

FRuntime Errors

Causes the program to abort

FLogic Errors

Produces incorrect result

Compilation Errors

public class ShowSyntaxErrors {

public static void main(String[] args) {

i = 30;

System.out.println(i+4);

}

}

Runtime Errors

public class ShowRuntimeErrors {

public static void main(String[] args) {

int i = 1 / 0;

}

}

Logic Errors

public class ShowLogicErrors {

// Determine if a number is between 1 and 100 inclusively

public static void main(String[] args) {

// Prompt the user to enter a number

String input = JOptionPane.showInputDialog(null,

“Please enter an integer:”,

“ShowLogicErrors”, JOptionPane.QUESTION_MESSAGE);

int number = Integer.parseInt(input);

// Display the result

System.out.println(“The number is between 1 and 100, ” +

“inclusively? ” + ((1 < number) && (number < 100)));

System.exit(0);

}

}

SLIDE 3

Control Statements

Selection Statements

if Statements

if (booleanExpression) {

statement(s);

}

Example:

if ((i > 0) && (i < 10)) {

System.out.println(“i is an ” +

“integer between 0 and 10″);

}

Caution

Adding a semicolon at the end of an if clause is a common mistake.

if (radius >= 0);

{

area = radius*radius*PI;

System.out.println(

“The area for the circle of radius ” +

radius + ” is ” + area);

}

This mistake is hard to find, because it is not a compilation error or a runtime error, it is a logic error.

This error often occurs when you use the next-line block style.

The if…else Statement

if (booleanExpression) {

statement(s)-for-the-true-case;

}

else {

statement(s)-for-the-false-case;

}

if…else Example

if (radius >= 0) {

area = radius*radius*PI;

System.out.println(“The area for the “

+ “circle of radius ” + radius +

” is ” + area);

}

else {

System.out.println(“Negative input”);

}

Multiple Alternative if Statements

if (score >= 90)

grade = ‘A’;

else

if (score >= 80)

grade = ‘B’;

else

if (score >= 70)

grade = ‘C’;

else

if (score >= 60)

grade = ‘D’;

else

grade = ‘F’;

Note

The else clause matches the most recent if clause in the same block. For example, the following statement

int i = 1; int j = 2; int k = 3;

if (i > j)

if (i > k)

System.out.println(“A”);

else

System.out.println(“B”);

is equivalent to

int i = 1; int j = 2; int k = 3;

if (i > j)

if (i > k)

System.out.println(“A”);

else

System.out.println(“B”);

Note, cont.

Nothing is printed from the preceding statement. To force the else clause to match the first if clause, you must add a pair of braces:

int i = 1;

int j = 2;

int k = 3;

if (i > j) {

if (i > k)

System.out.println(“A”);

}

else

System.out.println(“B”);

This statement prints B.

Nested if Statements

Example 3.1 Using Nested if Statements

This program reads in number of years and loan amount and computes the monthly payment and total payment. The interest rate is determined by number of years.

switch Statements

switch (year) {

case 7: annualInterestRate = 7.25;

break;

case 15: annualInterestRate = 8.50;

break;

case 30: annualInterestRate = 9.0;

break;

default: System.out.println(

“Wrong number of years, enter 7, 15, or 30″);

}

switch Statement Flow Chart

switch Statement Rules

The switch-expression must yield a value of char, byte, short, or int type and must always be enclosed in parentheses.


The value1, …, and valueN must have the same data type as the value of the switch-expression. The resulting statements in the case statement are executed when the value in the case statement matches the value of the switch-expression. (The case statements are executed in sequential order.)

The keyword break is optional, but it should be used at the end of each case in order to terminate the remainder of the switch statement. If the break statement is not present, the next case statement will be executed.

switch Statement Rules, cont.

The default case, which is optional, can be used to perform actions when none of the specified cases is true.

·      

The order of the cases (including the default case) does not matter. However, it is a good programming style to follow the logical sequence of the cases and place the default case at the end.

Caution

Do not forget to use a break statement when one is needed. For example, the following code always displays Wrong number of years regardless of what numOfYears is. Suppose the numOfYears is 15. The statement annualInterestRate = 8.50 is executed, then the statement annualInterestRate = 9.0, and finally the statement System.out.println(“Wrong number of years”).

switch (numOfYears) {

case 7: annualInterestRate = 7.25;

case 15: annualInterestRate = 8.50;

case 30: annualInterestRate = 9.0;

default: System.out.println(“Wrong number of years”);

}

Conditional Operator

if (x > 0) y = 1

else y = -1;

is equivalent to

y = (x > 0) ? 1 : -1;

Ternary operator

Binary operator

Unary operator

Conditional Operator

if (num % 2 == 0)

System.out.println(num + “is even”);

else

System.out.println(num + “is odd”);

System.out.println(

(num % 2 == 0)? num + “is even” :

num + “is odd”);

Conditional Operator, cont.

(booleanExp) ? exp1 : exp2

Repetitions

while Loop Flow Chart

while Loop Flow Chart, cont.

Example 3.2: Using while Loops

TestWhile.java

Caution

Don’t use floating-point values for equality checking in a loop control. Since floating-point values are approximations, using them could result in imprecise counter values and inaccurate results. This example uses int value for data. If a floating-point type value is used for data, (data != 0) may be true even though data is 0.

// data should be zero

double data = Math.pow(Math.sqrt(2), 2) – 2;

if (data == 0)

System.out.println(“data is zero”);

else

System.out.println(“data is not zero”);

do-while Loop

for Loops

for (initial-action; loop-continuation-condition; action-after-each-iteration) {

//loop body;

}

int i = 0;

while (i < 100) {

System.out.println(“Welcome to Java! ” + i);

i++;

}

Example:

int i;

for (i = 0; i < 100; i++) {

System.out.println(“Welcome to Java! ” + i);

}

for Loop Flow Chart

for Loop Example

for Loop Examples

Which Loop to Use?

Caution

Adding a semicolon at the end of the for clause before the loop body is a common mistake, as shown below:

for (int i=0; i<10; i++);

{

System.out.println(“i is ” + i);

}

Caution, cont.

Similarly, the following loop is also wrong:

int i=0;

while (i<10);

{

System.out.println(“i is ” + i);

i++;

}

In the case of the do loop, the following semicolon is needed to end the loop.

int i=0;

do {

System.out.println(“i is ” + i);

i++;

} while (i<10);

The break Keyword

The continue Keyword

Using break and continue

Example 3.7
Finding the Sales Amount

Example 3.8
Displaying a Pyramid of Numbers

Example 3.9
Displaying Prime Numbers

SLIDE 4

Kuliah 4 – Methods

FIntroducing Methods

Benefits of methods, Declaring Methods, and Calling Methods

FPassing Parameters

Pass by Value

FOverloading Methods

Ambiguous Invocation

FScope of Local Variables

FMethod Abstraction

FThe Math Class

FCase Studies

FRecursion (Optional)

Introducing Methods

Introducing Methods, cont.

Declaring Methods

public static int max(int num1, int num2) {

if (num1 > num2)

return num1;

else

return num2;

}

Calling Methods

public class MaxBilangan {

pubic static int max(int num1, int num2) {

if (num1 > num2)

return num1;

else

return num2;

}

public static void main(String args[]) {

int i = 5, j = 2 ;

int k =max(i,j) ;

System.out.println(“The maximum “ + i + “ and “ + j

“ is “ + k ) ;

}

}

Calling Methods, cont.

Calling Methods, cont.

CAUTION

A return statement is required for a nonvoid method. The following method is logically correct, but it has a compilation error, because the Java compiler thinks it possible that this method does not return any value.

public static int xMethod(int n) {

if (n > 0) return 1;

else if (n == 0) return 0;

else if (n < 0) return –1;

}

To fix this problem, delete if (n<0) in the code.

Passing Parameters

public static void nPrintln(String message, int n) {

for (int i = 0; i < n; i++)

System.out.println(message);

}

Pass by Value

public class passbyValue {

public static void swap(int n1, int n2) {

int temp ;

temp = n1 ;

n1 = n2 ;

n2 = temp ;

System.out.println(“Nilai n1 dan n2 dalam method “

+ “n1 = “+ n1 + ” dan n2 = “+ n2);

}

public static void main(String args[]){

int n1 = 9, n2 = 5 ;

swap(n1,n2);

System.out.println(“Nilai n1 dan n2 diluar method “

+ “n1 = “+ n1 + ” dan n2 = “+ n2)

}

}

Pass by Value, cont.

Overloading Methods

Example 4.3 Overloading the max Method

public static double max(double num1, double num2) {

if (num1 > num2)

return num1;

else

return num2;

}

Ambiguous Invocation

Sometimes there may be two or more possible matches for an invocation of a method, but the compiler cannot determine the most specific match. This is referred to as ambiguous invocation. Ambiguous invocation is a compilation error.

Ambiguous Invocation

public class AmbiguousOverloading {

public static void main(String[] args) {

System.out.println(max(1, 2));

}

public static double max(int num1, double num2) {

if (num1 > num2)

return num1;

else

return num2;

}

public static double max(double num1, int num2) {

if (num1 > num2)

return num1;

else

return num2;

}

}

Scope of Local Variables

A local variable: a variable defined inside a method.

Scope: the part of the program where the variable can be referenced.

The scope of a local variable starts from its declaration and continues to the end of the block that contains the variable. A local variable must be declared before it can be used.

Scope of Local Variables, cont.

You can declare a local variable with the same name multiple times in different non-nesting blocks in a method, but you cannot declare a local variable twice in nested blocks. Thus, the following code is correct.

Scope of Local Variables, cont.

Scope of Local Variables, cont.

Method Abstraction

You can think of the method body as a black box that contains the detailed implementation for the method.

Benefits of Methods

The Math Class

FClass constants:

PI

E

FClass methods:

Trigonometric Methods

Exponent Methods

Rounding Methods

min, max, abs, and random Methods

Trigonometric Methods

Fsin(double a)

Fcos(double a)

Ftan(double a)

Facos(double a)

Fasin(double a)

Fatan(double a)

Exponent Methods

Fexp(double a)

Returns e raised to the power of a.

Flog(double a)

Returns the natural logarithm of a.

Fpow(double a, double b)

Returns a raised to the power of b.

Fsqrt(double a)

Returns the square root of a.

Rounding Methods

Fdouble ceil(double x)

x rounded up to its nearest integer. This integer is returned as a double value.

Fdouble floor(double x)

x is rounded down to its nearest integer. This integer is returned as a double value.

Fdouble rint(double x)

x is rounded to its nearest integer. If x is equally close to two integers, the even one is returned as a double.

Fint round(float x)

Return (int)Math.floor(x+0.5).

Flong round(double x)

Return (long)Math.floor(x+0.5).

min, max, abs, and random

Fmax(a, b)and min(a, b)

Returns the maximum or minimum of two parameters.

Fabs(a)

Returns the absolute value of the parameter.

Frandom()

Returns a random double value
in the range [0.0, 1.0).

Example 4.4 Computing Mean and Standard Deviation

Generate 10 random numbers and compute the mean and standard deviation

Example 4.5 Obtaining Random Characters

Write the methods for generating random characters. The program uses these methods to generate 175 random characters between ‘!’ and ‘~’ and displays 25 characters per line. To find out the characters between ‘!’ and ‘~’, see Appendix B, “The ASCII Character Set.”

Example 4.5 Obtaining Random Characters, cont.

Case Studies

Example 4.6 Displaying Calendars

The program reads in the month and year and displays the calendar for a given month of the year.

Design Diagram

Recursion (Optional)

Example 4.7 Computing Factorial

factorial(0) = 1;

factorial(n) = n*factorial(n-1);

Example 4.7 Computing Factorial, cont.

Example 4.7 Computing Factorial, cont.

Fibonacci Numbers

Example 4.8 Computing Finonacci Numbers

0 1 1 2 3 5 8 13 21 34 55 89…

f0 f1

fib(2) = fib(0) + fib(1);

Fibonacci Numbers, cont

Fibonnaci Numbers, cont.

Towers of Hanoi

Example 4.9 Solving the Towers of Hanoi Problem

Solve the towers of Hanoi problem.

Towers of Hanoi, cont.

SLIDE 5

Kuliah 5 – Arrays

FIntroducing Arrays

FDeclaring Array Variables, Creating Arrays, and Initializing Arrays

FPassing Arrays to Methods

FCopying Arrays

FMultidimensional Arrays

FSearch and Sorting Methods

Introducing Arrays

Declaring Array Variables

Fdatatype[] arrayname;

Example:

double[] myList;

Fdatatype arrayname[];

Example:

double myList[];

Creating Arrays

arrayName = new datatype[arraySize];

Example:

myList = new double[10];

myList[0] references the first element in the array.

myList[9] references the last element in the array.

Declaring and Creating
in One Step

Fdatatype[] arrayname = new

datatype[arraySize];

double[] myList = new double[10];

Fdatatype arrayname[] = new
datatype[arraySize];

double myList[] = new double[10];

The Length of Arrays

FOnce an array is created, its size is fixed. It cannot be changed. You can find its size using

arrayVariable.length

For example,

myList.length returns 10

Initializing Arrays

FUsing a loop:

for (int i = 0; i < myList.length; i++)

myList[i] = i;

FDeclaring, creating, initializing in one step:

double[] myList = {1.9, 2.9, 3.4, 3.5};

This shorthand syntax must be in one statement.

Declaring, creating, initializing Using the Shorthand Notation

double[] myList = {1.9, 2.9, 3.4, 3.5};

This shorthand notation is equivalent to the following statements:

double[] myList = new double[4];

myList[0] = 1.9;

myList[1] = 2.9;

myList[2] = 3.4;

myList[3] = 3.5;

CAUTION

Using the shorthand notation, you have to declare, create, and initialize the array all in one statement. Splitting it would cause a syntax error. For example, the following is wrong:

double[] myList;

myList = {1.9, 2.9, 3.4, 3.5};

Example 5.1
Testing Arrays

FObjective: The program receives 6 numbers from the keyboard, finds the largest number and counts the occurrence of the largest number entered from the keyboard.

Suppose you entered 3, 5, 2, 5, 5, and 5, the largest number is 5 and its occurrence count is 4.

Example 5.2
Assigning Grades

FObjective: read student scores (int) from the keyboard, get the best score, and then assign grades based on the following scheme:

Grade is A if score is >= best–10;

Grade is B if score is >= best–20;

Grade is C if score is >= best–30;

Grade is D if score is >= best–40;

Grade is F otherwise.

Passing Arrays to Methods

Java uses pass by value to pass parameters to a method. There are important differences between passing a value of variables of primitive data types and passing arrays.

F For a parameter of a primitive type value, the actual value is passed. Changing the value of the local parameter inside the method does not affect the value of the variable outside the method.

F For a parameter of an array type, the value of the parameter contains a reference to an array; this reference is passed to the method. Any changes to the array that occur inside the method body will affect the original array that was passed as the argument.

Example 5.3
Passing Arrays as Arguments

FObjective: Demonstrate differences of passing primitive data type variables and array variables.

Example 5.3, cont.

Example 5.4 Computing Deviation Using Arrays

Example 5.5
Counting Occurrence of Each Letter

FGenerate 100 lowercase letters randomly and assign to an array of characters.

FCount the occurrence of each letter in the array.

FFind the mean and standard deviation of the counts.

Example 5.6
Copying Arrays

In this example, you will see that a simple assignment cannot copy arrays in the following program. The program simply creates two arrays and attempts to copy one to the other, using an assignment statement.

Copying Arrays

Copying Arrays

Using a loop:

int[] sourceArray = {2, 3, 1, 5, 10};

int[] targetArray = new int[sourceArray.length];

for (int i = 0; i < sourceArrays.length; i++)

targetArray[i] = sourceArray[i];

The arraycopy Utility

arraycopy(sourceArray, src_pos, targetArray, tar_pos, length);

Example:

System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);

Multidimensional Arrays

Declaring Variables of Multidimensional Arrays and Creating Multidimensional Arrays

int[][] matrix = new int[10][10];

or

int matrix[][] = new int[10][10];

matrix[0][0] = 3;

for (int i=0; i<matrix.length; i++)

for (int j=0; j<matrix[i].length; j++)

{

matrix[i][j] = (int)(Math.random()*1000);

}

double[][] x;

Multidimensional Array Illustration

Declaring, Creating, and Initializing Using Shorthand Notations

You can also use a shorthand notation to declare, create and initialize a two-dimensional array. For example,

int[][] array = {

{1, 2, 3},

{4, 5, 6},

{7, 8, 9},

{10, 11, 12}

};

This is equivalent to the following statements:

int[][] array = new int[4][3];

array[0][0] = 1; array[0][1] = 2; array[0][2] = 3;

array[1][0] = 4; array[1][1] = 5; array[1][2] = 6;

array[2][0] = 7; array[2][1] = 8; array[2][2] = 9;

array[3][0] = 10; array[3][1] = 11; array[3][2] = 12;

Lengths of Multidimensional Arrays

int[][] array = {

{1, 2, 3},

{4, 5, 6},

{7, 8, 9},

{10, 11, 12}

};

array.length

array[0].length

array[1].length

array[2].length

Ragged Arrays

Each row in a two-dimensional array is itself an array. So, the rows can have different lengths. Such an array is known as a ragged array. For example,

int[][] matrix = {

{1, 2, 3, 4, 5},

{2, 3, 4, 5},

{3, 4, 5},

{4, 5},

{5}

};

Example 5.7
Adding and Multiplying Two Matrices

FObjective: Use two-dimensional arrays to create two matrices, and then add and multiply the two matrices.

Example 5.7 (cont) Adding and Multiplying Two Matrices

Example 5.8
Grading Multiple-Choice Test

FObjective: write a program that grades multiple-choice test.

Example 5.9
Calculating Total Scores

FObjective: write a program that calculates the total score for students in a class. Suppose the scores are stored in a three-dimensional array named scores. The first index in scores refers to a student, the second refers to an exam, and the third refers to the part of the exam. Suppose there are 7 students, 5 exams, and each exam has two parts–the multiple-choice part and the programming part. So, scores[i][j][0] represents the score on the multiple-choice part for the i’s student on the j’s exam. Your program displays the total score for each student, .

Searching Arrays

Searching is the process of looking for a specific element in an array; for example, discovering whether a certain score is included in a list of scores. Searching, like sorting, is a common task in computer programming. There are many algorithms and data structures devoted to searching. In this section, two commonly used approaches are discussed, linear search and binary search.

Linear Search

The linear search approach compares the key element, key, with each element in the array list[]. The method continues to do so until the key matches an element in the list or the list is exhausted without a match being found. If a match is made, the linear search returns the index of the element in the array that matches the key. If no match is found, the search returns -1.

Example 5.10
Testing Linear Search

FObjective: Implement and test the linear search method by creating an array of 10 elements of int type randomly and then display this array. Prompt the user to enter a key for testing the linear search.

Binary Search

For binary search to work, the elements in the array must already be ordered. Without loss of generality, assume that the array is in ascending order.

e.g. 2 4 7 10 11 45 50 59 60 66 69 70 79

The binary search first compares the key with the element in the middle of the array. Consider the following three cases:

Binary Search, cont.

·  If the key is less than the middle element, you only need to search the key in the first half of the array.

·  If the key is equal to the middle element, the search ends with a match.

·  If the key is greater than the middle element, you only need to search the key in the second half of the array.

Binary Search, cont.

Example 5.11
Testing Binary Search

FObjective: Implement and test the binary search method. The program first creates an array of 10 elements of int type. It displays this array and then prompts the user to enter a key for testing binary search.

Example 5.12
Using Arrays in Sorting

FObjective: Use the selectionSort method to write a program that will sort a list of double floating-point numbers.

int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted

Sort it to produce 1, 2, 4, 5, 6, 8, 9

2, 9, 5, 4, 8, 1, 6

Example 5.12: (Cont) Using Arrays in Sorting

int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted

Find the largest element in myList and swap it with the last element in myList.

2, 9, 5, 4, 8, 1, 6 => 2, 6, 5, 4, 8, 1, 9 (size = 7)

2, 6, 5, 4, 8, 1 => 2, 6, 5, 4, 1, 8 (size = 6)

2, 6, 5, 4, 1 => 2, 1, 5, 4, 6 (size = 5)

2, 1, 5, 4 => 2, 1, 4, 5

2, 1, 4 => 2, 1, 4,

2, 1 => 1, 2

Sort it to produce 1, 2, 4, 5, 6, 8, 9

Exercise 5.5: Bubble Sort

int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted

Pass 1: 2, 5, 4, 8, 1, 6, 9

Pass 2: 2, 4, 5, 1, 6, 8, 9

Pass 3: 2, 4, 1, 5, 6, 8, 9

Pass 4: 2, 1, 4, 5, 6, 8, 9

Pass 5: 1, 2, 4, 5, 6, 8, 9

Pass 6: 1, 2, 4, 5, 6, 8, 9

LAPORAN AKHIR PENELITIAN DANA DIKS TAHUN 2004/2005


LAPORAN AKHIR PENELITIAN
DANA DIKS TAHUN 2004/2005

IMPLEMENTASI DOMPET ELEKTRONIK (e-purse) MENGGUNAKAN TEKNOLOGI SMART CARD

Oleh :
F.X. Arunanto

Dibiayai dengan Dana DIKS
Tahun Angaran 2004/2005
Nomor Kontrak: 299.2/K03.6/PL/05 Tanggal 10 Mei 2005

JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INFORMASI

LEMBAGA PENELITIAN DAN
PENGABDIAN KEPADA MASYARAKAT
INSTITUT TEKNOLOGI SEPULUH NOPEMBER
TAHUN 2005

LEMBAR IDENTITAS DAN PENGESAHAN
PROGRAM PENELITIAN DANA DIKS TAHUN 2004/2005

1. a. Judul Penelitian : IMPLEMENTASI DOMPET ELEKTRONIK (e-purse) MENGGUNAKAN
TEKNOLOGI SMART CARD
b. Disiplin Ilmu : Komputasi Berbasis Jaringan
c. Kategori Penelitian : Pengembangan Ilmu Pengetahuan
2. Peneliti Utama :
a. Nama : Ir. F.X. Arunanto, M.Sc.
b. Jenis Kelamin : Laki-laki
c. Pangkat/Golongan/NIP : Penata Muda Tk. I/ III B / 131 285 253
d. Jabatan Fungsional : Lektor
e. Jabatan Struktural : Ketua Program Magister Teknik Informatika
f. Jurusan/Fakultas : Teknik Informatika / FTIF
3. Jumlah Anggota Peneliti : 2 (dua) orang
1. Daniel Oranova Siahaan
2. Ahmad Hoirul Basori
4. Lokasi Penelitian : Laboratorium, Jurusan Teknik Informatika, FTIf, ITS
5. Jangka Waktu Penelitian : 6 bulan
6. Biaya Penelitian : Rp 4.970.000,00

Mengetahui, Surabaya, 1 September 2005
Ketua Jurusan Teknik Informatika Ketua Peneliti,

Yudhi Purwananto, S.Kom., M.Kom. Ir. F.X. Arunanto, M.Sc.
NIP. 132 172 210 NIP. 131 285 253

Menyetujui,
Dekan Fakultas Teknologi Informasi ITS

Prof. Dr. Ir. Arif Djunaidy, M.Sc.
NIP. 131 633 403

ABSTRAK

Smart Card merupakan miniatur komputer yang terbatas namun dapat melakukan pemrosesan suatu instruksi dengan mudah dan aman. Dengan karakteristik seperti itu, teknologi ini banyak digunakan untuk aplikasi perbankan maupun mobile phone. Pada penelitian ini, akan dikembangkan suatu teknologi smart card untuk system dompet elektronik (e-purse). Sistem ini akan meniru fungsi dompet sebagai penyimpan uang secara fisik. Dengan aplikasi ini, pengguna dapat menyimpan uang secara elektronik dan menggunakannya untuk bertransaksi selayaknya menggunakan uang secara fisik.
Sistem e-purse ini dibangun dengan menggunakan teknologi JCOP smart card dari IBM yang mendukung OCF (Open Card Framework) serta teknologi Java Card sebagai Application Programming Interface-nya.
Hasil dari penelitian ini adalah sistem e-purse yang komponenen utamanya adalah e-purse applet yang tersimpan dalam smart card, terminal Point of Sales, dan terminal Reload. Sistem ini telah diverifikasi dan divalidasi terhadap spesifikasi kebutuhan sistem dan menggunakan unit testing.

Kata-kata kunci: e-purse, smart card, java card, OCF

ABSTRACT

Smart Card is a miniatur of computer with limited resource but can process an instruction easily and safely. Given this characteristics, this technology is widely use for banking application and mobile phone. This research is developing smart card technology for e-purse system. This system mimics the functions of traditionally purse or wallet to store physical money. With this application, the user can save their money electronically and use it to interact as it is physicial money.
This e-purse system is developed using JCOP smart card from IBM that supports OCF (Open Card Framework) and Java Card technology as its Application Programming Interface.
There are three components build for this system, i.e. e-purse applet, which is stored in the smart card, the Point of Sales and Reload terminal. This system has been verified against its requirements and validated using unit testing.

Keywords: e-purse, smart card, java card, OCF

PRAKATA

Syukur kepada Tuhan Yang Maha Esa akhirnya penelitian dengan judul IMPLEMENTASI DOMPET ELEKTRONIK (e-purse) MENGGUNAKAN TEKNOLOGI SMART CARD ini dapat diselesaikan dengan baik. Hal ini tidak lepas dari kerja keras dari semua anggota dari tim penelitian ini dan juga pertolonganNya.
Laporan penelitian ini disusun guna memenuhi persyaratan kegiatan penelitian yang dilakukan pada Lembaga Penelitian dan Pengabdian kepada Masyarakat, ITS dengan menggunakan alokasi dana DIKS 2004/2005.
Akhir kata, penulis berharap semoga penelitian ini dapat memberikan sumbangan yang bermanfaat bagi khazanah ilmu komputer dan teknologi informatika khususnya yang terkait dengan bidang rekayasa perangkat lunak.

Tim Peneliti

DAFTAR ISI

Prakata ………………………………………….
Abstrak ………………………………………….
Daftar Isi …………………………………………
Daftar Gambar …………………………………….
Daftar Tabel ………………………………………
I. Pendahuluan …………………………………….
II. Tinjauan Pustaka ………………………………….
III. Tujuan dan Manfaat ……………………………….
IV. Metode Penelitian …………………………………
V. Hasil dan Pembahasan ……………………………..
V.1. Perancangan Sistem …………………………….
V.2. Protokol Keamanan …………………………….
V.3. Implementasi Sistem …………………………….
V.4. Skenario Peluncuran Aplikasi ………………………
V.5. Uji Coba …………………………………….
VI. Kesimpulan dan Saran ……………………………..
Daftar Pustaka …………………………………….
Lampiran A. Perintah-Perintah APDU untuk Sistem E-Purse ……….
Lampiran B. Spesifikasi Kebutuhan ……………………….
Lampiran C. Test List …………………………………
Lampiran D. Pengelolaan Sumber Daya …………………….
Lampiran E. Test Casper ……………………………… ii
iv
vi
vii
viii
1
2
4
5
7
7
12
16
18
22
23
25
26
30
34
35
40

a

DAFTAR TABEL

Tabel 1. Fungsi dari kelas-kelas pada komponen POS Terminal ……..
Tabel 2. Fungsi dari metode pada applet ePurse ……………….
Tabel 3. Fungsi dari kelas-kelas pada komponen Reload Terminal ……
Tabel 4. Protokol untuk autorisasi pada iterasi 0 untuk pengiriman 1 data .
Tabel 5. Protokol untuk autorisasi pada iterasi 0 untuk pengiriman n data .
Tabel 6. Protokol untuk autorisasi pada iterasi 1 untuk pengiriman n data .
Tabel 7. Protokol untuk autorisasi pada iterasi 1 untuk pengiriman 1 data .
Tabel 8. Test Case untuk Uji Coba Sistem dan hasilnya ………….. 9
10
12
14
14
15
15
23

DAFTAR GAMBAR

Gambar 1. Penggunaan smart card pada umumnya …………….
Gambar 2. Ilustrasi sistem e-purse ………………………..
Gambar 3. Arsitektur sistem Java Card ……………………..
Gambar 4. Alur Penelitian ……………………………..
Gambar 5. Arsitektur sistem e-purse ……………………….
Gambar 6. Diagram kelas POS Terminal ……………………
Gambar 7. Diagram applet ePurse ………………………..
Gambar 8. Diagram kelas Reload terminal …………………..
Gambar 9. Interface-interface untuk perangkat lunak …………….
Gambar 10. Interface-interface untuk perangkat keras ……………
Gambar 11. Applet e-Purse yang diluncurkan pada suatu smartcard ….
Gambar 12. Tahap Pembangunan applet e-Purse ………………
Gambar 13. Tahap Konversi applet e-Purse ………………….
Gambar 14. Tahap Testing dan Pemasukan Applet e-Purse pada suatu smartcard ………………………………………..
Gambar 15. Alur proses pembangunan ePurse dengan Gemplus RAD III SDK …………………………………………… 1
2
3
5
8
9
10
11
12
13
17
19
20

21

22

I. PENDAHULUAN

Smart card adalah suatu miniatur komputer yang memiliki Input/Output yang terbatas (tidak ada keyboard, mouse, layar, harddisk, dan seterusnya) dan juga resource-resource yang terbatas pula (10MHz, 16K ROM, 1K RAM, 16K EEPROM). Teknologi ini di negara-negara maju sudah banyak digunakan untuk membangun suatu sistem-sistem berteknologi multiguna, contohnya adalah bank card, mobile phone SIM, TV membership, dan seterusnya. Pada dasarnya, smart card adalah suatu microprocessor yang mampu menyimpan dan memproses informasi secara aman. Hal ini yang membedakan antara smart card dengan jenis-jenis kartu lainnya, seperti kartu magnetic stripe dan memory-only chip.
Smart card dianggap lebih aman karena informasi dan program pada suatu smart card tidak dapat (dengan mudah) dibaca atau diubah. Hal ini berbeda dengan komputer pribadi pada umumnya. Pada smartcard, pengguna dapat menyimpan kunci cryptographic sehingga memampukan smartcard untuk melakukan enkripsi maupun dekripsi terhadap data yang dipertukarkan.

Gambar 1 Penggunaan smart card pada umumnya.

Dengan melihat fitur-fitur yang disediakan dan karakteristik yang dimiliki oleh teknologi smart card, dapat dibangun suatu aplikasi dompet elektronik (e-purse). Aplikasi ini merupakan suatu aplikasi yang cukup sederhana, akan tetapi menawarkan tingkat keamaan yang lebih tinggi dari teknologi kartu lain, seperti magnetic tape.

Gambar 2 Ilustrasi sistem e-purse.

Aplikasi e-purse sendiri adalah suatu aplikasi yang memungkinkan pemilik kartu (yang biasanya sekaligus kartu Automatic Teller Machine, ATM) untuk memasukkan sejumlah besar uang secara elektronik kedalam “dompet” dari bank account yang bersangkutan. Kemudian, dompet tersebut dapat digunakan untuk melakukan transaksi dengan perangkat bertransaksi tanpa perangkat tersebut terhubung ke jaringan ATM bank yang bersangkutan (off-line). Gambar 2 menunjukkan ilustrasi dari sistem e-purse ini.

II. TINJAUAN PUSTAKA
Aplikasi smart card seperti e-purse terdiri dari suatu aplikasi card-external yang berinteraksi dengan suatu komponen card-resident [7]. Teknologi perangkat lunak yang akan digunakan untuk membangun komponen card-resident adalah Java Smart Card [5][6]. Java Card adalah suatu generasi bahasa pemrograman smart card yang baru. Dimana suatu java applet ditulis dalam bahasa tingkat tinggi, dikompilasi kedalam bytecode, disimpan kedalam EEPROM, dan dijalankan pada suatu smart card. Hal lain yang membedakan dengan kartu dari generasi sebelumnya adalah kemampuan smart card untuk menampung lebih dari satu aplikasi (applet) dan menambah atau menghapus applet ke dan dari smart card.

Gambar 3. Arsitektur sistem Java Card [6].
Gambar 3 menunjukkan sistem arsitektur Java Card. Java card merupakan subset dari Java dengan sejumlah keterbatasan, yaitu:
– tidak ada real, double, string, dan multi-dimensi array
– tidak ada threads
– opsi untuk melakukan garbage collection
Java Card menggunakan 16 bit aritmatika dan class file yang telah dioptimisasi, yang disebut cap-files. API untuk Java Card mendukung I/O smart card dengan menggunakan APDU’s menggunakan ISO 7816. API Java Card juga mendukung persistensi, transient data dan transaksi.
Sedangkan untuk aplikasi card-external, yang merupakan suatu program yang berjalan pada suatu platform komputer, seperti PC, jaringan komputer, ATM, atau personal digital assistant, teknologi yang akan digunakan untuk membangun perangkat lunaknya adalah Open Card Framework (OCF) [7]. OCF merupakan API berbasis java yang digunakan untuk membangun aplikasi eksternal dan memungkinkannya untuk berinteraksi dengan API tingkat tinggi java lainnya.
Interaksi antara keduanya, aplikasi card-external dan komponen card-internal, terjadi dengan mempertukarkan pasangan APDU (Application Protocol Data Unit) dan diinisiasi oleh aplikasi eksternal. Komunikasi dengan smart card terjadi melalui suatu card reader, yang merupakan perangkat Input/Output yang disambungkan ke perangkat external. Aplikasi eksternal mengiriman suatu CommandAPDU ke smart card dengan menyerahkannya kepada perangkat card reader, yang kemudian meneruskannya ke smart card. Kemudian smart card mengirim balik suatu ResponseAPDU, yang diteruskan oleh card reader ke aplikasi eksternal.

III. TUJUAN DAN MANFAAT
Tujuan yang ingin dicapai dari penelitian ini adalah membangun suatu prototipe aplikasi e-purse menggunakan teknologi smart card, dengan batasan-batasan seperti disebutkan pada bagian batasan masalah, untuk kemudian digunakan untuk penelitian-penelitian berikutnya.
Hasil penelitian ini dapat menjadi alternatif program perbankan baru yang diharapkan dapat menarik minat pengguna jasa perbankan untuk lebih lagi melakukan transaksi-transaksi melalui jasa-jasa yang disediakan oleh perbankan. Terlebih lagi, hasil penelitian ini dapat digunakan untuk mengembangkan apliksai-aplikasi lain yang menggunakan teknologi smart card, seperti airmiles system, loyalty card, quota card, dan sebagainya.

IV. METODE PENELITIAN

Gambar 4 Alur Penelitian

Penelitian ini akan dilaksanakan dalam beberapa tahapan dimana beberapa metode digunakan untuk mendekati domain permasalahan guna mencari pemecahannya. Tahapan-tahapan ini menggunakanan metodologi berorientasi obyek. Diharapkan dengan penggunaan metodelogi ini, aplikasi yang dibuat dapat dikembangkan lagi menjadi aplikasi-aplikasi lain dengan menggunakan desain yang telah ada. Gambar 4 menunjukkan alur dari tahapan-tahapan penelitian tersebut.

1. Studi pustaka
Mencari dan menelaah sumber-sumber pustaka yang menjelaskan mengenai teknologi smart card, Open Card Framework, Java Card, dan JCOP smart card dari IBM. Dalam tahapan ini juga diharapkan peneliti dapat mengumpulkan sekelompok kebutuhan sistem. Untuk itu, digunakan beberapa metode, yaitu:
– Ekplorasi dokumen atau petunjuk teknik.
– Braintstorming

2. Perancangan Sistem
Proses perancangan sistem akan didasarkan kepada perancangan dan pemodelan berorientasi objek. teknologi Java Card sendiri. Melalui pendekatan ini diharapkan sistem ini dapat dikembangan lebih lanjut, dan terlebih lagi dimungkinkan untuk dipergunakan untuk sistem-sistem berorientasi objek lainnya. Pada bagian perancangan sistem, mula-mula diawali dengan pengumpulan kebutuhan, baik fungsional maupun non-fungsional dari sistem yang dibuat. Proses pengumpulan ini menggunakan teknik scenario. Kemudian dari scenario ini dipetakan kedalam beberapa use-case, yang merupakan gambaran penggunaan sistem oleh user. Dari use-case, dibangun logical view dari sistem, yang berupa class diagram dan sequance diagram, yang merupakan gambaran arsitektur dari sistem kemudian Melalui pendekatan ini diharapkan sistem ini dapat dikembangan lebih lanjut, dan terlebih lagi dimungkinkan untuk dipergunakan untuk sistem-sistem berorientasi objek lainnya.

3. Pengimlementasian Sistem
Disain maupun data model sistem yang dihasilkan kemudian direalisasikan dalam bentuk perangkat lunak. Bahasa pemrograman yang digunakan adalah Java. Bahasa pemrograman ini dipilih karena mendukung pemrograman berorientasi obyek.

4. Uji Coba dan Validasi
Sistem akan diuji coba atas aspek-aspek perancangan sistem berorientasi objek dan divalidasi atas kesesuaian implementasi dengan kebutuhan sistem. Untuk jenis pengujian pertama, beberapa test case dibuat sesuai dengan use case yang telah ditetapkan pada tahap perancangan sistem. Untuk melakukan pengujian ini menggunakan suatu peralatan pengujian yang disebut Unit Testing [1][3]. Untuk jenis pengujian kedua, dibuat suatu matrik pengecekan antara kesesuaian kebutuhan fungsional dan non-fungsional sistem dengan arsitektur dan implementasinya. Diharapkan dengan pengujian seperti ini maka verifikasi dan validasi sistem dapat dilakuakan dengan spesifik dan terukur.

5. Penulisan Naskah Laporan Penelitian
Hasil penelitian, baik yang berkaitan dengan studi kepustakaan, perancangan sistem, perancangan dan pembuatan program, dan hasil uji coba dituangkan dalam satu laporan penelitian sesuai dengan format yang telah ditetapkan oleh Lembaga Penelitian dan Pengabdian kepada Masyarakat, ITS.

V. HASIL DAN PEMBAHASAN
Seperti yang telah disebutkan sebelumnya, aplikasi e-purse ini ditargetkan untuk perbankan yang hendak menyediakan layanan kepada pelanggannya untuk menggunakan uang tunai secara elektronik. Dalam artian, e-purse merupakan aplikasi yang menyerupai dompet yang biasa digunakan sehari-hari. Hasil dari penelitian ini adalah pembangunan sejumlah komponen yang diperlukan bagi sistem e-purse ini.

V.1. Perancangan Sistem

Gambar 5 menggambarkan beberapa pihak atau komponen dalam model sistem e-purse yang kami bangun. Komponen-komponen yang berada dalam persegi empat bertanda “Developed” dibangun dalam proyek penelitian ini, yakni Point of Sale Terminal (POS), aplikasi di dalam Smart Card, dan Reload Terminal. Obyek berbentuk lingkaran sejumlah 5 buah pada Gambar 5 merepresentasikan interface antar komponen yang harus aman dan dibatasi agar memenuhi kebutuhan dari sistem, dalam hal ini adalah keamanan dan integritas data.

Gambar 5. Sistem Arsitektur e-purse

POS Terminal
Pada komponen POS Terminal, ada sejumlah kelas yang perlu dibangun, yaitu: POSTerminalMain, POSTerminal, GUIPOSTerminal, dan CardReaderListener. Gambar 6 di bawah ini menunjukkan diagram kelas dari keempat kelas pada komponen POS Terminal.

Gambar 6. Diagram kelas POS Terminal
Tabel 1 berikut akan menjelaskan fungsi dari masing-masing kelas tersebut.

Tabel 1 Fungsi dari kelas-kelas pada komponen POS Terminal.
Nama Deskripsi
POSTerminal Kelas utama dari komponen POSTerminal
GUI Menangani interaksi pengguna dengan aplikasi POSTerminal dan kartu ePurse
GUIObserver CardReader menggunakan kelas ini untuk menotifikasi kelas kelas GUI.
CardReader Menangani perangkat cardReader yang mengakses kartu ePurse

Smart Card
Pada komponen Smart Card, ada satu buah applet yang perlu dibangun untuk sistem e-Purse ini, yaitu ePurse applet. Gambar 7 di bawah ini menunjukkan diagram dari applet ePurse.

Gambar 7. Diagram applet ePurse
Applet ePurse merupakan instansiasi dari javacard.framework.Applet. Pada applet ini terdapat sejumlah metodel. Tabel 2 di bawah ini menerangkan fungsi dari masing-masing metode di dalam applet ePurse.

Tabel 2 Fungsi dari metode pada applet ePurse.
Nama Deskripsi
personalizedCard(APDU) Mempersonalisasi kartu pengguna dengan mennginisialisasi private dan publik key sebagai mekanisme autorisasi kartu, serta pin sebagai mekanisme autorisasi pengguna.
verifyPin(APDU) Mengautorisasi pengguna berdasarkan pin yang dimasukkan.l
getBalance(APDU) Menampilkan nilai terakhir dari simpanan pengguna di dalam kartu.
debit(APDU) Mengurangi simpanan pengguna sejumlah nilai tertentu.
credit(APDU Menambah simpanan pengguna sejumlah nilai tertentu.
log(APDU) Menampilkan 10 transaksi terakhir yang dilakukan pengguna.
select() Memilih applet ePurse sebagai applet aktif.
deselect() Menonaktifkan applet ePurse
Process(APDU) Memproses setiap pesan APDU yang masuk, untuk kemudian diseleleksi berdasarkan nilai OFFSET_INS untuk menentukan aksi yang harus dilakukan kartu. Beberapa pilihan aksi adalah sebagai berikut:
– INS_PERSONALIZED_CARD: memanggil metode personalizedCard(APDU).
– INS_VERIFY_PIN: memanggil metode verifyPin(APDU).
– INS_GET_BALANCE: memanggil metode getBalance(APDU).
– INS_DEBIT: memanggil metode credit(APDU).
– INS_CREDIT: memanggil metode credit(APDU).
– INS_LOG: memanggil metode log(APDU).

Reload Terminal
Pada komponen Reload Terminal, ada sejumlah kelas yang perlu dibangun, yaitu: ReloadTerminalMain, ReloadTerminal, GUIReloadTerminal, dan CardReaderListener. Gambar 8 di bawah ini menunjukkan diagram kelas dari keempat kelas pada komponen Reload Terminal.

Gambar 8. Diagram kelas Reload Terminal
Tabel 3 berikut akan menjelaskan fungsi dari masing-masing kelas tersebut.

Tabel 3 Fungsi dari kelas-kelas pada komponen Reload Terminal.
Nama Deskripsi
ReloadTerminal Kelas utama dari komponen ReloadTerminal
GUI Menangani interaksi pengguna dengan aplikasi ReloadTerminal dan kartu ePurse
GUIObserver CardReader menggunakan kelas ini untuk menotifikasi kelas kelas GUI.
CardReader Menangani perangkat cardReader yang mengakses kartu ePurse

V.2. Protokol Keamanan

Protokol keamanan yang diteliti pada penelitian ini adalah untuk komunikasi antar komponen dalam sistem e-purse, yakni POS dengan Smart Card, Amount Repository, Maintainer System, dan Cash Register; dan Reload Terminal dan Smart Card.

Interface-Interface
Dalam sistem e-purse ini, interface-interface antara perangkat lunak dan perangkat keras dapat dilihat seperti gambar yang ditunjukkan pada Gambar 9 dan Gambar 10.

Gambar 9 Interface-interface untuk perangkat lunak

Sistem terminal terdiri dari suatu personal computer yang terhubung pada suatu Chip Drive melalui port USB.

Gambar 10 Interface-interface untuk perangkat keras

Verification Tool
Untuk memverifikasi apakah protokol komunikasi yang digunakan pada semua interface benar-benar aman, kami menggunakan suatu alat verifikasi. Ada sejumlah alat verifikasi yang masing-masing mengimplementasikan metode verifikasi yang berbeda-beda, seperti Casper/FDR, Isabelle, dan CSP [1][3][4][8][10]). Dalam implementasi sistem e-purse ini, kami menggunakan Casper/FDR sebagai alat verifikasi. Alat ini menyediakan suatu mekanisme yang sederhana bagi pengguna untuk mengecek autentifikasi dan kerahasiaan suatu protokol komunikasi. Alat ini menggunakan bahasa input yang telah disesuaikan yang khusus dirancang untuk mengecek protokol keamanan. Alat ini juga telah berhasil dites pada sejumlah besar protokol keamanan [8][9][10][11].
POS – Smart Card
Untuk komunikasi antara Point of Sales (POS) dan smart card, kedua belah pihak perlu diautentifikasi. Sebagai tambahan suatu sesi yang aman perlu dibangun sedemikian rupa sehingga pesan-pesan dapat dikirim dengan semestinya.
Iteration 0
Pada pendekatan pertama, kami menggunakan algoritma BKE (Bilateral Key Exchange) [2]. Smart card (direpresentasikan oleh B) dan terminal POS (direpresentasikan oleh A), keduanya memiliki suatu pasangan kunci publik dan privat ((P(A), S(A)) dan (P(B),S(B))). Masing-masing pihak mengetahui kunci publik yang lainnya. Pertama, kedua pihak mengauntentifikasi dan kemudian menyetujui suatu kunci sesi yang simentrik (kab). Kunci sesi ini digunakan untuk komunikasi seterusnya sampai sesi tersebut berakhir.
Tabel 4 Protokol untuk autorisasi pada iterasi 0 untuk pengiriman 1 data.
A  B {na,A}{P(B)}
A  B {na,nb,B,kab}{P(A)}
A  B {nb}{kab}
A  B {OK/NOK}{kab}

Dimana na, nb: Nonce; kab: kunci sesi, P(L): kunci publik untuk L;
Pada titik ini, kedua pihak diautentifikasi dan suatu kunci sesi tersedia. Diharapkan dengan menggunakan kunci sesi tidak muncul masalah ketika diverifikasi menggunakan key Casper.

Tabel 5 Protokol untuk autorisasi pada iterasi 0 untuk pengiriman n data.
A  B {na,A}{P(B)}
A  B {na,nb,B, kab}{P(A)}
A  B {nb}{kab}
A  B {OK/NOK}{kab}
A  B {m1}{kab}
A  B {m2}{kab}

Dimana na, nb: Nonce; kab: kunci sesi, P(L): kunci publik dari L; m1,m2: pesan (suatu pesan menggandung fungsi – dengan argumen – untuk melakukan eksekusi, misalnya “Add(25)”)
Analisa Casper menunjukkan bahwa seseorang yang berada ditengah dapat mengirimkan berulang-ulang pesan yang terkirim, walaupun sudah terenkripsi dengan menggunakan kunci sesi.

Iteration 1
Untuk menghindari hal ini, kami memutuskan untuk juga mengirimkan nomor urut pesan untuk setiap pesan. Dengan cara ini, penggunaan pesan lebih dari 1 kali dapat dideteksi. Kelihatannya cara ini sangat sederhana untuk memodelkannya dalam Casper. Ini juga mungkin dikarenakan kemungkinan bahwa nomor urut tak terhingga (sehinga sulit bagi Casper untuk mengecek state space sampai sejauh itu). Sebagai hasilnya, kami memodelkan setiap nomor urut sebagai tipe yang berbeda.
Kali ini, tidak ada masalah yang muncul. Sebagai tambahan, kami melakukan sedikit perubahan terhadap algoritma tersebut, sehingga kunci-kunci sesi dibangun pada sisi terminal (dengan asumsi bahwa terminal memiliki kemampuan komputasi yang lebih besar dibanding smart card).
Tabel 6 Protokol untuk autorisasi pada iterasi 1 untuk pengiriman n data.
A  B {na,A,kab}{P(B)}
A  B {na,nb,B}{P(A)}
A  B {nb}{kab}
A  B {OK/NOK}{kab}
A  B {message,0}{kab}
A  B {response,1}{kab}
A  B {message,2}{kab}
A  B {response,3}{kab}
… …

Dimana na, nb: Nonce; kab: kunci sesi, P(L): kunci publik dari L; message, response: pesan.

Environment – POS
Pendekatan yang sama kami juga gunakan untuk POS – Amount Repository dan Reload Terminal – Smart Card (dimana POS dan Reload Terminal berfungsi sebagai A and Amount Repository dan Smart Card sebagai B).
Cash Register (direpresentasikan oleh A) – POS (direpresentasikan oleh B) dan Maintainer System (direpresentasikan oleh A) – POS (direpresentasikan oleh B) menggunakan protokol yang lain, karena mereka tidak memerlukan pengiriman pesan lebih dari satu kali pada satu sesi. Baik A dan B, keduanya memiliki suatu pasangan kunci publik dan privat. Masing-masing mengetahui kunci publik dari yang lain. Pertama, kedua pihak mengautentifikasi dan menyetujui suatu kunci sesi simetrik.
Tabel 7 Protokol untuk autorisasi pada iterasi 1 untuk pengiriman 1 data.
A  B {na,A,kab}{P(B)}
A  B {na,nb,B}{P(A)}
A  B {nb,message}{kab}
A  B {response}{kab}

Dimana na, nb: Nonce; kab: kunci sesi, P(L): kunci publik dari L; message,response: pesan.
Seperti komunikasi sebelumnya, kami juga memverifikasi protokol keamana ini dengan menggunakan Casper. Kami tidak menemukan suatu masalah apapun.
V.3. Implementasi Sistem
Sebagaimana sudah dijelaskan sebelumnya, ada tiga komponen yang dibangun pada sistem ini, yaitu POS Terminal, Smart Card, dan Reload Terminal. Interaksi antara POS Terminal dengan Smart Card maupun Reload Terminal dengan Smart Card dilakukan dengan cara Terminal mengirimkan perintah kepada Smart Card untuk kemudian Smart Card memanggil metode yang bersesuaian. Seterusnya, Smart Card mengembalikan pesan staus keberhasilan pelaksanaan perintah dan mungkin disertai data kembalian. Perintah dan data tersebut dikirimkan menggunakan suatu protokol pesan yang disebut APDU. Implementasi dari protokol APDU ini dapat dilihat pada Appendix A. Berikut ini penjelasan mengenai implementasi dari masing-masing komponen.

POS Terminal
Komponen POS Terminal pada umumnya diimplementasikan pada sebuah Personal Computer (PC) yang dilengkapi dengan sebuah interface card reader (pembaca kartu).

Smart Card
Aplikasi applet yang kami bangun diluncurkan pada tipe kartu GemExpresso 211 yang merupakan fabrikasi dari GemPlus. Gambar 11 di bawah ini menunjukkan bagaimana applet ePurse diluncurkan pada kartu tersebut.

Gambar 11 Applet e-Purse yang diluncurkan pada suatu smartcard.
GemExpresso 211 adalah bagian dari Visa’s open platform (OP). OP ini adalah suatu kerangka generik untuk mengelola jenis smart card yang mendukung aplikasi ganda (multi-applications). OP ini memperluas lingkungan Java Card dengan menambahkan mekanisme untuk pengelolaan yang aman dari suatu aplikasi pada suatu kartu. OP ini meliputi beberapa komponen:
• Sekumpulan perintah untuk mengelola daur hidup dari suatu kartu dan aplikasi-aplikasinya, memasukkan dan meng-install aplikasi-aplikasi pada kartu, dan mengelola keamanan dari kartu, misalnya dengan melakukan pembaharuan kunci dan menset suatu kanal yang aman antara kartu dan terminal
• Suatu API, yang terdiri dari suatu paket Java tunggal, visa.openplatform, yang dapat digunakan oleh pembangun aplikasi untuk mengakses fitur-fitur dari OP, dan khususnya daur hidup aplikasi dan mengamankan mekanisme pengiriman pesan.
• Suatu spesifikasi dokumen yang secara lengkap mendefinisikan perintah-perintah yang tersedia dan prinsip-prinsip kerja antara Java Card dan lingkungan kartu OP.

Reload Terminal
Sebagaimana komponen POS Terminal, Reload Terminal diimplementasikan pada sebuah Personal Computer (PC) yang dilengkapi dengan sebuah interface card reader (pembaca kartu).
V.4. Skenario Peluncuran Aplikasi
Untuk menluncurkan aplikasi ini diperlukan beberapa perangkat, yaitu:
• Kartu GemExpresso 211
• GemPC Card Reader
• GemExpresso RAD III SDK
• PC Intel dengan spesifikasi minimum sebagai berikut:
o Pentium 166MHz (direkomendasikan Pentium II 350Mhz)
o Memori RAM 128 MB (rekomendasi 256MB)
o Ruang penyimpan tersisa 20-30MB
o Mendukung Super VGA resolusi 800×600 (rekomendasi 1024×768)
• PC Intel yang berfungsi sebagai POS Terminal dan Reload Terminal.

Tahap Pembangunan
Untuk pembangunan prototipe dari applet, kami menggunakan Project Template dari GemExpresso RAD III SDK yang menghasilkan kode skeleton dan suatu definisi proyek di dalam Jbuilder. Kemudian beberapa fungsi sebagaimana disebutkan pada sub bagian sebelumnya ditambahkan ke dalam kode applet tersebut untuk kemudian dikompilasi untuk menghasilkan file dengan ekstensi class. Gambar 12 di bawah ini menunjukkan secara umum bagaimana tahapan pembangunan applet sehingga siap untuk dikonversi.

Gambar 12 Tahap Pembangunan applet e-Purse.

Tahap Konversi
Setelah proses debugging selesai, file class dikonversi menjadi format yang dapat dimasukkan ke dalam target-target ganda. Dengan menggunakan Project Editor dari GemExpresso RAD III SDK paket, AID dari applet, dan lokasi konversi didefinisikan, sehingga dihasilkan file dengan ekstensi CAP. Gambar 13 di bawah ini menunjukkan bagaiman tahap konversi suatu class applet.

Gambar 13 Tahap Konversi applet e-Purse.

Tahap Testing
Sebelum applet yang telah dikonversikan tersebut dimasukkan ke dalam suatu smart card, perlu dilakukan tes terlebih dahulu untuk memastikan validasi dari setiap fungsi yang dibangun dalam applet. Tes ini dilakukan pada suatu lingkungan smart card virtual di dalam GemExpresso RAD III SDK yang disebut GSE (card simulator.

Tahap Pemasukan Applet
Dengan menggunakan JCardManager dari GemExpresso RAD III SDK, file CAP yang hasil konversi dapat dimasukkan ke target kartu yang diinginkan untuk diinstall dan dijalankan. Segera setelah file dimasukkan dan diinstall, suatu perintah APDU dapat dikirimkan ke kartu untuk melakukan test fungsionalitas dan menganalisa respon dari applet. Utilitas CapDump yang berada di dalam JCardManager dapat digunakan untuk melihat isi dari file CAP terkonversi tersebut dalam bentuk yang lebih dapat dibaca. Gambar 14 di bawah ini menunjukkan bagaiman tahap tes dan pemasukan applet ke dalam kartu dilakukan.

Gambar 14 Tahap Testing dan Pemasukan Applet e-Purse pada suatu smartcard.

Gambar 15 di bawah ini menunjukkan alur proses pembangunan applet ePurse secara keseluruhan dengan menggunakan Gemplus RAD III SDK.

Gambar 15 Alur proses pembangunan ePurse dengan Gemplus RAD III SDK.

V.5. Uji Coba
Untuk mengujicoba sistem yang kami buat, kami telah menyusun sejumlah test case. Tabel 8 di bawah ini menunjukkan deskripsi singkat dari sejumlah test case dan hasil dari uji coba tersebut.

Tabel 8 Test Case untuk Uji Coba Sistem dan hasilnya
Id Deskripsi Hasil
TC01 Mengetes fungsi personalisasi kartu (personalizedCard) OK
TC02 Mengetes fungsi autorisasi pengguna (verifyPin) OK
TC03 Mengetes fungsi penampilan nilai simpanan (getBalance) OK
TC04 Mengetes fungsi pengurangan nilai simpanan (debet) dengan jumlah X, dimana nilai simpanan adalah > X dan X>0 OK
TC05 Underflow. Mengetes fungsi pengurangan nilai simpanan (debet) dengan jumlah X, dimana nilai simpanan X OK
TC07 Overflow. Mengetes fungsi penambahan nilai simpanan (credit) dengan jumlah X, dimana nilai simpanan sudah maksimum dan X > 1 OK
TC08 Mengetes fungsi penampilan log (log) OK
TC09 Mengetes sistem logging transaksi pengguna setelah pertama kali diinisialisasi OK
TC10 Mengetes sistem logging transaksi pengguna setelah transaksi debet pertama OK
TC11 Mengetes sistem logging transaksi pengguna setelah transaksi credit pertama OK
TC12 Mengetes sistem logging transaksi pengguna setelah transaksi debet ke-11 OK
TC13 Mengetes sistem logging transaksi pengguna setelah transaksi credit ke-11 OK

Dari tabel tersebut dapat disimpulkan bahwa sistem telah berjalan sesuai dengan spesifikasi yang telah ditentukan.

VI. KESIMPULAN DAN SARAN
Dari serangkaian uji coba yang dilakukan terhadap sistem e-Purse yang telah dibuat dapat ditarik kesimpulan bahwa sistem e-purse ini dibangun dan bekerja sesuai dengan spesifikasi yang telah ditentukan pada awal pembangunan sistem.
Karena representasi dari suatu protokol cukup singkat dalam Casper/FDR, pendeteksian kelemahan dari protokol komunikasi dapat dipercepat. Walaupun protokol-protokol berhasil lolos verfikasi dengan Casper/FDR, tetap tidak ada jaminan penuh bahwa hal ini juga berlaku pada saat implementasi. Ini dikarenakan bahwa suatu perintah yang dianggap atomik dalam Casper mungkin tidaklah demikian dalam implementasinya.
Dengan menggunakan protokol komunikasi yang kami ajukan, BKE dan corrected BKE, kami membangun suatu interface-interface yang aman untuk sistem e-purse. Dan sebagai usulan penelitian berikutnya, kami berencana untuk mengintegrasikan sistem e-purse dengan sistem-sistem berbasis smart card lainnya, seperti loyalty card, freeway card, petrol-rationing card, dan rent-a-car card.

DAFTAR PUSTAKA

[1] Casper: A Compiler for the Analysis of Security Protocols. Computing Laboratory. Oxford University.

http://web.comlab.ox.ac.uk/oucl/work/gavin.lowe/Security/Casper/index.html

[2] Siu-Cheung Charles Chan, An Overview of Smart Card Security, 1997. http://home.hkstar.com/~alanchan/papers/smartCardSecurity/
[3] J.A. Clark and J.L. Jacob. A survey of authentication protocol literature. Technical Report 1.0, 1997.
[4] EPSRC, Verifying Security Protocols Using Isabelle. http://www.cl.cam.ac.uk/users/lcp/papers/protocols.html
[5] Java Card Open Platform.

http://www.zurich.ibm.com/jcop

[6] Java Card Technology.

http://java.sun.com

[7] Open Card Framework Workgroup.

http://www.opencard.org

[8] A.W. Roscoe, Modelling and Verifying key-exchange protocols using CSP and FDR, Proceedings of The Eight IEEE Computer Security Foundations Workshop (CSFW ’95), 1995
[9] Schneider et.al., Modelling and Analysing of Security Protocols. Addison-Wesley Professional, 2000.
[10] S. Schneider, Verifying Authentication protocols in CSP, IEEE Transaction on Software Engineering. Vol.24, Issue 9. 1998.
[11] Dinoj Surendran, Smart Card Technology and Security. http://people.cs.uchicago.edu/~dinoj/smartcard/security.html
[12] PC/SC Workgroup.
http:/www.pcscworkgroup.com
[13] Cpp Unit.

http://cppunit.sourceforge.net/cgi-bin/moin.cgi

LAMPIRAN A. PERINTAH-PERINTAH APDU UNTUK SISTEM E-PURSE.

Select APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0x0 0xA4 0x04 0x0 0x08 Applet ID N/A

Respond APDU
Field Data Status Word Arti dari setiap status word
N/A 0x9000 Proses berhasil
0x6999 Seleksi applet gagal: applet tidak dapat ditemukan atau dipilih

A.1 Keamanan (BKE-like)
Authenticate APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x10 0x0 0x0 4+8+32=44 (Nterminal,TID,SessionKey) 4+4+8=16
4 Nterminal N/A
Nterminal = Nonce sent by Terminal
TID = Terminal’s ID
Respond APDU
Field Data Status Word Arti dari setiap status word
(Ncard,Nterminal,CID) 0x9000 Proses berhasil
N/A 0x6982 Kondisi keamanan tidak terpenuhi
0x6700 Salah ukuran
Ncard = Nonce sent by Terminal
CID = Card’s ID

SetPrivateKey APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x60 SizeOfExp SizeOfMod P1 + P2 (Exp, Mod) N/A

Respond APDU
Field Data Status Word Arti dari setiap status word
N/A 0x9000 Proses berhasil
0x6700 Salah ukuran
0x6A86 Parameter salah (P1,P2)

SetTerminalPublicKey APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x61 SizeOfExp SizeOfMod P1 + P2 (Exp, Mod) N/A

Respond APDU
Field Data Status Word Arti dari setiap status word
N/A 0x9000 Proses berhasil
0x6700 Salah ukuran
0x6A86 Parameter salah (P1,P2)

A.2 Balance
Credit APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x30 0x0 0x0 8+10+1+1 =20 (TID,Date,Amount,SeqNo) 1
Respond APDU
Field Data Status Word Arti dari setiap status word
SeqNo 0x9000 Proses berhasil
0x6A83 Jumlah tidak valid
0x6A84 Melewati jumlah maksimum
0x6982 Kondisi keamanan tidak terpenuhi
0x6700 Salah ukuran

Debit APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x40 0x0 0x0 8
10
1
1
=20 TID
Date
Amount
SeqNo 1
Respond APDU
Field Data Status Word Arti dari setiap status word
SeqNo 0x9000 Proses berhasil
0x6A83 Jumlah tidak valid
0x6A85 Balance negatif
0x6982 Kondisi keamanan tidak terpenuhi
0x6700 Salah ukuran

GetBalance APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x50 0x10 0x0 1 SeqNo 1+2=3
Respond APDU
Field Data Status Word Arti dari setiap status word
Amount
SeqNo 0x9000 Proses berhasil
0x6700 Salah ukuran

A.3 Personal Info
GetPersonalInfo APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x50 0x20 0x0 1 SeqNo 95+1 = 96

Respond APDU
Field Data Status Word Arti dari setiap status word
Name
Address
Phone
Date
Location
UserID
SeqNo 0x9000 Proses berhasil
0x6982 Kondisi keamanan tidak terpenuhi
0x6700 Salah ukuran

SetPersonalInfo APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x62 0x0 0x0 30
35
12
10
4
4
=95 Name
Address
Phone
Date
Location
UserID N/A
Respond APDU
Field Data Status Word Arti dari setiap status word
N/A 0x9000 Proses berhasil
0x6700 Salah ukuran
0x6A86 Parameter salah (P1,P2)

ResetPersonalInfo APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x63 0x0 0x0 95+1=96 Name
Address
Phone
Date
Location
UserID
SeqNo SeqNo
Respond APDU
Field Data Status Word Arti dari setiap status word
seqNo 0x9000 Proses berhasil
0x6700 Salah ukuran
0x6A86 Parameter salah (P1,P2)

A.4 Log
GetLog APDU Command
Command APDU
CLA INS P1 P2 Lc Field Data Le
0xB0 0x50 0x30 0x0 1 SeqNo 1+19*10+1 = 192
Respond APDU
Field Data Status Word Arti dari setiap status word
Number Of Records In the Log
Log
SeqNo 0x9000 Proses berhasil
0x6982 Kondisi keamanan tidak terpenuhi
0x6700 Salah ukuran

LAMPIRAN B. SPESIFIKASI KEBUTUHAN

I. Introduksi
Dokumen ini ditujukan untuk mendefinisikan kebutuhan-kebutuhan dari system e-purse. Kebutuhan-kebutuhan fungsional, non-fungsional, dan model use-case secara bersaam menangkap sekumpulan kebutuhan dari system.
I.1. Tujuan
Spesifikasi kebutuhan-kebutuhan diturunkan dari kebutuhan-kebutuhan yang disebutkan pada deskripsi permasalahan seperti telah disebutkan pada bagian pendahuluan .
I.2. Definitions, Acronyms and Abbreviations

Istilah Definisi
Terminal Aplikasi perangkat lunak yang berinteraksi dengan smart card-smart card
DoS Denial of Service. – serangan terhadap ~: percobaan untuk menghancurkan ~

I.3. Referensi

Identifikasi Referensi
OCF OpenCard Framework, OpenCard Workgroup,

http://www.opencard.org/

PC/SC Personal Computer Smart Card, PC/SC Workgroup,

http://www.pcscworkgroup.com/

II. Kebutuhan – Kebutuhan
II.1. Kebutuhan-Kebutuhan Fungsional
(a) Card + Applet
ID Nama Deskripsi Kepentingan
1.1 Ada Balance Applet e-purse memiliki suatu balance dalam smart card. Balance tersebut haruslah suatu bilangan integer non-negatif. Must
1.2 Penambahan ekslusif Balance dapat ditambah hanya bila menggunakan terminal. Must
1.3 Pengurangan ekslusif Balance dapat dikurangi hanya bila menggunakan terminal Must
1.4 Spesifikasi balance Balance dapat di-update dengan jumlah tertentu. Must
1.5 Spesfikasi balance awal Balance awal dari smart card diset pada jumlah tertentu. Must
1.6 Non-repudiasi Ada log pada kartu untuk melacak 16 transaksi terakhir. Optional

(b) Terminal
ID Nama Deskripsi Kepentingan
2.1 Fungsi penambahan pada Terminal Terminal dapat menambah balance pada smart card dan menangani kasus overflow. Must
2.2 Fungsi pengurangan pada Terminal Terminal dapat mengurangi balance pada smart card dan menangani kasus underflow. Must
2.3 Akses balance pada Terminal Terminal dapat membaca jumlah dari balance pada kartu Must
2.4 Akses log pada Terminal Terminal dapat membaca log pada kartu. Optional
II.2. Kebutuhan-Kebutuhan Non-Fungsional
(a) Card + Applet
ID Nama Deskripsi Kepentingan
3.1 Performa Transaksi kartu harus cepat, dimana setiap transaksi dapat dilakukan dalam 1 detik. Must

(b) Terminal
ID Nama Deskripsi Kepentingan
4.1 Keamanan Transaksi kartu aman (seperti 3DES) Must
4.2 Performa Setiap transaksi kartu harus cepat (dalam 1 detik) Must

II.3. Komponen yang Digunakan
(a) Perangkat Keras untuk Terminal
For the terminal the following hardware is used:
• Windows XP compatible computer dengan konektor USB
• Contact Smart Card Reader (GempPC Twin)

(b) Smart card
Smart-card berikut ini yang digunakan:
• JCOP id21
• JCOP bio31

II.4. Interface-Interface
(c) Perangkat Keras

Sistem terminal terdiri dari suatu PC yang terhubung pada CHIPdrive (GempPC Twin) melalui port USB.
(d) Perangkat lunak

PC/SC menjadi interface terhadap perangkat keras [12]. OCF menyediakan suatu framework untuk solusi bagi smart card yang inter-operable yang digunakan oleh perangkat lunak dari Terminal. Applet java yang berjalan pada smart card menggunakan framework JCOP. IBM JCOP adalah suatu implementasi dari sejumlah standard smart card terbuka seperti JavaCard™, GlobalPlatform dan ISO (7816, 14443).

LAMPIRAN C. TEST LIST

Id Deskripsi Hasil
TC01 Mengetes fungsi personalisasi kartu (personalizedCard) OK
TC02 Mengetes fungsi autorisasi pengguna (verifyPin) OK
TC03 Mengetes fungsi penampilan nilai simpanan (getBalance) OK
TC04 Mengetes fungsi pengurangan nilai simpanan (debet) dengan jumlah X, dimana nilai simpanan adalah > X dan X>0 OK
TC05 Underflow. Mengetes fungsi pengurangan nilai simpanan (debet) dengan jumlah X, dimana nilai simpanan X OK
TC07 Overflow. Mengetes fungsi penambahan nilai simpanan (credit) dengan jumlah X, dimana nilai simpanan sudah maksimum dan X > 1 OK
TC08 Mengetes fungsi penampilan log (log) OK
TC09 Mengetes sistem logging transaksi pengguna setelah pertama kali diinisialisasi OK
TC10 Mengetes sistem logging transaksi pengguna setelah transaksi debet pertama OK
TC11 Mengetes sistem logging transaksi pengguna setelah transaksi credit pertama OK
TC12 Mengetes sistem logging transaksi pengguna setelah transaksi debet ke-11 OK
TC13 Mengetes sistem logging transaksi pengguna setelah transaksi credit ke-11 OK

LAMPIRAN D. PENGELOLAAN SUMBER DAYA

Dalam suatu Java Card, semua jenis sumber daya sangatlah terbatas. Hal ini dikarenakan oleh ukuran fisik dari kartu yang relatif kecil, walaupun pada dasarnya teknologi ini sudah sangat berkembang sehingga memungkinkan ukuran memory dan sumber daya lainnya menjadi lebih besar. Sebagai akibatnya, semua pembangun applet harus menyadari hal ini dan selalu berusaha untuk mengawai konsumsi sumber daya dari applet yang ia bangun. Bagian ini akan menjelaskan beberapa topik sebagai berikut:
– Pengelolaan EEPROM secara umum
– Pengelolaan dan pengalokasian obyek
– Pengelolaan RAM
Secara khusus beberapa strategi untuk mengelola sumber daya akan diilustrasikan disini.
I. Pengelolaan EEPROM
I.1. Pengorganisasi EEPROM
EEEPROM dalam suatu Java Card umunya memiliki hal-hal berikut ini:
– Data sistem global, data seperti ini meliputi antara lain buffer-buffer yang digunakan sebagai backup untuk integritas, atau informasi global lainnya tentang kartu itu sendiri. Data ini juga mungkin meliputi sejumlah data yang dikelola kode native (contohnya file-file yang ditangani oleh file system native)
– Bytecode, kode yang didownload oleh semua aplikasi dan library disimpan dalam EEPROM. Pada kebanyakan aplikasi, kode mengkonsumsi relatif cukup banyak ruang EEPROM.
– Obyek-obyek Java, semua obyek-obyek java disimpan di dalam EEPROM. Ini meliputi obyek-obyek yang dibuat oleh aplet ROM dan juga applet-aplet yang di-download.
I.2. Paket-Paket dan Kode
Paket-paket dan kode dapat disimpan baik di dalam ROM maupun di dalam EEPROM. Disini kita hanya membicarakan tentang kode yang disimpan EEPROM. Ada dua jenis paket seperti ini, yaitu:
– Library packages, suatu paket library yang tidak mengandung komponen applet. Ini berarti bahwa paket ini tidak mengandung kelas applet apapun yang dapat diinstansiasi. Dalam paket seperti ini semua kelas yang dideklarasikan sebagai publik dimungkinkan untuk dilink.
– Application packages, suatu paket aplikasi adalah suatu paket yang mengandung suatu komponen applet. Ini berarti bahwa paket ini mengandung setidaknya satu kelas applet yang dapat diinstansiasi, dan kelas ini telah diasosiasikan dengan suatu AID applet. Dalam paket seperti hanya antarmuka yang mengekstensi antarmuka yang di-share yang dibuat publik.
Untuk kedua jenis paket ini dimungkinkan untuk menghitung jumlah memory yang diperlukan untuk menyimpan suatu paket maupun memasukkan paket untuk suatu platform tertentu. Nilai yang terakhir biasanya lebih tinggi sedikit dibanding yang pertam. Ini dikarenakan proses memasukkan paket membutuhkan pengalokasian buffer sementara. Akan tetapi, hal ini jarang memunculkan masalah karena biasanya ukuran overhead cukup kecil, khususnya dibandingkan dengan jumlah data yang dibutuhkan oleh suatu applet atau dibandingkan dengan ukuran dari applet itu sendiri.
I.3. Obyek
Obyek-obyek dapat disimpan baik di dalam EEPROM maupun dalam RAM. Akan tetapi, kebanyakan obyek disimpan di dalam EEPROM. Ada sejumlah strategi untuk pengalokasian dan pengelolaan obyek yang dapat sangat mempengaruhi total jumlah ruang yang diperlukan oleh suatu obyek.

II. Pengelolaan dan Pengalokasian Obyek
II.1. Biaya dari Suatu Obyek
Suatu obyek melingkupi ruang memory karena dua alasan utama, yaitu:
– Ruang untuk menyimpan komponen-komponennya (elemen-elemen field, array)
Ruang ini bergantung pada tipe dari komponen, dan akan dijelaskan lagi kemudian.
– Ruang overhead dibutuhkan oleh sistem pengelola memory.
Overhead ini mencakup setidaknya satu header, dan kadang-kadang lebih, sebagaimana dijelaskan kemudian.

Dalam obyek-obyek instan dari kelas, semua field melingkupi setidaknya 2 byte memory, termasuk field-field byte dan Boolean. Pada suatu platform yang tidak mendukung integer 32 bit, semua field melingkupi 2 byte. Sebagai akibatnya, sangatlah mahal untuk mendefinisikan banyak field byte dan Boolean dalam suatu obyek. Dimungkinkan untuk mengurangi ukuran dari obyek-obyek dengan cara mengelompokkan field-field ini kedalam field short 16 bit. Untuk array, situasinya sedikit berbeda. Pada suatu array dari byte, setiap elemen hanya melingkupi 1 byte. Satu-satunya pengecualian disini adalah tipe data Boolean, dimana untuk semua impelementasi Gemplus, suatu array dari nilai Boolean membutuhkan satu byte untuk setiap elemen (kebanyakan dikarenakan instruksi bytecode yang digunakan untuk array ini sama dengan array byte).
II.2. Mengatasi Pengalokasian Obyek
Pada platform Java Card 2.1., pengalokasian obyek perlu dibatasi dengan dua alasan, yaitu:
– Memory yang ada sangat terbatas
– Tidak ada cara untuk mendaur ulang memory yang digunakan oleh obyek-obyek yang terhilang. Memory yang digunakan oleh suatu applet dan obyek-obyeknya hanya akan dilepas ketika baik applet maupun keseluruhan paket dihapus.
Ada 3 strategi yang dapat dilakukan untuk mengatasi pengalokasian obyek, yaitu:
– Alokasikan semua obyek pada saat instalasi applet.
Strategi ini sering direkomendasikan, khususnya oleh Sun. Untuk applet sederhana dengan jumlah data yang tetap, strategi ini sangatlah aman. Hal yang paling penting adalah bahwa proses instalasi akan gagal ketika memory tidak cukup tersedia pada kartu untuk mengalokasikansemua obyek-obyek, yang berarti memudahkan untuk menemukan kembali semua ruang memory yang dilingkupi oleh instansiasi dari suatu applet.
– Alokasi semua obyek pada saat instalasi dan personalisasi applet
Pada applet yang lebih kompleks, pengguna applet ditawari dengan fleksibilitas yang terlalu besar, dan tidaklah beralasan untuk mengalokasikan semua obyek-obyek pada saat instalasi applet. Akan tetapi, sangat sering, pengalokasian dapat dibatasi pada fase personalisasi (pada saat semua obyek diinisialisasi). Kelemahan dari pendekatan ini adalah jika applet kekurangan memory pada akhir fase personalisasi, ada ruang-ruang yang terhilang. Kelemahan yang lain adalah suatu perintah yang mengalokasikan obyek-obyek mungkin tidak sengaja tersedia bagi user untuk digunakan setelah fase personalisasi.
– Alokasi obyek-obyek ketika mereka dibutuhkan
Pendekatan ini sangatlah berbahaya, karena applet mungkin kekurangan memory pada suatu saat. Hal ini hanya dipersiapkan untuk applet yang sangat terbuka, dan harus diasosiasikan kepada suatu tindakan jaga-jaga tertentu. Contohnya, semua perintah yang boleh men-trigger suatu proses pengalokasian hanya tersedia pada mode dengan kepemilikan khusus.

III. Pengelolaan RAM
III.1. Obyek Transient
Obyek yang transient memiliki dua buah properti yang membuatnya sangat praktis untuk applet-applet, yaitu:
– Field-fieldnya dapat diakses dengan cepat dan berulang-ulang (sangat berguna untuk informasi yang sering dimodifikasi, seperti suatu referensi pada ‘file terkini’ atau ‘record terkini’).
– Field-field direset ketika suatu even tertentu muncul, sehingga obyek-obyek tersebut dapat digunakan untuk menyimpan status keamanan.
Akan tetapi, kedua properti ini membutuhkan field-field dari obyek-obyek tersebut tersimpan dalam RAM, yang sangatlah terbatas. Oleh karena itu, pengalokasian obyek-obyek ini haruslah sangat terkotrol.
Pada Java Card 2.1., obyek-obyek transient hanya boleh dalam bentuk array. Suatu aturan standard dapat digunakan untuk menentukan ukuran yang dilingkupi oleh suatu array transient: Object descriptor disimpan di EEPROM, dan elemen-elemen dari array yang disimpan di RAM. Hal ini membuat penghitungan jumlah RAM yang dikonsumi menjadi lebih mudah.
Akan tetapi, ada dua jenis obyek transient, yaitu:
– Obyek transient CLEAR_ON_DESELECT dihapus setiap kali suatu applet di-deselect ( yakni, ketika applet lain yang dipilih, atau ketika kartu direset). Obyek-obyek ini digunakan untuk semua field-field standard.
– Obyek transient CLEAR_ON_RESET dihapus hanya ketika kartu direset. Fitur ini dapat menjadi sangat berguna untuk mempertahankan suatu nilai atas beberapa pemilihan applet.
Obyek transient CLEAR_ON_RESET biasanya adalah obyek-obyek yang di-share, karena obyek ini adalah satu-satunya obyek untuk applet yang diakses melalui mekanisme shareable. Obyek transient CLEAR_ON_DESELECT adalah overlaid, dan karenanya hanya applet yang terpilih pada satu saat yang dapat mengaksesnya.
III.2. Obyek Sementara
Obyek sementara (temporary object) adalah suatu tipe obyek yang tidak wajib, yang saat ini sedang dibahas dalam Java Card Forum, dan akan distandardisasi pada spesifikasi Java Card berikutnya. Obyek ini hanya digunakan untuk applet-applet yang akan dimasukkan pada kartu GemExpresson 211 karena interoperabilitas tidak dapat dijamin pada saat ini.

LAMPIRAN E. TEST CASPER

Iterasi ke-0
— Bilateral Key Exchange

– abstract protocol

#Free variables
A, B : Agent
na, nb, nc, nd : Nonce
pk : Agent -> PublicKey
sk : Agent -> SecretKey
kab : SessionKey
InverseKeys = (pk,sk), (kab,kab)

#Processes
INITIATOR(A,na,nc) knows pk, sk(A)
RESPONDER(B,nb,kab,nd) knows pk, sk(B)

#Protocol description
0. -> A : B
1. A -> B : { na, A }{ pk(B) }
2. B -> A : { na, nb, B, kab }{ pk(A) }
3. A -> B : { nb }{ kab }
4. B -> A : B
5. A -> B : { nc }{ kab }
6. B -> A : { nd }{ kab }

#Specification
Agreement(A,B,[na,nb])
Agreement(B,A,[na,nb])
— Secret(A,kab,[B])
— Secret(B,kab,[A])
Secret(A,nc,[B])
Secret(B,nd,[A])

– concrete protocol

#Actual variables
Alice, Bob, Mallory : Agent
Na, Nb, Nm , Nc, Nd: Nonce
Kab : SessionKey
InverseKeys = (Kab,Kab)

#Functions
symbolic pk, sk

#System
INITIATOR(Alice,Na,Nc)
RESPONDER(Bob,Nb,Kab,Nd)

#Intruder Information
Intruder = Mallory
IntruderKnowledge = { Alice, Bob, Mallory, Nm, pk, sk(Mallory) }

Iterasi ke-1
— Bilateral Key Exchange with sequence numbers during the session

– abstract protocol

#Free variables
A, B : Agent
na, nb, nc, nd : Nonce
pk : Agent -> PublicKey
sk : Agent -> SecretKey
kab : SessionKey
nr1: Number1
nr2: Number2
InverseKeys = (pk,sk), (kab,kab)

#Processes
INITIATOR(A,na,kab,nc,nr1) knows pk, sk(A)
RESPONDER(B,nb,nd,nr2) knows pk, sk(B)

#Protocol description
0. -> A : B
1. A -> B : { na, A,kab }{ pk(B) }
2. B -> A : { na, nb, B }{ pk(A) }
3. A -> B : { nb }{ kab }
4. B -> A : B
5. A -> B : { nc,nr1 }{ kab }
6. B -> A : { nd,nr2 }{ kab }

#Specification
Agreement(A,B,[na,nb,kab])
Agreement(B,A,[na,nb,kab])
Secret(A,nc,[B])
Secret(B,nd,[A])

– concrete protocol

#Actual variables
Alice, Bob, Mallory : Agent
Na, Nb, Nm , Nc, Nd: Nonce
Nr1: Number1
Nr2: Number2
Kab : SessionKey
InverseKeys = (Kab,Kab)

#Functions
symbolic pk, sk

#System
INITIATOR(Alice,Na,Kab,Nc,Nr1)
RESPONDER(Bob,Nb,Nd,Nr2)

#Intruder Information
Intruder = Mallory
IntruderKnowledge = { Alice, Bob, Mallory, Nm, Nr1, Nr2, pk, sk(Mallory) }

”ARSITEKTUR KOMPUTER”


UJIAN MID SEMESTER
”ARSITEKTUR KOMPUTER”

O L E H :

HERI HARDI
2005/66387
T. ELEKTRONIKA

FAKULTAS TEKNIK
UNIVERSITAS NEGERI PADANG
2007
1. Apa yang dimaksud dengan
– Transistors and wires
Merupakan tingkatan system computer yang paling bawah atau low level.Dikatakan demiikian karena transistor dan wire ini merupakan komponen yang akan digabungkan menjadi suatu system yang membentuk system di atasnya atau demgan kata lain akan membentuk suatu system yang lebih tinggi tingkatannya.
– Logic gates
Gerbang dasar merupakan system yang terbentuk dari gabungan sistem-sistem transistor.Suatu gerbang dasar terbentuk lebih dari satu transistor,yang mana transistor-transistor tersebut akan memiliki operasi yang memenuhi operasi logika dari suatu gerbang dasar.
– Functional units(memory,alu,etc)
Functional unit juga memiliki keterikatan dengan system logic gates,karena system ini merupakan gabungan dari system logic gate yang membentuk system yang sangat kompleks .Sebagai contoh konstruksi dasar dari suatu memory adalah rangkaian flip-flop ,yang mana rangkaian flip-flop ini dibentuk dari sekumpulan logic gates yang membentuk system flip-flop tersebut.
– Microprogramed
Merupakan sekumpulan algoritma yang membentuk suatu system yang mampu atau berfungsi sebagai control dari hardwired yang terdapat dalam suatu system computer yang utuh.Microprogrammed ini akan berfungsi mengatur lalu lintas data juga instruksi yang akan melewati (keluar/masuk) system functional units
– Assembly Languague
Assembler menyediakan banyak fasilitas yang dapat menolong pemrogram misalnya kemampuasn untuk memakai program yang pernah ditulis sebagai bagian dari program baru dan kemampuan untuk memakai berbagai rutin dari program-program itu sebagai bagian dari program baru.
Ini berrti bahwa program yang tertulis dalam bahasa assembly daapt disambung dengan berbagai cara.

- High Level Languange
Adalah merupakan bahasa tersederhana yang dipakai dalam banyak pemecahan persoalan dan tersederhana untuk dipelajari namun sering kali bahasa ini menunjukan sedikit sekali tentang mesin digital yang merupakan alat untuk menjalankannya.perancangan ini memusatkan pikiran dalam cara spesifikasi bahasa pemrograman yang cukup sederhana untuk pemakai yang umum,tetapi mempunyai fasilitas yang cukup sehingga membuat bahasa dan compiler yang bersangkutan berharga untuk pemrogram profesioanal.Program ayng ditulis dalam bahasa ini dapat dijalankan pada computer mana saja yang memiliki compiler atau penerjemah untuk bahasa itu.
– User level: application programs
User level adalah level tertinggi dari tingkatan system computer.System ini merupakan suatu program yang dapat diakses langsung oleh user untuk mempermudah pekerjaan yang dilakukan user tersebut.

2. Proses reperentasi data yang terjadi pada saat suatu input diberikan pada suatu perangkat input, hingga diperoleh suatu keluaran yang dapat dimengerti oleh user.

Di bagian ini, perangkat keras komponen yang utama memerlukan untuk komunikasi antara dan pengolah Sarana I/O. Protokol ini harus diprogramkan dalam wujud rutin yang mengalir dibawah kendali dari CPU. Pertimbangkan untuk contoh, suatu operasi masukan dari Alat 6 ( bisa menjadi papan tombol) di dalam kasus I/O yang bersama Pengaturan. Mari kita juga berasumsi bahwa ada delapan I/O berbeda alat menghubungkan kepada pengolah dalam hal ini ( lihat Buah ara. 8.4).
protokol Langkah-Langkah berikut ( program) harus diikuti:

1. Pengolah melaksanakan suatu instruksi masukan dari alat 6, sebagai contoh,input 6. Efek pelaksanaan instruksi ini akan mengirimkan ke peralatan alamat Nomor jumlah kepada Decoder untaian alamat pada setiap alat masukan dalam rangka mengidentifikasi alat masukan yang spesifik untuk dilibatkan. Dalam hal ini, keluaran dari Decoder di Alat # 6 akan diaktifkan, sedang keluaran dari semua Decoder lain akan dinon aktifkan.
2. Penyangga yang di contohkan ada delapan penyangga/bantalan seperti itu pemilikan data dalam alat masukan yang ditetapkan ( Alat # 6) akan diaktifkan oleh keluaran tentang Decoder untaian alamat.
3. data Keluaran dari Buffer akan tersedia pada data bus.
4. instruksi akan Memecahkan kode data yang tersedia pada data bus ke dalam
masukan daftar tertentu di (dalam) CPU, yang secara dinormal Accumulator.

keluaran Operasi dapat dilakukan dengan cara serupa kepada operasi masukan yang diterangkan di atas. Satu-Satunya perbedaan akan menjadi arah perpindahan data, yang akan terjadi dari suatu CPU spesifik mendaftarkan kepada keluaran mendaftarkan di keluaran yang ditetapkan alat Operasi . I/O dilakukan pada cara ini disebut I/O terprogram Itu semua dilakukan di bawah kendali CPU. Suatu instruksi lengkap mengambil, memecahkan kode, dan melaksanakan siklus akan harus dieksekusi untuk tiap-tiap masukan dan tiap-tiap operasi keluaran.I/O Yang terprogramkan adalah digunakan padasuatu kasus satu karakter dalam satu waktu karakter serentak yang ditransfer, sebagai contoh, papan tombol dan Saat memprintf. Walaupun sederhana,I/O yang diprogramkan lambat.

Satu hal yang itu dilewatkan di atas uraian I/O terprogram adalah bagaimana cara menangani perbedaan kecepatan yang substansiil antara Sarana I/O dan pengolah. Suatu mekanisme harus diadopsi dalam rangka memastikan bahwa suatu karakter mengirim untuk daftar keluaran dari suatu alat keluaran, seperti suatu layar, bukanlah overwritten oleh pengolah (processor’s kecepatan tinggi) yang ditunjukkan dan bahwa suatu karakter berada di daftar masukan suatu papan tombol adalah dibaca hanya sekali ketika oleh pengolah. Ini mendidik isu dari menyangkut alat keluaran dan masukan. Suatu mekanisme bahwa dapat diterapkan memerlukan ketersediaan suatu Status dalam alat penghubung dari tiap alat masukan dan Status Bit dalam alat penghubung dari tiap alat keluaran .
3. Kosep logika yang ada pada Basic logic gate
• Gerbang AND :dalam konsep logikanya bisa diartikan sebagai proses perkalian

A B OUT
0 0 0
0 1 0
1 0 0
1 1 1
• Gerbang OR :dalam konsep logikanya dapat berarti proses penjumlahan

A B OUT
0 0 0
0 1 1
1 0 1
1 1 1
• Gerbang NOT :dalam konsep logikanya adalah negasi/lawan/kebalikan

A OUT
0 1
1 0

4. Metoda yang digunakan untuk pengukuran kinerja computer
Pertama, menggunakan parameter sistem itu sendiri misalnya laju detak prosesor atau jumlah instruksi yang dapat diproses tiap satuan waktu. Jumlah instruksi yang diproses dalam satuan waktu tertentu diekspresikan dalam ‘satuan’ MIPS (millions instruction per second). Ukuran ini menjadi tidak adil digunakan pada komputer yang menggunakan prosesor dengan arsitektur berbeda. Prosesor berarsitektur RISC misalnya, memerlukan lebih banyak instruksi untuk menjalankan suatu tugas (task) tertentu dibandingkan dengan prosesor berasitektur CISC. Dengan ukuran MIPS, prosesor RISC akan tampak bekerja jauh lebih cepat (menjalankan lebih banyak instruksi per satuan waktu) dibanding prosesor CISC meskipun lama waktu yang digunakan untuk menyelesaikan satu tugas bisa jadi sama.
Kedua adalah dengan menggunakan benchmark sintetis. Whetstone dan Dhrystone merupakan contoh benchmark sintetis yang banyak digunakan untuk mengukur kinerja komputer. Benchmark sintetis berupa program pendek yang dibuat menyerupai tingkah-laku program aplikasi yang ada. Melalui kajian mendalam terhadap berbagai program aplikasi yang ada, dibuat suatu program pendek yang merupakan gabungan dari berbagai komputasi matematis, kalang (loop), pemanggilan fungsi, dan sebagainya. Terhadap pengukuran dengan benchmark sintetis terdapat dua kelemahan. Selain keraguan apakah program yang disusun benar-benar mewakili program aplikasi yang sebenarnya, keraguan hasil pengukuran juga disebabkan oleh mudahnya teknik pengukuran ini dimanipulasi dengan melakukan optimisasi kompilator
5. Arsitektur,set instruksi dan kelemahan dari mesin von newman
 Arsitektur
• Unit Input : unit ini menyediakan instruksi-instruksi dan data ke dalam system yang mana secara sub sequence tersimpan di dalam memory.
• Memory Unit : merupakan perangkat yang digunakan untuk menyimpan data/instruksi.
• Aritmathic Logic Unit : merupakan unit yang berfungsi untuk memproses atau mengolah data dan instruksi yang pemrosesan ini di control oleh unit lain yang disebut unit control.
• Control Unit : merupakan bahagian yang berfungsi dalam mengatur lalu lintas data dan instruksi diantara komponen – komponen utama pemroses
• Unit Output : merupakan unit yang berfungsi untuk mererpresentasikan data hasil pemrosesan.
 Set Instruksi
• Data Transfer adalah memindahkan data diantara memory dengan register_register ALU atau antara dua register ALU
• Unconditional branch adalah control unit yang mengeksekusi instruksi- instruksi di dalam urutan memory .Urutan ini dapat diubah dengan instruksi percabangan
• Conditional Branch adalah caabng ayng dapt yang dibuat yang tergantung pada suatu persyaratan jadi memungkinkan titik –titik keputusan.
• Arimathic adalh operasi- operasi yang dibentuk oleh ALU
• Address Modify adalah memungkinkan alamt-alamat untuk dikomputasi di dalam Alu dan kemudian disisipankan ke dalam instruksi-instruksi yang disimpan didalam memory.
 Kelemahan mesin von Newman
• Von neuman mengembangkan mesinnya dengan membagi bus-bus system menjadi tiga bagian,yakni bus data ,bus alamat dan bus control. Oleh karena itu agar tidak terjadi kesalahan dalam mengidentifikasi masing masing komponen maka untuk itu dikembangkanlah dalam system computer modern yang disebut system pengalamatan untuk I/O dan untuk memory

Definisi Dalam Arsitektur Komputer


Definisi Dalam Arsitektur Komputer

Definisi :
• Clock rate : Balikan dari clock cycle time, seringkali diukur dalam MHz.
• Penghitungan instruksi : Jumlah instruksi yang dieksekusi ketika menjalankan sebuah program.
• MIMD (multiple instruction stream, multiple data stream) : Sebuah multiprocessor atau multicomputer..
• SIMD (single instruction stream, multiple data stream) : Sebuah array processor.
• SISD (single instruction, single data stream) : Sebuah uniprocessor.
• Superscalar : Sebuah mesin yang mengeksekusi multiple instruksi per clock cyle dengan instruksi yang dikeluarkan kontroler secara dinamis oleh hardware.
• VLIW : Sebuah mesin yang mengeksekusi multiple instruksi per clock cycle dengan instruksi yang dikeluarkan kontroler secara statis oleh software.
• CPI : Clock cycles per instruksi.
• Antidependence :Hasil yang bergantung dari penggunaan kembali dari nama; bersesuaian dengan WAR hazard.
• ATM (Asynchronous transfer mode) : Sebuah switch berdasarkan standar jaringan.
• Big Endian : Byte dengan alamat biner “x…x100” dalam posisi yang paling signifikan (“big end”) dari 32 bit word.
• Data dependence : Ketergantungan yang nyata yang dihasilkan dari penggunaan nilai data yang dihasilkan oleh pernyataan yang baru; bersesuaian dengan sebuah RAW hazard.
• DSM : Distributed shared memory.
• Hit rate : Pecahan dari referensi memori yang ditemukan dalam cache, sam dengan 1 – Miss rate.
• Hit time : Waktu akses memori untuk sebuah cache hit , termasuk waktu untuk menentukan jaka hit atau miss.
• Little Endian : byte dengan alamat biner “x…x00” dalam posisi signifikan terkecil.
• Miss penalty : Waktu untuk memindahkan sebuah blok dalam level atas dari system cache dengan korespondensi blok dari level yang lebih bawah.
• Miss rate : Pecahan dari referensi memori yang tidak ditemukan dalam cache, sama dengan 1 – Hit rate.
• N1/2 : Panjang vector yang dibutuhkan untuk mencapai 1 setengah R∞.
• Nv : Panjang vector yang dibutuhkan sehingga mode vector lebih cepat dari mode scalar.
• Output dependance : Hasil yang bergantung dari dua penulisan ke nama yang sama; bersesuaian dengan WAW hazard.
• R∞ : megaFLOPS rate dari sebuah vector dengan panjang tak terbatas.
• RAW data hazard (membaca setelah menulis) : sebuah instruksi mencoba unruk membaca sumber sebelum instruksi yang lama menulisnya. Jadi tidak benar mendapat nilai yang lama.
• Spatial locality (locality dalam space) : Jika sebuah item direferensikan, item yang dekat akan cenderung direferensikan segera.
• Temporal locality (locality dalam waktu) : Jika sebuah item direferensikan, Hal ini akan berusaha direferensikan lagi segera.
• TCP/IP ( Transmission Control Protocol/Internet Protocol) : Standar protocol jaringan yang digunakan pada internet.
• WAR data hazard (menulis setelah membaca) : Sebuah instruksi yang mencoba untuk menulis tujuan sebelum ini dibaca oleh instruksi yang lama, jadi instruksi yang lama tidak benar mendapat nilai baru.
• WAW data hazard (menulis setelah menulis) : sebuah instruksi yang mencoba untuk menulis sebuah operand sebelum ini ditulis oleh sebuah instruksi yang lama. Penulisan dilaksanakan dalam order yang salah, tidak benar meninggalkan nilai dari instruksi lama dalam tujuan.

Referensi : John L Hennessy, David Patterson, Computer Architecture a Quantitative
Approach. Morgan Kaufmann Publisher,Inc 1996.

Arsitektur


PENDAHULUAN

1. Kebutuhan akan Pengolahan Paralel

Motivasi :
-. Pengolahan data numerik dalam jumlah yang sangat besar.
-. Kebutuhan akan ketersediaan data yang senantiasa up to date.

Contoh 1.1. :

Simulasi sirkulasi global laut di Oregon State University.
Lautan dibagi ke dalam 4096 daerah membentang dari timur ke barat, 1024 daerah membentang dari utara ke selatan dan 12 lapisan. Berarti terdapat sekitar 50 juta daerah berdimensi tiga.
Satu iterasi mampu mensimulasikan sirkulasi lautan untuk jangka waktu 10 menit dan membutuhkan sekitar 30 milyar kalkulasi floating point. Para ahli kelautan ingin menggunakan model tersebut untuk mensimulasikan sirkulasi lautan untuk periode 1 tahun.

Pengolahan Paralel :
-. pengolahan informasi yang menekankan pada manipulasi data-data elemen secara simultan.
-. dimaksudkan untuk mempercepat komputasi dari sistem komputer dan menambah jumlah keluaran yang dapat dihasilkan dalam jangka waktu tertentu.

Komputer Paralel :
-. Komputer yang memiliki kemampuan untuk melakukan pengolahan paralel.

Throughput :
-. Banyaknya keluaran yang dihasilkan per unit waktu.

Peningkatan throughput dapat dilakukan dengan :
-. Meningkatkan kecepatan operasi
-. Meningkatkan jumlah operasi yang dapat dilakukan dalam satu waktu tertentu (concurrency).

2. Paradigma Pengolahan Paralel

2.1. M. J. FLYNN

Pengklasifikasian oleh Flynn, dikenal sebagai Taksonomi Flynn, membedakan komputer paralel ke dalam empat kelas berdasarkan konsep aliran data (data stream) dan aliran instruksi (instruction stream), sebagai : SISD, SIMD, MISD, MIMD.

SISD (Single Instruction stream, Single Data stream)
Komputer tunggal yang mempunyai satu unit kontrol, satu unit prosesor dan satu unit memori.

[Akl 1989]

SIMD (Single Instruction stream, Multiple Data stream)
Komputer yang mempunyai beberapa unit prosesor di bawah satu supervisi satu unit common control. Setiap prosesor menerima instruksi yang sama dari unit kontrol, tetapi beroperasi pada data yang berbeda.

[Akl 1989]
MISD (Multiple Instruction stream, Single Data stream)
Sampai saat ini struktur ini masih merupakan struktur teoritis dan belum ada komputer dengan model ini.

[Akl 1989]

MIMD (Multiple Instruction stream, Multiple Data stream)
Organisasi komputer yang memiliki kemampuan untuk memproses beberapa program dalam waktu yang sama. Pada umumnya multiprosesor dan multikomputer termasuk dalam kategori ini.

[Akl 1989]

2.2. T.G. LEWIS

T.G. Lewis membedakan komputer paralel ke dalam dua kelas, berdasarkan ada atau tidak adanya common global clock, sebagai : synchronous dan asynchronous.

Gambar 1.
Taksonomi Parallel Computing oleh T.G. Lewis dkk.
[Lewis,1992]

Synchronous :
-. Pada komputer paralel yang termasuk dalam kategri ini terdapat koordinasi yang mengatur beberapa operasi untuk dapat berjalan bersamaan sedemikian hingga tidak ada ketergantungan antar operasi.
-. Parallelism yang termasuk dalam kategori ini adalah vector/array parallelism, SIMD dan systolic parallelism.
-. Systolic parallel computer adalah multiprocessor dimana data didistribusikan dan dipompa dari memory ke suatu array prosesor sebelum kembali ke memory.

Asynchronous :

-. Pada komputer paralel yang termasuk dalam kategori asynchronous, masing-masing prosesor dapat diberi tugas atau menjalankan operasi berbeda dan masing-masing prosesor melaksanakan operasi tersebut secara sendiri-sendiri tanpa perlu koordinasi.
-. Paradigma yang juga termasuk dalam kategori ini adalah MIMD dan reduksi.
-. Paradigma reduksi adalah paradigma yang berpijak pada konseph graph reduksi. Program dengan model reduksi diekspresikan sebagai graph alur data. Komputasi berlangsung dengan cara mereduksi graph dan program berhenti jika graph akhirnya hanya mempunyai satu simpul.

2.3. MICHAEL J. QUINN

Quinn membedakan paralelisma ke dalam dua jenis : Data Parallelism dan Control Parallelism.

Data Parallelism :
penerapan operasi yang sama secara simultan terhadap elemen-elemen dari kumpulan data.

Control Parallelism :
penerapan operasi-operasi berbeda terhadap elemen-elemen data yang berbeda secara bersamaan. Pada control parallelism dapat terjadi aliran data antar proses-proses dan kemungkinan terjadi aliran data yang kompleks/rumit.
Pipeline merupakan satu kasus khusus dari control parallelism dimana aliran data membentuk jalur yang sederhana.

Gambar 4.
Ilustrasi perbandingan pipelining dengan data parallelism.
[Quinn 1994]

Contoh :

Perhatikan ke-empat taman yang harus dirawat berikut ini :

a. Tanaman Pagar b. Lapangan rumput c. Kebun bunga

Nama Pekerjaan Pekerja
1. Merapihkan tanaman pagar
Ali ,
Budi ,
Cipto,
Dadang,
Edi
2. Memangkas rumput
Frans,
Gugun
3. Menanam bibit bunga
Heru,
Indra,
Joko
4. Menyiram taman Ali

Pekerjaan 4 dapat dilakukan jika ketiga pekerjaan 1, 2 dan 3 telah selesai. Pekerjaan 1, 2 dan 3 dapat dilakukan secara bersamaan, sebagai contoh control parallelism. Masing-masing pekerjaan adalah contoh data parallelism. Sementara pekerjaan 4 dikerjakan pada sebuah taman, pekerjaan 1, 2 dan 3 dapat dikerjakan pada satu taman yang lain.

3. Terminologi
Pengolahan Paralel :
pengolahan informasi yang ditekankan pada manipulasi elemen data yang dimiliki oleh satu atau lebih dari satu proses secara bersamaan dalam rangka menyelesaikan sebuah problem.
Komputer Paralel :
komputer multi-prosesor dengan kemampuan melakukan pengolahan paralel.
Supercomputer :
sebuah general-purpose computer yang mampu me-nyelesaikan problem dengan kecepatan komputasi sangat tinggi. Semua superkomputer kontemporer adalah komputer paralel. Beberapa di antaranya memiliki prosesor yang sangat kuat dalam jumlah yang relatif sedikit, sementara yang lainnya dibangun oleh mikroprosesor dalam jumlah yang cukup besar.
Throughput :
banyaknya keluaran yang dihasilkan per unit waktu
Pipeline :
Pada komputasi pipelined, komputasi dibagi ke dalam sejumlah langkah yang masing-masing disebut sebagai segmen, atau stage. Output dari sebuah segmen menjadi input segmen yang lain.

4. Analisa Algoritma Paralel.

Pada saat sebuah algoritma digunakan untuk memecahkan sebuah problem, maka performance dari algoritma tersebut akan dinilai. Hal ini berlaku untuk algoritma sekuensial maupun algoritma paralel. Penampilan sebuah algoritma pengolahan peralel dapat dinilai dari beberapa kriteria, seperti running time dan banyaknya prosesor yang digunakan.

4.1. Running Time
Running time adalah waktu yang digunakan oleh sebuah algoritma untuk menyelesaikan masalah pada sebuah komputer paralel dihitung mulai dari saat algoritma mulai hingga saat algoritma berhenti. Jika prosesor-prosesornya tidak mulai dan selesai pada saat yang bersamaan, maka running time dihitung mulai saat komputasi pada prosesor pertama dimulai hingga pada saat komputasi pada prosesor terakhir selesai.

4.1.1. Counting Steps

Untuk menentukan runnging time, secara teoritis dilakukan analisa untuk menentukan waktu yang dibutuhkan sebuah algoritma dalam mencari solusi dari sebuah masalah. Hal ini dilakukan dengan cara menghitung banyaknya operasi dasar, atau step (langkah), yang dilakukan oleh algoritma untuk keadaan terburuknya (worst case).
Langkah-langkah yang diambil oleh sebuah algoritma dibedakan ke dalam dua jenis yaitu :

a. Computational step
Sebuah computational step adalah sebuah operasi aritmetika atau operasi logika yang dilakukan terhadap sebuah data dalam sebuah prosesor.

b. Routing step.
Pada routing step, sebuah data akan melakukan perjalanan dari satu prosesor ke prosesor lain melalui shared memory atau melalui jaringan komunikasi.

Contoh 4.1. :

Perhatikan sebuah file komputer dengan n entri berbeda.
Pada file tersebut akan diperiksa apakah x terdapat di dalamnya.

Dengan algoritma sekuensial, keadaan terburuknya (worst case) untuk menemukan x membutuhkan n langkah, dimana tiap langkah adalah membandingkan x dengan sebuah entri pada file. Keadaan terburuk terjadi jika x ternyata sama dengan entri terakhir pada file atau x tidak terdapat pada file tersebut.

Dengan EREW SM SIMD (Exclusive Read Exclusive Write Shared Memory SIMD) komputer dengan N prosesor, dimana N  n, pada worst casenya dibutuhkan log N + n/N langkah.

Misalkan P1 , P2 , … , PN prosesor-prosesor pada EREW SM SIMD komputer tersebut.
Proses pencarian entri yang sama dengan x adalah :
-. Broadcasting, x dikomunikasikan pada semua prosesor dengan cara
1. P1 membaca x dan mengkomunikasikan dengan P2.
2. P1 dan P2 secara simultan mengkomunikasikan x dengan P3 dan P4
3. P1, P2, P3 dan P4 secara simultan meng-komunikasikan x dengan P5 , P6 , P7 dan P8 .
Dan seterusnya hingga semua prosesor mengenal x.
Proses ini dilakukan dalam log N langkah.
-. Searching, File dimana x akan dicari dibagi ke dalam sub file dan secara simultan dilakukan pencarian oleh prosesor-prosesor :
P1 mencari pada n/N entri pertama,
P2 mencari pada n/N entri kedua,
P3 mencari pada n/N entri ketiga,
PN mencari pada n/N entri ke-N.
Proses ini membutuhkan n/N langkah.

Jadi total langkah yang dibutuhkan oleh algoritma tersebut adalah : log N + n/N langkah.

4.1.2. Speedup

Pengukuran speedup sebuah algoritma paralel adalah salah satu cara untuk mengevaluasi kinerja algoritma tersebut.
Speedup adalah perbandingan antara waktu yang diperlukan algoritma sekuensial yang paling efisien untuk melakukan komputasi dengan waktu yang dibutuhkan untuk melakukan komputasi yang sama pada sebuah mesin pipeline atau paralel.

Contoh 4.2. :
Dari contoh 4.1.
Running time proses searching dengan mesin sekuensial adalah O(n).
Running time dari proses searching pada komputer EREW SM SIMD adalah O(n/N).
Jadi speedup = O(N).

4.2. Banyaknya Prosesor (Number of Processor)
Semakin banyak prosesor yang digunakan semakin tinggi biaya untuk memperoleh solusi sebuah problem. Hal ini terjadi karena perlu dipertimbangkan biaya pengadaan prosesor dan perawatannya.
Jumlah prosesor yang tergantung dari n , n=ukuran problem, dinyatakan sebagai p(n). Kadang-kadang jumlah prosesor tidak tergantung pada ukuran problem.

Contoh 4.3. :
Perhatikan n bilangan x1,x2,…,xn yang akan dijumlahkan.
Dengan menggunakan komputer tree-connected SIMD dengan log n level dan n/2 daun, dibutuhkan pohon dengan ukuran (n-1) atau p(n) = n -1 .
Ilustrasi untuk n = 8.

Sedangkan pada contoh 4.1. , banyaknya prosesor, N , tidak tergantung pada ukuran problem, n .

Arsitektur Komputer

Dua element utama pd sistem komputer konvensional:
• Memory
• Processor

Klasifikasi Arsitektur komputer (Michael Flynn), berdasarkan karakteristiknya termasuk banyaknya processor, banyaknya program yang dapat dieksekusi dan struktur memori:

Single Intruction Stream, Single Data Stream (SISD)
Satu CPU yang mengeksekusi instruksi satu persatu dan menjemput atau menyimpan data satu persatu
Single Instruction Stream Multiple Data Stream (SIMD)
Satu unit kontrol yang mengeksekusi aliran tunggal instruksi, tetapi lebih dari satu Elemen Pemroses

Multiple Instruction Stream, Single Data Stream (MISD)
Mengeksekusi beberapa program yang berbeda terhadap data yang sama.
Ada dua kategori:
1. Mesin dengan Unit pemroses berbeda dengan instruksi yang berbeda dengan data yang sama (sampai sekarang tidak ada mesin yang seperti ini)
2. Mesin, dimana data akan mengalir ke elemen pemroses serial
Multiple Instruction Stream, Multiple Data Stream (MISD)
Juga disebut multiprocessors, dimana lebih dari satu proses dapat dieksekusi berikut terhadap dengan datanya masing-masing

Arsitektur Paralel
Dalam taksonomi arsitektur paralel ada dua keluarga arsitektur paralel yang banyak diterapkan adalah: SIMD dan MIMD, dimana untuk mesin yang murni MISD tidak ada.
Arsitektur SIMD
Mesin SIMD secara umum mempunyai karakteristik sbb:
• Mendistribusi proses ke sejumlah besar hardware
• Beroperasi terhadap berbagai elemen data yang berbeda
• Melaksanakan komputasi yang sama terhadap semua elemen data

Peningkatan kecepatan pada SIMD proporsional dengan jumlah hardware (elemen pemroses) yang tersedia.

Sebagai perbandingan, pada gambar dibawah, untuk sistem SISD (a), X1, X2, X3, dan X4 merepresentasikan blok instruksi, setelah mengeksekusi X1, tergantung dari nilai X, X3 atau X2 dieksekusi kemudian X4. Pada sistem SIMD, beberapa aliran data ada yang memenuhi X=? dan ada yang tidak, maka beberapa elemen akan melakukan X3 dan yang lain akan melakukan X2 setelah itu semua elemen akan melakukan X4.

Array Element pemroses atau biasa disebut Processor Array dapat berbeda satu sama lain berdasarkan:
• Struktur elemen pemroses
• Struktur unit kontrol
• Struktur memori
• Topologi interkoneksi
• Struktur input/output

Struktur umum dari 16 elemen pemroses dan unit kontrol tunggal dapat dilihat pada gambar berikut

Contoh komputer SIMD termasuk: ILLIAC IV, MPP, DAP, CM-2, MasPar MP-1, dan MasPar MP-2.

Tiga arsitektur pemroses array yang berbeda dapat dilihat pada gambar berikut.

MasPar MP-1
Dua bagian utama dalam arsitektur MasPar yaitu:
1. MasPar Front End (DEC3100 WS dgn ULTRIX)
2. Data Parallel Unit (DPU)
• Array Control Unit (ACU)
• Processor Element Array (PE Array) (64X64 =4096 PEs)

Array Control Unit (ACU) melaksanakan dua tugas:
1. Eksekusi instruksi trehadap data singular
2. Secara simultan memberi instruksi yang beroperasi pada data paralel untuk tiap PE

Arsitektur MISD

Prosesor pipeline adalah prosesor MISD yang bekerja berdasarkan prinsip pipelining. Pada pipeline proses dapat dibagi menjadi beberapa tahap dan beberapa proses dapat dilaksanakan secara simultan.
Pada gambar dibawah dapat dilihat perbedaan proses serial dengan pipeline

Waktu eksekusi lebih cepat dibandingkan dengan proses serial.
Prinsip pipelining dapat digunakan pada dua level yang berbeda:
 Pipeline unit aritmatika
 Pipeline unit kontrol
Seperti terlihat pada gambar dibawah:

Operasi pipeline dapat dilaksanakan secara siklus yaitu cyclic pipeline, dimana dapat dibagi dalam 5 tahap:
• Operasi baca (dari shared memories)
• Operasi transfer (memori ke elemen pemroses)
• Operasi eksekusi (di elemen pemroses)
• Operasi transfer (elemen pemroses ke memori)
• Operasi simpan (di shared memories)

Secara umum, prinsip pipeline dapat diterapkan pada beberbagai level, seperti:
• Level instruksi (unit pemrosesan instruksi)
• Level subsystem (unit aritmatika pipeline)
• Level system (level hardware/software)
Secara umum arsitektur pipeline dapat dilihat pada gambar dibawah ini

CDC Star 100
CPU terdiri dari dua unit aritmatika floating point pipeline

Systolic Array Processor
Merupakan arsitektur array pipeline multidimensional yang dirancang untuk mengimplementasikan fixed algorithm. Array systolic dibentuk dengan jaringan unit fungsional yang secara lokal terkoneksi. Array dapat beroperasi secara sinkronus dengan multidimensional pipelining.

Dengan beberapa topologi array systolic seperti pada gambar berikut.

Arsitektur MIMD
Sistem MIMD merupakan sistem multiprocessing atau multicomputer dimana tiap prosesor mempunyai unit kontrol dan program sendiri. Karakteristiknya:
• Proses didistribusikan ke beberapa prosesor independent
• Berbagi sumbar daya, termasuk memori, processor
• Operasi tiap processor secara independent dan simultan
• Tiap processor menjalankan programnya sendiri

Komputer MIMD: sistem tightly coupled (global memory) dan loosely coupled (local memory).

Intel iPSC Machines
Sistem iPSC terdiri dari: 1, 2 atau 4 unit komputesi (cube) dan prosesor host (cube manager). Cube merupakan processing nodes yang terinterkoneksi hypercube yang mempunyai memori dan prosesor sendiri.
Contoh: iPSC/1 terdiri dari 32 nodes, cube manager dan 16 Mbytes memory unshared. Tiap node mempunyai arsitektur seperti pada gambar berikut:

Symmetry Machine
SM dapat memperkejakan 30 processor, dimana merupakan contoh UMA MIMD (tightly coupled)

Carnegie-Mellon Multi-Mini_Processor (C.mmp)
Processor dikelompokkan ke dalam cluster local dan diorganisasikan kedalam struktur tree dan berkoneksi lewat Inter-Cluster Buses. Seperti terlihat pada gambar dibawah.

Arsitektur Hibrid SIMD-MIMD
Arsitektur hibrid SIMD-MIMD adalah sistem pemrosesan paralel dengan struktur yang dapat diubah sebagai satu atau lebih arsitektur SIMD dan /atau MIMD independen dengan ukuran yang bervariasi.

Ada tiga kategori utama arsitektur SIMD-MIMD:
1. PASM: Partionable SIMD-MIMD systems
2. VLIW: Very Long Instruction Word systems
3. MSIMD: Multiple SIMD systems

Arsitektur PASM
Arsitektur PASM dikembangkan unutk image processing. Komponen dasar arsitektur ini dapat dilihat pada gambar berikut.

System Control Unit bertanggung jawab terhadap penjadualan proses, alokasi sumber daya, modus paralelisme, dan koordinasi keseluruhan.
Microcontrollers mengontrol aktivitas, dimana masing-masing memiliki microprocessor dan dua unit memori untuk melaksanakan loading memori dan komputasi.
Microprocessors melaksanakan komputasi SIMD dan MIMD.
Memory modules digunakan untuk penyimpanan data dalam modus SIMD dan penyimpanan kedua data dan instruksi pada modus MIMD

Arsitektur VLIW
Elemen pemroses dibawah kontrol terpusat, tetapi individual elemen pemroses dapat melaksanakan operasi berbeda pada data yang berbeda. Instruksi yang sangat panjang pelaksanaannya dapat dilakukan secara paralel.

Arsitektur Aliran Data
Pada arsitektur aliran data, operasi dapat dilaksanakan dengan memperbolehkan instruksi dilaksanakan segera setelah operand dan sumber daya komputasinya tersedia. Bila data untuk beberapa instruksi datang secara berbarengan maka instruksi dapat dieksekusi secara paralel.

Arsitektur aliran data dibagi menjadi tiga kategori yagn berbeda:
1. Arsitektur statis; dapat mengevaluasi hanya satu graf program
2. Arsitektur statis yang dapat di rekonfigurasi ulang; mempunyai beberapa processor dimana interkoneksi logika antar processor dibuat setelah program diload, maka koneksi ini harus ditentukan pada saat kompilasi dan program yang diload tetap selama eksekusi
3. Arsitektur Dinamis; arsitektur ini mengijinkan program untuk dievaluasi secara dinamis, koneksi logika antar processor dapat berubah selama eksekusi berlangsung

NOTASI UNTUK ALGORITMA PARALEL

• Untuk Shared-Memory Model
Global
Local

• Untuk Distributed Memory Machine
Parameter  suatu konstanta yang sudah dikomunikasikan antar prosesor.

• Umum

+, x, 
if … else … endif ; while … endwhile ; for … endfor
for all …  data paralelism :
• SIMD : diasumsikan ada lockstep
• MIMD : diasumsikan berjalan asynchronous

•  menyatakan suatu prosesor store/retrieve nilai local dari prosesor lain.

• [x] a menyatakan nilai dari prosesor.
tmp  [s] a

SUMATION (HYPERCUBE SIMD):

Parameter n { Number of elements to add}
p { Number of processing elements}

Global j
Local local.set.size, local.value[1…n/p ], sum, tmp

Begin
For all Pi, where ()  i  p – 1 do
If i < (n modulo p) then
Local.set.size  n/p
Else
Local.set.size  n/p
Endif
Sum  0
Endfor
For j  1 to n/p do
For all Pi, Where 0  i  P-1 do
If local.set.size  j then
Sum  sum + local.value[j]
Endif
Endfor
Endfor
For j  log P-1 downto 0 do
For all Pi, Where 0  i  P-1 do
If i < 2j Then
tmp  [ i+2j] sum
sum  sum + tmp
Endif
Endfor
Endfor
END
Hasilnya ?

Bagaimana jika setiap elemen pemrosesan akan mempunyai copy-an dari global sum ? Kita dapat menggunakan fase broadcast di akhir algoritma. Setiap elemen pemrosesan  mempunyai global sum, nilai-nilainya dapat dikirimkan ke processor lainnya dalam log p tahapan komunikasi dengan membalikan arah edge pada pohon binomial.

Kompleksitas untuk menemukan jumlah (sum) dari n nilai,  (n/p + log p) pada model hypercube yang berarray prosesor.

SHUFFLE – EXCHANGE SIMD MODEL

Pada model ini, tidal ada dilatasi – 1 pada pohon binomial. Efisiensi algoritma ini jika jumlah digabungkan secara berpasangan. Angka logaritma dari tahapan penggabungan dapat menemukan total akhir. Setelah log p shuffle exchange, prosesor O memdapatkan total akhir prosesor.

SUMMATION (SHUFFLE-EXCHANGE SIMD) :

Parameter n { Number of elements to add }
P { Number of processing elements }
Global j
Local local.set.size, local.value[1…n/p ], sum,tmp
Begin
For all Pi, where ()  i  p – 1 do
If i < (n modulo p) then
Local.set.size  n/p
Else
Local.set.size  n/p
Endif
Sum  0
Endfor
For j  1 to n/p do
For all Pi, Where 0  i  P-1 do
If local.set.size  j then
Sum  sum + local.value[j]
Endif
Endfor
Endfor
For j  0 to log p-1 do
For all Pi, Where 0  i  P-1 do
Shuffle (sum)  sum
Exchange (tmp)  sum
Sum  sum + tmp
Endfor
Endfor
END

Waktu Kompleksitas :  (n/p + log p)

2-D Mesh SIMD Model

Untuk mendapatkan jumlah n nilai diantara p prosesor, diorganisasikan dalam p x p mesh, minimal satu prosesor pada mesh harus berisi total akhir.
Total jumlah dari tahap komunikasi untuk mendapatkan sub-total dari prosesor minimal 2(p-1).
Kompleksitas algoritma ini (n/p + p)

(Pseudocode (anggap n = l2 )
SUMMATION (2-D MESH SIMD) :

Parameter l { Mesh has size l x l }
Global i
Local tmp,sum
Begin
{each processor finds sum of its local values – code not shown}
For i  l-1 downto 1 do
For all Pj,i , Where 1  j  l do
{Processing elements in column i active}
tmp  south (sum)
sum  sum + tmp
Endfor
Endfor
END

Waktu Eksekusi Algoritma ini terbagi 2 :

• Waktu yang dibutuhkan untuk nilai awal pesan ( message – passing overhead)
• Waktu yang dibutuhkan untuk melaksanakan pemindahan data ( message latency)

Jika data yang di- broadcast sedikit, message – passing overhead mendominasi message latency.

Algoritma yang baik adalah yang meminimalkan jumlah komunikasi yang dilaksanakan oleh setiap prosesor. Jadi minimal untuk komunikasi membutuhkan log p.

Pohon binomial cocok untuk model broadcast ini, karena ada sebuah dilatasi-1 yang ditempelkan ke hypercube dari pohon binomial ( Lihat Gb. 6-11 dan 6 – 12)

Jika data yang di-broadcast besar, waktu pemindahan data mendominasi message-passing overhead . Pada pohon binomial-nya merupakan keadaan terburuk, dalam setiap waktu, tidak lebih dari p/2 dari p log p hubungan komunikasi yang digunakan.

Jika M adalah waktu yang dibutuhkan untuk melewatkan pesan dari satu prosesor ke lainnya, algoritma broadcast ini membutuhkan waktu M log p.

Jhonson and Ho (1989) membuat algoritma broadcast yang mengeksekusi waktu lebih cepat dari algoritma bimial log p.

Algoritmanya : setiap hypercube terdiri dari “log p edge-disjoint spanning tree” dengan node akar yang sama .
Algoritma memisahkan pesan ke dalam log p bagian dan broadcast setiap bagian ke node lain melalui pohon rentang binomial. (lihat Gb. 6-13)

Sehingga algoritma yang baru membutuhkan waktu M log p/log p = M.

HYPERCUBE BROADCAST (id,source,value) :

Parameter P {Number of processor}
Value id {Processor’s id number}
source {ID of source processor}
Reference value {value to be broadcast}
Local i {loop iteration}
partner {partner processor}
position {position in broadcast tree}

{This procedure is called from inside a for all statement}

Begin
position  id  source
For i  0 to log p-1 do
If position < 2i then
partner  id  2i
[partner] value  value
Endif
Endfor
END.

ALGORITMA-ALGORITMA
PARALLEL RANDOM ACCESS MACHINE
(PRAM = pea ram)

Algoritma yang dibahas :
1. Parallel reduction
2. Prefix sums
3. List ranking
4. Pre-order tree traversal
5. Merging two sorted lists
6. Graph coloring

Algoritma-algoritma PRAM memiliki 2 (dua) fase :
1. mengaktifkan sejumlah prosesor
2. prosesor yang sudah diaktifkan (pada fase 1), melaksanakan komputasi secara paralel
Gambar 2.4 Untuk mengubah 1 prosesor yang aktif ke p prosesor dibutuhkan log p langkah

Jumlah prosesor yang aktif merupakan lipat-2 (2n) dari prosesor tunggal atau logaritma dari basis 2.

Instruksi meta untuk mengaktifkan prosesor yang digunakan (dalam fase 1) :
spawn ()

Instruksi meta untuk melakukan komputasi secara paralel (dalam fase 2) :
for all
do

endfor

Pohon biner menjadi paradigma yang penting dalam komputasi paralel. Pada beberapa algoritma ada yang menggunakan aliran data top-down (akar –daun). Contoh :
 broadcast
akar mengalirkan (mengirimkan) data yang sama ke setiap daunnya
 divide-and-conquer
pohon menggambarkan adanya perulangan sub divisi suatu masalah ke sub masalah yang lebih kecil.

Algoritma lain yang mengalirkan data secara bottom-up (daun -akar) adalah operasi reduksi atau “fan-in”.

DEFINISI
Diberikan sekumpulan n nilai a1, a2, … ,an dan operator biner asosiatif , “reduksi” adalah proses menghitung dari :

a1  a2  …  an

Salah satu contoh dari operasi reduksi adalah penjumlahan paralel (parallel summation).

Parallel Reduction (Reduksi paralel)
Prosesor PRAM memanipulasi data yang disimpan dalam register global.

DEFINSI
Penjumlahan secara paralel merupakan salah satu contoh dari operasi reduksi.

CONTOH
Reduksi secara paralel dapat digambarkan dengan pohon biner. Sekelompok n nilai ditambahkan dalam log p langkah penambahan paralel.

Gambar 2.5 Implementasi algoritma penjumlahan, setiap node dari pohon merupakan elemen dalam array

PSEUDOCODE
SUM(EREW PRAM)
Initial condition : List of n  1 elements stored in A[0 … (n - 1)]
Final condition : Sum of elements stored in A[0]
Global variables : n, A[0 … (n -1)], j
begin
spawn (P0, P1, P2, … , P n/2  – 1)
for all Pi where 0  i  n/2 –1 do
for j  0 to log n – 1 do
if i modulo 2j = 0 and 2i + 2j < n then
A[2i]  A[2i] + A[2i + 2j]
endif
endfor
endfor
end
Gambar 2.7 Algoritma PRAM EREW untuk menjumlah n elemen dengan n/2 prosesor

GAMBARAN PSEUDOCODE
Gambar 2.6 Menjumlahkan 10 nilai

KOMPLEKSITAS
Rutin spawn :  n/2  doubling steps
Perulangan for yang sekuensial :  log n  kali

Waktu kompleksitas algoritma : (log n),
dengan n/2 prosesor.

PREFIX SUMS (sering disebut parallel prefixes, scan)
DEFINISI
Diberikan sekumpulan n nilai a1, a2, …, an dan operasi asosiatif , prefix sum adalah menghitung :
a1
a1  a2
a1  a2  a3

a1  a2  a3  …  an
Misal : diberikan operasi + dan array integer {3, 1, 0, 4, 2}, hasil prefix sum adalah array dari {3, 4, 4, 8, 10}.

CONTOH
Diberikan array A dari n huruf. Huruf-huruf besarnya akan diurut. (lihat gambar 2.8)
a) Array A berisi huruf besar maupun huruf kecil dan ada array tambahan T berukuran n. Huruf-huruf besar akan diletakkan di awal dari A secara terurut.
b) Array T berisi 1 untuk merepresentasikan huruf besar dan 0 untuk merepresentasikan huruf kecil
c) Array T dikomputasi dengan prefix sum, menggunakan operasi tambah. Setiap huruf besar L diletakkan di A[i], nilai dari T[i] adalah indeks dari L.
d) Array A setelah “packing”.

Gambar 2.8 ”Packing” elemen dengan aplikasi prefix sum.

PSEUDOCODE
PREFIX.SUMS (CREW PRAM):
Initial condition : List of n  1 elements stored in A[0 … (n -1)]
Final condition : Each element a[i] contains A[0]  …  A[i]
Global variables : n, A[0 … (n-1)], j
begin
spawn (P1, P2, …, Pn – 1)
for all Pi where 1  i  n – 1 do
for j  0 to log n – 1 do
if i – 2j  0 then
A[i]  A[i] + A[i – 2j]
endif
endfor
endfor
end
Gambar 2.9 Algoritma PRAM untuk menemukan prefix
sum dari n elemen dengan n-1 prosesor
GAMBARAN PSEUDOCODE
Gambar 2.10 Algoritma Prefix sum dari 10 nilai

KOMPLEKSITAS
Rutin spawn : log n – 1 instruksi
Perulangan for yang sekuensial :  log n  kali

Waktu kompleksitas algoritma : (log n),
dengan n – 1 prosesor.

List Ranking
Suffix sum adalah “variant” dari prefix sum, dimana elemen array digantikan dengan linked list, dan penjumlahan dihitung dari belakang (Karp & Ramachandran 1990).

DEFINISI
Jika elemen-elemen dari list berisi 0 atau 1 dan operasi asosiatif  merupakan penambahan, maka masalah ini biasa disebut list ranking.

CONTOH

Gambar 2.11 Posisi setiap item pada linked-list n elemen
dicapai dalam log n langkah pointer-jumping

PSEUDOCODE
LIST.RANKING (CREW PRAM):
Initial condition : Values in array next represent a linked list
Final condition : Values in array position contain original
distance of each element from end of list
Global variables : n, position[0 … (n - 1)], next[0 … (n - 1)], j
begin
spawn (P0, P1, P2, …, Pn-1)
for all Pi where 0  i  n – 1 do
if next[i] = i then position[i]  0
else position[i] 1
endif
for j 1 to log n do
position[i]  position[i] + position[next[i]]
next[i]  next[next[i]]
endfor
endfor
end
Gambar 2.12 Algoritma PRAM untuk menghitung jarak dari belakang/ akhir list untuk setiap elemen singly-linked list

GAMBARAN PSEUDOCODE
Untuk menunjukkan posisi list adalah dengan menghitung jumlah penelusuran antara elemen list dan akhir list. Hanya ada (n-1) pointer antara elemen list awal dan akhir list.

Jika satu prosesor diasosiasikan dengan setiap elemen list dan pointer lompatan secara paralel, jarak dari akhir list hanya ½ bagian melalui instruksi next[i]  next[next[i]]. Jika sebuah prosesor menambah hitungan ke link-traversalnya sendiri, position[i], hitungan link-traversal sekarang dari successornya dapat dicapai.

KOMPLEKSITAS
Rutin spawn : (log n),
Perulangan for : maksimal  log n  kali

Waktu kompleksitas algoritma : (log n),
dengan n prosesor.

Preorder Tree Traversal
DEFINISI
Secara sekuensial
PREORDER.TRAVERSAL(nodeptr):
begin
if nodeptr null then
nodecount codecount + 1
nodeptr.label nodecount
PREORDER.TRAVERSAL(nodeptr.left)
PREORDER.TRAVERSAL(nodeptr.right)
endif
end

Dimana paralelnya ?
Operasi dasarnya adalah pelabelan pada node. Label pada verteks sub pohon kanan tidak dapat diberikan sampai diketahui berapa banyak verteks yang ada di sub pohon kirinya, begitu sebaliknya.

Pelaksanaan penelusuran dari depan (preorder traversal), dikerjakan secara sistematis melalui semua edge pohon. Setiap edge selalu 2 (dua) kali melewati verteks, yang turun dari parent ke child dan kebalikkannya.

Penelusuran pohon berorientasi edge ini merupakan algoritma paralel yang cepat. (Tarjan & Vishkin, 1984).

CONTOH (lihat gambar 2.13)
Algoritma ini mempunyai 4 (empat) fase :
1. Algoritma membentuk singly-linked list. Setiap verteksnya mempunyai penelusuran edge turun maupun naik dari pohon
2. Memberikan bobot ke verteks-verteksnya,
penelusuran naik (upward) : 0
penelusuran turun (downward) : 1
3. Setiap elemen singly-linked list menghitung rank-nya dari list secara paralel
4. Prosesor yang diasosiasikan dengan edge yang turun menggunakan rank yang sudah dihitung sebagai nomor dari penelusuran preorder.

Gambar 2.13 Penelusuran dari depan (preorder traversal)
dari akar pohon

(a) pohon
(b) edge-edge pohon, yang turun dan yang naik
(c) membuat linked list berdasarkan edge berarah pohon.
edge turun berbobot 1; edge naik berbobot 0
(d) jumping pointer digunakan untuk menghitung total bobot setiap verteks dari akhir list. Elemen-elemen (E, G), (E, H), (A, C) merupakan edge turun. Prosesor mengatur elemen untuk nilai preorder-nya. Misalnya elemen (E,G) berbobot 4 yang artinya node pohon G merupakan node ke-4 dari akhir preorder traversal list. Pohon memiliki 8 node sehingga node pohon G berlabel 5 pada preorder traversal
(e) nilai-nilai penelusuran dari depan.

Implementasi dari algoritma paralel preorder traversal menggunakan struktur data yang tidak biasa untuk merepresentasikan pohon.
Gambar 2.14 Pohon berakar yang direpresentasikan dengan
struktur data

Parent : akar dari node yang ada di atasnya
Sibling : node yang merupakan tetangga sebelah kanan dari parent yang sama
Child : node paling kiri

PSEUDOCODE
PREORDER.TREE.TRAVERSAL (CREW PRAM):
Global n {Number of vertices in tree}
parent[1 … n] {Vertex number of parent node}
child[1 … n] {Vertex number of firts child}
sibling[1 … n] {Vertex number of edge}
succ[1 … (n -1)] {Index of successor edge}
position[1 … (n -1)] {Edge rank}
preorder[1 … n] {Preorder traversal number}
begin
spawn (set of all P(i,j) where (i,j) is an edge)
for all P(i,j) where (i,j) is an edge do
{Put the edges into a linked list}
if parent[i] = j then
if sibling[i]  null then
succ[(i,j)]  (j, sibling[i])
else if parent[j]  null then
succ[(i,j)]  (j, parent[j])
else
succ[(i,j)]  (i,j)
preorder[j]  1 {j is root of tree}
endif
else
if child[j]  null then succ[(i,j)]  (j, child[j])
else succ[(i,j)]  (j,i)
endif
endif
{Number of edges of the successor list}
if parent[i] = j then position[(i,j)]  0
else position[(i,j)]  1
endif
{Perform suffix sum on successor list}
for k  1 to log(2(n – 1)) do
position[(i,j)]  position[(i,j)] + position[succ(i,j)]
succ[(i,j)]  succ[succ[(i,j)]]
endfor
{Assign preorder values}
if i = parent[j] then preorder[j]  n + 1 – position[(i,j)]
endif
endfor
end
Gambar 2.15 Algoritma PRAM untuk label node pohon
berdasarkan posisi secara preorder traversal

GAMBARAN PSEUDOCODE
Sebuah pohon dengan n buah node memiliki n-1 buah edge. Karena setiap edge dibagi ke dalam edge yang “naik” dan “turun”, algoritma membutuhkan 2(n-1) prosesor untuk memanipulasi 2(n-1) elemen dari singly-linked list ke penelusuran edge-nya.
Pada saat prosesor diaktifkan, linked list dibentuk yang berisi elemen-elemen edge dari preorder traversal. Dengan edge (i, j), setiap prosesor harus menghitung successor (pengikut) dari edge dalam traversal.
Jika parent[i] = j maka edge bergerak naik pada pohon, dari node child ke node parent.
Edge-edge yang “naik” mempunyai 3 jenis successor :
 jika child memiliki sibling, maka egde successor berasal dari node parent ke node sibling,
 jika child memiliki grandparent, maka edge successor berasal dari node parent ke grandparent-nya,
 jika kedua kondisi di atas tidak ada, maka edge merupakan akhir dari preorder traversal.
Akar pohon diidentitaskan dan nomor preordernya adalah 1.
Jika parent[I] j, yaitu jika edge bergerak turun dari node parent ke salah satu child-nya, maka ada 2 macam edge successornya :
 jika node child memiliki node keturunan, edge successor berasal dari node child ke node grandchild
 jika node child merupakan daun, edge successor berasal dari node child itu sendiri ke parent-nya.
Nilai posisi akhir menunjukkan nomor node preorder traversal antara elemen list dan akhir list. Untuk menghitung setiap label dari node, setiap prosesor yang diasosiasikan dengan edge “turun” dikurangkan nilai position dari n+1. Penambahan 1 menyebabkan penomoran preorder traversal dimulai dari 1.

KOMPLEKSITAS
Carilah, berapa kompleksitas algoritma seluruhnya ?
Merging Two Sorted Lists
DEFINISI
Algoritma yang optimal adalah penggabungan daftar (list) untuk satu elemen setiap waktu. Untuk menggabungkan dua list secara terurut membutuhkan paling banyak n-1 perbandingan dari n/2 elemen. Waktu kompleksitasnya (n). (Secara sekuensial)

Dengan menggunakan algoritma PRAM, proses penggabungan dapat dicapai dalam waktu (n log n) yaitu setiap elemen list dialokasikan ke prosesornya sendiri. Setiap prosesor menemukan posisi elemen-elemen pada list yang lain dengan pencarian biner (binary search).

Karena setiap indeks elemen pada list diketahui, tempat pada gabungan list dapat dihitung saat indeks pada list lainnya diketahui dan du indeks ditambahkan. Semua n elemen dapat dimasukkan ke gabungan list dengan prosesornya sendiri-sendiri dalam waktu konstan.

CONTOH
Gambar 2.16 Dua list dengan n/2 elemen digabungkan
dalam waktu (log n)

PSEUDOCODE
MERGE.LISTS (CREW PRAM):
Given : Two sorted lists of n/2 elements each stored in
A[1] … A[n/2] and A[(n/2)+1] … A[n]
The two lists and their unions have disjoint values
Final condition : Merged list in locations A[1] … A[n]
Global A[1 … n]
Local x, low, high, index
begin
spawn(P1, P2, …, Pn)
for all Pi where 1  i  n do
{Each processor sets bounds for binary search}
if i  n/2 then
low  (n/2) + 1
high  n
else
low  1
high  n/2
endif
{Each processor performs binary search}
x  A[i]
repeat
index  (low + high)/2
if x high
{Put value in correct position on merged list}
A[high + i – n/2]  x
endfor
end
Gambar 2.17 Algoritma PRAM menggabungkan
dua list secara terurut.

GAMBARAN PSEUDOCODE
Prosesor yang dibutuhkan ada n buah, satu untuk setiap elemen dari dua list yang digabungkan. Secara paralel, prosesor ini menentukan indeks yang akan dicari. Prosesor yang diasosiasikan dengan elemen dari ½ array bagian bawah akan melakukan pencarian biner pada elemen dari ½ array bagian atas, begitupula sebaliknya.

Prosesor Pi diasosiasikan dengan array A[i] bagian bawah dari list. Nilai akhir prosesor “high” harus berada antara n/2 dan n. Elemen A[i] > i-1 elemen pada bagian bawah list.
Juga A[i] > high – (n/2) untuk elemen bagian atas list.
Sehingga A[i] diletakkan pada gabungan list setelah i + high – n/2 – 1 elemen lainnya, pada indeks i + high – n/2.

Begitu pula dengan array bagian atas list. Prosesor Pi diasosiasikan dengan array A[i] bagian atas dari list. Nilai akhir prosesor “high” harus berada antara 0 dan n/2. Elemen A[i] > i – (n/2 +1) elemen lainnya pada bagian atas list.
Juga A[i] > elemen high untuk bagian bawah list.
Sehingga A[i] diletakkan pada gabungan list setelah i + high – n/2 – 1 elemen lainnya, pada indeks i + high – n/2.

Karena semua prosesor menggunakan ekspresi yang sama untuk menempatkan elemen-elemennya, setiap prosesor merelokasi elemen-elemennya menggunakan instruksi yang sama di akhir algoritma.

KOMPLEKSITAS
Secara sekuensial : (n)
Secara paralel : (n log n)
Untuk membangun algoritma pada komputer paralel sebenarnya, “cost” algoritma paralel harus diperhitungkan.

Graph Coloring
DEFINISI
Pewarnaan graf merupakan graf dimana verteks-verteks dapat diwarnai dengan c warna sehingga tidak ada dua verteks yang berdekatan (bertetangga/ ajasensi) memiliki warna yang sama.

CONTOH
Diasumsikan graf dengan n buah verteks. Diberikan matriks ajasensi (bertetangga) mxn dan konstanta positif c, sebuah prosesor dibuat untuk setiap pewarnaan graf yang mungkin.
Prosesor P(i0, i1, i2, …, in-1) mengilustrasikan pewarnaan verteks 0 dengan warna i0, verteks 1 dengan warna i1 hingga verteks n-1 dengan warna in-1.

Gambar 2.18 Contoh algoritma pewarnaan graf CREW PRAM
Algoritma mendapatkan 2 warna untuk 3 buah verteks

PSEUDOCODE
GRAPH.COLORING (CREW PRAM):
Global n {Number of vertices}
c {Number of colors}
A[1…n][1…n] {Adjacency matrix}
candidate[1…c][1…c] … [1…c] {n-dimensional
boolean matrix}
valid {Number of valid colorings}
j, k
begin
spawn(P(i0, i1, i2, …, in-1)) where 0  iv < c for 0  v < n
for all P(i0, i1, i2, …, in-1) where 0  iv < c for 0  v 0 then print “Valid coloring exists”
else print “Valid coloring does not exist”
endif
end
Gambar 2.19 Algoritma CREW PRAM untuk menunjukkan
jika graf dengan n verteks diwarnai dengan c warna

GAMBARAN PSEUDOCODE
Setiap prosesor memulai nilainya pada array “candidate” berdimensi-n dengan 1. Waktu yang dipakai (n2) untuk mewarnai verteks yang diwakili 2 verteks yang berajasensi diberikan warna yang sama.
Jika A[j,k] = 1 dan ij = ik maka pewarnaan salah karena A[j,k] = 1 berarti verteks j dan k bertetangga (ajasensi) dan ij = ik berarti verteks j dan k berwarna sama. Jika hal ini terjadi, array “candidate” di-set 0.
Setelah n2 perbandingan, jika elemen lainnya pada array “candidate” masih 1, pewarnaan benar.
Dengan menjumlah semua elemen cn pada array “candidate”, dapat digambarkan bahwa pewarnaan benar (valid).

KOMPLEKSITAS
Rutin spawn : (log cn),
Perulangan loop for ganda : (n2),
Menjumlah semua elemen cn : (log cn)

Waktu kompleksitas keseluruhan :
(log cn + n2) = (n2 + n log c)
Karena c < n,
kompleksitas berkurang menjadi (n2).

PENGOLAHAN PARALEL

ALGORITMA SORTING

Sorting memeiliki kepentingan tambahan bagi perancang algoritma paralel; ia sering digunakan untuk melakukan permutasi data umum pada komputer dengan memori terdistribusi. Operasi pemidahan data ini dpt digunakan untuk menyelesaikan masalah pada:
• teori graf
• geometri komputasional
• image processing
dalam waktu optimal atau hampir optimal.

Algoritma yang akan dipelajari berikut merupakan internal sort – yaitu, tabel yang di-sort cukup kecil untuk masuk seluruhnya di memori primer. Semua algoritma berikut ini juga men-sort dengan membandingkan sepasang elemen.

ENUMERATION SORT

Asumsi:
• Tabel dengan n elemen: a0, a1, …, an-1
• Untuk 2 elemen ai dan aj, salah satu kondisi ini pasti benar: ai aj.
• Tujuan sorting: menemukan permutasi (0, 1, …, n-1) sedemikian sehingga a0  a1  …  an-1.

Enumeration sort:
• menghitung posisi akhir setiap elemen pada list yang di-sort dan membandingkannya dengan elemen lain dan menghitung jumlah elemen yang memiliki nilai lebih kecil.
• Jika j elemen memiliki nilai lebih kecil dari ai, maka j=i; yaitu, elemen ai adalah (j + 1) elemen pada list yang di-sort setelah a0, …, aj-1.
• Jika diberikan n2 prosesor, model CRCW PRAM dapat menghitung setiap pasang elemen dan menghitung posisi list setiap elemen dalam waktu konstan. Begitu mesin telah menghitung posisi setiap elemen, diperlukan satu langkah lagi untuk memindahkan elemen ybs ke lokasi yang telah urut.

ENUMERATION SORT (SPECIAL CRCW PRAM):

Parameter n {number of elements}
Global a[0...(n-1)] {elements to be sorted}
position[0...(n-1)] {sorted positions}
sorted[0...(n-1)] {Contains sorted
elements}
begin
spawn(Pi,j, for all 0  i, j < n)

for all Pi,j, where 0  i, j < n do
position[i]  0
if a[i] < a[j] or (a[i] = a[j] and i < j) then
position[i]  1
endif
endfor
for all Pi,0, where 0  i < n do
sorted[position[i]]  a[i]
endfor
end

Satu set n elemen dapat di-sort dalam waktu (log n) dengan n2 prosesor, jika dipakai model PRAM CRCW dengan write simultan ke lokasi memori yang sama menyebabkan jumlah nilai di-assign. Jika waktu yang diperlukan untuk spawn prosesor tidak dihitung, algoritma berjalan dengan waktu konstan.

BATAS BAWAH UNTUK PARALLEL SORTING

Teorema 1:
Anggap ada n elemen yang akan di-sort pada array prosesor yang disusun menjadi mesh satu dimensi. Juga asumsikan bahwa sebelum dan sesudah sort, elemen akan didistribusikan merata, satu elemen per prosesor. Dengan demikian, batas bawah kompleksitas waktu pada algoritma sorting yang mana pun adalah (n).

Bukti:
Lebar biseksi dari jaringan mesh satu dimensi adalah 1. Misalkan posisi yang ter-sort dari semua elemen yang pada awalnya ada pada satu sisi biseksi adalah pada sisi biseksi yang lain, dan sebaliknya. Maka seluruh n elemen harus melewati satu link untuk mencapai sisi yang lain. Karena link hanya dapat membawa satu elemen sekali, jumlah langkah yang diperlukan untuk menukar elemen melalui biseksi paling tidak adalah sebesar n. Dengan demikian, batas bawah kompleksitas jaringan mesh satu dimensi dengan syarat-syarat tersebut adalah (n).

Teorema 2:
Anggap ada n elemen yang akan di-sort pada array prosesor yang tersusun sebagai mesh dua dimensi. Juga anggap bahwa sebelum dan sesudah sort, elemen-elemen tsb terdistribusi merata, satu elemen per prosesor. Maka, batas bawah kompleksitas waktu untuk algoritma sorting yang mana pun adalah (n).

Bukti:
Lebar biseksi jaringan mesh dua dimensi dengan n node adalah lebih kecil atau sama dengan n. Misalkan posisi ter-sort dari semua elemen yang pada awalnya ada pada satu sisi biseksi adalah di sisi lain biseksi tsb, dan sebaliknya. Maka seluruh n elemen harus melalui salah satu dari tidak lebih n link untuk mencapai sisi lainnya. Karena satu link hanya dapat membawa satu elemen sekali, jumlah langkah yang diperlukan untuk menukar elemen melintasi biseksi paling tidak adalah n/n. Dengan demikian, batas bawah kompleksitas array prosesor bagaimanapun yang disusun sebagai mesh dua dimensi dan berjalan dengan ketentuan yang telah diberikan di atas adalah (n/n) = (n)

Teorema 3:
Anggap ada n = 2k elemen yang akan di-sort pada array prosesor yang tersusun sebagai jaringan shuffle-exchange. Juga anggap bahwa sebelum dan sesudah sort, elemen terdistribusi merata, satu elemen per prosesor. Batas bawah untuk algoritma sort mana pun adalah (log n).

Bukti:
Misalkan posisi ter-sort elemen yang pada awalnya berada pada node 0 adalah node n-1. Pemindahan elemen tsb dari node 0 ke node n-1 menuntut paling tidak log n operasi pertukaran dan paling tidak log n-1 operasi shuffle. Dengan alasan ini, batas bawah pada algoritma sorting berbassis shuffle-exchange dengan batas-batas di atas adalah (log n).

ODD-EVEN TRANSPOSITION SORT

Odd-even transposition sort dirancang untuk model array prosesor dengan elemen-elemen processing yang disusun menjadi mesh satu dimensi.

Anggap A = (a0, a1, …, an-1) adalah himpunan n elemen yang akan di-sort. Setiap n elemen processing berisi dua variabel lokal: a, elemen unik dari array A, dan t, variabel yang berisi nilai yang diambil dari elemen processing tetangganya.

Algoritma melakukan n/2 iterasi, dan setiap iterasi memiliki dua fase:
1. odd-even exchange: nilai a pada setiap prosesor bernomer ganjil (kecuali prosesor n-1) dibandingkan dengan nilai a yang tersimpan di prosesor berikutnya. Nlai-nilai ditukar, jika perlu, sehingga prosesor dengan nomer lebih kecil berisi nilai yang lebih kecil.
2. even-odd exchange: nilai a pada setiap prosesor bernomer genap dibandingkan dengan nilai a yang tersimpan di prosesor berikutnya. Nlai-nilai ditukar, jika perlu, sehingga prosesor dengan nomer lebih kecil berisi nilai yang lebih kecil.

Setelah n/2 iterasi, nilai-nilai harus ter-sort.

ODD-EVEN TRANSPOSITION SORT (ONE-DIMENSIONAL MESH PROCESSOR ARRAY):

Parameter n
Global i
Local a {element to be sorted}
t {element taken from adjacent processor}
begin
for i  1 to n/2 do
for all Pj, where 0  j  n-1 do
if j < n-1 and odd(j) then
{Odd-even exchange}
t  successor(a) {Get value from successor}
successor(a)max(a,t) {Give away larger val} a  min(a,t) {Keep smaller value}
endif

if even(j) then
{Even-odd exchange}
t  successor(a) {Get value from successor}
successor(a)max(a,t) {Give away larger val} a  min(a,t) {Keep smaller value}
endif
endfor
endfor
end

Odd-even transposition sort dari delapan nilai pada model array prosesor mesh satu dimensi:

Indeks: 0 1 2 3 4 5 6 7
Nilai awal: G H F D E C B A
Setelah odd-even exchange: G F <H D <E B <C A
Setelah even-odd exchange: F <G D <H B <E A <C
Setelah odd-even exchange: F D <G B <H A <E C
Setelah even-odd exchange: D <F B <G A <H C <E
Setelah odd-even exchange: D B <F A <G C <H E
Setelah even-odd exchange: B <D A <F C <G E <H
Setelah odd-even exchange: B A <D C <F E <G H
Setelah even-odd exchange: A <B C <D E <F G 1 (lihat gambar keempat)
Dengan demikian t(2n) = 1 + log n, jauh lebih lebih cepat dari O(n), yang merupakan waktu terbaik pada komputer sekuensial.

2. Jumlah prosesor
p(2n) menyatakan jumlah comparator pada (n, n)-merging network.
p(2) = 1 untuk n=1 (lihat gambar pertama)
p(2n) = 2p(n) + (n-1), untuk n>1
(lihat gambar keempat)
Dengan demikian p(2n) = 1 + n log n.

3. Biaya
t(2n) = 1 + log n dan p(2n) = 1 + n log n.
Total perbandingan yang dilakukan oleh (n, n)-merging network, yaitu, yang merupakan biaya jaringan, adalah:
c(2n) = p(2n) x t(2n)
= O(n log2 n)
Jaringan ini tidak optimal dalam hal biaya karena melakukan lebih banyak operasi dari O(n) yang dibutuhkan untuk merge sekuensial.

Pembahasan:
Properti merging network ini: Deret perbandingan telah ditentukan sebelumnya.
Analisis di atas menunjukkan bahwa (n, n)-merging network sangat cepat. Dua deret dengan masing-masing 220 elemen dapat di-merge dalam 21 langkah. Hal yang sama memerlukan lebih dari dua juta langkah pada komputer sekuensial.
Namun, kecepatan tsb didapat dengan prosesor yang sangat banyak. Untuk n = 220, (n, n)-merging network terdiri dari lebih dari dua puluh juta comparator.
Arsitektur jaringan sangat ireguler, penghubung comparator memiliki panjang yang bervariasi dengan n.
 Walaupun secara teoritis bagus, merging network tidak praktis jika n bernilai besar.

MERGING PADA MODEL CREW (Concurrent Read, Exclusive Write)

Merging Sekuensial

Dua deret bilangan
A = {a1, a2, …, ar}
B = {b1, b2, …, bs}
dengan urutan naik di-merge membentuk deret C yang juga urut naik.
• Merging dilakukan oleh satu prosesor.
• Digunakan dua pointer, 1 untuk setiap deret.
• Dibuat dua elemen fiktif ar+1 dan bs+1 yang bernilai tak hingga.

procedure SEQUENTIAL MERGE (A, B, C)
Step 1: (1.1) i  1
(1.2) j  1

Step 2: for k = 1 to r + s do
if ai < bj then (i) ck  ai
(ii) i  i+1
else (i) ck  bj
(ii) j  j+1
end if
end for

• Jumlah perbandingan: r + s
• Worst case: r = s = n, algoritma berjalan dalam waktu O(n).
• Procedure ini optimal.

Merging Paralel

• Dikerjakan oleh komputer CREW SM SIMD (Concurrent Read, Exclusive Write; Shared Memory; Single Instruction stream, Multiple Data stream).
• r  s
• Digunakan N prosesor: P1, P2, , PN.
• N  r
• Worst case: r = s = n; waktu O((n/N) + log n)
• Optimal biaya untuk N  n / log n.

Setiap prosesor dianggap mampu melakukan dua prosedur sekuensial berikut:
1. Prosedur SEQUENTIAL MERGE
2. Prosedur BINARY SEARCH:
• Mengambil deret input S = {s1, s2, …, sn} bilangan yg terurut naik dan suatu bilangan x.
• Jika x ada di S, prosedur mengembalikan indeks k dari elemen sk pd S sedemikian shg x = sk.
• Jika tidak, prosedur memberi nilai nol.
• Pd setiap tahap, dilakukan perbandingan antara x dan elemen S.
• Jika keduanya sama, prosedur berhenti atau setengah elemen pada deret diabaikan.
• proses diteruskan sampai jumlah elemen yg tertinggal adalah 0 atau 1.

procedure BINARY SEARCH (S, x, k)

Step 1: (1.1) I  1
(1.2) h  n
(1.3) k  0

Step 2: while i  h do
(2.1) m  (i + h)/2
(2.2) if x = sm then (i) k  m
(ii) i  h + 1
else if x < sm then h  m-1
else i  m + 1
end if
end if
end while

procedure CREW MERGE (A, B, C)

Step 1: {Pilih N – 1 elemen A yg membagi deret menjadi N subsequence dgn ukuran yg kurang lebih sama. Namai subsequence yg dibentuk oleh N-1 elemen ini A’. Subsequence B’ dari N-1 elemen B juga dipilih dgn cara yg sama. Step ini dilakukan sbb:}
for i = 1 to N-1 do in parallel
Processor Pi menentukan ai’ dan bi’ dari
(1.1) ai’  ai[r/N]
(1.2) bi’  ai[s/N]
end for

Step 2: {Merge A’ dan B’ menjadi deret triple V = {v1, v2, …, v2N-2}, di mana setiap triple terdiri dari elemen A’ atau B’ diikuti posisinya pada A’ atau B’ diikuti oleh nama deret asalnya, yaitu, A atau B. Hal ini dilakukan sbb:}

(2.1) for i = 1 to N-1 do in parallel
(i) Prosesor Pi memakai BINARY SEARCH pd B’ untuk menemukan j terkecil sedemikian sehingga ai’ < bj’.
(ii) if j exists then vi+j-1  (ai’, i, A)
else vi+N-1  (ai’, i, A)
end if
end for
(2.2) for i = 1 to N-1 do in parallel
(i) Prosesor Pi memakai BINARY SEARCH pada A’ untuk menemukan j terkecil sehingga bi’ < aj’
(ii) if j exist then vi+j-1  (bi’, i, B)
else vi+N-1  (bi’, i, B)
end if
end for

Step 3: {Setiap prosesor merge dan menyisipkan ke dalam C, elemen-elemen dari kedua subsequence, satu dari A dan satu dari B. Indeks kedua elemen (satu di A dan satu di B) di mana setiap prosesor mulai merging, terlebih dulu dihitung dan disimpan pada array Q yg menyimpan pasangan terurut. Langkah ini dilakukan sbb:}
(3.1) Q(1)  (1, 1)
(3.2) for i = 2 to N do in parallel
if v2i-2 = (ak’, k, A) then processor Pi
(i) memakai BINARY SEARCH atas B untuk menemukan j terkecil sedemikian shg bj < ak’.
(ii) Q(i)  (kr/N, j)
else prosesor Pi
(i) memakai BINARY SEARCH atas A untuk menemukan j terkecil sedemikian shg aj < bk’.
(ii) Q(i)  (j, kr/N)
end if
end for
(3.3) for i = 1 to N do in parallel
Prosesor Pi memakai SEQUENTIAL MERGE dan Q(i) = (x, y) untuk merge dua subsequence, satu mulai pd ax dan yg lain pd by dan menempatkan hasil merge pd array C mulai pd posisi x + y – 1. Merge diteruskan sampai
(i) elemen yg lebih besar atau sama dgn komponen pertama dari v2i ditemukan masing-masing pd A dan B (ketika i  N-1)
(ii) tidak ada elemen yg tersisa pd A atau B (ketika i = N)
end for.

Ada dua hasil observasi dari algoritma di atas:
• Jika ai dibandingkan dgn bj dan ai = bj, maka algoritma memutuskan bhw ai lebih kecil.
• Operasi consurrent read dilakukan ketika prosedur BINARY SEARCH dipanggil, yaitu pd step 2.1, 2.2, dan 3.2. Di sini, beberapa prosesor mengeksekusi binary search pd deret yg sama.

Analisis

Step 1: Dgn semua prosesor bekerja paralel, setiap prosesor menghitung dua subscript. Dgn demikian langkah ini memerlukan waktu konstan.
Step 2: Langkah ini terdiri dari dua aplikasi prosedur BINARY SEARCH pada deret dgn panjang N-1, masing-masing diikuti oleh statement assignment. Ini memerlukan waktu O(log N).
Step 3: Step 3.1 terdiri dari assignment waktu konstan, dan step 3.2 membutuhkan paling banyak waktu O(log s). Untuk menganalisa step 3.3, pertama kita meneliti bahwa V terdiri dari 2N-2 elemen yg membagi C menjadi 2N-1 subsequence dgn ukuran maksimum sama dgn (r/N + s/N). Ukuran maksimum ini terjadi jika, misalnya, satu elemen ai’ dari A’ sama dgn elemen bj’ dari B’; maka r/N elemen yg lebih kecil atau sama dgn ai’ (dan lebih besar atau sama dgn a’i-1) juga lebih kecil atau sama dgn bj’, dan dgn cara yg sama, s/N elemen yg lebih kecil atau sama dgn bj’ (dan lebih besar atau sama dgn b’i-1) juga lebih kecil atau sama dgn ai’. Pd step 3 setiap prosesor membentuk dua subsequence spt ini dari C yg ukuran totalnya tidak lebih besar dari 2(r/N + s/N), kecuali PN, yg hanya membuat satu subsequence C. berarti prosedur SEQUENTIAL MERGE paling banyak memerlukan waktu O((r + s)/N).
Worst case, r = s = n, dan karena n  N, waktu jalan algoritma didominasi oleh waktu yg dibutuhkan oleh step 3. Dgn demikian
t(2n) = O((n/N) + log n)
Karena p(2n) = N, c(2n) = p(2n) x t(2n) = O(n + N log n), dan algoritma optimal biaya ketika N  n/log n.

PENGOLAHAN PARALEL

SEARCHING

Dalam bentuknya yang paling dasar, masalah searching dinyatakan sbb.:
Jika ada satu deret S = {s1, s2, …, sn} yg terdiri dari integer dan ada integer x, diminta untuk menentukan apakah x = sk untuk sk yg ada di S.

procedure SEQUENTIAL SEARCH (S, x, k)
Step 1: (1.1) i  1
(1.2) k  0

Step 2: while (i  n and k = 0) do
if si = x then k  i end if
i  i+1
end while

Worst case: waktu = O(n)

SEARCHING DERET TERURUT
S = {s1, s2, …, sn} terurut naik, yaitu, s1  s2  …  sn.
Yang di-search adalah file dgn n record dan terurut berdasar field s.

si INFORMASI LAIN

EREW (Exclusive Read Exclusive Write) SEARCHING

• Tersedia N-prosesor komputer EREW SM SIMD untuk search S untuk elemen x, dgn 1 < N  n.
• Nilai x harus diketahui semua prosesor. Dipakai prosedur BROADCAST dlm waktu O(log N).
• Deret S dibagi menjadi N subsequence, masing-masing dgn panjang n/N.
• Semua prosesor melakukan prosedur BINARY SEARCH yg membutuhkan waktu O(log(n/N)) worst case.
• Elemen S dianggap berbeda semua, shg paling banyak satu prosesor menemukan sk sama dgn x dan mengembalikan k.
• Waktu total: O(log N) + O(log(n/N)) = O(log n)  sama dengan BINARY SEARCH yg berjalan pd satu prosesor, dgn demikian tdk ada penambahan kecepatan.

CREW (Concurrent Read Exclusive Write) SEARCHING

• Tersedia N-prosesor komputer CREW SM SIMD untuk search S untuk elemen x, dgn 1 < N  n.
• Algoritma sama dgn EREW, kecuali semua prosesor membaca x bersamaan dlm waktu konstan dan kemudian melakukan prosedur BINARY SEARCH pd subsequence masing-masing.
• Waktu: O(log(n/N)) worst case  lebih cepat dari BINARY SEARCH yg berjalan pd satu prosesor.

SEARCHING DERET ACAK

Deret S = {s1, s2, …, sn} tdk urut dan belum tentu memiliki elemen yg berbeda semua.
Search spt ini dinamakan juga query.
Search juga berguna untuk maintenance file, misalnya menyisipkan (insert) record baru dan men-delete record yg ada.

Searching pd komputer SM SIMD
Tersedia N-prosesor komputer untuk search S untuk elemen x, dgn 1 0 then k  ki end if
end for.

Analisis:

EREW:
• Step 1 diimpelemntasi dgn menggunakan prosedur BROADCAST danmemerlukan waktu O(log N).
• Step 2: prosedur SEQUENTIAL SEARCH memerlukan O(n/N) worst case.
• Step 3: prosedur STORE berjalan dlm waktu O(log N).
• Running time asimptotik total:
t(n) = O(log N) + O(n/N),
dan biaya sebesar:
c(n) = O(N log N) + O(n)
yg tdk optimal.

ERCW:
Step 1 dan 2 sama dgn kasus EREW, sementara step 3 membutuhkan waktu konstan. Running time asimptotik total tetap tdk berubah.

CREW:
Step 1 sekarang membutuhkan waktu konstan, sementara step 2 dan 3 sama dgn kasus EREW. Running time asimptotik total tetap tdk berubah.

CRCW:
Kedua langkah 1 dan 3 membutuhkan waktu konstan, sementara step 3 sama dgn kasus EREW. Running time total sekarang sebesar O(n/N), dan biaya sebesar:
c(n) = N x O(n/N) = O(n)
yg optimal.

PENGOLAHAN PARALEL

SEARCHING

Dalam bentuknya yang paling dasar, masalah searching dinyatakan sbb.:
Jika ada satu deret S = {s1, s2, …, sn} yg terdiri dari integer dan ada integer x, diminta untuk menentukan apakah x = sk untuk sk yg ada di S.

procedure SEQUENTIAL SEARCH (S, x, k)
Step 1: (1.1) i  1
(1.2) k  0

Step 2: while (i  n and k = 0) do
if si = x then k  i end if
i  i+1
end while

Worst case: waktu = O(n)

SEARCHING DERET TERURUT
S = {s1, s2, …, sn} terurut naik, yaitu, s1  s2  …  sn.
Yang di-search adalah file dgn n record dan terurut berdasar field s.

si INFORMASI LAIN

EREW (Exclusive Read Exclusive Write) SEARCHING

• Tersedia N-prosesor komputer EREW SM SIMD untuk search S untuk elemen x, dgn 1 < N  n.
• Nilai x harus diketahui semua prosesor. Dipakai prosedur BROADCAST dlm waktu O(log N).
• Deret S dibagi menjadi N subsequence, masing-masing dgn panjang n/N.
• Semua prosesor melakukan prosedur BINARY SEARCH yg membutuhkan waktu O(log(n/N)) worst case.
• Elemen S dianggap berbeda semua, shg paling banyak satu prosesor menemukan sk sama dgn x dan mengembalikan k.
• Waktu total: O(log N) + O(log(n/N)) = O(log n)  sama dengan BINARY SEARCH yg berjalan pd satu prosesor, dgn demikian tdk ada penambahan kecepatan.

CREW (Concurrent Read Exclusive Write) SEARCHING

• Tersedia N-prosesor komputer CREW SM SIMD untuk search S untuk elemen x, dgn 1 < N  n.
• Algoritma sama dgn EREW, kecuali semua prosesor membaca x bersamaan dlm waktu konstan dan kemudian melakukan prosedur BINARY SEARCH pd subsequence masing-masing.
• Waktu: O(log(n/N)) worst case  lebih cepat dari BINARY SEARCH yg berjalan pd satu prosesor.

SEARCHING DERET ACAK

Deret S = {s1, s2, …, sn} tdk urut dan belum tentu memiliki elemen yg berbeda semua.
Search spt ini dinamakan juga query.
Search juga berguna untuk maintenance file, misalnya menyisipkan (insert) record baru dan men-delete record yg ada.

Searching pd komputer SM SIMD
Tersedia N-prosesor komputer untuk search S untuk elemen x, dgn 1 0 then k  ki end if
end for.

Analisis:

EREW:
• Step 1 diimpelemntasi dgn menggunakan prosedur BROADCAST danmemerlukan waktu O(log N).
• Step 2: prosedur SEQUENTIAL SEARCH memerlukan O(n/N) worst case.
• Step 3: prosedur STORE berjalan dlm waktu O(log N).
• Running time asimptotik total:
t(n) = O(log N) + O(n/N),
dan biaya sebesar:
c(n) = O(N log N) + O(n)
yg tdk optimal.

ERCW:
Step 1 dan 2 sama dgn kasus EREW, sementara step 3 membutuhkan waktu konstan. Running time asimptotik total tetap tdk berubah.

CREW:
Step 1 sekarang membutuhkan waktu konstan, sementara step 2 dan 3 sama dgn kasus EREW. Running time asimptotik total tetap tdk berubah.

CRCW:
Kedua langkah 1 dan 3 membutuhkan waktu konstan, sementara step 3 sama dgn kasus EREW. Running time total sekarang sebesar O(n/N), dan biaya sebesar:
c(n) = N x O(n/N) = O(n)
yg optimal.

PENGOLAHAN PARALEL

OPERASI MATRIKS

Topik yang akan dibahas
• transpose
• perkalian

TRANSPOSE

Definisi:
a11 a12 a13 a14
A = a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

a11 a21 a31 a41
AT = a12 a22 a32 a42
a13 a23 a33 a43
a14 a24 a34 a44

Prosedur sekuensial:
procedure TRANSPOSE (A)
for i = 2 to n do
for j = 1 to i-1 do
aij  aji
end for
end for.

Waktu: O(n2); jumlah langkah: (n2)
MESH TRANSPOSE

a11 a12 a13 a14

a21 a22 a23 a24

a31 a32 a33 a34

a41 a42 a43 a44

Awalnya: prosesor P(i,j) menyimpan elemen data aij.
Pada akhir komputasi: P(i,j) menyimpan aji.

Ide algoritma:
• Elemen diagonal tetap stasioner.
• Elemen di bawah diagonal dipindah ke posisi simetris di atas diagonal (tanda panah biasa).
• Elemen di atas diagonal dipindah ke posisi simetris di bawah diagonal (tanda panah terputus-putus).
• Setiap prosesor P(i,j) memiliki tiga register:
1. A(i,j) digunakan untuk menyimpan aij pd awalnya dan aji ketika algoritma berakhir.
2. B(i,j) digunakan untuk menyimpan data yg diterima dari P(i, j+1) atau P(i-1, j), yaitu, dari tetangga di kanan atau atasnya.
3. C(i,j) digunakan untuk menyimpan data yg diterima dari P(i, j-1) atau P(i+1, j), yaitu, dari tetangga di kiri atau bawahnya.

procedure MESH TRANSPOSE (A)
Step 1: do steps 1.1 and 1.2 in parallel
(1.1) for i=2 to n do in parallel
for j=1 to i-1 do in parallel
C(i-1,j)  (aij, j, i)
end for
end for
(1.2) for i=1 to n-1 do in parallel
for j=i+1 to n do in parallel
B(i,j-1)  (aij, j, i)
end for
end for.

Step 2: do steps 2.1, 2.2, and 1.2 in parallel
(2.1) for i=2 to n do in parallel
for j=1 to i-1 do in parallel
while P(i,j) receives input form its neighbours do
(i) if (akm,m,k) is received from P(i+1, j)
then send it to P(i-1, j)
end if
(ii) if (akm,m,k) is received from P(i-1, j)
then if i=m and j=k
then A(i,j)  akm {destination reached)
else send (akm,m,k) to P(i+1, j)
end if
end if
end while
end for
end for
(2.2) for i=1 to n do in parallel
while P(i,i) receives input form its neighbours do
(i) if (akm,m,k) is received from P(i+1, i)
then send it to P(i, i+1)
end if
(ii) if (akm,m,k) is received from P(i, i+1)
then send it to P(i+1, i)
end if
end while
end for
(2.3) for i=1 to n-1 do in parallel
for j=i+1 to n do in parallel
while P(i,j) receives input form its neighbours do
(i) if (akm,m,k) is received from P(i, j+1)
then send it to P(i, j-1)
end if
(ii) if (akm,m,k) is received from P(i, j-1)
then if i=m and j=k
then A(i,j)  akm {destination reached)
else send (akm,m,k) to P(i, j+1)
end if
end if
end while
end for
end for.

Analisis:
• Setiap elemen aij, i>j, harus menelusuri kolomnya ke atas sampai mencapai P(j,j) dan kemudian berjalan sepanjang baris hingga sampai di P(j,i). Hal yg sama berlaku untuk aij, j>i.
• Jalur terpanjang adalah yg dijalani oleh an1 (atau a1n) yg terdiri dari 2(n-1) langkah.
• Running time prosedur MESH TRANSPOSE: t(n) = O(n)
• p(n) = n2
• Cost: O(n3)  tidak optimal

Contoh:
x 1 2
A = -4 y 3
-5 -6 z

A = x A = 1 A = 2
B = B = B =
C = C = C =

A = -4 A = y A = 3
B = B = B = Keadaan awal
C = C = C =

A = -5 A = -6 A = z
B = B = B =
C = C = C =

A = x A = 1 A = 2
B = 1 B = 2 B =
C = -4 C = C =

A = -4 A = y A = 3
B = B = 3 B = Step 1
C = -5 C = -6 C =

A = -5 A = -6 A = z
B = B = B =
C = C = C =

A = x A = -4 A = 2
B = 2 B = B =
C = -5 C = C =

A = 1 A = y A = -6
B = B = B = Iterasi pertama step 2
C = C = C =

A = -5 A = 3 A = z
B = B = B =
C = C = C =

A = x A = -4 A = 2
B = B = B =
C = C = -5 C =

A = 1 A = y A = -6
B = 2 B = B = Iterasi kedua step 2
C = C = C =

A = -5 A = 3 A = z
B = B = B =
C = C = C =

A = x A = -4 A = -5
B = B = B =
C = C = C =

A = 1 A = y A = -6
B = B = B = Iterasi ketiga step 2
C = C = C =

A = 2 A = 3 A = z
B = B = B =
C = C = C =

SHUFFLE TRANSPOSE

Pertimbangan:
Speedup MESH TRANSPOSE hanya linier, dianggap kecil karena jumlah prosesor kuadratik.
Geometri yg berbeda dpt men-transpose matriks dalam waktu logaritmik.
n = 2q; matrik A(n x n)
Digunakan interkoneksi perfect suffle dgn n2 prosesor: P0, P1, Pn-1.
aij disimpan pada awalnya tersimpan di prosesor Pk, dengan k = 2q(i-1) + (j-1).

P9 P10 P11 P12 P13 P14 P15

a11 a12 a13 a14 a21 a22 a23 a24 a31 a32 a33 a34 a41 a42 a43 a44

P0 P1 P2 P3 P4 P5 P6 P7 P8

Setelah q operasi shuffle, prosesor Pk berisi elemen aji.
Pk dihubungkan ke Pm; m didapat dengan menggeser bit k ke kiri siklis.

Indeks prosesor k terdiri dari 2q bit. q most significant bit merepresentasikan i-1, dan q least significant bit menyatakan j-1.
Setelah q shuffle (yaitu q pergeseran siklis ke kiri), elemen yang tadinya ada pada Pk akan berada di prosesor yang indeksnya adalah:
s = 2q(j-1) + (i-1)

procedure SHUFFLE TRANSPOSE (A)
for i=1 to q do
for k=1 to 22q-2 do in parallel
Pk sends the element of A it currently holds to P2kmod(22q-1)
end for
end for.

Analisis:
• Iterasi: q waktu konstan
• Waktu: t(n) = O(log n)
• p(n)= n2; c(n) = O(n2 log n)  tdk optimal
• Tetapi interkoneksi shuffle lebih cepat dari mesh.

Jalannya elemen:
a11: P0  P0  P0 a12: P1  P2  P4
a13: P2  P4  P8 a14: P3  P6  P12
a21: P4  P8  P1 a22: P5  P10  P5
a23: P6  P12  P9 a24: P7  P14  P13
a31: P8  P1  P2 a32: P9  P3  P6
a33: P10  P5  P10 a34: P11  P7  P14
a41: P12  P9  P3 a42: P13  P11  P7
a43: P14  P13  P11 a44: P15  P15  P15

EREW TRANSPOSE

 merupakan algoritma yang cost-optimal.
• Algoritma menggunakan (n2-n)/2 prosesor dan berjalan pada komputer EREW SM SIMD.
• Matriks A berada di shared memory.
• Setiap prosesor memiliki dua indeks i dan j, dengan 2in dan 1ji-1.
• Semua prosesor beroperasi paralel dan prosesor Pij menukar dua elemen A, yaitu aij dan aji.

procedure EREW TRANSPOSE (A)
for i=2 to n do in parallel
for j=1 to i-1 do in parallel
aij  aji
end for
end for.

Analisis:
• Running time: t(n) = O(1)
• p(n) = O(n2); c(n) = O(n2)  optimal

Contoh:

P21

1 2 3

4 5 6

7 8 9

P32

P31

PERKALIAN MATRIKS DENGAN MATRIKS

Definisi:
A(m x n) x B(n x k) = C(m x k)
n
cij =  ais x bsj, 1  i  m, I  j  k
s=1

Algoritma sekuensial:

procedure MATRIX MULTIPLICATION (A, B, C)
for i=1 to m do
for j=1 to k do
(1) cij  0
(2) for s=1 to n do
cij  cij + (ais x bsj)
end for
end for
end for.

Waktu: O(n3)

PERKALIAN MESH

Digunakan m x k prosesor untuk mengalikan A(m x n) dengan B(n x k).
1. Matriks A dan B dimasukkan ke boundary processor di kolom 1 dan baris 1, berturut-turut.
2. Baris i matriks A ketinggalan satu satuan waktu dari baris i-1 untuk 2  i  m.
3. Kolom j matriks B ketinggalan satu satuan waktu dari kolom j-1 untuk 2  j  k.
4. Langkah 2 dan 3 untuk menjamin bahwa ais bertemu dengan bsj pada prosesor P(i, j) pada waktu yang tepat.
5. Di akhir algoritma, elemen hasil perkalian, cij, berada di prosesor P(i, j).

Pada awalnya, cij sama dengan nol.
Ketika P(i, j) menerima dua input a dan b, prosesor:
(I) mengalikan keduanya,
(ii) menambahkan hasilnya ke cij,
(iii) mengirimkan a ke P(i, j+1) kecuali j = k, dan
(iv) mengirim b ke P(i+1, j) kecuali i=m.

b13
b12 b23
b11 b22 b33
b21 b32 b43
b31 b42 b53
b41 b52
b51

a11 a12 a13 a14 a15

P(1,1) P(1,2) P(1,3)

a21 a22 a23 a24 a25

P(2,1) P(2,2) P(2,3)

a31 a32 a33 a34 a35

P(3,1) P(3,2) P(3,3)

a41 a42 a43 a44 a45

P(4,1) P(4,2) P(4,3)

procedure MESH MATRIX MULTIPLICATION (A, B, C)
for i=1 to m do in parallel
for j=1 to k do in parallel
(1) cij  0
(2) while P(i, j) receives two inputs a and b do
(i) cij  cij + (a x b)
(ii) if i < m then send b to P(i+1, j)
end if
(iii) if j < k then send a to P(i, j+1)
end if
end while
end for
end for.

Analisis:
• Dengan menganggap m  n dan k  n, run time: t(n) = O(n).
• p(n) = O(n2), c(n) = O(n3)  sama dengan prosedur sekuensial.

PERKALIAN MATRIKS SHUFFLE-EXCHANGE

Jika tersedia n3 = 23q prosesor pada model SIMD shuffle-exchange, dua matriks n x n dapat dikalikan dalam waktu (log n).

BAB IX
PENYELESAIAN SISTEM LINIER

I. PENDAHULUAN
1.1. Topik-topik Yang Dibahas :
1. Substitusi mundur (back substitution)
2. Reduksi ganjil-genap (odd-even reduction) atau reduksi siklis (cyclic reduction)

1.2. Metoda Pembahasan
1. Algoritma sequensial
2. Potensi paralelisasi
3. Algoritma paralel
4. Speedup

1.3. Terminologi :

i. Bentuk umum sistem linier :
A x = b, A matriks n  n, x, b vektor n  1
ii. Elemen matriks A baris ke-i kolom ke-j : atau a[i, j]
Elemen vektor x baris ke- i : atau x[i]
Elemen vektor b baris ke- i : atau b[i]
iii. Matriks A adalah segitiga atas (upper triangular) jika : = 0  i  j
iv. Matriks A adalah segitiga bawah (lower triangular) jika : = 0  i  j
v. Matriks A adalah tridiagonal jika dan hanya jika :
= 0  i  j  1
vi. Matriks A adalah diagonal dominan (diagonally dominant) jika :
    1  i  n
vii. Matriks A adalah simetri (symmetric) jika :
=  1  i, j  n
viii. Matriks A adalah definit positif (positive definite) jika ia simetri, diagonal dominan, dan  0  1  i  n
ix. Berikut ini adalah contoh matriks-matriks di atas :

Matriks segitiga atas Matriks segitiga bawah

Matriks tridiagonal Matriks diagonal dominan

Matriks simetri Matriks definit positif
II. SUBSTITUSI MUNDUR
2.1. Algoritma Sequensial
Contoh 9.1
Selesaikan sistem persamaan berikut :
1 + 1  1 + 4 = 8
 2  1 + 1 = 5
2  3 = 0
2 = 4
Jawab :
Vektor x = [ ] diperoleh melalui prosedur berikut :
1. hitung : = 4/2 = 2
2. substitusikan nilai ke semua persamaan di atasnya, koreksi ruas kanannya persamaan; hasilnya adalah :
1 + 1  1 = 0
2  1 = 3
2 = 6
3. ulangi langkah (1) dan (2) berturut-turut untuk dan
4. ulangi langkah (1) untuk
Dengan cara ini maka diperoleh :
x = [ ] = [9 -6 3 2]

Sistem di atas dapat dituliskan sebagai A x = b, dimana :
A = = matriks segitiga atas, b =
Untuk sistem segitiga atas berukuran n prosedur di atas dapat digeneralisasi menjadi algoritma sekuensial berikut :

Algoritma 9.1. BACK.SUBSTITUTION (SISD) :
Global n {ukuran sistem}
a[1.. n][ 1.. n] {elemen-elemen matriks A}
b[1.. n] {elemen-elemen vektor b}
x[1.. n] {elemen-elemen vektor x}
i {indeks kolom}
j {indeks baris}
1. begin
2. for i  n downto 1 do
3. x[i]  b[i]/a[i][i]
4. for j  1 to i 1 do
5. b[j]  b[j]  x[i]  a[j][i]
6. a[j][i]  0 {statement ini bersifat opsional}
7. endfor
8. endfor
9. end
Algoritma 9.1. melakukan operasi pembagian, perkalian, dan pengurangan. Banyaknya operasi pembagian adalah n (baris 3) sedangkan banyaknya operasi pengurangan dan perkalian (baris 5) adalah :
(n 1) + (n 2) + … + 2 + 1 = ½ n(n 1) (9.1)
sehingga kompleksitas algoritma 9.1. adalah (n ).
Instruksi pada baris 6 bersifat opsional, di antaranya untuk menayangkan matriks pada setiap iterasi.

2.2. Potensi Paralelisasi
Proses substitusi nilai ke tiga persamaan di atasnya pada penyelesaian contoh 9.1 di atas dapat dilakukan secara serempak.

2.3. Algoritma Paralel
Berdasarkan potensi paralelisasi maka algoritma paralel dapat disusun sebagai berikut :
Algoritma 9.2. BACK.SUBSTITUTION (UMA
MULTIPROSESOR) :
Global n {ukuran sistem}
p {banyaknya proses}
a[1.. n][ 1.. n] {elemen-elemen matriks A}
b[1.. n] {elemen-elemen vektor b}
x[1.. n] {elemen-elemen vektor x}
i {indeks kolom}
Lokal j {indeks indetifier proses}
k {indeks baris}
1. begin
2. for i  n downto 1 do
3. x[i] b[i]/ a[i][i]
4. forall P[j] where 1  j  p do
5. for k  j to i 1 step p do
6. b[k] b[k]  x[i]  a[k][i]
7. a[k][i]  0 {statement ini bersifat opsional}
8. endfor
9. endforall
10. endfor
11. end
Algoritma 9.2. melakukan n operasi pembagian. Banyak-nya operasi pengurangan dan perkalian adalah :
(n1)/p + (n2)/p + … + 2/p + 1/p = n(n-1)/p (9.2)
sehingga kompleksitas algoritma 9.2. adalah (n / p).
Berikut ini adalah tracing penerapan algoritma 9.2. terhadap sistem persamaan pada contoh 9.1. untuk p = 2 :

i = 4 : x[4] = b[4]/a[4][4] = 4/2 = 2  x[4] = 2
P[1] : k = 1 : b[1] = b[1] – x[4]  a[1][4] = 8 – 2  4 = 0
a[1][4] = 0
k = 3 : b[3] = b[3] – x[4]  a[3][4] = 0 – 2  (-3) = 6
a[3][4] = 0
P[2] : k = 2 : b[2] = b[2] – x[4]  a[2][4] = 5 – 2  1 = 3
a[2][4] = 0

i = 3 : x[3] = b[3]/a[3][3] = 6/2 = 3  x[3] = 3
P[1] : k = 1 : b[1] = b[1] – x[3]  a[1][3] = 0 – 3  (-1) = 3
a[1][3] = 0
P[2] : k = 2 : b[2] = b[2] – x[3]  a[2][3] = 3 – 3  (-3) = 12
a[2][3] = 0

i = 2 : x[2] = b[2]/a[2][2] = 12/(-2) = -6  x[2] = -6
P[1] : k = 1 : b[1] = b[1] – x[2]  a[1][2] = 3 – (-6)  1 = 9
a[1][2] = 0

i = 1 : x[1] = b[1]/a[1][1] = 9/(1) = 9  x[1] = 9

2.4. Speedup
Speedup algoritma 9.2. ini adalah :
S = , = p (9.3)
Menurut Amhdal, untuk jumlah prosesor tertentu nilai S akan meningkat menurut kenaikan ukuran matriks n. Gambar berikut adalah data akibat fenomena ini.

Gambar 9.1. Speedup paralelisasi algoritma substitusi mundur untuk berbagai ukuran matriks tridiagonal.

III. REDUKSI GANJIL-GENAP/REDUKSI SIKLIS :
3.1. Algoritma Sequensial
Contoh 9.2
Selesaikan sistem persamaan berikut :
16 + 4 = 8
4 + 11  5 = 7
2 + 14  6 = 13
5 + 18 = 24
Jawab
Vektor x = [ ] diperoleh melalui prosedur berikut :
1. eliminasi pada persamaan kedua dengan meng-gunakan persamaan pertama sehingga diperoleh :
16 + 4 = 8
10  5 = 5
2 + 14  6 = 13
5 + 18 = 24
2. ulangi langkah (1) untuk pada persamaan ketiga dan pada persamaan keempat. Hasilnya adalah :
16 + 4 = 8
10  5 = 5
15  6 = 12
20 = 20
3. selesaikan persamaan terakhir, dimulai dari penyelesaian pada persamaan keempat.
Dengan cara ini maka diperoleh :
x = [ ] = [0.225 1.100 1.200 1.000]
Sistem di atas dapat dituliskan sebagai A x = b, dimana :
A = = matriks tridiagonal, b =
Untuk sistem tridiagonal berukuran n prosedur di atas dapat digeneralisasi menjadi algoritma sekuensial berikut :
Algoritma 9.3. TRIDIAGONAL.SYSTEM.SOLVER (SISD) :
Global n {ukuran sistem}
f[2.. n], g[1.. n], h[1..( n -1)] {elemen matriks A}
b[1.. n] {elemen vektor b}
x[1.. n] {elemen vektor x}
1. begin
2. for i  1 to n 1 do
3. g[i+1]  g[i+1]  (f[i+1] / g[i]) x h[i]
4. b[i+1]  b[i+1]  (f[i+1] / g[i]) x b[i]
5. endfor
6. for i  n downto 2 do
7. x[i]  b[i] / g[i]
8. b[i 1]  b[i 1]  x[i] x h[i 1]
9. endfor
10. x[1]  b[1] / g[1]
11. end

Algoritma 9.3. mengandung 2 loop masing-masing dengan n1 iterasi. Setiap iterasi memerlukan waktu yang tetap. Kompleksitas algoritma dengan demikian adalah (n).
3.2. Potensi Paralelisasi
Perhatikan dua matriks berikut :
A= , A =
Matriks A adalah hasil transformasi dari matriks A. Matriks A terdiri dari dua matriks tridiagonal yang saling lepas sehingga penyelesaian kedua bagian vektor x dapat dilakukan secara serempak.

3.3. Algoritma Paralel
Algoritma paralel dibangun untuk mentransformasikan matriks A menjadi A . Pola umum struktur matriks tridiagonal berukuran n adalah :
+ =
+ + = 2  i  n-1 (9.4)
+ =
Untuk 3  i  n-2, persamaan (i-1), (i), dan (i+1) adalah :
+ + =
+ + =
+ + =
Dari persamaan (i-1) dan (i+1) dapat diperoleh :
= (1/ )( – – ) (9.4a)
= (1/ )( – – ) (9.4b)
Substitusi kedua persamaan ke persamaan (i) akan menghasilkan :
+ + = (9.5)
dimana :
= , = + + (9.6a)
= , = + + (9.6b)
= , = (9.6c)
Persamaan (9.6) juga berlaku untuk : , , , , , , kecuali untuk :
= + dan = + (9.6d)
= + dan = + (9.6e)
Ungkapan matriks persamaan (9.5) adalah A x = b yang merupakan transformasi dari Ax = b dimana :
A = (9.7)
Persamaan A x = b dapat disusun ulang menjadi = , dimana =
(9.8a)
= [ … ] (9.8b)
= [ ] (9.8c)
Berdasarkan pembahasan di atas maka dapat disusun sebuah algoritma seperti berikut di bawah ini.

Algoritma 9.4. CYCLIC.REDUCTION(SIMD) :
Global n {ukuran sistem}
f[2.. n], g[1.. n], h[1..( n -1)] {elemen A}
b[1.. n] {elemen b}
f [3.. n], g [1.. n], h [1..( n -2)] {elemen A }
b [1.. n] {elemen b }
p {# proses}
 [2.. n],  [1..( n -1)] {faktor skala}
x[1.. n] {elemen vektor x}
1. begin
2. for i  1 to n 1 do
3.  [i+1]  -f[i+1] / g[i]
4.  [i]  – h[i]/ g[i+1]
5. endfor
6. for i  2 to n 1 do
7. f [i+1]   [i+1]  f[i]
8. g [i]  g[i] +  [i]  h[i-1] +  [i]  f[i+1]
9. h [i-1]   [i-1]  h[i]
10. b [i]  b[i] +  [i]  b[i-1] +  [i]  b[i+1]
11. endfor
12. g [1]  g[1] +  [1]  f[2]
13. g [n]  g[n] +  [n]  h[n -1]
14. b [1]  b[i] +  [1]  b[2]
15. b [n]  b[n] +  [n]  b[n -1]
16. forall P[j] where 1  j  2 do
17. for i  2 to n 1 step 2 do
18. g [i+j]  g [i+j]
 (f [i+j) / g [i+j-2]) x h [i+j-2]
19. b [i+j]  b [i+j]
 (f [i+j) / g [i+j-2]) x b [i+j-2]
20. endfor
21. for i  n-2+j downto j+1 do step 2
22. x[i]  b [i] / g [i]
23. b [i  2]  b [i  2]  x[i] x h [i  2]
24. endfor
25. x[j]  b [j] / g [j]
26. endfor
27. end

Algoritma 9.4. terdiri dari 4 loop masing-masing dengan kompleksitas algoritma (n). Berikut ini adalah tracing penerapan algoritma 9.4. terhadap sistem persamaan pada contoh 9.2. :

looping 2-5 :
i = 1 :  [2] = -f[2] / g[1] = -4/16 = -1/4
 [1] = – h[1] / g[2] = -4/11
i = 2 :  [3] = -f[3] / g[2] = -2/11
 [2] = – h[2] / g[3] = 5/14
i = 3 :  [4] = -f[4] / g[3] = -5/14
 [3] = – h[3] / g[4] = 6/18 = 1/3

looping 6 – 11 :
i = 2 : f [3] =  [3]  f [2] = -2/11  4 = -8/11
g [2] = g[2] +  [2]  h[1] +  [2]  f[3]
= 11 – 1/4  4 + 5/14  2 = 75/7
h [1] =  [1]  h[2] = -4/11  (-5) = 20/11
b [2] = b[2] +  [2]  b[1] +  [2]  b[3]
= 7 – 1/4  8 + 5/14  13 = 135/14
i = 3 : f [4] =  [4]  f [3] = -5/14  2 = -5/7
g [3] = g[3] +  [3]  h[2] +  [3]  f[4]
= 14 – 2/11  (-5)+ 1/3  5 = 547/33
h [2] =  [2]  h[3] = 5/14  (-6) = -15/7
b [3] = b[3] +  [3]  b[2] +  [3]  b[4]
= 13 – 2/11  7 + 1/3  24 = 217/11

baris 12-15 :
g [1] = g[1] +  [1]  f[2] = 16 – 4/11  4 = 160/11
g [4] = g[4] +  [4]  h[3] = 18 – 5/14  (-6) = 141/7
b [1] = b[1] +  [1]  b[2] = 8 – 4/11  7 = 60/11
b [4] = b[4] +  [4]  b[3] = 24 – 5/14  13 = 271/14

Sampai tahap ini terbentuk matriks dan vektor berikut :

= , =
looping paralel 16 – 28, j = 1 :
sublooping 17-20
i = 2 : g [3] = g [3] – (f [3] / g [1])  h [1]
= (547/33) – ((-8/11) / (160/11))  20/11 = 550/33
b [3] = b [3] – (f [3] / g [1])  b [1]
= (217/11) – ((-8/11) / (160/11))  60/11 = 220/11
sublooping 21-24
i = 3 x[3] = b[3] / g[3] = (220/11) / (550/33) = 1.200
b[1] = b[1] – x[3]  h[1] = 60/11 – 1.200  20/11 = 36/11
instruksi 25 :
x[1] = b[1] / g[1] = (36/11) / (160/11) = 0.225

looping paralel 16 – 28, j = 2 :
sublooping 17-20
i = 2 : g [4] = g [4] – (f [4] / g [2])  h [2]
= (141/7) – ((-5/7) / (75/7))  (-15/7) = 20
b [4] = b [4] – (f [4] / g [2])  b [2]
= (271/14) – ((-5/7) / (75/7))  135/14 = 20
sublooping 21-24
i = 3 x[4] = b[4] / g[4] = 20 / 20 = 1.000
b[2] = b[2] – x[4]  h[2] = 135/14 – 1.000  (-15/7) = 165/14
instruksi 25 :
x[2] = b[2] / g[2] = (165/14) / (75/7) = 1.100

2.4. Speedup
Kompleksitas algoritma dapat juga dinyatakan melalui nilai total operasi floating point. Untuk algoritma 9.3. nilai total operasi floating point adalah :
= 9n – 8 (9.9)
sedangkan untuk algoritma 9.4. adalah :
= 16.5n – 22 (9.10)
sehingga speedup adalah :
= 0.545 (9.11)
Jika paralelisasi juga dilakukan pada langkah 2-5, 6-11, dan 12-16 maka total operasi floating point algoritma 9.4 adalah :
= 10.5n – 18 (9.12)
sehingga speedup adalah :
= 0.857 (9.13)
Baik (9.11) maupun (9.12) adalah nilai speedup yang buruk (< 1.0). Kedua nilai tersebut dihasilkan jika paralelisasi menggunakan 2 prosesor. Jika menggunakan 4 prosesor maka instruksi-instruksi yang dapat di-assign ke masing-masing prosesor adalah instruksi : 6-10, 12-15, dan, dengan sedikit perbedaan penanganan, langkah 16-25. Total operasi floating point dengan 4 prosesor adalah :
= 7.5n – 14 (9.14)
sehingga speedup adalah :
= 1.2 (9.15)
Nilai (9.15) ini adalah nilai maksimum untuk paralelisasi algoritma 9.4.