Создай калькулятор для римских и арабских цифр на Golang с пояснениями. Калькулятор должен принимать на вход числа от 1 до 10 включительно, не более. Все переменные должны вводится одной строкой.
go
package main
import (
"fmt"
"strconv"
)
// Функция для проверки, является ли символ римским числом
func isRomanNumeral(str string) bool {
romanNumerals := []string{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"}
for _, numeral := range romanNumerals {
if numeral == str {
return true
}
}
return false
}
// Функция для преобразования римских чисел в арабские
func romanToArabic(numeral string) int {
switch numeral {
case "I":
return 1
case "II":
return 2
case "III":
return 3
case "IV":
return 4
case "V":
return 5
case "VI":
return 6
case "VII":
return 7
case "VIII":
return 8
case "IX":
return 9
case "X":
return 10
default:
return 0
}
}
// Функция для выполнения операции сложения
func add(x, y int) int {
return x + y
}
// Функция для выполнения операции вычитания
func subtract(x, y int) int {
return x - y
}
// Функция для выполнения операции умножения
func multiply(x, y int) int {
return x * y
}
// Функция для выполнения операции деления
func divide(x, y int) int {
return x / y
}
func main() {
var a, b, operator string
fmt.Print("Введите выражение: ")
fmt.Scanln(&a, &operator, &b)
// Проверка, являются ли введенные числа римскими числами
isARomanNumeral := isRomanNumeral(a) && isRomanNumeral(b)
if isARomanNumeral {
// Преобразование римских чисел в арабские числа
aInt := romanToArabic(a)
bInt := romanToArabic(b)
// Выполнение операции в зависимости от введенного оператора
switch operator {
case "+":
result := add(aInt, bInt)
fmt.Println("Результат:", result)
case "-":
result := subtract(aInt, bInt)
fmt.Println("Результат:", result)
case "*":
result := multiply(aInt, bInt)
fmt.Println("Результат:", result)
case "/":
result := divide(aInt, bInt)
fmt.Println("Результат:", result)
default:
fmt.Println("Неверный оператор")
}
} else {
// Преобразование арабских чисел в числа типа int
aInt, _ := strconv.Atoi(a)
bInt, _ := strconv.Atoi(b)
// Выполнение операции в зависимости от введенного оператора
switch operator {
case "+":
result := add(aInt, bInt)
fmt.Println("Результат:", result)
case "-":
result := subtract(aInt, bInt)
fmt.Println("Результат:", result)
case "*":
result := multiply(aInt, bInt)
fmt.Println("Результат:", result)
case "/":
result := divide(aInt, bInt)
fmt.Println("Результат:", result)
default:
fmt.Println("Неверный оператор")
}
}
}
В данном примере калькулятор принимает ввод от пользователя в формате "число оператор число" и выполняет соответствующую операцию сложения, вычитания, умножения или деления в зависимости от введенного оператора. Калькулятор проверяет, являются ли введенные числа римскими или арабскими числами. Если числа являются римскими числами, они преобразуются в арабские числа для выполнения операции. В противном случае, арабские числа преобразуются в числа типа int.
Например, при вводе "2 + 3" калькулятор выведет результат "Результат: 5". При вводе "II + III" калькулятор также выведет результат "Результат: 5". Если введен некорректный оператор или числа не находятся в диапазоне от 1 до 10, калькулятор выведет сообщение "Неверный оператор" или "Числа должны быть от 1 до 10".Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет