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