Pak Dengklek memberikan Anda dua buah bilangan bulat A dan B (1 ≤ A, B ≤ 1.000). Tukar nilai kedua bilangan tersebut lalu cetak kembali kedua bilangan tersebut.
Format Masukan
Baris pertama berisi dua buah bilangan bulat A dan B.
Format Keluaran
Sebuah baris berisi dua buah bilangan bulat B dan A, dipisahkan oleh sebuah spasi.
Contoh Masukan
4 5
Contoh Keluaran
5 4
Petunjuk
Soal ini sebetulnya dapat dipecahkan dengan program yang sangat pendek seperti ini:
var a, b: integer; begin readln(a, b); writeln(b, ' ', a); end.
Namun, kali ini cobalah membuat sebuah prosedur Swap yang memiliki dua buah parameter integer, yang akan menukarkan nilai adan b, seperti berikut ini:
var a, b: integer; // menukar nilai a dengan b procedure Swap(a, b: integer); var temp: integer; begin temp := a; a := b; b := temp; end; // program utama begin readln(a, b); Swap(a, b); writeln(a, ' ', b); end.
Coba ujilah program itu dengan sebuah berkas yang berisi dua buah bilangan bulat. Apakah program ini mengeluarkan hasil yang benar? Ternyata program ini tidak berjalan dengan benar. Mengapa demikian? Dalam prosedur Swap di atas, parameter a dan bsebetulnya adalah local variable yang dideklarasikan di dalam prosedur Swap, sehingga a dan b ini sama sekali bukan variabel a dan byang dideklarasikan di awal program. Dengan demikian, menukarkan nilai a dan b yang berada di dalam prosedur Swap tidak akan berpengaruh apa-apa.
Oleh karena itu, kita harus mengubah sedikit prosedur Swap kita menjadi:
Oleh karena itu, kita harus mengubah sedikit prosedur Swap kita menjadi:
procedure Swap(var a: integer; var b: integer); var temp: integer; begin temp := a; a := b; b := temp; end;
atau
procedure Swap(var a, b: integer); var temp: integer; begin temp := a; a := b; b := temp; end;
var menunjukkan bahwa parameter a dan b bukanlah local variable di dalam prosedur tersebut, tetapi adalah referensi ke sebuah variabel yang nyata di luar prosedur tersebut. Karena Swap dipanggil dari program utama dengan parameter a dan b pada program utama, maka variabel-variabel global inilah yang direferensi oleh parameter prosedur Swap. Sehingga, jika nilai a dan b ditukarkan di dalam prosedur, sebetulnya nilai yang ditukarkan adalah nilai variabel global a dan variabel global b.
Untuk lebih jelasnya, meskipun kode prosedur Swap kita ganti menjadi:
procedure Swap(var c, d: integer); var temp: integer; begin temp := c; c := d; c := temp; end;
program tetap berjalan dengan benar karena sekarang c mengacu pada variabel a global, dan d mengacu pada variabel b global. Sebuah prosedur atau fungsi dapat memiliki beberapa variabel 'dengan var' dan beberapa variabel 'tanpa var' sekaligus.
Jawabannya adalah :
No comments:
Post a Comment