Создай калькулятор на языке Go.
Калькулятор умеет работать только с целыми числами.
Калькулятор умеет работать только с арабскими или римскими цифрами одновременно, при вводе пользователем строки вроде 3 + II калькулятор должен указать на ошибку и прекратить работу.
Данные передаются в одну строку. Решения, в которых каждое число и арифметическая операция передаются с новой строки, считаются неверными.
go
reader := bufio.NewReader(os.Stdin)
input, _ := reader.ReadString('n')
2. Далее, нам нужно проверить, содержит ли строка арифметическую операцию '+', '-', '*' или '/'. Мы можем сделать это, используя функцию strings.ContainsAny.
go
if strings.ContainsAny(input, "+-*/") {
// проводим необходимые операции
} else {
// выводим ошибку и останавливаем программу
}
3. Теперь, нам нужно разделить строку на два числа и операцию. Мы можем использовать функцию strings.Split для этого. Если в строке есть пробелы, нам также нужно удалить их.
go
input = strings.ReplaceAll(input, " ", "")
split := strings.Split(input, "+")
num1, err := strconv.Atoi(split[0])
num2, err := strconv.Atoi(split[1])
operation := '+'
4. После этого, мы можем проверить, являются ли числа арабскими или римскими цифрами. Если числа являются римскими цифрами, нам нужно преобразовать их в арабские цифры с помощью функции RomanToArabic.
go
if isRoman(num1) && isRoman(num2) {
arabic1 := RomanToArabic(num1)
arabic2 := RomanToArabic(num2)
// проводим необходимые операции
} else if !isRoman(num1) && !isRoman(num2) {
// проводим необходимые операции
} else {
// выводим ошибку и останавливаем программу
}
5. Теперь мы можем выполнить арифметическую операцию над числами, проверив значение переменной operation.
go
result := 0
switch operation {
case '+':
result = num1 + num2
case '-':
result = num1 - num2
case '*':
result = num1 * num2
case '/':
result = num1 / num2
}
6. Наконец, мы можем вывести результат на экран. Если числа были римскими цифрами, нам нужно преобразовать результат обратно в римскую цифру с помощью функции ArabicToRoman.
go
if isRoman(num1) && isRoman(num2) {
romanResult := ArabicToRoman(result)
fmt.Println("Результат:", romanResult)
} else {
fmt.Println("Результат:", result)
}
Вот полный код для создания калькулятора на языке Go, который работает только с целыми числами и арабскими или римскими цифрами:
go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Введите выражение: ")
input, _ := reader.ReadString('n')
if strings.ContainsAny(input, "+-*/") {
input = strings.ReplaceAll(input, " ", "")
split := strings.Split(input, "+")
num1, err := strconv.Atoi(split[0])
num2, err := strconv.Atoi(split[1])
operation := '+'
if err != nil {
fmt.Println("Ошибка:", err)
return
}
if isRoman(num1) && isRoman(num2) {
arabic1 := RomanToArabic(num1)
arabic2 := RomanToArabic(num2)
switch {
case operation == '+':
result := arabic1 + arabic2
romanResult := ArabicToRoman(result)
fmt.Println("Результат:", romanResult)
case operation == '-':
result := arabic1 - arabic2
romanResult := ArabicToRoman(result)
fmt.Println("Результат:", romanResult)
case operation == '*':
result := arabic1 * arabic2
romanResult := ArabicToRoman(result)
fmt.Println("Результат:", romanResult)
case operation == '/':
result := arabic1 / arabic2
romanResult := ArabicToRoman(result)
fmt.Println("Результат:", romanResult)
}
} else if !isRoman(num1) && !isRoman(num2) {
switch {
case operation == '+':
result := num1 + num2
fmt.Println("Результат:", result)
case operation == '-':
result := num1 - num2
fmt.Println("Результат:", result)
case operation == '*':
result := num1 * num2
fmt.Println("Результат:", result)
case operation == '/':
result := num1 / num2
fmt.Println("Результат:", result)
}
} else {
fmt.Println("Ошибка: некорректные числа")
}
} else {
fmt.Println("Ошибка: некорректные данные")
}
}
func isRoman(num int) bool {
switch num {
case 'I', 'V', 'X', 'L', 'C', 'D', 'M':
return true
}
return false
}
func RomanToArabic(roman string) int {
// реализация преобразования римской цифры в арабскую
return 0
}
func ArabicToRoman(number int) string {
// реализация преобразования арабской цифры в римскую
return ""
}
Обратите внимание, что функции RomanToArabic и ArabicToRoman являются заглушками и должны быть реализованы в соответствии с логикой преобразования римских и арабских цифр. Пожалуйста, заполните их соответствующим образом перед использованием данного кода.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет