C++
[강의] 9월 11일 수업정리
k-codestudy
2024. 9. 11. 18:07
문제 1. 2차원 배열에 5씩 끊어서 25까지 출력하는 프로그램
#include <iostream>
int main()
{
const int nSize1 = 5;
const int nSize2 = 5;
int arData[nSize1][nSize2]{};
int nData{};
nData = 1;
for (int i = 0; i < nSize1; i++)
{
for (int j = 0; j < nSize2; j++)
{
arData[i][j] = nData;
printf("%2d", arData[i][j]);
nData++;
}
printf("\n");
}
}
- const를 사용하여 nSize1과 nSize2를 5로 설정하여 배열의 크기를 고정
- arData는 nSize1 x nSize2 크기의 2차원 배열로 선언
- nData는 1부터 시작하여 배열을 채움
- 2중 for 루프를 사용하여 배열을 채우고, 각 값을 printf로 출력
문제 2. 5x5 마방진 프로그램
#include <iostream>
int main()
{
int arData[5][5]{};
int nIndex1{};
int nIndex2{};
int nData{};
nData = 1;
nIndex2 = 2;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
arData[nIndex1][nIndex2] = nData;
nIndex1--;
nIndex2++;
nData++;
if (nIndex1 < 0)
nIndex1 = 4;
if (nIndex2 > 4)
nIndex2 = 0;
}
arData[nIndex1][nIndex2] = nData;
nIndex1++;
nData++;
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%2d", arData[i][j]);
}
printf("\n");
}
}
- 5x5 크기의 2차원 배열 arData를 선언 후 초기화합니다
- 시작 위치는 (0, 2)에서 시작하며, nData는 1부터 시작
- 현재 위치에 값을 할당하고 나서, 인덱스를 이동
- 행 인덱스는 위로 이동(nIndex1--), 열 인덱스는 오른쪽으로 이동(nIndex2++)
- 경계를 넘어갈 경우, 원형 배열처럼 반대쪽 끝으로 이동
- 이동한 위치가 이미 값이 채워져 있는 경우, 현재 위치의 아래쪽으로 두 칸 이동하고 왼쪽으로 한 칸 이동
- (주의) 이때, if 조건문이 값이 입력되는 구문보다 위에 있으면, for (j) 부분이 끝나고 i 반복문이 포함된 값이 제대로 입력되지 않을 수 있으므로, 반드시 값을 배열에 입력한 후 조건문으로 이동해야 한다.
- 모든 값이 채워지면, 마방진을 출력