[C언어-기초실습-10] 2X2 행렬 계산하기
[C언어-기초실습-10] 2X2 행렬 계산하기
- 다운 사이트 : https://sourceforge.net/projects/orwelldevcpp/
- 웹컴파일러 : https://www.tutorialspoint.com/compile_c_online.php
오늘은 행렬에 대해 어떻게 코딩하는지에 대해 알아보도록 하죠.
1. 문제의 이해
2x2 행렬이 다음과 같이 주어졌을 때 코딩에서는 어떻게 표현할까요.
for(i=0;i<2;i++){
for(j=0;j<2;j++){
A[i][j]행렬
}
}
이렇게 표현 할 수 있습니다.
행렬의 덧셈
2x2행렬은 다음과 같습니다.
이 표현을 코딩으로 어떻게 표현해야 할까요.
C[0][0] = A[0][0] + B[0][0];
C[0][1] = A[0][1] + B[0][1];
C[1][0] = A[1][0] + B[1][0];
C[1][1] = A[1][1] + B[1][1];
이렇게 됩니다. 그런데 일일히 행령의 합 코딩을 나열하기 보다는 규칙성을 찾아서 For문으로 표현해주는 것이 좋습니다. 아래와 같이 수정하시면 됩니다.
for(i=0;i<2;i++){
for(j=0;j<2;j++){
C[i][j]=A[i][j]+B[i][j];
}
}
행령의 곱
위와 같이 2x2행령의 곱은 어떻게 표현 할까요.
일일히 나열하면 다음과 같습니다.
C[0][0]=(A[0][0]*B[0][0])+(A[0][1]*B[1][0]);
C[0][1]=(A[0][0]*B[0][1])+(A[0][1]*B[1][1]);
C[1][0]=(A[1][0]*B[0][0])+(A[1][1]*B[1][0]);
C[1][1]=(A[1][0]*B[0][1])+(A[1][1]*B[1][1]);
그런데 이렇게 일일히 코딩하는 것보다 For문으로 표현하는 것이 좋습니다.
for(i=0;i<2;i++){
for(j=0;j<2;j++){
C[i][j]=A[i][0]*B[0][j] + A[i][1]*B[1][j];
}
}
이제 위 코딩이 정상적으로 동작하는지 코딩해보고 실행 결과를 살펴보도록 하죠.
2. 코딩
[전체소스]
#include <stdio.h>
#include <Windows.h>
int main(int argc, char *argv[]) {
int A[2][2] = {{1, 2}, {3, 4}};
int B[2][2] = {{1, 2}, {3, 4}};
int C[2][2];
int i,j;
printf("행렬의 합 : \n");
for(i=0;i<2;i++){
for(j=0;j<2;j++){
C[i][j]=A[i][j]+B[i][j];
}
}
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%2d ", C[i][j]);
}
printf("\n");
}
printf("행렬의 곱 : \n");
for(i=0;i<2;i++){
for(j=0;j<2;j++){
C[i][j]=A[i][0]*B[0][j] + A[i][1]*B[1][j];
}
}
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%2d ", C[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
[결과]
마무리
간단히 행렬 계산에서 2x2행렬에 대해서 알아보았습니다. 일반적으로 행렬을 코딩할 때 일일히 코딩하지는 않습니다. 위에서 살펴본 For문을 통해서 행렬을 기본적으로 사용합니다. 행렬이 나오면 그냥 For문이 머리속에서 그려져야 합니다. 그래야 행렬을 쉽게 코딩 할 수 있습니다.
머리속에 그려져야된다. 헐 ㅎㅎ 재밌네요.
행렬이 for문으로 머리속에 담고 이미지로 그리고 나면 나중에 역행렬을 배우게 되고 그 역행렬을 이용하여 회전 역행렬로 2D 이미지 좌표를 3D 이미지 좌표로 변환 시킬 수 있게 되어 재미 있어요.
예전 학창 시절에 2D 이미지의 수백장의 체적데이터를 행렬을 이용하여 컴퓨터 상의 가상 3D 좌표를 만들어내여 이미지를 출력 했었지요.
그리고 행렬의 경우는 C언어로 푼 수치해석을 보면 엄청 재미 있어요.
우와, 2D를 3D로 만들 수 있군요. ^^
행복한 한 주 되셔요 천간님!!^^
즐거운 월요일입니다. 활기차게 시작 합시다.
덕분에 즐겁게 보냈네요^^
갑자기 든 궁금증인데요, 코딩은 어느나라에서 시작했을까요? ㅎㅎ 영어로 쓰니 영어권일까나요~
흐음!
컴퓨터의 역사를 거슬러 올라가야 하는데...
시초로 보는건 주판이 아닐까요. 수동으로 사람의 주판을 튀기는 동작을 하지만 계산하는 능력으로 보면 주판을 튀기는 동작 자체가 코딩에 가깝다고 생각해도 될 듯요.
전자기기로는 독일의 기계식 계산기이고요.
우리가 아는 컴퓨터 세대로 따지면 1세대 진공관컴퓨터를 들 수 있고요.
프로그램언어적으로 본다면 천공카드인가 일거에요.
그런데 일반적 인간이 이해할 수 있는 언어의 코딩을 따지면 어셈블리어일 것 같군요.