2014-10-03 1 views
0

좋아요, 그래서 7 자리 입력을 알려진 7 자리 입력 세트와 비교하고 그 사이의 거리를 찾는 프로그램을 작성하고 있습니다. 모든 것은 내가 "인덱스의 컴퍼넌트에 필요한 배열 유형이"인덱싱 된 구성 요소에 배열 유형이 필요합니다. ADA

pickbit1: 
    FOR X IN 1 .. 7 LOOP 
    pickdigit1: 
    FOR Y IN 0 .. 9 LOOP 
    IF a1(X) /= Compare(Y)(X) THEN 
     d1(X)(Y) := d1(X)(Y) + 1; 
    END IF; 
    END LOOP pickdigit1; 
END LOOP Pickbit1; 

오류가 루프에 대한 두 번째가 생성되는 라인에서 발생하는 내용의 오류를 받고 있어요는 사실을 제외하고 잘 컴파일합니다. 왜 거기에 배열의 색인을 참조하는 오류가 있을지 모르겠다. 내 배열 유형은 다음과 같습니다.

subtype segment is Character range '0' .. '1'; 
subtype distance is Integer; 
subtype c is Character range ' ' .. ' '; 
type Segment_Array is array(1 .. 7) of segment; 
type Digit_Array is array(1 .. 7) of Character range '0' .. '1'; 
type Compare_Array IS array(0 .. 9) of Digit_Array; 
type Distance_Array IS array(0 .. 9) of distance; 
type Total_Array IS array(0 .. 9, 0 .. 9) of Integer; 

는 Segment_Array (A1) (D1)는 Distance_Array하고 d1Distance_Array 인 경우 Compare_Array

+0

* 너무 * A [짧은 자체에 포함 된 우리를주는 가까운 컴파일 가능한 예] (http://sscce.org). 그리고 오류 메시지가 내장 된 소스 목록에는'-gnatfl'을 권장합니다. –

답변

2

입니다 d1(X)distance (Integer의 하위 유형)를 반환 비교. Integer (또는 distance)은 배열 유형이 아니며 더 이상 인덱싱 할 수 없으므로 컴파일러는 d1(X)(Y)을 수행하려고 할 때 불평합니다. 컴파일러는 루프가 생성 된 라인에 대해 불평하는 이유 가 나는 라인에 대해 불평한다, 모르는 : 당신은 온

d1(X)(Y) := d1(X)(Y) + 1; 
+0

시도해 보았을 때 컴파일러가 지정한 행에 대해 불평했습니다. –