본문 바로가기
공부/c++

#1 이차원 배열 | 파스칼의 삼각형 | cin 다시 입력 받기 | 포인터 개념 | c++ | 기본

by 심심한 뾰 2021. 8. 5.
반응형

오늘은 c++ 복습을 하는데 약간 까먹은 개념들이 있어 다시 정리하려고 한다.

#이차원 배열
-이차원 배열 개념-
이차원 배열은 말 그대로 2차원으로 배열을 만들 수 있다.
첫 번째 그림처럼 열과 행으로 생각할 수 있고, 순서는 한 행당 열이 끝난 후, 다음 행이 시작된다.
행과 열을 구분하기 어려울 때, 열 쇠로(세로)라고 외우면 외우기 쉽다.

왼쪽 코드는 이차원 배열을 정의한 후 출력한 것으로,
위의 코드(arr)를 아래 코드(arr1) 보다 추천한다.
위의 코드가 더 보기 편하기 때문이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main(){
  int arr[3][4= {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
  };
 
  int arr1[3][4= {1,2,3,4,
                    5,6,7,8,
                    9,10,11,12};
 
  for(int i = 0; i < 3; i++){
    for(int j = 0; j < 4; j++){
      std::cout << arr[i][j] << std::endl;
    }
  }
}
 
cs


-이차원 배열을 활용한 파스칼의 삼각형 코드 짜기-
다음은, 이차원 배열을 활용한 파스칼의 삼각형 코드 짜기이다.

먼저, 코드를 짜기 전에, 대충 어떻게 짤지 생각을 해보았다.
위에서 배운 이차원 배열을 행과 열 개념으로 파스칼의 코드를 짤 수 있었다.

코드 짜기 전 구현

파스칼 삼각형을 짠 코드이다.
행 10, 열 10인 코드를 짰기에 파스칼의 층 수보다 큰 수가 입력됐을 때, 다시 입력받는 코드도 구현해보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <climits> //for 'SSIZE_MAX'
//파스칼의 삼각형
int main() {
  using namespace std;
  int arr[10][10];
  int num;  //파스칼 층 수
 
  cin >> num;
  while(!cin || num > 10){        //11이상의 수를 입력 받을 때, 다시 입력받기
    cin.clear();
    cin.ignore(SSIZE_MAX, '\n');
    cin >> num;
  }
 
  for(int i = 0; i < num; i++){
    for (int j = 0; j <= i; j++){
 
      if((j == 0|| (i == j)){
        arr[i][j] = 1;
      }
      else{
        arr[i][j] = arr[i-1][j-1+ arr[i-1][j];
      }
 
      cout << arr[i][j] << " ";
 
    }
    cout<< endl;
  }
 
  return 0;
}
 
cs


구현 결과이다. 11이상인 11,12가 입력됐을 때는 다시 입력받는 모습을 보여준다.
반대로, 10이 입력되었을 때는 파스칼의 삼각형이 출력된다.

코드 출력 (파스칼의 삼각형)

# 포인터
-포인터의 개념-
포인터(pointer) : 변수의 주소를 저장하는 변수

포인터는 c++에서 너무 중요하죠!!!!!!!!!

가장 잘 이해해야 할 것은,
* : 주소값에 해당하는 변수를 가져온다.
&: 해당 변수의 주소 값을 가져온다.

아래 코드를 보면 이해하기 쉬울 겁니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#include <iostream>
 
int main(){
  using namespace std;
 
  int a = 20;
 
  int *ptr; //int형 a를 가리키는 포인터 선언
            //a를 가리킴
  ptr = &a;
 
  int **ptr_ptr; //int형 ptr포인터를 가리키는 포인터 선언
                 //ptr을 가리킴
  ptr_ptr = &ptr;
 
  cout << "a의 값: " << a << endl;
  cout << "a의 주소값: " << &<< endl;
  cout << "ptr의 값: " << ptr << endl;  //a의 주소값을 가지고 있음
  cout << "ptr의 주소값: " << &ptr << endl;
  cout << "*ptr의 값: " << *ptr << endl//a의 값을 나타냄
  cout << "ptr_ptr의 값: " << ptr_ptr << endl;  //ptr의 주소값을 가지고 있음
  cout << "*ptr_ptr의 값: " << *ptr_ptr << endl//ptr의 값을 나타냄
  cout << "**ptr의 값: " << **ptr_ptr << endl//a의 값을 나타냄
 
  // * : 주소값에 해당하는 변수를 가져온다.
  // & : 해당 변수의 주소값을 가져온다.
}
 
cs
코드 출력 결과 (포인터)

 

 

출처(source) - 유튜브 두들낙서님

https://www.youtube.com/c/%EB%91%90%EB%93%A4%EB%82%99%EC%84%9C

 

두들낙서

C/C++ 강좌를 올리고 있고 다른 컨텐츠는 할 수도 있고 안 할 수도 있는 채널. ▶ 두들낙서 지식공유 서버 참가하기: https://discord.gg/y4SXcjU

www.youtube.com

c++ 최고의 강좌,,


반응형