如何在不指定 turbo-pascal 中的最后两次迭代的情况下创建一个每次迭代使用 3 个索引的循环?
How to make a loop that uses 3 of indexes each iteration without specifying last two iterations in turbo-pascal?
我有一个包含 PointType 对象的数组:
const coords : array[0..6] of PointType =
((x:220, y:410),
(x:120, y:110),
(x:480, y: 60),
(x:320, y:200),
(x:560, y:190),
(x:390, y:360),
(x:600, y:440));
我需要做一个循环来遍历所有这些点,但在每次迭代中使用其中的 3 个点,并且 return 到开头。像这样:
arrayLength := SizeOf(coords) div SizeOf(PointType);
for i := 1 to (arrayLength-2)
do begin
WriteLn(someFunction(coords[i-1], coords[i], coords[i+1]));
end;
WriteLn(someFunction(coords[arrayLength - 2], coords[arrayLength - 1], coords[0]));
WriteLn(someFunction(coords[arrayLength - 1], coords[0], coords[1]));
是否有一种正确的方法可以在一次操作中完成此操作,而不指定最后两次迭代?
这应该可以解决问题:
arrayLength := SizeOf(coords) div SizeOf(PointType);
for i := 0 to (arrayLength-1)
do begin
WriteLn(someFunction(coords[i],
coords[(i+1) mod arrayLength],
coords[(i+2) mod arrayLength]));
end;
我有一个包含 PointType 对象的数组:
const coords : array[0..6] of PointType =
((x:220, y:410),
(x:120, y:110),
(x:480, y: 60),
(x:320, y:200),
(x:560, y:190),
(x:390, y:360),
(x:600, y:440));
我需要做一个循环来遍历所有这些点,但在每次迭代中使用其中的 3 个点,并且 return 到开头。像这样:
arrayLength := SizeOf(coords) div SizeOf(PointType);
for i := 1 to (arrayLength-2)
do begin
WriteLn(someFunction(coords[i-1], coords[i], coords[i+1]));
end;
WriteLn(someFunction(coords[arrayLength - 2], coords[arrayLength - 1], coords[0]));
WriteLn(someFunction(coords[arrayLength - 1], coords[0], coords[1]));
是否有一种正确的方法可以在一次操作中完成此操作,而不指定最后两次迭代?
这应该可以解决问题:
arrayLength := SizeOf(coords) div SizeOf(PointType);
for i := 0 to (arrayLength-1)
do begin
WriteLn(someFunction(coords[i],
coords[(i+1) mod arrayLength],
coords[(i+2) mod arrayLength]));
end;