diff --git a/calculator.cpp b/calculator.cpp
new file mode 100644
index 0000000..1234567
--- /dev/null
+++ b/calculator.cpp
@@ -0,0 +1,44 @@
+#include "calculator.h"
+
+double Calculator::add(double a, double b) {
+    return a + b;
+}
+
+double Calculator::divide(double a, double b) {
+    if (b == 0) {
+        throw std::invalid_argument("Division by zero");
+    }
+    return a / b;
+}
+
+std::vector<double> Calculator::processNumbers(const std::vector<double>& numbers,
+                                             std::function<double(double)> processor) {
+    if (!processor) {
+        processor = [](double x) { return x * 2; };
+    }
+
+    std::vector<double> result;
+    result.reserve(numbers.size());
+    
+    for (const auto& num : numbers) {
+        result.push_back(processor(num));
+    }
+    
+    return result;
+}
+
+std::string Calculator::getGrade(double score) {
+    if (score < 0 || score > 100) {
+        throw std::invalid_argument("Invalid score");
+    }
+    
+    if (score >= 90) {
+        return "A";
+    } else if (score >= 80) {
+        return "B";
+    } else if (score >= 70) {
+        return "C";
+    } else {
+        return "F";
+    }
+} 