학부내용 예습/[ 2021 겨울 ] C++

[ C++ ]4강. 다차원 배열 / 실습

haena02 2022. 1. 23. 02:36
반응형

1. 10x10 배열 만들어서 아이템 세개 심기

 

#include <iostream>
#include<cstdlib> //랜덤함수 s사용

using namespace std;

int main() {

	ios::sync_with_stdio(0);
	cin.tie(nullptr);

	char map[10][10];
	char item[3] = { 'a','b','c' };
	char stand = 'O';


	//배열 기본값 세팅
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			map[i][j] = 'O';
		}
	}

	// 랜덤으로 a,b,c 삽입
	for (int i = 0; i < 3; i++) {
		int a= rand() % 10;
		int b = rand() % 10;
        //중복 예외처리
		if(strcmp(&map[a][b],&stand)) //char 비교하
			map[a][b] = item[i];
		else
			i--; // 다시 기회주기

	}

	//출력
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			cout << map[i][j];
		}
		cout << endl;
	}

}

 

나는 char 배열을 만들고 char 아이템을 랜덤으로 끼어넣는 식으로 코드를 짰다. 

해보니 이론상 맞아보여도 실행하니 이상한 한자가 가득 나왔다.

교수님 코드를 참고해보니 나와 전혀 다른 코드였다.

오기가 생겨서 내 코드를 밀고 가다가 여러가지 정보를 알게 되었다.

 

1.  int arr[][]={0,} 하면 0으로 세팅된다. 이는 int형에서만 사용가능하다

2. char 형을 비교할 때에는 strcmp(&a,&b) 를 사용해야한다.

3. for문에서 예외처리를 할때 else 구문에 i-- 를 넣으면 간편하다.

 

내 코드가 분명 교수님 코드보다 낫다고 할수가 없기에 교수님 코드도 첨부한다.

 

#include<iostream>
#include<string>
#include<ctime>

using namespace std;

int main() {
	const int ROW = 10;
	const int COL = 10;
	int arr[ROW][COL] = { 0, };
	string item[4] = { "□","★","※","●" };
	srand((unsigned)time(NULL));
	
	for (int i = 1; i <= 3; i++) {
		int randRow = rand() % 10;
		int randCol = rand() % 10;
		if (arr[randRow][randCol] ==0)
			arr[randRow][randCol] = i;
		else
			i--;
	}
	for (int i = 0; i < ROW; i++) {
		for (int j = 0; j < COL; j++) {
			switch (arr[i][j]) {
			case 0:
				cout << item[0]; break;
			case 1:
				cout << item[1]; break;
			case 2:
				cout << item[2]; break;
			case 3:
				cout << item[3]; break;
			}
		}
		cout << endl;
	}
}

 

2. 좌석 예약 프로그램 : 빈좌석을 입력 받으면 예약 완료, 예약된 자석을 선태하면 예약 불가

//좌석 예약 프로그램 : 빈좌석을 입력 받으면 예약 완료, 예약된 자석을 선태하면 예약 불가

#include <iostream>
#include<cstdlib> //랜덤함수 s사용


using namespace std;

int main() {

	ios::sync_with_stdio(0);
	cin.tie(nullptr);

	const int low = 6;
	const int col = 4;
	bool seat[low][col];
	int full = low * col;
	//char L[low] = { 'A','B', 'C', 'D', 'E', 'F' };

	// 자리 false로 세팅
	for (int i = 0; i < low; i++) {
		for (int j = 0; j < col; j++) {
			seat[i][j] = false;
		}
	}

	do {

		//자리 출력
		cout << ' ';
		for (int j = 0; j < col; j++) {
			cout << '\t' << (j + 1);
		}
		cout << endl;
		for (int i = 0; i < low; i++) {
			cout << char('A'+i);
			for (int j = 0; j < col; j++) {
				cout << '\t';
				if (seat[i][j]) cout << "○";
				else cout << "●";
			}
			cout << endl;
		}

		cout << "앉을 자리를 입력하세요(ex A 4)";
		char A;
		int B;
		cin >> A >> B;


		if (!seat[int(A - 'A')][B - 1]) {
			seat[int(A - 'A')][B - 1] = true;
			full--;
			cout << "예약완료" << endl;
		}
		else {
			cout << "예약불가" << endl;
		}

	} while (full != 0);
}

이것 또한 교수님이랑 전혀 다르게 코드를 짰다.

하지만 내 코드가 맘에 드니까 그냥 해야지

반응형