경일게임아카데미 멀티 디바이스 메타버스 플랫폼 개발자 양성과정 20220412 2022/04/04~2022/12/13

Jinho Lee·2022년 4월 12일
0

경일 메타버스 20220412 2주차 2일 수업내용. #pragma 사용, 제어문 (조건문, 반복문), 실습
개별 조사 - 의사난수 생성 알고리즘의 종류 (중앙제곱법, 선형합동법, 메르센 트위스터, XOR 시프트, WELL 알고리즘)

먼저 전 날의 난수 과제를 해설 받았다. 그 중에 호기심이 생겨 조금 검색을 해보니, 의사난수를 생성하기 위한 알고리즘이 여러 종류 있었다. 이에 대해 더 조사하여 다른 포스트에서 정리해보고자 한다. 지금까지 배운 내용부터 정리해야해서 언제 할 수 있을진 모르겠지만...
해설 중에 교수님이 #pragma를 사용하시는 걸 보고, 앞으로 유용히 쓸 수 있겠다 싶어 적어놓는다.

그 후 제어문, 즉 조건문과 반복문의 수업을 진행했다. 실습의 양이 많아 좋은 복습, 연습이 되었다고 생각한다.

#pragma : #pragma region (영역이름) ~ #pragma endregion
코드의 구역을 나누어, 주석 없이도 접었다 폈다 가능

탭(tab) - "\t”

제어문
데이터(타입) / 연산자 / <제어구조>

  1. 조건문 : 특정 조건에 따라서 실행문을 실행할지 안할지 제어 : if / switch
  2. 반복문 : 특정 조건에 따라서 실행문을 일정 횟수만큼 반복 실행 제어 : while / for

조건문
1_1. if문

if (조건식1)
{
실행문1;
}
else if (조건식2)
{
실행문2;
}
else
{
실행문3;
}

if 문은 사실 중괄호가 없어도 컴파일링이 가능하다. 두 줄 이상의 코드를 묶어 if문의 안에 넣기 위해 중괄호를 넣는다.

if (input_num > 10)
cout << "10보다 큽니다." << endl; // 실행가능
if (input_num > 10)
cout << "10보다 큽니다." << endl; // 이것만 if문 안에 들어감
cout << "9보다 큽니다." << endl;

1_2. switch문

switch (정수형 변수)
{
case 정수1:
실행문1;
break;
case 정수2:
실행문2;
break;
case -3:
실행문3;
break;
default: // 해당하는 정수값이 없을 때. if문의 else 역할
실행문4;
break;
}

  • break;를 빠트리면 종료되지 않고 다음 경우의 실행문까지 실행된다.

반복문
2_1. while문

while (조건식)
{
실행문;
조건식을 바꾸는 실행문; // while문을 중단시키는 첫번째 방법

if (조건식)
{
break; // while문을 중단시키는 두번째 방법
}

}

2_2. do-while문

do // 실행을 먼저 한 번 하고,
{
실행문;
}
while (조건식); // 다시 실행할 지를 판별

2_3. for문

for ((1) 초기식; (2) 조건식; (3) 증감식)
{
(4) 실행문;
}

(1) -> (2) -> (4) -> (3) -> (2) -> (4) -> (3) -> ... 조건식의 값이 0(거짓)이 나올 때까지

이하는 수업에서 사용한 소스 코드와 실습 내용 전체이다.

// C++ 문법

// 주석 : 실행 (컴파일) 되지 않고 설명만을 위해서 사용되는 문법
/*

*/

// 220411_Review.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//

/*
	C++ 문법을 사용할 때 주의해야 할 점
	1. 대/소문자를 구분해야 한다.

	main / Main / mAIN / maIN

	2. 띄어쓰기를 통해 요소를 구분한다.
	3. 실행문의 마무리는 세미콜론(;)으로 한다.

	[변수] : 변하는 수, 변화를 주고 싶을 때 사용한다. 데이터를 저장할 메모리공간을 할당받는다.
	문법 : 데이터타입 변수명;
	초기화 : 변수를 선언하면서, 동시에 값을 대입.
	데이터타입 변수명 = 10;
	데이터타입 변수명 = 'a';
	데이터타입 변수명 = "Hello";

	데이터타입
	1. 정수형 ( 0, 1, 2, 3, ... , -1, -2, -3, ...)
	 int
	 short
	 long
	 long long
	 __int8, __int16, __int32, __int64
	2. 실수형
	 float
	 double
	 long double
	3. 문자형
	 char
	4. 문자열
	 string

	 변수명 이름짓기 규칙 (표기법)
	 1. 헝가리안 표기법
	  - 데이터타입 약자를 접두어로 붙인다.
	  int nTokenMaxCount = 10;
	 2. 카멜 표기법
	  int tokenMaxCount = 10;
	 3. 파스칼 표기법
	  int TokenMaxCount = 10;

	  구글 가이드라인
	  int token_max_count = 10;

	  안 좋은 예)
	  int nn = 10;
	  int cmprs = 20;

	  문법적 표기법
	  1. 대소문자를 구분한다.
	  2. 알파벳, 숫자, _(언더바)만 사용한다.
		2-1. 숫자는 가장 앞에 올 수 없다.

	  변수의 4가지 속성
	  1) 이름 : input_key    2) 크기 : 4byte   3) 값 : 10    4) 메모리주소 : &input_key = 000000D6BB17FA54 (16진수 총 16자리)

	  연산자
	  데이터를 가공(연산)하는 모든 명령에 필요한 것들
	  1) 어떤 종류의 연산자인가
	  2) 우선순위 : 어떤 순서로 연산이 되는가
	  3) 결합순서 : 좌측부터 연산하는가, 우측부터 연산하는가

	  1. 사칙연산 : 산술연산자 (좌측부터 연산된다)
	  + : 더하기
	  - : 빼기
	  * : 곱하기
	  / : 나누기 11 / 3 -> 3 (몫)
	  % : 나머지 11 % 3 -> 2 (나머지)

	  *, /, % > +, -

	  2. 대입연산자 (우측부터 연산된다)
	  = : 왼쪽 항에 오른쪽 항의 값을 대입(복사)한다.

	  3. 복합대입연산자
	  += : a += b;	-> a = a + b;
	  -= : a -= b;	-> a = a - b;
	  *= : a *= b;	-> a = a * b;
	  /= : a /= b;	-> a = a / b;	(b == 0, 런타임에러 발생)
	  %= : a %= b;	-> a = a % b;	(데이터타입이 정수형이 아닐 때)

	  4. 증감연산자
	  특정 변수의 값을 1씩 증가시키거나 감소시킬 때 사용하는 연산자.
	  변수명 앞이나 뒤에 ++ / -- 를 붙여서 사용한다.

	  5. 관계연산자
	  두 항의 값을 비교한 결과가 참(1, 0 이외, true) 또는 거짓(0, false)으로 반환되는 연산자

	  a < b
	  a > b
	  a <= b
	  a >= b
	  a == b
	  a != b

	  6. 논리연산자
	  왼쪽 항과 오른쪽 항의 값을 각각 참과 거짓으로 연산해서 두 값을 비교하여 참과 거짓을 반환하는 연산자

	  && : 논리곱(AND)
	  a && b : a의 결과값이 참이고 b의 결과값이 참이면 1을 반환

	  || : 논리합(OR)
	  a || b : a의 결과값이 참이거나 b의 결과값이 참이면 1을 반환

	  ! : 논리부정(NOT)
	  !a : a의 결과값이 참이면 거짓을 반환, 거짓이면 참을 반환

	  7. 삼항연산자
	  a ? b : c;
	  a의 결과값이 참이면 b실행문이 동작, 거짓이면 c실행문이 동작.

	  난수 (랜덤값)
	  rand();	// 0 ~ 32767 사이의 랜덤한 정수값이 반환된다. 32768 = 2^15, 2Byte
	  함수 내부에 seed값이 있어서 이 값에 의해서 리턴값이 정해진다.
	  기본적으로 seed : 1로 세팅되어 있다.

	  srand(time(NULL)); 시간을 매개변수로 seed값 변화시켜 세팅. 4Byte
*/

/*
	실습1. 3 ~ 7 사이의 랜덤한 숫자를 출력하는 프로그램을 작성하자.
	(3, 7 포함)

	실습2. 가장 작은 값과 큰 값을 입력 받아서 그 사이의 임의의 값을 출력하는 프로그램을 작성하자.

	실습3. 프로그램을 실행하면 내부적으로 1 ~ 9 사이의 숫자가 정답으로 정해진다. 유저가 1 ~ 9 사이의 숫자를 입력하면 맞으면 true, 틀리면 false를 출력한다.
*/

/*
	220412
	과제 해설
	#pragma : #pragma region (영역이름) ~ #pragma endregion
	코드의 구역을 나누어, 주석 없이도 접었다폈다 가능

	제어문
		데이터(타입) / 연산자 / <제어구조>

	1. 조건문 : 특정 조건에 따라서 실행문을 실행할지 안할지 제어 : if / switch
	2. 반복문 : 특정 조건에 따라서 실행문을 일정 횟수만큼 반복 실행 제어 : while / for

	조건문
	1_1. if문

	if (조건식1)
	{
		실행문1;
	}
	else if (조건식2)
	{
		실행문2;
	}
	else
	{
		실행문3;
	}

	조건문 실습1.
	정수를 하나 입력 받아서
	입력 받은 숫자가 10보다 크면 "입력된 숫자가 10보다 큽니다." 출력
	10 이하 9 초과 이면 "9보다 큽니다." 출력
	9 이하 6 초과 이면 "6보다 큽니다." 출력
	그 이외에는 "6보다 작거나 같습니다." 출력

	1_2. switch문

	switch (정수형 변수)
	{
		case 정수1:
			실행문1;
		break;
		case 정수2:
			실행문2;
		break;
		case -3:
			실행문3;
		break;
		default:	// 해당하는 정수값이 없을 때. if문의 else 역할
			실행문4;
		break;
	}

	조건문 실습2. switch문 실습
	당신의 고향은 어디입니까?
	1. 서울	2. 양평	3. 광주	4. 대전	5. 제주도
	_1

	안녕하세요. 당신의 고향은 서울이군요.
	안녕하수꽝. 혼저옵서예.
	그 외 : 5개 중에 선택해주세요.

	반복문
	2_1. while문

	while (조건식)
	{
		실행문;
		조건식을 바꾸는 실행문;	// while문을 중단시키는 첫번째 방법, 증감식

		if (조건식)
		{
			break;				// while문을 중단시키는 두번째 방법
		}
	}

	2_2. do-while문

	do							// 실행을 먼저 한 번 하고,
	{
		실행문;
	}
	while (조건식);				// 다시 실행할 지를 판별

	2_3. for문

	for ((1) 초기식; (2) 조건식; (3) 증감식)
	{
		(4) 실행문;
	}

	(1) -> (2) -> (4) -> (3) -> (2) -> (4) -> (3) -> ... 조건식의 값이 0이 나올 때까지
*/
#include <iostream>
#include <string>

using namespace std;

int main()
{
	//220411 내용
	
	#pragma region 실습과제
		// 실습1
		/*
		int inputMin1;
		int inputMax1;
		int numRandom1;
		
		// 변수 초기화
		inputMin1 = 3;
		inputMax1 = 7;

		// 난수 생성
		srand(time(NULL));
		numRandom1 = rand();
		srand(time(NULL));
		numRandom1 += rand();
		numRandom1 %= 5;
		numRandom1 += 3;

		// 출력
		cout << numRandom1 << endl;

		// 실습2

		int inputMin2;
		int inputMax2;
		int numRandom2;

		// 입력
		cout << "난수 범위 최솟값 입력" << endl;
		cin >> inputMin2;
		cout << "난수 범위 최댓값 입력" << endl;
		cin >> inputMax2;

		// 난수 생성
		srand(time(NULL));
		numRandom2 = rand();
		srand(time(NULL));
		numRandom2 += rand();
		numRandom2 %= inputMax2 - inputMin2 + 1;
		numRandom2 += inputMin2;

		// 출력
		cout << numRandom2 << endl;

		// 실습3

		int numMin = 1;
		int numMax = 9;
		int numRandom3;
		int playerAnswer = 0;

		// 난수 생성
		srand(time(NULL));
		numRandom3 = rand();
		srand(time(NULL));
		numRandom3 += rand();
		numRandom3 %= numMax - numMin + 1;
		numRandom3 += numMin;

		// 문제 제시
		cout << "1부터 9까지의 수 중 어느 것일지 맞추시오." << endl;
		cin >> playerAnswer;

		// 정답 비교
		cout << boolalpha << (playerAnswer == numRandom3) << endl;
	#pragma endregion

		//srand(time(NULL));
		//cout << rand() << endl;
		//(10 > 5) ? std::cout << "10이 5보다 크다." : std::cout << "10이 5보다 작다.";
		//std::cout << std::endl;
		//std::cout << !-300 << std::endl; // 0
		//std::cout << ((10 < 5) == 0) << std::endl; // 1

		//int input_key = 10;
		//std::cout << input_key << input_key++ << std::endl; // 예상 : 1011 결과값 : 1110
		//std::cout << input_key++ << input_key++ << std::endl; // 예상 : 1112 결과값 : 1211
		//std::cout << input_key++ << input_key << std::endl; // 예상 : 1011 결과값 : 1011
		//cout이 블랙박스 상태 => 수의 순서가 바뀌는 이유가 불명, 증감연산 두 번 이어서는 비추천

		//std::cout << &input_key << std::endl;	// 메모리주소
		//std::cout << input_key++ << std::endl;	// 10	증감연산은 cout 다음으로 수행된다.
		//std::cout << ++input_key << std::endl;	// 12
		//std::cout << input_key-- << std::endl;	// 12
		//std::cout << --input_key << std::endl;	// 10

		//float testFloat = 5.3f;
		//float testFloat2 = 5.3;
		//char testCharacter = 'a';
		//std::string testString = "Hello";

		//std::cout << "Hello World!\n";
		//std::cin >> input_key;
		
	#pragma region 실습1해설
	
		int rand_num;
		// 입력

		// 처리
		srand(time(NULL));
		//rand(); // 0 ~ 32767 % 5

		rand_num = 3 + rand() % 5;
		// 3 + 0, 3 + 1, 3 + 2, 3 + 3, 3 + 4;

		// 출력 - 숫자 하나 출력
		cout << rand_num << endl;
	#pragma endregion

	#pragma region 실습2해설

		// 입력
		int input_min_number;
		int input_max_number;
		cin >> input_min_number;
		cin >> input_max_number;

		// 처리
		rand_num = input_min_number + rand() % (input_max_number - input_min_number + 1);

		// 출력
		cout << rand_num << endl;
		
	#pragma endregion

	#pragma region 실습3해설

		// 입력
		int input_quiz_number;
		cin >> input_quiz_number;

		// 처리
		int correct_number;
		correct_number = 1 + rand() % 9;

		// 출력 : true, false
		(input_quiz_number == correct_number) ? cout << "true" << endl : cout << "false" << endl;
		*/
	#pragma endregion
	
	// #pragma : #pragma region (영역이름) ~ #pragma endregion
	// 코드의 구역을 나누어, 주석 없이도 접었다폈다 가능

#pragma region 조건문실습1
/*
	// 입력
	int input_num;
	cin >> input_num;

	// 처리
	// 출력
	cout << "입력된 숫자가 ";
	if (input_num > 10)
	{
		cout << "10보다 큽니다." << endl;
	}
	else if (input_num > 9)
	{
		cout << "9보다 큽니다." << endl;
	}
	else if (input_num > 6)
	{
		cout << "6보다 큽니다." << endl;
	}
	else
	{
		cout << "6보다 작거나 같습니다." << endl;
	}
	*/
#pragma endregion
	// if 문은 사실 중괄호가 없어도 컴파일링이 가능하다. 두 줄 이상의 코드를 묶어 if문의 안에 넣기 위해 중괄호를 넣는다.
	/*
		if (input_num > 10)
			cout << "10보다 큽니다." << endl; // 실행가능

		if (input_num > 10)
			cout << "10보다 큽니다." << endl; // 이것만 if문 안에 들어감
			cout << "9보다 큽니다." << endl;
	*/

#pragma region 조건문실습2
/*
	cout << "당신의 고향은 어디입니까?\n1. 서울	2. 양평	3. 광주	4. 대전	5. 제주도" << endl;
	// 입력
	int hometown_num;
	cin >> hometown_num;
	cout << endl;

	// 처리
	// 출력
	switch (hometown_num)
	{
	case 1:
		cout << "안녕하세요. 당신의 고향은 서울이군요." << endl;
		break;
	case 2:
		cout << "안녕하세요. 당신의 고향은 양평이군요." << endl;
		break;
	case 3:
		cout << "안녕하세요. 당신의 고향은 광주이군요." << endl;
		break;
	case 4:
		cout << "안녕하세요. 당신의 고향은 대전이군요." << endl;
		break;
	case 5:
		cout << "안녕하수꽝. 당신의 고향은 제주도이군요. 혼저옵서예." << endl;
		break;
	default:
		cout << "5개 중에 선택해주세요." << endl;
		break;
	}
	*/
#pragma endregion
	// break; 를 빠트리면 종료되지 않고 다음 경우의 실행문까지 실행된다.

#pragma region 조건문실습2_2
/*
	cout << "당신의 고향은 어디입니까?\n1. 서울	2. 양평	3. 광주	4. 대전	5. 제주도" << endl;
	// 입력
	// int hometown_num;
	cin >> hometown_num;
	cout << endl;

	// 처리
	// 출력
	if (hometown_num == 1)
	{
		cout << "안녕하세요. 당신의 고향은 서울이군요." << endl;
	}
	else if (hometown_num == 2)
	{
		cout << "안녕하세요. 당신의 고향은 양평이군요." << endl;
	}
	else if (hometown_num == 3)
	{
		cout << "안녕하세요. 당신의 고향은 광주이군요." << endl;
	}
	else if (hometown_num == 4)
	{
		cout << "안녕하세요. 당신의 고향은 대전이군요." << endl;
	}
	else if (hometown_num == 5)
	{
		cout << "안녕하수꽝. 당신의 고향은 제주도이군요. 혼저옵서예." << endl;
	}
	else
	{
		cout << "5개 중에 선택해주세요." << endl;
	}
	*/
#pragma endregion

#pragma region 반복문예제while
	// Hello World를 5번 출력하는 프로그램
	/*
	int repeat_count = 0;
	while (repeat_count < 5)
	{
		cout << "Hello World" << endl;
		repeat_count++;
	}

	repeat_count = 0;
	while (1)
	{
		cout << "Hello World" << endl;
		repeat_count++;

		if (repeat_count >= 5)
		{
			break;
		}
	}

	repeat_count = 0;
	do
	{
		cout << "Hello World" << endl;
		repeat_count++;
	}
	while (repeat_count < 5);
	*/
#pragma endregion

#pragma region 실습3
	// while문을 써서 정답을 맞출 때까지 반복되는 프로그램으로 수정해보자.
	/*
	int numMin = 1;
	int numMax = 9;
	int randNum;
	int userAnswer = 0;

	// 난수 생성
	srand(time(NULL));
	randNum = rand();
	srand(time(NULL));
	randNum += rand();
	randNum %= numMax - numMin + 1;
	randNum += numMin;

	// 문제 제시
	cout << "1부터 9까지의 수 중 어느 것일지 맞추시오." << endl;
	cout << "미리보는 정답 : " << randNum << endl;
	cin >> userAnswer;

	// 정답 제시
	while (1)
	{
		cout << boolalpha << "답 : " << userAnswer << " => " << (userAnswer == randNum) << endl;
		
		//(userAnswer != randNum) ? cin >> userAnswer : break;

		if (userAnswer == randNum)
		{
			cout << "정답" << endl;
			break;
		}

		cin >> userAnswer;
	}
	*/
#pragma endregion

#pragma region 반복문예제for
/*
	for (int i = 0; i < 5; i++)
	{
		cout << "Hello World" << endl;
	}
	*/
#pragma endregion

	/*
		for문 실습1.
		10부터 1까지 차례대로 출력되는 코드를 작성해보자.
		10
		9
		...
		1

		실습2.
		100 미만의 3의 배수를 차례대로 출력하는 코드를 작성해보자.
		3
		6
		9
		...
		99

		실습3.
		1000 미만의 2의 승수를 차례대로 출력하는 코드를 작성해보자.
		1
		2
		4
		8
		16
		32
		64
		128
		256
		512

		실습4.
		구구단을 출력해보자.
		4_1. 구구단 2단을 차례대로 출력해보자.
		2 * 1 = 2
		2 * 2 = 4
		2 * 3 = 6
		2 * 4 = 8
		2 * 5 = 10
		2 * 6 = 12
		2 * 7 = 14
		2 * 8 = 16
		2 * 9 = 18
		4_2. 구구단 2 ~ 9단을 차례대로 출력해보자.
		2단

		3단

		4단
		...
		9단
		4_3. 구구단 2단 ~ 9단을 다음과 같은 형태로 출력해보자.
		2단	3단	4단

		5단	6단	7단
		
		8단	9단

		별찍기
    1) 
    *
    **
    ***
    ****
    *****
    
    2) 
        *
       **
      ***
     ****
    *****

    3) 
    *****
    ****
    ***
    **
    *
    
    4) 
    *****
     ****
      ***
       **
        *
    
    5)
            *
           ***
          *****
         *******
        *********
        
    6)
        *********
         *******
          *****
           ***
            *
          
    7)
            *
           ***
          *****
         *******
        *********
         *******
          *****
           ***
            *
	*/
#pragma region for문실습1
	/*
	for (int i = 10; i > 0; i--)
	{
		cout << i << endl;
	}
	cout << endl;
	*/
#pragma endregion

#pragma region for문실습2
	/*
	for (int i = 3; i < 100; i += 3)
	{
		cout << i << endl;
	}
	cout << endl;
	*/
#pragma endregion

#pragma region for문실습3
	/*
	for (int i = 1; i < 1000; i *= 2)
	{
		cout << i << endl;
	}
	cout << endl;
	*/
#pragma endregion

#pragma region for문실습4
	/*
	// 4_1
	cout << "실습 4_1" << endl << endl;

	for (int i = 1; i < 10; i++)
	{
		cout << 2 << " * " << i << " = " << 2 * i << endl;
	}
	cout << endl;

	// 4_2
	cout << "실습 4_2" << endl << endl;

	for (int i = 2; i < 10; i++)
	{
		for (int j = 1; j < 10; j++)
		{
			cout << i << " * " << j << " = " << i * j << endl;
		}
		cout << endl;
	}
	cout << endl ;

	//4_3
	cout << "실습 4_3" << endl << endl;

	for (int i = 2; i < 9; i += 3)
	{
		for (int j = 1; j < 10; j++)
		{
			for (int k = i; k < i + 3; k++) {
				if (k > 9) 
				{
					break;
				}
				cout << k << " * " << j << " = " << k * j << "\t"; // 탭(tab) - "\t"
			}
			cout << endl << endl;
		}
		cout << endl;
	}
	*/
#pragma endregion

#pragma region 숙제1
	for (int i = 1; i < 6; i++)
	{
		for (int j = 0; j < i; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion

#pragma region 숙제2
	for (int i = 1; i < 6; i++)
	{
		for (int j = 5; j > i; j--)
		{
			cout << " ";
		}
		for (int j = 0; j < i; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion

#pragma region 숙제3
	for (int i = 0; i < 5; i++)
	{
		for (int j = 5; j > i; j--)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion

#pragma region 숙제4
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < i; j++)
		{
			cout << " ";
		}
		for (int j = 5; j > i; j--)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion

#pragma region 숙제5
	for (int i = 0; i < 5; i++)
	{
		for (int j = 4; j > i; j--)
		{
			cout << " ";
		}
		for (int j = 0; j < 2 * i + 1; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion

#pragma region 숙제6
	for (int i = 0; i < 10; i += 2)
	{
		for (int j = 0; j < i; j += 2)
		{
			cout << " ";
		}
		for (int j = 9; j > i; j--)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion

#pragma region 숙제7
	for (int i = 0; i < 5; i++)
	{
		for (int j = 4; j > i; j--)
		{
			cout << " ";
		}
		for (int j = 0; j < 2 * i + 1; j++)
		{
			cout << "*";
		}
		cout << endl;
	}
	for (int i = 2; i < 10; i += 2)
	{
		for (int j = 0; j < i; j += 2)
		{
			cout << " ";
		}
		for (int j = 9; j > i; j--)
		{
			cout << "*";
		}
		cout << endl;
	}
	cout << endl;
#pragma endregion
}

0개의 댓글