• Tidak ada hasil yang ditemukan

Pengenalan Algoritma dan Struktur Program

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pengenalan Algoritma dan Struktur Program"

Copied!
83
0
0

Teks penuh

(1)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 1 Okkita Rizan - Hamida

Materi I

Pengenalan Algoritma dan Struktur Program

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami definisi algoritma

2) Mahasiswa dapat memahami ciri, syarat dan kriteria algoritma 3) Mahasiswa dapat mengetahui cara penulisan algoritma 4) Mahasiswa dapat mengetahui struktur alur algoritma

5) Mahasiswa dapat mengetahui struktur program yang akan digunakan untuk mengimplementasikan algorima

1. Definisi Algoritma

Definisi algoritma diuraikan secara beragam dari berbagai literatur. Walaupun definisi satu dengan yang lain bisa saja berbeda, tapi semuanya mendekatkan diri pada tata cara penulisan suatu bahasa pemrograman yang bentuknya umum. Sehingga dalam mempelajari algoritma akan dikaitkan dengan program yang dibentuk atau ditulis dalam suatu bahasa yang disebut dengan bahasa pemrograman walaupun sebenarnya algoritma itu sendiri tidak terikat dengan salah satu bahasa pemrograman manapun. Contoh dari bahasa pemrograman yaitu bahasa COBOL, bahasa BASIC, bahasa Pascal, bahasa C, bahasa java dan lain sebagainya. Dalam diktat ini, algoritma yang akan dipelajari lebih mendekatkan dengan bahasa C++, bahasa pemrograman yang mempunyai struktur yang baik sehingga mudah untuk dipahami dengan kompiler dan tools menggunakan Microsoft Visual C++ dan Borland C++ 5.02.

Pada dasarnya algoritma adalah alur pikiran dalam menyelesaikan suatu pekerjaan yang dituangkan dalam bentuk tertulis yang dapat dimengerti oleh orang lain. Alur pikiran seseorang dapat berbeda dengan alur pikiran orang lain dalam menyelesaikan pekerjaan yang sama dengan hasil yang sama walaupun ditempuh dengan cara yang berbeda.

Algoritma juga diartikan sebagai urutan langkah-langkah yang dinyatakan dengan jelas dan tidak rancu untuk memecahkan suatu masalah dalam rentang waktu tertentu. Artinya, setiap langkah harus dapat dikerjakan dan mempunyai efek tertentu, sehingga langkah-langkah yang tidak dapat dikerjakan dan tidak menghasilkan efek tertentu tidak dapat disebut algoritma.

Bila dikaitkan dengan bahasa pemrograman, secara bebas definisi algoritma yang akan dipelajari adalah sekumpulan instruksi, yang apabila dijalankan, akan menyelesaikan suatu tugas tertentu. Sedangkan kata algoritma sendiri diambil dari nama ilmuwan muslim yaitu Abu Ja’far Muhammad bin Musa Al-Khwarizmi.

2. Syarat, Ciri & Kriteria Algoritma

Secara umum syarat atau ciri dari algoritma sebagai berikut : a. Algoritma harus tidak ambigu (unambiguous)

Deskripsi langkah-langkah dalam algoritma harus dan hanya mempunyai tafsiran tunggal. b. Algoritma harus tepat (precise)

Algoritma harus menyatakan urutan-urutan langkahnya. c. Algoritma harus pasti (definite)

Setiap instruksi jelas maksudnya dan tidak meragukan, sehingga jika serangkaian langkah yang sama dilakukan dua kali maka hasilnya harus selalu sama.

d. Algoritma harus berhingga (finite)

Algoritma baik secara keseluruhan maupun sub algoritma bila ditelusuri harus ada titik berhentinya.

(2)

e. Algoritma tidak harus ada data masukan yang dimasukkan dari luar f. Algoritma paling tidak ada satu buah keluaran

3. Cara Penulisan Algoritma

Penulisan algoritma setidaknya ada 3 cara untuk menguraikannya, yaitu : a. Uraian Deskriptif

Adalah uraian yang menggunakan bahasa yang biasa digunakan sehari-hari. Pengurutan bilangan genap pada kasus diatas merupakan contoh penulisan algoritma menggunakan uraian deskriptif.

b. Pseudocode

Yang dimaksud dengan pseudocode adalah kode atau tanda atau ceritera yang menyerupai atau merupakan (pseudo) penjelasan cara menyelesaikan persoalan. Kode atau tanda atau ceritera tersebut ditulis dalam suatu bahasa yang dimengerti oleh manusia. Pseudocode dapat dikembangkan sendiri, asalkan arti dari setiap kode disepakati bersama. Algoritma dalam contoh kasus diatas jika dituliskan kedalam bentuk pseudocode menjadi : input (b) i  0 j  0 while (i <= b) do i  i + j j  j + 1

if i mod 2 = 0 then output (i) end

c. Flowchart (Bagan Alir)

Adalah penulisan algoritma dengan menggunakan notasi grafik atau gambar. Terdapat lima macam bentuk gambar atau notasi dasar yang dianggap baku dalam penggambaran flowchart.

Terminal / Notasi kapsul, untuk menggambarkan START (Mulai) dan END (Selesai). Terminal hanya sebagai tanda, tidak melakukan suatu pekerjaan khusus.

I/O, Input/Output Operation atau Notasi jajaran genjang, untuk menggambarkan pembacaan data (input/read) dan untuk menampilkan data atau proses tulis (output/write).

Process atau notasi empat persegi panjang, menggambarkan proses dalam bagan alir.

Decision atau notasi belah ketupat menggambarkan keputusan sesuai dengan suatu kondisi. Notasi ini mempunyai dua panah keluar (dua nilai keluaran) yang bernilai true (ya, benar) dan false (tidak, salah). Garis, untuk menyatakan urutan pelaksanaan atau alur proses.

(3)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 3 Okkita Rizan - Hamida

Dari contoh kasus diatas, flowchartnya dapat digambarkan sebagai berikut :

START input (b) i  0 j  0 i < b i  i + j j  j + 1 i mod 2 = 0 output (i) END true true false false

4. Struktur Alur Algoritma

Algoritma mempunyai 3 macam struktur alur, yaitu : a. Struktur Sequential

Pada struktur ini, perintah-perintah atau instruksi dilaksanakan secara berurutan sesuai dengan urutan penulisannya.

Contoh : A  0 B  0 N  5 for I  1 to n do A  A + 2 B  A + 3 end output (A) output (B)

Pada contoh diatas, perintah atau instruksi yang dilingkari termasuk kedalam struktur sequential pada algoritma.

Atau :

A  0 ; B  0 ; N  5; for I  1 to n do

A  A + 2 ; B  A + 3 ; end

(4)

b. Struktur Conditional Branch / Selection

Pada struktur ini memungkinkan beberapa perintah/instruksi tidak dikerjakan, karena struktur ini alur algoritma akan menjadi bercabang, sehingga hanya alur perintah yang terseleksi/terpenuhi saja yang akan dikerjakan.

Ada dua macam struktur Conditional Branch yaitu :

1) Simple Conditional Branch (menggunakan if statement) 2) Multiway Conditional Branch (menggunakan case statement)

Mengenai kedua macam struktur ini, akan dibahas lebih lanjut pada bab berikutnya. Contoh : 1) input (a) 2) if (a <= 5) then 3) a  a + 100 4) else 5) a  a – 100 6) end 7) output(a)

Pada contoh diatas, jika a diinput dengan nilai 5 maka instruksi yang akan dikerjakan yaitu 1, 2, 3, 6, 7. Tetapi jika a diinput dengan nilai 6, maka instruksi yang akan dikerjakan yaitu 1, 2, 4, 5, 6, 7.

Berikut flowchart dari contoh diatas :

START input (a) a < 5 a  a + 100 output (a) END true false a  a - 100

(5)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 5 Okkita Rizan - Hamida

c. Struktur Loop

Struktur ini memungkinkan beberapa perintah atau instruksi akan dikerjakan berulang-ulang.

Ada dua macam struktur loop yaitu : 1) Unconditional Loop

2) Conditional Loop

Untuk dua macam struktur loop ini akan dibahas lebih lanjut pada bab berikutnya. Contoh : 1) T  0 2) I  1 3) WHILE I <= 100 4) DO 5) READ(A) 6) T  T + A 7) I  I + 1 8) ENDDO 9) WRITE(T)

Pada contoh diatas perintah-perintah yang termasuk kedalam struktur loop adalah 3, 4, 5, 6, 7, 8. Perintah-perintah tersebut akan dikerjakan berulang sesuai dengan kondisi yang diberikan.

5. Bahasa Pemrograman C++

Cikal bakal dari Bahasa Pemrograman C++ adalah bahasa C yang dikembangkan mulai awal tahun 1980 oleh Bjarne Stroustrup dari AT&T Bell Laboratories. Bahasa Pemrograman C++ merupakan pengembangan dari bahasa C dan pengembangannya diresmikan pada tahun 1985.

Tahun 1989, dunia pemrograman C mengalami peristiwa penting dengan dikeluarkannya standar bahasa C oleh American National Standars Institute (ANSI), yang kemudian dikenal dengan nama ANSI C.

Sebenarnya bahasa C++ mengalami dua tahap evolusi. Bahasa C++ yang pertama, dirilis oleh AT&T Laboratories dan dinamai dengan cfront. Bahasa C++ versi pertama ini hanya berupa kompiler yang menterjemahkan C++ menjadi bahasa C.

Pada evolusi selanjutnya, Borland International Inc. mengembangkan kompiler C++ menjadi sebuah kompiler yang mampu mengubah C++ langsung menjadi bahasa mesin (assembly). Sejak evolusi ini, mulai tahun 1990 C++ menjadi bahasa berorientasi obyek yang digunakan oleh sebagian besar pemrogram professional (sumber : wikipedia.org).

(6)

6. Struktur Program C++

Setiap bahasa pemrograman mempunyai ciri dan struktur program tersendiri. Struktur program menjadi bagian dari program yang akan dibuat. Struktur dari program memberikan gambaran secara luas, bagaimana bentuk dari program secara umum. Adapun struktur utama dari bahasa pemrograman C++ adalah :

void main ( ) { statement ; statement ; statement ; }

Struktur dari program C++ dapat dilihat dan pada hakekatnya adalah tersusun dari sebuah atau lebih blok-blok fungsi. Fungsi pertama yang harus ada di program C++ adalah main(), fungsi yang sudah ditentukan. Fungsi ini lah yang menjadi titik awal dan titik akhir eksekusi dari program.

C++ juga merupakan bahasa pemrograman yang bersifat case sensitive, yang berarti penulisan program menggunakan huruf kapital ataupun huruf kecil pada kode program dapat berarti lain. Pasangan kurung kurawal menandakan awal dan akhir kumpulan dari instruksi-instruksi yang akan dikerjakan di dalam fungsi. Setiap instruksi-instruksi atau baris-baris perintah harus diakhiri dengan titik koma untuk menandakan akhir dari satu baris perintah.

C++ menyediakan file judul (header file) yaitu file yang diantaranya berisi deklarasi fungsi dan definisi konstanta. File-file ini mempunyai ciri yaitu namanya diakhiri dengan ekstension .h. Apabila file judul tersebut akan digunakan pada suatu program, maka file judul tersebut harus diikut sertakan didalam program dengan menggunakan pengarah praprosesor. Pengarah praprosesor yang dipakai untuk membaca file judul adalah #include.

Bentuk umum #include

#include <namafile> atau

#include “namafile”

Berikut adalah contoh program sederhana dari bahasa pemrograman C++ : Nama Program : contoh1.cpp

(7)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 7 Okkita Rizan - Hamida

Materi II

Tipe Data, Variabel, Konstanta dan Operator

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami mengenai Tipe Data 2) Mahasiswa dapat memahami mengenai Variabel 3) Mahasiswa dapat memahami mengenai Konstanta 4) Mahasiswa dapat memahami mengenai Operator

1. Tipe Data

Tipe data adalah pengelompokkan data berdasarkan isi dan sifatnya. Didalam pemrograman, sifat dari data adalah karakter, bilangan bulat, bilangan pecahan atau boolean. Tipe Data biasanya selalu berpasangan dengan variabel.

Berikut Tabel Tipe Data Dasar (Basic Data Type) yang digunakan dalam Bahasa C++.

Sebutan Tipe Data Bentuk Penulisan Dalam Bahasa C Jumlah Byte Yang Diperlukan

Jangkauan Nilai Numerik

Character char atau signed char unsigned char 1 1 -128 s.d 127 0 s.d 255

Integer int atau signed int atau signed unsigned int atau unsigned long atau long int atau signed long atau signed long int unsigned long atau unsigned long int 2 2 4 4 - 32768 s.d 32767 0 s.d. 65535 - 2147483648 s.d 2147483647 0 s.d. 4294967295 Floating point single precision

Float 4 3.4E-38 s.d 3.4E38

(8)

Floating point double precision double long double 8 10 1.7E-308 s.d 1.7E308 Positif atau negatip 3.4E-4932 s.d 1.1E4932 Positif atau negatip

2. Variabel

Secara umum variabel adalah suatu simbol atau lambang yang mempunyai nilai. Secara teknis dalam pemrograman yang dimaksud dengan variabel adalah area atau tempat didalam memory komputer yang isinya dapat diubah-ubah yang digunakan untuk menampung suatu nilai dan/atau mengambil nilai tersebut. Variabel didefinisikan/dideklarasikan menggunakan kombinasi antara identifier, type dan dapat juga sekaligus diinisialisasi (pemberian nilai awal). Nama dari variabel ditentukan atau dikarang sendiri oleh pembuat program.

Ada beberapa aturan dalam pemberian nama variabel yaitu :

 Tidak boleh sama dengan nama atau kata yang sudah disiapkan oleh komputer (reserved word) seperti keyword dan functions.

 Maksimum 32 karakter, bila lebih dari 32 karakter, maka karakter selebihnya tidak diperhatikan oleh komputer.

 Huruf besar (kapital) dan huruf kecil berbeda (case sensitive)

 Karakter pertama harus huruf atau karakter garis bawah (under score), dan karakter berikutnya boleh huruf atau angka, atau karakter garis bawah.

 Tidak boleh mengandung spasi atau blank. Bentuk Umum Pendeklarasian Variabel adalah :

tipe_data nama_variabel ; atau

tipe_data nama_variabel = nilai_variabel ;

Adapun contoh programnya sebagai berikut : Nama Program : variabel.cpp

(9)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 9 Okkita Rizan - Hamida

Penjelasan Program :

- int bulat, float pecah : adalah proses pendeklarasian variabel. Variabel yang dibuat sebanyak 2 buah yaitu variabel dengan nama bulat dan variabel dengan nama pecah. Variabel bulat digunakan untuk menampung bilangan bulat sedangkan variabel pecah digunakan untuk menampung bilangan pecahan.

- bulat = 10, pecah = 2.5 : adalah perintah penugasan (Assignment Statement) mengisi nilai/angka kedalam masing-masing variabel.

- /n : adalah perintah ganti baris.

Berikut contoh program menggunakan variabel dengan angka yang akan diisi ke dalam variabel tersebut diinput terlebih dahulu :

Nama Program : variabelinput.cpp

Penjelasan Program :

- cin : adalah perintah untuk menginput data. Data yang diinput akan ditampung kedalam variabel yang sudah ditentukan.

3. Konstanta

Pada dasarnya konstanta memiliki kesamaan dengan variabel yaitu sebuah tempat untuk menyimpan sebuah nilai sesuai dengan datanya, hanya saja nilai yang ada dalam konstanta tidak dapat diubah-ubah dan hanya dapat digunakan atau diakses. Konstanta biasanya digunakan untuk menyimpan sebuah nilai yang sering digunakan atau nilai yang sudah pasti. Contohnya jari-jari lingkaran. Dalam bahasa C++ konstanta dapat menggunakan preprocessor directive #define.

Bentuk Umum Pendeklarasian Konstanta adalah : #define nama_konstanta nilai_konstanta

(10)

Nama Program : konstanta.cpp

4. Operator

Operator yang digunakan didalam pemrograman antara lain : a. Operator Aritmatika

Beberapa operator aritmatika yang dapat digunakan dalam pemrograman adalah : 1) Operator Perkalian

Simbol operator perkalian adalah tanda bintang/asterik (*). Contoh : 5*2 2) Operator Penjumlahan

Simbol operator penjumlahan adalah tanda tambah/plus (+). Contoh : 5+2 3) Operator Pengurangan

Simbol operator pengurangan adalah tanda kurang/minus (-). Contoh : 5-2 4) Operator Pembagian

Simbol operator pembagian adalah tanda garis miring (/). Contoh : 5/2 5) Operator Sisa Hasil Bagi

Simbol Operator sisa hasil bagi adalah tanda persen (%). Contoh : 5%2 Contoh Programnya sebagai berikut :

(11)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 11 Okkita Rizan - Hamida

b. Operator Relasi

Yaitu operator yang biasa digunakan untuk membandingkan dua buah nilai. Hasil dari operator ini adalah Benar (TRUE) atau Salah (FALSE). Operator-operator relasi yang dapat digunakan dalam pemrograman sebagai berikut :

 Operator sama dengan

Simbol operator yang digunakan adalah “ == ”, operator ini menyatakan bahwa nilai yang dibandingkan antara dua operan adalah sama. Contoh : a == b

 Operator tidak sama dengan

Simbol operator yang digunakan adalah “ !=”, operator ini menyatakan bahwa nilai yang dibandingkan antara dua operan tidak sama. Contoh : a != b

 Operator lebih dari

Simbol operator yang digunakan adalah “ > ”, operator ini menyatakan bahwa nilai operan pertama lebih besar dari nilai operan yang kedua. Contoh : a > b

 Operator kurang dari

Simbol operator yang digunakan adalah “ < ”, operator ini menyatakan bahwa nilai operan pertama lebih kecil dari nilai operan yang kedua. Contoh : a < b

 Operator lebih dari sama dengan

Simbol operator yang digunakan adalah “ >= ”, operator ini menyatakan bahwa nilai operan pertama lebih besar dari atau sama dengan nilai operan yang kedua. Contoh : a >= b

 Operator kurang dari sama dengan

Simbol operator yang digunakan adalah “ <= ”, operator ini menyatakan bahwa nilai operan pertama lebih kecil dari atau sama dengan nilai operan yang kedua. Contoh : a <= b

Contoh programnya sebagai berikut : Nama Program : relasi.cpp

(12)

c. Operator Logika Bolean

Yaitu operator yang biasa digunakan untuk mengaitkan dua buah ungkapan kondisi menjadi sebuah kondisi. Operator-operator logika Boolean yang biasa digunakan dalam pemrograman adalah :

 Operator dan (AND)

Simbol operator yang digunakan adalah “ && ”. Ungkapan Kondisi 1 Ungkapan Kondisi 2 Hasil Operator Logika dan B B B B S S S B S S S S B = Benar, S = Salah.

Dari table diatas dapat disimpulkan bahwa hasil operator akan BENAR jika kedua ungkapan kondisi tersebut, kedua-duanya Benar.

 Operator atau (OR)

Simbol operator yang digunakan adalah “ || ”. Ungkapan Kondisi 1 Ungkapan Kondisi 2 Hasil Operator Logika dan B B B B S B S B B S S S B = Benar, S = Salah

Dari table diatas dapat disimpulkan bahwa hasil operator akan BENAR jika kedua atau salah satu ungkapan kondisi tersebut Benar.

 Operator bukan / negasi (NOT)

Simbol operator yang digunakan adalah “!”. Operator ini berfungsi pembalik nilai logika TRUE menjadi FALSE atau nilai logika FALSE menjadi TRUE.

Ungkapan Kondisi 1 Hasil Operator Logika bukan B S S B

Misalkan ada dua bilangan, x = 5 dan y = 6. Jika dibentuk menjadi satu kondisi sehingga menjadi (x==y), maka kondisi tersebut bernilai TRUE. Bila dikenai dengan operator bukan, kondisi tersebut menjadi !(x==y), nilai kondisi sebelumnya bernilai TRUE berubah menjadi FALSE.

(13)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 13 Okkita Rizan - Hamida

Contoh programnya sebagai berikut : Nama Program : boolean.cpp

(14)

Materi III

Pencabangan atau Seleksi

Sasaran Perkuliahan :

1) Mahasiswa dapat mengetahui beberapa struktur pencabangan 2) Mahasiswa dapat memahami alur/cara kerja struktur pencabangan

3) Mahasiswa dapat menyusun algoritma menggunakan struktur pencabangan 4) Mahasiswa dapat membuat program menggunakan struktur pencabangan

Salah satu struktur alur algoritma adalah pencabangan. Pencabangan bermanfaat untuk menentukan satu dari sekian banyak pilihan yang telah disediakan. Didalam pemrograman, pencabangan akan mengakibatkan ada beberapa baris perintah yang tidak akan dikerjakan/dilewati sama sekali, karena pencabangan membentuk kelompok/blok tersendiri yang akan dikerjakan atau tidak ditentukan berdasarkan kondisinya.

Dalam pencabangan, dikenal dengan istilah kondisi (condition). Kondisi ini yang menentukan blok/kelompok dari baris perintah dikerjakan atau tidak sama sekali. Kondisi bertugas untuk membandingkan dua atau lebih operan. Operator yang digunakan untuk membandingkan operan tersebut tentu saja menggunakan operator relasi. Hasil akhir dari kondisi adalah nilai BENAR (TRUE) atau SALAH (FALSE). Contohnya sebagai berikut :

NO KONDISI NILAI

1 5 > 2 TRUE

2 5 == 2 FALSE

3 5 <= 7 TRUE

4 5 != 2 TRUE

Pencabangan dibedakan menjadi dua macam, yaitu simple conditional branch dan multiway conditional branch. Berikut adalah penjelasan dari kedua macam bentuk pencabangan tersebut.

1. Simple Conditional Branch

Control statement yang menjadi bagian simple conditional branch adalah control statement if. Control statement if terbagi menjadi 3 macam sesuai dengan keperluannya, yaitu IF-THEN, IF-THEN-ELSE dan NESTED IF.

a) IF - THEN

Ciri dari bentuk pencabangan ini hanya memiliki satu buah grup/kelompok baris perintah yang akan dikerjakan apabila kondisinya BENAR/TRUE. IF-THEN digunakan apabila hanya mempunyai satu pilihan/pilihan tunggal saja.

Bentuk Umum Instruksi IF – THEN dan Flowchart adalah sebagai berikut :

if (cond) { statement true ; } next instruction cond Statements True true false

(15)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 15 Okkita Rizan - Hamida

Urutan pelaksanaan perintah :

Periksa nilai kondisi pada pencabangan (cond = kondisi), apakah bernilai TRUE atau

FALSE .

Bila kondisi bernilai TRUE maka blok perintah (grup/kelompok baris perintah) /

statements true akan dikerjakan, setelah selesai maka langsung mengerjakan next instruction.

Bila kondisi bernilai FALSE, maka langsung meloncat mengerjakan next instruction. Berikut contoh program menggunakan IF-THEN :

Nama Program : ifthen.cpp

Output Program :

- Kondisi bernilai BENAR/TRUE.

(16)

b) IF - THEN - ELSE

Ciri dari bentuk pencabangan ini memiliki dua buah grup/kelompok baris perintah. Masing-masing grup mewakili hasil akhir dari kondisinya. Grup/kelompok baris perintah yang pertama akan dikerjakan apabila kondisi bernilai BENAR/TRUE, sedangkan grup/kelompok baris perintah yang kedua akan dikerjakan apabila kondisi bernilai

SALAH/FALSE. IF-THEN-ELSE digunakan apabila mempunyai dua pilihan.

Bentuk Umum Instruksi IF – THEN – ELSE dan Flowchart sebagai berikut : if (cond) { statement true ; } else { statement false ; } next instruction

Urutan pelaksanaan perintah :

Periksa nilai kondisi pada pencabangan ( cond = kondisi), apakah bernilai TRUE atau FALSE .

Bila kondisi bernilai TRUE maka blok perintah (grup/kelompok baris perintah) /

statements true akan dikerjakan, setelah selesai maka langsung mengerjakan next instruction.

Bila kondisi bernilai FALSE maka blok perintah (grup/kelompok baris perintah)

/ statements false akan dikerjakan, setelah selesai maka langsung mengerjakan next instruction.

Berikut contoh program menggunakan IF-THEN-ELSE : Nama Program : ifthenelse.cpp

cond Statements True true false next instruction Statements False

(17)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 17 Okkita Rizan - Hamida

Output Program :

- Kondisi bernilai BENAR/TRUE

- Kondisi bernilai SALAH/FALSE

c) NESTED IF

Disebut juga dengan if bersarang/pencabangan bersarang. NESTED IF digunakan apabila pilihan lebih dari dua. Bentuk pencabangan ini memiliki lebih dari dua grup/kelompok baris perintah dan kondisi lebih dari satu. Tidak ada bentuk yang baku dari NESTED IF, karena NESTED IF dibentuk menggunakan kombinasi antara IF-THEN dan IF-THEN-ELSE. Berikut adalah contoh dari bentuk-bentuk NESTED IF dan flowchartnya :

 if (cond1) { if (cond2) { S1 } } else { S2 }  if (cond1) { if (cond2) { S1 } else { S2 } } else { S3 } cond1 S1 true false S3 cond2 true false S2 cond1 S1 true false S2 cond2 true false

(18)

 if (cond1) { S1 if (cond2) { S2 } S3 } else { if (cond3) { S4 } else { S5 } }  if (cond1) { S1 if (cond2) { S2 } else { S3 } } else { if (cond3) { S4 } else { S5 } S6 } cond1 S4 true false S1 cond3 true false S5 cond2 S2 true false S3 cond1 S4 true false S1 cond3 true false S5 cond2 S2 true false S3 S6

(19)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 19 Okkita Rizan - Hamida

 if (cond1) { if (cond2) { if (cond3) { if (cond4) { S1 } } } }  if (cond1) { S1 } else { if (cond2) { S2 } else { if (cond3) { S3 } else { if (cond4) { S4 } else { S5 } } } } cond1 true false cond2 true cond3 true cond4 S1 true false false false cond1 true cond2 true cond3 true cond4 S1 true false false false false S2 S3 S4 S5

(20)

Berikut contoh program menggunakan NESTED IF dengan 3 pilihan/blok perintah: Contoh Program : nestedif.cpp

Output Program :

- Pilihan dengan grup/kelompok baris perintah yang pertama

- Pilihan dengan grup/kelompok baris perintah yang kedua

(21)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 21 Okkita Rizan - Hamida

2. Multiway Conditional Branch

Control statement yang menjadi bagian multiway conditional branch adalah control statement switch case. Switch case dapat digunakan untuk satu, dua atau lebih dari dua pilihan. Khusus untuk pilihan dari dua, switch case sama dengan nested if, tetapi ada beberapa perbedaan dari kedua control statement tersebut diantaranya :

a. Pernyataan switch berbeda dengan pernyataan if dimana switch hanya dapat menguji kesamaan, sedangkan pernyataan if dapat melakukan evaluasi sembarang tipe ekspresi Boolean. Dengan demikian switch terlihat seperti hanya mencocokkan diantara nilai-nilai ekspresi dan konstanta-konstanta case.

b. Tidak ada konstanta case di blok case yang sama dapat mempunyai nilai yang identik. c. Pernyataan switch biasanya lebih efisien dibanding if bersarang yang dalam.

Bentuk Umum Control Statement Switch Case :

switch(nama_variabel) { case nilai_variabel_1 : statement_1 ; break ; case nilai_variabel_2 : statement_2 ; break ; ……….. case nilai_variabel_n : statement_n ; break ; default : statement_default ; break ; }

Perintah break berfungsi untuk keluar dari case. Jika break ditiadakan, maka akan dilanjutkan dengan pelaksanaan dibawahnya sampai selesai. Perintah break merupakan optional, tergantung kebutuhan program. Adakalanya diperlukan untuk menjalankan case sekaligus, hal ini berarti perintah break tidak digunakan.

(22)

Nama Program : switchcase.cpp

(23)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 23 Okkita Rizan - Hamida

Materi IV

Perulangan atau Iterasi

Sasaran Perkuliahan :

1) Mahasiswa dapat mengetahui beberapa struktur perulangan 2) Mahasiswa dapat memahami alur/cara kerja struktur perulangan

3) Mahasiswa dapat menyusun algoritma menggunakan struktur perulangan 4) Mahasiswa dapat membuat program menggunakan struktur perulangan

Salah satu struktur alur algoritma adalah perulangan. Persamaan perulangan dan pencabangan adalah sama-sama membentuk grup/kelompok baris perintah yang akan dikerjakan atau tidak berdasarkan hasil akhir kondisinya. Perbedaannya struktur perulangan akan mengerjakan grup/kelompok baris perintah secara berulang-ulang selama kondisi masih terpenuhi. Dalam bahasa pemrograman struktur alur algoritma ini biasa disebut dengan looping.

Perulangan mempunyai beberapa bagian yang harus dipenuhi, antara lain : a. Inisialisasi

Inisialisasi adalah tahap persiapan membuat kondisi awal sebelum melakukan perulangan, misalnya mengisi variabel dengan nilai awal. Tahap ini dilakukan sebelum memasuki bagian perulangan.

b. Proses

Tahap proses terjadi didalam bagian perulangan yaitu berisi semua proses yang perlu dilakukan secara berulang-ulang.

c. Iterasi

Iterasi terjadi di dalam perulangan yakni merupakan kondisi pertambahan agar perulangan dapat terus berjalan.

d. Terminasi

Terminasi adalah kondisi berhenti dari perulangan, kondisi berhenti sangat penting dalam perulangan agar perulangan dapat berhenti, tidak menjadi perulangan yang tanpa henti. Bentuk dasar dari struktur perulangan ada 3 macam yaitu : for, while dan do while.

1. For

Bentuk Umum Perulangan For :

for (init ; cond; chng cond) {

Statements ; }

Next instruction Prinsip Kerja Perulangan For :

a. Perintah init merupakan memberi nilai awal kondisi (inisialisasi). Perlu mempersiapkan sebuah variabel untuk menampung nilai awal kondisi. b. Kemudian dilanjutkan dengan memeriksa kondisi pada cond, jika

bernilai BENAR/TRUE maka Statements akan dikerjakan. Setelah selesai baris perintah melaksanakan chng cond, yang berfungsi untuk mengubah nilai variabel. Kemudian kembali ke point b memeriksa kondisi dan seterusnya.

c. Jika kondisi sudah bernilai SALAH/FALSE, maka perulangan akan selesai dan melaksanakan baris perintah berikutnya (next instruction).

Initialization (init) Condition (cond) Statements Change Condition (chng cond) false true Next Instruction

(24)

Adapun contoh program menggunakan for adalah sebagai berikut : Nama Program : for.cpp

Penjelasan Program :

- i=1, merupakan proses init(initialization), variabel dengan nama i diisi dengan angka 1. - i<=5, merupakan cond(condition), kondisi akan bernilai TRUE selama nilai variabel i

kurang atau sama dengan 5.

- i++, merupakan chng cond (change condition), i++ sama artinya dengan i=i+1. Dengan perintah tersebut nilai variabel i akan berubah secara berurutan dari 1 s.d 5. - Output program menunjukkan perulangan akan dilakukan selama 5 kali mengikuti status

kondisi dan status change condition.

2. While

Prinsip Kerja struktur While sama dengan struktur For. Perbedaannya pada bentuk strukturnya.

Bentuk umum struktur while : init ;

while (cond) {

Statements ; }

Contoh programnya sebagai berikut : Nama Program : while.cpp

(25)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 25 Okkita Rizan - Hamida

3. Do..While

Nama lain dari struktur do..while adalah repeat until. Perbedaan struktur ini dengan struktur looping sebelumnya terletak pada bentuk strukturnya dan cara kerjanya. Yang menjadi ciri utama dari do..while, grup/kelompok baris perintah perulangan paling tidak dikerjakan satu kali walaupun kondisi perulangan bernilai SALAH/FALSE. Grup/kelompok baris perintah dikerjakan terlebih dahulu sebelum memeriksa kondisinya.

Bentuk umum struktur do..while sebagai berikut :

initialization do { Statements ; Change Condition ; } while (condition) ; next Instruction

Prinsip Kerja Struktur Perulangan Do..While :

a. Initialization bermaksud memberi nilai awal kondisi. Perlu mempersiapkan sebuah variabel untuk menampung nilai awal kondisi.

b. Kemudian dilanjutkan dengan pengerjaan Statements

perulangan dan diteruskan dengan melaksanakan perintah untuk mengubah nilai kondisi (Change Condition).

c. Periksa kondisi perulangan (condition). Jika kondisi bernilai

BENAR/TRUE, maka kembali mengerjakan langkah b. Jika

kondisi bernilai SALAH/FALSE maka perulangan dihentikan dan melaksanakan perintah berikutnya (Next Instruction).

Contoh programnya sebagai berikut : Nama Program : dowhile.cpp

Initialization Condition Statements Change Condition false true Next Instruction

(26)

4. Nested Loop

Disebut juga dengan perulangan bersarang. Struktur ini membentuk perulangan yang sangat dalam. Struktur ini kadang kala diperlukan untuk mengatasi persoalan pemrograman yang tidak bisa hanya mengandalkan perulangan tunggal saja. Struktur ini merupakan kombinasi dari struktur looping yang telah diuraikan diatas.

Nested Loop mempunyai istilah Inner Loop (Perulangan bagian dalam) dan Outer Loop (Perulangan bagian luar).

#include <iostream.h> #include <conio.h> void main ( ) { int I, J ; I = 1; while ( I <= 3 ) { J = 1; while ( J <= 5 ) { - - - - J++; } I++; } }

Salah satu manfaat dari Nested Loop adalah dapat membentuk kombinasi angka seperti contoh program sebagai berikut :

Inner Loop (Loop Bagian Dalam)

Outer Loop (Loop Bagian Luar)

J = 1 I <= 3 I++ I = 1 false true I <= 5 Inner Loop J++ false true Outer Loop

(27)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 27 Okkita Rizan - Hamida

Nama Program : nestedloop.cpp

Output Program :

Penjelasan Program :

- Output program menunjukkan terbentuknya sebanyak 5 baris dengan 5 kolom. - 5 Baris terbentuk dari outer loop / perulangan bagian luar.

- 5 Kolom terbentuk dari inner loop / perulangan bagian dalam.

(28)

Materi V

Function dan Procedure

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami dan membuat program mengenai function/fungsi 2) Mahasiswa dapat memahami dan membuat program mengenai procedure/prosedur

Function dan procedure disebut juga sebagai sub program. Sub program ini kadang kala diperlukan dalam pembuatan program untuk memenuhi kebutuhan pengguna. Sub program adalah pengelompokkan beberapa baris perintah tertentu diluar dari program utamanya. Disebut dengan sub program, karena sub program tidak bisa dipisahkan dari program utamanya walaupun letaknya terpisah dari program utamanya. Dalam bahasa C++, yang menjadi bagian program utama adalah seluruh perintah yang ada di dalam void main().

Adapun perbedaan antara function dengan procedure adalah fungsi menghasilkan sebuah nilai keluaran sedangkan prosedur tidak menghasilkan nilai keluaran. Cara menjalankan function dan procedure dengan menuliskan nama function atau procedure di program utamanya. Nama function atau procedure harus dideklarasikan terlebih dahulu diatas program utamanya.

1. Function

Bentuk umum dari function adalah :

tipe_data nama_fungsi (tipe_data nama_variabel_masukan) {

statement ;

return variabel_keluaran }

Contoh programnya sebagai berikut : Nama Program : function.cpp

Sub Program / FUNCTION

Perintah memanggil

(29)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 29 Okkita Rizan - Hamida

2. Procedure

Procedure memiliki dua bentuk, yaitu procedure tanpa parameter dan procedure dengan parameter.

a) Procedure tanpa parameter

Bentuk umumnya sebagai berikut : void nama_prosedur(void) {

statement ; }

Contoh programnya sebagai berikut : Nama program : procedure1.cpp

b) Procedure dengan parameter Bentuk umumnya sebagai berikut :

void nama_prosedur(tipe_data variabel_input, tipe_data variabel_inputn) {

statement ; }

Contoh programnya sebagai berikut :

Sub Program / PROCEDURE Perintah

memanggil procedure

(30)

Nama Program : procedure2.cpp Sub Program / PROCEDURE Perintah memanggil procedure

(31)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 31 Okkita Rizan - Hamida

Materi VI

Array

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami mengenai array

2) Mahasiswa dapat memahami perbedaan array 1 dimensi dan 2 dimensi 3) Mahasiswa dapat membuat program menggunakan array

Array atau disebut juga dengan larik, dapat digambarkan hampir sama dengan tabel. Array dapat juga diartikan sebagai sesuatu yang berbaris-baris atau berderet-deret. Dalam bahasa pemrograman, array adalah variabel sejenis yang berderet-deret sedemikian rupa sehingga alamatnya saling bersambung atau bersebelahan/berdampingan (contiguous). Pada dasarnya, fungsi array sama dengan varabel yaitu untuk menampung nilai. Perbedaan array dengan variabel adalah variabel hanya dapat menampung satu nilai saja pada satu waktu, variabel ini disebut juga dengan variabel tunggal sedangkan array merupakan variabel yang dapat menampung banyak nilai / data dengan tipe data yang sejenis dalam satu waktu. Nilai pada array diakses berdasarkan indeks yang tersusun secara berurutan. Array dapat berupa satu dimensi, dua dimensi, tiga dimensi ataupun banyak dimensi.

1. ARRAY SATU DIMENSI

Array satu dimensi adalah array yang memiliki satu kolom dengan banyak baris, atau satu baris dengan banyak kolom, tergantung bagaimana cara mengilustrasikannya dalam pikiran. Untuk lebih jelasnya array satu dimensi dapat digambarkan sebagai berikut :

Array satu dimensi disebut juga dengan vector karena hanya mempunyai satu arah saja. Bentuk Umum Deklarasi Array Satu Dimensi :

tipe_data nama_array [jumlah_indeks] ;

N1 N2 N3 N4 N5 N1 N2 N3 N4 N5 Indeks : 0 1 2 3 4 Indeks : 0 1 2 3 4

(32)

Aturan pemberian nama array sama halnya dengan aturan pemberian nama variabel. Lihat di bab terdahulu.

Contoh program dengan array 1 dimensi sebagai berikut : Nama Program : array1d.cpp

2. ARRAY DUA DIMENSI

Array dua dimensi adalah array yang memiliki dua atau lebih kolom dengan banyak baris, atau dua atau lebih baris dengan banyak kolom, bergantung bagaimana mengilustrasikannya didalam pikiran. Array dua dimensi juga dapat dipandang sebagai gabungan dari dua atau beberapa array satu dimensi. Array Dua Dimensi diilustrasikan sebagai berikut :

N[0,0] N[0,1] N[0,2] N[0,3] N[0,4] N[1,0] N[1,1] N[1,2] N[1,3] N[1,4] N[2,0] N[2,1] N[2,2] N[2,3] N[2,4] Indeks : 0 1 2 3 4 0 1 2

(33)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 33 Okkita Rizan - Hamida

Dari contoh ilustrasi diatas, Array Dua Dimensi tersebut mempunyai 3 baris dan 5 kolom. Setiap elemen mempunyai dua buah indeks berdasarkan perpotongan antara indeks baris dan indeks kolom. Karena mempunyai baris dan kolom Array Dua Dimensi disebut juga dengan matriks.

Bentuk Umum Deklarasi Array Dua Dimensi :

tipe_data nama_array [jml_indeks_baris] [jml_indeks_kolom] ;

Aturan pemberian nama array sama halnya dengan aturan pemberian nama variabel. Lihat di bab terdahulu.

Contoh Program dengan array 2 dimensi sebagai berikut : Nama Program : array2d.cpp

(34)

Materi VII

Pengantar Struktur Data

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami mengenai struktur data

2) Mahasiswa dapat memahami istilah-istilah yang digunakan pada struktur data 3) Mahasiswa dapat memahami macam-macam Struktur Data

Dalam istilah komputer, struktur data diartikan sebagai cara penyimpanan, penyusunan dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien.

Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom-kolom untuk data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk pengolahan database (misalnya untuk keperluan data keuangan) atau untuk pengolah kata (word

processor) yang kolomnya berubah secara dinamis. Contoh struktur data dapat dilihat pada

berkas-berkas lembar-sebar (spreadsheet), pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.

Struktur data dibedakan menjadi dua macam yaitu struktur data sederhana dan struktur data majemuk. Contoh dari struktur data sederhana adalah array dan record. Struktur data majemuk terdiri dari Linier dan Non Linier. Anggota dari Linier adalah Stack, Queue, List dan Multilist, sedangkan anggota dari Non Linier adalah Pohon Biner (tree) dan Graph. Dari beberapa macam bentuk struktur data tersebut akan diuraikan lebih lanjut pada materi-materi berikutnya.

(35)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 35 Okkita Rizan - Hamida

Materi VIII

Struktur Data STACK

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami mengenai stack

2) Mahasiswa dapat memahami istilah-istilah yang digunakan pada stack 3) Mahasiswa dapat memahami macam-macam stack

4) Mahasiswa dapat membuat program menggunakan stack

Stack terbagi kedalam dua macam, yaitu Single Stack dan Double Stack. 1. Single Stack

Single Stack disebut juga dengan tumpukan. Struktur data single stack ini dapat diilustrasikan seperti menyusun buku diatas meja. Seperti gambar berikut :

Dalam struktur stack dikenal dengan istilah PUSH, dan POP.

- PUSH adalah istilah yang digunakan untuk memasukkan, menyimpan, menulis atau menginsert data kedalam stack.

- POP adalah istilah yang digunakan untuk mengambil, membaca, mengeluarkan atau mendelete data dari stack.

- TOP adalah menunjukkan posisi elemen terakhir dari sebuah stack.

Prinsip yang digunakan pada stack adalah L I F O atau kepanjangan dari Last in First Out. Artinya data yang terakhir masuk kedalam stack, maka data tersebut akan pertama kali dikeluarkan dari stack.

Pada pemrograman, ilustrasi sebuah stack dapat dilihat dari gambar berikut yang menggunakan array 1 dimensi :

(36)

Dari gambar diatas dapat diketahui bahwa telah disiapkan sebuah array dengan nama S[]. Array tersebut mempunyai indeks sampai dengan 10. Artinya Array tersebut dapat menampung maksimal sampai dengan 10 data. Cara memasukkan dan mengambil data dari array tersebut menggunakan struktur Single Stack. Top menunjukkan posisi paling akhir dari elemen array yang mempunyai isi. Yang dimaksud dengan posisi terakhir adalah data yang dimasukkan terakhir kali, bukan yang pertama kali dimasukkan ke dalam array.

Beberapa kondisi yang dipunyai oleh single stack adalah sebagai berikut : a) Stack Kosong (IsEmpty)

Ciri stack dalam keadaan kosong adalah posisi Top kurang dari nol. Kondisi ini dapat dikatakan sebagai proses awal dari sebuah single stack. Dalam algoritma ciri stack kosong adalah :

Top = - 1

Stack kosong diilustrasikan sebagai berikut :

b) Stack Penuh (IsFull)

Ciri stack sudah dalam keadaan penuh adalah posisi Top berada pada indeks terakhir dari stack. Dalam algoritma ciri stack penuh adalah :

Top = n - 1

Stack penuh diilustrasikan sebagai berikut :

c) Stack dapat diisi

Ciri stack masih bisa diisi adalah posisi Top tidak berada pada indeks terakhir dari stack. Dalam Algoritma ciri stack masih bisa diisi adalah :

Top < n - 1

(37)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 37 Okkita Rizan - Hamida

Atau :

d) Stack punya isi

Ciri stack masih mempunyai isi adalah posisi TOP tidak kurang dari nol. Dalam algoritma ciri stack masih mempunyai isi adalah :

Top > -1

Stack punya isi diilustrasikan sebagai berikut :

Atau :

Dari keempat kondisi pada stack tersebut mempengaruhi proses PUSH dan POP pada stack. - Pada proses PUSH, stack dapat disi apabila kondisi stack kosong dan bisa diisi.

Algoritma untuk proses PUSH adalah :

Top = Top + 1 ; S[Top] = X;

Pada saat stack penuh, maka proses PUSH tidak dapat dilakukan. Algoritma lengkap untuk proses PUSH adalah :

if ( Top < n-1 ) { Top = Top + 1; S[Top] = X; } else

(38)

Atau :

if ( Top == n-1 )

{ cout << “Stack Penuh”; else

{

Top = Top + 1; S[Top] = X; }

- Pada proses POP, stack dapat diambil isinya apabila kondisi stack penuh dan stack

punya isi. Algoritma untuk proses POP adalah :

X = S[Top] ; Top = Top - 1 ;

Pada saat stack kosong, maka proses POP tidak dapat dilakukan. Algoritma lengkap untuk proses POP adalah :

if ( Top < -1 ) { X = S[Top]; Top = Top - 1; } else

{ cout << “Stack Kosong”; }

Atau :

if ( Top == -1 )

{ cout << “Stack Kosong”; else

{

X = S[Top]; Top = Top - 1; }

(39)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 39 Okkita Rizan - Hamida

Nama Program : singlestack.cpp

Penjelasan Program :

- Int S[n], proses deklarasi sebuah array satu dimensi dengan nama S[] dan bertipe data integer. Untuk indeks array tersebut menggunakan variabel n yang sudah dijadikan konstanta pada bagian #define n 7.

- Top = -1, merupakan proses inisialisasi awal pada stack. Perintah tersebut menandakan juga stack masih dalam keadaan kosong.

Output Program :

(40)

2. Double Stack

Double stack dapat diilustrasikan sebagai gabungan dua buah stack menggunakan array yang sama. Prinsip pada double stack sama dengan single stack yaitu LIFO (Last In First

Out) baik untuk stack yang pertama maupun stack yang kedua pada double stack tersebut.

Adapun ilustrasi dari double stack seperti gambar berikut ini :

Dari gambar tersebut dapat diketahui bahwa, stack mempunyai dua buah pointer TOP yaitu

Top1 dan Top2. Top1 mewakili stack yang pertama. Arah pergerakannya dari kiri ke kanan

(dari ilustrasi gambar diatas). Top2 mewakili stack yang kedua. Arah pergerakannya dari kanan ke kiri (dari ilustrasi gambar diatas).

Beberapa kondisi yang dimiliki oleh double stack adalah sebagai berikut : a) Double stack kosong (IsEmpty)

Ciri dari double stack kosong adalah posisi dari Top1 kurang dari nol dan Top2 berada di indeks trakhir dari stack. Kondisi ini dapat dikatakan sebagai proses awal (inisialisasi) dari sebuah double stack. Dalam Algoritma ciri double stack kosong adalah :

Top1 = - 1

Top2 = n

Double stack kosong diilustrasikan sebagai berikut :

b) Stack Penuh (IsFull)

Ciri double stack penuh apabila posisi Top1 dengan Top2 betul-betul bersebelahan atau dengan kata lain apabila Top2 dikurangi dengan Top1 hasilnya adalah 1. Dalam algoritma ciri double stack penuh adalah :

Top2 - Top1 = 1

Double stack penuh diilustrasikan sebagai berikut :

(41)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 41 Okkita Rizan - Hamida

c) Stack dapat diisi

Ciri stack masih dapat diisi apabila posisi Top1 dengan Top2 tidak bersebelahan, atau apabila Top2 dikurangi dengan Top1 hasilnya tidak sama dengan 1 (satu), tepatnya lebih besar dari 1 (satu). Dalam algoritma ciri stack masih bisa diisi adalah :

Top2 - Top1 > 1

Double stack dapat diisi diilustrasikan sebagai berikut :

Atau : Atau : Atau : Top1 Top2 Top1 Top2 Top1 Top2 Top1 Top2 Top1 Top2

(42)

d) Stack punya isi

Ciri double stack masih mempunyai isi pada double stack memiliki beberapa ciri yaitu : - Top1 tidak kurang dari nol dan Top2 sama dengan indeks.

- Top1 sama dengan nol dan Top2 tidak sama dengan indeks. - Top1 tidak kurang dari nol dan Top2 tidak sama dengan indeks. Dalam algoritma ciri stack masih mempunyai isi adalah :

Top1 > -1 Top2 < n

Double stack punya isi diilustrasikan sebagai berikut :

Atau : Atau : Atau : Atau : Atau : Top1 Top2 Top1 Top2 Top2 Top1 Top1 Top2 Top1 Top2 Top1 Top2

(43)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 43 Okkita Rizan - Hamida

Sama seperti single stack, kondisi tersebut juga mempengaruhi proses PUSH dan POP pada double stack.

a) PUSH

Proses PUSH dapat dilakukan selama stack dalam kondisi kosong atau masih dapat diisi. Algoritma dasar proses PUSH pada stack yang pertama adalah :

Top1 = Top1 + 1 ; S[Top1] = X;

Algoritma dasar proses PUSH pada stack yang kedua adalah :

Top2 = Top2 - 1 ; S[Top2] = X;

Proses PUSH tidak dapat dilakukan apabila stack dalam kondisi penuh. Algoritma lengkap untuk proses PUSH pada double stack adalah :

- Algoritma lengkap proses PUSH untuk stack yang pertama adalah

if ( Top2 - Top1 >1 ) { Top1 = Top1 + 1; S[Top1] = X; } else

{ cout << “Stack1 Penuh”; }

Atau :

if ( Top2 - Top1 == 1 ) {

cout << “Stack1 Penuh”; } else { Top1 = Top1 + 1; S[Top1] = X; }

(44)

- Algoritma lengkap proses PUSH untuk stack yang kedua adalah if ( Top2 - Top1 >1 ) { Top2 = Top2 - 1; S[Top2] = X; } else

{ cout << “Stack2 Penuh”; }

Atau :

if ( Top2 - Top1 == 1 ) {

cout << “Stack2 Penuh”; } else { Top2 = Top2 - 1; S[Top2] = X; } b) POP

Proses POP dapat dilakukan selama stack dalam kondisi penuh atau masih mempunyai isi. Algoritma dasar proses POP pada stack yang pertama adalah :

X = S[Top1] ; Top1 = Top1 - 1 ;

Algoritma dasar proses POP pada stack yang kedua adalah :

X = S[Top2] ; Top2 = Top2 + 1 ;

(45)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 45 Okkita Rizan - Hamida

Proses POP tidak dapat dilakukan apabila stack dalam kondisi kosong. Algoritma lengkap untuk proses POP pada double stack adalah :

- Algoritma lengkap untuk proses POP stack yang pertama adalah :

if ( Top1 < -1 ) { X = S[Top1]; Top1 = Top1 - 1; } else {

cout << “Stack1 Kosong”; }

Atau :

if ( Top1 == -1 )

{ cout << “Stack1 Kosong”; else

{

X = S[Top1];

Top1 = Top1 - 1; }

- Algoritma lengkap proses POP stack yang kedua adalah :

if ( Top2 < n ) { X = S[Top2]; Top2 = Top2 + 1; } else {

cout << “Stack2 Kosong”; }

Atau :

if ( Top2 == n )

{ cout << “Stack2 Kosong”; else

{

X = S[Top2];

Top2 = Top2 + 1; }

(46)

Contoh program double stack adalah sebagai berikut : Nama Program : doublestack.cpp

(47)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 47 Okkita Rizan - Hamida

Penjelasan Program :

- Double stack dibuat dengan nama S[] dengan elemen sebanyak 10.

- Proses PUSH pada stack yang pertama hanya dibatasi sebanyak 5 kali. Pada program algoritmanya : Top2 - Top1 > 1 && Top1 < 4.

- Proses PUSH pada stack yang kedua dilakukan selama stack belum penuh. Output Program :

(48)

Materi IX

Struktur Data QUEUE

Sasaran Perkuliahan :

1) Mahasiswa dapat memahami mengenai queue

2) Mahasiswa dapat memahami istilah-istilah yang digunakan pada queue 3) Mahasiswa dapat memahami macam-macam queue

4) Mahasiswa dapat membuat program menggunakan prinsip queue

Queue, apabila diartikan secara harfiah adalah antrian. Implementasi dalam queue dalam kehidupan sehari-hari seperti mengantri pembelian karcis pada loket penjualan karcis. Dari sebuah literatur pengertian queue adalah : “A Queue is an ordered collection of items into which new items may be inserted at one end (called the rear of the queue) and from which items may be deleted at one end (called the front of the queue)”.( Yedidyah L, Moshe J. A., and Aaron M. Tenenbaum; Data Structures Using C and C++).

Prinsip kerja dari queue adalah FIFO (First In First Out) atau FIFS (First In First Serve). Secara harfiahnya, prinsip kerja queue ini seperti pada loket antrian, seseorang yang pertama kali mengantri, maka orang tersebut yang akan pertama kali keluar dari antrian. Beberapa istilah yang digunakan pada queue adalah :

1. FRONT

Front menunjukkan posisi antrian pertama / depan. Untuk memudahkan penulisan materi ini Front selanjutnya akan ditulis menjadi F.

2. REAR

Rear menunjukkan posisi antrian terakhir / belakang. Untuk memudahkan penulisan materi ini Rear selanjutnya akan ditulis menjadi R.

3. ENQUEUE

EnQueue menunjukkan item yang masuk kedalam antrian. 4. DEQUEUE

DeQueue menunjukkan item yang keluar dari antrian.

Struktur queue terdiri dari 3 macam. Struktur ini akan diimplementasikan dengan array 1 dimensi. Adapun strukturnya adalah :

- Linear Queue - Circular Queue

(49)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 49 Okkita Rizan - Hamida

1. LINEAR QUEUE

Linear Queue disebut juga dengan antrian lurus. Struktur ini seakan-akan membentuk sebuah antrian lurus yang hanya memiliki satu pintu masuk dan satu pintu keluar. Ilustrasi dari struktur linear queue ini adalah sebagai berikut :

Seperti yang telah disebutkan diatas prinsip kerja dari queue adalah FIFO (First In First

Out). Dari contoh gambar, F menunjukkan antran pertama dan R menunjukkan antrian

terakhir. Apabila ada data yang akan masuk (insert), maka akan ditempatkan pada indeks

ke-4 dan posisi R akan bergeser ke indeks ke-4, begitu seterusnya sampai pada indeks yang

terakhir dan antrian penuh. Apabila ada data yang akan keluar (delete), maka antrian yang akan pertama kali keluar adalah A dan posisi F akan bergeser menunjuk B, begitu seterusnya sampai antrian kosong.

Beberapa kondisi pada Linear Queue adalah : a) Queue Kosong

Ciri dari Linear Queue kosong adalah posisi F (Front) persis berada di depan posisi

R (Rear). Dalam algoritma ciri Linear Queue kosong adalah :

F = R + 1

Kondisi kosong juga merupakan salah satu ciri dari proses awal (inisialisasi) pada Linear Queue, walaupun kondisi kosong belum tentu merupakan proses awal dari Linear Queue. Algoritma proses awal (inisialisasi) dari Linear Queue adalah :

F = 0

R = -1

Linear Queue kosong diilustrasikan sebagai berikut :

(50)

Bentuk lain dari linear queue kosong adalah sebagai berikut :

Atau :

b) Queue Penuh

Ciri dari Linear Queue penuh adalah posisi Rear (R) berada pada indeks terakhir dari antrian (queue). Dalam algoritma ciri Linear Queue penuh adalah :

R = n - 1

Linear queue penuh diilustrasikan sebagai berikut :

Atau :

c) Queue dapat diisi

Ciri dari linear queue masih dapat diisi ke antrian adalah posisi Rear (R) tidak berada pada indeks terakhir dari antrian. Dalam algoritma ciri Linear Queue masih dapat diisi adalah :

R < n - 1

(51)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 51 Okkita Rizan - Hamida

Atau :

Atau :

Atau :

Atau :

d) Queue punya isi

Ciri Linear Queue masih mempunyai isi pada antrian adalah posisi F (Front) berada dibelakang R (Rear).

F < R + 1

Linear Queue masih mempunyai isi diilustrasikan sebagai berikut :

Atau :

(52)

Atau :

Kondisi pada Linear Queue mempengaruhi proses PUSH dan POP pada Linear Queue tersebut. a) PUSH

Proses PUSH dapat dilakukan selama Linear Queue dalam kondisi kosong atau masih dapat diisi.

Algoritma dasar proses PUSH pada Linear Queue adalah :

R = R + 1 Q[R] = X

Proses PUSH tidak dapat dilakukan apabila Linear Queue dalam kondisi penuh. Algoritma lengkap proses PUSH pada Linear Queue adalah :

if ( R < n-1 ) { R = R + 1; Q[R] = X; } else {

cout << “Antrian Penuh”; }

Atau :

if ( R == n-1 )

{

cout << “Antrian Penuh”;

} else { R = R + 1; Q[R] = X; }

(53)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 53 Okkita Rizan - Hamida

b) POP

Proses POP dapat dilakukan selama linear queue dalam kondisi penuh atau masih mempunyai isi pada antrian. Algoritma dasar proses POP pada Linear Queue adalah :

X = Q[F] ; F = F + 1; if ( F == n ) { F = 0; R = -1; }

Proses POP tidak dapat dilakukan apabila Linear Queue dalam kondisi kosong. Algoritma lengkap untuk proses POP pada Linear Queue adalah :

if ( F < R+1 ) { X = Q[F] ; F = F + 1; if ( F == n ) { F = 0; R = -1; } } else {

cout << “Antrian Kosong”;

}

Atau :

if ( F == R+1 ) {

cout << “Antrian Kosong”;

} else { X = Q[F] ; F = F + 1; if ( F == n ) { F = 0; R = -1; } }

(54)

Contoh Program menggunakan prinsip Linear Queue adalah sebagai berikut : Nama Program : linearqueue.cpp

(55)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 55 Okkita Rizan - Hamida

2. CIRCULAR QUEUE

Circular Queue dapat diartikan sebagai antrian melingkar. Pada Linear Queue, apabila data yang sudah dimasukkan (PUSH) pada sebuah antrian dan datanya dikeluarkan (POP) pada indeks antrian tersebut, maka data baru tidak dapat dimasukkan (PUSH) kembali ke indeks antrian tersebut sebelum Linear Queue di reset atau dijadikan kedalam kondisi kosong/awal setelah antrian tidak mempunyai data lagi.

Ilustrasinya sebagai berikut :

Dari contoh gambar tersebut, dapat diketahui bahwa kondisi queue sudah penuh karena posisi

R (Rear) berada pada indeks terakhir dari antrian. Sehingga queue tidak dapat diisi lagi

walaupun antrian dari indeks ke-0 sampai dengan ke-5 masih kosong.

Untuk mengatasi hal tersebut dapat dilakukan dengan cara memindahkan posisi R (Rear) ke

indeks ke-0, sehingga data dapat diisi kembali sampai antrian benar-benar penuh. Konsep

seperti ini yang disebut dengan antrian melingkar atau circular queue. Ilustrasinya dari contoh gambar diatas menjadi sebagai berikut :

(56)

Maka ilustrasi Circular Queuenya seperti gambar berikut :

Atau :

Algoritma memindahkan posisi R (Rear) pada circular queue sebagai berikut :

if(R == n) { R = 0; } else { R = R + 1; } atau R = R + 1; if(R == n+1) { R = 0; }

Selain dengan cara diatas, algoritma untuk memindahkan posisi R (Rear) dapat dilakukan dengan memanfaatkan operator modulus (%) atau sisa hasil pembagian dan Library Function

fmod().

R = (R+1) % n atau R = fmod(R+1, n)

Berbeda dengan linear queue, selain menggunakan F (Front) dan R (Rear) didalam antriannya, circular queue menggunakan Counter untuk menentukan jumlah antrian yang masuk dan keluar sekaligus menentukan kondisi circular queuenya. Adapun beberapa kondisi pada circular queue adalah :

a) Queue Kosong

Ciri dari Circular queue kosong adalah apabila Counter bernilai 0. Maka Algoritma circular queue kosong adalah :

(57)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 57 Okkita Rizan - Hamida

Counter = 0;

Sama seperti Linear Queue, kondisi kosong juga merupakan salah satu ciri proses awal (inisialisasi) pada circular queue, walaupun kondisi kosong belum tentu merupakan proses awal dari circular queue. Algoritma proses awal (inisialisasi) dari Circular queue adalah :

F = 0; R = -1;

Counter = 0;

Ilustrasi Circular Queue dalam kondisi kosong adalah sebagai berikut :

Atau :

b) Queue Penuh

Ciri dari Circular queue penuh pada antrian adalah apabila counter bernilai sama dengan indeks antrian. Maka algoritma circular queue penuh adalah :

Counter = n;

(58)

c) Queue dapat diisi

Ciri dari circular queue masih dapat diisi pada antrian apabila Counter tidak bernilai sama dengan indeks antrian. Maka algoritma circular queue masih dapat diisi adalah :

Counter < n

Ilustrasi circular queue dalam kondisi dapat diisi dapat dilihat pada beberapa gambar sebagai berikut : 1) 2) 3) 4) 5) 6)

(59)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 59 Okkita Rizan - Hamida

d) Queue punya isi

Ciri dari circular queue masih mempunyai isi pada antrian apabila Counter tidak bernilai 0. Maka algoritma circular queue masih mempunyai isi pada antrian adalah :

Counter > 0

Ilustrasi circular queue masih mempunyai isi pada antrian dapat dilihat pada beberapa gambar sebagai berikut :

Kondisi pada Circular Queue mempengaruhi proses PUSH dan POP pada Circular Queue tersebut.

a) PUSH

Proses PUSH dapat dilakukan selama Circular Queue dalam kondisi kosong atau masih dapat diisi.

Algoritma dasar proses PUSH pada Circular Queue adalah :

R = (R+1) % n; Q[R] = X; Counter++;

Counter++ sama artinya dengan Counter=Counter+1.

1)

2)

3)

4)

(60)

Proses PUSH tidak dapat dilakukan apabila Circular Queue dalam kondisi penuh. Algoritma lengkap proses PUSH pada Circular Queue adalah :

if ( Counter < n) { R = (R+1) % n; Q[R] = X; Counter++; } else {

cout << “Antrian Penuh”;

}

Atau :

if ( Counter == n)

{

cout << “Antrian Penuh”;

} else { R = (R+1) % n; Q[R] = X; Counter++; } b) POP

Proses POP dapat dilakukan selama circular queue dalam kondisi penuh atau masih mempunyai isi pada antrian. Algoritma dasar proses POP pada Circular Queue adalah :

X = Q[F]; F = (F+1) % n; Counter--;

Counter-- sama artinya dengan Counter=Counter-1.

Proses POP tidak dapat dilakukan apabila circular queue dalam kondisi kosong. Algoritma lengkap untuk proses POP pada Circular Queue adalah :

(61)

Algoritma & Struktur Data 1 - STMIK Atma Luhur 61 Okkita Rizan - Hamida

if ( Counter > 0) { X = Q[F]; F = (F+1) % n; Counter--; } else

{ cout << “Antrian Kosong”;}

Atau :

if ( Counter == 0)

{ cout << “Antrian Kosong”; } else { X = Q[F]; F = (F+1) % n; Counter--; }

ontoh program menggunakan circular queue adalah sebagai berikut : Nama program : circularqueue.cpp

Gambar

Ilustrasi circular queue dalam kondisi penuh digambarkan sebagai berikut :
Ilustrasi  circular  queue  dalam  kondisi  dapat  diisi  dapat  dilihat  pada  beberapa  gambar  sebagai berikut :  1)  2)  3)  4)  5)  6)
Ilustrasi  circular  queue  masih  mempunyai  isi  pada  antrian  dapat  dilihat  pada  beberapa  gambar sebagai berikut :
Ilustrasi Dequeue yang digambarkan dengan array 1 dimensi adalah sebagai berikut :
+7

Referensi

Dokumen terkait

Dalam istilah asing, SIG dikenal juga dengan nama Geographycal Information System (GIS) yang diartikan sebagai suatu sistem informasi yang digunakan untuk memasukkan, menyimpan,

Pemindahan data dari register CPU ke Stack dapat dilaksanakan dengan instruksi PUSH dan yang sebaliknya adalah POP.. Stack

Kemudian praktikkan memasukkan elemen lagi dengan nama s.push(“support”) dan selanjutnya digunakan method s.pop untuk menghasilkan elemen pada top stack, dan mengambil atau

Untuk mengecek keseimbangan tanda kurung, maka dapat memanfaatkan struktur data STACK, dimana jika program melihat ada identifier '(', maka program akan memanggil prosedur PUSH

▫ Tambah satu (increment) nilai top of stack lebih dahulu setiap kali ada penambahan ke dalam array data Stack. ▫ Isikan data baru ke stack berdasarkan indeks top of stack yang

Algoritma K-Means mengelompokan satu set vektor kedalam sejumlah K kelompok atau dikenal dengan istilah clustering. K-Means digunakan pada proses pelatihan untuk

– Untuk menyimpan perubahan baik data juga struktur database. – Misal create tabel baru, maka mungkin saja tidak disimpan kedalam database buffer cache, tp akan disimpan

Modul Praktikum Implementasi Struktur Data 45 Interface pada stack ini dapa digunakan untuk implementasi pada linked list maupun implementasi stack menggunakan array.. Dibawah