• Tidak ada hasil yang ditemukan

2. Aturan Penulisan Teks Algoritma 3. Type, Nama, Nilai dan InputOutput 4. Aksi Sekuensial 5. Pemilihan 6. Pengulangan 7. Prosedur dan Fungsi 8. Larik Array 9. Arsip Beruntun - 1 Fatoni Algoritma dan Pemrograman

N/A
N/A
Protected

Academic year: 2019

Membagikan "2. Aturan Penulisan Teks Algoritma 3. Type, Nama, Nilai dan InputOutput 4. Aksi Sekuensial 5. Pemilihan 6. Pengulangan 7. Prosedur dan Fungsi 8. Larik Array 9. Arsip Beruntun - 1 Fatoni Algoritma dan Pemrograman"

Copied!
128
0
0

Teks penuh

(1)

B

B

a

a

h

h

a

a

sa

s

a

P

Pa

a

sc

s

ca

a

l,

l

,

C

C

+

+

+

+

&

&

J

J

a

a

va

v

a

A

A

l

l

g

g

o

o

r

r

i

i

t

t

m

m

a

a

F

F

a

a

t

t

o

o

n

n

i

i

,

,

M

M

M

M

.

.

,

,

M

M

.

.

K

K

o

o

m

m

.

.

S

S

e

e

p

p

t

t

e

e

m

m

b

b

e

e

r

r

2

2

0

0

1

1

8

8

M

B

B

a

a

h

h

a

a

s

s

a

a

n

n

:

:

1. Pengenalan Algoritma 2. Aturan Penulisan Teks

Algoritma

3. Type, Nama, Nilai dan Input/Output

4. Aksi Sekuensial 5. Pemilihan 6. Pengulangan

7. Prosedur dan Fungsi 8. Larik / Array

9. Arsip Beruntun

I

Innffoorrmmaassi : i

K

K

a

a

n

n

t

t

o

o

r

r

U

U

n

n

i

i

v

v

e

e

r

r

s

s

i

i

t

t

a

a

s

s

B

B

i

i

n

n

a

a

D

D

a

a

r

r

m

m

a

a

Jl. Jend. A. Yani No. 3 Palembang 30264 Telp. (62-711) 515679, 515181, 515582

Fax. (62-711) 515181, 515582 Web site : www.binadarma.ac.id e-mail : universitas@mail.binadarma.ac.id

&

&

P

(2)

K

K

A

A

T

T

A

A

P

P

E

E

N

N

G

G

A

A

N

N

T

T

A

A

R

R

Puji syukur kehadirat Allah SWT yang telah melimpahkan rahmat-Nya kepada penulis sehingga penulis dapat menyelesaikan modul yang berjudul Algoritma dan Pemrograman dalam Bahasa Pascal, C++ dan Java untuk Fakultas Ilmu Komputer Universitas Bina Darma. Algoritma dan Pemrograman adalah jantung dari pemahaman mengenai pemrograman dan merupakan fondasi awal bagi ilmu komputer.

Pada matakuliah Algoritma Pemrograman bagian Prosedural, mahasiswa dibekali dengan metodologi pemrograman prosedural, dengan notasi algoritmik yang terstruktur serta implementasinya dalam bahasa tingkat tinggi prosedural. Mahasiswa dianjurkan untuk menuliskan solusi mereka sebelum membaca solusi pada modul ini, dan kemudian segera menerjemahkan solusi algoritmik pada modul ini menjadi program yang dapat dieksekusi mesin komputer dalam salah satu bahasa tingkat tinggi yang diajarkan. Pertanyaan-pertanyaan yang sengaja tidak dijawab pada beberapa solusi dimaksudkan untuk didiskusikan di luar kuliah. Biasanya pertanyaan-pertanyaan tersebut mengandung ide pedagogik yang jawabannya perlu mendapatkan kupasan yang matang dari pengajar.

Modul ini dibuat dengan tulus bertujuan agar para mahasiswa dapat lebih mudah memahami bagaimana membuat algoritma dan memetakannya dalam bahasa pemrograman.

Penulis merasa masih banyak sekali kekurangan dalam penyusunan modul ini. Kritik, saran dan koreksi sangat diharapkan untuk perbaikan modul ini pada cetakan yang akan datang. Kesalahan ketik yang mengakibatkan kesalahan algoritmik pada diktat ini tak mungkin dikoreksi oleh kompilator. Akhirnya penulis mengucapkan terima kasih kepada semua pihak yang tidak dapat penulis sebutkan satu persatu, yang telah membantu penyusunan modul ini. Segala saran, kritik, dan pertanyaan dapat dikirimkan melalui email penulis atau disampaikan langsung kepada penulis.

Palembang, September 2018

(3)

D

D

A

A

F

F

T

T

A

A

R

R

I

I

S

S

I

I

Halaman

KATA PENGANTAR ... i

DAFTAR ISI ... ii

PENDAHULUAN ... 1

1. PENGENALAN ALGORITMA ... 8

1.1. Definisi Algoritma ... 8

1.2. Dasar-dasar Algoritma ... 9

1.3. Struktur Dasar Algoritma ... 10

2. ATURAN PENULISAN TEKS ALGORITMA ... 13

2.1. Teks Algoritma ... 13

2.2. Notasi Algoritmik ... 16

3. TYPE, NAMA, NILAI DAN INPUT/OUTPUT ... 21

3.1. Type ... 21

3.2. Nama ... 23

3.3. Nilai, Ekspresi, Input dan Output ... 24

4. AKSI SEKUENSIAL ... 32

4.1. Notasi Algoritmik untuk Instruksi Sekuensial ... 32

4.2. Kasus Runtunan ... 33

5. PEMILIHAN ... 39

5.1. Satu Kasus ... 39

5.2. Dua Kasus Komplementer ... 41

5.3. Banyak Kasus ... 43

5.4. Depend On (Dua Kondisi atau Lebih) ... 48

6. PENGULANGAN ... 64

6.1. Repeat Until ... 64

6.2. While – Do ………. 71

6.3. For To Do ……… 76

7. PROSEDUR DAN FUNGSI ……… 83

7.1. Prosedur ………... 83

7.2. Fungsi ……….. 94

8. LARIK / ARRAY ………...………….. 103

9. ARSIP BERUNTUM ……… 112

9.1. Pendahuluan ……… 112

9.1.1. Pengertian Rekaman (Record) ……….. 112

9.1.2. Pengertian Arsip Beruntun (Sequential File) ……… 112

9.2. Operasi pada Arsip Beruntun ……….. 113

9.2.1. Membuat Arsip Beruntun ……….. 113

9.2.2. Membaca Arsip Beruntun ……….. 115

9.2.2.1. Membaca Arsip Beruntun Tanpa Proses Pencarian ………. 115

9.2.2.2. Membaca Arsip Beruntun dengan Proses Pencarian …...…. 116

9.2.3. Menyalin Arsip Beruntun ……….. 118

9.2.4. Penggabungan Arsip Beruntun (Merging) ... 119

9.2.4.1. Penggabungan Arsip Beruntun dengan Concate ………….. 120

(4)

P

P

E

E

N

N

D

D

A

A

H

H

U

U

L

L

U

U

A

A

N

N

Komputer telah banyak digunakan sebagai alat bantu dalam menyelesaikan suatu persoalan. Masalahnya, pemasalahn itu tidak dapat "disodorkan" begitu saja ke depan komputer, dan komputer akan memberikan jawabannya. Ada "jarak" antara persoalan dengan komputer. Strategi pemecahan masalah masih harus ditanamkan ke komputer oleh manusia dalam bentuk program. Untuk menghasilkan suatu program, seseorang dapat memakai berbagai pendekatan yang dalam bidang pemrograman disebut sebagai paradigma. Namun demikian, semua pemrograman mempunyai dasar yang sama. Karena itu pada kuliah Dasar pemrograman, diajarkan semua komponen yang perlu dalam pemrograman apapun, walaupun implementasi dan cara konstruksinya akan sangat tergantung kepada paradigma dan bahasa pemrogramannya.

Paradigma Pemrograman

Paradigma adalah sudut pandang atau "sudut serang" tertentu yang diprioritaskan, terhadap kelompok permasalahan, realitas, keadaan, dan sebagainya. Paradigma membatasi dan mengkondisikan jalan berpikir kita, mengarahkan kita terhadap beberapa atribut dan membuat kita mengabaikan atribut yang lain. Karena itu, jelas bahwa sebuah paradigma hanya memberikan pandangan yang terbatas terhadap sebuah realitas, karena itu fanatisme terhadap sebuah paradigma, mempersempit wawasan dan kadang berbahaya.

Dalam pemrograman pun ada beberapa paradigma, masing-masing mempunyai priotas strategi analisis yang khusus untuk memecahkan persoalan, masing-masing menggiring kita ke suatu pendekatan khusus dari problematika keseluruhan. Beberapa jenis persoalan dapat dipecahkan dengan baik dengan menggunakan sebuah paradigma, sedangkan yang lain tidak cocok dan mngharuskan seseorang memecahkan persoalan hanya dengan melalui sebuah paradigma, berarti membatasi strateginya dalam pemrograman. Satu paradigma tidak akan cocok untuk semua kelas persoalan.

"Ilmu" pemrograman berkembang, menggantikan "seni" memprogram atau memprogram secara coba-coba ("trial and error"). Program harus dihasilkan dari proses pemahaman permasalahan, analisis, sintesis dan dituangkan menjadi kode dalam bahasa komputer secara sistematis dan metodologis.

Beberapa paradigma dalam pemrograman : 1. Paradigma Prosedural atau imperatif

(5)

Algoritma + Struktur Data = Program

Pemrograman dengan paradigma ini sangat tidak "manusiawi" dan tidak "alamiah", karena harus berpikir dalam batasan mesin (komputer), bahkan kadang-kadang batasan ini lebih mengikat daripada batasan problematikanya sendiri. Keuntungan pemrograman dengan paradigma ini adalah efisiensi eksekusi, karena dekat dengan mesin.

2. Paradigma Fungsional

Paradigma fungsional didasari oleh konsep pemetaaan dan fungsi pada matematika. Fungsi dapat berbentuk sebagai fungsi "primitif", atau komposisi dari fungsi-fungsi lain yang telah terdefinisi. Pemrogram mengasumsikan bahwa ada fungsi-fungsi dasar yang dapat dilakukan. Penyelesaian masalah didasari atas aplikasi dari fungsi-fungsi tersebut. Jadi dasar pemecahan persoalan adalah transformasional . Semua kelakuan program adalah suatu rantai transformasi dari sebuah keadaan awal menuju ke suatu rantai keadaan akhir, yang mungkin melalui keadaan antara.

Paradigma fungsional tidak lagi mempermasalahkan memorisasi dan struktur data, tidak ada pemilahan antara data dan program, tidak ada lagi pengertian tentang "variabel". Pemrogram tidak perlu lagi mengetahui bagaimana mesin mengeksekusi atau bagaimana informasi disimpan dalam memori, setiap fungsi adalah "kotak hitam", yang menjadi perhatiannya hanya keadaan awal dan akhir. Dengan merakit kotak hitam ini, pemrogram akan menghasilkan program besar. Berlainan sekali dengan paradigma prosedural, program fungsional harus diolah lebih dari program prosedural (oleh pemroses bahasanya), karena itu salah satu keberatan adalah kinerja dan efisiensinya.

3. Paradigma Deklaratif, predikatif atau lojik

Paradigma ini didasari oleh pendefinisian relasi antar individu yang dinyatakan sebagai predikat. Sebuah program lojik adalah kumpulan aksioma (fakta dan aturan deduksi). Pada paradigma ini, pemrogram menguraikan sekumpulan fakta dan aturan-aturan (inference rules). Ketika program dieksekusi, pemakai mengajukan pertanyaan (Query), dan program akan menjawab apakah pernyataan itu dapat dideduksi dari aturan dan fakta yang ada. Program akan memakai aturan deduksi dan mencocokkan pertanyaan dengan fakta-fakta yang ada untuk menjawab pertanyaan.

4. Paradigma Berorientasi Objek ( Object Oriented)

(6)

time yang dapat “berubah” bentuk dengan kelakuan yang disesuaikan, Namun demikian, literatur pada struktur kontrol mikro untuk mendeskripsikan kelakuan, masih terkandung paradigma imperatif, dengan adanya pernyataan sekuensial,

assignment, analisis kondisional dan pengulangan. Namun demikian, mengkonstruksi program dari objek dan kelas adalah berbeda dengan mengkonstruksi program dari struktur data dan algoritma. Kedekatan antara paradigma ini dengan paradigma lain dapat dilihat dari bahasa-bahasa bukan berorientasi obyek murni , yaitu bahasa prosedural atau fungsional yang ditambahi dengan ciri orientasi objek.

Selain keempat paradigma di atas, dalam literatur masih sering disebutkan paradigma yang lain, misalnya :

- Paradigma konkuren, yang erat hubungannya dengan arsitektur perangkat keras yang memungkinkan pemrosesan secara paralel atau perangkat lunak sistem terdistribusi yang mengelola akses konkuren.

- Paradigma relasional, yang didasari entity dan relasi, dan pemrograman dalam bahasa Query yang memungkinkan diperolehnya suatu himpunan nilai.

Bahasa Pemrograman

Ada banyak sekali bahasa pemrograman, mulai dari bahasa tingkat rendah (bahasa mesin dalam biner), bahasa asembler (dalam kode mnemonik), bahasa tingkat tinggi, sampai bahasa generasi ke empat (4GL).

Bahasa Pemrograman berkembang dengan cepat sejak tahun enampuluhan, seringkali dianalogikan dengan menara Babel yang berakibat manusia menjadi tidak lagi saling mengerti bahasa masing-masing. Untuk setiap paradigma, tersedia bahasa pemrograman yang mempermudah implementasi rancangan penyelesaian masalahnya. Contoh bahasa-bahasa pemrograman yang ada :

1. Prosedural : Algol, Pascal, Fortran, Basic, Cobol, C ... 2. Fungsional : LOGO, APL, LISP

3. Deklaratif/Lojik : Prolog

4. Object oriented murni: Smalltalk, Eifel, Java, C++.. 5. Konkuren : OCCAM, Ada, Java

6. Relasional: SQL pada basisdata relasional

Paradigma Objek mulai ditambahkan pada bahasa-bahasa yang ada. Pemroses bahasa Pascal dan C versi terbaru dilengkapi dengan fasilitas terorientasi objek, misalnya Turbo Pascal (mulai versi 5.5) pada komputer pribadi (PC) dan C++. Ada beberapa versi LISP dan Prolog yang juga memasukkan aspek OO.

Suatu program dalam bahasa pemrograman tertentu akan diproses oleh pemroses bahasanya. Ada dua kategori pemroses bahasa, yaitu kompilator dan interpreter. Dalam melakukan implementasi program, tersedia bahasa pemrograman visual atau tekstual.

Belajar Pemrograman Tidak Sama Dengan Belajar Bahasa Pemrograman.

(7)

notasi yang disepakati bersama. Beberapa masalah akan cocok kalau diselesaikan dengan suatu paradigma tertentu. Karena itu, pengetahuan tentang kelas persoalan penting adanya.

Pada hakekatnya, penggunaan komputer untuk memecahkan persoalan adalah untuk tidak mengulang-ulang kembali hal yang sama. Strategi pengenalan masalah melalui dekomposisi, pemakaian kembali modul yang ada, sintesa, selalu dipakai untuk semua pendekatan, dan seharusnya mendasari semua pengajaran pemrograman. Karena itu perlu diajarkan metodologi, terutama karena sebagian besar pemrogram pada akhirnya memakai rutin-rutinyang ditulis orang lain. Memang ada algoritma baru yang lahir, tapi relatif lebih sedikit dibandingkan dengan bongkar pasang program yang sudah ada. Belajar memprogram lebih bersifat pemahaman persoalan, analisis, sintesis. Belajar bahasa pemrograman adalah belajar memakai suatu bahasa, aturan sintaks (tatabahasa), setiap instruksi yang ada dan tata cara pengoperasian kompilator bahasa yang bersangkutan pada mesin tertentu. Lebih lanjut, belajar bahasa pemrograman adalah belajar untuk memanfaatkan instruksi-instruksi dan kiat yang dapat dipakai secara spesifik hanya pada bahasa itu. Belajar memprogram lebih bersifat keterampilan daripada analisis dan sintesa. Belajar memprogram dan belajar bahasa pemrograman mempunyai tingkatan dan kesulitan yang berbeda-beda. Mahasiswa seringkali dihadapkan pada kedua kesulitan itu sekaligus. Pemecahan persoalan dengan paradigma yang sama akan menghasilkan solusi yang "sejenis". Beberapa bahasa dapat termasuk dalam sebuah paradigma sama, pemecahan persoalan dalam satu paradigma dapat diterjemahkan ke dalam bahasa-bahasa yang berbeda. Untuk itulah diperlukan adanya suatu perjanjian, notasi yang disepakati supaya masalah itu dapat dengan mudah diterjemahkan ke dalam salah satu bahasa yang masih ada dalam lingkup paradigma yang sama.

Proses memprogram adalah proses yang memerlukan kepakaran, proses koding lebih merupakan proses semi otomatik dengan aturan pengkodean. Proses memprogram memang berakhir secara konkrit dalam bentuk program yang ditulis dan dieksekusi dalam bahasa target. Karena itu memaksa mahasiswa hanya bekerja atas kertas, menganalisis dan membuat spesifikasi tanpa pernah mengeksekusi program, belumlah lengkap. Sebaliknya, hanya mencetak pemrogram yang langsung "memainkan keyboard", mengetik program dan mengeksekusi tanpa analisis dan spesifikasi yang dapat dipertanggung jawabkan juga bukan merupakan praktek yang “baik” (terutama untuk program skala besar dan harus dikerjakan banyak orang). Produk yang dihasilkan oleh seorang pemrogram adalah program dengan rancangan yang baik (metodologis, sistematis), yang dapat dieksekusi oleh mesin, berfungsi dengan benar, sanggup melayani segala kemungkinan masukan, dan didukung dengan adanya dokumentasi. Pengajaran pemrograman titik beratnya adalah membentuk seorang perancang

(8)

pemrograman fungsional ini adalah pengajaran melalui contoh tipikal. Contoh tipikal adalah contoh program yang merupakan “pola solusi” dari kelas-kelas persoalan yang dapat diselesaikan. Contoh tipikal tersebut dikembangkan dan dipakai untuk belajar dan mengajar sesuai dengan paradigma pemrograman yang diajarkan.

Program : Produk versus Proses

Beberapa kalangan berpendapat bahwa yang penting dalam sebuah pengembangan program adalah produk. Pendapat ini sudah kuno. Sebuah produk yang baik, mungkin dihasilkan oleh sebuah proses yang “kurang baik” atau bahkan “sangat buruk” karena hasil akhir yang dipolers disana sini secara tambal sulam. Sebaliknya, proses yang baik pasti dapat menjamin kehadiran suatu produk yang baik. Aspek penekanan pada proses ini sangat ditegaskan dalam kuliah pemrograman (dan nantinya dalam Rekayasa perangkat Lunak dengan skala lebih besar). Memang pemantauan produk jauh lebih gampang daripada pemantauan proses. Apalagi dengan jumlah mahasiswa yang cukup banyak maka aspek proses seringkali sulit dipantau. Diharapkan bahwa mahasiswa tidak hanya mampu untuk menghasilkan produk program, melainkan juga dapat menjalankan proses pembuatan program seperti yang “sebaiknya” sesuai dengan prosedur yang standard. Sikap mahasiswa yang mau disiplin secara mandiri sangat diharapkan dalam mencapai tujuan kuliah ini.

Besar Program Skala dan Program Skala Kecil

Pada kehidupan nyata, perangkat lunak yang dibutuhkan “berukuran” besar, bahkan sangat besar dan mempunyai persyaratan tertentu. Pembangunan program berskala besar tidak dapat dilakukan dengan cara yang identik dengan program skala kecil. Ini dapat dianalogikan dengan pembangunan sebuah gedung pencakar langit dibandingkan dengan pembangunan sebuah rumah kecil sederhana. Sesuatu yang “besar” biasanya terdiri dari komponen-komponen “kecil”. Misalnya sebuah peralatan elektronik yang canggih, di dalamnya terdiri dari komponen elektronik “standard” yang dirakit. Ada produsen komponen, dan ada perakit yang memakai komponen. Sebuah gedung besar mempunyai komponen seperti pintu, jendela, ubin yang dapat difabrikasi secara terpisah sebelum dipasang. Sebuah program yang besar dan “baik” biasanya terdiri dari banyak sekali modul/komponen “kecil” yang dikerjakan oleh banyak orang. Pendekatan “merakit” ini juga dilakukan dalam pembangunan perangkat lunak. Maka dapat dikatakan bahwa ada dua kategori pemrogram: penyedia modul/komponen dan pemakai modul/komponen. Mahasiswa Informatika selayaknya mampu untuk menjadi penyedia modul/komponen. Skala komponen juga makin berkembang, dari komponen setara “suku cadang” dalam industri perakitan mobil, sampai komponen utama yang menjadi dasar, bahkan “engine” dari produk secara keseluruhan (munculnya istilah

library, framework, platform , dsb)

(9)

Pemrogram Individu dan Pemrogram dalam Tim

Jaman dulu, tidak jarang ditemui programmer “eksentrik”, suka menyendiri, jenius yang selalu hanya berhadapan dengan komputer dan menghasilkan kode-kode program “misterius” yang hanya dimengerti olehnya sendiri (Baca tulisan Hoare mengenai

“Programming: Sorcery or Science” [Hoare-84 ) . Jaman itu sudah berlalu. Skala program yang harus dibuat di masa kini sudah jauh lebih besar ukurannya dibandingkan dengan jaman dulu. Ini sudah dijelaskan pada bagian Program Skal Besar dan Program Skala kecil. Akibatnya, pemrogram diharapkan untuk dapat bekerja dalam tim. Jika dianalogikan dengan dunia musik, maka pemrograman adalah sebuah orkestra, yang harus dipimpin seorang konduktor supaya pertunjukan dapat berjalan dengan baik. Sebuah orkestra selain membutuhkan kerja keras individu, juga membutuhkan kemauan setiap individu untuk bermain selaras sesuai dengan arahan konduktor.

Bekerja dalam tim membutuhkan standard atau pola kerja yang sama dan aturan main agar ada koodinasi dan tim dapat menghasilkan suatu produk sesuai dengan prosedur. Ada banyak standard yang dipakai di dunia pemrograman. Aspek ini perlu diperhatikan dan dengan disepakati bersama. Aspek bekerja dalam tim dan mengikuti standard ini akan dicakup dalam perkuliahan. Jadi salah satu tujuan pengajaran adalah membentuk pemrogram atau perancang program yang harus mampu bekerja sama dengan orang lain. Kuliah Algoritma Pemrograman lebih diarahkan kepaga programming, daripada

coding .

Aktifitas Mahasiswa

Beberapa kalangan berpendapat bahwa memprogram adalah menghasilkan program. Ini dapat dianalogikan dengan melihat seorang penyanyi, maka tugasnya adalah hanya bernyanyi. Atau seorang olahragawan yang fokusnya adalah bertanding di lapangan untuk cabang olahraga tertentu. Kalau diperhatikan, seorang penyanyi yang baik tidak hanya berlatih untuk menyanyi, namun harus melakukan secara disiplin banyak latihan yang lain, misalnya: latihan pernafasan, menguasai beberapa alat musik, menjiwai suatu peran ketika menyanyi di panggung, dsb. Seorang olahragawan harus melakukan latihan-latihan rutin misalnya lari pagi, angkat barbel, senam atau olah raga lain yang menunjang olahraga utamanya. Demikian pula dengan “pemrogram”.

Aktivitas mahasiswa yang perlu dilakukan yang sedang belajar memprogram dapat digolongkan dalam kelompok sebagai berikut :

- Simulasi, sensibilitas terhadap masalah dan kemungkinan solusi. Kegiatan di kelas melalui permainan, misalnya mengurut dokumen atau kartu. Permainan di kelas dapat dilakukan jika jumlah siswa sedikit, sulit dilakukan jika jumlah mahasiswa banyak permainan dapat disimulasi dengan komputer, sehingga siswa dapat bermain secara mandiri.

(10)

dalam pemrograman (misalnya "loop" dan “if” yang saling melingkupi) dan beberapa konsep pemrograman yang tidak diterapkan lewat instruksi bahasa pemrograman partikular karena tidak tersedia dapat dihindari.

- Menulis program, yaitu menterjemahkan algoritma ke program secara "setia" menurut aturan penterjemahan yang diberikan dikelas.

- Debugging dan menguji coba program, dilakukan mahasiswa secara mandiri dengan komputer. Idealnya dua kali "run" sudah cukup untuk mendapatkan program benar sekali untuk membersihkan program dari salah sintaks, dan kedua untuk mendapatkan program benar. Kesalahan lojik jarang terjadi kalau analisis benar.

- Mengamati peristiwa eksekusi, perlu untuk meningkatkan kepercayaan bahwa jika analisis benar maka sisa pekerjaan menjadi mudah. Pada pemrograman prosedural, aspek ini penting untuk memahami fenomena eksekusi dan perubahan nilai suatu struktur data. Pada paradigma pemrograman lain, aspek ini penting untuk menunjukkan mekanisme eksekusi paradigma yang bersangkutan pada mesin Von Newmann, dan untuk menunjukkan mekanisme kerja pemroses bahasa yang bersangkutan. pada pemrograman fungsional, penting untuk menunjukkan mekanisme aplikasi fungsi, pada pemrograman deklaratif untuk menunjukkan bagaimana proses deduksi dan inferensi dilakukan, pada OOP untuk menunjukkan bagaimana kaitan suatu objek dengan objek lain terjadi saat runtime dan bagaimana beberapa mekanisme seperti "encapsulation", "inheritance", “memory management” dilakukan oleh bahasanya.

- Membaca program : orang akan dapat menulis dengan baik kalau sering membaca. Hal ini juga berlaku dalam memprogram. Kegiatan yang dapat dilakukan di kelas adalah dengan saling tukar menukar teks algoritma, dan saling mengkritik algoritma teman. Mahasiswa harus berlatih sendiri pada kegiatan belajar bersama.

- Membuktikan kebenaran program secara formal, satu-satunya hal yang menjamin kebenaran, tetapi kontradiktif dan sulit diterapkan dalam kehidupan sehari-hari. Program yang hanya lima baris pembuktiannya bisa sehalaman, sehingga seringkali tidak pernah diterapkan dalam aplikasi nyata. Aktifitas ini dicakup pada matakuliah Analisis Algoritma. Pada kuliah Algoritma dan Pemrograman mahasiswa sudah dipersiapkan untuk membuat spesifikasi "semi formal", sehingga hubungan dengan mata kuliah selanjutnya sudah dipersiapkan.

Aktifitas-aktifitas tersebut sebenarnya mencerminkan peran-peran seseorang dalam siklus hidup sebuah perangkat lunak.

Tujuan Kuliah Pemrograman Prosedural

(11)

Secara lebih spesifik, mahasiswa diharapkan mampu untuk :

1. Memecahkan masalah dengan paradigma prosedural dan menuliskan spesifikasi dan algoritmanya tanpa tergantung pada bahasa pemrograman apapun.

2. Menulis algoritma dari suatu masalah dengan menggunakan metodologi dan skema standard yang diajarkan secara terstruktur.

3. Menulis program yang "baik" (sesuai dengan kriteria yang diajarkan di kelas) dalam bahasa pemrograman yang diajarkan, dengan menggunakan aturan translasi yang diberikan. Programnya harus terstruktur walaupun bahasa pemrogramannya bukan bahasa yang terstruktur.

(12)

1

1

P

P

E

E

N

N

G

G

E

E

N

N

A

A

L

L

A

A

N

N

A

A

L

L

G

G

O

O

R

R

I

I

T

T

M

M

A

A

1.1. Definisi Algoritma

Apakah yang dimaksud dengan algoritma, algoritma berarti solusi. Ketika orang berbicara mengenai algoritma di bidang pemrograman, maka yang dimaksud adalah solusi dari suatu masalah yang harus dipecahkan dengan menggunakan komputer. Algoritma harus dibuat secara runut agar komputer mengerti dan mampu mengeksekusinya. Analisis kasus sangat dibutuhkan dalam membuat sebuah algoritma, misalnya proses apa saja yang sekiranya dibutuhkan untuk menyelesaikan masalah yang harus diselesaikan .

Algoritma harus dipikirkan secara logika di pikiran manusia dengan pemikiran yang lebih mudah dimengerti (menggunakan gambaran-gambaran tertentu di dalam pikiran) agar dapat lebih mudah dimengerti oleh manusia dan dapat dengan mudah dipetakan (diubah) menjadi bahasa pemrograman untuk dieksekusi oleh komputer.

Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis. Kata logis berarti nilai kebenarannya harus dapat ditentukan, benar atau salah. Langkah-langkah yang benar akan menghasilkan menyelesaikan masalah dengan benar, sedangkan sebaliknya langkah-langkah yang salah tidak akan menyelesaikan permasalahan. Berikut adalah contoh algoritma :

Kasus 1. Buatlah algoritma untuk mencari sisi miring dari suatu segitiga siku-siku dengan menggunakan rumus pytagoras.

Penyelesaian : Untuk menyelesaikan masalah diatas harus diketahui terlebih dahulu rumus pytagoras untuk segitiga siku-siku tersebut.

Jika di ketahui sisi A dan sisi B, maka sisi C = A2 B2

1) Baca nilai sisi A 2) Baca nilai sisi B 3) Sisi C = Sqrt(A^2+B^2)

4) Tampilkan nilai sisi A, Sisi B, Sisi C.

Misalkan akan dilakukan pertukaran isi nilai A dan nilai B. Jika sebelum pertukaran nilai A = 8 dan nilai B = 10, maka setelah pertukaran, nilai A = 10 dan nilai B = 8. Penyelesaian permasalahan diatas adalah melakukan langkah sebagai berikut :

1) Isikan nilai A ke B (B←A) 2) Isikan nilai B ke A (A←B)

(13)

Langkah-langkah diatas tidak akan menghasilkan pertukaran yang benar, karena akan dihasilkan nilai B = 8 dan nilai A = 8. Sehingga langkah-langkah diatas adalah salah, dalam hal ini tidak menyelesaikan permasalahan.

Untuk mempertukarkan kedua nilai, diperlukan sebuah peubah pembantu sebagai tempat penampungan sementara. Sehingga langkah-langkah pertukaran adalah sebagai berikut :

1) Simpan nilai A di tempat penampungan C (C←A) 2) Isikan nilai B ke nilai A (A←B)

3) Isikan nilai C ke nilai B (B←C)

Langkah diatas akan menghasilkan nilai A = 10 dan nilai B = 8. Sehingga algoritma diatas dapat menyelesaikan masalah, yang berarti benar.

Berdasarkan uraian diatas, menurut (Donald E. Knuth dalam Munir, R. : 5-6), algoritma harus mempunyai lima ciri penting :

1. Algoritma harus berhenti setelah mengerjakan sejumlah langkah terbatas. Dalam menentukan nilai sisi C dengan rumus pytagoras, algoritma berhenti setelah menampilkan nilai sisi A, sisi B dan sisi C.

2. Setiap langkah harus didefinisikan dengan tepat dan tidak berarti dua

(ambiquous).

3. Algoritma memiliki nol atau lebih masukan. Algoritma pytagoras memiliki masukan nilai sisi A dan nilai sisi B.

4. Algoritma memiliki nol atau lebih keluaran. Algoritma pytagoras memiliki keluaran nilai sisi A, nilai sisi B dan nilai sisi C.

5. Algoritma harus sangkil (effetive). Setiap langkah harus sederhana sehingga dapat dikerjakan dalam sejumlah waktu yang masuk akal.

1.2. Dasar-dasar Algoritma

Pada dasarnya algoritma merupakan deskripsi pelaksanaan suatu proses. Dimana tiap langkah instruksi melaksanakan suatu tindakan/aksi. Bila aksi dilaksanakan maka sejumlah perintah yang bersesuaian dengan aksi tersebut juga dilaksanakan oleh pemroses. Dampak dari pelaksanaan aksi ini adalah merubah suatu keadaan sebelum aksi dilaksanakan (to) menjadi keadaan setelah aksi dilaksanakan

(t1).

to : Keadaan sebelum aksi dilaksanakan

Aksi

t1 : Keadaan setelah aksi dilaksanakan

Keadaan awal dan keadaan akhir algoritma dapat dijadikan acuan bagi pemrogram dalam merancang sebuah algoritma. Keadaan akhir mencerminkan hasil yang diinginkan dari sebuah keadaan awal, sedangkan algoritma berisi langkah-langkah untuk mencapai keadaan akhir dari keadaan awal yang telah didefinisikan.

(14)

design). Pendekatan ini sangat bermanfaat untuk membuat algoritma yang cukup rumit dan kompleks.

Kasus 2. Berikut adalah nilai mahasiswa

Nim Nama NilaiMK1 NilaiMK2 NilaiMK3 Rata-rata

001 Andi 50 60 60 56.67

Akan dibuat algoritma untuk masalah diatas.

Algoritma rata-rata nilai mahasiswa diatas adalah

1) Membaca nim dan nama dari peranti masukan 2) Mencari jumlah, dengan rumus :

Jumlah = NilaiMK1 + NilaiMK2 + NilaiMK3 3) Mencari Rata-Rata = Jumlah / 3

Langkah 1 dan 3 sudah cukup sederhana, sehingga tidak perlu di perhalus lagi. Langkah 2 masih perlu diurai menjadi beberapa langkah yang lebih sederhana. Komputer masih perlu diberitahu bagaimana mencari jumlah dari sekumpulan data nilai mata kuliah. Mula-mula beri nilai jumlah = 0, kemudian baca nilai mata kuliah yang pertama, lalu tambahkan dengan jumlah serta disimpan sebagai jumlah. Selanjutnya baca nilai mata kuliah yang ke-2, tambahkan dengan jumlah dan simpan kembali sebagai jumlah. Demikian seterusnya sampai nilai mata kuliah ke N, jika jumlah mata kuliah adalahn N.

Jumlah = 0

Untuk k = 1,2…, N lakukan : baca NilaiMK ke k

jumlah = jumlah + NilaiMK ke k k = k + 1

Sehingga langkah-langkah untuk mencari rata-rata nilai mahasiswa adalah sebagai berikut :

1) Baca jumlah mata kuliah (N)

2) Baca nim dan nama dari peranti masukan 3) jumlah = 0

4) Untuk k = 1,2…, N lakukan : baca NilaiMK ke k

jumlah = jumlah + NilaiMK ke k 5) Mencari Rata-Rata = jumlah / N 6) Tampilkan Rata-rata

1.3. Struktur Dasar Algoritma

Struktur dasar algoritma terdiri dari tiga bagian, yaitu :

1. Urutan (sequence)

Terdiri dari satu atau lebih instruksi. Tiap instruksi dikerjakan urut sesuai urutan penulisannya.

(15)

Instruksi dikerjakan bila telah memenuhi kondisi tertentu, contoh : if kondisi then

aksi1(kondisi = true) else aksi2(kondisi = false) 3. Pengulangan (repetition)

Mengerjakan instruksi yang berulang, contoh : repeat aksi until kondisi (true = selesai; false = ulang).

Latihan

1. Buat algoritma cara memakai sepatu 2. Buat Algoritma menghitung Luas Segitiga

3. Tuliskan beberapa contoh algoritma yang lain dalam kehidupan sehari-hari. Tuliskan juga beberapa contoh langkah dalam algoritmanya.

(16)

2

2

A

A

T

T

U

U

R

R

A

A

N

N

P

P

E

E

N

N

U

U

L

L

I

I

S

S

A

A

N

N

T

T

E

E

K

K

S

S

A

A

L

L

G

G

O

O

R

R

I

I

T

T

M

M

A

A

Teks algoritma berisi deskripsi langkah-langkah penyelesaian masalah. Deskripsi tersebut dapat ditulis dalam notasi apapun, asalkan mudah dimengerti dan dipahami. Tidak ada notasi baku dalam penulisan teks algoritma, selanjutnya disebut notasi algoritmik. Hal terpenting yang harus dipahami adalah bahwa teks algoritma tidak sama dengan teks program. Namun agar teks algoritma tersebut mudah di translasikan ke dalam notasi bahasa pemrograman, maka sebaiknya notasi algoritmik tersebut berkoresponden dengan notasi bahasa pemrograman secara umum.

2.1. Teks Algoritma

Pada dasarnya, teks algoritma disusun oleh tiga bagian : Judul/bagian kepala, kamus/bagian deklarasi dan Algoritma/bagian deskripsi. Setiap bagian disertai dengan komentar untuk memperjelas maksud teks yang dituliskan. Komentar adalah kalimat yang diapit oleh pasangan tanda kurung kurawal {}.

Algoritma NamaAlgoritma

{Penjelasan tentang algoritma, yang berisi uraian singkat mengenai apa yang dilakukan oleh algoritma}

DEKLARASI :

{Semua nama yang dipakai, meliputi nama tipe, nama tetapan, nama peubah, nama prosedur dan nama fungsi didefinisikan di sini}

DESKRIPSI :

{Semua langkah/aksi algoritma dituliskan di sini}

JUDUL (HEADER)

Judul adalah bagian teks algoritma tempat mendefinisikan apakah teks tersebut adalah program, prosedur, fungsi, modul atau sebuah skema program. Setelah judul disarankan untuk menuliskan spesifikasi singkat dari teks algoritma tersebut. Pada bagian judul dan spesifikasi, pembaca dapat mengetahui isi dari teks tanpa membaca secara detil. Bagian judul berisi judul teks algoritmik secara keseluruhan dan intisari sebuah teks algoritmik tersebut.

Bagian judul ini identik dengan judul buku dan intisari pada sebuah teks ilmiah dalam suatu makalah berbahasa Indonesia.

KAMUS/DEKLARASI

Kamus adalah bagian teks algoritma tempat mendefinisikan nama type, nama konstanta, nama informasi (nama variabel), nama fungsi sekaligus spesifikasinya dan nama prosedur sekaligus spesifikasinya.

(17)

tersebut. Nama variabel belum terdefinisi harganya ketika didefinisikan. Pendefinisian nama konstanta sekaligus memberikan harganya. Pendefinisian nama fungsi dilakukan sekaligus dengan domain dan range serta spesifikasinya. Pendefinisian nama prosedur sekaligus dengan pendefinisian parameter (jika ada) dan spesifikasi prosedur (Initial state, final state dan proses yang dilakukan) Dalam bahasa pemrograman, setiap nama mempunyai aturan penulisan (sintaks) tertentu, misalnya yang menyangkut karakter yang diperbolehkan, jumlah maksimum karakter, dsb. Pada teks algoritma, tidak ada aturan ketat mengenai nama. Yang penting adalah bahwa pemilihan nama harus interpretatif, tidak menimbulkan kerancuan dan jika singkat harus disertai dengan penjelasannya. Nama karena merupakan satu kesatuan leksikal, maka sebuah nama harus dituliskan secara utuh (tidak boleh dipisahkan dengan blank) supaya satu nama dapat dibedakan dari nama yang lain atau satuan leksikal lain. Nama informasi sebaiknya menunjukkan type. Contoh nama yang menimbulkan kerancuan : A-B akan membingungkan sebab mungkin berarti A “minus” B.

Kamus global atau umum dikenal untuk seluruh program. Kamus lokal hanya dikenal pada teks algoritma dimana kamus tersebut ditulis.

Contoh pendefinisian kamus KAMUS

{Nama Type, hanya untuk type yang bukan type dasar }

type Point : <X:real,Y:real> { koordinat pada sumbu kartesian }

{Nama Konstanta, harus menyebutkan type dan nilai }

constant PI: real = 3.14159 constant Ka: character = 'K' constant Faktor: integer = 3 constant Benar: boolean = true

{Nama Informasi, menyebutkan type}

NMax : integer{jumlah maksimum elemen tabel}

Found : boolean{ Hasil pencarian, true jika ketemu } P : Point { Posisi pena pada bidang kartesian } CC : character { Current character }

{Spesifikasi Fungsi, menyebutkan nama fungsi, domain dan range} Function RealToInt (i:real)→ integer

{Mengkonversi harga i yang bertype real menjadi harga ekivalen yang bertype integer }

{Spesifikasi Prosedur, menyebutkan Nama, parameter, Initial State (I.S.) , Final State (F.S.) dan Proses}

procedure INISIALISASI

{I.S. Sembarang F.S. Semua nama global dalam kamus terdefinisi nilainya Proses : Menginisialisasi semua nama informasi global}

procedure Tulis (Input Pesan: string)

{I.S. sembarang F.S. Pesan tertulis di layer Proses : Menulis isi Pesan ke layar }

procedure TUKAR(Input/Output : A,B:real)

(18)

ALGORITMA/DESKRIPSI

Algoritma adalah bagian teks algoritmik yang berisi instruksi atau pemanggilan aksi yang telah didefinisikan. Komponen teks algoritmik dalam pemrograman prosedural dapat berupa:

1. Instruksi dasar seperti input/output, assignment 2. Sequential statement

3. Analisis kasus 4. Pengulangan

Contoh Kasus yang dapat ditulis dalam algoritma sebagai berikut.

Algoritma Pytagoras

{Algoritma ini mencari nilai sisi miring suatu segitiga siku-siku, dengan rumus pytagoras}

Deklarasi : A, B, C : real Deskripsi :

1) Baca nilai sisi A 2) Baca nilai sisi B 3) Sisi C = Sqrt(A^2+B^2)

4) Tampilkan nilai sisi A, Sisi B, Sisi C. Algoritma TukarNilai

{Diberikan Nilai A dan Nilai B. Pertukaran nilai menghasilkan nilai A adalah nilai B, sedangkan nilai B adalah nilai A}

Deskripsi :

1) Simpan nilai A di tempat penampungan C (C←A) 2) Isikan nilai B ke nilai A (A←B)

3) Isikan nilai C ke nilai B (B←C) Algoritma RataNilai

{Mencari rata-rata nilai mahasiswa} Deklarasi :

Nim, nama : String

Jumlah, Rata_Rata : Real K, N : Integer

Deskripsi :

1) Baca Jumlah mata kuliah (N)

2) Baca nim dan nama dari peranti masukan 3) jumlah = 0

4) Untuk k = 1,2…, N lakukan : baca NilaiMK Baca NilaiMK ke k

(19)

2.2. Notasi Algoritmik

Agar lebih mudah ditranslasikan ke bahasa pemrograman tertentu, maka algoritma yang masih ditulis dalam kalimat di tuliskan dalam notasi algoritmik. Berikut adalah contoh :

Perintah Notasi Algoritmik

Baca nilaiMk Input/Read (nilaiMK) Tulis x dan y Output/Write (x,y) Isikan x ke dalam min Min ← x

Untuk k = 1,2,…, N lakukan For k ← 1 to N do Selama k < N lakukan While k < N do Ulangi – sampai k ← N Repeat – until k ← N

Jumlah = 0 Jumlah ← 0

Simpan nilai A di tempat penampungan C C ← A

Perintah read merupakan perintah kepada komputer untuk membaca input dari peranti masukan misalnya keyboard. Sedangkan perintah write merupakan perintah kepada komputer untuk menulis atau menampilkan ke peranti keluaran dalam hal ini adalah monitor. Perintah for to do, while do dan repeat until akan dipelajari lebih lanjut pada pertemuan berikutnya.

Algoritma kasus di atas dapat ditulis dalam notasi algoritmik sebagai berikut :

Algoritma Pytagoras

{Algoritma ini mencari nilai sisi miring suatu segitiga siku-siku, dengan rumus pytagoras}

Deklarasi :

SisiA, SisiB, SisiC : real Deskripsi :

Read (SisiA) Read (SisiB)

SisiC ← Sqrt (SisiA^2 + SisiB^2) Write (SisiA, SisiB, SisiC) Algoritma TukarNilai

{Diberikan Nilai A dan Nilai B. Pertukaran nilai menghasilkan nilai A adalah nilai B, sedangkan nilai B adalah nilai A} Deklarasi :

A, B, C : real Deskripsi :

C←A A←B B←C

Algoritma Rata

{Mencari rata-rata nilai mahasiswa} Deklarasi :

Nim, nama : String

(20)

Read (nim, nama,A,B,C) Jumlah ← A+B+C

Rata ← Jumlah / 3 Write (Rata)

1. Translasi ke Bahasa Pascal

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman pascal.

Program Pytagoras;

{Algoritma ini mencari nilai sisi miring suatu segitiga siku-siku, dengan rumus pytagoras}

(*Deklarasi*) Var

SisiA, SisiB, SisiC : real; (*Deskripsi*)

Begin

Write (‘Sisi A =?’); Readln (SisiA); Write (‘Sisi B =?’); Readln (SisiB); SisiC := Sqrt (SisiA^2 + SisiB^2); Writeln (‘Sisi A = ‘, SisiA); Writeln (‘Sisi B = ‘, SisiB); Writeln (‘Sisi C = ‘, SisiC); End.

Program TukarNilai;

{Diberikan Nilai A dan Nilai B. Pertukaran nilai menghasilkan nilai A adalah nilai B, sedangkan nilai B adalah nilai A} (*Deklarasi*)

Var

A, B, C : real; (*Deskripsi*) Begin

write(‘Nilai A = ‘);readln(A); write(‘Nilai B = ‘);readln(B); C:=A;

A:=B; B:=C;

Writeln (‘Nilai A = ‘, A); Writeln (‘Nilai B = ‘, B); End.

Program RataRata;

{Mencari rata-rata nilai mahasiswa} (*Deklarasi*)

Var

Nim, nama : String;

A,B,C,Jumlah, Rata : Real; (*Deskripsi*)

Begin

(21)

write (‘Masukkan Nilai A : ‘); Readln(A); write (‘Masukkan Nilai B : ‘); Readln(B); write (‘Masukkan Nilai C : ‘); Readln(C); Jumlah := A+B+C;

Rata := Jumlah/3;

write (‘Rata-rata :’, Rata); End.

2. Translasi ke Bahasa Turbo C++

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman Turbo C++.

//Program Pytagoras;

//Algoritma ini mencari nilai sisi miring suatu //segitiga siku-siku, dengan rumus pytagoras

#include<stdio.h> #include<conio.h> #include<math.h> void main() {

clrscr(); //Deklarasi

float SisiA, SisiB, SisiC; //Deskripsi

printf("Sisi A = "); scanf("%f",&SisiA); printf("Sisi B = "); scanf("%f",&SisiB); SisiC = sqrt (pow(SisiA,2) + pow(SisiB,2)); printf("Sisi A = %5.1f\n", SisiA);

printf("Sisi B = %5.1f\n", SisiB); printf("Sisi C = %5.1f\n", SisiC); getch();

}

//Program TukarNilai;

//Diberikan Nilai A dan Nilai B. Pertukaran nilai //menghasilkan //nilai A adalah nilai B,

//sedangkan nilai B adalah nilai A #include<stdio.h>

#include<conio.h> #include<math.h> void main() {

//Deklarasi float A, B, C;

(22)

printf("Nilai A = ");scanf("%f",&A); printf("Nilai B = ");scanf("%f",&B); //menukar

C=A; A=B; B=C;

//menampilkan

printf("Nilai A = %5.1f\n", A); printf("Nilai B = %5.1f\n", B); getch();

}

//Program RataNilai;

//Mencari rata-rata nilai mahasiswa} #include<stdio.h>

#include<conio.h> #include<math.h> void main() {

//Deklarasi char *nim, *nama;

float Jumlah, NilaiMK, Rata_Rata; int k,N;

//Deskripsi

printf("Masukkan jumlah mata kuliah : "); fflush(stdin);scanf("%d",&N);

printf("Masukkan Nim : "); fflush(stdin);gets(nim); printf("Masukkan Nama : "); fflush(stdin);gets(nama); Jumlah = 0;

for(k=1;k<=N;k++) {

printf("Masukkan nilai MatKul %d : ",k); scanf("%f",&NilaiMK);

Jumlah = Jumlah + NilaiMK; }

Rata_Rata = Jumlah/N;

printf("Rata-rata : %5.1f", Rata_Rata); getch();

}

3. Translasi ke Bahasa Java

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman Java.

public class Pytagoras{

public static void main (String[] args) { double A,B,C;

(23)

C = Math.sqrt(Math.pow(A,2)+Math.pow(B,2)); // Math.sqrt adalah fungsi mencari akar

// Math.pow(A,2) adalah membuat A pangkat 2 System.out.println (C);

} }

public class TukarNilai2{

public static void main (String[] args) { double a,b,c;

a = 10; b = 7; c = a; a = b; b = c;

System.out.println( "Nilai A = " + a); // Nilai A dari B

System.out.println( "Nilai B = " + b); // Nilai B dari A

} }

public class ratarata{

public static void main (String[] args) { double jumlah,rata;

int A,B,C; A = 7; B = 10; C = 8;

jumlah = A + B + C; // Jumlahkan 3 bilangan rata = jumlah/3; // rata-rata

System.out.println( "Rata - rata = " + rata); }

}

Latihan

1. Diketahui bahwa kantong P kosong, kantong Q berisi 5 buah kelereng dan kantong R berisi 10 kelereng. Apabila yang terbawa hanya sebuah kantong dan dikatakan BUKAN Kantong P yang terbawa, maka jumlah kelereng yang terbawa adalah ?

2. Buatlah algoritma yang menerima tiga buah masukan dan menampilkan hasil pertambahan ketiga bilangan !

3. Instruksi P=Q akan mengakibatkan nilai P = nilai Q, dan nilai Q menjadi ! 4. Buat algoritma mengalikan dua buah bilangan bulat (bukan menggunakan

(24)

3

3

T

T

Y

Y

P

P

E

E

,

,

N

N

A

A

M

M

A

A

,

,

N

N

I

I

L

L

A

A

I

I

D

D

A

A

N

N

I

I

N

N

P

P

U

U

T

T

/

/

O

O

U

U

T

T

P

P

U

U

T

T

3.1. Type

Type adalah pola representasi suatu data dalam komputer. Gunanya untuk mendefinisikan objek yang akan diprogram. Ada type dasar (yang diasumsikan ada) dan type bentukan, biasanya type bentukan dibentuk dari type dasar. Type tidak menentukan alokasi memori di komputer, tetapi hanya mendefinisikan pola struktur informasi. Program bekerja dengan memanipulasi data di dalam memori. Objek yang akan di program bermacam-macam tipenya, antara lain nilai karakter, integer, string

dan lainnya.

Mendefinisikan TYPE berarti : 1. Menentukan nama type dalam kamus

2. Definisi domain harga yang dapat dipunyai oleh nama tsb. 3. Konvensi atau perjanjian tentang penulisan konstanta bertype tsb. 4. Operator yang dapat dioperasikan terhadap objek bertype tsb.

Ada type dasar yang sudah diberikan dan dan siap dipakai, ada type bentukan yang dibentuk dari type dasar atau dari type bentukan/komposisi yang sudah dibuat.

1. Type Dasar

Type dasar yang tersedia dalam suatu bahasa adalah type yang sudah didefinisikan oleh pemroses bahasa. Karena sudah didefinisikan, maka pemrogram dapat memakai nama type dan semua operator yang tersedia, dan mentaati domain nilai yang disimpan dalam type tersebut. Tipe dasar dalam algoritma adalah bilangan logika, bilangan bulat, bilangan riil dan karakter.

a. Bilangan logika/Boolean

Nama tipe bilangan logika adalah Boolean. Bilangan logika mengenal dua buah nilai, yakni benar (true) atau salah (false). Operasi-operasi yang dapat dilakukan terhadap tipe Boolean dikenal dengan operator logika (not, and, or,

xor)

a Not a

True False False True

a b a and b a or b a xor b

True True True True False True False False True True False True False True True False False False False False

cara mudah mengingat hasil operasi operator Boolean adalah untuk operator

and hanya bernilai benar jika a dan b keduanya bernilai benar, untuk operator

(25)

operator xor akan bernilai benar jika a dan b saling berlawanan nilai kebenarannya.

b. Bilangan bulat/Integer

Nama tipe data bilangan bulat adalah integer. Operasi yang dapat dilakukan pada bilangan bulat adalah operasi aritmatika (*, +, -, /, div, mod) dan operasi perbandingan (<, >, ≥, ≤, =, ≠).

c. Bilangan riil/Real

Bilangan riil adalah bilangan yang mengandung pecahan decimal. Baik tipe bilangan bulat dan bilangan riil, keduannya juga dinamakan tipe numeric

(angka). Nama tipe bilangan riil adalah real. Operasi yang dapat dilakukan pada bilangan riil adalah operasi aritmatika (*, +, -, /), operasi perbandingan (<, >, ≥, ≤, =, ≠). Dalam notasi algoritmik, operator relasional kesamaan tidak berlaku untuk bilangan riil, untuk harga riil harus didefinisikan suatu bilangan kecil ε yangmenyatakan ketelitian perhitungan, termasuk yang disebut dengan "kesamaan".

Pada bahasa pemrograman yang nyata, operator kesamaan bilangan riil mungkin dapat dipakai dengan “baik”, namun harus hati-hati dan sangat spesifik untuk implementasi bahasa tertentu. Dengan alasan ini, pada notasi algoritmik operator kesamaan bilangan riil dianggap tidak ada.

d. Karakter/Character

Yang termasuk ke dalam karakter adalah huruf-huruf alphabet, tanda baca, angka ‘0’, ‘1’,…,’9’, dan karakter-karakter khusus seperti ‘&’,’^’, dan sebagainya. Nama tipe untuk karakter adalah char. Operasi yang dapat dilakukan pada karakter adalah operasi aritmatika (+) dan operasi perbandingan (<, >, ≥, ≤, =, ≠).

2. Type Bentukan

Type bentukan adalah suatu TYPE yang dirancang/dibentuk (dan diberi nama) dari beberapa komponen bertype tertentu, jadi merupakan sekumpulan elemen bertype dasar atau bertype yang sudah dikenal. Type bentukan dibuat/didefinisikan karena perancang program memutuskan bahwa keseluruhan (hasil komposisi) komponen type tersebut mempunyai sebuah makna semantik Ada relasi yang persis antara satu elemen dengan yang lain. Operasi terhadap komponen (elemen) bertipe dasar dilakukan seperti yang didefinisikan pada tipe dasar. Operasi terhadap keseluruhan tipe mungkin didefinisikan atau tidak.

Ada tiga macam tipe bentukan : string, tipe dasar yang diberikan nama dengan nama tipe baru, dan rekaman /record.

a. String

String adalah deretan karakter dengan panjang tertentu. Nama tipe string

adalah string. Operasi yang dapat dilakukan pada string adalah operasi aritmatika (+) dan operasi perbandingan (<, >, ≥, ≤, =, ≠).

b. Tipe dasar yang diberikan nama dengan nama tipe baru

Pemrogram dapat memberi nama baru untuk tipe dasar dengan kata kunci

type.

Contoh : Type

(26)

BilBulat adalah tipe bilangan bulat yang sama dengan tipe integer. Apabila mempunyai sebuah peubah yang bernama p dan bertipe BilBulat, peubah p tersebut sama saja bertipe integer.

c. Rekaman /record

Rekaman disusun oleh satu atau lebih field, tiap field menyimpan dari tipe dasar tertentu atau dari tipe bentukan yang lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram. Karena strukturnya disusun oleh field-field, maka rekaman dinamakan juga tipe terstruktur

(structure type).

field1 field2 …. field N

Contoh.

Titik dalam koordinat kartesian dinyatakan sebagai (x,y), dengan x adalah nilai absis dalam arah sumbu x dan y adalah nilai ordinat dalam arah sumbu y, x dan y anggota R. Kita dapat menyatakan titik sebagai tipe bentukan dengan x dan y sebagai nama fieldnya.

x y

Cara menuliskan tipe Titik :

Type Titik : record <x:real, y:real>

Record menyatakan bahwa Titik adalah tipe rekaman. Jika dideklarasikan P adalah peubah bertipe Titik, maka cara mengacu tiap field pada A adalah

P.x P.y

3.2. Nama

Dalam sebuah teks algoritmik adalah sesuatu yang dipakai sebagai identifikasi : 1. Modul program, algoritma, skema program dsb.

2. Fungsi 3. Prosedur 4. Type

5. Tempat penyimpanan, supaya harga yang disimpan dapat diacu isinya. Dalam beberapa bahasa pemrograman, nama tempat penyimpanan ini seringkali disebut sebagai nama variabel karena isinya dapat diubah-ubah lewat instruksi program. 6. Konstanta, yaitu suatu harga yang tetap dan tidak boleh diubah nilainya

Karena adanya bermacam-macam nama tersebut, maka dalam suatu teks algoritma dikenal nama program, nama skema, nama fungsi, nama prosedur, nama type, nama variabel dan nama konstanta. Semua nama dalam program harus unik, artinya suatu nama hanya didefinisikan satu kali (dipakai sebagai salah satu nama tersebut) satu kali saja. Namun sebuah nama, misalnya nama variabel boleh dipakai berkali-kali dalam beberapa instruksi.

(27)

sebaiknya nama yang dipakai tidak membingungkan, misalnya, dalam teks algoritmik, nama tidak dibedakan dari penulisan dengan huruf kecil/kapital (tidak case sensitive) atau memakai simbol operator sebagai bagian dari nama. Setiap bahasa pemrograman mempunyai aturan yang ketat dalam mendefinisikan nama. Untuk menjaga ketaatasasan, maka algoritma dalam buku ini memiliki aturan penulisan nama sebagai berikut :

1. Nama harus dimulai dengan huruf alphabet, tidak boleh dimulai dari angka, spasi, atau karakter khusus lainnya;

2. Huruf besar atau huruf kecil tidak dibedakan. Jadi, suatu nama yang ditulis dalam huruf besar atau huruf kecil dianggap sama;

3. Karakter penyusun nama hanya boleh alphabet, angka, dan “_” (underscore). 4. Nama tidak boleh mengandung operator aritmatika, operator relasional, tanda

baca, dan karakter khusus lainnya.

5. Karakter-karakter di dalam nama tidak boleh dipisah dengan spasi. Spasi dapat diganti dengan “_”.

6. Panjang nama tidak dibatasi.

3.3. Nilai, Ekspresi, Input & Output

Komputer mampu melakukan operasi aritmetika dan logika terhadap nilai yang disimpan di memori. Di dalam program, nilai disimpan dalam suatu nama “variabel”, sehingga dengan mengacu kepada nama, dapat dilakukan operasi yang diinginkan. Nilai yang disimpan juga dapat diperoleh dari hasil pembacaan dari piranti masukan, serta dapat dikomunikasikan ke dunia luar melalui piranti keluaran. Pada bagian ini dijelaskan notasi yang dipakai untuk mendefinisikan dan melakukan manipulasi nilai.

Nilai (Harga)

Nilai atau harga adalah suatu besaran bertype yang telah dikenal.

Harga dalam suatu algoritma dapat diperoleh dari :

1. Isi suatu nama, yaitu nama informasi atau nama konstanta 2. Hasil perhitungan suatu ekspresi

3. Hasil yang dikirim suatu fungsi

4. Konstanta bernama atau tanpa diberi nama yang dipakai langsung

Harga dapat dimanipulasi:

1. Diisikan ke NAMA informasi (nama variabel) yang mempunyai type sesuai dengan harga tersebut dengan instruksi “assignment”

2. Diacu saja dari suatu nama, untuk dipakai dalam perhitungan atau ekspresi 3. Dibandingkan, sesuai dengan operator pembanding yang tersedia

4. Dituliskan ke piranti keluaran (layar, printer, menyalakan signal, ...) 5. Dipakai dalam ekspresi , tergantung typenya

Pengisian Nilai

(28)

nama konstanta secara otomatis akan memakai harga yang didefinisikan pada kamus tersebut. Tidak demikian halnya dengan nama informasi. Suatu nama informasi dapat dipakai dalam ekspresi jika harganya telah terdefinisi. Ada dua cara untuk mengisi suatu nama informasi dengan harga, yaitu dengan:

1. Assignment, atau

2. Dibaca dari suatu piranti masukan

1. Assignment

Assignment adalah instruksi primitif algoritmik untuk menyimpan harga pada

suatu nama informasi yang isinya boleh bervariasi (“variabel”), dengan perkataan lain adalah memberikan harga pada suatu nama variabel. Dengan pemberian harga ini, harga lama yang disimpan tidak lagi berlaku, yang berlaku adalah harga paling akhir yang diberikan.

<nama1> ← <nama2> { harga dari nama1 disalin ke nama2 }

{ harga nama1 sama dengan harga nama2 setelah instruksi ini }

<nama> ← <konstanta> {harga konstanta diisikan ke nama}

<nama> ← <ekspresi> { hasil perhitungan ekspresi diisikan ke nama }

Dengan syarat :

a. Bagian kiri dan bagian kanan tanda pemberian harga (← ) bertype sama b. <nama> dan <nama1> (bagian kiri tanda ← ) harus merupakan nama

informasi, tidak boleh nama konstanta, type, fungsi atau prosedur

c. Nama yang tertulis di bagian kanan tanda ← (misalnya nama2 atau nama konstanta atau nama yang dipakai dalam ekspresi) boleh berupa nama informasi, nama fungsi, nama konstanta

d. Semua nama yang dipakai dalam assignment tidak boleh berupa nama type atau nama prosedur.

2. Input/read

Selain dengan assignment, suatu harga dapat diisikan ke suatu nama informasi melalui pembacaan harga tersebut dari piranti masukan (keyboard, mouse, scanner, dsb). Disebut “dibaca”, karena arah dari pengisian harga yaitu seakan-akan komputer “membaca” harga yang diberikan pengguna. Pemberian harga dari piranti masukan ini mencakup konsep “menerima nilai” dari piranti masukan apapun, misalnya menerima nilai besaran temperatur dari sebuah sensor temperatur yang dihhubungkan dengan komputer di suatu ruangan.

Algoritma

Input/ Read (list-nama)

Dengan syarat :

(29)

b. nama yang muncul pada list-nama hanya boleh berupa nama informasi, dan tidak boleh nama lain (nama konstanta, type, fungsi atau prosedur)

3. Output/Write

Suatu harga yang disimpan dalam memori komputer (diacu berkat definisi nama informasi (variabel), nama konstanta atau konstanta) harus dapat dikomunikasikan ke dunia luar untuk diinterpretasikan oleh pemakai program. Dalam hal ini, harga harus dapat dituliskan ke suatu piranti keluaran, misalnya layar, printer. Instruksi algortimik yang disediakan untuk menuliskan nama informasi adalah instruksi penulisan output atau write. Instruksi output atau write tidak mengubah nilai yang disimpan.

Algoritma

Output/Write (<list-nama>) { semua harga yang tersimpan dalam setiap nama yang ada pada list-nama akan dituliskan pada piranti keluaran sesuai dengan urutan penulisan nama. Perhatikan bahwa yang dituliskan ke piranti keluaran hanya harga yang disimpan saja }

Output/Write (<konstanta>) { harga konstanta dituliskan ke piranti keluaran } Output/Write (<ekspresi>) { harga hasil perhitungan ekspresi dituliskan ke

piranti keluaran }

Output/Write (<list-nama>, <konstanta>, <ekspresi>) {yang dituliskan ke piranti keluaran adalah semua harga sesuai dengan urutan penulisan nama, konstanta, ekspresi }

Dengan syarat :

a. list nama adalah satu atau lebih nama : boleh nama informasi, nama konstanta atau hasil pemanggilan/aplikasi fungsi. Khusus untuk pemanggilan Fungsi, lihat pemakaian fungsi.

b. nama-nama dalam list-nama tidak boleh berupa nama type atau prosedur c. nama yang akan dituliskan sudah terdefinisi harganya. Jika suatu nama

informasi, didefinisikan dengan assignment atau instruksi input

4. Ekspresi

Ekspresi suatu “rumus perhitungan", yang terdiri dari operan dan operator. Operator yang dituliskan harus didefinisikan untuk mengoperasikan operan bertype tertentu. Hasil perhitungan adalah harga dengan domain yang memenuhi type operator yang bersangkutan. Operan harus mempunyai harga, karena itu dapat berupa konstanta, nama (dalam hal ini yang dipakai dalam perhitungan adalah harga yang dikandung nama ybs.), hasil pengiriman suatu fungsi atau merupakan suatu ekspresi.

a. Ekspresi uner adalah ekspresi dengan operator uner, yaitu operator yang hanya membutuhkan satu operan.

b. Ekspresi biner adalah ekspresi dengan operator biner (membutuhkan dua operan)

(30)

Berikut ini kasus dalam pemakaian Type, Nama, Nilai, Ekspresi, Input & Output. 1. Buat algoritma menghitung keliling lingkaran. KelLing = πr2, r (jari-jari) dibaca

dari keyboard. Keliling lingkaran ditampilkan pada monitor ! Algoritma KelilingLingkaran

{Menghitung keliling lingkaran dengan rumus KelLing = πr2

dengan jari-jari dibaca dari peranti masukan, dan keliling lingkaran ditampilkan pada peranti keluaran}

Deklarasi :

Const π = 3.14 R, KelLing : real Deskripsi :

Read(r)

KelLing ← π*r*r Write (KelLing)

Pada algoritma KelilingLingkaran diatas, terdapat variabel r yang merupakan jari-jari lingkaran sehingga harus dideklarasi pada bagian deklarasi, pemilihan tipe data disesuaikan dengan kebutuhan sehingga dipilih tipe data r adalah real. Selain itu terdapat π yang juga digunakan pada bagian deskripsi, karena nilai π sudah ada ketentuannya maka π dinyatakan sebagai sebuah konstanta.

a. Translasi ke Bahasa Pascal

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman pascal.

program KelilingLingkaran;

{Menghitung keliling lingkaran dengan rumus KelLing = πr2

dengan jari-jari dibaca dari peranti masukan, dan keliling lingkaran ditampilkan pada peranti keluaran}

(*Deklarasi*) var

r, KelLing : real;

Const

npi=3.14;

(*Deskripsi*)

begin

write(‘Jari-jari :’); readln(r); KelLing := npi *r*r;

Write(‘Keliling :’, KelLing); End.

b. Translasi ke Bahasa C

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman Turbo C++.

/* program KelilingLingkaran;

Menghitung keliling lingkaran dengan rumus KelLing = πr2 dengan jari-jari dibaca dari peranti masukan, dan keliling lingkaran ditampilkan pada peranti keluaran

*/

(31)

void main() {

clrscr(); //Deklarasi float r, KelLing; const npi=3.14; //Deskripsi

printf("Jari-jari : "); scanf("%f",&r); KelLing = npi * pow(r,2);

printf("Keliling : %5.1f", KelLing); getch();

}

c. Translasi ke Bahasa Java

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman Java.

public class keliling{

public static void main (String[] args) { double r,kel;

double npi = 3.14; r = 5;

kel = npi * ( r * r); System.out.print(kel); }

}

2. Pada suatu wartel, j1 adalah jam awal bicara dan j2 adalah jam akhir bicara. Buat algoritma untuk menentukan jumlah bayar, bila satu pulsa adalah 15 detik dan biaya per pulsa adalah Rp. 300,-

Penyelesaian :

Data jam disimpan dalam bentuk rekaman (record) yang terdiri dari jam, menit dan detik. Hal ini berarti terlebih dahulu harus dibuat tipe data bentukan, yang diberi nama jam, sehingga j1 dan j2 tipe datanya adalah tipe data jam.

Type jam : record < jj : integer mm : integer dd : integer > j1,j2 : jam

Misalkan j1 = 1:40:45 j2 = 1:50:30

Konversikan j1 ke dalam total detik, diberi nama TotalDetik1, sebagai berikut: TotalDetik1 = ((1*3600)+(40*60)+45) detik = 6045 detik Konversikan j2 ke dalam total detik, diberi nama TotalDetik2, sebagai berikut:

TotalDetik2 = ((1*3600)+(50*60)+30) detik = 6630 detik

j1 = 1:40:45, 1 disimpan dalam jj, 40 disimpan dalam mm, sedangkan 45 disimpan dalam dd. Sehingga TotalDetik1 dapat dibentuk dalam rumus : TotalDetik1 = ((j1.jj*3600)+(j1.mm*60)+j1.dd)

Algoritma Wartel

(32)

bicara, menentukan lama bicara, pulsa yang terpakai dan jumlah yang dibayar oleh pemakai telpon}

Deklarasi :

Type jam : record < jj : integer mm : integer dd : integer > j1,j2 : jam

TotalDetik1, TotalDetik2, LamaBicara : integer Pulsa, Bayar :real

Const BiayaperPulsa = 300 Deskripsi :

Read(j1.jj,j1.mm,j1.dd) Read(j2.jj,j2.mm,j2.dd)

TotalDetik1 ← ((j1.jj*3600)+(j1.mm*60)+j1.dd) TotalDetik2 ← ((j2.jj*3600)+(j2.mm*60)+j2.dd) LamaBicara ← TotalDetik2 – TotalDetik1

Pulsa ← LamaBicara/15 Bayar ← Pulsa*BiayaperPulsa Write(Bayar)

a. Translasi ke Bahasa Pascal

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman pascal.

program Wartel;

{Algoritma ini membaca data jam awal bicara dan jam akhir bicara, menentukan lama bicara, pulsa yang terpakai dan jumlah yang dibayar oleh pemakai telpon}

(*Deklarasi*)

TotalDetik1, TotalDetik2, LamaBicara:integer; Pulsa, Bayar:real;

Const BiayaperPulsa=300;

(*Deskripsi*)

begin

write(‘jam awal :’); readln(J1.jj); write(‘menit awal :’); readln(J1.mm); write(‘detik awal :’); readln(J1.dd); write(‘jam akhir :’); readln(J2.jj); write(‘menit akhir :’); readln(J2.mm); write(‘detik akhir :’); readln(J2.dd);

(33)

b. Translasi ke Bahasa C

Berikut ini adalah translasi dari algoritma pada kasus diatas kedalam bahasa pemrograman Turbo C++.

/* program Wartel;

Algoritma ini membaca data jam awal bicara dan jam akhir bicara, menentukan lama bicara, pulsa yang terpakai dan jumlah yang dibayar oleh pemakai telpon */

#include<stdio.h> #include<conio.h> #include<math.h> void main() {

clrscr(); //Deklarasi struct jamStruct {

int jj; int mm; int dd; } jamnya;

jamStruct J1,J2;

int TotalDetik1, TotalDetik2, LamaBicara; float Pulsa, Bayar;

const BiayaperPulsa=300; //Deskripsi

printf("Jam awal (jj:mm:dd) : "); scanf("%d:%d:%d",&J1.jj,&J1.mm,&J1.dd); printf("Jam akhir (jj:mm:dd) : "); scanf("%d:%d:%d",&J2.jj,&J2.mm,&J2.dd); TotalDetik1 =((J1.jj*3600)+(J1.mm*60)+J1.dd); TotalDetik2 =((J2.jj*3600)+(J2.mm*60)+J2.dd); LamaBicara = TotalDetik2 - TotalDetik1; Pulsa = LamaBicara / 15;

Bayar = Pulsa * BiayaperPulsa;

printf("Lama Bicara : %5d\n",LamaBicara); printf("Jumlah Pulsa : %5.1f\n",Pulsa);

printf("Biaya per Pulsa : Rp. %5d\n",BiayaperPulsa); printf("Jumlah Bayar : Rp. %5.1f\n",Bayar); getch();

}

c. Translasi ke Bahasa Java

(34)

import java.util.Scanner; public class wartel{

public static void main (String[] args) { double TotalDetik1;

double TotalDetik2; double LamaBicara; double Biayapulsa = 300; double pulsa;

double bayar;

System.out.print ("masukkan jam Awal : "); //Input Jam Awal double j1 = new Scanner(System.in).nextDouble();

System.out.print ("masukkan menit Awal : ");//Input Menit Awal double m1 = new Scanner(System.in).nextDouble();

System.out.print ("masukkan detik Awal : "); //Input detik Awal double d1 = new Scanner(System.in).nextDouble();

System.out.print ("masukkan jam Akhir : "); //Input Jam Awal double j2 = new Scanner(System.in).nextDouble();

System.out.print ("masukkan menit Akhir : "); //Input Menit Awal

double m2 = new Scanner(System.in).nextDouble();

System.out.print ("masukkan detik Akhir : "); //Input detik Awal

double d2 = new Scanner(System.in).nextDouble(); TotalDetik1 = ((j1*3600) + (m1*60) + d1);

TotalDetik2 = ((j2*3600) + (m2*60) + d2); LamaBicara = TotalDetik2 - TotalDetik1; pulsa = LamaBicara / 15;

bayar = pulsa*Biayapulsa;

System.out.println("Biaya Pulsa Rp " + bayar); }

} \

Latihan

1. Buat tipe data mahasiswa yang merupakan rekaman terdiri dari nim, nama, dan nilai !

2. Dibaca dua buah titik P1(x1,y1) dan P2(x2,y2). Tulislah algoritma untuk

menghitung titik tengah dari P1 dan P2 !

3. PT, Telkom menentukan lama pulsa dan tarif per pulsa berdasarkan pada kode wilayah, mengikuti tabel berikut :

KodeWilayah Wilayah LamaPulsa (detik) TarifperPulsa

021 Jakarta 13 300

022 Bandung 12 275

0711 Palembang 14 250

Gambar

Gambar 9.1. Tabel Rekaman
Gambar 9.3. Arsip Kosong

Referensi

Dokumen terkait

4l Melakukan dokumentasi dan pencatatan pada kegiatan pengawasan program pembimbingan klien anak berdasarkan hasil rekomendasi penelitian kemasyarakatan untuk tindak

Kriteria tersebut kemudian ditanyakan kepada 5 stakeholders untuk disetujui atau tidak, kemudian berdasarkan hasil wawancara setelah melakukan 3 kali pengulangan

c) Disiplin harus sukarela bukan paksa rela. Kedisiplinan adalah suatu sikap tingkah laku dan perbuatan yang sesuai dengan peraturan dari perusahaan baik tertulis

Hampir semua wilayah pesisir di gorontalo utara memiliki topografi yang tidak rata atau bergelombang, dan akibatnya pengelolaan yang didarat yang menghilangkan daerah penyangga

PERUBAHAN JADWAL UJI WAWASAN SELEKSI TERBUKA JABATAN PIMPINAN TINGGI PRATAMA (ESELON II) DI LINGKUNGAN KEMENTERIAN KESEHATAN..

Berdasarkan hasil penelitian dan analisis data secara umum dapat disimpulkan bahwa pemanfaatan media Virtual Reality berbasis kearifan lokal melalui alat musik

Kompetensi adalah suatu kemampuan (keterampilan, sikap, dan pengetahuan) yang dimiliki seseorang yang dapat menunjukkan kinerja unggul dalam melakukan pekerjaan..

Kegiatan tersebut dilakukan untuk menjaga kualitas kawasan wisata, memberikan kenyamanan dan keamanan pengunjung (Dinas Pariwisata dan Budaya Kabupaten Jepara,2018). Pada hari-hari