PEMBAHASAN TENTANG ALGORITMA Sebelum belajar algoritma pemrograman, akan lebih baik kita pahami terlebih dahulu langkah-langkah pembuatan suatu program. Terdapat beberapa langkah umum dalam pembuatan suatu program yaitu:
Mendefinisikan masalah Langkah yang pertama dilakukan adalah mendefinisikan permasalahan. langkah ini harus dilakukan untuk menentukan masalah yang ada serta ditentukan pula input dan output program. Mencari solusi Kemudian ditentukan solusi dari permasalahan yang dihadapi. Bila untuk mendapatkan solusi harus melalui langkah yang terlalu rumit dapat dilakukan pembagian masalah dalam beberapa modul-modul kecil agar mudah untuk dikerjakan. Lalu modul-modul kecil tersebut digabungkan menjadi satu untuk dapat menentukan solusi.Menentukan algoritma Dalam pemilihan algoritma, pemrogram atau analis harus menggunakan algoritma yang sesuai dan efisien untuk masalah yang dihadapi.Menulis program Penulisan program bisa dilakukan dengan menggunakan bahasa pemrograman yang dikuasai dan memiliki kompabilitas dengan perangkat keras yang akan menggunakan program tersebut.Menguji program Bila program sudah selesai dibuat, pengujian diperlukan untuk mengetahui apakah program yang dibuat sudah layak untuk digunakan.Mendokumentasikan program Penulisan dokumentasi yang biasanya dilupakan oleh pemrogram menjadi sangat penting saat akan dilakukan perubahan pada program yang dibuat. penulisan program ini dapat dilakukan dengan menulis komentar pada source code tentang kegunaannya (variabel, parameter, procedur, fungsi). Merawat program Program yang sudah selesai dibuat juga perlu dirawat dengan pendeteksian bug yang belum diketahui sebelumnya juga penambahan fasilitas baru yang mempermudah pengguna program. Dari penjelasan diatas, dapat kita peroleh kesimpulan bahwa pembelajaran algoritma pemrograman adalah bagian dari langkah-langkah pembuatan program. Untuk lebih jelasnya tentang algoritma dan pemrograman akan diulas sebagai berikut : Ditinjau dari asal-usul katanya, kata Algoritma sendiri mempunyai sejarah yang aneh. Orang hanya menemukan kata algorism yang berarti proses menghitung dengan angka arab. Anda dikatakan algorist jika Anda menghitung menggunakan angka arab. Para ahli bahasa berusaha menemukan asal kata ini namun hasilnya kurang memuaskan. Akhirnya para ahli sejarah matematika menemukan asal kata tersebut yang berasal dari nama penulis buku arab yang terkenal yaitu Abu Ja’far Muhammad Ibnu Musa Al-Khuwarizmi. Al-Khuwarizmi dibaca orang barat menjadi Algorism. Al-Khuwarizmi menulis buku yang berjudul Kitab Al Jabar Wal-Muqabala yang artinya “Buku pemugaran dan pengurangan” (The book of restoration and reduction). Dari judul buku itu kita juga memperoleh akar kata “Aljabar” (Algebra). Perubahan kata dari algorism menjadi algorithm muncul karena kata algorism sering dikelirukan dengan arithmetic, sehingga akhiran –sm berubah menjadi –thm. Karena perhitungan dengan angka Arab sudah menjadi hal yang biasa, maka lambat laun kata algorithm berangsur-angsur dipakai sebagai metode perhitungan (komputasi) secara umum, sehingga kehilangan makna kata aslinya. Dalam bahasa Indonesia, kata algorithm diserap menjadi algoritma. 1.1 Definisi Algoritma “Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis”. Kata logis merupakan kata kunci dalam algoritma. Langkah-langkah dalam algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar. Dalam beberapa konteks, algoritma adalah spesifikasi urutan langkah untuk melakukan pekerjaan tertentu. Pertimbangan dalam pemilihan algoritma adalah, pertama, algoritma haruslah benar. Artinya algoritma akan memberikan keluaran yang dikehendaki dari sejumlah masukan yang diberikan. Tidak peduli sebagus apapun algoritma, kalau memberikan keluaran yang salah, pastilah algoritma tersebut bukanlah algoritma yang baik. Pertimbangan kedua yang harus diperhatikan adalah kita harus mengetahui seberapa baik hasil yang dicapai oleh algoritma tersebut. Hal ini penting terutama pada algoritma untuk menyelesaikan masalah yang memerlukan aproksimasi hasil (hasil yang hanya berupa pendekatan). Algoritma yang baik harus mampu memberikan hasil yang sedekat mungkin dengan nilai yang sebenarnya. Ketiga adalah efisiensi algoritma. Efisiensi algoritma dapat ditinjau dari 2 hal yaitu efisiensi waktu dan memori. Meskipun algoritma memberikan keluaran yang benar (paling mendekati), tetapi jika kita harus menunggu berjam-jam untuk mendapatkan keluarannya, algoritma tersebut biasanya tidak akan dipakai, setiap orang menginginkan keluaran yang cepat. Begitu juga dengan memori, semakin besar memori yang terpakai maka semakin buruklah algoritma tersebut. Dalam kenyataannya, setiap orang bisa membuat algoritma yang berbeda untuk menyelesaikan suatu permasalahan, walaupun terjadi perbedaan dalam menyusun algoritma, tentunya kita mengharapkan keluaran yang sama. Jika terjadi demikian, carilah algoritma yang paling efisien dan cepat. Definisi lain dari algoritma : – Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis. – Algoritma adalah urutan logis pengambilan keputusan untuk pemecahan masalah. – Algoritma adalah urutan langkah-langkah berhingga untuk memecahkan masalah logika atau matematika. – Algoritma adalah logika, metode dan tahapan (urutan) sistematis yang digunakan untuk memecahkan suatu permasalahan. Menurut Donald E. Knuth dalam bukunya yang berjudul The Art of Computer Programming, algoritma harus mempunyai lima ciri penting :
1.2 Beda Algoritma dan Program Program adalah kumpulan pernyataan komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ditulis dengan menggunakan bahasa pemrograman. Jadi bisa disebut bahwa program adalah suatu implementasi dari bahasa pemrograman. Beberapa pakar memberi formula bahwa : Program = Algoritma + Bahasa (Struktur Data) Bagaimanapun juga struktur data dan algoritma berhubungan sangat erat pada sebuah program. Algoritma yang baik tanpa pemilihan struktur data yang tepat akan membuat program menjadi kurang baik, demikian juga sebaliknya. Pembuatan algoritma mempunyai banyak keuntungan di antaranya :
Beberapa hal yang perlu diperhatikan dalam membuat algoritma :
Algoritma merupakan hasil pemikiran konseptual, supaya dapat dilaksanakan oleh komputer, algoritma harus ditranslasikan ke dalam notasi bahasa pemrograman. Ada beberapa hal yang harus diperhatikan pada translasi tersebut, yaitu : 1.3 Syarat Algoritma Baik?
Hasil yang diperoleh dari proses harus berakurasi tinggi dan benar.
Proses harus diselesaikan secepat mungkin dan frekuensi kalkulasi yang sependek mungkin. Bukan sesuatu yang hanya untuk menyelesaikan satu kasus saja, tapi juga untuk kasus lain yang lebih general.
Haruslah sesuatu yang dapat kita kembangkan lebih jauh berdasarkan perubahan requireme yang ada. Siapapun yang melihat, dia akan bisa memahami algoritma Anda. Susah dimengertinya suatu program akan membuat susah di-maintenance (kelola).
Bisa dengan mudah diimplementasikan di berbagai platform komputer
Tidak boleh ada instruksi yang tidak mungkin dikerjakan oleh pemroses yang menjalankannya. Jalannya algoritma harus ada kriteria berhenti.
2. STRUKTUR PENULISAN ALGORITMA Setiap Algoritma akan selalu terdiri dari tiga bagian yaitu :
1. Header (Judul) Judul adalah bagian teks algoritma yang digunakan sebagai tempat mendefinisikan nama dengan menentukan apakah teks tersebut adalah program, prosedur, fungsi. contoh judul 2.Kamus(Deklarasi) Kamus adalah bagian teks algoritma sebagai tempat untuk mendefinisikan :
contoh kamus 3. Algoritma (Deskripsi) Algoritma adalah bagian inti dari suatu algoritma yang berisi instruksi atau pemanggilan aksi yang telah didefinisikan contoh deskripsi 3. PENYAJIAN ALGORITMA Bentuk penyajian untuk algoritma dibagi menjadi 3 (tiga) bentuk penyajian, yaitu :
Sifat: Umum
Notasi-notasinya dapat digunakan untuk seluruh bahasa manapun 2.Pseudo-Code Penyajian algoritma dengan pseudocode berarti menggunakan kode yang mirip dengan kode pemrograman yang sebenarnya. Pseudocode lebih rinci dari English/Indonesia Structure. contoh 1 ; Algoritama Menghitung_rata_rata Kamus a, b, c :interger jumlah : long rata_rat: real Algoritma input (1, 2, 3) Jml = 1+2+3 Rerata = Jml/3 Output (Rerata) contoh 2; contoh 3 Solusi Pseudo-code :
Solusi Algoritma :
PEMBAHASAN TENTANG FLOWCHART 3. Flowchart Flowchart adalah penggambaran secara grafik dari langkah-langkah dan urut-urutan prosedur dari suatu program. Flowchart menolong analis dan programmer untuk memecahkan masalah kedalam segmen-segmen yang lebih kecil dan menolong dalam menganalisis alternatif-alternatif lain dalam pengoperasian. lambang / simbol-simbol flowcahart tertentu dengan aturan sebagai berikut : Jenis – Jenis FlowChart
Kaidah-Kaidah Umum Pembuatan Flowchart Program Dalam pembuatan flowchart Program tidak ada rumus atau patokan yang bersifat mutlak. Karena flowchart merupakan gambaran hasil pemikiran dalam menganalisis suatu masalah dengan komputer. Sehingga flowchart yang dihasilkan dapat bervariasi antara satu pemrogram dengan yang lainnya. Namun secara garis besar setiap pengolahan selalu terdiri atas 3 bagian utama, yaitu :
Untuk pengolahan data dengan komputer, urutan dasar pemecahan suatu masalah:
Walaupun tidak ada kaidah-kaidah yang baku dalam penyusunan flowchart, namun ada beberapa anjuran :
Untuk memahami lebih dalam mengenai flowchart ini, akan diambil sebuah kasus sederhana. Kasus : Buatlah sebuah rancangan program dengan menggunakan flowchart, mencari luas persegi panjang. Solusi : Perumusan untuk mencari luas persegi panjang adalah : L = p . l di mana, L adalah Luas persegi panjang, p adalah panjang persegi, dan l adalah lebar persegi. Keterangan :
Definisi Kumpulan instruksi-instruksi tersendiri yang biasanya disebut source code yang dibuat oleh programmer (pembuat program).
Berdasarkan terapannya, bahasa pemrograman dapat digolongkan atas dua kelompok besar :
Berdasarkan pada apakah notasi bahasa pemrograman lebih “dekat” ke mesin atau ke bahasa manusia, maka bahasa pemrograman dikelompokkan atas dua macam :
Bahasa tingkat tinggi, yang membuat pemrograman lebih mudah dipahami, lebih “manusiawi”, dan berorientasi ke bahasa manusia (bahasa Inggris). Hanya saja, program dalam bahasa tingkat tinggi tidak dapat langsung dilaksanakan oleh komputer. Ia perlu diterjemahkan terlebih dahulu oleh sebuah translator bahasa (yang disebut kompilator atau compiler) ke dalam bahasa mesin sebelum akhirnya dieksekusi oleh CPU. Contoh bahasa tingkat tinggi adalah Pascal, PL/I, Ada, Cobol, Basic, Fortran, C, C++, dan sebagainya. Langkah Pembuatan Program Mendefinisikan masalah
Tipe Data, Nama, Nilai dan Operator Pada umumnya, program komputer bekerja dengan memanipulasi objek(data) di dalam memori. Objek(data) yang akan diprogram bermacam-macam jenis atau tipenya misalnya nilai numerik(angka), karakter(huruf), kumpulan karakter, dll. Suatu tipe menyatakan jenis data yang akan dimanipulasi dalam program, gunanya untuk mendefinisikan objek yang akan diprogram. Suatu tipe diacu dari namanya. Nilai-nilai yang dicakup oleh tipe tersebut dinyatakan dalam domain nilai. Tipe data dikelompokkan menjadi tipe dasar dan tipe bentukan Tipe yang dapat langsung dipakai(angka-angka atau karakter) karena sudah didefinisikan sebelumnya oleh pemroses bahasa Bilangan yang tidak mengandung pecahan desimal.
Secara teoritis tak terbatas dari -∞ s.d +∞. Pada algoritma dapat dibatasi tergantung kebutuhan untuk objek, misalnya untuk jam [0..23]. Dalam implementasinya pada bahasa pemrograman, tipe integer punya rentang nilai terbatas untuk menghemat memory. Bilangan Riil Bilangan yang mengandung pecahan desimal
Secara teoritis tak terbatas dari -∞ s.d +∞. Ditulis dengan titik desimal
Tipe yang dibentuk(dan diberi nama) dari tipe dasar atau dari tipe lain yang sudah dikenal, bahkan dapatt didefinisikan sendiri oleh pemrogram. Macam tipe bentukan :
Deretan karakter dengan panjang tertentu.
Deklarasi kamus data : type nama_tipe_bentukan : tipe_data Contoh : membuat sebuah tipe data baru bernama BilBulat yang memiliki domain nilai yang sama dengan tipe integer type BilBulat : integer; Record tersusun dari satu atau lebih field. Tiap field menyimpan data dengan tipe tertentu
Deklarasi kamus data : type Nama_Record : record < nama_field1 :tipe_field1, nama_field2 :tipe_field2, …. nama_fieldn : tipe_fieldn> Contoh :
x y type Titik : record < x : real, y : real > atau type Titik : record< x , y : real > . Definisi tipe terstruktur yang mewakili tanggal dalam kalender Masehi. dd sebagai tanggal, mm sebagai bulan, yy sebagai tahun dd mm yy type Tanggal : record 0} >
type NilMhs : record < Nim : integer, NamaMhs : string, KodeMK : string, Nilai : char >
type JadwalKA : record Karakter tunggal yang diapit oleh tanda petik satu.
– Huruf alfabet (’a’..’z’ dan ’A’..’Z’) – Tanda baca (’!’, ’?’ , ’,’ , ’.’) – Angka ’0’ , ’1’ ,…, ’9’ – Karakter khas seperti ’#’ , ’&’ , ’%’ , ’@’ , ’*’ , dll
NAMA Nama digunakan mengidentifikasi objek dan mengacu objek tersebut.. Dalam sebuah teks algoritmik, objek yang diberi nama bisa berupa : – Modul program, Algoritma – variabel – konstanta – type – fungsi – prosedur Karena adanya bermacam-macam nama tersebut, maka dalam suatu teks algoritma dikenal nama program, nama variabel, nama konstanta, nama fungsi, nama prosedur, nama type. Adapun larangan penulisan nama ;
NILAI Nilai/Harga adalah besaran dari tipe data yang sudah dikenal. Nilai dapat berupa konstanta yang dipakai langsung, isi yang disimpan oleh variabel atau konstanta, hasil perhitungan suatu ekspresi, atau hasil yang dikirim suatu fungsi. Algoritma pada dasarnya adalah proses memanipulasi nilai. Nilai dapat dimanipulasi dengan cara : mengisi nilai ke dalam variabel, menuliskan nilai ke piranti keluaran, diacu dari suatu nama untuk perhitungan/ekspresi OPERATOR DAN EKSPRESI Operator adalah lambang-lambang yang biasa dilibatkan dalam program untuk melakukan suatu operasi atau manipulasi. Misalnya untuk perkalian, penjumlahan, perbandingan, dll. Sedangkan ekspresi adalah suatu ”rumus perhitungan” yang terdiri dari operan dan operator. Operan harus mempunyai harga, karena itu dapat berupa konstanta, nama variabel(yang dipakai dalam perhitungan adalah harga yang dikandung nama variabel), hasil pengiriman suatu fungsi, atau merupakan suatu ekspresi Contoh Ekspresi : a ß b + c – 2 Pada ekspresi ini, a, b, dan c merupakan nama variabel yang berperan sebagai operand sedangkan simbol ß, + dan – merupakan operator. Dalam hal ini variabel a diisi dengan hasil penjumlahan b dan c dikurangi 2. Jenis –jenis operator :
Operator perbandingan digunakan untuk membandingkan dua operand. Operand yang dibandingkan bisa bertipe bilangan bulat, karakter, real, boolean, atau string. Ekspresi yang menggunakan operator perbandingan akan menghasilkan nilai boolean(true atau false). Operator aritmatika Operator aritmatika hanya dapat dikenakan pada operand bertipe bilangan bulat atau bilangan real. Ekspresi yang menggunakan operator ini pun hanya akan menghasilkan nilai bilangan bulat atau real
Operator ini dikenakan pada operand bertipe boolean dan ekspresinya akan menghasilkan nilai boolean(true atau false)
Hasil operator not, and, or, dan xor untuk berbagai kombinasi kondisi
Contoh penggunaan operator pada ekspresi : Kamus Gaji_Total, Gaji_Pokok, Potongan : real HBagi,HSisa : integer k, l, m, n: boolean; Deskripsi k := true; l := false; read(Gaji_Pokok,Potongan) Gaji_Total ß Gaji_Pokok – Potongan HBagi ß (5 * 7) div 3 HSisa ß (5 * 7) mod 3 m := (k or l) and l; n := ((6 >= 8) and (9 <> 1)) or (3 < 7); write(HBagi, HSisa, Gaji_Total, m , n); Aksi sekuensial(runtunan) adalah sederetan instruksi atau aksi yang akan dilaksanakan (dieksekusi) oleh komputer berdasarkan urutan penulisannya. Jadi, jika dituliskan sebuah aksi sekuensial yang terdiri dari deretan instruksi/aksi ke 1, 2, 3, 4,..n maka setiap instruksi/aksi akan dilaksanakan secara sekuensial mulai dari yang ke-1, kemudian ke-2, ke-3, …s/d ke-n. Program paling sederhana tentunya hanya mengandung salah satu instruksi saja. Urutan instruksi dalam algoritma sangat penting, ada aksi sekuensial yang jika diubah urutan instruksi/aksinya akan mempengaruhi hasil eksekusi program. Contoh aksi sekuensial yang berpengaruh jika diubah urutannya : Algorima Runtunan_1 Kamus p , q : integer Deskripsi p ß 15 p ß 2* p q ß p write(q) {nilai q yang dicetak = 30} Algorima Runtunan_2 Kamus p, q : integer Deskripsi p ß 15 q ß p p ß 2* p write(q) {nilai q yang dicetak = 15} Beberapa contoh aksi sekuensial : Contoh 1 : HELLO Permasalahan : Tuliskan algoritma untuk menulis ’HELLO’ ke piranti keluaran Input : – Output : ’HELLO’ Proses : menulis ’HELLO’ Algoritma Cetak_HELLO {Menulis ”HELLO” ke piranti keluaran} Kamus Deskripsi write(‘HELLO’) Contoh 2 : HELLO X Permasalahan : Tuliskan algoritma untuk membaca sebuah nama, dan menulis ’HELLO’ yang diikuti dengan nama yang diketikkan ke piranti keluaran Input : nama Output : ’HELLO ’ Proses : menulis ’HELLO’ diikuti nama yang dibaca Algoritma Cetak_HELLOX {Menulis ”HELLO” berikut nama yang dibaca dari piranti masukan ke piranti keluaran} Kamus nama : string Deskripsi read(nama) write(‘HELLO ’,nama) Contoh 3 : SEGITIGA Permasalahan : Tuliskan algoritma untuk menghitung Luas Segitiga dengan membaca harga alas (cm) dan tinggi (cm) kemudian menuliskan hasilnya ke piranti keluaran Input : alas(alas segitiga, cm), real dan tinggi(tinggi segitiga, cm) , real Output : Luas(Luas segitiga), real Proses : menghitung dan menuliskan Luas Segitiga = Algoritma Hitung_Luas_Segitiga a l a s x t i n g g i {Membaca alas dan tinggi, menghitung Luas=alasxtinggi/2 dan menuliskan hasilnya } Kamus alas : real (panjang alas segitiga, satuan cm) tinggi : real Luas : real Deskripsi read(alas) read(tinggi) Luas ß alas * tinggi / 2 write(Luas) Contoh 4 : GAJI Permasalahan : Dibaca nama karyawan dan gaji pokok bulanannya. Buat algoritma untuk menghitung dan menampilkan gaji bersih karyawan tersebut dengan ketentuan : – Gaji bersih = gaji pokok + tunjangan – pajak – Tunjangan untuk setiap pegawai sama dan tetap setiap bulannya yaitu 1.000.000 – Pajak 10% dari (gaji pokok+tunjangan) Input : Nama dan Gaji Pokok Output : Gaji Bersih Proses : menghitung dan menampilkan Gaji Bersih = gaji pokok + tunjangan – pajak, Tunjangan = 10 1000000 , Pajak = 100 x (Gaji Pokok + Tunjangan) Algoritma_Gaji_Karyawan {Menghitung Gaji bersih karyawan dengan membaca nama karyawan dan gaji pokoknya. Gaji bersih = gaji pokok+tunjangan–pajak} Kamus const Tunjangan : real = 1000000 nama_kar : string gaji_pokok, pajak, gaji_bersih : real Deskripsi read(nama_kar, gaji_pokok) pajak ß 0.1 * (gaji_pokok + tunjangan) gaji_bersih ß gaji_pokok + tunjangan – pajak write(nama_kar, gaji_bersih) Contoh 5 : TUKAR Permasalahan : Buatlah algoritma yang membaca dua buah bilangan integer yang ditampung dalam variabel, menukarkan harga variabel tersebut dan menuliskan hasil pertukarannya Input : dua bilangan integer A dan B Output : dua bilangan integer A dan B yang telah ditukar harganya Proses : menukarkan harga variabel antara A dan B menggunakan sebuah variabel penampung sementara Algoritma_TUKAR {mempertukarkan nilai antara A dan B} Kamus A, B, temp : integer Deskripsi read(A, B) temp ß A A ß B B ß temp write(A, B) 6 PEMILIHAN Analisis kasus adalah salah satu elemen primitif pembangun algoritma. Analisis kasus diperlukan dalam sebuah program ketika terdapat suatu instruksi yang hanya dikerjakan jika memenuhi persyaratan atau kondisi tertentu. Contoh pada algoritma Ibu Tati mengupas kentang Penulisan Algoritma Yang Mengandung Analisa Kasus/Pemilihan Permasalahan : Diberikan nama dan nilai mahasiswa, jika nilai tersebut lebih besar atau sama dengan 60 maka mahasiswa tersebut dinyatakan lulus jika nilai lebih kecil dari 60 maka dinyatakan tidak lulus. – Uraian kalimat deskriptif (narasi) DESKRIPSI : o baca nama dan nilai mahasiswa. o jika nilai >= 60 maka keterangan = lulus o tetapi jika nilai < 60 maka keterangan = tidak lulus. tulis nama dan keterangan – Flow chart Penulisan algoritma yang mengandung analisis kasus menggunakan pseudocode terdiri dari dua struktur umum : IF-THEN dan DEPEND-ON Mendefinisikan analisis kasus adalah mendefinisikan : – kondisi boolean, berupa suatu ekspresi yang menghasilkan nilai true atau false – aksi yang akan dilaksanakan jika kondisi yang dipasangkan dengan aksi yang bersangkutan dipenuhi. Ungkapan Kondisi dapat dihasilkan dengan operator perbandingan dan operator logika. contoh kondisi : x > 100, kar = ‘*’ , (a ≠ 0) or (b = 0) , ketemu = true, not ketemu IF-THEN if then aksi endif Contoh – contoh :
endif
write(b) endif if a ≤ 10 then read(b) endif endif Contoh Kasus 1 : Algoritma HURUF_VOKAL {mencetak pesan ”huruf vokal” bila sebuah karakter yang dibaca merupakan huruf vokal. Asumsi huruf kecil} Kamus huruf : char Deskripsi read(huruf) if (huruf=‘a’) or (huruf=‘i’) or (huruf=‘u’) or (huruf=‘e’) or (huruf=‘o’) then write(‘Huruf Vokal’) endif Contoh Kasus 2 : Algoritma Bilangan_Genap {mencetak pesan ”bilangan genap” kemudian kalikan bilangan tersebut dengan angka 2 jika bilangan bulat yang dimasukkan dari piranti masukan merupakan bilangan genap} Kamus bil : integer Deskripsi read(bil) if bil mod 2 = 0 then write(‘bilangan genap’) write(bil*2) endif if then aksi1 else aksi2 endif Contoh – contoh :
else write(‘bilangan negatif’) endif
read(n) z ß n * k else read(m) z ß n / k endif Contoh Kasus 1 : Algoritma Kelulusan_Mhs {Menerima masukan nama dan nilai mahasiswa, jika nilai tersebut lebih besar atau sama dengan 60 maka mahasiswa tersebut dinyatakan lulus jika tidak maka dinyatakan tidak lulus} Kamus Nama : string Nilai : integer Keterangan : string Deskripsi read (nama, nilai) if nilai >= 60 then keterangan ß ‘lulus’ else keterangan ß ‘tidak lulus’ endif write(nama, keterangan) Contoh Kasus 2 : Algoritma Bilangan_Genap_dan_Ganjil {Mencetak “bilangan genap” jika bilangan bulat yang dibaca merupakan bilangan genap dan ”bilangan ganjil” jika bukan bilangan genap} Kamus Bil : integer Deskripsi read(bil) if (bil mod 2 = 0) then write(’Bilangan Genap’) else write(’Bilangan Ganjil’) endif
Contoh Kasus 1 : Membaca dua buah nilai integer, jika nilai pertama lebih besar atau sama dengan nilai kedua kerjakan nilai pertama/nilai kedua, jika nilai kedua lebih besar dari nilai pertama kerjakan nilai kedua/nilai pertama, tetapi jika nilai kedua = 0 maka tampilkan pesan error Algoritma WUJUD_AIR {Menentukan hasil pembagian} Kamus n1, n2 : integer hasil : real Deskripsi read(n1,n2) if n2=0 then write(‘Error’) else if n1≥n2 then hasil ß n1/n2 else end write DEPEND-ON Untuk menyederhanakan pola IF-THEN-ELSE jika terdapat banyak kasus. Strukturnya depend on (nama) : aksi1 : aksi2 : aksi3 ….. : aksiN [otherwise aksiX] Tiap langkah diperiksa kebenarannya. Jika kondisi ke-k benar maka aksi ke-k dilaksanakan. Kondisi berikutnya tidak dipertimbangkan lagi. Jika tidak ada satupun aksi yang benar maka aksi sesudah otherwise yang dikerjakan. Contoh Kasus 1: Dibaca nomor dari 1-7 untuk menunjukkan hari. Tuliskan nama hari sesuai nomor harinya Algoritma NAMA_HARI {Mencetak nama bulan } Kamus Nomor_hari : integer Deskripsi read(nomor_hari) depend on (nomor_ hari) nomor_hari=1 : write(‘Januari’) nomor_hari =2 : write(‘Februari’) nomor_hari =3 : write(‘Maret’) nomor_hari =4 : write(‘April’) nomor_hari =5 : write(‘Mei’) nomor_hari =6 : write(‘Juni’) nomor_hari =7 : write(‘Juli’) otherwise write(‘Bukan nomor hari yang benar’) 7 PENGULANGAN Komputer memiliki kemampuan untuk mengerjakan suatu instrukasi (aksi) secara berulang-ulang dengan performansi yang sama. Kemampuan tersebut menjadi salah satu keunggulan komputer dibandingkan manusia karena manusia biasanya tidak menyukai tugas-tugas monoton yang dikerjakan secara berulang-ulang (karena lelah atau bosan). Notasi pengulangan adalah salah satu notasi dasar dalam penulisan algoritma selain pemilihan. Terdapat beberapa macam struktur pengulangan pada algoritma dan beberapa diantaranya yang paling banyajk digunakan antara lain struktur FOR, WHILE-DO, dan REPEAT-UNTIL.. Masing-masing struktur digunakan pada jenis permasalahan yang berbeda meskipun untuk beberapa kasus sebuah struktur pengulangan dapat diganti dengan struktur pengulangan yang lain. Struktur ini digunakan bila sudah diketahui berapa kali akan mengulang satu atau beberapa aksi dalam badan pengulangan. Bentuk Umum : for variabel ß nilai_awal to nilai_akhir do aksi1 aksi2 … aksin endfor Catatan :
Contoh : Membuat sebuah algoritma untuk menampilkan bilangan dari 1 sampai 10 Algoritma Show_Numeric { menampilkan bilangan integer dari 1 sampai 10} Kamus i : integer Deskripsi for i ß 1 to 10 do write(i) endfor Bentuk Umum : for variabel ß nilai_awal downto nilai_akhir do aksi1 aksi2 … aksin endfor Catatan :
Contoh : Membuat sebuah algoritma untuk menampilkan bilangan dari N sampai 1 dimana N diinpuitkan dari user Algoritma Show_Numeric2 { menampilkan bilangan integer dari N sampai 1} Kamus i, N : integer Deskripsi read(N) for i ß N downto 1 do write(i) endfor
Struktur pengulangan ini biasanya digunakan pada kasus yang belum pasti berapa kali aksi/instruksinya akan diulang. Struktur While mirip struktur IF yang melakukan pemeriksaan ekspresi boolean sebelum satu atau lebih aksi dikerjakan. Bentuk Umum : while (kondisi) do aksi1 aksi2 … aksin endwhile Catatan :
Algoritma Show_Numeric3 { menampilkan bilangan integer dari 1 sampai 10} Kamus i : integer Deskripsi i ß 1 while i ≤ 10 do write(i) i ß i + 1 endwhile Badan pengulangan (aksi) pada struktur While-Do mungkin tidak akan pernah dilakukan karena sebelum aksi pertama dieksekusi, dilakukan test terhadap kondisi pengulangan. Pengulangan ini berpotensi untuk menimbulkan aksi “kosong” (tidak pernah melakukan apa-apa) jika pada test pertama kondisi menghasilkan nilai False Contoh : Kamus f : boolean Deskripsi f ß true while (not f) do f ß not f enwhile
Struktur ini hampir sama dengan struktur Whike dan biasanya digunakan bila jumlah pengulangan belum dapat ditentukan saat program ditulis Bentuk Umum : Repeat aksi1 aksi2 … aksin Until (kondisi berhenti) Catatan :
Algoritma Show_Numeric4 { menampilkan bilangan integer dari 1 sampai 10} Kamus i : integer Deskripsi i ß 1 repeat write(i) i ß i + 1 until i > 10 Perbedaan struktur Repeat-Until dan While-Do terletak pada pengecekan kondisi. Jika pada struktur While, kondisi dicek pada awal badan pengulangan, sedangkan pada struktur Repeat kondisi dicek pada akhir badan pengulangan. Perbedaan yang lain, bila struktur While mengulang pernyataan selama kondisi masih terpenuhui (kondisi = True), struktur Repeat mengulang pernyataan selama kondisi belum terpenuhi (kondisi = False) STUDI KASUS
Algoritma Faktor Kamus n, i : integer Deskripsi read(n) for i ß 1 to n do if (n mod i = 0) then write(i) endif endfor
Algoritma Rerata_Nilai_Mahasiswa Kamus n : integer jawab : char nilai, jumlah, rata : real Deskripsi jumlah ß 0 n ß 0 repeat read(nilai) jumlah ß jumlah + nilai n ß n + 1 write(‘Apakah anda ingin input data lagi (y/t) ? ’) read(jawab) until (jawab = ‘T’) or (jawab = ‘t’) rata ß jumlah / n write(rata) Setiap bahasa pemrograman memiliki aturan masing-masing untuk mendefinisikan nama(panjang maks nama, perbedaan huruf besar dan kecil) tetapi dalam algoritma batasan pendefinisian nama tidak seketat pada bahasa pemrograman. Syarat-syarat penggunaan sebuah nama pada algoritma: – Pemilihan nama harus interpretatif(disesuaikan dengan objek yang diidentifikasi) dan tidak menimbulkan kerancuan – Nama harus unik dalam sebuah algoritma/program – Nama tidak boleh dipisahkan oleh spasi – Tidak case sensitive (huruf besar dan kecil tidak dibedakan) – Tidak boleh mengandung symbol khusus – Nama harus dideklarasikan pada bagian tertentu supaya dapat dipakai. ARRAY Array merupakan salah satu tipe data terstruktur(structured data type) yang berguna sebagai sebuah tempat penyimpanan elemen data / nilai yang bertipe sama. Penggunaannya sama seperti variabel(untuk menyimpan nilai) tetapi variabel hanya dapat menyimpan sebuah nilai sedangkan pada array data yang diolah bisa beberapa nilai bertipe sama. Struktur data array dipakai untuk merepresentasikan sekumpulan informasi yang bertipe sama dan disimpan dengan urutan yang sesuai dengan definisi indeks secara kontigu dalam memeori komputer. Oleh karena itu indeks harus suatu tipe data yang mempunyai keterurutan seperti tipe integer atau karakter. Bentuk array sama seperti tabel sehingga array seringkali juga disebut tabel. Misalnya tabel untuk menyimpan data nilai 100 buah TabNilai
index 1 2 3 4 5 ….. 100 Sebuah array harus diberi nama, supaya mudah diakses atau diacu. Setiap elemen/bagian array harus diberi alamat supaya dapat dibedakan dengan elemen lainnya dan mudah dalam pencarian. Indeks digunakan sebagai alamat elemen pada array Deklarasi Array Supaya sebuah array dapat diisi, arraynya harus dibuat dulu atau dipesan tempatnya (berapa banyak data yang akan dimasukkan ke dalam array) dengan cara dideklarasikan di bagian kamus. Jumlah elemen array tidak dapat diubah selama pelaksanaan program Bentuk umum deklarasi array : nama_array : array [range_index] of tipe_elemen contoh : TabNilai : array [1..100] of real Frekuensi : array [‘a’..’z’] of integer NamaKota : array [1..20] of string Tipe_elemen menunjukkan tipe data dari elemen tabel, semua isi elemen tabel bertipe sama. Range index bisa berupa integer atau character dan harus menaik. Setelah sebuah array dideklarasikan, akan disediakan tempat di memori sebanyak jumlah elemen yang dipesan. Memori adalah tempat untuk menyimpan data yang bersifat sementara sedangkan harddisk untuk menyimpan data yang bersifat permanen. Memori juga memiliki alamat yang dapat diakses jika dibutuhkan. Operasi Terhadap Array Operasi atau manipulasi terhadap array hanya dapat dilakukan terhadap satu elemennya yang ditunjukkan oleh indeks. Untuk mengisi atau mengambil data/nilai dari array : Nama_Array[alamat_index] ç nilai write(Nama_Array[alamat_index]) nama_variabel ç Nama_Array[alamat_index] Contoh 1 : Membuat dan mengisi array huruf ArrHuruf
Kamus const N = 5 ArrHuruf : array [1..N] of char Deskripsi ArrHuruf[1] ç ‘A’ ArrHuruf[2] ç ‘N’ ArrHuruf[3] ç ‘G’ ArrHuruf[4] ç ‘S’ ArrHuruf[5] ç ‘A’ write(ArrHuruf[3]) PEMROSESAN ARRAY Pemrosesan terhadap Array berarti memproses elemen mulai dari elemen pertama (elemen dengan indeks terkecil, berturut-turut pada elemen berikutnya, sampai elemen terakhir dicapai). Pemrosesan terhadap elemen array menggunakan bentuk pengulangan sebagai berikut : for i ç index_awal to index_akhir do Proses(Nama_Array[i]) endfor
Algoritma Tabel1 Kamus MyTab : array[1..50] of integer n,I : integer Agoritma read(n) for i ç 1 to n do read(MyTab[i]) endfor Algoritma Tabel Kamus MyTab : array[1..50] of integer n,i : integer Agoritma read(n) for i ç 1 to n do read(MyTab[i]) endfo for i ç 1 to n do write (MyTab[i]) endfor Contoh 2 : Algoritma yang membaca sebuah array integer yang menyatakan nilai ujian, TabNilai, mulai indeks 1 sampai n dan menghitung nilai rata-rata ujian dan menampilkannya pada layar dimana n diinputkan oleh user Algoritma Nilai_Mahasiswa Kamus TabNilai : array [1..NMax] of real n,i : integer rata : real Deskripsi read (n) for i ß 1 to n do read(TabNilai[i]) endfor jumlah ß 0 for i ß 1 to n do jumlah ß jumlah + TabNilai[i] endfor rata ß jumlah / n jadi kesimpulan array adalah untuk menampung atau menyimpan data yang bertipe sama dengan banyak data dalam satu variabel dan pemisah atau pembeda data satu dengan data selanjutnya adalah indeks Array Dua Dimensi array dua dimensi memiliki indeks lebih dari 1. Jika dalam matematika array dua dimensi seperti matriks. Deklarasi Kamus: Nama_Variabel_Array : array[range_index1][rangerange_index1 menunjukkan index baris range_index2 menunjukkan index kolom Contoh : Untuk membuat matrix di bawah ini 1 2 3
1 2 3 4 Algoritma Isi_Matriks Kamus const baris = 4 const kolom = 3 Mat : array[1..baris][1..kolom] of real i , j : integer Algoritma Mat[1][1] ç 3,5 {pengisian secara langsung dengan sebuah nilai} Mat[1][2] ç 6 {pengisian secara langsung dengan sebuah nilai} Mat[1][3] ç 8,9 {pengisian secara langsung dengan sebuah nilai} for i ç 1 to baris do {pengisian secara dari piranti masukan} for j ç 1 to kolom do read(Mat[i][j]) endfor endfor PEMROSESAN MATRIKS Pemrosesan terhadap Matriks berarti memproses elemen mulai dari elemen pertama (elemen dengan indeks terkecil, berturut-turut pada elemen berikutnya, sampai elemen terakhir dicapai) untuk setiap baris dan setiap kolom for i ç index_awal_baris to index_akhir_baris do for j ß index_awal_kolom to index_akhir_kolom do Proses(Nama_Variabel_Array[i][j]) endfor endfor
Algoritma Matriks Kamus Matrix : array[1..50][1..50] of integer n, m, i, j : integer Agoritma read(n,m) {n adalah banyaknya baris, m adalah banyaknya kolom} if (n > 0) and (m > 0) then for i ç 1 to n do for j ß 1 to m do read(Matrix[i][j]) endfor endfor endif Algoritma Tabel Kamus Matrix : array[1..50][1..50] of integer n, m, i, j : integer Agoritma read(n,m) if (n > 0) and (m > 0) then for i ç 1 to n do for j ß 1 to m do read(Matrix[i][j]) endfor endfor for i ç 1 to n do for j ß 1 to m do write(Matrix[i][j]) endfor endfor endif |