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 반복문이 포함된 값이 제대로 입력되지 않을 수 있으므로, 반드시 값을 배열에 입력한 후 조건문으로 이동해야 한다.
  • 모든 값이 채워지면, 마방진을 출력