diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/Go-sprint-four.iml b/.idea/Go-sprint-four.iml
new file mode 100644
index 0000000..5e764c4
--- /dev/null
+++ b/.idea/Go-sprint-four.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..0ed6e1b
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ftracker.go b/ftracker.go
index edf04d5..20f48e3 100644
--- a/ftracker.go
+++ b/ftracker.go
@@ -1,138 +1,103 @@
package ftracker
import (
- "fmt"
- "math"
+ "fmt"
+ "math"
)
// Основные константы, необходимые для расчетов.
const (
- lenStep = 0.65 // средняя длина шага.
- mInKm = 1000 // количество метров в километре.
- minInH = 60 // количество минут в часе.
- kmhInMsec = 0.278 // коэффициент для преобразования км/ч в м/с.
- cmInM = 100 // количество сантиметров в метре.
+ lenStep = 0.65 // средняя длина шага.
+ mInKm = 1000 // количество метров в километре.
+ minInH = 60 // количество минут в часе.
+ kmhInMsec = 0.278 // коэффициент для преобразования км/ч в м/с.
+ cmInM = 100 // количество сантиметров в метре.
)
-// distance возвращает дистанцию(в километрах), которую преодолел пользователь за время тренировки.
-//
-// Параметры:
-//
-// action int — количество совершенных действий (число шагов при ходьбе и беге, либо гребков при плавании).
+// distance возвращает дистанцию (в километрах), которую преодолел пользователь за время тренировки.
func distance(action int) float64 {
- return float64(action) * lenStep / mInKm
+ return float64(action) * lenStep / mInKm
}
// meanSpeed возвращает значение средней скорости движения во время тренировки.
-//
-// Параметры:
-//
-// action int — количество совершенных действий(число шагов при ходьбе и беге, либо гребков при плавании).
-// duration float64 — длительность тренировки в часах.
func meanSpeed(action int, duration float64) float64 {
- if duration == 0 {
- return 0
- }
- distance := distance(action)
- return distance / duration
-}
-
-// ShowTrainingInfo возвращает строку с информацией о тренировке.
-//
-// Параметры:
-//
-// action int — количество совершенных действий(число шагов при ходьбе и беге, либо гребков при плавании).
-// trainingType string — вид тренировки(Бег, Ходьба, Плавание).
-// duration float64 — длительность тренировки в часах.
-func ShowTrainingInfo(action int, trainingType string, duration, weight, height float64, lengthPool, countPool int) string {
- // ваш код здесь
- switch {
- case trainingType == "Бег":
- distance := ... // вызовите здесь необходимую функцию
- speed := ... // вызовите здесь необходимую функцию
- calories := ... // вызовите здесь необходимую функцию
- return fmt.Sprintf("Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", trainingType, duration, distance, speed, calories)
- case trainingType == "Ходьба":
- distance := ... // вызовите здесь необходимую функцию
- speed := ... // вызовите здесь необходимую функцию
- calories := ... // вызовите здесь необходимую функцию
- return fmt.Sprintf("Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", trainingType, duration, distance, speed, calories)
- case trainingType == "Плавание":
- distance := ... // вызовите здесь необходимую функцию
- speed := ... // вызовите здесь необходимую функцию
- calories := ... // вызовите здесь необходимую функцию
- return fmt.Sprintf("Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", trainingType, duration, distance, speed, calories)
- default:
- return "неизвестный тип тренировки"
+ if duration == 0 {
+ return 0
}
+ dist := distance(action)
+ return dist / duration
}
// Константы для расчета калорий, расходуемых при беге.
const (
- runningCaloriesMeanSpeedMultiplier = 18 // множитель средней скорости.
- runningCaloriesMeanSpeedShift = 1.79 // среднее количество сжигаемых калорий при беге.
+ runningCaloriesMeanSpeedMultiplier = 18 // множитель средней скорости.
+ runningCaloriesMeanSpeedShift = 1.79 // среднее количество сжигаемых калорий при беге.
)
-// RunningSpentCalories возвращает количество потраченных колорий при беге.
-//
-// Параметры:
-//
-// action int — количество совершенных действий(число шагов при ходьбе и беге, либо гребков при плавании).
-// weight float64 — вес пользователя.
-// duration float64 — длительность тренировки в часах.
+// RunningSpentCalories возвращает количество потраченных калорий при беге.
func RunningSpentCalories(action int, weight, duration float64) float64 {
- // ваш код здесь
- ...
+ speed := meanSpeed(action, duration)
+ return ((runningCaloriesMeanSpeedMultiplier * speed * runningCaloriesMeanSpeedShift) * weight / mInKm) * duration * minInH
}
// Константы для расчета калорий, расходуемых при ходьбе.
const (
- walkingCaloriesWeightMultiplier = 0.035 // множитель массы тела.
- walkingSpeedHeightMultiplier = 0.029 // множитель роста.
+ walkingCaloriesWeightMultiplier = 0.035 // множитель массы тела.
+ walkingSpeedHeightMultiplier = 0.029 // множитель роста.
)
// WalkingSpentCalories возвращает количество потраченных калорий при ходьбе.
-//
-// Параметры:
-//
-// action int — количество совершенных действий(число шагов при ходьбе и беге, либо гребков при плавании).
-// duration float64 — длительность тренировки в часах.
-// weight float64 — вес пользователя.
-// height float64 — рост пользователя.
func WalkingSpentCalories(action int, duration, weight, height float64) float64 {
- // ваш код здесь
- ...
+ // Преобразуем скорость из км/ч в м/с
+ speedMS := meanSpeed(action, duration) * kmhInMsec
+ // Преобразуем рост в метры
+ heightM := height / cmInM
+
+ // Формула для расчета калорий
+ calories := (walkingCaloriesWeightMultiplier*weight + math.Pow(speedMS, 2)/heightM*walkingSpeedHeightMultiplier*weight) * duration * minInH
+ return calories
}
// Константы для расчета калорий, расходуемых при плавании.
const (
- swimmingCaloriesMeanSpeedShift = 1.1 // среднее количество сжигаемых колорий при плавании относительно скорости.
- swimmingCaloriesWeightMultiplier = 2 // множитель веса при плавании.
+ swimmingCaloriesMeanSpeedShift = 1.1 // среднее количество сжигаемых калорий при плавании относительно скорости.
+ swimmingCaloriesWeightMultiplier = 2 // множитель веса при плавании.
)
// swimmingMeanSpeed возвращает среднюю скорость при плавании.
-//
-// Параметры:
-//
-// lengthPool int — длина бассейна в метрах.
-// countPool int — сколько раз пользователь переплыл бассейн.
-// duration float64 — длительность тренировки в часах.
func swimmingMeanSpeed(lengthPool, countPool int, duration float64) float64 {
- if duration == 0 {
- return 0
- }
- return float64(lengthPool) * float64(countPool) / mInKm / duration
+ if duration == 0 {
+ return 0
+ }
+ distance := float64(lengthPool*countPool) / mInKm // Convert to km
+ return distance / duration
}
// SwimmingSpentCalories возвращает количество потраченных калорий при плавании.
-//
-// Параметры:
-//
-// lengthPool int — длина бассейна в метрах.
-// countPool int — сколько раз пользователь переплыл бассейн.
-// duration float64 — длительность тренировки в часах.
-// weight float64 — вес пользователя.
func SwimmingSpentCalories(lengthPool, countPool int, duration, weight float64) float64 {
- // ваш код здесь
- ...
+ speed := swimmingMeanSpeed(lengthPool, countPool, duration)
+ return (speed + swimmingCaloriesMeanSpeedShift) * swimmingCaloriesWeightMultiplier * weight * duration
+}
+
+// ShowTrainingInfo возвращает строку с информацией о тренировке.
+func ShowTrainingInfo(action int, trainingType string, duration, weight, height float64, lengthPool, countPool int) string {
+ switch {
+ case trainingType == "Бег":
+ distance := distance(action)
+ speed := meanSpeed(action, duration)
+ calories := RunningSpentCalories(action, weight, duration)
+ return fmt.Sprintf("Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", trainingType, duration, distance, speed, calories)
+ case trainingType == "Ходьба":
+ distance := distance(action)
+ speed := meanSpeed(action, duration)
+ calories := WalkingSpentCalories(action, duration, weight, height)
+ return fmt.Sprintf("Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", trainingType, duration, distance, speed, calories)
+ case trainingType == "Плавание":
+ distance := distance(action)
+ speed := swimmingMeanSpeed(lengthPool, countPool, duration)
+ calories := SwimmingSpentCalories(lengthPool, countPool, duration, weight)
+ return fmt.Sprintf("Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", trainingType, duration, distance, speed, calories)
+ default:
+ return "неизвестный тип тренировки"
+ }
}
diff --git a/go.mod b/go.mod
index 264a943..9a32366 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
-module github.com/Yandex-Practicum/go-first-floor-sprint-four
+module github.com/TonyGO21/Go-sprint-four
go 1.20