我做了一些搜索,说它是关于存储一个不适合的值,但我不知道它是如何在我的代码中发生的。我检查了我的代码很多次,但我仍然得到这个。我做了一些搜索,说它是关于存储一个不适合的值,但我不知道它是如何在我的代码中发生的。我多次查看我的代码,但我还是得到了这个。
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 :(得分:2)
在函数声明中
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
inputArray在打开数组上(参见FPC参考手册14.4.5,打开数组参数)。索引边界为0到4,更好
使用function getSUM(var inputArray : array of integer) : integer;
和low(inputArray)
。在你的重复循环中使用
inputArray [5],其中索引5超出范围。
答案 1 :(得分:2)
您在函数GetSum
中犯了错误。
参数var inputArray : array of integer
是一个从零开始索引的开放数组。
请参阅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 ...
这将使函数成为通用的,与数组大小无关。
答案 2 :(得分:2)
另外两个答案已正确识别问题的原因,即您使用两种不同的数组类型,不同的基数,1对0。
但是,您可以通过声明自己的整数数组类型然后一致地使用它来避免此问题, 如在
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仅在此版本的程序中出现一次,使用标准Low
和High
函数意味着5
只需要一个地方const NumOfElements = 5;
type
TInputArray = array[1..NumOfElements] of Integer;
如果要更改数组的大小,可以更改。事实上,将元素数量定义为常量并在数组声明中使用常量可能更好,如
commands:
01_yum_update:
command: sudo yum -y update
02_epel_repo:
command: sudo yum-config-manager -y --enable epel
03_install_gdal_packages:
command: sudo yum -y install gdal gdal-devel
files:
"/etc/httpd/conf.d/wsgihacks.conf":
mode: "000644"
owner: root
group: root
content: |
WSGIPassAuthorization On
packages:
yum:
git: []
postgresql95-devel: []
gettext: []
libjpeg-turbo-devel: []
libffi-devel: []