2017-10-29 13 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

파스칼 기반 배열 인덱스 0이 아닙니까? – Hintham

+2

@Hintham : 꼭 그런 것은 아니지만이 경우에는 그렇습니다. Op는'for i : = Low (Perm) to High (Perm) ... '와 같이 더 잘할 것입니다. – MartynA

+0

루프 조건을 귀하의 제안으로 전환했습니다. 감사합니다. 내 변수 중 하나가 너무 작을 수 있습니까? {$ mode Delphi} 지시문을 포함해서 그와 같은 것을 처리 할 것이라고 생각했습니다. ... – Reccho

답변

1

나는 당신의 문제는 라인에 생각 : 그렇지 않으면

perm[i] := x;

내가 100 ×을 입력하면 :

perm[x] := i; 난 당신이 있었다 쓸 무엇을 의미하는지 생각 다음 코드는 첫 번째 반복에서 perm [100] = 1을 수행합니다. N에 10을 입력하면 범위 오류가 발생합니다.

+0

아, 감사합니다. 고쳐서, 더 이상 런타임 오류가 발생하지 않습니다. – Reccho

+0

배열은 0부터 시작하는 인덱스를 사용합니다. 당신은 대답에서 언급해야합니다. –

+0

아니요, 아닙니다. 그 문제는 질문 자체에 대한 논평에서 다루어졌다. OP가 대답하기 전에 그 문제를 언급했다고 이미 말했습니다. 내가 파스칼의 다양한 기본 시스템을 언급했다면 누군가 다른 사람을 복사하는 것에 대해 나를 찬성표를 던 졌을 것이다. –