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 . |
Hasil kode program:
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.
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 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:
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 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
0 Komentar