1#include <iostream>
2#include <cmath>
3#include <limits>
4
5void clearInputBuffer() {
6 std::cin.clear();
7 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
8}
9
10int main() {
11 double memoryRegister = 0.0;
12 bool active = true;
13
14 while (active) {
15 std::cout << "\n========================================\n";
16 std::cout << " MSK Scientific Calculator v1.0 \n";
17 std::cout << " [Memory: " << memoryRegister << "]\n";
18 std::cout << "========================================\n";
19 std::cout << " 1. Addition (+) 2. Subtraction (-)\n";
20 std::cout << " 3. Multiplication (*) 4. Division (/)\n";
21 std::cout << " 5. Power (x^y) 6. Square Root (sqrt)\n";
22 std::cout << " 7. Store to Memory (MS) 8. Clear Memory (MC)\n";
23 std::cout << " 9. Exit Calculator\n";
24 std::cout << "Select option (1-9): ";
25
26 int choice = 0;
27 if (!(std::cin >> choice)) {
28 std::cout << "[ERROR]: Invalid selection!\n";
29 clearInputBuffer();
30 continue;
31 }
32
33 if (choice == 9) {
34 std::cout << "Closing Scientific Calculator. Goodbye!\n";
35 active = false;
36 break;
37 }
38
39 switch (choice) {
40 case 1: {
41 double a, b;
42 std::cout << "Enter two numbers: ";
43 if (std::cin >> a >> b) {
44 std::cout << "Result: " << a << " + " << b << " = " << (a + b) << "\n";
45 }
46 break;
47 }
48 case 2: {
49 double a, b;
50 std::cout << "Enter two numbers: ";
51 if (std::cin >> a >> b) {
52 std::cout << "Result: " << a << " - " << b << " = " << (a - b) << "\n";
53 }
54 break;
55 }
56 case 3: {
57 double a, b;
58 std::cout << "Enter two numbers: ";
59 if (std::cin >> a >> b) {
60 std::cout << "Result: " << a << " * " << b << " = " << (a * b) << "\n";
61 }
62 break;
63 }
64 case 4: {
65 double a, b;
66 std::cout << "Enter dividend and divisor: ";
67 if (std::cin >> a >> b) {
68 if (b == 0.0) {
69 std::cerr << "[ERROR]: Division by zero is undefined!\n";
70 } else {
71 std::cout << "Result: " << a << " / " << b << " = " << (a / b) << "\n";
72 }
73 }
74 break;
75 }
76 case 5: {
77 double base, exp;
78 std::cout << "Enter base and exponent: ";
79 if (std::cin >> base >> exp) {
80 std::cout << "Result: " << base << "^" << exp << " = " << std::pow(base, exp) << "\n";
81 }
82 break;
83 }
84 case 6: {
85 double val;
86 std::cout << "Enter non-negative value: ";
87 if (std::cin >> val) {
88 if (val < 0.0) {
89 std::cerr << "[ERROR]: Cannot compute square root of negative number!\n";
90 } else {
91 std::cout << "Result: sqrt(" << val << ") = " << std::sqrt(val) << "\n";
92 }
93 }
94 break;
95 }
96 case 7: {
97 std::cout << "Enter value to store in memory: ";
98 std::cin >> memoryRegister;
99 std::cout << "Memory register updated to: " << memoryRegister << "\n";
100 break;
101 }
102 case 8: {
103 memoryRegister = 0.0;
104 std::cout << "Memory register cleared to 0.0\n";
105 break;
106 }
107 default:
108 std::cout << "[ERROR]: Option not recognized.\n";
109 break;
110 }
111 }
112
113 return 0;
114}