Kumpulan Materi Algoritma

49
MANIPULASI NAMA INFORMASI DAN HARGA NAMA Adalah sesuatu yang dipakai untuk mengacu : tempat penyimpanan untuk diacu isinya, variabel dan konstanta fungsi untuk meminta hasilnya prosedur untuk memanggil prosedur yang bersangkutan modul program, algoritma dsbg Semua NAMA harus didefinisikan dalam kamus dan dalam bahasa pemrograman setiap NAMA mempunyai aturan penulisan (Sintaks) tertentu. NAMA karena merupakan satu kesatuan leksikal, maka tidak boleh dipisahkan dengan blank. Penulisan dalam kamus sebaiknya dikelompokkan dan baru dapat diacu jika telah didefinisikan. Nama informasi harus menunjukkan tipe. Pendefinisian nama konstanta sekaligus mmberikan harganya. Contoh pendefinisian nama : KAMUS {Nama Type} Point: Type <X:integer ,Y:integer >{koordinat pada sumbu kartesian} {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} {Nama Konstanta, harus menyebutkan type} PI: constant integer 3.14159 Ka: constant character ’K’ Faktor:constant integer 3 Benar:constant boolean true {Nama Fungsi, menyebutkan domain dan range} IntToReal:Function (i:real ) integer {mengkonversi harga i yang bertipe integer menjadi harga ekivalen yang bertype real}

description

algoritma

Transcript of Kumpulan Materi Algoritma

Page 1: Kumpulan Materi Algoritma

MANIPULASI NAMA INFORMASI DAN HARGA

NAMAAdalah sesuatu yang dipakai untuk mengacu :

tempat penyimpanan untuk diacu isinya, variabel dan konstanta

fungsi untuk meminta hasilnya prosedur untuk memanggil prosedur yang bersangkutan modul program, algoritma dsbg

Semua NAMA harus didefinisikan dalam kamus dan dalam bahasa pemrograman setiap NAMA mempunyai aturan penulisan (Sintaks) tertentu. NAMA karena merupakan satu kesatuan leksikal, maka tidak boleh dipisahkan dengan blank. Penulisan dalam kamus sebaiknya dikelompokkan dan baru dapat diacu jika telah didefinisikan. Nama informasi harus menunjukkan tipe. Pendefinisian nama konstanta sekaligus mmberikan harganya.

Contoh pendefinisian nama :KAMUS{Nama Type}

Point: Type <X:integer,Y:integer>{koordinat pada sumbu kartesian}

{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}

{Nama Konstanta, harus menyebutkan type}PI: constant integer 3.14159Ka: constant character ’K’Faktor:constant integer 3Benar:constant boolean true

{Nama Fungsi, menyebutkan domain dan range}IntToReal:Function(i:real) integer

{mengkonversi harga i yang bertipe integer menjadi harga ekivalen yang bertype real}

{Nama Prosedur}INISIALISASI : procedure {menginisialisasi semua nama

informasi global}TULIS : procedure(input Pesan:string) {menulis isi pesan

ke layar}TUKAR:procedure(input/output:A,B:real) {menukar isi

informasi A dan B}

Page 2: Kumpulan Materi Algoritma

EKSPRESIAdalah suatu rumus ‘perhitungan’, yang terdiri dari operan dan operator . Operator yang dituliskan harus didefinisikan untuk mengoperasikan operator yang bertipe tertentu. Hasil perhitungan adalah harga dengan domain yang memenuhi type operator yang bersangkutan.Operator dapat berupa KONSTANTA, NAMA atau merupakan suatu ekspresi.Ekspresi akan dihitung dengan beberapa perjanjian jika terjadi ketidak cocokan type maupun ketelitian). Hasilnya sesuai dengan TYPE EKSPRESI, ,selanjutnya dapat dimanipulasim ditampilkan pada piranti keluaran atau disimpan dalam suatu NAMA.

Ekspresi dapat dituliskan dalam 3 macam notasi :- Notasi infix :

Operan1 operator operan2- Notasi prefix :

Operator operan operan- Notasi suffix/Polish :

Operan1 operan2 operator

TYPE EKSPRESI sesuai dengan type hasil: logik numerik(aritmatika) string

1. Ekspresi Logik:Hasil: boolean

Operan:Nama atau konstanta bertype logikEkspresi yang hasilnya numerik, karakter atau string

Operator :Operator logik:And (dan)Or (atau)Xor (ekslusive or)Not (negasi)EQ (Equivalensi)nEQ (tidak ekuivalensi)Operator relational/pembanding:

< (lebih kecil) (lebih kecil atau sama dengan)> (lebih besar) (lebih besar atau sama dengan )= (sama dengan) (tidak sama dengan)

Page 3: Kumpulan Materi Algoritma

catatan:khusus untuk operator relasional, jika operannya berupa karakter maka harus didefinisikan dahulu keterurutan himpunan karakter menjadi anggota himpunan tersebut (misalnya pada beberapa bahasa pemrograman, berdasarkan urutan dalam pengkodean ASCII).

2. Ekspresi Numerikhasil : integer atau riilOperan:Nama atau konstanta numerik(integer,riil)Ekspresi yang hasilnya numerik

Operator:* (kali)+ (tambah)- (kurang)/ (pembagian dua buah harga integer menghasilkan sebuah

bilangan riil)div (pembagian dua buah harga integer menghasilkan sebuah

bilangan bulat)mod (sisa pembagian bulat)abs (harga absolut)

^ (pangkat)

3. Ekspresi StringHasil : stringOperan:Nama atau konstanta stringEkspresi yang hasilnya string

Operator: operator:Konstruksi string, dengan operator sbb:. tambah satu karakter di kanan; string x

character string tambah satu karakter di kiri; character string x

string& konkatenasi, menggabung 2 string; string x string

string

Contoh EKSPRESI:Didefinisikan nama dalam kamus sebagai berikut :

Pi: constantareal 3.1714GajiTotal,GajiPokok,Tunjangan,PotGaji:realMID1,MID2:integerUrutan,rangking:integerCC1,CC2: character

Page 4: Kumpulan Materi Algoritma

S1,Message:stringFound:BooleanAddXY:function(X,Y:integer)integer

Maka berikut ini adalah contoh ekspresi dalam notasi infix dan hasilnya. JIKA dan HANYA JIKA nama yang dipakai telah didefinisikan isinya dengan suatu cara pemberian harga pada nama:

Ekspresi Jenis HasilGajiPokok+Tunjangan-PotGajiUrutan-1Urutan*2/rangkingCC1 or CC2Message&S1Found and(urutan>100)Message=’HELLO’(urutan^2)+GajiTotal+ADDXY(MID1,MID2)

NumerikInteger

NumerikBooleanString

BooleanBooleannumerik

HARGAAdalah suatu besaran bertype yang telah dikenal.

Harga dalam suatu algoritma dapat diperoleh dari :- isi suatu nama, yaitu nama INFORMASI atau nama

KONSTANTA- hasil perhitungan suatu ekspresi- hasil yang dikirim suatu FUNGSI- konstanta tanpa diberi nama yang dipakai langsung.

Harga dapat dimanipulasi :- diisikan ke NAMA informasi yang mempunyai type

sesuai dengan harga tersebut- dituliskan ke piranti keluaran (layar,printer,menyalakan

signal,...)- dipakai dalam ekspresi, tergantung typenya- diacu saja dari suatu nama, untuk dipakai dalam

perhitungan atau ekspresi

ASSIGNMENTAdalah menyimpan harga pada suatu NAMA, dengan perkataan lain adalah memberikan harga pada suatu nama. Dengan pemberian harga ini, harga lama yang disimpan tidak lagi berlaku, yang berlaku adalah harga paling akhir yang diberikan.Memprogram secara prosedural pada hakekatnya adalah memanipulasi nama yang mewakili alokasi memori tertentu dan memanipulasinya dengan algoritma yang ditulis. Manipulasi harga NAMA dilakukan dengan assignment.

1. Notasi algoritmik untuk pemberian harga(assignment)

nama1 nama2

Page 5: Kumpulan Materi Algoritma

nama konstantanama ekspresi

dengan syarat:- bagian kiri dan bagian kanan tanda pemberian harga

bertype sama- nama, nama1, dan nama2 adalah nama informasi, tidak

boleh nama KONSTANTA, TYPE,FUNGSI atau PROSEDUR

2. Notasi algoritmik untuk pemberian harga dari piranti masukan

Input(list-nama)

Dengan syarat:- list nama adalah satu atau lebih nama informasi, dan

hanya berupa nama INFORMASI tidak boleh nama KONSTANTA,TYPE,FUNGSI atau PROSEDUR

3. Notasi Algoritmik untuk penulisan harga ke alat keluaran (layar,printer,..)

output(list-nama)output(konstanta)output(ekspresi)output(list-nama,konstanta,ekspresi)

dengan syarat :- list nama adalah satu atau lebih nama : boleh berupa

INFORMASI, nama KONSTANTA atau nama FUNGSI berikut parameternya. Khusus untuk nama Fungsi.

- Nama-nama dalam list-nama tidak boleh berupa nama TYPE atau PROSEDUR

- Nama yang dituliskan sudah terdefinisi- Ekspresi adalah suatu pernyataan yang mengandung

operan dan operator, tergantung kepada type operandnya. Hasil ekspresi adalah setype dengan type operan dan operator yang dapat dieksekusi untuk operan yang bersangkutan harus sesuai dengan operator yang didefinisikan oleh type tersebut.

Contoh1 : HELLO

Pernyataan

Page 6: Kumpulan Materi Algoritma

Tuliskanlah bagaimana algoritma untuk menulis ”HELLO” ke piranti keluaran yang disediakan. Berikut ini diberikan 2 solusi. Pikirkan mana yang lebih baik.Spesifikasi

Input : Output : ’HELLO’Proses: menulis ’HELLO’

HELLO1{menulis “HELLO” ke piranti keluaran}Kamus

Algoritma: Output(‘HELLO”)

HELLO2{menulis “HELLO” ke piranti keluaran}Kamus Pesan:string {nama informasi yang dituliskan pesannya}Algoritma Pesan ’HELLO’ Output(pesan)

Contoh2 : HELLOXPernyataan:Tuliskan algoritma untuk membaca sebuah nama, dan menulis ”HELLO”yang diikuti dengan nama yang diketikkan.Contoh :

Jika dibaca ’ALI’, maka keluarkan adalah : ’HELLOALI’Jika dibaca ’SINTA’, maka keluarkan adalah : ’HELLOSINTA’

SpesifikasiInput : namaOutput : ’HELLO nama’Proses : menulis ’HELLO’ diikuti nama yang dibaca

HELLOX{menulis ”HELLO” berikut nama yang diberikan dari piranti masukan ke piranti keluaran}Kamus Name : string {nama informasi yang dituliskan pesannya}Algoritma Input(name) Output(’HELLO’, name)Apakah bedanya antara contoh ini dengan Contoh1, ditinjau dari eksekusi program?

Contoh3 : JARAKPernyataan:

Page 7: Kumpulan Materi Algoritma

Dibaca dua buah harga v (kecepatan, m/detik) dan t (waktu, detik), yang mewakili koefisien persamaan gerak lurus beraturan. Harus dihitung dan dituliskan hasilnya, jarak yang ditempuh benda yang bergerak lurus beraturan dengan kecepatan v tersebut dalam waktu t.Spesifikasi :

Input: v(kecepatan, m/detik), integer dan t (waktu, detik), integer

Proses:menghitung S=v*tOutput: S (jarak yang ditempuh dalam meter), integer

JARAK1{dibaca v dan t, menghitung S = v*t dan menuliskan hasilnyaKamus v: integer {(kecepatan, m/detik)} t: integer {(waktu,detik)} S: integer {jarak(m) yang ditempuh dalam waktu t dengan kecepatan v Pada gerak lurus beraturan}Algoritma Input(v,t) S v*t Output(S)

JARAK2{dibaca v dan t, menghitung S = v*t dan menuliskan hasilnyaKamus v: integer (kecepatan, m/detik) t: integer (waktu,detik)Algoritma Input(v,t) Output(v*t)

Contoh4: JAMMENITDETIKPernyataan:

Dibaca sebuah harga berupa bilangan bulat, positif, dan lebih kecil dari 1 juta, yang mewakili besaran dalam detik. Harus dihitung ekivalensinya, berapa hari, jam berapa menit dan berapa detik.

Contoh: data 309639 akan menghasilkan 3,14,0,39, yang artinya 3 hari, 14 jam, 0 menit, dan 9 detik.Spesifikasi:

Input: n(detik, integer)Proses: menghitung hari, jam, menit, detik ekivalen dengan nOutput : HARI,JAM,MENIT,DETIK

Analisis: nama-nama informasi yang akan dibutuhkan adalah :n : bilangan yang dibaca sebagai data, integer antara 0

sampai 999999H : HARI, bilangan bulat positif, HARIJ : JAM, bilangan bulat positif antara 0-23

Page 8: Kumpulan Materi Algoritma

M : MENIT, bilangan bulat antara 0-59D : DETIK, bilangan bulat antara 0-59

Rumus : 1 hari=86400 detik; 1 jam = 3600 detik dan 1 menit = 60 detikJAMMENITDETIK{dibaca n(integer), besaran dalam detik}{harus dihitung J(Jam) dan M(Menit) dan D(detik sisanya), dan dituliskan hasilnya}Kamus n : integer[0..999999] {data yang dibaca} H : integer 0 {HARI, bilangan bulat positif} J : integer [0..23] {JAM, bilangan bulat positif antara 0-23} M : integer [0..59] {MENIT, bilangan bulat antara 0-59} D : integer [0..59] {DETIK, bilangan bulat antara 0-59}

rH: integer [0..86399] { sisa detik dalam perhitungan HARI} rJ : integer [0..3599] { sisa detik dalam perhitungan JAM}Algoritma Input(n) {0 n 999999}

H n div 86400; rH n mod 86400; {n=86400 * H + rH and 0 n < 86400} J rH div 3600; rJ rH mod 3600; {n = 86400*H – 3600 * J + rJ and 0 rH < 86400 and 0 rJ < 3600} M rJ div 60; D rH mod 60; {n = 86400*H – 3600 * J + 60 + D and 0 rH < 86400 and 0 rJ < 3600} and 0 M < 60 and 0 D < 60}

Output(H,J,M,D)

Page 9: Kumpulan Materi Algoritma

ARRAY, VEKTOR, TABEL (LARIK)

TYPE ARRAY Adalah type yang bisa mengacu sebuah atau kumpulan

elemen/individu melalui indeks. Elemen dari array dapat diakses langsung jika dan hanya jika

indeks terdefinisi (ditentukan harganya dan sesuai dengan domain yang didefinisikan untuk indeks tersebut).

Struktur data ini dipakai untuk merepresentasikan sekumpulan informasi yang bertype sama, dan disimpan dengan urutan yang sesuai dengan indeks secara kontinyu dalam memori komputer.

Karena itu indeks harus suatu type yang mempunyai keterurutan (ada suksessor dan predesessor), misalnya type integer, karakter.

Jika indeksnya adalah integer, maka keterurutan indeks sesuai dengan urutan integer (suksesor adalah plus satu, dan predesessor adalah minus satu)

Jika indeksnya ditentukan sesuai dengan enumerasi seperti pada karakter, maka keterurutan indeks ditentukan sesuai dengan urutan enumerasi.

Contoh :TabNamaHari : string array [1..7]TabJumlahHari : integerarray [1..12]

Indeks : integer [1..10]Point : Type <x: integer, y : integer>TabTitikSurvey : point array [indeks]

TabFREK :integer array[‘A’..’E’]

Domain : - Domain array sesuai dengan pendefinisian indeks - Domain isi array sesuai dengan jenis array

Konstanta : - Konstanta untuk seluruh array tidak terdefinisi - Konstanta hanya terdefinisi jika indeks dari array terdefinisi

Cara mengacu sebuah elemen : melalui indeksTabNamaHari1, jika i terdefinisiTabNamaHari7, TabJumlahHari3

Contoh Pemakaian Array:Nama hari dalam minggu akan direpresentasikan sebagai

array sebagai berikut, dan harus dituliskan algoritma yang membaca hari ke berapa [1..7], kemudian menuliskan nama harinya.

Contoh : input : 1 output ’Senin’ input : 6 output ’Sabtu’

Page 10: Kumpulan Materi Algoritma

NamaHariKamus : TabelNamaHari : string array[1..7] IsiTabHari : procedure {mengisi tabel nama hari} HariKe : integer[1..7] {nomor dari hari}Algoritma: IsiTabHari Input(HariKe) Output(TabelNamaHariHariKe)

IsiNamaHari{mengisi tabel nama hari}{I.S : TabNamahari tak terdefinisi}{F.S : TabNamaHari siap dipakai, semua elemennya [1..7] sudah diisi}

Kamus lokal: Algoritma: TabelNamaHari1 ’Senin’ TabelNamaHari2 ’Selasa’ TabelNamaHari3 ’Rabu’ TabelNamaHari4 ’Kamis’ TabelNamaHari5 ’Jumat’

TabelNamaHari6 ( ’Sabtu’ TabelNamaHari7 ( ’Minggu’

LATIHAN1. buatlah kembali program untuk menghitung NEXTDAY (pada bagian

FUNGSI) dengan mendefinisikan tabel jumlah hari perbulan dalam setahun. Berapa jumlah hari yang anda tentukan untuk bulan Februari ?

2. Jumlah hari dalam minggu dan jumlah bulan dalam setahun sudah tertentu. Bagaimana jika anda harus mendefinisikan tabel untuk jumlah elemen yang bisa bervariasi? Misalnya tabel yang setiap elemenya mewakili data murid dalam kelas, sedangkan jumlah murid per kelas bervariasi antara 20-100 orang?

Page 11: Kumpulan Materi Algoritma
Page 12: Kumpulan Materi Algoritma

NOTASI PENGULANGAN Salah satu kemampuan komputer yang dapat dimanfaatkan

adalah mengulang suatu instruksi bahkan aksi secara berulang-ulang.

Penulangan terdiri dari dua bagian : kondisi yang mengakibatkan pengulangan suatu saat

berhenti, yang dinyatakan oleh sebuah ekspresi logik baik secara eksplisit maupun implisit.

Badan pengulangan, yaitu aksi yang harus diulang selama kondisi yang ditentukan untuk pengulangan masih dipenuhi.

Pengulangan harus berhenti. (karena harus menggunakan looping yang dibatasi/dipenuhi)

Notasi pengulangan adalah salah satu notasi dasar dalam penulisan algoritma selain analisa kasus. Namun notasi tersebut tidak akan ada artinya bila dikenakan terhadap skema tertentu.

Notasi pengulangan yang berdiri sendiri tidak ada artinya, bahkan menyesatkan karena pada hakekatnya notasi pengulangan hanyalah merupakan sebagian dari skema pengulangan yang akan dibahas pada bab berikutnya.

Ada 5 macam notasi pengulangan 1. Berdasarkan jumlah pengulangan Repeat n times

AKSI

Aksi akan diulang sebanyak n kali. Pengulangan akan berhenti pada suatu saat.

2. Berdasarkan kondisi berhentiRepeat

AKSIUntil kondisi-berhenti

Aksi akan berhenti jika kondisi-berhenti dipenuhi (berharga true), akan diulang jika kondisi berhenti belum tercapai.

Badan pengulangan pada notasi ini (AKSI) minimal akan dilakukan satu kali karena pada waktu eksekusi pengulangan yang pertama tidak ada dilakukan teset terhadap kondisi berhenti.

Test terhadap kondisi berhenti dilakukan setelah AKSI dilaksanakan.

Pengulangan ini berpotensi untuk menimbulkan kebocoran (ada aksi yang dieksekusi tanpa pernah diperiksa kondisi pelaksanaannya), jika ada kemungkinan bahwa seharusnya AKSI tidak pernah boleh dilakukan terhadap kasus tertentu.

3. Berdasarkan Kondisi pengulangan

Page 13: Kumpulan Materi Algoritma

While (Kondisi-Pengulangan) do

AKSI

Aksi akan dilakukan selama kondisi pengulangan masih dipenuhi (berharga true).

Badan pengulangan (AKSI) pada notasi ini mungkin tidak akan pernah dilakukan, karena sebelum aksi pertama dieksekusi dilakukan test terhadap kondisi berhenti.

Test terhadap kondisi berhenti dilakukan setiap kali sebelum aksi dilaksanakan.

Pengulangan ini berpotensi untuk menimbulkan aksi kosong (tidak pernah melakukan apa-apa karena pada test yang pertama, kondisi pengulangan tidak dipenuhi (berharga false).

4. Berdasarkan dua aksiIterate

AKSI 1

Stop (Kondisi-berhenti)

AKSI 2

Pengulangan ini seolah-olah adalah gabungan antara bentuk pengulangan kedua dan ketiga.

Mekanisme yang dilakukan oleh pengulangan ini adalah dengan melakukan secara otomatis AKSI-1 pada eksekusi yang pertama kemudian dilakukan test terhadap kondisi berhenti.

Tergantung kepada kondisi berhenti yang ditest :- aksi-2 akan diaktifkan dan kemudian AKSI-1 yang

berikutnya diulang,- atau pengulangan dihentikan karena efek neto dari

AKSI-1 menghasilkan kondisi berhenti. Pengulangan ini berguna untuk kasus-kasus dimana AKSI-2

merupakan hal yang harus dilakukan tergantung dari hasil AKSI-1.

5. Berdasarkan PencacahNamaTransversal [rangeharga]

AKSI {catatan: nama harus suatu tipe yang terdefinisi suksesor dan

predesessornya}{ setelah pelaksanaan pengulangan selesai, harga yang tersimpan pada nama}{ tidak terdefinisi : jika hendak dipakai, harus

didefinisikan kembali}

Aksi akan dilakukan dengan memperhitungkan harga-harga dari nama yang dijelajahi.

Page 14: Kumpulan Materi Algoritma

Dengan memakai pengulangan ini, pemogram tidak perlu melakukan operasi terhadap suksesor/predesesor karena setiap kali selesai melakukan AKSI, otomatis mesin akan melakukan operasi untuk mendapatkan suksessor dari harga yang sedang berlaku saat itu untuk nama.

Pengulangan otomatis berhenti setelah penjelajahan terhadap nama sudah mencakup semua harga yang terdefinisi dalam range harga.

Harga yang tersimpan pada nama setelah pengulangan selesai dilaksanakan tidak terdefinisi, jika ingin dipakai harus didefinisikan kembali.

Pengulangan ini biasanya dipakai jika harga yang tersimpan dalam nama ingin dimanfaatkan dalam AKSI namun tidak boleh diubah karena akan mengacaukan urutan eksekusi yang dilakukan.Implementasinya pada bahasa pemrograman, pencacah (nama) dikontrol oleh kompilator. Harga yang disimpan pada nama pengulangan selesai dilaksanakan tidak terdefinisi, jika ingin dipakai harus didefinisikan kembali.

HUBUNGAN BERULANG (RECCURENCE RELATION)

Bagian ini menyajikan contoh-contoh pemakaian skema / iterasi untuk persoalan deret yang rumusnya dapat dinyatakan dalam suatu hubungan berulang (reccurence relation)

Sekaligus menunjukkan keterbatasan analisis dan penulisan algoritma yang menyangkut masalah ketelitian representasi bilangan pada komputer.

Untuk melihat efek tersebut, harus dilakukan eksekusi pada mesin.

Contoh 1 : Hitunglah S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000Ide pertama yang muncul adalah menyatakan suku ke-i sebagai :

Si = (-1)i + 1/ i

Maka, dengan menerapkan skemaiterasi sederhana algoritmanya :HITUNGDERET1{Menghitung deret S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000}Kamus i : integer {indeks suku berikut yang akan dihitung} S : real > 0.0 {jumlah deret}Algoritma S 0 {i=0, S=0} i 1 {suku berikutnya yang akan dihitung} while i < 1000 do {S = 1 – ½ + 1/3 – ¼ + ... + (-1) ^ i /(i-1)} S S + (-1) ^ i /(i-1) i i + 1 {i = 1001 and S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000} output(S)

Page 15: Kumpulan Materi Algoritma

Atau dengan sedikit perbaikan :HITUNGDERET2{Menghitung deret S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000}Kamus i : integer {indeks suku berikut yang akan dihitung} S : real > 0.0 {jumlah deret}Algoritma S 1 {i=1, S=1} i 2 {suku berikutnya yang akan dihitung} while i < 1000 do {S = 1 – ½ + 1/3 – ¼ + ... + (-1) ^ i /(i-1)} S S + (-1) ^ i /(i-1) i i + 1 {i = 1001 and S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000} output(S)

pada algoritma diatas, tampaknya sederhana, tapi tidak efisien karena mengandung proses pemangkatan yaitu perhitungan (-1)/(i+1).

Karena proses pemangkatan ini gunanya hanya untuk mengubah tanda dari satu suku ke suku berikutnya, maka harus dipikirkan cara lain yang lebih bagus untuk mengatur perubahan tanda ini.

Pada algoritma berikutnya, dipakai sebuah variabel tambahan TANDA yang harganya berubah-ubah, +1, atau -1.

HITUNGDERET3{Menghitung deret S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000}Kamus i : integer {indeks suku berikut yang akan dihitung} TANDA : [-1,1] {tanda suku deret} S : real > 0.0 {jumlah deret}Algoritma TANDA 1 S 1 {i=1,TANDA=1, S=1} i 2 {suku berikutnya yang akan dihitung} while i < 1000 do {S = 1 – ½ + 1/3 – ¼ + ... + tanda /(i-1)} TANDA - TANDA S S + TANDA /i i i + 1 {i = 1001 and S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000} output(S)

dengan mengartikan nama variabel i sedikit lain dari algoritma sebelumnya, dapat ditulis algoritma sebagai berikut :

HITUNGDERET3{Menghitung deret S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000}Kamus i : integer {indeks suku berikut yang akan dihitung} TANDA : [-1,1] {tanda suku deret} S : real > 0.0 {jumlah deret}Algoritma TANDA 1 S 1/2 {i=2,TANDA=-1, S=1-1/2} i 2 {suku berikutnya yang akan dihitung} while i < 1000 do {Kondisi untuk mengakhiri iterasi, suku 1/1000 sudah terhitung} {S = 1 – ½ + 1/3 – ¼ + ... + tanda /i} i i + 1

Page 16: Kumpulan Materi Algoritma

TANDA - TANDA S S + TANDA /i {i = 1001 and S = 1 – ½ + 1/3 – ¼ + ... + 1/999 – 1/1000} output(S)Contoh 2 : Hitunglah n !Dari definisi

0! = 1 1! = 1

2! = 2 x 1! = 2 x 1 = 23! = 3 x 2! = 3 x 2 = 64! = 4 x 3! = 4 x 6 = 24:n! = n x (n – 1)! = n x (n- 1) x …x 3 x 2 x 1

Hubungan berulang : Fo = 1

Fi = i * Fi-1

Solusi 1 :FAKTORIAL1{Diberikan n, dihitung n!}Kamus i : integer > 1 {indeks F berikut yang akan dihitung} n : integer > 0 {bilangan yang dihitung faktorialnya} F : integer > 1 {harga faktorial yang dihitung}Algoritma Input (n) F 1 {1=0, Fo=1} i 1 {indeks F berikutnya yang akan dihitung} While i < n do {F=(i-1)!} F i * F i i + 1 {i = n-1 and F = n!} output(F)

Solusi 2 :FAKTORIAL2{Diberikan n, dihitung n!, kondisi berhenti berdasarkan loop invariant}Kamus i : integer > 0 {indeks F berikut yang akan dihitung} n : integer > 0 {bilangan yang dihitung faktorialnya} F : integer > 1 {harga faktorial yang dihitung}Algoritma Input (n) F 1 {Fo} i 0 {indeks F berikutnya yang akan dihitung} While i < n do {F=i!} i i + 1 F i * F {i = n and F = n!} output(F)

Contoh 3 : Hitung eksponenHitung eks(x) dengan pendekatan :

Page 17: Kumpulan Materi Algoritma

Sn : Sn = 1 + X + X2/2! + X3/3! + ... + Xn/n!, n > 0

deret diatas adalah deret aditif dengan suku umum : T1 = x i -1 / i! i > 0dengan menerapkan skema umum yang telah dikenal, didapat algoritma sebagai berikut :EXP1{menghitung exp(x) ( 1 + X + X2/2! + X3/3! + ... + Xn/n! }Kamus T : real {suku terakhir dihitung} S : real {jumlah deret} i : integer > 0 {indeks suku yang terakhir dihitung}

Algoritma T ( 1 {To} S T i ( 0 While not P (S,T, i) do {kondisi berhenti P(S,T,i) akan diperinci lebih lanjut} i ( i + 1 T( x ^i /FACT (i) {FACT(n) adalah fungsi untuk menghitung n!} S ( S + T {i = n-1 and F = n!} output(S)

Contoh 4: Hitung SinusHitung sin(x) dengan pendekatan :

Sn : Sn = X – X3/3! + X5/5! - ... + (-1)i-1 X2n-1/(2n-1)!, n > 1

sin(x) ( X – X3/3! + X5/5! - ... Suku umum dapat ditulis sebagai : t1 = (-1)i-1 x2i-1/(2i-1)SIN1{menghitung sin(x) ( X - X3/3! + X5/5! - ... }Kamus T : real {suku terakhir dihitung} S : real {jumlah deret} i : integer > 0 {indeks suku yang terakhir dihitung}Algoritma i x {Tt} S T i 1 While not P (S,T, i) do {kondisi berhenti P(S,T,i) akan diperinci lebih lanjut} i i + 1 T (-1)**(i-1)*(x^(2*i-1)) /FACT (2*i-1) {FACT(n) adalah fungsi untuk menghitung n!} S S – T {deret aditif} output(S)

seperti pada contoh S = 1-1/2+1/3 -.... algoritma-algoritma ini menyangkut perhitungan suku ke-i secara langsung yang sangat tidak efisien dan memakan waktu. Pada hampir semua kasus kita dapat memanfaatkan hasil perhitungan

Page 18: Kumpulan Materi Algoritma

sebelumnya. Maka mula-mula kita definisikan hubungan berulang untuk setiap suku :

To = harga awalTi = f(Ti-1) i>0

AtauTo = harga awalTi = f(Ti-1, i) i>0

Sehingga skema umum menjadi :Skema umum 1 :HITUNGDERET1{Menghitung deret S = t0 + t1 + t2 + … + tn atau S = t0 * t1 * t2* …*tn}KamusT : real {suku terakhir dihitung}S : real {jumlah deret} Algoritma T To S T While not P (S,T) do T f(T) {f(T) adalah fungsi yang menghitung harga T baru berdasarkan T yang lama} S g(S,T) {g(S,T) adl fungsi yang mengubah harga S berdasarkan S yang lama dan T} {S adalah hasil yang diinginkan}Skema umum 2 :HITUNGDERET2{Menghitung deret S = t0 + t1 + t2 + … + tn atau S = t0 * t1 * t2* …*tn}KamusT : real {suku/faktor terakhir dihitung}S : real {jumlah deret aditif/multiplikatif} i : integer > 0 {indeks suku/faktor yang terakhir dihitung}Algoritma T To S T i 0 While not P (S,T) do {loop invariant : S = + t1 + t2 + … + ti atau S = t0 * t1 * t2* …*ti } i i +1 T f(T, i) {f(T) adalah fungsi yang menghitung harga T baru berdasarkan T yang lama dan i} S g(S,T,i) {g(S,T, i) adl fungsi yang mengubah harga S berdasarkan S yang lama, T dan i}

{S adalah hasil yang diinginkan} maka untuk algoritma hubungan berulang menghitung

pendekatan exp(x):

exp(x) 1 + X + X2/2! + X3/3! + ... + Xn/n!, n > 0

1 + X + X2/2! + X3/3! + ... + Xn/n!, kita dapatkan :Hubungan berulang : To = 1 Ti = Ti-1 * XnKondisi berhenti : [T] <

Page 19: Kumpulan Materi Algoritma

Sehingga algoritmanya menjadi :EXP2{menghitung exp(x) ( 1 + X + X2/2! + X3/3! + ... + Xn/n! }Kamus T : real {suku terakhir dihitung} S : real {jumlah deret} i : integer > 0 {indeks suku yang terakhir dihitung}

Algoritma T 1 {To} S T i 0 While abs(T) > do i i + 1 T T * x/i S S + T output(S)

dan untuk perhitungan sin(X) dengan :Ti = (-1)2i-1 * x 2i-1 / (2i-1)!

Lebih disukai suatu variabel k sehingga :Ti = - Ti * x2 Ki(Ki-1)Ki = Ki – 1 + 2To = xKo = 1

Kondisi berhenti : [T] < * [S]Algoritmanya menjadi :

SIN2{menghitung sin(x) ( X - X3/3! + X5/5! - ... }Kamus T : real {suku terakhir dihitung} S : real {jumlah deret} k: [1,3,5,…] {indeks suku yang terakhir dihitung}Algoritma k 1 T x{T1} S T While abs(T) > * abs(S) do k k - 2 T (-T)*x * x (k*k-1) S S – T {deret aditif} output(S)

Page 20: Kumpulan Materi Algoritma

PROSEDUR

Definisiadalah sederetan instruksi algoritmik yang diberi nama, dan

akan menghasilkan efek netto yang terdefinisi.Prosedur menyatakan suatu aksi dalam konsep algoritma yang dibicarakan pada bab I.

Mendefinisikan prosedur menentukan nama prosedur serta parameternya, mendefinisikan state awal (inisial State, I.S.) mendefinisikan state akhir (Final State, F.S) dari prosedur tersebut.

Prosedur mendefinisikan dalam Kamus.Cara penulisannya diberi nama dan parameter formal (jika ada) yang juga diberi nama dan dijelaskan typenya.

Parameter formal adalah nama-nama yang dipakai dalam mendefinisikan Prosedur dan membuat prosedur tersebut dapat dilaksanakan dengan nama yang berbeda ketika dipanggil adalah list nama yang akan dipakai pada prosedur yang nantinya akan tertentu harganya pada saat pemanggilan dapat berupa :

- input- output- input/output

Memakai atau memanggil prosedur adalah :- menuliskan nama prosedur yang pernah didefinisikan, - dan memberikan harga-harga yang dibutuhkan oleh

prosedur itu untuk dapat melaksanakan suatu aksi terdefinisi. Sebuah prosedur juga boleh ”memakai” atau memanggil prosedur.

Parameter aktual adalah nama-nama informasi yang dipakai ketika prosedur itu dipakai (”dipanggil”). Parameter aktual dapat berupa nama atau harga, tetapi harus berupa nama jika parameter tersebut adalah untuk Output.

Page 21: Kumpulan Materi Algoritma

Prosedur dapat mempunyai kamus lokal,yaitu Pendefinisian nama yang dipakai dan hanya berlaku dalam

ruang lingkup prosedur tersebut. Jika nama yang dipakai di dalam prosedur tidak terdefinisi

dalam, list parameter formal atau dalam kamus lokal, maka nama tersebut harus sudah terdefinisi pada prosedur yang memakainya.

Penulisan kamus lokal sama dengan kamus global, yang berbeda adalah lingkup berlakunya nama yang didefinisikan :

Pada kamus global, nama berlaku untuk program dan semua prosedur/fungsi yang didefinisikan

Pada kamus lokal, nama berlaku untuk prosedur/fungsi yang bersangkutan dan prosedur fungsi yang didefinisikan di dalamnya.

Program yang moduler adalah program yang dibagi-bagi menjadi modul-modul yang

terdefinisi dengan baik dalam bentuk prosedur-prosedur. Setiap prosedur harus jelas definisi dan ruang lingkupnya,

supaya dapat dipanggil secara independent Pembagian program besar dalam prosedur-prosedur akan

mempermudah pembagian kerja di antara beberapa pemrogram.

Penulisan prosedur juga akan memudahkan program untuk dibaca oleh manusia karena kita tidak perlu terpaku pada detil kode prosedur untuk mengerti efek neto yang dihasikannya.

Bahkan dalam beberapa hal,pemrogram tidak perlu tahu sama sekali isi atau kode dari prosedur dengan mengetahui spesifikasinya, beberapa bahasa pemrograman bahkan menyediakan prosedur terdefinisi yang sering dipakai dalam memrogram sehingga pemrogram tidak perlu lagi menuliskan kodenya.

Prosedur berlaku untuk ruang lingkup (universe) tertentu. Dalam 2 bab berikut, yaitu mesin gambar dan mesin karakter, akan diberikan gambaran lebih jelas dan lengkap tentang pendefinisian dan pemakaian prosedur karena keduanya adalah mesin abstrak yang tertentu.

Notasi algoritmik untuk prosedur1. Pendefinisian prosedurNAMA PROSEDUR:Procedure(input/Output:[list nama parameter formal:type]){Spesifikasi, Initial state, Final State}Kamus lokal:{semua NAMA yang dipakai dalam BADAN PROSEDUR}

Page 22: Kumpulan Materi Algoritma

Algoritma:

{BADAN PROSEDUR}{deretan instruksi pemberian harga, input, output, analisa kasus, pengulangan atau prosedur}

Dengan syarat:- nama prosedur dan parameternya harus disebutkan dalam

kamus pemanggil- list parameter formal tidak boleh tidak ada (kosong), dalam

hal ini di dala prosedur akan dipakai nama lokal dan nama-nama yang telah terdefinisi dalam kamus ”pemakainya”

- jika list parameter formal ada (tidak kosong, minimal satu nama), maka harus berupa satu atau beberapa nama INFORMASI beserta typenya.

2. Pemanggilan ProsedurPOKOKPERSOALAN’{Spesifikasi, input, Proses, Output}Kamus:{semua NAMA yang dipakai dalam algoritma} NAMA PROSEDUR: procedure(Input/Output[list-nama parameter formal]) {spesifikasi: InitialState, FinalState}

Algoritma:{deretan instruksi pemberian harga, input, output, analisa kasus, pengulangan}

NAMA PROSEDUR (list parameteraktual)Dengan syarat :

- pada waktu pemanggilan terjadilah korespondensi antara parameter formal dengan parameter aktual sesuai dengan urutan penulisan dalam list-nama parameter formal.

- List parameter aktual harus sama, jumlah, urutan dan typenya deengn list parameter normal

- List parameter aktual yang berupa input dapat berupa nama INFORMASI atau KONSTANTA yang telah terdefinisi dalam kamus atau konstanta; dapat juga berupa harga konstanta, atau harga yang dihasilkan oleh suatu ekspresi atau fungsi.

- List parameter aktual yang berupa output harus berupa INFORMASI. Jika didefinisikan sebagai input, walaupun pernah diubah dalam badan prosedur, isi dari nama yang dipakai pada parameter aktual tidak pernah berubah. Jika didefinisikan sebagai Output dan parameter formal korespondensinya pernah diubah harganya dalam badan prosedur, isinya akan berubah.

Page 23: Kumpulan Materi Algoritma

Contoh1 : VOLTAGETuliskanlah program yang membaca tahanan(ohm) dan

arus(Ampere), kemudian menghitung tegangan yang dihasilkan dan menuliskan hasilnya. Perhitungan tegangan harus dituliskan menjadi suatu prosedur bernama PROSES, supaya struktur program jelas: input-proses-output.

Input: R: integer,tahanan(Ohm) dan A: integer, arus (Ampere)Proses: menghitung V= R * AOutput: V:integer, tegangan (volt)

Pelajarilah dua buah solusi yang diberikan berikut ini, dan berikan komentar anda.Solusi 1:VOLTAGE1 0.0{Program yang membaca tahanan dan arus, menghitung voltage dan mencetak hasil perhitungan}Kamus: R : integer {tahanan dalam ohm} A : integer {arus dalam ampere} V : integer {tegangan dalam volt} PROSES1: procedure {prosedur untuk memproses tahanan dan arus menjadi tegangan}

Algoritma: Input(R,A) PROSES1 Output(V)

PROSES1:procedure 0.1{I.S: diberikan harga R dan A yang telah terdefinisi}{F.S: memproses R dan A sehingga dihasilkan V yaitu tegangan dengan rumus: V = R*A}Kamus Lokal :

Algoritma: V R*ASolusi 2:VOLTAGE2 0.0{Program yang membaca tahanan dan arus, menghitung voltage dan mencetak hasil perhitungan}Kamus: R : integer {tahanan dalam ohm} A : integer {arus dalam ampere} V : integer {tegangan dalam volt} PROSES2: procedure(input: A,R: integer, OutputV: integer)

Page 24: Kumpulan Materi Algoritma

{prosedur untuk memproses tahanan(R) dan arus(A) menjadi tegangan(V)}

Algoritma: Input(R,A) PROSES2(A,RV) Output(V)

PROSES1:procedure(input: A,R: integer, OutputV: integer) 0.1{I.S: diberikan harga R dan A yang telah terdefinisi}{F.S: memproses R dan A sehingga dihasilkan V yaitu tegangan dengan rumus: V = R*A}Kamus Lokal :

Algoritma: V R*A

Contoh2:Prosedur untuk menukar dua harga yang disimpan dalam dua nama a dan bI.S. : diberikan a=A dan b=BF.S. : a=B dan b=ATUKAR{program yang membaca dua buah harga x dan y, menyimpan dan kemudian menukarnya}

Kamus:x,y: integerPROCTUKAR:procedure(input/output:a,b:integer){prosedur untuk menukar dua buah harga yang tersimpan dalam dua nama se-type}{IS: diberikan a=A dan b=B}{FS: a=B dan b=A}

Algoritma: Input(x,y) PROCTUKAR(x,y) Ouput(x,y)

PROCTUKAR: procedure(input/output: a,b : integer){IS: diberikan a=A dan b=B}{FS: a=B dan b=A}Kamus Lokal: Temp:integerAlgoritma: Temp a {Temp=a; a=a; b=b} a b {Temp=a; a=b; b=b} b Temp {Temp=a; a=b; b=a}

Page 25: Kumpulan Materi Algoritma

Contoh3. PUTAR3BILGunakan prosedur TUKAR untuk menulis prosedur yang

memutar 3 buah nama integer.Contoh :

Jika a berisi 1, b berisi 2, dan c berisi 3, maka hasilnya adalah: A berisi 3, b berisi 1, dan c berisi 2.PUTAR3BIL:Procedure(Input/Output a,b,c : integer){IS: diberikan a=A dan b=B dan c=C}{FS: a=C dan b=A, c=B}Kamus Lokal:

Algoritma {a=A, b=B, c=C} PROCTUKAR (a,c) {a=C, b=B, c=A} PROCTUKAR (b,c) {a=C, b=A, c=B}

Contoh di atas adalah contoh sebuah prosedur yang memakai sebuah prosedur lainnya.

Catatan:Contoh-contoh diatas tidak terlalu mewakili daya guna penulisan prosedur dengan nyata pada bagian-bagian berikutnya akan terlihat lebih nyata manfaat penulisan prosedur, yang membuat :

program mudah dibaca prosedur yang sama dipakai berkali-kali sehingga mengurangi

penulisan yang berulang.

Latihan Soal :1. kerjakan kembali soal-soal pada bagian sebelumnya, dengan

mendefinisikan prosedur, jika memang sesuai.2. apa beda prosedur dan fungsi?3. tuliskan sebuah prosedur yang menukar isi yang tersimpan

pada dua buah nama X dan Y (keduanya bertype integer) tanpa memakai nama lain. Mungkinkah hal ini dilakukan jika X, Y bertype bukan integer?

Page 26: Kumpulan Materi Algoritma

FUNGSI

DefinisiFungsi adalah sebuah mesin abstrak yang :

- menghasilkan suatu harga yang sesuai dengan domain yang didefinisikan pada spesifikasinya

- menerima suatu harga dengan tipe tertentu dan menghasilkan keluaran sesuai dengan domain yang didefinisikan dalam spesifikasinya.

Dalam penulisannya, fungsi diberi nama, dan parameter formal yaitu harga masukkan yang juga diberi nama dan dijelaskan typenya.Fungsi harus didefinisikan dalam kasus.

Contoh fungsi :Fungsi f(x) dalam matematika yang didefinisikan sebagai :

F(x) = x2 + 3x -5Jika diberi harga x =4 maka f(x) akan menghasilkan 23Jika diberi harga x= 1 maka f(x) akan menghasilkan -1

F(x,y) = x2 + 3xy -5y -1Jika diberi harga x = 0 dan y=0 maka f(x) akan menghasilkan

-1Jika diberi harga x= 1 dan y=0 maka f(x) akan menghasilkan 0

Notasi algoritmik untuk fungsi

1. Pendefinisian fungsiNAMAF:function ([list-parameterinput]) [type hasil]{spesifikasi fungsi}Kamus Lokal:{semua NAMA yang dipakai dalam algoritma dari prosedur}Algoritma:

{deretan instruksi pemberian harga, input, output, analisa kasus, pengulangan}

{pengiriman harga di akhir fungsi, harus sesuai dengan type hasil} hasil

Dengan syarat:- list parameter input boleh tidak ada (kosong), dalam hal ini di

fungsi tidak membutuhkan apa-apa dari pemakainya untuk menghasilkan harga.

Page 27: Kumpulan Materi Algoritma

- Jika list parameter input (parameter FORMAL) ada: tidak kosong, minimal satu nama, maka harus berupa satu atau beberapa nama INFORMASI beserta typenya.

- Pada akhir dari FUNGSI, harga yang dihasilkan oleh fungsi dituliskan seperti pada notasi diatas, type hasil boleh type dasar atau type terstruktur.

2. Pemanggilan fungsiPOKOK PERSOALAN{Spesifikasi : Input, Proses, Output}Kamus:{semua NAMA yang dipakai dalam algoritma}

NAMAF:Function([list nama parameter input]) [type hasil] {spesifikasi fungsi}

Algoritma:

{deretan instruksi pemberian harga, input, output, analisa kasus, pengulangan yang memakai fungsi}{harga yang dihasilkan fungsi juga dapat dipakai dalam ekspresi} nama NAMAF([list parameter aktual]) output(NAMAF([list parameter aktual]))

{harga yang dihasilkan fungsi juga dapat dipakai dalam ekspresi}

- pada waktu pemanggilan terjadilah korespodensi antara parameter input dengan parameter aktual sesuai dengan urutan dalam list-nama parameter input.

- List parameter input dapat berupa nama INFORMASI atau KONSTANTA yang telah terdefinisi dalam kamus atau konstanta: dapat juga berupa harga konstanta, atau harga yang dihasilkan oleh suatu ekspresi atau fungsi.

- List paramete aktual harus sama jumlah, urutan, dan typenya dengan list parameter input pada pendefinisian fungsinya.

- Harga yang dihasilkan oleh fungsi dapat didefinisikan domainnya yang lebih rinci

- Pada akhir dari eksekusi FUNGSI, harga yang dihasilkan oleh fungsi dikirimkan ke pemakainya.

- Fungsi boleh dipakai oleh program utama, prosedur atau fungsi lain.

Fungsi terdefinisi:Adalah fungsi yang sudah diberikan oleh sistem, dan tinggal

dipakai (dipanggil). Fungsi terdefinisi selalu memberikan daftar dan spesifikasinya (domain + range).Contoh :

- fungsi terdefinisi untuk melakukan konversi tipe.

Page 28: Kumpulan Materi Algoritma

Seringkali, dibutuhkan konversi dari bilangan riil menjadi integer atau sebaliknya. Maka didefinisikan dua buah fungsi konversi bilangan numerik sebagai berikut :RealToInteger:Function(x:real) integer{mengkonversi harga x bertype real menjadi harga lain yang bertipe integer dengan pemotongan, yaitu menghilangkan bagian di belakang titik desimalnya}

IntToReal:Function(i:integer) real{mengkonversi harga I yang bertype integer menjadi harga ekivalen yang bertype real}

- Fungsi-fungsi seleksi terhadap sebuah string:AWAL : function (S:string) string{mengambil sisa string S tanpa karakter terakhir}

AKHIR : function (S:string) string{mengambil sisa string S tanpa karakter pertama}

FIRSTCHAR : function (S:string, tidak kosong) character{Karakter pertama string S}

LASTCHAR : function (S:string, tidak kosong) character{Karakter terakhir string S}

- Fungsi-fungsi untuk memperoleh informasi tentang sebuah string:

LONG : function (S:string) integer {panjang string S}

KOSONG : function (S:string) boolean{true jika S adalah string kosong}

- Fungsi suksessor dan predesesor untuk integerSucc: function (x:integer) integer{memberikan suksesor x, x+1}

Pred: function (x:integer) integer{memberikan suksesor x, x-1}

contoh:Succ(0)=1Succ(-1)=0Succ(5)=6Pred(-1)=-2Pred(3)=2

- Fungsi matematikSin: function (x:real) real

Page 29: Kumpulan Materi Algoritma

{memberikan sinus (x), x dalam radian}

Cos: function (x:real) real{memberikan Cosinus (x), x dalam radian}

Abs: function (x:real) real{memberikan |x|}

contoh penulisan algoritmikPendefinisian FungsiFX-KUADRAT:Function(x:integer) integer{diberikan x, integer, menghitung f(x) = x2 + 3x -5}Kamus Lokal:

Algoritma:

(x*x + 3*x -5)

FXY:Function(x,y:real) real{diberikan x dan y, riil, menghitung f(x) = x2 + 3xy -5y -1}Kamus Lokal:

Algoritma:

(x*x+3*x*y-5y-1)

Pemanggilan fungsiCONTOHF1{dibaca x dan y, menghitung:f(x) = x2 + 3x -5}{ :f(x,y) = x2 + 3xy -5y -1}{dan menuliskan hasil perhitungan}Kamus: x: integer {data} y: real {data} FX: integer{hasil perhitungan f(x) = x2 + 3x -5} FY: real{hasil perhitungan f(x,y) = x2 + 3xy -5y -1} FXY: function (x,y:real) real {diberikan x, menghitung f(x) = x2

+ 3xy - 5y -1} FX-KUADRAT:function (x:integer) integer {diberikan x, menghitung :f(x) = x2 + 3x -5}

Algoritma Input(x,y) FX FX-KUADRAT(x) FY FXY(intToReal(x),y) Output(FX,FY)

Page 30: Kumpulan Materi Algoritma

CONTOHF2{dibaca x dan y, menghitung:f(x) = x2 + 3x -5}{ :f(x,y) = x2 + 3xy -5y -1}{dan menuliskan hasil perhitungan}Kamus: x,y: integer {data} FXY: Function (x,y:real)real {diberikan x,menghitung f(x)= x2 + 3xy -5y -1} FX-KUADRAT:function (x:integer) integer {diberikan x, menghitung :f(x) = x2 + 3x -5}

Algoritma Input(x,y) FX FX-KUADRAT(x) FY FXY(intToReal(x),y) Output(FX-KUADRAT(x), FXY(intToReal(x),y))

Contoh1 : KONVERSITuliskan sebuah fungsi, yang mengkonversikan harga karakter

angka (nol sampai dengan 9) menjadi harga numerik sesuai dengan karakter yang tertulis.

Contoh : ’0’ 0 ’8’ 8

Spesifikasi:FungsiKarakterToInteger:Input:x:character[’0’ .. ’9’]Hasil:integer[0..9]Proses: analisa kasus terhadap x, untuk setiap harga x diasosiasikan integer

yang sesuai.KarakterToInteger:function(x:character[’0’ .. ’9’]) integer[0..9]{diberikan x berupa karakter, mengirimkan harga integer yang sesuai dengan penulisan pada karakter}Kamus Lokal:

Algoritma: Depend on (x) X=’0’ : 0 X=’1’ : 1 X=’2’ : 2 X=’3’ : 3 X=’4’ : 4 X=’5’ : 5 X=’6’ : 6 X=’7’ : 7 X=’8’ : 8 X=’9’ : 9

Contoh2 : APAKAH HURUF ‘A’

Page 31: Kumpulan Materi Algoritma

Pernyataan:Tuliskanlah fungsi IsAnA yang mentest apakah sebuah

karakter yang diberikan kepadanya adalah sebuah huruf ’A’. Harga yang dihasilkan adalah benar jika huruf itu ’A’, salah jika huruf itu bukan ’A’.Contoh : IsAnA(’A’) true

IsAnA(’X’) false IsAnA(’Y’) false

Spesifikasi:Fungsi IsAnA:Input: x(karakter)Hasil:booleanProses:membandingkan x dengan ’A’

IsAnA:Function(x:character) boolean{mentest apakah x adalah ’A’)Kamus Lokal:

Algoritma: (x=’A’)

IsAnA:Function(x:character) boolean{mentest apakah x adalah ’A’)Kamus Lokal:

Algoritma: Depend on (x) x=’A’ : true x’A’ : false

Contoh3: HITUNG METER+CMPernyataan:

Tuliskanlah sebuah fungsi, yang jika diberikan sebuah angka Cm yang menyatakan panjang dalam cm, akan menghasilkan pasangan harga <x1,x2> sesuai dengan rumus ukuran metris (1 m = 100 cm), sehingga x1 * 100+ x2 = cm

Contoh : F(100) = <1.0> F(355) = <3.55>

Spesifikasi:FungsiKonversiCm:Input:Cm:integerHasil:pasangan harga integerProses:menghitung Meter dan SisaCm sehingga

Cm=100*meter + SisaCm Sehingga Cm=100*Meter+ Sisa Cm.

Page 32: Kumpulan Materi Algoritma

KonversiCm:function(Cm:integer) <integer,integer>{diberikanCm, mengubahnya menjadi beberapa meter dan cm}Kamus Lokal: Meter:integer {meter} SisaCm:integer {sisa cm}Algoritma: Meter Cm div 100 SisaCm Cm mod 100

<meter, SisaCm>

Contoh4: UbahdanPeriksaKarTuliskanlah algoritma yang membaca sebuah karakter dan

mengubahnya menjadi integer yang sesuai dengan karakter itu jika karakter yang dibaca adalah antara ’0’ dan ’9’. Jika bukan didalam daerah harga nol dan sembilan, maka harus dituliskan pesan yang berbunyi: ’Bukan Angka’

Spesifikasi:Input: CckarakterOutput:menuliskan:

Integer[0..9] sesuai dengan karakter yang dibaca, jika karakter

[0..9] ’Bukan angka’ jika CC bukan angkaProses: Konversi dari karakter ke integer, jika CC[’0’ .. ’9’]

Dengan catatan fungsi konversi adalah seperti terdefinisi pada contoh1

UbahdanPeriksaKarKamus CC : character {data, karakter yang dibaca}

KarakterToInteger:Function(x:character[’0’..’9’]) integer[0..9]{diberikan x berupa karakter ’0’..’9’, mengirimkan harga integer yang sesuai dengan penulisan pada karakter}Algoritma: Input(cc) Depend on (CC) CC [‘0’..’9’] : ouput(KarakterToInteger(CC)) CC [‘0’..’9’] : ouput(’Bukan Angka’)

Contoh5: HITUNG FUNGSIPernyataan

Tuliskanlah algoritma yang membaca 3 bilangan bulat (a,b,c), dan menghitung: 6*(ax2 +bx+c) untuk x=1

Page 33: Kumpulan Materi Algoritma

SpesifikasiInput:a,b,c bilangan bulat, koefisien persamaan kuadrat, x=1Output: FxProses: menghitung Fx= 6*(ax2 +bx+c)

Menuliskan hasilHITUNGFUNGSIKamus: a,b,c : integer {data, koefisien persamaan kuadrat} Fx: integer {hasil perhitungan persamaan} FungsiKUADRAT:function(a,b,c,x:integer) integer {diberikan a,b,c,x menghitung f(x) = ax2 +bx +c}

Algoritma: Input(a,b,c) Fx 6*fungsiKUADRAT(a,b,c,1) Output(Fx)

FungsiKUADRAT:function(a,b,c,x:integer) integer{diberikan a,b,c,x menghitung f(x) = ax2 +bx +c}Kamus Lokal:

Algoritma: (a*x*x + b*x –c)

LATIHAN SOAL FUNGSI

1. Hitung fungsi linier dan patah-patahTuliskanlah sebuah fungsi bernama FLINIER yang menerima

input sebuah bilangan dan menghitung harga f(x) sesuai dengan kurva sebagai berikut:

2. MAX3Tuliskanlah fungsiMAX2, dengan spesifikasi:MAX2: function(a,b : integer) integer{jika a b maka fungsi akan mengirim a,jika sebaliknya akan

mengirim b}Kemudian dengan memakai fungsi MAX2, tuliskanlah

sebuah fungsi lain MAX3 dengan spesifikasi:MAX3:function(a,b,c:integer) integer

Contoh: MAX2(1,2) 2 MAX2(10,2) 10

MAX3(1,2,3) adalah MAX2(MAX2(1,2),3) 3MAX3(10,2,3) adalah MAX2(MAX2(10,2),3) 10

3. PANJANGSTRING

Page 34: Kumpulan Materi Algoritma

Pelajarilah fungsi terdefinisi untuk type ‘string’. Dengan hanya menggunakan operator o,=, dan fungi terdefinisi AKHIR, tuliskanlah sebuah fungsi bernama PANJANGSTRING yang menerima input sebuah string, dan mengirimkan bilangan bulat, yang menyatakan banyaknya karakter pada string input. Andaikan fungsi terdefinisi LONG tidak ada, sehingga anda harus menuliskannya sendiri.Contoh : PANJANGSTRING (’AKU ini mahasiswa’) 17

PANJANGSTRING (’’) 0

4. HITUNGANPelajarilah fungsi terdefinisi untuk type ”string”. Dengan

hanya menggunakan operator o, =, dan fungsi terdefinisi AKHIR, tuliskanlah sebuah fungsi bernama HITUNGAN yang menerima input sebuah string, dan mengirimkan bilangan bulat, yang menyatakan banyaknya huruf ”A” pada string input.Contoh: HITUNGAN(’AKU’) 1

HITUNGAN(’HARI INI AKU SENANG’) 3

5. SAMAPelajarilah fungsi terdefinisi untuk type ”string”. Dengan

hanya menggunakan operator o, =, serta fungsi terdefinisi AKHIR dan LONG, tuliskanlah sebuah fungsi bernama SAMA yang menerima input dua buah string, dan mengirimkan harga boolean (true jika kedua string input itu sama, atau false jika tidak sama)Contoh: SAMA(’AKU’,’AKU’) true

SAMA(”,’AKU) false

6. NEXTDAYBuatlah algoritma yang :

- membaca sebuah tanggal dan kode bahasa penulisan (1=inggris, 2=indonesia, 3=prancis),

- menuliskan tanggal keesokan harinya sesuai dengan kode bahasaDalam bahasa inggris DATE ditulis dalam: Bulan,’/’,Tanggal,’/’, TahunDalam bahasa indonesia DATE ditulis dalam: Tanggal,’-’,Bulan,’-’, TahunDalam bahasa prancis DATE ditulis dalam: Tanggal,’/’,Bulan,’/’, Tahun

Tuliskan sebuah fungsi yang menerima sebuah ”tanggal” (hari-bulan-tahun),dan menghasilkan tanggal keesokan harinya untuk persoalan tersebut.

Jawaban latihan soal ;MAX2:function(a,b:real) real{diberikan a dan b, mengirim a jika ab, mengirim b jika b>a}Kamus Lokal:

Page 35: Kumpulan Materi Algoritma

Algoritma: Depend on(a,b) ab: a b>a: b

MAX3:function(a,b,c:real) real{diberikan a,b, dan c, mengirim a jika ab dan ac, mengirim b jika ba dan bc mengirim cb dan ca }Kamus Lokal:

Algoritma: MAX2(MAX2(a,b),c)

MAX3BIS:function(a,b,c:real) real{diberikan a,b, dan c, mengirim a jika ab dan ac, mengirim b jika ba dan bc mengirim cb dan ca }Kamus Lokal:

Algoritma: MAX2(a,MAX2(b,c)) Pertanyaan : apa beda MAX3 dan MAX3BIS?

LONG:function(S:string) integer{diberikan String S, mengirim panjangnya}Kamus Lokal:

Algoritma: Depend on(S) S=[] 0 S []: 1+LONG (AKHIR(S))

CPTA:function(S:string) integer{diberikan String S, mengirim banyaknya ‘A’ yang dikandung string S}Kamus Lokal:

Algoritma: Depend on(S) S=[] 0 S []: ISANABis (FirstChar(S))+CPTA(AKHIR(S))

ISANABis:function(cc:character) integer[0,1]{diberikan karakter cc, mengirim 0 jika cc bukan ’A’, mengirim 1 jika cc=’A’}Kamus Lokal:

Algoritma:

Page 36: Kumpulan Materi Algoritma

Depend on(S) cc=’A’ 1 cc ’A’ 0

FREKA:function(S:string) real[0..1]{diberikan karakter cc, menghitung frekuensi ’A’}{dengan mendefinisikan bahwa frekuensi huruf adalah 0 jika stringnya kosong, yaitu panjangnya 0}Kamus Lokal:

Algoritma: Depend on(S) LONG(S) = 0: output(“tak terdefinisi, string kosong’) 0. {harus mengirimkan harga real} LONG(S) 0 (CPTA(S)/LONG(S))(catatan:/adalah operator pembagian 2 integer yang menghasilkan bilangan real}

SAMA1:function(S1,S2:string) boolean{diberikan 2 buah string S1 dan D2, memeriksa apakah kedua string sama:semua karakternya sama}{mengirimkan true jika sama, false jika tidak}Kamus Lokal:

Algoritma: Depend on(S1,S2) LONG(S1) LONG(S2): false LONG(S1) =LONG(S2): Depend on(S1,S2) S1 = [] and S2=[]: true S1 [] and S2 []: {S1=FirstChar(S1)o AKHIR(S1) and FirstChar(S2)oAKHIR(S2)} Depend on(S1,S2) FirstChar(S1)=FirstChar(S2): SAMA1(AKHIR(S1), AKHIR(S2)) FirstChar(S1) FirstChar(S2): false

SAMA1:function(S1,S2:string) boolean{diberikan 2 buah string S1 dan D2, memeriksa apakah kedua string sama:semua karakternya sama}{mengirimkan true jika sama, false jika tidak}Kamus Lokal:

Page 37: Kumpulan Materi Algoritma

Algoritma: Depend on(S1,S2) S1 = [] and S2=[]: true S1 = [] and S2 []: False S1 [] and S2= []: False: S1 [] and S2 []: {S1=FirstChar(S1)o AKHIR(S1) and S2=FirstChar(S2)oAKHIR(S2)} Depend on(S1,S2) FirstChar(S1)=FirstChar(S2): SAMA2(AKHIR(S1), AKHIR(S2)) FirstChar(S1) FirstChar(S2): false

NEXTDAYDidefinisikan type terstruktur untuk menwakili hari seperti dalam kalender yang kita pakai sehari-hari:

Nama: DATE type <Tanggal, Bulan, Tahun>Konstanta: <5,12,1990> {artinya 5 Desember

1990} <25,2,2001> {artinya 25 Februari 2001}Algoritma:

- membaca sebuah tanggal dan kode bahasa penulisan (1=Inggris, 2=Indonesia, 3=Perancis).

- Menuliskan tanggal keesokan harinya sesuai dengan kode bahasaDalam bahasa Inggris DATE ditulis dalam: Bulan,’/’, Tanggal,’/’,TahunDalam bahasa Indonesia DATE ditulis dalam: Tanggal,’-’,Bulan,’-’,TahunDalam bahasa Perancis DATE ditulis dalam: Tanggal,’/’, Bulan,’/’,Tahun

- Proses menghitung hari esokContoh :

Input: (<13,4,1990>,1) Ouput: 4/14/1990Input: (<30,1,1990>,2) Ouput: 31-1-1990Input: (<31,12,1990>,3) Ouput: 1/1/1991

PENANGGALAN 0.0Kamus: Tanggal: type integer[1..31] Bulan : type integer[1..12] Tahun: type integer> 0 DATE: type<Tanggal,Bulan,Tahun> KodeBahasa:integer[1..3] HariIni, Esok:DATE

NEXTDAY:function(Now:DATE) DATE {mengirimkan keesokkan hari Dari Now}

Page 38: Kumpulan Materi Algoritma

Algoritma: Input(HariIni, KodeBahasa) {membaca<Tanggal,Bulan,Tahun> dan Kodebahasa} Esok NEXTDAY(HariIni) Depend on KodeBahasa KodeBahasa=1:ouput(Esok.Bulan,’/’,Esok.Tanggal,’/’,Esok.Tahun) KodeBahasa=2:ouput(Esok.Tanggal,’-’,Esok.Bulan,’-’,Esok.Tahun) KodeBahasa=3:ouput(Esok.Bulan,’/’,Esok.Tanggal,’/’,Esok.Tahun)

NEXTDAY:function(Now:DATE) DATE 0.1{menerima Now dan mengirimkan tanggal keesokan hari dari Now}Kamus Lokal: Kabisat:function(D:DATE) boolean {true jika D Tahun adalah kabisat}

Algoritma: Depend on(Now.Bulan) Now.Bulan = 2 : {Bulan Februari, kasus kabisat dan bukan} Depend on Now.Tanggal: Now.Tanggal<28: <Now.Tanggal+1,Now.Bulan,Now.Tahun> Now.Tanggal=28: Depend on Now.Tahun: Not Kabisat(Now.Tahun): <1,Now.Bulan+1,Now.Tahun> Kabisat(Now.Tahun): <Now.Tanggal+1,Now.Bulan,Now.Tahun> Now.Tanggal=29: <1,Now.Bulan+1,Now.Tahun> Now.Bulan = 12: {Mungkin Pergantian Tahun} Depend on Now.Tanggal: Now.Tanggal <31: <Now.Tanggal+1,Now.Bulan,Now.Tahun> Now.Tanggal =31: <1,1,Now.Tahun+1> Now.Bulan = [1,3,5,7,8,10]: {sebulan ada 31 hari} Depend on Now.Tanggal: Now.Tanggal <31: <Now.Tanggal+1,Now.Bulan,Now.Tahun> Now.Tanggal =31: <1,Now.Bulan+1,Now.Tahun>

Page 39: Kumpulan Materi Algoritma

Now.Bulan = [4,6,9,11]: {sebulan ada 30 hari} Depend on Now.Tanggal: Now.Tanggal <30: <Now.Tanggal+1,Now.Bulan,Now.Tahun> Now.Tanggal =30: <1,Now.Bulan+1,Now.Tahun> Catatan:

- Tuliskan definisi fungsi KABISAT dan algoritmanya- Buat analisa kasus yang lain dari yang dituliskan pada fungsi

NEXTDAY di atas

Page 40: Kumpulan Materi Algoritma