[C언어-기초실습-10] 2X2 행렬 계산하기

in #kr-dev5 years ago (edited)

[C언어-기초실습-10] 2X2 행렬 계산하기



오늘은 행렬에 대해 어떻게 코딩하는지에 대해 알아보도록 하죠.

1. 문제의 이해


a1.jpg

2x2 행렬이 다음과 같이 주어졌을 때 코딩에서는 어떻게 표현할까요.

for(i=0;i<2;i++){
  for(j=0;j<2;j++){
     A[i][j]행렬
  }
}

이렇게 표현 할 수 있습니다.

행렬의 덧셈


2x2행렬은 다음과 같습니다.
a2.jpg

이 표현을 코딩으로 어떻게 표현해야 할까요.

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];
     }
} 

행령의 곱


a3.jpg

위와 같이 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;
    
}

[결과]
aa1.jpg

마무리


간단히 행렬 계산에서 2x2행렬에 대해서 알아보았습니다. 일반적으로 행렬을 코딩할 때 일일히 코딩하지는 않습니다. 위에서 살펴본 For문을 통해서 행렬을 기본적으로 사용합니다. 행렬이 나오면 그냥 For문이 머리속에서 그려져야 합니다. 그래야 행렬을 쉽게 코딩 할 수 있습니다.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

머리속에 그려져야된다. 헐 ㅎㅎ 재밌네요.

행렬이 for문으로 머리속에 담고 이미지로 그리고 나면 나중에 역행렬을 배우게 되고 그 역행렬을 이용하여 회전 역행렬로 2D 이미지 좌표를 3D 이미지 좌표로 변환 시킬 수 있게 되어 재미 있어요.
예전 학창 시절에 2D 이미지의 수백장의 체적데이터를 행렬을 이용하여 컴퓨터 상의 가상 3D 좌표를 만들어내여 이미지를 출력 했었지요.
그리고 행렬의 경우는 C언어로 푼 수치해석을 보면 엄청 재미 있어요.

우와, 2D를 3D로 만들 수 있군요. ^^

행복한 한 주 되셔요 천간님!!^^

즐거운 월요일입니다. 활기차게 시작 합시다.

덕분에 즐겁게 보냈네요^^

갑자기 든 궁금증인데요, 코딩은 어느나라에서 시작했을까요? ㅎㅎ 영어로 쓰니 영어권일까나요~

흐음!
컴퓨터의 역사를 거슬러 올라가야 하는데...
시초로 보는건 주판이 아닐까요. 수동으로 사람의 주판을 튀기는 동작을 하지만 계산하는 능력으로 보면 주판을 튀기는 동작 자체가 코딩에 가깝다고 생각해도 될 듯요.
전자기기로는 독일의 기계식 계산기이고요.
우리가 아는 컴퓨터 세대로 따지면 1세대 진공관컴퓨터를 들 수 있고요.
프로그램언어적으로 본다면 천공카드인가 일거에요.
그런데 일반적 인간이 이해할 수 있는 언어의 코딩을 따지면 어셈블리어일 것 같군요.

Coin Marketplace

STEEM 0.29
TRX 0.12
JST 0.033
BTC 63149.00
ETH 3156.91
USDT 1.00
SBD 3.85