1

私がしなければならないことと非常によく似た手順を説明している本を見つけました。ただし、この本は 1972 年のもので、ALGOL での解決策を示していますが、私はより新しい言語でコードを記述する必要があります。目の前のALGOLコードが何をしているのかを正しく理解しているかどうかを調べようとしています:

  1. 次のコードは正しいですか?

    sl:=ff;

、たとえば、sl = ff; のように値を割り当てるだけです。ステートメントはSASで行うでしょうか?

  1. ↑の字は「のびた」という意味ですか?

  2. 「実手続き」とは?FORTRAN のサブルーチンまたは SAS のモジュールに相当する ALGOL ですか?

  3. コードの前半で、aが配列であることを読みました。では、次のコードは正しいでしょうか。

    for i: 1 step 1 until m do 
    
    begin a[i]:=0;
    
        for j:=1 step 1 until m do
    
        a[i] :=a[i] + ww[j] x slope;
    
        a[i]:=1/a[j];
    

ここで、iは行番号、j列番号、m(明らかに) i * j ? です。

4

2 に答える 2

1

隣接するコメント 1 ~ 3 に同意します。

上記のコードは、いくつかの点で異常です。転記ミスがあったと思います。

まず、「開始」「終了」のペアリングが不完全です。

アルゴルでは、「始まる. . . end' のペアは、複合文か、内部に宣言がある場合はブロックです。

このコードでは、「for i:= 1 step 1 until m do」に続くものは、「begin」を含む複合ステートメントのように始まりますが、一致する「end」は表示されません。「end」が次の後続のトークンとして現れると仮定すると、これにより、この「for i:= ...」句によって制御される複合ステートメントが完成します。この複合ステートメントはすべて m 回繰り返され、i には 1 から m までの連続する値が含まれます。

2 番目の異常は、'for j:= ...' によって制御される 2 番目のループが次の 1 つのステートメント (';' まで) にのみ接続され、同じ値のコレクションをそれぞれの a[i] とこれは 1/a[j] で上書きされます! (「slope」はスカラー変数であり、パラメーターのない関数ではないため、実行ごとに同じ値が提供されると想定しています。)

第 3 に、Algol では、ループの終了後に「for」ループ内の制御変数の値を仮定することはお勧めできません。多くの Algol 実装では、j には m + 1 が含まれたままになります。したがって、a[1] から a[m] までのすべての要素には 1/a[m + 1] が含まれます。a[m + 1] にゼロが含まれている場合、または a が「実配列 a[1:m];」と宣言されている場合、これは「ゼロによる除算」に失敗する可能性があります。その後、「無効なインデックス」で失敗する可能性があります。

ここに転記エラーがあり、最終ステートメントが a[i]:= 1/a[i] であると仮定した場合、計算されて a[1] ... a[m] に格納されたすべての値はそのままになります。同じで、これをコーディングするより高速な方法があります!

このティレード (思っていたよりも長い) がお役に立てば幸いです。

于 2015-12-29T02:28:20.750 に答える