2017-09-13 1 views
0

저는 Io 언어를 배우고 있으며 목록 목록을 사용하여 여러 행렬을 함께 사용하는 방법을 알고 싶습니다. Io 언어 목록을 사용하여 두 행렬을 곱하는 방법은 무엇입니까?

여기에 지금까지 내 코드입니다 :
mA := List clone 
mA := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)) 
mB := List clone 
mB := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9)) 
mC := List clone 
mC := list(list(0, 0, 0), list(0, 0, 0), list(0, 0, 0)) 

i := 0 
j := 0 
k := 0 

for(i, 0, mA size, 
    for(j, 0, mB size (at(0)), 
     for(k, 0, mB size, 
      mC atPut(mC at(i) at(j), mC at(i) at(j) + mA at(i) at(k) * mB at(k) at(j)) 
     ) 
    ) 
) 

은 "전무가 '*'에 응답하지 않습니다"라는 오류가 말한다 통해이 코드를 실행

. 그래서 실제로 중첩 된 for 루프 내부에 실제로 곱해지면, 범위 밖의 목록에 들어갑니다. 적어도 그것이 내가하고 있다고 생각하는 것입니다. 그러므로 오류입니다. 내가 for 루프를 바꿀 다른 것을 정말로 모르겠다. 테스트 할 매트릭스 목록의 크기이기 때문에 2와 3으로 변경했습니다. 그러나 동일한 오류가 발생했습니다.

답변

2

처음에는 인덱스가 배열에없는 위치를 찾으려고 할 때이 오류가 발생합니다. (

목록 (81, 55, 목록 : 크기-1

설정은 그래서 당신은 다른 문제는 출력은 다음과 같이보고 끝나는되고있는 '전무'값

를받지 않습니다 0, 0, 0))

나는 그것이 임시 목록, 임시 합계 값, Append 메서드를 사용하여이었다 해결 방법 :이

  for(i, 0, mA size-1, 
       tempList := List clone 
       for(j, 0, mB size (at(0))-1, 
       sum := 0 
       for(k, 0, mB size-1, 
        sum = sum + mA at(i) at(k) * mB at(k) at(j) 
        ) 
        tempList append(sum) 
       ) 
       mC atPut(i,tempList) 
       ) 

을, 당신은 당신의 등이와 끝까지해야한다 매트릭스 :

목록 (목록 (30, 36, 42), 목록 (66, 81, 96), 목록 (102, 126, 150))

관련 문제