Tutorial Belajar Pascal Part 11: Cara Penggunaan serta Perbedaan Read dan Readln Pascal

98

Yodha.web.id – Setelah mempelajari perintah write dan writeln, dalam tutorial belajar pascal kali ini kita akan membahas tentang cara penggunaan perintah read dan readln di dalam bahasa pemrograman pascal.


Fungsi perintah read dan readln

Jika perintah write dan writeln berfungsi untuk menampilkan ‘sesuatu’ ke jendela tampilan, maka perintah read dan readln berfungsi untuk memasukkan ‘sesuatu’ ke dalam kode program. Di dalam pemrograman, ini disebut sebagai perintah ‘input’.


Cara Penulisan read dan readln

Untuk dapat menggunakan perintah read dan readln, kita harus mempersiapkan variabel yang akan menampung hasil inputan dari pengguna. Variabel ini juga harus memiliki tipe data yang sama dengan apa yang akan diinput.

Sebagai contoh, jika kita mengharapkan pengguna untuk memasukkan nama, maka variabel penampung harus bertipe string, namun jika kita meminta inputan umur, maka harus menggunakan variabel bertipe integer.

Agar lebih memahami konsep ini, berikut adalah contoh kode program penggunaan kedua perintah ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program input;
uses crt;
var
  nama,alamat:string;
  umur:integer;
  ipk:real;
begin
  clrscr;
  writeln('Masukkan Data Mahasiswa');
  writeln('=======================');
  write('Nama   :');
  readln(nama);
  write('Alamat :');
  readln(alamat);
  write('Umur   :');
  read(umur);
  write('IPK    :');
  readln(ipk);
  writeln;
  writeln('=========HASIL=========');
  write('Nama: ',nama,'. Alamat: ',alamat);
  writeln('. Umur: ',umur,'. IPK: ',ipk:1:2);
  readln;
end.

 

Dalam kode diatas, saya menampung hasil inputan dalam variabel nama, alamat, umur, dan ipk. Ketika kode program sampai pada perintah readln(nama), maka tampilan akan berhenti sesaat untuk menunggu inputan. Tombol Enter digunakan untuk mengakhiri proses input, dan program akan lanjut ke perintah berikutnya.


Perbedaan read dan readln

Perintah read dan readln sama-sama digunakan untuk meminta input dari pengguna. Keduanya memiliki perbedaan dari cara pembacaan data.

Perintah read akan membaca data secara ‘horizontal’. Setelah proses input selesai, posisi cursor akan tetap berada di baris yang sama. Kita bisa menggunakan karakter ‘spasi’ atau ‘enter’ untuk memisahkan 1 input dengan input lainnya (dengan beberapa pengecualian).

Perintah readln akan membaca data secara ‘vertikal’. Setelah proses input selesai, posisi cursor akan pindah ke baris baru. Kita bisa menggunakan karakter ‘enter’ untuk memisahkan 1 input dengan input lainnya.

Defenisi perbedaan diatas ‘hanya’ secara teori. Dalam prakteknya, kedua perintah ini akan membuat prilaku berbeda tergantung tipe data yang digunakan. Terutama untuk perintah read yang kadang berfungsi ‘aneh’. Kita akan melihat permasalahan ini melalui beberapa contoh kode program.


Penggunaan read dan readln untuk tipe data integer dan real

Jika menggunakan tipe data angka (integer/real), perintah read akan membaca seluruh inputan yang dipisah dengan spasi maupun enter. Berikut contoh penggunaannya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program input;
uses crt;
var
  a,b,c,d:integer;
begin
  clrscr;
  writeln('Input 4 angka, dipisah dengan spasi:');
  read(a);
  read(b);
  read(c);
  read(d);
  writeln;
  writeln('Hasil Input:');
  writeln('a: ',a,', b: ',b,', c: ',c,', d: ',d);
  readln; readln;
end.

Hasil kode program:

Input 4 angka, dipisah dengan spasi:
65 7 89 999
Hasil Input:
a: 65, b: 7, c: 89, d: 999

Perhatikan bahwa saya menggunakan 2 kali perintah readln di akhir program. Ini digunakan untuk ‘menahan’ jendela program agar tidak langsung menutup ketika di–run. Jika tidak menggunakan ini, anda bisa melihat hasil program dari menu Debug->User Screen atau menekan tombol ALT+F5.

Perintah diatas juga bisa ditulis menjadi seperti berikut ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
program input;
uses crt;
var
  a,b,c,d:integer;
begin
  clrscr;
  writeln('Input 4 angka, dipisah dengan spasi:');
  read(a,b,c,d);
  writeln;
  writeln('Hasil Input:');
  writeln('a: ',a,'. b: ',b,'. c: ',c,' d: ',d);
  readln;
end.

Kali ini saya menggabungkan penulisan input 4 variabel ke dalam 1 perintah read.

Jika menggunakan perintah readln, maka kita harus memisahkan keempat inputan dengan enter, seperti contoh berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program input;
uses crt;
var
  a,b,c,d:integer;
begin
  clrscr;
  writeln('Input 4 angka, dipisah dengan enter:');
  readln(a);
  readln(b);
  readln(c);
  readln(d);
  writeln;
  writeln('Hasil Input:');
  writeln('a: ',a,'. b: ',b,'. c: ',c,' d: ',d);
  readln;
end.

Hasil program:

Input 4 angka, dipisah dengan enter:
45
23
65
111
Hasil Input:
a: 45. b: 23. c: 65 d: 111

Khusus untuk tipe data angka (integer/real), perintah read bisa digunakan dengan pemisah spasi, maupun enter. Berikut contohnya:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program input;
uses crt;
var
  a,b,c,d,e,f,g,h,i:integer;
begin
  clrscr;
  writeln('Input Matriks 3x3');
  read(a,b,c);
  read(d,e,f);
  read(g,h,i);
  writeln;
  writeln('Hasil Matriks:');
  writeln(a,' ',b,' ',c);
  writeln(d,' ',e,' ',f);
  writeln(g,' ',h,' ',i);
  readln;
  readln;
end.

Hasil program:

Input Matriks 3x3
4 5 6
9 7 1
4 9 9
Hasil Matriks:
4 5 6
9 7 1
4 9 9

Penggunaan read dan readln untuk tipe data char

Jika menggunakan tipe data char, perintah read akan membaca seluruh karakter teks (termasuk spasi dan enter) dalam 1 baris secara vertikal. Kita bisa mencoba hal ini melalui kode program berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program input;
uses crt;
var
  a,b,c,d,e:char;
begin
  clrscr;
  writeln('Input Teks Sembarang (5 karakter)');
  read(a);
  read(b);
  read(c);
  read(d);
  read(e);
 
  writeln;
  writeln('Hasil Teks:');
  write(a,' ',b,' ',c,' ',d,' ',e);
  readln;
  readln;
end.

Hasil program:

Input Teks Sembarang (5 karakter)
belajar
Hasil Teks:
b e l a j

Jika kita menginput 5 karakter (atau lebih), dan mengakhiri dengan tombol enter, tiap-tiap varibel akan diisi dengan 5 karakter pertama dari teks (teks ke-6 dan seterusnya akan diabaikan).

Jika anda mencoba menekan ‘enter’ pada saat menginput 5 karakter awal, maka pascal akan menampilkan sesuatu yang ‘berbeda’:

Input Teks Sembarang (5 karakter)
a
b
Hasil Teks:
  b

Hasil diatas di dapat dengan mengetik huruf a, ‘enter’, huruf b, dan program akan langsung selesai. Ini terjadi karena cara pascal memproses karakter ‘enter’.

Sebuah karakter enter di dalam pascal terdiri dari 2 karakter khusus, yakni carriage return dan line feed. Kedua karakter ini hanya tampak seperti ‘spasi’ (kosong), sehingga jika kita menekan tombol enter, 2 variabel akan langsung terisi. 1 dengan karakter carriage return, dan 1 lagi dengan karakter line feed. Kedua variabel ini akan ditampilkan ‘kosong’.

Jika kita mengganti read dengan readln, pembacaan karakter akan dilakukan secara vertikal. Setiap karakter di pisah dengan enter, seperti contoh kode program berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program input;
uses crt;
var
  a,b,c,d,e:char;
begin
  clrscr;
  writeln('Input Teks Sembarang (5 karakter) :');
  readln(a);
  readln(b);
  readln(c);
  readln(d);
  readln(e);
 
  writeln;
  writeln('Hasil Teks:');
  write(a,' ',b,' ',c,' ',d,' ',e);
  readln;
end.

Hasil kode program:

Input Teks Sembarang (5 karakter) :
i
l
k
o
m
Hasil Teks:
i l k o m

Kali ini, enter pada karakter ke-2 atau lebih dianggap sebagai tombol untuk masuk ke variabel selanjutnya.

Jika anda menambahkan beberapa karakter setelah karakter pertama di sebuah baris, sisanya akan diabaikan oleh readln:

Input Teks Sembarang (5 karakter) :
belajar
pascal
di
kuliah
komputer
Hasil Teks:
b p d d i

Penggunaan read dan readln untuk tipe data string

Apabila menggunakan tipe data string, perintah read berprilaku sedikit ‘membingungkan’. Perhatikan contoh kode berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program input;
uses crt;
var
  a,b,c,d:string;
begin
  clrscr;
  writeln('Input 4 kata:');
 
  read(a);
  read(b);
  read(c);
  read(d);
 
  writeln;
  writeln('Hasil Teks:');
  writeln('a: ',a);
  writeln('b: ',b);
  writeln('c: ',c);
  writeln('d: ',d);
  readln;
  readln;
end.

Jika kita menginput 4 kata yang dipisah dengan spasi, dan menekan tombol enter, keempat kata ini akan diinput kedalam variabel a:

Hasil program:

Input 4 kata:
saya sedang belajar pascal
Hasil Teks:
a: saya sedang belajar pascal
b:
c:
d:

Namun jika kita membuat sebuah kata dan menekan enter, program akan ‘melewati’ variabel b, c, dan d:

Hasil program:

Input 4 kata:
saya
Hasil Teks:
a: saya
b:
c:
d:

Solusi untuk hal ini, kita mengganti perintah read dengan readln. Dengan begitu, setiap teks dipisah dengan enter dan diinput kepada masing-masing variabel.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
program input;
uses crt;
var
  a,b,c,d:string;
begin
  clrscr;
  writeln('Input 4 kata:');
  readln(a);
  readln(b);
  readln(c);
  readln(d);
  writeln;
  writeln('Hasil Teks:');
  writeln('a: ',a);
  writeln('b: ',b);
  writeln('c: ',c);
  writeln('d: ',d);
  readln;
end.

Hasil kode program:

Input 4 kata:
belajar pascal
di yodha.web.id
sangat
menyenangkan
Hasil Teks:
a: belajar pascal
b: di yodha.web.id
c: sangat
d: menyenangkan

Untuk menghindari hal ini, sebaiknya kita selalu menggunakan perintah readln jika ingin memproses data input bertipe string.


Dalam tutorial kali ini kita telah membahas tentang cara menginput data ke dalam program menggunakan perintah read dan readln. Umumnya anda akan banyak menggunakan perintah readln dari pada read, karena seperti yang kita lihat pada kasus tipe data string, perintah read kadang tidak sesuai dengan apa yang dirancang.

Selanjutnya kita akan masuk ke pembahasan tentang tipe-tipe data di dalam pascal, yang dimulai dengan tipe data integer.

Referensi:

http://stackoverflow.com/questions/5693186/pascal-read-readln-function-impurities
http://stackoverflow.com/questions/8997678/pascal-read-function-strange-behavior