목적
  - 행렬 연산을 C 와 연관시키고 포인터를 활용하여 배열을 쉽게 접근한다.

문제
사용자 삽입 이미지

코드

#include <iostream>

using namespace std;

int main(void)
{
 int aiMatrixA[2][3] = {0};
 int aiMatrixB[2][3] = {0};
 int aiIn[6] = {0};
 int *pMatrixA, *pMatrixB, i;
 pMatrixA = pMatrixB = 0;
 i = 0;

 pMatrixA = &aiMatrixA[0][0];
 pMatrixB = &aiMatrixB[0][0];


 cout << "첫번째 행렬의 각 원소의 6개를 입력하세요 : ";
 while(i<6)
 {
  cin >> aiIn[i];
  *pMatrixA = aiIn[i];
  i++;
  pMatrixA++;

 }

 i = 0;

 cout << "두번째 행렬의 각 원소의 6개를 입력하세요 : ";

 while(i<6)
 {
  cin >> aiIn[i];
  *pMatrixB = aiIn[i];
  i++;
  pMatrixB++;

 }

 i = 0;
 pMatrixA = &aiMatrixA[0][0];
 pMatrixB = &aiMatrixB[0][0];

 
 cout << "x = " << endl << '\t';
 
 while(i < 3)
 {
  cout << *pMatrixA << "  ";
  pMatrixA++;
  i++;

 }

 cout << endl << '\t';

 while(i < 6)
 {
  cout << *pMatrixA << "  ";
  pMatrixA++;
  i++;

 }

 i = 0;
 cout << endl << "y = " << endl << '\t';

 while(i < 3)
 {
  cout << *pMatrixB << "  ";
  pMatrixB++;
  i++;

 }

 cout << endl << '\t';

 while(i < 6)
 {
  cout << *pMatrixB << "  ";
  pMatrixB++;
  i++;

 }

 i = 0;
 pMatrixA = &aiMatrixA[0][0];
 pMatrixB = &aiMatrixB[0][0];

 
 cout << endl << "x + y  = " << endl << '\t';

  while(i < 3)
 {
  cout << *pMatrixA + *pMatrixB << "  ";
  pMatrixA++;
  pMatrixB++;
  i++;

 }

 cout << endl << '\t';

 while(i < 6)
 {
  cout << *pMatrixA + *pMatrixB << "  ";
  pMatrixA++;
  pMatrixB++;
  i++;

 }

 cout << endl;

 return 0;
}

해설
  - 포인터는 주소를 가리키므로 해당 행렬의 첫번째 번지를 가리키게 합니다. 포인터 값을 +1 한다는 것은 해당 주소형인 int 형의 자료크기 만큼 이동하므로 행렬에서 옆 원소로 이동하며 by 줄(행)이 끝이 나면 다음 줄(열)로 이동합니다.
  - 포인터에 * 가 붙은것은 참조 하라는 뜻으로 해당 주소에 저장된 값을 불러 냅니다. 6칸읜 셀(원소가 각각 aiMatrixA 와 aiMatrixB 로 저장되어 있습니다. 포인터로 한 원소씩 접근할수 있게 했습니다.
  - 행렬이 저장된 구조와 포인터가 접근하는 방식에 대해 이해하면 코드 풀이가 한결 쉬워집니다.

참고
  - http://reduck.uos.ac.kr/entry/전산물리-포인터-이용하기 : 더 쉬운 예제
  - 구글 검색

Posted by 카켈




목적
  - 포인터를 이해한다.
  - 삼항 연산자를 자유롭게 쓴다.

문제

사용자 삽입 이미지
코드

#include <iostream>

using namespace std;

int main(void)
{
 float afIn[4] = {0};
 int i = 0;
 float *fMax,*fMin;
 fMax = fMin = &afIn[0];

 cout << "네 개의 실수를 입력하세요 : ";
 while(i < 4)
 {
  cin >> afIn[i];
  fMax = (*fMax < afIn[i] ? &afIn[i] : fMax);
  fMin = (*fMin > afIn[i] ? &afIn[i] : fMin);
  i++;
 
 }

 
 cout << "최소값 : " << *fMin << endl << "최대값 : " << *fMax << endl;

 return 0;
}


해설
  - 포인터로 *[변수] 선언시 [변수] 는 그 값이 저장될 주소(reference)를 가리키며 *[변수]를 하면 그 저장된 주소로 가면 가지고 있는 값을 가리킵니다.(derefernce)
  - 포인터 아닌 일반 변수가 포인터에서 쓰는 주소를 저장하고 싶으면 앞에 & (reference) 연산자를 붙이면 됩니다. C++ 에서 새로 추가된 기능 중 하나 입니다.
  - 삼항 연산자는 많이 풀어 봐서 이해 되실 겁니다. 유사 예제들을 검색해서 보시기 바랍니다.

참고
  -유사문제

Posted by 카켈
이전페이지 1 다음페이지