2

私は Pascal を初めて使用し、単純なプログラムを作成しようとしていますが、関数間で値を渡すのに問題があります。これは私が持っているもののほんの一部です:

program numberConverter;

const
    maxValue = 4999;
    minValue = 1;

var num: integer;

function convertNumeral(number: integer):string;
var j: integer;
begin
if ((number < minValue) OR (number > maxValue)) then
    begin
    writeln(number);
    writeln('The number you enter must be between 1 and 4999. Please try again:');
    read(j);
    convertNumeral := convertNumeral(j);
    end
else 
 if (number >= 1000) then
convertNumeral := 'M' + convertNumeral(number -1000)
{more code here, left it out for space}
end;

begin
    writeln;
    writeln('Enter an integer between 1 and 4999 to be converted:');
    read(num);
    writeln;
    writeln(num);
    writeln(convertNumeral(num));
end.

私の問題は、 writeln(converNumeral(num)) からの値、主に 'num' が convertNumeral 関数に渡されず、パスカルがこれを行うかどうか疑問に思っていたことです。number を変数として宣言していないためだと思いますが、そうすると、2 番目の if ステートメントを完了できないというコンパイル エラーが発生します。御時間ありがとうございます。

4

1 に答える 1

2

はい、値は間違いなく関数に渡されます。num本当に に渡されることを約束しconvertNumeralます。その関数内で、 にnumber存在する値を取得しますnum。おそらく、プログラムの動作を観察する方法に問題があります。

に変更を加えてnumberも、 には反映されませんnum。パラメータは値で渡されたため、に格納されている値numberコピーnumが格納されます。それらは 2 つの異なる変数です。var必要に応じて、参照によってパラメーターを渡すために使用できます。

を再帰的に呼び出すたびに の新しいインスタンスconvertNumeralが取得されるため、 に変更があったとしても、関数が呼び出し元に戻ると反映されません。各呼び出しは、独自のバージョンのと を取得します。numbernumbernumberj

于 2012-04-10T22:37:02.843 に答える