Sorun: iki değişkenin değerlerini değiştiren bir prosedür yazın.
Bu görevin özelliği, çağıran program tarafından bilinmek için prosedürde yapılan değişikliklere ihtiyaç duymamızdır.
Prosedürü şöyle yazmaya çalışalım:
var x, y: tamsayı;
prosedür Swap(a, b: tamsayı); // prosedür parametrelerinin böyle bir açıklaması ile,
var c: tamsayı;
başla // bağımsız değişkenlerin (x ve y) değerlerini kopyalar
// a ve b değişkenleri, x ve y ile ilgili olmayan bağımsız değişkenlerdir
c := bir;
bir := b;
b := c;
son;
başlamak
x := 1;
y := 2;
Değiştir(x, y); //x ve y değişkenlerinin (argümanlar) değerleri a ve b parametrelerine kopyalanır
writeln('x = ', x, ', y = ', y); // x=1, y=2
son.
Bu programı çalıştırırsanız
x ve
y değişkenlerinin değerlerinin değişmediğini görebilirsiniz. Parametrelerin bağımsız değişkenlerin değerlerini değiştirmesi için
verileri başvuruya göre iletmeyi kullanmalısınız.Bunu yapmak için, veri türünün adından sonra alt programın başlığına
var kelimesini koymalısınız
prosedür Swap(var a, b: integer); // şimdi a ve b değişkenleri bellekteki x ve y değişkenlerinin adreslerini alıyor
var c: tamsayı;
başlamak
c := bir;
bir := b;
b := c;
son;
Kullanım: Bir bağımsız değişkeni referans olarak iletirseniz, prosedür çağrılırken bu yerde yalnızca değişken adı (
bir sayı ve bir aritmetik ifade DEĞİL) bulunabilir!< br />
Şunun gibi bir prosedür ÇAĞRILAMAYIN:
Swap(x, 4);
Swap(5+x, y);