Kumpulan Materi Algoritma
Kumpulan Materi Algoritma
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
{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}
EKSPRESI
Adalah 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
1. Ekspresi Logik:
Hasil: boolean
Operan:
Nama atau konstanta bertype logik
Ekspresi 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)
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 Numerik
hasil : integer atau riil
Operan:
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 String
Hasil : string
Operan:
Nama atau konstanta string
Ekspresi yang hasilnya string
Contoh EKSPRESI:
Didefinisikan nama dalam kamus sebagai berikut :
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:
HARGA
Adalah suatu besaran bertype yang telah dikenal.
ASSIGNMENT
Adalah 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.
nama1 nama2
nama konstanta
nama 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
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
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
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 : HELLOX
Pernyataan:
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’
Spesifikasi
Input : nama
Output : ’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 : JARAK
Pernyataan:
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*t
Output: S (jarak yang ditempuh dalam meter), integer
JARAK1
{dibaca v dan t, menghitung S = v*t dan menuliskan hasilnya
Kamus
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 hasilnya
Kamus
v: integer (kecepatan, m/detik)
t: integer (waktu,detik)
Algoritma
Input(v,t)
Output(v*t)
Contoh4: JAMMENITDETIK
Pernyataan:
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 n
Output : HARI,JAM,MENIT,DETIK
Output(H,J,M,D)
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]
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’
LATIHAN
1. 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?
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.
AKSI
Until 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.
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).
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 Pencacah
NamaTransversal [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}
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!}
ii+1
Fi*F
{i = n and F = n!}
output(F)
Algoritma
T ( 1 {To}
ST
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)
Algoritma
T 1 {To}
ST
i 0
While abs(T) > do
ii+1
T T * x/i
SS+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 + 2
To = x
Ko = 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
k1
T x{T1}
S T
While abs(T) > * abs(S) do
kk-2
T (-T)*x * x (k*k-1)
S S – T {deret aditif}
output(S)
PROSEDUR
Definisi
adalah 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.
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.
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 Prosedur
POKOKPERSOALAN’
{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}
Contoh1 : VOLTAGE
Tuliskanlah 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 * A
Output: 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*A
Solusi 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)
{prosedur untuk memproses tahanan(R) dan arus(A) menjadi
tegangan(V)}
Algoritma:
Input(R,A)
PROSES2(A,RV)
Output(V)
Algoritma:
V R*A
Contoh2:
Prosedur untuk menukar dua harga yang disimpan dalam dua nama a dan b
I.S. : diberikan a=A dan b=B
F.S. : a=B dan b=A
TUKAR
{program yang membaca dua buah harga x dan y, menyimpan dan kemudian
menukarnya}
Kamus:
x,y: integer
PROCTUKAR: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)
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}
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?
FUNGSI
Definisi
Fungsi 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.
Contoh fungsi :
Fungsi f(x) dalam matematika yang didefinisikan sebagai :
F(x) = x2 + 3x -5
Jika diberi harga x =4 maka f(x) akan menghasilkan 23
Jika diberi harga x= 1 maka f(x) akan menghasilkan -1
1. Pendefinisian fungsi
NAMAF:function ([list-parameterinput]) [type hasil]
{spesifikasi fungsi}
Kamus Lokal:
{semua NAMA yang dipakai dalam algoritma dari prosedur}
Algoritma:
Dengan syarat:
- list parameter input boleh tidak ada (kosong), dalam hal ini di fungsi
tidak membutuhkan apa-apa dari pemakainya untuk menghasilkan
harga.
- 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 fungsi
POKOK PERSOALAN
{Spesifikasi : Input, Proses, Output}
Kamus:
{semua NAMA yang dipakai dalam algoritma}
Algoritma:
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.
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 matematik
Sin: function (x:real) real
{memberikan sinus (x), x dalam radian}
Cos: function (x:real) real
{memberikan Cosinus (x), x dalam radian}
Algoritma:
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 fungsi
CONTOHF1
{dibaca x dan y, menghitung:f(x) = x2 + 3x -5}
{ :f(x,y) = x 2 + 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) = x 2 + 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)
CONTOHF2
{dibaca x dan y, menghitung:f(x) = x2 + 3x -5}
{ :f(x,y) = x 2 + 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 : KONVERSI
Tuliskan 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’
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:boolean
Proses: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
Spesifikasi:
FungsiKonversiCm:
Input:Cm:integer
Hasil:pasangan harga integer
Proses:menghitung Meter dan SisaCm sehingga Cm=100*meter +
SisaCm
Sehingga Cm=100*Meter+ Sisa Cm.
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: UbahdanPeriksaKar
Tuliskanlah 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: Cckarakter
Output:menuliskan:
Integer[0..9] sesuai dengan karakter yang dibaca, jika karakter
[0..9] ’Bukan angka’ jika CC bukan angka
Proses: Konversi dari karakter ke integer, jika CC[’0’ .. ’9’]
Dengan catatan fungsi konversi adalah seperti terdefinisi pada
contoh1
UbahdanPeriksaKar
Kamus
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’)
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)
2. MAX3
Tuliskanlah 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) 3
MAX3(10,2,3) adalah MAX2(MAX2(10,2),3) 10
3. PANJANGSTRING
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. HITUNGAN
Pelajarilah 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. SAMA
Pelajarilah 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. NEXTDAY
Buatlah algoritma yang :
- membaca sebuah tanggal dan kode bahasa penulisan (1=inggris,
2=indonesia, 3=prancis),
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))
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:
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:
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
NEXTDAY
Didefinisikan 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 bahasa
Dalam bahasa Inggris DATE ditulis dalam: Bulan,’/’, Tanggal,’/’,Tahun
Dalam bahasa Indonesia DATE ditulis dalam:
Tanggal,’-’,Bulan,’-’,Tahun
Dalam bahasa Perancis DATE ditulis dalam: Tanggal,’/’, Bulan,’/’,Tahun
- Proses menghitung hari esok
Contoh :
Input: (<13,4,1990>,1) Ouput: 4/14/1990
Input: (<30,1,1990>,2) Ouput: 31-1-1990
Input: (<31,12,1990>,3) Ouput: 1/1/1991
PENANGGALAN
0.0
Kamus:
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
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>
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