From 9eb7b6476ea40f1f1863d9330cae7e3898b94d9c Mon Sep 17 00:00:00 2001 From: Satvik-Singh192 Date: Wed, 15 Oct 2025 02:01:27 +0530 Subject: [PATCH] feat: Add basic C++ calculator Closes #2 --- Src/Simple_Calculator/Calculator.cpp | 21 +++++++++++ Src/Simple_Calculator/Calculator.h | 17 +++++++++ Src/Simple_Calculator/README.md | 23 ++++++++++++ Src/Simple_Calculator/main.cpp | 52 ++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 Src/Simple_Calculator/Calculator.cpp create mode 100644 Src/Simple_Calculator/Calculator.h create mode 100644 Src/Simple_Calculator/main.cpp diff --git a/Src/Simple_Calculator/Calculator.cpp b/Src/Simple_Calculator/Calculator.cpp new file mode 100644 index 0000000..0cd96a9 --- /dev/null +++ b/Src/Simple_Calculator/Calculator.cpp @@ -0,0 +1,21 @@ +#include "Calculator.h" +using namespace std; + +double Calculator::add(double a, double b) const { + return a+b; +} + +double Calculator::subtract(double a, double b) const { + return a-b; +} + +double Calculator::multiply(double a, double b) const { + return a*b; +} + +double Calculator::divide(double a, double b) const { + if (b==0.0) { + throw invalid_argument("Division by zero is undefined"); + } + return a/b; +} diff --git a/Src/Simple_Calculator/Calculator.h b/Src/Simple_Calculator/Calculator.h new file mode 100644 index 0000000..c00d255 --- /dev/null +++ b/Src/Simple_Calculator/Calculator.h @@ -0,0 +1,17 @@ +#pragma once +#include + +class Calculator { +public: + // Adds two numbers + double add(double a, double b) const; + + // Subtracts b from a + double subtract(double a, double b) const; + + // Multiplies two numbers + double multiply(double a, double b) const; + + // Divides a by b; throws invalid_argument on division by zero + double divide(double a, double b) const; +}; diff --git a/Src/Simple_Calculator/README.md b/Src/Simple_Calculator/README.md index b87e1a3..488757a 100644 --- a/Src/Simple_Calculator/README.md +++ b/Src/Simple_Calculator/README.md @@ -24,3 +24,26 @@ The program is designed using **Object-Oriented Programming (OOP)** principles, - Clear and readable code --- + +## Build & Run + +Files added: +- `Calculator.h` - Calculator class declaration +- `Calculator.cpp` - Calculator class implementation +- `main.cpp` - Interactive console program + +Build (requires g++ and C++17): + +```powershell +g++ -std=c++17 -Wall -Wextra -O2 main.cpp Calculator.cpp -o calculator.exe +``` + +Run: + +```powershell +.\calculator.exe +``` + +Usage: +- Enter a number, an operator (+, -, *, /), and a second number. Type `q` at any prompt to quit. + diff --git a/Src/Simple_Calculator/main.cpp b/Src/Simple_Calculator/main.cpp new file mode 100644 index 0000000..d0657e9 --- /dev/null +++ b/Src/Simple_Calculator/main.cpp @@ -0,0 +1,52 @@ +#include +#include +#include +#include "Calculator.h" +using namespace std; + +int main() { + Calculator calc; + cout << "Simple C++ Calculator\n"; + + while (true) { + double a, b; + char op; + + cout << "\nEnter an operator (+ - * /) or type 'q' to quit: "; + if (!(cin >> op) || op == 'q') { + break; + } + + if (op != '+' && op != '-' && op != '*' && op != '/') { + cout << "Invalid operator. Please use +, -, *, or /. Try again.\n"; + continue; + } + + cout << "Enter first number: "; + if (!(cin >> a)) { + cout << "Invalid number input. Quitting.\n"; + break; + } + + cout << "Enter second number: "; + if (!(cin >> b)) { + cout << "Invalid number input. Quitting.\n"; + break; + } + + try { + double result = 0.0; + switch (op) { + case '+': result = calc.add(a, b); break; + case '-': result = calc.subtract(a, b); break; + case '*': result = calc.multiply(a, b); break; + case '/': result = calc.divide(a, b); break; + } + cout << "Result: " << a << " " << op << " " << b << " = " << result << "\n"; + } catch (const exception &ex) { + cout << "Error during calculation: " << ex.what() << "\n"; + } + } + cout << "Thanks for using the Calculator!\n"; + return 0; +}