안녕하세요...
일단 행렬의 곱에 대한(승에 대한)정의가 먼저 되어야 겠네요...
일단 행렬의 100승이라는 것이 행렬간의 100번의 곱이라고 생각할때....
確認するあとに 質問があれば 質問御願いします。
#include <stdio.h>
#include <math.h>
int main()
{
// 초기값
int mat_src[][3] = {{1,1,1},{1,1,2},{2,1,2}};
//임시변수
int mat_tmp[][3] = {0,};
// 값이 저장될 곳
int mat_res[][3] = {{1,1,1},{1,1,2},{2,1,2}};
int i, j, k, p;
int dPow; // 승수
for(dPow = 0; dPow < 99; dPow++) // 여기서 100승이면 실제로는 99번이 곱해져야됨.....그래서 99
{
//result에 있는 값을 임시변수에 저장
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
mat_tmp[i][j] = mat_res[i][j];
}
}
// 여기가 행렬의 곱셈
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
for (k = 0; k < 3; k++)
{ //임시변수와 초기값을 곱함
p += mat_tmp[i][k]*mat_src[k][j];
}
// 임시변수와의 곱의 결과를 결과에 저장
mat_res[i][j] = p;
}
}
}
// 결과 출력
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%5d", mat_res[i][j]);
}
printf("\n");
}
}
발차기 님이 쓰신 글 :
: 3*3행렬의 100승을구해야되는데...
: 자꾸 엉뚱한 값이 나오네요....행렬의 지수승은 일반 정수의 지수승과는 틀릴것 같은데 그걸 잘 모르겠어요
: 자꾸 혼자서 해매기만해서 일단 물어보려고 이렇게 올립니다...
: 도와주세요 ...
:
: #include <stdio.h>
: #include <math.h>
: int main()
: {
: int mat1[][3] = {{1,1,1},{1,1,2},{2,1,2}};
: int mat2[][3] = {{1,1,1},{1,1,2},{2,1,2}};
:
: int res[3][3];
:
: int i, j, k, p;
:
:
:
: for (i = 0; i < 3; i++)
: for (j = 0; j < 3; j++)
: {
: for (k = 0, r = 0; k < 3; k++)
: p += mat1[i][k]*mat2[k][j];
: res[i][j] = p;
:
:
: }
:
:
: for (i = 0; i < 3; i++)
: {
: for (j = 0; j < 3; j++){
: printf("%5d", res[i][j]);
: }
: printf("\t%f\t%f\t%f\n",pow(res[i][j],200)); <---이부분을 이렇게 해봤는데...엉뚱한값이나오고 일반정수 지수구하는것 처럼for문을 돌려도 값이 엉뚱합니다.... 도와주실분 안계신가요...
: printf("\n");
:
: }
:
:
: return 0;
: }
|