[C언어] 행렬곱셈 프로그램

  • 등록일 / 수정일
  • 페이지 / 형식
  • 자료평가
  • 구매가격
  • 2007.11.07 / 2019.12.24
  • 6페이지 / fileicon zip (압축파일)
  • 평가한 분이 없습니다. (구매금액의 3%지급)
  • 1,000원
다운로드장바구니
Naver Naver로그인 Kakao Kakao로그인
[C언어] 행렬곱셈 프로그램
목차
void multi_matrix(int m1[], int m2[], int m3[], int m, int n, int l); // 행렬을 곱하는 함수.
void print_matrix(int ma[], int m, int n); // 행렬을 출력하는 함수.
void Get_matrix(int ma[], int m, int n); // 행렬을 생성하는 함수.
본문내용
Ⅰ. 문제의 제기
행렬의 곱셈은 첫 행렬의 열의 개수와 두 번째 행렬의 행의 개수가 같을 때만 정의된다. 그 결과로 나오는 행렬은 A행렬이 m*n, B행렬이 n*l 일 때, m*l이 된다. 이러한 규칙에 따라 행렬의 곱셈 프로그램을 제작해본다. 특히, 곱셈의 공식을 표현할 방법, 행렬을 어떠한 방식으로 받아오고 제어할 것인지, 저장 방식에서 배열은 2차원으로 할 것인지 1차원으로 할 것인지, 파라미터로 넘겨주는 과정에서 함수의 재사용성을 극대화하기 위해서는 어떠한 방식을 취해야 하는지를 중심으로 검토하여 본다.
※ 작성된 프로그램의 전체 소스 #붙임1 (multi.cpp)

Ⅱ. 문제해결의 방식 및 알고리즘 구현
1. 프로그램 설명
행렬의 곱셈 프로그램은 배열을 이용하여 두 개의 행렬을 생성하고, 그 두 행렬을 곱한 결과를 출력하여 주는 것으로서, 함수들을 이용하여 구현한다.

2. 문제해결 접근 방식
(1) 행렬의 곱셈 공식을 표현할 방법
행렬의 곱셈은 앞서 설명한 바에 따라 첫 행렬의 열의 개수와 두 번째 행렬의 행의 개수가 같아야 한다. 곱셈을 공식으로 표현하자면-2*3, 3*2 행렬을 이용- 아래와 같다.

공식에 따르면 첫 행렬의 행 값들과 두 번째 행렬의 열 값들을 곱한 결과를 합한 것이 결과행렬에 들어가게 되는 것이다. 따라서 프로그램을 위해서는 결과행렬의 현재 행/열을 제어할 for문이 필요할 것이며, 그 와 동시에 첫 번째 행렬의 행(두 번째 행렬의 열)을 제어할 for문이 필요할 것이다. 따라서 3중 루프로 구현되어야 한다. 또한 곱한 결과를 계속해서 더해줘야 하므로 결과행렬의 현재 행/열은 한번의 초기화가 필요할 것이다. 초기화는 한번만 해주어야 하는데, 그 이유는 계산이 시작되면 계속해서 곱한 결과를 더해주어야 하기 때문이다.

(2) 배열을 이용한 행렬의 표현 방법
행렬은 2차원 배열과 그 구조가 동일하다. 따라서 2차원 배열을 이용하면 간단하다. 이때 함수를 이용하면 2차원 배열은 두 개의 주소-행의 시작과 열의 시작 주소-를 가지고 있기 때문에 두 개의 포인터를 넘겨주던가, 열 값을 항상 지정해 주어야 하는 불편함이 따른다. 물론 C언어-확장자가 c인 소스-에서는 2차원 배열로 선언하여도 1차원 배열로 함수에서 받아서 사용할 수 있으므로(warning은 있다.) 크게 제한이 없으나 지금은 C++(확장자가 cpp)로 구현하기 때문에 포인터의 사용에 조심해야한다. 따라서 초기 배열을 선언은 1차원으로 한다. 크기는 행과 열을 곱한 만큼으로 잡아주고 시작한다. 함수에서도 1차원 배열로 받아오며, 이때 행/열의 값을 파라미터로 받아와 함수 내에서는 2차원 배열과 동일하게 사용한다. 2차원 배열과 동일하게 사용하는 방법은 배열은 연속된 메모리공간에 표현된 자료구조라는 점에 착안하여 행을 제어하는 변수와 열을 제어하는 변수를 놓고, 행을 제어하는 변수에 열 값을 곱해주어 행을 임의적으로 가르치게 한다. 여기에 열을 제어하는 변수를 더해주기만 하면 2차원 배열과 동일한 효과를 볼 수 있다. 따라서 2*3행렬에서 k행, j열은 k*3+j로 인덱스를 표현할 수 있을 것이다. 이 방식을 이용하면 함수에서의 이동이 자유롭고 행렬의 크기가 바뀌어도 다시 함수를 정의하지 않아서 재사용 측면에서 용이하다. 그리고 행렬을 생성하고 출력 곱셈하는 단계에서도 2차원 배열과 같이 for문의 카운터를 이용하여 충분히 제어할 수 있게 되는 것이다.
자료평가
    아직 평가한 내용이 없습니다.
회원 추천자료
  • 2022년 2학기 방송통신대 대학수학의이해 통계데이터과학 출석수업대체과제물)자신의 실제 CAS 사용 경험이나 학습 경험을 명시적으로 기술 CAS 등 컴퓨터 소프트웨어를 이용한 수학 학습 방법에 대해 찬성 또는 반대 중 하나의 입장 등
  • 설치하면, 그래프가 그려지지 않고 에러가 발생할 수 있다. wxMaxima error: cant open file c:/png)다운받은 파일을 실행하면 설치 옵션이 보이는데, 맨 아래에 있는 wxMaxima를 선택하면 된다.5. 참고문헌장영재이긍희김병찬유원석(2020) 대학수학의 이해, 방송대출판문화원wxMaxima 사용법 동영상https://www.youtube.com/watch?v=IctYqh6NdEc&list=PLGfO3O2Px4lFmTHUWEC2WLHEjhlA1vnbi)maxima-5.46.0-win64.exe 다운로드https://sourceforge.net/projects/maxima/files/Maxima-Windows/5.46.0-Windows/

  • [프로그래밍언어] 3D Animation 게임에 적합한 프로그래밍 언어 설계
  • 언어 구현 기법 프로그래밍 언어의 구현 방법은 크게 2가지 있다. 컴파일 방식과 Interpreted 방식 2가지가 있는데 각각의 특징은 아래와 같다.1.컴파일 (compiled language)고급 언어로 작성된 프로그램을 기계어로 변역하는 언어이다. 실제 연산을 담당하는 프로세서가 이해할 수 있기 때문에, 연산 속도가 빠르다는 장점이 있지만, 프로세서 의존적이기 때문에 플랫폼 변화에 따라 코드의 수정과 새로운 컴파일이 필요하다.ex)C, C++, Pascal, Portran2.Interpreted langu

  • 객체지향이란 무엇인가
  • 프로그램에서 이용하는 자료 구조를 프로그래머에게 감출 수 있고, 프로그래머는 이러한 자세한 것은 소프트웨어에게 맡기고 자기는 원하는 기능을 불러 쓰면 되는 것이다. 이러한 상황들을 수용해서 프로그램을 편하게 짤 수 있고 재사용도 할 수 있어 효율적인 제작이 가능하다는 점이 OOP를 등장하게 하는 주된 요인이 되었다. Smalltalk이 대표적인 OOP 언어이며 지금 현재도 많은 OOP언어들이 개발되었거나 개발되고 있다. C++, 오프젝티브 C, 엑터(Actor),

  • 객체지향이란 무엇인가
  • 프로그램에서 이용하는 자료 구조를 프로그래머에게 감출 수 있고, 프로그래머는 이러한 자세한 것은 소프트웨어에게 맡기고 자기는 원하는 기능을 불러 쓰면 되는 것이다. 이러한 상황들을 수용해서 프로그램을 편하게 짤 수 있고 재사용도 할 수 있어 효율적인 제작이 가능하다는 점이 OOP를 등장하게 하는 주된 요인이 되었다. Smalltalk이 대표적인 OOP 언어이며 지금 현재도 많은 OOP언어들이 개발되었거나 개발되고 있다. C++, 오프젝티브 C, 엑터(Actor),

  • C언어로 쉽게 풀어쓴 자료구조 연습문제 답
  • 프로그램을 작성하시오.int ack(int m, int n) if (m 0) return( n + 1 );if (n 0) return( ack(m - 1, 1) );return( ack(m - 1, ack(m, (n - 1))) );(c) 위의 순환적인 프로그램을 for, while, do와 같은 반복구조를 사용한 비순환적 프로그램으로 바꾸시오.int ack2(int m, int n)while (m != 0)if (n 0)n = 1;elsen = ack2(m, n-1);m = m - 1;return n+1;20. 본문의 순환적인 피보나치 수열 프로그램과 반복적인 피보나치 수열 프로그램의 수행 시간을 측정하여 비교하라. 어떤 결론을 내릴 수 있

오늘 본 자료 더보기
  • 오늘 본 자료가 없습니다.
  • 저작권 관련 사항 정보 및 게시물 내용의 진실성에 대하여 레포트샵은 보증하지 아니하며, 해당 정보 및 게시물의 저작권과 기타 법적 책임은 자료 등록자에게 있습니다. 위 정보 및 게시물 내용의 불법적 이용, 무단 전재·배포는 금지됩니다. 저작권침해, 명예훼손 등 분쟁요소 발견시 고객센터에 신고해 주시기 바랍니다.
    사업자등록번호 220-06-55095 대표.신현웅 주소.서울시 서초구 방배로10길 18, 402호 대표전화.02-539-9392
    개인정보책임자.박정아 통신판매업신고번호 제2017-서울서초-1806호 이메일 help@reportshop.co.kr
    copyright (c) 2003 reoprtshop. steel All reserved.