Suatu nama konstanta secara otomatis akan mempunyai harga tetap yang terdefinisi pada saat nama konstanta tersebut didefinisikan dalam kamus. Jadi, menyebutkan 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:
- assignment, atau
- dibaca dari suatu piranti masukan
Assignment
harga lama yang disimpan tidak lagi berlaku, yang berlaku adalah harga paling akhir yang diberikan.
Memrogram secara prosedural pada hakekatnya adalah memanipulasi nama yang mewakili alokasi memori tertentu dan memaipulasinya dengan algoritma yang ditulis. Manipulasi harga terhadap nama dilakukan dengan assignment.
ALGORITMA
<nama1> ← <nama2> { harga dari nama2 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:
- bagian kiri dan bagian kanan tanda pemberian harga (←) bertype sama,
- <nama> dan <nama1> (bagian kiri tanda ← harus merupakan nama informasi, tidak boleh nama konstanta, type, fungsi atau prosedur,
- 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,
- semua nama yang dipakai dalam assignment tidak boleh berupa nama type atau nama prosedur.
Input
Selain dengan assignment, suatu harga dapat diisikan ke suatu nama informasi melalui
pembacaan harga tersebut dari piranti masukan (keyboard, mouse, scanner, dan sebagainya). 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 dihubungkan dengan komputer di suatu ruangan.
ALGORITMA
input(list-nama)
dengan syarat:
- list nama adalah satu atau lebih nama informasi,
- nama yang muncul pada list-nama hanya boleh berupa nama informasi, dan tidak boleh nama lain (nama konstanta, type, fungsi atau prosedur).
Output
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 atau output. Instruksi output tidak mengubah nilai yang disimpan.
ALGORITMA
output(<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. Lihat contoh. }
output(<konstanta>)
{ Harga konstanta ke piranti keluaran } output(<ekspresi>)
{ Harga hasil perhitungan ekspresi dituliskan ke piranti
keluaran }
output(<list-nama>, <konstanta>, <ekspresi>)
{ Yang dituliskan ke piranti keluaran adalah semua harga sesuai dengan urutan penulisan nama, konstanta,
ekspresi }
dengan syarat :
- list nama adalah satu atau lebih nama : boleh nama informasi, nama konstanta
atau hasil pemanggilan/aplikasi fungsi. Khusus untuk pemanggilan fungsi, lihat pemakaian fungsi.
- nama-nama dalam list-nama tidak boleh berupa nama type atau prosedur.
- nama yang akan dituliskan sudah terdefinisi harganya. Jika suatu nama informasi, didefinisikan dengan assignment atau instruksi input.
Ekspresi
Ekspresi suatu “rumus perhitungan", yang terdiri dari operan dan operator. Operator
yang dituliskan harus didefinisikan untuk mengoperasikan operan ber-type 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 yang bersangkutan), hasil pengiriman suatu fungsi atau merupakan suatu ekspresi.
Ekspresi biner adalah ekspresi dengan operator biner (membutuhkan dua operan) dapat dituliskan dalam 3 macam notasi, yaitu:
a. Notasi infix: operator di tengah operan1 operator operan2 Contoh:
13 * 5
((3 * 5) + (4 div 7) )- (a * b) b. Notasi prefix: operator di awal
operator operan1 operan2 Contoh :
* 13 5
- + * 3 5 div 4 7 * a b adalah - ( ( + (* 3 5) (div 4 7) ) (* a b) ) c. Notasi suffix/polish: operator di akhir
operan1 operan2 operator Contoh :
13 5 *
3 5 * 4 7 div a b * + - adalah (3 5 *) ( ( 4 7 div) ( a b * ) + ) -
Untuk selanjutnya, pada kuliah ini ekspresi dituliskan dalam bentuk infix, yang sesuai dengan penulisan ekspresi aritmatika sehari-hari. Ada bahasa pemrograman memakai ekspresi infix, prefix atau postfix. Untuk menghindari kerancuan prioritas perhitungan, ekspresi ditulis dengan tanda kurung yang lengkap.
Ekspresi akan dihitung (dengan beberapa perjanjian jika terjadi ketidak-cocokan type maupun ketelitian). Hasilnya sesuai dengan type ekspresi, selanjutnya dapat dimanipulasi, ditampilkan pada piranti keluaran atau disimpan dalam suatu nama. Type ekspresi sesuai dengan type hasil. Contoh type ekspresi untuk type dasar adalah:
- logika (boolean)
- numerik
- karakter dan string
Contoh Ekspresi Boolean
Diberikan sebuah kamus dan algoritma untuk mendefinisikan nama variabel
KAMUS
{ Nama Konstanta }
constant benar : boolean = true { Nama Informasi }
Found : boolean Flag : boolean ALGORITMA
{ Pada bagian ini telah didefinisikan sehingga nilai berikut: Harga Found adalah true dan Flag adalah false }
Ekspresi boolean Hasil Keterangan
true and false false true or false true benar xor true false
Flag false Flag = false
not Found false Found = true
Flag and Found false Flag = false, Found = true
Contoh Ekspresi Numerik
Diberikan sebuah kamus dan algoritma untuk mendefinisikan nama variabel:
KAMUS
{ Nama Konstanta }
constant PI : real = 3.14159 constant Faktor : integer = 3 { Nama Informasi }
i, j : integer Jum : integer x, y : real ALGORITMA
{ Pada bagian ini telah didefinisikan sehingga nilai berikut: Harga i adalah 5, j adalah 0, Jum adalah 4, x adalah 0.0, dan y adalah 7.5 }
Maka berikut ini adalah contoh ekspresi numerik dan hasilnya:
Ekspresi Hasil Keterangan
1 * 5 5 Ekspresi integer
1 + 3 * 5 16 Ekspresi integer
1 / 3 0.333 Ekspresi integer, hasil riil
11 > 3 true Ekspresi relasional untuk integer
11 > 21 false Ekspresi relasional untuk integer
10 mod 3 1 Ekspresi integer
10 div 3 3 Ekspresi integer
1+7 div 3 2 Ekspresi integer
1./3. 0.333 Ekspresi real
10./2. 5. Ekspresi real
i + 1 6 i = 5, ekspresi integer
i + j 5 i = 5 dan j = 0, ekspresi integer
x * PI 0.0 x = 0.0 dan PI = 3.1415, ekspresi riil
i + x ?? Operan tidak sejenis
x + y 0.0 x = 0.0 dan y = 7.5, ekspresi riil
KAMUS
{ Nama Konstanta }
constant blank : character = ’ ‘ { Nama Informasi }
CC : character str1, str2 : string ALGORITMA
{ Pada bagian ini telah didefinisikan sehingga nilai berikut: Harga CC adalah ‘A’, str1 adalah “AKU”, dan str1 adalah “X” }
Ekspresi Hasil Keterangan
CC = ‘X’ false Ekspresi pembandingan
blank ’ ‘ Nilai dari konstanta
str1 & str2 “AKUX” Konkatenasi
CC o str1 “AAKU” Operasi menambah karakter di awal
str1 • CC “AKUA” Operasi menambah karakter di akhir
Latihan Soal
Didefinisikan nama dalam kamus sebagai berikut:
KAMUS
constant Pi : real = 3.1714
GajiTotal, GajiPokok, Tunjangan, PotGaji : real MID1, MID2 : integer
Urutan, ranking : integer CC1, CC2 : character S1, Message : string Found : boolean
function AddXY (X, Y : integer) → integer { Menghasilkan penjumlahan X+ Y }
Berikut ini adalah contoh ekspresi dalam notasi infix untuk kamus dia atas. Periksalah apakah ekspresi yang dituliskan benar. Jika benar tentukan jenis hasilnya, jika salah koreksilah.
Ekspresi Jenis hasil dan komentar
Urutan – 1 CC1 or CC2
Found and (Urutan>100)
(Urutan ^ 2) +GajiTotal+ADDXY(MID1,MID2) GajiPokok + Tunjangan - PotGaji
Urutan * 2 /ranking Message & S1 Message = “HELLO”