1. 문제
영어 어휘 테스트 프로그램 작성
영어 단어의 뜻 맞추기 게임을 만들어 보자. 영어 단어와 한글 단어로 구성되는 Word 클래스를 작성하고, vector<Word> v;로 벡터를 생성하고, 프로그램 내에서 여러 개의 Word 객체를 벡터에 삽입해 둔다. 그리고 다음 화면과 같이 랜덤하게 사용자에게 문제를 던지며, 4개의 한글 보기를 출력한다. 4개의 보기 중 정답을 제외한 3개는 벡터에 있는 단어 중에서 랜덤하게 선택한다. 이문제에서 iterator는 사용할 필요 없다.
2. 결과
3. 코드
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
class Word {
string en;
string ko;
public:
Word(string en, string ko) {
this->en = en; this->ko = ko;
}
string getEn() { return en; }
string getKo() { return ko; }
};
int main() {
vector<Word> v;
v.push_back(Word("human", "인간"));
v.push_back(Word("society", "사회"));
v.push_back(Word("dall", "인형"));
v.push_back(Word("emotion", "감정"));
v.push_back(Word("painting", "그림"));
v.push_back(Word("trade", "거래"));
v.push_back(Word("animal", "동물"));
v.push_back(Word("photo", "사진"));
v.push_back(Word("bear", "곰"));
srand((unsigned)time(0));
int n1; string answer;
string bogi[4]; for (int i = 0; i<4; i++) bogi[i] = "";
int number[4]; for (int i = 0; i<4; i++) number[i] = 0;
int i;
bool exit = true;
cout << "영어 어휘 테스트를 시작합니다. 1~4 외 다른 입력시 종료합니다." << endl;
while (exit) {
n1 = rand() % v.size();
bogi[0] = v.at(n1).getKo();
answer = bogi[0];
cout << v.at(n1).getEn() << "?" << endl;
while (exit) { // 중복되지 않는 보기 만들기
for (i = 1; i<4; i++) {
n1 = rand() % v.size();
bogi[i] = v.at(n1).getKo();
}
if (bogi[0] != bogi[1] && bogi[0] != bogi[2] && bogi[0] != bogi[3] &&
bogi[1] != bogi[2] && bogi[1] != bogi[3] && bogi[2] != bogi[3])
exit = false;
}
exit = true;
number[0] = rand() % 4;
while (exit) { //보기 순서 섞기
for (i = 1; i<4; i++) {
number[i] = rand() % 4;
}
if (number[0] != number[1] && number[0] != number[2] && number[0] != number[3] &&
number[1] != number[2] && number[1] != number[3] && number[2] != number[3])
exit = false;
}
exit = true;
int result;
for (i = 1; i<5; i++)
cout << "(" << i << ") " << bogi[number[i - 1]] << " ";
cout << ":>";
cin >> result;
if (result != 1 && result != 2 && result != 3 && result != 4) //순서 중요 먼저 1, 2, 3, 4 이외의 값인지 확인해야함
exit = false;
else if (answer == bogi[number[result - 1]])
cout << "Excellent !!" << endl;
else if (result == 1 || result == 2 || result == 3 || result == 4)
cout << "No. !!" << endl;
}
}
4. 설명
앞에서 여러번 하였던
srand( (unsigned) time(0) );
int n = rand();
를 사용하여 랜덤 수를 구하는 것을 제대로 이해하였다면 크게 어려움 없이 풀수 있는 문제였습니다.
대략적인 설명은 주석처리 해놨습니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 10장 2번 (0) | 2019.05.10 |
---|---|
명품 C++ programming 실습문제 10장 1번 (0) | 2019.05.09 |
명품 C++ programming 9장 Open Challenge (0) | 2019.05.04 |
명품 C++ programming 실습문제 9장 10번 (0) | 2019.05.04 |
명품 C++ programming 실습문제 9장 9번 (0) | 2019.05.04 |