diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Calculator.java | 53 | ||||
| -rw-r--r-- | src/calculator.d | 49 | ||||
| -rw-r--r-- | src/calculator.hs | 22 | ||||
| -rw-r--r-- | src/calculator.rs | 58 | ||||
| -rw-r--r-- | src/calculator.swift | 41 |
5 files changed, 223 insertions, 0 deletions
diff --git a/src/Calculator.java b/src/Calculator.java new file mode 100644 index 0000000..6f2cb94 --- /dev/null +++ b/src/Calculator.java @@ -0,0 +1,53 @@ +import java.util.Scanner; + +class InvalidOperatorException extends Exception { + public InvalidOperatorException(String errorMessage) { + super(errorMessage); + } +} + +public class Calculator { + private static float calculate(String operator, float number1, float number2) throws InvalidOperatorException { + switch(operator) { + case "+": + return number1 + number2; + case "-": + return number1 - number2; + case "/": + return number1 / number2; + case "*": + return number1 * number2; + default: + throw new InvalidOperatorException("invalid operator used!"); + } + } + + public static void main(String[] args) { + Scanner scan = new Scanner(System.in); + + float number1, number2, result; + String operator; + + try { + System.out.print("enter a number: " ); + number1 = scan.nextFloat(); + System.out.print("enter an operator: "); + scan.nextLine(); + operator = scan.nextLine(); + System.out.print("enter another number: "); + number2 = scan.nextFloat(); + } catch (Exception e) { + System.out.println("couldn't get your input!"); + return; + } + + try { + result = calculate(operator, number1, number2); + } catch (InvalidOperatorException e) { + System.out.println(e.getMessage()); + return; + } + + System.out.println(result); + } +} diff --git a/src/calculator.d b/src/calculator.d new file mode 100644 index 0000000..c7933be --- /dev/null +++ b/src/calculator.d @@ -0,0 +1,49 @@ +import std.stdio; +import std.string; + +class InvalidOperatorException : Exception { + this(string msg, string file = __FILE__, size_t line = __LINE__) { + super(msg, file, line); + } +} + +float calculate(char[] operator, float number1, float number2) { + foreach (c; operator) { + switch(c) { + case '+': + return number1 + number2; + case '-': + return number1 - number2; + case '/': + return number1 / number2; + case '*': + return number1 * number2; + default: + continue; + } + } + throw new InvalidOperatorException("invalid operator used!"); +} + +void main() { + char[] operator; + float number1; + float number2; + write("enter a number: "); + readf("%f", &number1); + + write("enter an operator: "); + readf(" %s\n", &operator); + + write("enter another number: "); + readf(" %f", &number2); + + float result; + try { + result = calculate(operator, number1, number2); + } catch (InvalidOperatorException e) { + writeln(e); + } + + writeln(result); +} diff --git a/src/calculator.hs b/src/calculator.hs new file mode 100644 index 0000000..1da13af --- /dev/null +++ b/src/calculator.hs @@ -0,0 +1,22 @@ +calculate :: String -> Float -> Float -> Float +calculate operator number1 number2 = case operator of + "+" -> number1 + number2 + "-" -> number1 - number2 + "/" -> number1 / number2 + "*" -> number1 * number2 + _ -> error "invalid operator!" + +main :: IO() +main = do + putStr "enter a number: " + input<-getLine + let number1 = (read input :: Float) + + putStr "enter an operator: " + operator<-getLine + + putStr "enter another number: " + input<-getLine + let number2 = (read input :: Float) + + print (calculate operator number1 number2) diff --git a/src/calculator.rs b/src/calculator.rs new file mode 100644 index 0000000..eab3ac8 --- /dev/null +++ b/src/calculator.rs @@ -0,0 +1,58 @@ +use std::error::Error; +use std::fmt; +use std::io; +use std::process; + +#[derive(Debug)] +struct UnknownOperatorError; + +impl Error for UnknownOperatorError {} + +impl fmt::Display for UnknownOperatorError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "invalid operator!") + } +} + +fn get_input() -> String { + let mut res = String::new(); + io::stdin() + .read_line(&mut res) + .expect("failed to get input!"); + + return (*res).trim().to_string(); +} + +fn get_number() -> f32 { + get_input() + .parse::<f32>() + .expect("failed to get your number (possible lack of rizz)") +} + +fn calculate(operator: &String, number1: &f32, number2: &f32) -> Result<f32, UnknownOperatorError> { + match operator.as_str() { + "+" => Ok(number1 + number2), + "-" => Ok(number1 - number2), + "/" => Ok(number1 / number2), + "*" => Ok(number1 * number2), + _ => Err(UnknownOperatorError), + } +} + +fn main() { + println!("enter a number: "); + let number1 = get_number(); + println!("enter an operator: "); + let operator = get_input(); + println!("enter another number: "); + let number2 = get_number(); + + let res = calculate(&operator, &number1, &number2); + match res { + Ok(i) => println!("{i}"), + Err(e) => { + eprintln!("{e}"); + process::exit(1); + } + } +} diff --git a/src/calculator.swift b/src/calculator.swift new file mode 100644 index 0000000..dfd4c4c --- /dev/null +++ b/src/calculator.swift @@ -0,0 +1,41 @@ +enum InvalidOperatorError: Error { + case operatorNotSupported +} + +func calculate(operatorThing: String, number1: Float, number2: Float) throws -> Float { + switch operatorThing { + case "+": + return number1 + number2 + case "-": + return number1 - number2 + case "/": + return number1 / number2 + case "*": + return number1 * number2 + default: + throw InvalidOperatorError.operatorNotSupported + } +} + + +func main() { + print("enter a number:") + let number1 = Float(readLine()!)! + print("enter an operator:") + let operatorThing = readLine()! + print("enter another number:") + let number2 = Float(readLine()!)! + + do { + let result = try calculate(operatorThing: operatorThing, number1: number1, number2: number2) + print(result) + } catch InvalidOperatorError.operatorNotSupported { + print("invalid operator!") + return + } catch { + print("unexpected error!") + return + } +} + +main() |
