From 2a79bba2a45baa4a5439011d8ed42ed0f40d1a6c Mon Sep 17 00:00:00 2001 From: glo1337 Date: Sat, 12 Apr 2025 10:36:27 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=9A=D0=B0=D0=BB=D1=8C=D0=BA=D1=83=D0=BB?= =?UTF-8?q?=D1=8F=D1=82=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2-calc/go.mod | 3 ++ 2-calc/main.go | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 2-calc/go.mod create mode 100644 2-calc/main.go diff --git a/2-calc/go.mod b/2-calc/go.mod new file mode 100644 index 0000000..bbe1e61 --- /dev/null +++ b/2-calc/go.mod @@ -0,0 +1,3 @@ +module calc + +go 1.23.0 diff --git a/2-calc/main.go b/2-calc/main.go new file mode 100644 index 0000000..8e0e46f --- /dev/null +++ b/2-calc/main.go @@ -0,0 +1,93 @@ +package main + +import ( + "fmt" + "slices" + "strconv" + "strings" +) + +func main() { + operations := []string{"AVG", "SUM", "MED"} + for { + operation := scanInput("Введите операцию (AVG - среднее, SUM - сумма, MED - медиана): ") + if !slices.Contains(operations, operation) { + continue + } + + values := scanInput("Введите числа через запятую: ") + valuesSplitted := strings.Split(values, ",") + if len(values) == 0 { + continue + } + res := calc(operation, valuesSplitted) + resString := fmt.Sprintf("Результат: %v", res) + fmt.Println(resString) + } +} + +func scanInput(message string) (value string) { + fmt.Println(message) + fmt.Scanln(&value) + return value +} + +func calc(operation string, values []string) int { + res := 0 + switch operation { + case "AVG": + res = calcAvg(values) + case "SUM": + res = calcSum(values) + case "MED": + res = calcMed(values) + } + return res +} + +func calcAvg(values []string) int { + res := 0 + for _, v := range values { + number, err := strconv.Atoi(strings.TrimSpace(v)) + if err != nil { + continue + } + res += number + } + return res / len(values) +} + +func calcSum(values []string) int { + res := 0 + for _, v := range values { + number, err := strconv.Atoi(strings.TrimSpace(v)) + if err != nil { + continue + } + res += number + } + return res +} + +func calcMed(values []string) int { + var numbers []int + for _, v := range values { + number, err := strconv.Atoi(strings.TrimSpace(v)) + if err != nil { + continue + } + numbers = append(numbers, number) + } + + if len(numbers) == 0 { + return 0 + } + + slices.Sort(numbers) + + mid := len(numbers) / 2 + if len(numbers)%2 == 0 { + return (numbers[mid-1] + numbers[mid]) / 2 + } + return numbers[mid] +} From d356a5d42436d0ed5ea460a6cfb3fcf401c741ec Mon Sep 17 00:00:00 2001 From: glo1337 Date: Sat, 12 Apr 2025 10:40:10 +0500 Subject: [PATCH 2/4] =?UTF-8?q?=D0=9A=D0=B0=D0=BB=D1=8C=D0=BA=D1=83=D0=BB?= =?UTF-8?q?=D1=8F=D1=82=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2-calc/main.go | 92 ++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/2-calc/main.go b/2-calc/main.go index 8e0e46f..c8d29c5 100644 --- a/2-calc/main.go +++ b/2-calc/main.go @@ -12,79 +12,77 @@ func main() { for { operation := scanInput("Введите операцию (AVG - среднее, SUM - сумма, MED - медиана): ") if !slices.Contains(operations, operation) { + fmt.Println("Неверная операция, попробуйте снова") continue } - values := scanInput("Введите числа через запятую: ") - valuesSplitted := strings.Split(values, ",") - if len(values) == 0 { + numbers := scanNumbers("Введите числа через запятую: ") + if len(numbers) == 0 { + fmt.Println("Ни одно число не было введено") continue } - res := calc(operation, valuesSplitted) - resString := fmt.Sprintf("Результат: %v", res) - fmt.Println(resString) + + result := calc(operation, numbers) + fmt.Printf("Результат: %v\n\n", result) } } -func scanInput(message string) (value string) { +func scanInput(message string) string { fmt.Println(message) - fmt.Scanln(&value) - return value + var input string + fmt.Scanln(&input) + return input } -func calc(operation string, values []string) int { - res := 0 - switch operation { - case "AVG": - res = calcAvg(values) - case "SUM": - res = calcSum(values) - case "MED": - res = calcMed(values) - } - return res -} +func scanNumbers(message string) []int { + fmt.Println(message) + var input string + fmt.Scanln(&input) -func calcAvg(values []string) int { - res := 0 - for _, v := range values { - number, err := strconv.Atoi(strings.TrimSpace(v)) + parts := strings.Split(input, ",") + var numbers []int + for _, p := range parts { + num, err := strconv.Atoi(strings.TrimSpace(p)) if err != nil { + fmt.Printf("Некорректное значение: %q\n", p) continue } - res += number + numbers = append(numbers, num) } - return res / len(values) + return numbers } -func calcSum(values []string) int { - res := 0 - for _, v := range values { - number, err := strconv.Atoi(strings.TrimSpace(v)) - if err != nil { - continue - } - res += number +func calc(operation string, numbers []int) int { + switch operation { + case "AVG": + return calcAvg(numbers) + case "SUM": + return calcSum(numbers) + case "MED": + return calcMed(numbers) + default: + return 0 } - return res } -func calcMed(values []string) int { - var numbers []int - for _, v := range values { - number, err := strconv.Atoi(strings.TrimSpace(v)) - if err != nil { - continue - } - numbers = append(numbers, number) +func calcAvg(numbers []int) int { + sum := 0 + for _, n := range numbers { + sum += n } + return sum / len(numbers) +} - if len(numbers) == 0 { - return 0 +func calcSum(numbers []int) int { + sum := 0 + for _, n := range numbers { + sum += n } + return sum +} +func calcMed(numbers []int) int { slices.Sort(numbers) - mid := len(numbers) / 2 if len(numbers)%2 == 0 { return (numbers[mid-1] + numbers[mid]) / 2 From 8ad4d64ad6f8daca392356d3c5a053d71d022055 Mon Sep 17 00:00:00 2001 From: glo1337 Date: Mon, 21 Apr 2025 14:18:18 +0500 Subject: [PATCH 3/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20currencyMap=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=80=D0=B0=D1=81=D1=87=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1-converter/main.go | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/1-converter/main.go b/1-converter/main.go index 06a255c..bb9c453 100644 --- a/1-converter/main.go +++ b/1-converter/main.go @@ -5,8 +5,11 @@ import ( "strings" ) -const USD_TO_RUB float64 = 83.74 -const USD_TO_EUR float64 = 1.137 +var currencyMap = map[string]float64{ + "USD": 82.17, + "EUR": 93.45, + "RUB": 1.0, +} func main() { for { @@ -58,26 +61,6 @@ func scanValue(message string) (value float64) { } func convert(value float64, from string, to string) float64 { - var usdValue float64 - switch from { - case "USD": - usdValue = value - case "RUB": - usdValue = value / USD_TO_RUB - case "EUR": - usdValue = value / USD_TO_EUR - default: - return 0 - } - - switch to { - case "USD": - return usdValue - case "RUB": - return usdValue * USD_TO_RUB - case "EUR": - return usdValue * USD_TO_EUR - default: - return 0 - } + rubles := value * currencyMap[from] + return rubles / currencyMap[to] } From 589b367ef8673f8e413ac87ceb4cfe96066e61e2 Mon Sep 17 00:00:00 2001 From: glo1337 Date: Mon, 21 Apr 2025 14:25:30 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=20=D0=BC=D0=B0=D0=BF=D1=8B=20=D0=B2=D0=B0=D0=BB=D1=8E?= =?UTF-8?q?=D1=82=20=D0=B2=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1-converter/main.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/1-converter/main.go b/1-converter/main.go index bb9c453..fea6f0e 100644 --- a/1-converter/main.go +++ b/1-converter/main.go @@ -5,13 +5,15 @@ import ( "strings" ) -var currencyMap = map[string]float64{ - "USD": 82.17, - "EUR": 93.45, - "RUB": 1.0, -} +type currencyMap = map[string]float64 func main() { + var currencyMap = currencyMap{ + "USD": 82.17, + "EUR": 93.45, + "RUB": 1.0, + } + for { currencies := "USD EUR RUB" currentCurrency := "" @@ -42,7 +44,7 @@ func main() { break } - result := convert(value, currentCurrency, targetCurrency) + result := convert(value, currentCurrency, targetCurrency, currencyMap) fmt.Printf("%.2f %s = %.2f %s\n\n", value, currentCurrency, result, targetCurrency) return } @@ -60,7 +62,7 @@ func scanValue(message string) (value float64) { return value } -func convert(value float64, from string, to string) float64 { - rubles := value * currencyMap[from] - return rubles / currencyMap[to] +func convert(value float64, from string, to string, currencies currencyMap) float64 { + rubles := value * currencies[from] + return rubles / currencies[to] }