70 lines
1.6 KiB
Go
70 lines
1.6 KiB
Go
package main
|
||
|
||
import (
|
||
"errors"
|
||
"fmt"
|
||
"math"
|
||
)
|
||
|
||
func main() {
|
||
fmt.Println("__ Калькулятор индекса массы тела __")
|
||
for {
|
||
userKg, userHeight := getUserInput()
|
||
IMT, err := calculateIMT(userKg, userHeight)
|
||
if err != nil {
|
||
// fmt.Println(err)
|
||
// continue
|
||
panic("Не заданы параметры для расчета")
|
||
}
|
||
outputResult(IMT)
|
||
|
||
fmt.Print("Хотите расчитать еще (Y/n): ")
|
||
var choice string
|
||
fmt.Scan(&choice)
|
||
if choice == "n" {
|
||
break
|
||
}
|
||
if choice == "Y" || choice == "y" {
|
||
continue
|
||
}
|
||
}
|
||
}
|
||
|
||
func outputResult(imt float64) {
|
||
result := fmt.Sprintf("Ваш индекс массы тела: %.1f\n", imt)
|
||
fmt.Print(result)
|
||
|
||
switch {
|
||
case imt < 16:
|
||
fmt.Println("У вас сильный дефицит массы тела")
|
||
case imt < 18.5:
|
||
fmt.Println("У вас дефицит массы тела")
|
||
case imt < 25:
|
||
fmt.Println("У вас нормальный вес")
|
||
case imt < 30:
|
||
fmt.Println("У вас избыточный вес")
|
||
default:
|
||
fmt.Println("У вас степень ожирения")
|
||
}
|
||
}
|
||
|
||
func calculateIMT(userKg float64, userHeight float64) (float64, error) {
|
||
const IMTPower float64 = 2
|
||
if userHeight <= 0 || userKg <= 0 {
|
||
return 0, errors.New("NO_VALID_PARAMS")
|
||
}
|
||
IMT := userKg / math.Pow(userHeight/100, IMTPower)
|
||
return IMT, nil
|
||
}
|
||
|
||
func getUserInput() (float64, float64) {
|
||
var userHeight float64
|
||
var userKg float64
|
||
fmt.Print("Введите свой рост в сантиметрах: ")
|
||
fmt.Scan(&userHeight)
|
||
fmt.Print("Введите свой вес в килограммах: ")
|
||
fmt.Scan(&userKg)
|
||
|
||
return userKg, userHeight
|
||
}
|