問題:2 つの変数の値を交換するプロシージャを作成してください。
このタスクの特徴は、プロシージャで行われた変更を呼び出し側プログラムに認識させる必要があることです。
次のように手順を書いてみましょう
var x、y: 整数。
<プレ>
プロシージャ Swap(a, b: 整数); // プロシージャパラメータのこのような記述では、
var c: 整数;
begin // 引数 (x と y) の値をコピーします
// 変数 a と b は x と y に関係のない独立変数です
c := a;
a := b;
b := c;
終わり;
始める
x := 1;
y := 2;
スワップ(x, y); //変数 x と y (引数) の値がパラメータ a と b にコピーされます
writeln('x = ', x, ', y = ', y); // x=1、y=2
終わり。
プレ>
このプログラムを実行すると、変数 x と y の値が変化していないことがわかります。パラメータで引数の値を変更するには、参照によるデータの受け渡しを使用する必要があります。これを行うには、データ型の名前の後に記述します。サブルーチンのヘッダーには、 var という単語を入れる必要があります。
<プレ>
プロシージャ Swap(var a, b: 整数); // これで変数 a と b はメモリ内の変数 x と y のアドレスを取得します
var c: 整数;
始める
c := a;
a := b;
b := c;
終わり;
プレ>
使用法: 参照によって引数を渡す場合、プロシージャを呼び出すときにこの場所に含めることができるのは変数名 (数値や算術式ではありません) のみです。< br />
次のようなプロシージャを呼び出さないでください:
<プレ>
スワップ(x, 4);
スワップ(5+x, y);
プレ>