2017-10-29 10 views
0

私はクラスのためにパスカルの宿題に取り組んでいます。私は基本的には動作しますが、私たちの宿題提出サイトは私に完全な信用を与えていませんでした。私は教授に電子メールを送って、彼は{$ r +}指令に私を結びつけました。私がそれを含めると、ランタイムエラー201が表示されます。この問題はレンジチェックに関連していることはわかっていますが、どの変更が問題を解決するかはわかりません。どんな助けでも大変感謝しています。パスカルの配列範囲エラー

私はあなたの問題は、ライン上にあると思い
{$mode Delphi} 
{$r+} 
program InversePerm; 
var 
    N: integer; // Size of set of numbers 
    i: integer; // counter 
    x: integer; // array-slot counter 
    perm: array of integer; // THE array 

begin 
    read(N); 
    setlength(perm, N); // sets array size to user input 
    for i := 1 to N do 
     begin 
     read(x); 
     perm[x] := i; 
     end; 
    for i := 1 to N do              
     write(perm[i], ' '); 
    end. 
+0

配列インデックスはパスカルに基づいていませんか? – Hintham

+2

@Hintham:必ずしもそうではありませんが、この場合ははいです。 Opは 'for i:= Low(Perm)to High(Perm)... 'でよりうまくいくでしょう。 – MartynA

+0

私はあなたの提案にループ条件を切り替えました。ありがとうございます。私の変数の1つが小さすぎるかもしれませんか?私は{$ mode Delphi}命令を含めて、そのようなものを世話すると思った... – Reccho

答えて

1

perm[x] := i;

私はあなたが書くために何を意味するのかたと思う:

perm[i] := x;

そうでなければ、私はXに100を入力すると、あなたのコードは最初の反復でperm [100] = 1を実行します。 Nに10を入力した場合は、範囲エラーが発生します。

+0

ああ、ありがとう。それが修正され、ランタイムエラーが発生しなくなりました。 – Reccho

+0

配列は、0から始まるインデックスを使用します。あなたはその答えに言及しなければなりません。 –

+0

いいえ、私はしません。その問題は質問自体のコメントで扱われました。営業担当者は、私が答える前に、彼らがその問題に対処したとすでに述べていました。私がパスカルの可変ベースシステムについて言及したなら、他の人が他の人をコピーするために私に投票したでしょう。 –

関連する問題