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

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:

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.

Hasil kode program:

Hasil Contoh Program - Cara Penulisan Read dan Readln

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:

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:

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:

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:

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:

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:

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
dunia
ilkom

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:

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.

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 duniailkom
sangat
menyenangkan

Hasil Teks:
a: belajar pascal
b: di duniailkom
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


Tutorial Terkait:

43 Comments

  1. noval
    24 Jun 15
    • Andre
      26 Jun 15
  2. noval
    24 Jun 15
    • Andre
      26 Jun 15
  3. Gilang
    02 Jul 15
  4. Jiehan
    28 Jul 15
    • Jiehan
      28 Jul 15
    • Andre
      30 Jul 15
  5. Adam
    18 Aug 15
    • Andre
      18 Aug 15
  6. Dovan
    29 Aug 15
    • Andre
      29 Aug 15
  7. Aria
    29 Aug 15
    • Andre
      29 Aug 15
    • Andre
      22 Sep 15
  8. Febrian
    20 Feb 16
    • Andre
      20 Feb 16
  9. Wijil
    17 Aug 16
    • Andre
      18 Aug 16
  10. iamNothing
    28 Oct 16
    • Andre
      29 Oct 16
  11. robby
    20 Nov 16
    • Andre
      20 Nov 16
  12. Shiota
    13 Jan 17
    • Andre
      14 Jan 17
  13. Rianda
    24 Jan 17
    • Andre
      24 Jan 17
  14. Rianda
    24 Jan 17
    • Andre
      25 Jan 17
  15. Rianda
    25 Jan 17
  16. Arya Fedrik K
    07 May 17
  17. mukti ali
    02 Aug 17
    • Andre
      03 Aug 17
  18. RadityaArhya
    30 Oct 17
    • Andre
      30 Oct 17
      • RadityaArhya
        30 Oct 17
        • Andre
          31 Oct 17
  19. evan
    12 Nov 17
    • Andre
      14 Nov 17
  20. evan
    12 Nov 17
    • Andre
      14 Nov 17

Add Comment