Thursday, May 1, 2014

Var Parameter

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:
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