0

この例では、value-resultによる呼び出しをどのようにシミュレートできますか。変数を追加せず、変数名を変更しません。

Program one;
    var
      x:integer;
    Function two():integer;
        begin
           x:=x+1;
           two:=x;
        end;
    Procedure three(x:integer);
       begin
          x:=x+5;
          x:=two();
       end;
begin
x:=8;
three(x);
write(x);
end.
4

3 に答える 3

0

three()がすでに行っていることをtwo()に実行します。

于 2010-06-13T20:37:35.960 に答える
0

問題の何かを現在の形で理解するのは難しい.

ただし、OPがコード例で (値ではなく)参照による呼び出しをエミュレートする方法を尋ねていると仮定すると、この質問にはある程度の意味があるようです。

だから...実際のコードは、パラメータをthree()値で渡します。three()グローバル変数を呼び出す前に、値をグローバル変数に格納しようとしているようです。これにより、グローバル変数two()が変更されます。

しかし、グローバル変数は実際には値を渡すために使用されているため、グローバルを値でグローバルthree()に渡すと、参照によって渡されたかのように変更されてしまうというトリックがあります。

three()少しだけ質問があります (これが問題全体を構成しているようです):パラメータの名前がグローバルの名前と同じであるため、内部からグローバルに対処する方法は?

このコードを実行する Pascal のバージョンはわかりませんが、コンパイラが TP/Delphi ファミリと互換性があり、var 名を変更しないでおく必要がある場合は、これまでにわかっている唯一の方法を試してみます。 : one.x. 具体的には、この行three()の実装

x:=x+5;

私はに変更します

one.x:=x+5;

したがって、ここのグローバルは 5 だけ増加したパラメーター値を受け取り、 を呼び出しtwo()て、two()もう一度グローバルを変更します。

于 2011-01-14T08:56:01.003 に答える
0

宿題なら、答えを見つけるのに一生懸命努力する必要はないと思います。

編集: 以下のコメントは正しいです。間違った道を案内していたのかもしれません。元の場所に戻って、そこから始めるのがおそらく最善です。

于 2010-06-11T22:41:13.347 に答える