2017-10-11 10 views
-1

私はそれが収まらないところに値を格納していると言っていますが、私のコードでどうなっているのかはわかりません。私はコードを何度もチェックしましたが、私はまだこれを取得しています。私はそれが収まらないところに値を格納することについて言いましたが、私のコードでどうなっているのかわかりませんでした。私はコードを何度もチェックしましたが、私はまだこれを取得しています。なぜ終了コード201が表示されるのですか?

program ACT2; 

uses crt; 

var 
    inputs : array[1..5] of integer; 
    index1 : integer; 
    choice : char; 
    toPrint : integer; 

function getSUM(var inputArray : array of integer) : integer; 
var 
    SUM, sumIndex : integer; 

begin 
    SUM := 0; 
    sumIndex := 1; 

    repeat 
    SUM := SUM + inputArray[sumIndex]; 
    sumIndex := sumIndex + 1; 
    until (sumIndex > 5); 

    getSUM := SUM; 
end; 


begin 

clrscr; 

    for index1 := 1 to 5 do 
    begin 
     write('Input Integer[', index1); write(']: '); 
     readln(inputs[index1]); 
    end; 

clrscr; 

write('Integers:'); 

for index1 := 1 to 5 do 
begin 
    write(' ', inputs[index1]); 
end; 

writeln(''); writeln(''); writeln(''); 

writeln('[1] SUM'); 
writeln('[2] AVERAGE'); 

writeln(''); 

write('INPUT: '); 

readln(choice); 


if(choice = '1') then 
    toPrint := getSUM(inputs); 

writeln(toPrint); 
readkey; 
end. 
+0

[編集]で質問を明確にしてもよろしいですか? – LW001

+0

正確なエラーメッセージは何ですか?参照されている行番号はありますか? –

+2

Stack Overflowはデバッガではないので、この質問をトピックとしてクローズすることにしました。このような質問をする前に、プログラムをデバッグする必要があります。 –

答えて

1

他の2つの答えが正しく0

対1はしかし、あなたが最初にこの問題を回避している可能性があり、あなたは別の拠点を持つ2つの異なるアレイタイプを使用していることは、あなたの問題の原因を同定しました独自の整数配列型を宣言して、それを一貫して使用することにより、場所、 整数5は唯一のプログラムのこのバージョンで一度発生することに注意してください、そして標準LowHigh機能手段の使用

type 
    TInputArray = array[1..5] of Integer; 
var 
    inputs : TInputArray; //array[1..5] of integer; 
    index1 : integer; 
    choice : char; 
    toPrint : integer; 

//function getSUM(var inputArray : array of integer) : integer; 
function getSUM(var inputArray : TInputArray) : integer; 
var 
    SUM, sumIndex : integer; 

begin 

    SUM := 0; 
    sumIndex := Low(inputArray); 

    repeat 
     SUM := SUM + inputArray[sumIndex]; 
     sumIndex := sumIndex + 1; 
    until (sumIndex > High(inputArray)); 

    getSUM := SUM; 
end; 

のようにオンであること配列のサイズを変更する場合は、 5を変更する必要があります。実際には、要素の数を定数として定義し、配列宣言で定数を使用する方が良いかもしれません。

const NumOfElements = 5; 
type 
    TInputArray = array[1..NumOfElements] of Integer; 
+0

有益な答えをありがとう! –

2
関数ステートメントで

function getSUM(var inputArray : array of integer) : integer; 

inputArrayは(FPCリファレンスマニュアル14.4.5、オープン配列パラメータを参照)オープンアレイです。インデックスの範囲は0〜4、より良い 、low(inputArray)およびhigh(inputArray)です。リピートループでは、inputArray [5]を使用します。インデックス5は範囲外です。

2

あなたの機能は間違っています​​。

引数var inputArray : array of integerは、0からインデックスされたオープン配列です。

Run-time errorsを参照してください:

201範囲チェックエラー

あなたは範囲が上のチェックを使用してプログラムをコンパイルした場合、その後、あなたは次の場合に、このエラーを取得することができます:

* An array was accessed with an index outside its declared range. 
* Trying to assign a value to a variable outside its range (for instance an enumerated type). 

ここでは、宣言された範囲外のインデックスを使用しています。関数は、一般的なようになります

for sumIndex := 0 to High(inputArray) do ... 

、配列のサイズに依存しない:

は、このようなあなたのループに何かをしてください。

関連する問題