From c0d2c180c78aea8713270ad30bcde63aa40da79b Mon Sep 17 00:00:00 2001 From: Anton Neustroev Date: Thu, 17 Oct 2024 00:19:52 +0300 Subject: [PATCH 1/3] first commit --- ftracker.go | 152 ++++++++++++++++++++-------------------------------- go.mod | 2 +- 2 files changed, 58 insertions(+), 96 deletions(-) diff --git a/ftracker.go b/ftracker.go index edf04d5..ce646e5 100644 --- a/ftracker.go +++ b/ftracker.go @@ -1,138 +1,100 @@ package ftracker import ( - "fmt" - "math" + "fmt" ) // Основные константы, необходимые для расчетов. 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 { - // ваш код здесь - ... + speed := meanSpeed(action, duration) * kmhInMsec // Convert km/h to m/s + return ((walkingCaloriesWeightMultiplier * weight) + ((speed*speed)/height)*walkingSpeedHeightMultiplier*weight) * duration * minInH } // Константы для расчета калорий, расходуемых при плавании. 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 { + var dist, speed, calories float64 + + switch trainingType { + case "Бег": + dist = distance(action) + speed = meanSpeed(action, duration) + calories = RunningSpentCalories(action, weight, duration) + case "Ходьба": + dist = distance(action) + speed = meanSpeed(action, duration) + calories = WalkingSpentCalories(action, duration, weight, height) + case "Плавание": + dist = float64(lengthPool*countPool) / mInKm + speed = swimmingMeanSpeed(lengthPool, countPool, duration) + calories = SwimmingSpentCalories(lengthPool, countPool, duration, weight) + default: + return "неизвестный тип тренировки" + } + + return fmt.Sprintf( + "Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", + trainingType, duration, dist, speed, calories, + ) } 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 From e28cc8a07f77a662c0912f1be88ecabd97a1ea4c Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 17 Oct 2024 12:45:34 +0300 Subject: [PATCH 2/3] FIX func Wallking Spent calories --- .idea/.gitignore | 8 +++++++ .idea/Go-sprint-four.iml | 9 ++++++++ .idea/modules.xml | 8 +++++++ .idea/vcs.xml | 6 +++++ ftracker.go | 47 +++++++++++++++++++++------------------- 5 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/Go-sprint-four.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml 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 ce646e5..ca82608 100644 --- a/ftracker.go +++ b/ftracker.go @@ -2,6 +2,7 @@ package ftracker import ( "fmt" + "math" ) // Основные константы, необходимые для расчетов. @@ -47,8 +48,14 @@ const ( // WalkingSpentCalories возвращает количество потраченных калорий при ходьбе. func WalkingSpentCalories(action int, duration, weight, height float64) float64 { - speed := meanSpeed(action, duration) * kmhInMsec // Convert km/h to m/s - return ((walkingCaloriesWeightMultiplier * weight) + ((speed*speed)/height)*walkingSpeedHeightMultiplier*weight) * duration * minInH + // Преобразуем скорость из км/ч в м/с + speedMS := meanSpeed(action, duration) * kmhInMsec + // Преобразуем рост в метры + heightM := height / 100 + + // Формула для расчета калорий + calories := (0.035*weight + math.Pow(speedMS, 2)/heightM*0.029*weight) * duration * 60 + return calories } // Константы для расчета калорий, расходуемых при плавании. @@ -74,27 +81,23 @@ func SwimmingSpentCalories(lengthPool, countPool int, duration, weight float64) // ShowTrainingInfo возвращает строку с информацией о тренировке. func ShowTrainingInfo(action int, trainingType string, duration, weight, height float64, lengthPool, countPool int) string { - var dist, speed, calories float64 - - switch trainingType { - case "Бег": - dist = distance(action) - speed = meanSpeed(action, duration) - calories = RunningSpentCalories(action, weight, duration) - case "Ходьба": - dist = distance(action) - speed = meanSpeed(action, duration) - calories = WalkingSpentCalories(action, duration, weight, height) - case "Плавание": - dist = float64(lengthPool*countPool) / mInKm - speed = swimmingMeanSpeed(lengthPool, countPool, duration) - calories = SwimmingSpentCalories(lengthPool, countPool, duration, weight) + 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 "неизвестный тип тренировки" } - - return fmt.Sprintf( - "Тип тренировки: %s\nДлительность: %.2f ч.\nДистанция: %.2f км.\nСкорость: %.2f км/ч\nСожгли калорий: %.2f\n", - trainingType, duration, dist, speed, calories, - ) } From cec4975ecf6754773f80cb601a168eadcbee489a Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 17 Oct 2024 20:18:31 +0300 Subject: [PATCH 3/3] use constant in code --- ftracker.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ftracker.go b/ftracker.go index ca82608..20f48e3 100644 --- a/ftracker.go +++ b/ftracker.go @@ -51,10 +51,10 @@ func WalkingSpentCalories(action int, duration, weight, height float64) float64 // Преобразуем скорость из км/ч в м/с speedMS := meanSpeed(action, duration) * kmhInMsec // Преобразуем рост в метры - heightM := height / 100 + heightM := height / cmInM // Формула для расчета калорий - calories := (0.035*weight + math.Pow(speedMS, 2)/heightM*0.029*weight) * duration * 60 + calories := (walkingCaloriesWeightMultiplier*weight + math.Pow(speedMS, 2)/heightM*walkingSpeedHeightMultiplier*weight) * duration * minInH return calories }