Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 11 additions & 26 deletions 1-converter/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,15 @@ import (
"strings"
)

const USD_TO_RUB float64 = 83.74
const USD_TO_EUR float64 = 1.137
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 := ""
Expand Down Expand Up @@ -39,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
}
Expand All @@ -57,27 +62,7 @@ func scanValue(message string) (value float64) {
return value
}

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
}
func convert(value float64, from string, to string, currencies currencyMap) float64 {
rubles := value * currencies[from]
return rubles / currencies[to]
}
3 changes: 3 additions & 0 deletions 2-calc/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module calc

go 1.23.0
91 changes: 91 additions & 0 deletions 2-calc/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
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) {
fmt.Println("Неверная операция, попробуйте снова")
continue
}

numbers := scanNumbers("Введите числа через запятую: ")
if len(numbers) == 0 {
fmt.Println("Ни одно число не было введено")
continue
}

result := calc(operation, numbers)
fmt.Printf("Результат: %v\n\n", result)
}
}

func scanInput(message string) string {
fmt.Println(message)
var input string
fmt.Scanln(&input)
return input
}

func scanNumbers(message string) []int {
fmt.Println(message)
var input string
fmt.Scanln(&input)

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
}
numbers = append(numbers, num)
}
return numbers
}

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
}
}

func calcAvg(numbers []int) int {
sum := 0
for _, n := range numbers {
sum += n
}
return sum / len(numbers)
}

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
}
return numbers[mid]
}