차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 | |||
activity:public:2021:cpp:210527 [2021/05/30 00:50:07] – [1.6. 팩토리얼 계산하기] Algern0n | 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 << " | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||