• Tidak ada hasil yang ditemukan

DASAR ALGORITMA DAN PEMROGRAMAN

N/A
N/A
Protected

Academic year: 2021

Membagikan "DASAR ALGORITMA DAN PEMROGRAMAN"

Copied!
53
0
0

Teks penuh

(1)

I T E N A S

Institut Teknologi Nasional

Jurusan Teknik Informatika

DASAR

ALGORITMA DAN

PEMROGRAMAN

Disusun Oleh

Dr. Ir. Uung Ungkawa, MT

(2)

Pendahuluan

Dalam kuliah ini akan dipaparkan pengenalan (dasar) algoritma dan pemrograman untuk menyamakan persepsi di antara mahasiswa baru. Topik yang akan disajikan adalah:

• Pemrograman • Algoritma • Flowchart

• Bahasa Algoritmik

• Bahasa Pemrograman: Pascal • Type Data • Input/Output • Runtunan • Pemilihan • Pengulangan • Pemrograman Modular • Membuat Program • Menguji Program

Sejarah Pemrograman

Ilmu pengetahuan dan teknologi tidaklah lahir begitu saja dari tidak ada menjadi ada. Tidak terkecuali pemrograman dan komputer, mengalami sejarah yang bersamaan dengan matematika dan mekanika/elektronika. Berikut ini garis besar sejarah penemuan komputer dan pemrograman:

• 2400 SM: Abacus di Babilonia

• 1115 SM: South-pointing chariot - Differential gear • 500 SM: Bilangan nol

• 300 SM: Sistem bilangan biner • 87 SM: Komputer analog • 60 (M): Dasar Robotik • 724: Jam mekanik di Cina

• 820: Algoritma oleh Alkhawarizmi • 850: Kriptografi oleh AlKindi • 850: Musik yang bisa diprogram • 996 Jam mekanik roda gigi: Al Biruni

(3)

• 1000: Komputer analog: – Al Biruni

• 1015: Komputer analog untuk menentukan posisi bulan, matahari dan planet – Al Zarkali

• 1206: orang-orangan yang diprogram (robot) – Al Jazari • 1492: Kalkulator mekanik – Leonardo da Vinci

• 1588: Logaritma natural – Joost Buerghi • 1642: Kalkulator mekanik – Pascal

• 1811: tenun otomatis – Joseph-Marie Jacquard • 1822: Komputer mekanik – Babbage

• 1834: Analytical Engine: Program yang disimpan – Babbage • 1848: Aljabar Boole – George Boole

Program Komputer

Program komputer adalah sekumpulan perintah (instruksi) yang dikerjakan komputer untuk menyelesaikan tugas, pekerjaan. Dahulu mesin diprogram secara perangkat keras, artinya bagian tertentu dari mesin diubah-ubah sedemikian sehingga cara kerjanya berubah sesuai kehendak kita. Dalam pemrograman sekarang, bagian mesin tidak berubah tetapi yang diubah kumpulan perintah yang berupa perangkat lunak. Kumpulan perintah demikian disebut program komputer.

Sekarang ini program komputer ada di mana-mana: di telepon seluler (HP), gadget, mesin ATM, mesin cuci, televisi, mobil dan lainnya. Pesawat terbang mutakhir banyak menggunakan komputer untuk mengendalikan terbang, mengendalikan operasi mesin, dan banyak lagi. Bahkan sekarang sudah ada mobil tanpa supir yang dikemudikan komputer. Semua itu tentu saja melibatkan program komputer.

Komputer merupakan mesin yang canggih yang dapat digunakan untuk berbagai keperluan kita. Sebelum digunakan, komputer harus diprogram agar dapat bekerja sesuai dengan kebutuhan kita. Dengan kata lain, komputer harus diberi perintah agar melakukan pekerjaan sesuai yang kita butuhkan. Memberi rangkaian perintah (banyak perintah) kepada komputer disebut memprogram (programming). Memprogram (programming) yang lazim juga disebut coding, adalah menentukan langkah demi langkah sekumpulan perintah yang harus dikerjakan komputer dengan urutan yang benar. Orang yang membuat program disebut programmer.

(4)

Kumpulan perintah yang disebut program itu berupa kode-kode yang kita buat, misalnya kode demikian akan menjumlahkan dua angka berikutnya. Kode yang lain lagi akan loncat ke instruksi berikutnya dan seterusnya. Kode-kode tersebut disebut bahasa mesin. Bahasa ini bebas ambigu (bermakna ganda) karena hanya memiliki satu arti, makna dan tugas tertentu saja.

Dalam perkembangan selanjutnya, bahasa mesin ini sangat sulit untuk diingat manusia. Maka dibuatlah bahas rakitan (assembly) yakni bahasa mirip bahasa manusia yang melambangkan bahasa mesin, seperti menjumlahkan dua angka seperti di atas dengan add. Tentu saja bukan add ini yang dimengerti atau dieksekusi oleh mesin tetapi tetap bahasa (kode) mesin yang dieksekusi. Di sinilah maka perlu penterjemahan bahasa rekitan ini ke dalam bahasa mesin. Dalam hal ini diperlukan perangkat yang disebut assembler yang berfungsi menterjemahkan bahasa rakitan ke bahasa mesin.

Kebutuhan akan penerapan komputer makin berkembang, banyak melakukan pekerjaan besar yang membutuhkan program yang besar pula. Oleh karena itu program yang kita buat akan semakin rumit jika hanya dibuat dengan bahasa rakitan. Para ahli kemudian memikirkan bagaimana membuat bahasa pemrograman atau bahasa komputer yang lebih mudah difahami manusia. Dari sini kemudian lahir bahasa Fortran (Formula translation) yang dimanfaatkan dalam pengolahan data numerik dan perhitungan sains. Bahasa demikian termasuk bahasa tingkat tinggi (high level language). Semakin lama penerapan komputer semakin berkembang, permasalahan dalam pemrograman sebelumnya dikenal dan dicari solusinya. Dari sisi bahasa pemrograman memang dirasakan masih banyak kekurangan, maka dibuatlah bahasa tingkat tinggi yang lebih baik seperti Bahasa Pascal, C, dan lainnya hingga bahasa Java.

Bahasa tingkat tinggi seperti diuraikan tadi tidak diterjemahkan secara langsung satu per satu tetapi diterjemahkan secara tingkat tinggi. Program penterjemah bahasa tingkat tinggi ini ada dua: interpreter dan kompilator (compiler). Interpreter melakukan terjemahan langsung satu per satu pernyataan (statement) dan hasilnya langsung disajikan ke pengguna melalui layar monitor sedangkan kompilator melakukan penterjemahan sekaligus. Setelah menjadi bahasa mesin, baru program dapat digunakan.

Bagaimana program dijalankan komputer? Pemeran utama dalam komputer adalah prosesor. Pertama prosesor memuat program ke memori. Dari memori ini komputer

(5)

membaca dan menjalankan program satu perintah, satu demi satu sampai selesai. Biasanya program disipan dulu di tempat penyimpanan (disk). Dari disk ini dimuat ke memori oleh prosesor. Mengeksekusi program harus dijalankan di memori karena lebih cepat waktu aksesnya.

Program adalah Solusi

Kita sekarang dihadapkan pada berbagai produk canggih yang serba digital, atau berada di dalam abad digital. Selain komputer, kita melihat produk canggih lain seperti handphone (HP), ATM, pengendali pesawat, pengendali reaktor nuklir, internet dan lainnya. Semua itu perlu diprogram agar semua alat canggih itu bisa bekerja sesuai dengan kebutuhan kita seperti

• Bagaimana HP Bekerja?

• Bagaimana Mesin ATM bekerja?

• Bagaimana komputer pengendali pesawat bekerja? • Bagaimana komputer pengendali reaktor nuklir bekerja? • Bagaimana internet bekerja?

• dan sebagainya.

Itu semua merupakan persoalan, program adalah solusinya. Pemrograman adalah penterjemahan solusi yang ada pada kita untuk disalin ke dalam bahasa komputer agar dapat dieksekusi komputer. Dengan kata lain pemrograman adalah merumuskan solusi yang ada di dalam pikiran kita untuk dapat dikerjakan komputer. Seringkali kita tahu solusinya seperti apa, tetapi kita sulit menterjemahkannya (menjabarkannya) ke dalam program, dalam bahasa pemrograman.

Program juga bisa dipandang sebagai proses yang mengolah input menjadi output (Gambar 1). Program dapat dipandang seperti pabrik yang mengolah bahan baku menjadi produk jadi. Input berperan seperti bahan baku dan output seperti produk yang dihasilkan.

proses

(6)

Namun demikian, proses di atas tidak seperti proses pembuatan gula pasir yang membutuhkan bahan dasar air tebu. Keluaran (output) dalam komputasi bisa saja mengeluarkan data yang tidak berkaitan dengan masukannya. Misalkan program yang mencetak string “Bandung” jika masukannya berupa bilangan bulat yang lebih besar dari nol. Atau mencetak string “Jakarta” jika masukannya berupa bilangan bulat yang lebih kecil dari nol. Hubungan bilangan dengan string tidak sama dengan hubungan antara gula pasir dengan air tebu.

Yang kedua, data yang dihasilkan dalam keluaran tidak harus melalui sisi masukan komputer. Seperti contoh di atas, yang mencetak string “Bandung” pada sisi keluaran, maka string Bandung tidak harus diberikan ke komputer sebagai masukan. Jangan sampai dalam pikiran kita proses yang ada selalu menganut hukum kekekalan massa seperti dalam fisika/kimia, di mana dalam proses fisikakimia, massa keluaran sama dengan massa masukan. Dalam proses komputasi, keluaran bisa berapa pun hanya dari satu digit masukan misalnya.

Algoritma vs Program

Di atas dijelaskan bahwa program adalah solusi suatu persoalan. Untuk memecahkan persoalan ini diperlukan cara, jalan bagaimana memecahkan persoalan tersebut. Cara pemecahan ini disebut algoritma yang bisa dipendang sebagai prosedur pemecahan suatu persoalan. Dengan demikian jelas bahwa algoritma merupakan inti pemrograman karena dalam pemrograman itu kita menentukan suatu algoritma yang rinci dan benar agar sesuai dengan cara persoalan itu dipecahkan.

Persoalan bagaimana yang dimaksud untuk dipecahkan dalam pemrograman? Kita bisa ambil contoh bagaimana memfungsikan handphone (HP) agar bisa mengirim SMS (short message service) misalnya. Dari sini kita akan memikirkan algoritmanya misalnya pertama tampilkan isian untuk menentukan nomor yang akan dihubungi (kontak), atau membuka daftar nomor yang ada di dalam daftar kontak, menampilkan isian untuk menuliskan pesan, menampilkan tombol kirim, dan seterusnya.

Contoh sederhana barangkali kita bisa memfungsikan komputer sebagai kalkulator aritmatik: kali, bagi, tambah dan kurang. Mungkin sudah terbayang dalam pikiran kita apa yang harus dilakukan komputer. Dalam memprogram, kita sebenarnya menentukan langkah-langkah yang akan dilakukan komputer agar melakukan tugas seperti yang ada dalam pikiran kita. Kita di sini seakan-akan menyalin (copy) tugas kita ketika kita

(7)

bertugas sebagai juru hitung, dan sekarang menugaskan komputer untuk mengambil alih tugas kita tersebut.

Jika kita berfungsi sebagai juru hitung dalam kasus kalkulator aritmatik yang melakukan penjumlahan, pengurangan, perkalian dan pembagian, maka kita siap menerima data sebagai masukan. Jumlah data yang diperlukan dalam hal ini adalah dua buah data. Sebagai kalkulator seperti tersebut di atas, hanya memeliki empat jenis tugas, atau operasi. Dalam hal ini, kali, bagi, tambah dan kurang disebut operator. Karena operator tersebut membutuhkan dua buah data, maka berarti operator tersebut membutuhkan dua operan.

Dari uraian tersebut jelas bahwa program terdiri dari kumpulan tugas dengan datanya. Kumpulan tugas tersebut diwujudkan dalam bentuk algoritma, sehingga bisa dikatakan bahwa program terdiri algoritma beserta datanya, atau kontrol dan data atau fungsi dengan data.

Bahasa Pemrograman

Kita tahu bahwa komputer hakikatnya tidak bisa berfikir atau tidak bisa bertindak sendiri. Kalau kita menghendaki agar komputer melakukan suatu tugas, komputer haris diajari untuk melakukan tugas yang kita inginkan. Mengajari komputer melakukan suatu pekerjaan disebut sebagai memprogram. Ketika kita menyuruh seseorang melakukan suatu pekerjaan, kita harus menjelaskan dan merinci pekerjaan yang dimaksud kepada orang yang kita tugaskan. Demikian pula dengan komputer. Di sinilah kita membutuhkan cara untuk berkomunikasi dengan komputer yakni pemrograman. Dalam komunikasi tersebut tentunya membutuhkan bahasa yang disebut sebagai bahasa pemrograman (programming language).

Program vs Software

Lalu apa bedanya program dengan software, secara sederhana, software merupakan kumpulan program. Software bisa dipandang sebagai program dengan skala besar, mencakup juga dokumentasi dalam pembangunan software dari rincian kebutuhan dan spesifikasi, rancangan, implementasi, pengujian dan pemeliharaan. Dokumentasi

(8)

dibutuhkan untuk dapat digunakan di masa datang jika software tersebut perlu perubahan atau pengembangan software baru.

Memahami Sudut Pandang Komputer

(9)

Algoritma dan Diagram Alir

Algoritma

Secara etimologi, istilah algoritma diambil dari nama ilmuan Arab Abu Ja’far Muhammad ibnu Musa Al Khawarizmi (780-850 M). Istilah ini merupakan nama Latin dari Al Khawarizmi [1]. Secara definisi, Algoritma adalah prosedur yang melibatkan sederetan langkah-langkah yang digunakan untuk mendapatkan solusi terhadap permasalahan tertentu, seperti untuk memecahkan persamaan matematik. Secara komputasi, algoritma berarti urutan operasi yang seringkali digambarkan dengan diagram alir (flow chart), yang dikerjakan dengan program komputer [2].

Horowitz menjelaskan algoritma sebagai metode yang dapat digunakan komputer untuk menyelesaikan masalah [3]. Algoritma terdiri dari kumpulan langkah-langkah yang terbatas, dan tiap langkah bisa terdiri dari satu atau beberapa operasi. Algoritma harus memenuhi beberapa kriteria berikut [4]:

1. Input: masukan: nol atau beberapa jumlah masukan 2. Output: keluaran: satu atau beberapa keluaran

3. Definiteness: Setiap instruksi jelas menunjukkan apa yang harus dikerjakan, tidak ambigu

4. Finiteness: jika algoritma dilacak untuk semua kasus, algoritma akan berhenti setelah sejumlah langkah ditelusuri.

5. Effectiveness: pada prinsipnya, setiap instruksi harus sangat mendasar sehingga dapat dikerjakan secara manual dengan pinsil dan kertas.

Algoritma dapat difahami sebagai bentuk transformasi: urutan langkah komputasi yang mengalih bentuk (transform) masukan menjadi keluaran [5]. Berbeda dengan kriteria yang dikemukakan Horowitz di atas yang membolehkan algoritma tanpa masukan, definisi terakhir ini menuntut adanya masukan. Kita juga dapat memandang algoritma sebagai perangkat untuk menyelesaikan masalah komputasi yang dapat ditentukan (dirinci/dijabarkan) dengan baik (well-specified) [5]. Definisi ini membatasi algoritma pada permasalahan yang dapat dirinci dengan baik, karena ada persoalan yang sulit ditentukan, atau didefinisikan dengan baik (well defined) sehingga tidak bisa

(10)

Dapat juga dikatakan bahwa algoritma merupakan sekumpulan perintah (instruksi) yang disusun secara berurutan, yang mencerminkan langkah-langkah pemecahan masalah yang sudah dideskripsikan dengan baik, untuk dapat menghasilkan pengaruh atau keluaran yang sesuai dengan kebutuhan. Dari sudut pandang yang lain, algoritma merupakan kumpulan tugas yang jika dikerjakan pada kondisi tertentu dengan proses tertentu akan dihasilkan kondisi tertentu pula. Sebagai ilustrasi, kita perhatikan algoritma untuk menanak nasi:

Asumsi awal, semua bahan dan alat tersedia.

- Pertama ambil beras dengan jumlah tertentu. - Cuci beras sampai bersih.

- Masak air secukupnya. - Tunggu sampai mendidih.

- Jika air sudah mendidih, masukkan beras. - Tunggu lagi sampai mendidih.

- Kecilkan apinya agar tidak gosong. - Biarkan sampai airnya habis. - Kecilkan lagi apinya.

- Tunggu sampai matang

- Nasi sudah matang (kondisi akhir).

Jika dikaitkan dengan pencarian solusi untuk suatu permasalahan, maka algoritma adalah langkah-langkah memecahkan permasalahan. Urutan dalam algoritma sangat penting karena akan memberi hasil yang berbeda, meskipun langkah-langkahnya sama.

Konstruksi Dasar Algoritma

Konstruksi dasar algoritma terdiri dari runtunan (sequence), pilihan (selection) dan perulangan (repetition/iteration, recursion). Runtunan berarti proses dieksekusi secara beruntun dari atas ke bawah secara runut. Kemudian yang dimaksud dengan pilihan adalah bahwa pemroses (eksekutor) program memilih salah satu jalur sesuai kondisi saat eksekusi berjalan. Pada pilihan, ada pilihan biner (dua pilihan) ada juga pilihan ganda (banyak). Kemudian yang terakhir, perulangan, berarti proses berulang sampai batas (jumlah perulangan) tertentu atau sampai suatu kondisi tercapai untuk menghentikan perulangan tersebut.

(11)

Runtunan (Sequence).

Dalam runtunan, beberapa proses (biasanya dalam satu blok) dieksekusi secara beruntun satu per satu. Contoh, perhatikan diagram alir Gambar 2 di bawah. Komputer akan mengeksekusi perintah meminta masukan (input) melalui perintah Baca a. Perintah ini menyebabkan komputer menunggu untuk mendapatkan masukan dari pengguna melalui ketikan di papan ketik yang bisa dipantau pengguna di layar. Setelah pengguna memasukkan data, komputer menyimpan data tersebut di dalam variabel a. Selanjutnya komputer mengeksekusi proses yaitu mengalikan nilai a dengan 2 dan memberikannya (menyimpannya) di B. Perintah selanjutnya, komputer menuliskan nilai variabel B ke layar.

Mulai Baca a B = a*2 Tulis B Selesai Gambar 2. Runtunan Pilihan (Selection).

Dalam pilihan jalur, pemroses/eksekutor memilih jalur eksekusi berdasarkan kondisi saat itu. Sebagai ilustrasi, perhatikan Gambar 3 di bawah. Dalam contoh ini komputer akan melalui salah satu jalur dalam satu waktu tergantung nilai n. Jika n = 0 maka akan menempuh jalur ya untuk menuliskan Bandung. Sedangkan jika n != 0, akan menempuh jalur tidak, untuk menuliskan Cirebon.

(12)

n==0 tidak Mulai Baca n Tulis Bandung ya Selesai Tulis Cirebon Gambar 3. Pilihan Perulangan (Repetition).

Banyak pekerjaan yang memiliki data jamak yang sejenis. Dalam mengolah data seperti ini, dibutuhkan satu pekerjaan yang sama. Untuk itu dalam pemrograman lazim dijumpai perulangan. Perulangan terbagi dua: perulangan yang berhenti setelah jumlah perulangan tertentu, perulangan yang berhenti dengan kondisi tertentu dan rekursi. Gambar di bawah memperlihatkan contoh perulangan selama i lebih kecil dari n dan sampai dengan i sama dengan n. Jadi diagram alir perulangan juga sama dengan pilihan hanya saja dalam perulangan, salah satu kondisinya menyebabkan kontrol kembali ke atas. Baca bil_ke_i f=f+bil_ke_i i==n i=i+1 tidak ya

(13)

Diagram Alir (Flowchart)

Diagram alir dapat dipandang sebagai visualisasi algoritma. Dengan diagram alir kita dapat lebih mudah memahami algoritma. Memahami gambar lebih mudah dari pada memahami kode program. Dengan demikian diagram alir ini dapat digunakan untuk mengkomunikasikan algoritma yang kita buat kepada pihak lain dengan lebih baik dan juga untuk dokumentasi algoritma agar kelak kita mudah memahami kembali algoritma yang telah kita buat. Gambar 5 berikut ini adalah beberapa bentuk umum komponen diagram alir yang paling sering digunakan. Contoh diagram alir cara memasak nasi tampak seperti pada Gambar 6.

Proses Keputusan/ pilihan Terminator; Awal/Akhir Data: Input/ Output

Acuan: Penghubung pada halaman yang sama Acuan: Penghubung pada halaman berbeda

(14)

Ambil Beras dan Cuci Mulai Masak air Tunggu sampai mendidih Mendidih? Tidak Masukkan Beras Kecilkan apinya Mendidih? Tidak 1 1 Tunggu sampai mendidih masak? Tidak Tunggu sampai nasi masak Selesai

Gambar 6. Contoh diagram alir.

Notasi Algoritmik

Notasi Arti

read(x, y) memerintahkan komputer untuk baca nilai x dan y dari layar write(x, y) memerintahkan komputer untuk menuliskan nilai x dan y ke layar a  b isikan nilai b ke a, nilai b tidak berubah

a < b apakah a lebih kecil dari b? a > b apakah a lebih besar dari b?

a=b apakah a=b?

+, -, *, / tambah, kurang, kali, bagi

(15)

for, for each,while Untuk perulangan

→, return Mengembalikan nilai (lihat fungsi dalam pemrograman)

Tugas Harian 1

Buatlah algoritma, diagram alir dan notasi algoritmik untuk tugas berikut: 1. Menjumlahkan kedua bilangan?

2. Menghitung rata-rata 5 buah bilangan? 3. Menghitung rata-rata n buah bilangan?

Membuat Diagram Alir

Membuat diagram alir merupakan langkah merancang algoritma, merinci bagaimana persoalan dipecahkan. Merinci langkah pemecahan diawali gambaran persoalan secara garis besar kemudian dicoba digambarkan, kemudian dianalisis dan lakukan lagi perbaikan sampai benar. Sebagai ilustrasi, kita ambil persoalan pada tugas harian 1 nomor 1 di atas: menjumlahkan kedua bilangan.

Dari persoalan ini tergambar bagaimana langkah pemecahannya, yaitu untuk dapat menjumlahkan dua buah bilangan, kita membutuhkan nilai kedua buah bilangan tersebut. Untuk itu, program harus meminta ke pengguna, nilai dua bilangan yang akan dijumlahkan, kemudian menjumlahkan bilangan tersebut dan memberikan hasilnya ke pengguna. Dengan demikian, diagram alirnya adalah sebagai berikut:

Mulai

Baca (a, b)

C = a + b

Tulis C

Selesai

(16)

Perintah Baca (a, b) merupakan perintah ke komputer untuk meminta data masukan dua buah bilangan a dan b ke pengguna program, untuk dijumlahkan. Proses C = a + b, merupakan proses penjumlahan dua buah bilangan tersebut dan perintah Tulis C adalah perintah agar komputer menampilkan hasil penjumlahan ke pengguna.

Ref tugas harian 1: Membuat diagram alir untuk tigas harian 1.

Jangan lupa tanda panah

Jangan lupa tanda yes no pada pilihan

tiap proses harus ada satu keluar, tidak boleh bercabang tiap pilihan hanya bercabang dua

input boleh banyak (bukan data input)

Konsep Larik

(17)

Pengantar Bahasa Pascal

Sejarah Bahasa Pascal

Pascal dikembangkan pada tahun 1970 oleh Niklaus Wirth sebagai bahasa yang ringkas dan efisien. Bahasa ini dirancang untuk pemrograman modular, pemrograman terstruktur dan struktur data.

Pascal diturunkan dari bahasa Algol dan nama Pascal diambil untuk menghormati matematikawan dan filosof Perancis Blaise Pascal. Mulanya Pascal digunakan untuk mengajarkan pemrograman terstruktur kepada para mahasiswa.

Pada era pemrograman berorientasi objek, Pascal menjadi Object Pascal atau Delphi.

Karakteristik

Bahasa pemrograman Pascal merupakan bahasa tingkat tinggi. Karakteristik lain adalah:

• General purpose: Bahasa ini digunakan untuk berbagai jenis keperluan dan terapan.

• Terstruktur: Program dipandang sebagai suatu tugas yang kemudian dibagi (dirinci) menjadi beberapa tugas. Setiap tugas bisa dibagi (dirinci) lagi menjadi beberapa tugas yang lain

• Bertype: Data dideklarasikan dalam jenis tertentu

• Imperatif: tersusun dari sekumpulan perintah tertentu yang harus dilaksanakan. • Sekuensial: berurutan; perubahan urutan akan mengubah hasil.

• Tidak case-sensitif (case-insensitif): tidak membedakan huruf besar/kapital dan kecil

Struktur Program

Program Pascal terdiri dari: Header

(18)

Label Konstanta Definisi Jenis Variabel

Prosedur dan Fungsi Pernyataan

Contoh Program Pascal

Program HitLuasLing; {header atau kepala} Var {deklarasi}

jari2, luas : real; {Minta alokasi tempat di memori} Begin {blok Pernyataan program}

readln(jari2); {input}

luas := 3.14 * sqr(jari2); {Proses} writeln(‘Luas : ‘, luas) {Output} end. {Akhir program}

Struktur Program di atas terdiri dari nama program yaitu HitLuasLing yang berarti program untuk menghitung luas lingkaran. Kurung kurawal merupakan tanda untuk komentar, untuk memberi catatan ketika membuat program. Bagian ini tidak diproses oleh kompilator. Baris kedua ada bagian deklarasi variabel yang ditandai dengan Var, digunakan untuk memberi tahu komputer (kompilator) agar menyediakan ruang di memori (alokasi) untuk variabel sebanyak yang dibutuhkan (tergeantung jenisnya). Di sini ada dua jenis variabel real yaitu jari2 dan luas.

Bagian yang diawali begin dan diakhiri end merupakan bagian utama (tubuh) program. Program terdiri dari input, proses dan output. Di sini input berupa jari-jari yang dilambangkan dengan variabel jari2 dan diberi nilai melalui operasi readln yang berarti membaca data dari piranti input (di sini layar monitor). Setelah operasi readln, variabel jari2 yang semula tidak tertentu nilainya, sekarang mengandung data jari-jari. Prosesnya berupa menghitung luas yang dilambangkan variabel luas. Fungsi sqr() adalah fungsi di dalam Pascal untuk menghitung pangkat dua (square) karena luas merupakan pi dikali kuadrat jari-jari. Nilai pi didekati dengan 3,14. Tanda * merupakan perkalian di dalam Pascal dan tanda := berarti hasil perhitungan diberikan ke sisi kiri (di sini variabel luas). Variabel luas yang semula tidak diketahui (tidak tentu) nilainya

(19)

sekarang bernilai luas lingkaran. Outputnya berupa menampilkan isi variabel luas melalui writeln ke piranti output (di sini monitor juga).

Latihan 1

1. Ubah program di atas agar pengguna tahu fungsi program tersebut dan bahwa dia harus memberikan nilai jari-jari ke komputer

2. Ubah program di atas untuk bisa menghitung luas dan keliling lingkaran sekaligus, serta tampilkan keduanya

3. Menukar nilai dua buah variabel.

Buatkan program yang memasukkan nilai integer ke dua buah variabel misalnya a dan b. Kemudian prosesnya adalah menukar isi variabel a dengan variabel b. Untuk itu harus ada variabel antara, yang menyimpan sementara nilai salah satu variabel agar bisa menerima nilai yang baru. Variabel yang nilainya dititipkan tadi kemudian mendapat nilai virabel yang lain. Dan variabel kedua ini mendapat nilai variabel yang pertama yang sedang dititipkan tadi. Tampilkan melalui writeln.

Bagian-Bagian Program

Komentar

Komentar digunakan untuk memberi catatan pada program dan tidak diproses oleh kompiler. Komentar diawali { atau (* dan diakhiri } atau *).

Pengenal

Pengenal (identifier) digunakan untuk memberi nama pada unsur program seperti label, konstanta, variabel dan lainnya.

Pengenal terdiri dari huruf, angka, dalam susunan apa saja kecuali yang pertama harus huruf.

Huruf besar atau kecil diperbolehkan dan tidak dibedakan.

Pengenal tidak boleh sama dengan kata yang dicadangkan (reserved words) untuk bahasa Pascal.

Label

Label digunakan untuk menomori baris program (pernyataan), digunakan untuk perintah goto. Harus dideklarasikan sebelumnya.

(20)

Contoh: Label 10, selesai … 10 : read(a); … Goto 10; … Goto selesai … Selasai: … Konstanta

Konstanta adalah pengenal yang digunakan untuk nilai yang tetap. Contoh:

CONST pecahan = 0,166667;

Deklarasi Jenis

Digunakan untuk deklarasi jenis baru yang kita buat sendiri: Contoh:

Type hari_kerja = (Senin, Selasa, Rabu, Kamis, Jumat):

Variabel

Pengenal untuk variabel, nilai yang bisa berubah. Contoh deklarasi:

Var

(21)

Jenis Data

Jenis data sederhana terdiri dari: Standard:

Integer: bilangan bulat Real: bilangan real Char: karakter

Boolean: nilai boolean (benar/salah) user-defined (bentukan)

enumerated (terbilang) subrange

Jenis data yang lain adalah yang terstruktur yang terdiri dari: array

record set file

Pointer

Operasi Data Sederhana

• Operator

– biner: a+b – uner: not(a)

Operasi Integer:

Operator Arti Operan Hasil

+ penjumlahan integer integer

- pengurangan integer integer

* perkalian integer integer

/ pembagian integer real

DIV Pembagian terpotong integer integer

(22)

• Contoh operasi integer: • Misal a = 13, b = 5 a+b = 18 a-b = 8 a*b = 65 a div b = 2 a mod b = 3 a/b = 2.6 Latihan 2

Buatkan program yang menghitung pembagian bulat dengan / dan div dan sisa pembagian dengan mod.

Real

Operator Arti Operan Hasil

+ penjumlahan real real

- pengurangan real real

* perkalian real real

/ pembagian real real

Boolean

Operator Arti

= Sama dengan?

<> Tidak sama dengan? < Lebih kecil?

> Lebih besar?

<= Lebih kecil atau sama dengan? >= Lebih besar atau sama dengan? and Benar jika kedua operan benar or Benar jika salah satu operan benar not Membalik nilai benar/salah

(23)

Char chr(65)=‘A’ ord(‘A’) = 65 pred(‘B’) = ‘A’ succ(‘A’)=‘B’ Jenis Enumerated

type hari = (Ahad, Senin, Selasa, Rabu, Kamis, Jum’at, Sabtu) Contoh pemakaian:

pred(Ahad) -- run-time error pred(Senin) = Ahad

ord(Ahad)=0 ord(Selasa)=2 Ahad < Senin = true

write(pred(Senin)); -- compile error. write(ord(Senin)) tertulis 1

Jenis Subrange:

mengambil sebagian dari rentang data:

type nama = data_pertama .. data_terakhir

Contoh:

type hari = (Ahad, Senin, Selasa, Rabu, Kamis, Jum’at, Sabtu) harikerja = Senin .. Jum’at;

bulan = 1..12; tanggal = 1..31;

(24)

abs(x) menghitung nilai mutlak int, real seperti x

arctan(x) arcus tangent x int, real real

chr(x) menentukan karakter dari x int char

cos(x) menentukan nilai cosinus int, real real exp(x) menentukan ex. e=2.718282.. int, real real

ln(x) menghitung log natural int, real real

odd(x) menentukan x apakah ganjil atau genap

int boolean: true jika

ganjil ord(x) menentukan nilai untuk repr x char integer pred(x) menentukan nilai sebelumnya int, char, boolean seperti x round(x) membulatkan ke nilai terdekat real int

sin(x) nilai sinus int, real real

sqr(x) menentukan nilai x kuadrat int, real seperti x

sqrt(x) menentukan akar x int, real real

succ(x) menentukan nilai sesudahnya int, char, boolean seperti x

trunc(X) memotong nilai pecahan real int

Fungsi Contoh

abs(x) abs(-0.3)=0.3 chr(x) chr(65)=‘A’ odd(x) odd(5) = true ord(x) ord(‘A’)=65

pred(x) pred(3)=2, pred(‘e’)=‘d’, pred(true)=false round(x) round(2.3)=2, round(3.7)=4

succ(x) succ(3)=4, succ(‘e’)=‘f’, succ(true)=false trunc(X) trunc(2.3)=2, trunc(3.7)=3

Presedensi

Presedensi Operator 1 (tertinggi) not (!)

2 * / div mod and

3 + - or

4 (terendah) = <> < <= > >=

Ungkapan (Ekspresi)

(25)

sekumpulan operan (bilangan, konstanta, variabel) yang disatukan oleh operator untuk membentuk suku seperti aljabar yang mempunyai nilai

• Contoh: (b*b – 4*a*c)/(2*a)

Pernyataan (statement)

• Pernyataan: instruksi atau sekumpulan instruksi yang menyebabkan komputer melakukan suatu tindakan.

• Pernyataan: – sederhana (tunggal) – majemuk (compound) • Contoh: sederhana: D := (b*b – 4*a*c) majemuk: Begin read (radius); luas := 3.14159*sqr(radius); write(radius, luas) End.

fungsi begin end

begin end digunakan untuk mengemas dua atau lebih pernyataan menjadi satu kesatuan. Dengan kata lain begin mengawali batas blok

Input dan Output

(26)

Data input dan output:

a. Dapat disimpan di dalam file yang akan dibaca dan ditulis pada saat program berjalan

b. Diberikan atau disajikan melalui layar dan keyboard Contoh:

PROGRAM penggajian(input, output);

Read dan Readln Sintaks:

read(var2_input); readln(var2_input);

Perbedaan keduanya:

readln menyebabkan read atau readln berikutnya (bukan yang ini) memulai pembacaan dari baris baru, sedangkan read menyebabkan pembacaan di titik akhir pembacaan data pada baris yang sama.

Fungsi EOLN dan EOF

– eoln memberi nilai true jika mencapai akhir baris

Contoh 1 VAR p1, p2, p3, p4 : integer; . . read(p1, p2); read(p3, p4); file input berisi: 1 2 3 4 5 6 7 8 Hasil: p1=1, p2=2, p3=3, p4=4

Contoh 2 VAR p1, p2, p3, p4 : integer; . . readln(p1, p2); readln(p3, p4); file input berisi: 1 2 3 4 5 6 7 8

(27)

– eof memberi nilai true jika dijumpai akhir file Write dan Writeln

Sintaks:

write(data2_output); writeln(data2_output);

Perbedaan keduanya:

writeln menyebabkan write atau writeln berikutnya menuliskan outpun di baris baru, sedangkan write tidak demikian

Perbedaan write(‘A’) dengan write(A)

Output Berformat:

– Menentukan lebar medan data Sintaks: data : lebar Contoh: write(‘Jumlahnya adalah’, j : 4); Contoh 1: writeln(‘a ’, ‘b ’); writeln(‘c ’, ‘d ’); Hasil: a b c d Contoh 2: write(‘a ’, ‘b ’); writeln(‘c ’, ‘d ’); Hasil: a b c d Contoh 3: writeln(‘a ’, ‘b ’); write(‘c ’, ‘d ’); Hasil: a b c d Contoh 4: write(‘a ’, ‘b ’); write(‘c ’, ‘d ’); Hasil: a b c d

(28)

hasilnya adalah Jumlahnya adalah -15 Contoh: write(‘Jumlahnya adalah’, j : 3); jika j=-15 hasilnya adalah Jumlahnya adalah-15 Contoh: write(‘Jumlahnya adalah’, j : 4); jika j = 5 hasilnya adalah Jumlahnya adalah 5 Contoh: write(‘Jumlahnya adalah’, j : 3); jika j=15000 hasilnya adalah Jumlahnya adalah15000

Menentukan Jumlah angka desimal: data : lebar_medan : jumlah_angka_desimal

Contoh:

(29)

pernyataan Hasil write(‘J =‘, j) J = 1.2345678E+04 write(‘J =‘, j : 12) J = 1.23457E+04 write(‘J =‘, j : 18) J = 1.23456780000E+04 write(‘J =‘, j : 10 : 3) J = 12345.678 write(‘J =‘, j : 8 : 1) J = 12345.7

Struktur Kontrol

• Loop Bersyarat vs Tidak Bersyarat

– Bersyarat: Melakukan pekerjaan berulang, berhenti karena kondisi tertentu

– Tidak Bersyarat: melakukan pekerjaan berulang sampai hitungan tertentu

• Eksekusi Bersyarat

– Dieksekusi jika kondisi tertentu terpenuhi

While – Do

loop bersyarat (kondisional) Sintaks:

While ungkapan_boolean Do pernyataan Contoh: digit:=1; while digit <= 10 Do Begin writeln(digit); digit:=digit+1 End; Flow chart kondisi

(30)

Bagian di dalam while (do) akan secara otomatis dieksekusi secara berulang, tidak perlu goto

harus ada car untuk mengubah kondisi agar perulangan bisa dipastikan berhenti, jangan sampai berulang tanpa batas

Repeat - Until

loop bersyarat (kondisional) Sintaks:

Repeat pernyataan2 Until ungkapan_boolean Contoh: digit:=1; repeat Begin writeln(digit); digit:=digit+1 end Until digit > 10; For - Do

loop tidak bersyarat Sintaks:

for var_kontrol := nilai_1 to nilai_2 Do pernyataan Contoh: juml := 0; for hit := 1 to n Do Begin readln(x); juml:=juml+x end;

(31)

writeln(‘Jumlah = ‘, juml);

Dalam Pascal, perulangan for do, meingkatkan bilangan kontrol satu per satu. Untuk hitung mundur, menurun, gunakan downto sebagai pengganti to.

Nested (Bersarang)

Bersarang: Struktur kontrol bisa berada di struktur yang lain (embedded). Struktur dalam tidak harus sama dengan struktur luar

Struktur yang tercakup (embedded) seluruhnya berada dalam struktur luar Tdk ada overlap: tercakup sebagian

Contoh For lp := 1 to lpmak Do Begin … repeat … until hit > n; … end If – then – else

Struktur kontrol bersyarat: tindakan diambil jika kondisi terpenuhi Sintaks:

If ungkapan_boolean then pernyataan Contoh:

If hitungan <= 100 then hitungan := hitungan + 1; Buat FC utk if then else

bagian then hanya satu pernyataan atau satu blok pernyataan Case – of

(32)

Case ungkapan of label_kasus_1 : pernyataan_1; label_kasus_2 : pernyataan_2; … label_kasus_n : pernyataan_n End Contoh: Case pilihan of ‘M’ : writeln(‘Merah’); ‘J’ : writeln(‘Jingga’); ‘K’ : writeln(‘Kuning’) End Goto

Digunakan untuk loncat ke suatu titik (label) Sintaks: Goto label; Contoh: Label 10, selesai … 10 : read(a); … Goto 10; .. Latihan 3

1. Buatkan program untuk menentukan bilangan terbesar di antara 3 buah bilangan integer positif.

2. Buatkan program untuk menentukan bilangan terkecil di antara 3 buah bilangan integer positif.

3. Buatkan program Paskal untuk menjumlahkan, mengurangkan, mengalikan, membagi kedua buah bilangan?

(33)

Tugas Harian 2

1. Buatkan flowchart untuk menukar isi variabel

2. Buatkan flowchart untuk menentukan bilangan terbesar dari 3 buah bilangan bulat positif

3. Buatkan flowchart untuk menentukan bilangan terkecil dari 3 buah bilangan bulat positif

Array

Seringkali kita membutuhkan banyak variabel untuk hal yang sama, dengan jenis data yang sama, seperti data nilai mahasiswa. Misalkan data nilai mahasiswa berjenis integer, maka jika ada 40 mahasiswa, kita membutuhkan 40 variabel integer. Untuk itu dalam bahasa pemrograman dikenal array. Array nilai misalnya ada nilai

Array Statik

Array Dinamik

Tugas Harian 3

1. Buatkan flowchart untuk menghitung rata-rata n buah bilangan dengan array dinamik

Latihan 4

1. Buatkan program untuk menghitung rata-rata n buah bilangan dengan array dinamik

Prosedur dan Fungsi

Prosedur dan Fungsi merupakan wujud pemrograman modular. Modul (Prosedur dan Fungsi) menangani sub (bagian) masalah.

(34)

Program menjadi lebih ringkas.

Program lebih mudah dipahami (logical clarity). Prosedur

ProsedurBagian struktur program, dikenal sebagai subroutine. Diacu dengan namanya, diikuti parameter jika ada.

Parameter berada di dalam tanda kurung, dipisahkan dengan koma jika banyak Mengacu prosedur berarti mengakses atau memanggil.

Jika prosedur dipanggil, kendali berpindah ke prosedur dan jika sudah selesai, kendali kembali ke pemanggil.

Prosedur bisa bersarang (nested)

Variabel Global

– Variabel global sedapat mungkin dihindari karena perubahan pada nilai variabel global harus diketahui oleh semua pengguna agar tidak menimbulkan kekeliruan. Ini sulit dilakukan.

– Jika kita mengambil nilai variabel global, kita tidak tahu mungkin nilainya sudah tidak valid.

Cakupan Nama (scope)

Pemrograman modular mengenal variabel/konstanta global dan lokal Program global Prosedur1 lokal1 Prosedur2 lokal2

•Variabel/konstanta global dikenal di seluruh program

•Variabel/konstanta lokal1 dikenal di Prosedur1 saja

•Variabel/konstanta lokal2 dikenal di Prosedur2 saja

•Jika ada nama variabel lokal yang sama dengan global, yang global tidak dikenal

(35)

– Komunikasi data/informasi (yang besar) sulit diwujudkan dengan variabel global

Parameter

Digunakan untuk komunikasi data antar prosedur/program. Solusi terhadap masalah variabel global.

Parameter aktual: parameter milik pemanggil. Parameter formal: parameter milik prosedur.

Jumlah param aktual dalam pemanggilan harus sama dengan jumlah param formal. Type param aktual sama dgn type param formal.

Contoh

Program x;

Var a, b, c, d: real; (* aktual *)

procedure p(x, y: real); begin (* mengolah x dan y *) end; Begin … p(a, b); (* aktual *) p(c, d); (* aktual *) … End.

(36)

Parameter Nilai

Parameter input karena merupakan input (sudah bernilai) bagi prosedur.fungsi. Dalam kasus ini nilai parameter aktual diberikan ke formal dan parameter aktual harus sudah bernilai sebelum pemanggilan atau berupa konstanta, ungkapan.

Nilai param aktual tetap.

Ini disebut juga komunikasi data dgn nilai (pass by value) Contoh Program x; Var a, b, c, d: integer; procedure p(x, y: real); begin (* mengolah x dan y *) end; Begin … p(2, 3); … p(1, 2); … End. Parameter Variabel

Nilai parameter aktual disubstitusi ke formal. Nilai aktual mengikuti formal. Dideklarasikan dengan VAR di dalam tanda kurung.

Ini dikenal sebagai komunikasi data dengan acuan (pass by reference)

Contoh

Program x;

(37)

procedure p(Var x, Var y: real); begin (* mengolah x dan y *) end; Begin … p(a, b); (* mengikuti x, y *) … p(c, d); (* mengikuti x, y *) … End. Fungsi

Seperti prosedur kecuali ada pengembalian satu nilai Deklarasi

Function nama_fungsi(param) : jenis_nilai Contoh

Function faktorial (n : integer) : integer; var faktor:integer;

begin … end;

Rekursi

Pascal mengenal rekursi: prosedur/fungsi yang memanggil dirinya sendiri.

Karena itu harus ada cara untuk mengakhiri pemanggilan agar tidak terus looping. Contoh

(38)

begin

if n<= 1 then faktorial := 1; (* mengakhiri rekursi *) else

faktorial := n*faktorial(n-1); (* setiap pemanggilan n berkurang 1 *) end;

(39)

Membuat Program

Analisis dan Pemodelan Matematik

Dalam banyak kasus, bahkan di awal penerapan komputer, komputer digunakan untuk membantu dan memudahkan dalam perhitungan numerik, seperti perhitungan sains, teknologi, akuntansi dan lainnya. Program untuk implementasi perhitungan seperti ini memerlukan penterjemahan rumus ke dalam program. Dari sini lahir bahasa komputer seperti Fortran: formula translation (penterjemahan rumus) dan Cobol: Common Business Oriented Language. Dalam bab ini kita mencoba memodelkan persoalan menjadi persamaan matematik kemudian diimplementasikan dengan menggunakan bahasa Pascal.

Sebelum masuk pada pemrograman, penting untuk memahami terlebih dahulu persoalan yang dihadapi untuk dipecahkan. Di sini diperlihatkan persoalan sederhana yaitu konversi satuan temperatur dari Fahrenheit ke Celcius dan sebaliknya. Persoalan kedua adalah menentukan akar persamaan kuadrat. Dalam tahapan ini kita melakukan analisis persoalan yang hendak dipecahkan kemudian dimodelkan dengan persamaan matematik.

Konversi Temperatur

Satuan temperatur yang paling dikenal adalah Celcius dan Fahrenheit. Celsius menentukan titik nol derajat pada saat air membeku dan titik 100 derajat pada saat air mendidih pada tekanan 1 atmosfir. Celcius membagi temperatur air membeku sampai air mendidih menjadi 100 skala. Sedangkan berdasarkan skala Fahrenheit, diperoleh bahwa air membeku pada 32 derajat dan mendidih pada 212 derajat, terbagi dalam 180 skala. Dengan demikian dapat ditarik kesimpulan:

- Skala 100 dalam Celcius berbanding dengan skala 180 dalam Fahrenheit - Angka 0 derajat dalam Celcius sama dengan 32 dalam Fahrenheit. - Angka 100 derajat dalam Celcius sama dengan 212 dalam Fahrenheit.

Jadi ada perbandingan 100 C (Celsius) dengan 180 F (Fahrenheit) atau 5 banding 9. Karena titik 0 C berimpit dengan 32 F, maka titik tc C akan berimpit dengan 32 + (9/5) x tc F. Atau 32 + (9/5) x tc = tf. Jika kita melakukan konversi sebaliknya, maka kita

(40)

𝑡𝑓 = 32 + (9 5) 𝑡𝑐 𝑡𝑓 − 32 = (9 5) 𝑡𝑐 (𝑡𝑓 − 32) (5 9) = 𝑡𝑐

Jadi, titik tf dalam skala F akan berimpit dengan titik 5/9 x (tf – 32) C. Sekarang kita memiliki dua model matematik untuk konversi temperatur.

C ke F : 32 + (9/5) tc = tf F. F ke C : (5/9) (tf – 32) = tc C Contoh:

1. Berapa derajat F jika temperatur air menunjukkan 50 oC? Kita ambil persamaan

pertama: 32 + (9/5).50 = 122 oF. Jadi 50 oC berimpit dengan 122 oF.

2. Berapa derajat C jika temperatur air menunjukkan 95 oF? Di sini kita ambil persamaan kedua: (5/9). (95 – 32) = 35 oC.

Setelah kita mendapatkan model (rumus) matematik, tahap berikutnya adalah menterjemahkan atau implementasi ke dalam bahasa pemrograman yang akan kita gunakan, dalam hal ini Pascal. Dalam Pascal, operator perkalian menggunakan tanda bintang (*) dan untuk pembagian menggunakan garis miring (/). Jadi kode Pascalnya adalah: program KonversiCF; var tc, tf:real; begin write('Berapa C '); read(tc); tf:=(9/5)*tc+32; write(tc:4:1,' C = ',tf:4:1,' F'); read(tc); end. program KonversiFC; var tf, tc:real; begin write('Berapa F '); read(tf); tc:=(5/9)*(tf-32); write(tf:4:1,' F = ',tc:4:1,' C'); read(tf); end. Persamaan Kuadrat

(41)

Pemodelan Rekursif

Merancang Algoritma

Menterjemahkan Diagram Alir.

contoh lihat soal no 3 tugas V

di situ kondisi berulang jika b TIDAK sama dengan 0 diterjemahkan dengan while b>0

Input data satu per Satu

meskipun di FC sekaligus baca (a,b) harus diimplementasikan satu per Saturday

Membuat Diagram Alir yang Terstruktur

Ada beberapa hal sederhana tetapi penting untuk diperhatikan yaitu, pertama, diagram alir harus dimulai dari awal dan diakhiri di akhir dan semua jalur harus bisa ditelusuri dari awal (mulai) sampai akhir (selesai), tidak boleh ada yang putus (Gambar 8). Dalam gambar tersebut, diagram yang sebelah kanan ada yang putus, yaitu setelah keluaran Tulis Cirebon. n==0 tidak Mulai Baca n Tulis Bandung ya Selesai Tulis Cirebon n==0 tidak Mulai Baca n Tulis Bandung ya Selesai Tulis Cirebon

Gambar 8. Contoh Diagram alir yang benar (kiri) dan yang salah (kanan).

Kedua, hal lain yang perlu diperhatikan adalah bahwa diagram alir harus terstruktur, jangan membentuk diagram seperti mie yang semrawut. Aliran A pada Gambar 9 menerobos masuk perulangan sehingga merusak struktur diagram alir.

(42)

Mulai KA i=i+1 tidak Tulis f Selesai KB A

Gambar 9. Aliran A menerobos masuk ke lingkungan kondisi KA.

Ketiga, diagram alir yang terstruktur seharusnya merupakan dekomposisi proses secara berantai dari proses besar menjadi beberapa sub proses yang lebih kecil. Dalam dekomposisi berantai, kita harus memandang bahwa diagram alir pertama-tama hanya terdiri dari satu proses. Satu proses ini diuraikan menjadi beberapa sub proses, kemudian tiap sub proses diuraikan lebih lanjut menjadi beberapa sub sub proses dan seterusnya (Gambar 10). Mulai Selesai Proses A Mulai Selesai Proses A.1 Proses A.2 Proses A.3 Kondisi 1 Blok Positif Proses A.2 ya tidak Blok Negatif i==n i=i+1 tidak ya Proses A.1

Gambar 10. Dekomposisi proses dalam menggambarkan diagram alir.

Dalam membuat diagram yang terstruktur, ada beberapa hal yang perlu dicatat dalam konstruksi if-else yaitu pertama, konstruksi if-else adalah konstruksi biner yang eksklusif: hanya ada dua pilihan dan hanya bisa memilih salah satu saja: jika bagian positif (then) dieksekusi maka bagian negatif (else) tidak dieksekusi, begitu juga

(43)

sebaliknya, jika bagian negatif dieksekusi maka bagian positif tidak dieksekusi. Juga karena bersifat biner, dalam diagram alir tidak boleh bercabang tiga apalagi lebih. Kedua, dalam if-else yang tidak kembali ke atas (bukan untuk perulangan) hanya ada satu titik masuk (entry point) dan hanya ada satu titik keluarnya (exit point). Titik masuk adalah titik masuk ke pemilihan (kondisi). Titik keluar adalah titik pertemuan bagian positif dengan bagian negatif (Gambar 11). Penentuan titik-titik ini penting untuk menentukan jangkauan bagian if (then) dan bagian else. Gambar B dan C pada Gambar 11 menunjukkan bahwa bagian negatif tidak ada (tanpa else).

Dalam kode program, terjemahan diagram A dan C seringkali sulit dibedakan terutama bagi pemula, sehingga banyak yang gagal memahami kode tersebut dengan benar. Untuk itu perhatikan keluaran pada Listing 1, yang menunjukan perbedaan konstruksi if-else: yang pertama dengan else dan yang kedua tanpa else. Pada keluaran yang pertama, dengan else, BD dan CB ditulis secara bergantian (ekslklusif). Tampak bahwa keluaran yang kedua selalu mencetak CB baik pada saat a>0 maupun a<0, sehingga keluarannya menjadi BDCB pada saat a>0.

K benar? Bagian Positif tdk ya B Entry point Exit point K benar? Bagian Positif Bagian C tdk ya C Exit point Entry point K benar? Bagian Positif Bagian Negatif tdk ya A Entry point Exit point

Gambar 11. Konstruksi if-else, titik masuk dan keluar

Masukan Dengan else (diagram A) Keluaran Tanpa else (diagram C) Keluaran

a=1 begin

read (a);

if a>0 then write('BD') else

write('CB'); end.

BD begin

read (a);

if a>0 then write(‘BD’); write('CB');

end.

BDCB

a=-1 CB CB

Listing 1. Perbedaan konstruksi if-else: tanpa else dan dengan else.

(44)

termasuk if-else. Sebagai ilustrasi, perhatikan Gambar 12 di bawah. Blok positif berupa konstruksi if-else yang lain. Blok negatif bisa kosong tanpa statemen apapun. Blok positif dari konstruksi anak boleh berupa konstruksi if-else yang lain lagi.

Kondisi 1 tdk Blok Negatif

Kondisi 2 tdk ya ya Kondisi 1 Blok Positif A C ya tidak Blok Negatif Blok Positif

Gambar 12. Blok positif terdiri dari konstruksi if-else.

Contoh lain adalah blok negatif yang berupa konstruksi if-else yang lain seperti pada Gambar 13. Tentu saja konstruksi induk harus mengandung else, dan titik keluar kedua konstruksi itu berimpit. Demikian seterusnya, blok negatif konstruksi anak juga bisa berupa konstruksi if-else yang lain lagi.

Kondisi 1

Kondisi 2 tdk

ya Kondis 1 Blok Negatif

A C tdk Blok Positif ya tdk Blok Positif Blok Negatif

Gambar 13. Blok negatif berupa if-else.

Dalam menentukan jumlah cabang pada konstruksi if-else, perlu juga memperhatikan arah anak panah. Cabang ditunjukkan dengan anak panah yang keluar, sehingga jumlah

(45)

cabang ditentukan oleh jumlah anak panah yang keluar bukan anak panah yang masuk. Jumlah anak panah yang masuk boleh sebarang, lebih dari satu. Konstruksi if-else dengan kondisi i==n pada Gambar 14 memiliki dua cabang, bukan tiga.

Mulai i==n i=i+1 tidak ya Tulis f Selesai ya

Gambar 14. Konstruksi if-else hanya bercabang dua.

Konstruksi if-else harus mencakup semua kemungkinan kondisi yang akan dijumpai, jangan sampai ada suatu kondisi (misalnya rentang nilai) yang tidak ditentukan akibatnya atau keluarannya (tidak terduga). Sebagai contoh, perhatikan kasus berikut:

Kasus 1 Kasus 2 Kasus 3

if (a<0) then write(‘Cirebon’) else if (a>0) then write(‘Bandung’)

if (a<0) then write(‘Cirebon’)

if (a<0) then write(‘Cirebon’) else write(‘Bandung’)

Dalam kasus 1, kondisi a=0 tidak ditentukan demikian pula kasus 2, kodisi a=0 dan a>0 tidak ditentukan. Ini akan menimbulkan ketidakpastian dan dalam pengujian juga dapat menimbulkan kesulitan verifikasi. Dalam pengujian harus ada verifikasi bahwa jika masukan demikian maka keluarannya harus demikian. Apakah sesuai antara hasil yang diharapkan dengan hasil yang sebenarnya. Dalam pemrograman yang berkaitan dengan aspek keselamatan, hal ini lebih penting lagi karena dikhawatirkan akan menimbulkan dampak lanjutan berupa resiko keselamatan. Dalam kasus 3, pemrogram harus sadar dan memang sengaja bahwa untuk kondisi a<0 keluarannya berupa penulisan kata Cirebon dan untuk kondisi a>=0 keluarannya memang harus menuliskan kata Bandung. Jangan sampai dalam pengujian menimbulkan keheranan.

(46)
(47)

Menguji Program

Seringkali program itu tidak langsung jadi sesuai yang dikehendaki. Bahkan umumnya program itu memiliki banyak galat (error) atau bug yang belum diketahui. Galat kadang kala baru diketahui setelah program itu lama dipakai (operasional).Pengujian program ditujukan untuk bisa mengungkap sebanyak mungkin galat agar dalam operasionalnya sedikit saja dijumpai galat. Kita tidak bisa yakin kalau program kita sudah sepenuhnya terbebas dari galat/bug. Jadi pengujian adalah untuk sedapat mungkin meminimalkan jumlah galat/bug.

Untuk dapat mengurangi galat/bug secara maksimal, kita harus melakukan pengujian untuk semua kondisi dan masukan yang mungkin. Akan tetapi, kombinasi masukan yang mungkin diberikan ke program itu tidak terhitung sehingga pengujian yang sempurna untuk semua kondisi masukan, tidaklah mungkin karena akan membutuhkan waktu yang sangat lama sehingga pengujian tidak akan pernah selesai. Itulah salah satu kesulitan pengujian. Ditambah lagi, jika perbaikan galat/bug kadang menimbulkan galat lain, atau bisa saja galat yang sudah diperbaiki sebelumnya muncul lagi.

Kondisi Galat

Kondisi di mana program pasti akan error

misal a/(b-2), b TIDAK BOLEH SAMA dengan 2

Membuat Kasus Uji

Salah satu usaha untuk mengurangi jumlah masukan yang harus diujikan ke program adalah dengan merancang dan membuat kasus uji yang efektif yang dapat mewakili semua kemungkinan masukan yang bisa diberikan. Misalnya, jika program itu mengandung pilihan (kondisi) seperti pada contoh berikut , maka kita harus membuat kasus uji untuk a>0, a<0 dan a=0.

begin read (a);

if a>0 then writeln('Bandung')

begin read (a);

(48)

writeln('Banjarmasin'); writeln('Cirebon'); end.

if a=0 then writeln ('Jakarta'); if a<0 then writeln ('Surabaya'); end.

Listing 2. Contoh Program untuk analisis kasus uji

Untuk contoh kedua (kanan), kita harus menganalisis dengan garis bilangan: ketika kita menjumpai a>5, kita buat rentang dari 5 ke kanan sampai tak hingga (5 tidak tercakup), dengan bulatan putih, kosong. Kemudian untuk a>0, kita buat rentang dari 0 (tidak termasuk 0) ke kanan menuju tak hingga dengan bulatan putih. Untuk a=0, cukup dibuat bulatan gelap di titik 0. Terakhir, a<0 dibuat rentang dari 0 ke kiri menuju minus tak hingga (Gambar 15). 0 5 4 3 1 2

Gambar 15. Rentang bilangan untuk kasus uji.

Langkah selanjutnya adalah menggabungkan garis-garis rentang tersebut. Rentang pertama adalah a<0 kemudian yang kedua, a=0. Yang ketiga, rentang a>0 sampai dengan a=5, dan 5 termasuk dalam rentang ini. Terakhir, rentang a>5, sampai tak hingga. Dengan demikian, keempat rentang itu adalah:

- Rentang 1: a<0 - Rentang 2: a=0 - Rentang 3: 0<a<=5 - Rentang 4: a>5 3 4 1 2 3 4 1 2 0 5

Gambar 16. Rentang bilangan untuk kaus uji

Jadi rantang bilangan yang dihasilkan harus mencakup semua bilangan dari minus tak hingga sampai tak hingga. Namun demikian, dalam pengujian kita cukup mengambil salah satu bilangan dalam setiap rentang. Salah satu bilangan dalam setiap rentang sudah cukup mewakili semua bilangan dalam rentang yang bersangkutan. Dengan

(49)

demikian kita tidak perlu melakukan pengujian dengan kasus uji yang jumlahnya tidak terhingga, cukup dengan salah satu bilangan dalam setiap rentang saja. Jika dijadikan masukan, bilangan-bilangan dalam rentang yang sama akan menghasilkan keluaran yang sama.

Melacak Eksekusi Program

Program dieksekusi secara urut, beruntun (sekuensial) dari atas ke bawah, kecuali jika ada lompatan atau ada pemilihan. Dalam bahasa pemrograman (klasik), umumnya mendukung perintah goto untuk lompat ke baris tertentu dalam program. Dalam Java tidak dikenal perintah goto ini. Selain itu, yang memungkinkan eksekusi program tidak sekuensial adalah pemilihan: jika kondisi demikian, mengeksekusi bagian tertentu dan jika tidak akan mengeksekusi yang lainnya. Dalam bahasa pemrograman, pemilihan eksekusi diwujudkan dengan if-(then)-else, atau case selection (switch-case).

Hal lain yang membuat jalannya program tidak linier adalah perulangan. Dalam perulangan, program berulang sampai batas tertentu atau sampai kondisi tertentu. Perulangan dibutuhkan karena memang banyak tugas yang harus dikerjakan dengan cara yang sama, tetapi dengan nilai satu atau beberapa variabel yang berbeda. Perulangan dilakukan dalam beberapa cara: iterasi tanpa kondisi, iterasi dengan kondisi dan rekursi.

Perlu diperhatikan juga kedua konstruksi berikut :

buat blok positif berbentuk if-else dan ada 2 varian

(50)
(51)

Referensi

[1] J. J. O’Connor and E. F. Robertson, “Abu Ja’far Muhammad ibn Musa Al-Khwarizmi,” 1999. [Online]. Available:

http://www-history.mcs.st-andrews.ac.uk/Biographies/Al-Khwarizmi.html. [Accessed: 21-Jul-2019]. [2] T. C. Dictionary, “Algorithm,” 1997. [Online]. Available:

https://chambers.co.uk/search/?query=algorithm&title=21st. [Accessed: 21-Jul-2019].

[3] E. Horowitz and S. Sahni, Fundamentals of computer algorithms, 1978. 1978. [4] S. Horowitz, Elis;Sahni, Sartaj;Rajasekaran, Computer Algorithms. 1997. [5] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction to

(52)

Lampiran

Turbo Pascal for Windows

Jika belum ada, install program • Cara:

– Dari cd, klik install.exe – Biarkan melakukan install

– Jika sudah selesai instalasi, klik ganda TPW atau dari menu start → All Program

– Muncul window integrated development environment (IDE)

(53)

Gambar

Gambar di bawah memperlihatkan contoh perulangan selama i lebih kecil dari n dan  sampai dengan i sama dengan n
Gambar 6. Contoh diagram alir.
Gambar 7. Diagram alir menjumlahkan dua buah bilangan.
Gambar 8. Contoh Diagram alir yang benar (kiri) dan yang salah (kanan).
+6

Referensi

Dokumen terkait

Validator standar dibatasi pada apa yang mereka mampu lakukan; sangat mungkin kita perlu membuat kode validasi untuk memeriksa ketepatan data pada

 Kita dapat belajar membuat program dengan Java secara cepat jika telah memahami konsep dasar pemrograman berorientasi objek yaitu hanya perlu mengerti beberapa konsep untuk

mengidentifikasi kebutuhan perntah kendali pada contoh masalah – membuat diagram alir dari contoh masalah yang mengandung perintah kendali, membedakan bentuk perintah IF

Guru memberikan tugas membuat purwarupa neraca sesuai dengan desain/konstruksi yang telah dirancang pada akhir pertemuan pertama (difoto dan bila perlu

Guru membimbing siswa dalam memberikan cara membuat Algoritma pencarian data dan algoritma pengurutan data (sorting) dengan menggunakan array. Guru memberikan kesempatan kepada

Guru membimbing siswa dalam melaksanakan praktek membuat algoritma dengan menggunakan skema program Pengulangane. Guru memberikan kesempatan kepada siswa untuk melakukan tanya

Buat dengan Array dan if-else Tampilan input: Tampilan output: Ketentuan soal untuk membuat KHS di atas: Total nilai adalah 10%*absen+20%*tugas+30%*uts+40%*uas Jika total nilai

Gadget adalah hal yang sangat populer saat ini. Hampir setiap orang menggunakan gadget untuk berbagai keperluan. Salah satu fungsinya adalah berkomunikasi dan mencari informasi dengan cepat. Gadget membutuhkan sebuah program yang berfungsi untuk mengatur berjalannya perangkat tersebut. Menurut Yulikuspartono (2009:29) mengemukakan bahwa “ program merupakan sederetan instruksi atau statement dalam bahasa yang dimengerti oleh komputer yang bersangkutan”. Program merupakan sebuah elemen inti untuk kinerja suatu perangkat. Program inilah yang akan mengolah dan menjalankan perintah yang diberikan oleh user agar dapat di kelola oleh perangkat/device. Program juga dibuat oleh manusia, dan orang yang membuat program ini disebut dengan Programmer. Seorang programmer membuat program dengan menggunakan bahasa pemrograman. Bahasa pemrograman inilah yang disusun dengan berdasarkan logika atau algoritma menusia yang di terjemahkan ke algoritma manusia yang di terjemahkan ke perangkat. Bahasa pemrograman ini dibuat untuk memudahkan manusia dalam membuat suatu aplikasi atau program. Bahasa pemrograman bisa di klasifikasikan dari beberapa sudut pandang. Salah satu pengklasifikasian bahasa pemrograman adalah pendekatan dari notasi bahasa pemrograman tersebut, apakah lebih dekat ke bahasa mesin atau ke bahasa manusia. Dengan cara ini, bahasa pemrograman dapat di kelompokan menjadi dua yakni bahasa tingkat rendah (low level languages) dan bahasa tingkat tinggi (high level language). Bahasa tingkat tinggi adalah bahasa yang mudah dipahami oleh manusia, C++ merupakan salah satu contoh dari bahasa tingkat tinggi. Contoh lain dari bahasa tingkat tinggi ini seperti Pascal, Perl, Java, dan lain-lain sebagainya. Sedangkan bahasa tingkat rendah adalah bahasa mesin atau bahasa assembly. Secara sederhana sebuah komputer hanya dapat mengeksekusi program yang ditulis dalam bentuk bahasa mesin. Oleh karena itu, jika suatu program ditulis dalam bahasa tingkat tinggi maka program tersebut harus diproses terlebih dahulu sebelum bisa dijalankan dengan komputer. Hal ini merupakan salah satu kekurangan bagi bahasa tingkat tinggi dimana diperlukan waktu untuk memproses suatu program sebelum program tersebut di jalankan. Sebagai bahasa yang beraras tinggi, yang menggunakan perintah-perintah yang mudah dimengerti oleh manusia, C++ mempunyai keunggulan yakni bersifat universal. Sebagai bahasa yang universal, C++ bisa dijumpai di berbagai platform (Linux, Unix, Windows, Mac, dan lain-lain). Artinya, jika kita menguasai C++ di platform PC, sangat mudah untuk berpindah di Linux ataupun system operasi yang lain.