======C++ 스터디 #7: 계산기======
| 시간 | 2021년 5월 27일 목요일 20:30 ~ |
| 장소 | Google Meet |
| 참가자 | |
{{youtube>gjWajegD_fg?medium}}
=====1. 계산기 예제=====
====1.1. 사칙연산 계산기====
두 수의 사칙연산을 수행하는 프로그램 작성하기
\\
**출력**
* 첫 줄에 두 수와 연산자 기호를 입력한다.
* 입력한대로 사칙연산을 수행하여 계산 결과를 출력한다.
* 0으로 나누려고 하면 경고 문구를 출력한다.
* 사칙연산 기호 외의 문자를 입력하면 경고 문구를 출력하며 프로그램을 종료한다.
* 그전까지는 계속 사칙연산을 수행한다.
\\
**출력 예시**
1 + 3.5
= 4.5
20 * 2.1
= 42
2 / 0
0으로 나눌 수 없습니다.
1.5 % 6.7
정의되지 않은 연산입니다.
\\
**코드**
#include
using namespace std;
int main() {
double a, b;
char c;
while (true) {
cin >> a >> c >> b;
if (c == '+') cout << "= " << a + b << endl;
else if (c == '-') cout << "= " << a - b << endl;
else if (c == '*') cout << "= " << a * b << endl;
else if (c == '/') {
if (b == 0) cout << "0으로 나눌 수 없습니다." << endl;
else cout << "= " << a / b << endl;
}
else {
cout << "정의되지 않은 연산입니다.";
return 0;
}
\\
====1.2. 거듭제곱 계산기====
지수 연산을 수행하는 함수 작성하기
\\
**출력**
* 입력한대로 지수 연산을 수행하여 계산 결과를 출력한다.
* 지수는 정수만 입력된다.
* 앞에서 한 예제에 추가하기
\\
**출력 예시**
3 ^ 4
= 81
2 ^ -3
= 0.125
5.2 ^ 0
= 1
\\
**코드**
#include
using namespace std;
double power(double a, int n) {
if (n == 0) return 1;
else if (n < 0) return 1 / power(a, -n);
else return a * power(a, n - 1);
}
int main() {
double a, b;
char c;
while (true) {
cin >> a >> c >> b;
if (c == '^') cout << "= " << power(a, (int)b) << endl;
else return 0;
}
}
\\
====1.3. 입력한 순서대로 계산하기====
입력한 순서대로 계산하는 프로그램 작성하기
\\
**출력**
* 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산을 수행한다. '='이 입력되면 그때까지의 결과를 출력하고 프로그램을 종료한다.
* 0으로 나누려고 하면 경고 문구를 출력한다.
* 사칙연산 기호 외의 문자를 입력하면 경고 문구를 출력한다.
\\
**출력 예시**
1.5 =
1.5
3 / 2 – 1 * 5 =
2.5
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.
\\
**코드**
#include
using namespace std;
int main() {
double num = 0, ans = 0;
char op;
bool DIVIDED_BY_0 = false;
cin >> num;
ans = num;
while (true)
{
cin >> op;
if (op == '=') {
if (DIVIDED_BY_0 == true) {
cout << "0으로 나눌 수 없습니다." << endl;
DIVIDED_BY_0 = false;
}
else cout << ans;
return 0;
}
cin >> num;
if (op == '+')
ans += num;
else if (op == '-')
ans -= num;
else if (op == '*')
ans *= num;
else if (op == '/') {
if (num == 0) DIVIDED_BY_0 = true;
else ans /= num;
}
else {
cout << "정의되지 않은 연산입니다.";
return 0;
}
}
}
\\
====1.4. 입력한 순서대로 계산하기 += 거듭제곱====
입력한 순서대로 계산하는 프로그램 작성하기
\\
**출력**
* 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력하고 프로그램을 종료한다.
* 0으로 나누려고 하면 경고 문구를 출력한다.
* 연산 기호 +, -, *, /, ^ 외의 문자를 입력하면 경고 문구를 출력한다.
\\
**출력 예시**
1 + 2 ^ 3 =
27
3 / 2 – 1 * 5 =
2.5
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.
\\
**코드**
#include
using namespace std;
double power(double a, int n) {
if (n == 0) return 1;
else if (n < 0) return 1 / power(a, -n);
else return a * power(a, n - 1);
}
int main() {
double num = 0, ans = 0;
char op;
bool DIVIDED_BY_0 = false;
cin >> num;
ans = num;
while (true)
{
cin >> op;
if (op == '=') {
if (DIVIDED_BY_0 == true) {
cout << "0으로 나눌 수 없습니다." << endl;
DIVIDED_BY_0 = false;
}
else cout << ans;
return 0;
}
cin >> num;
if (op == '+')
ans += num;
else if (op == '-')
ans -= num;
else if (op == '*')
ans *= num;
else if (op == '/') {
if (num == 0) DIVIDED_BY_0 = true;
else ans /= num;
}
else if (op == '^')
ans = power(ans, (int)num);
else {
cout << "정의되지 않은 연산입니다.";
return 0;
}
}
}
\\
====1.5. 입력한 순서대로 계산하기 += 무한루프====
입력한 순서대로 계산하는 프로그램 작성하기
\\
**출력**
* 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력한다.
* 0으로 나누려고 하면 경고 문구를 출력한다.
* 연산 기호 +, -, *, /, ^ 외의 문자를 입력하면 경고 문구를 출력하며 프로그램을 종료한다.
* 그전까지는 계속 사칙연산을 수행한다.
\\
**출력 예시**
17 =
17
1 + 2 ^ 3 =
27
3 / 2 – 1 * 5 =
2.5
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.
\\
**코드**
#include
using namespace std;
double power(double a, int n) {
if (n == 0) return 1;
else if (n < 0) return 1 / power(a, -n);
else return a * power(a, n - 1);
}
int main() {
double num = 0, ans = 0;
char op;
bool DIVIDED_BY_0 = false;
cin >> num;
ans = num;
while (true)
{
cin >> op;
if (op == '=') {
if (DIVIDED_BY_0 == true) {
cout << "0으로 나눌 수 없습니다." << endl;
DIVIDED_BY_0 = false;
}
else cout << ans << endl;
cin >> num;
ans = num;
continue;
}
cin >> num;
if (op == '+')
ans += num;
else if (op == '-')
ans -= num;
else if (op == '*')
ans *= num;
else if (op == '/') {
if (num == 0) DIVIDED_BY_0 = true;
else ans /= num;
}
else if (op == '^')
ans = power(ans, (int)num);
else {
cout << "정의되지 않은 연산입니다.";
return 0;
}
}
}
\\
====1.6. 팩토리얼 계산하기====
팩토리얼을 계산하는 함수를 작성하기
\\
**출력**
* 입력한대로 팩토리얼 연산을 수행하여 출력한다.
* 음이 아닌 정수만 입력된다.
\\
**출력 예시**
5 ! =
120
\\
**코드**
#include
using namespace std;
int factorial(int n) {
if (n == 0) return 1;
else return n * factorial(n - 1);
}
int main() {
int num;
char op;
while (true) {
cin >> num >> op;
if (op == '!') cout << "= " << factorial(num) << endl;
else return 0;
}
}
\\
====1.7. 입력한 순서대로 계산하기 += 팩토리얼====
입력한 순서대로 계산하는 프로그램 작성하기
\\
**출력**
* 연산자의 우선 순위는 생각하지 않고 입력 순서대로 사칙연산과 거듭제곱 계산, 팩토리얼 계산을 수행한다. '='이 입력되면 그때까지의 결과를 출력한다.
* 0으로 나누려고 하면 경고 문구를 출력한다.
* 연산 기호 +, -, *, /, ^, ! 외의 문자를 입력하면 경고 문구를 출력하며 프로그램을 종료한다.
* 그전까지는 계속 연산을 수행한다.
\\
**출력 예시**
1.5 =
1.5
1 + 2 ^ 3 =
27
4 / 2 * 3 ! =
720
5 / 0 + 3 =
0으로 나눌 수 없습니다.
6 % 4 =
정의되지 않은 연산입니다.
\\
**코드**
#include
using namespace std;
double power(double a, int n) {
if (n == 0) return 1;
else if (n < 0) return 1 / power(a, -n);
else return a * power(a, n - 1);
}
int factorial(int n) {
if (n == 0) return 1;
else return n * factorial(n - 1);
}
int main() {
double num, ans = 0;
char op;
bool DIVIDED_BY_0 = false;
cin >> num;
ans = num;
while (true)
{
cin >> op;
if (op == '=') {
if (DIVIDED_BY_0 == true) {
cout << "0으로 나눌 수 없습니다." << endl;
DIVIDED_BY_0 = false;
}
else cout << ans << endl;
cin >> num;
ans = num;
continue;
}
if (op == '!') {
ans = factorial((int)ans);
continue;
}
cin >> num;
if (op == '+')
ans += num;
else if (op == '-')
ans -= num;
else if (op == '*')
ans *= num;
else if (op == '/') {
if (num == 0) DIVIDED_BY_0 = true;
else ans /= num;
}
else if (op == '^')
ans = power(ans, (int)num);
else {
cout << "정의되지 않은 연산입니다.";
return 0;
}
}
}