From 4cbbfba24d4d69c6bbd12030bffd1d457ce05c09 Mon Sep 17 00:00:00 2001 From: Creadark Date: Fri, 10 Jan 2025 18:26:10 +0300 Subject: [PATCH 1/3] first-commit --- main.go | 90 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 33 deletions(-) diff --git a/main.go b/main.go index 1248e38..c8476ca 100644 --- a/main.go +++ b/main.go @@ -16,48 +16,53 @@ const ( // Training общая структура для всех тренировок type Training struct { - ... // тип тренировки - ... // количество повторов(шаги, гребки при плавании) - ... // длина одного шага или гребка в м - ... // продолжительность тренировки - ... // вес пользователя в кг + TrainingType string // тип тренировки + Action int // количество повторов(шаги, гребки при плавании) + LenStep float64 // длина одного шага или гребка в м + Duration time.Duration // продолжительность тренировки + Weight float64 // вес пользователя в кг } - // distance возвращает дистанцию, которую преодолел пользователь. // Формула расчета: // количество_повторов * длина_шага / м_в_км func (t Training) distance() float64 { // вставьте ваш код ниже - ... + return float64(t.Action)*t.LenStep/MInKm } // meanSpeed возвращает среднюю скорость бега или ходьбы. func (t Training) meanSpeed() float64 { // вставьте ваш код ниже - ... + return t.distance()/t.Duration.Hours()n } // Calories возвращает количество потраченных килокалорий на тренировке. // Пока возвращаем 0, так как этот метод будет переопределяться для каждого типа тренировки. func (t Training) Calories() float64 { // вставьте ваш код ниже - ... + return 0 } // InfoMessage содержит информацию о проведенной тренировке. type InfoMessage struct { // добавьте необходимые поля в структуру - ... // тип тренировки - ... // длительность тренировки - ... // расстояние, которое преодолел пользователь - ... // средняя скорость, с которой двигался пользователь - ... // количество потраченных килокалорий на тренировке + TrainingType string // тип тренировки + Duration time.Duration // длительность тренировки + Distance float64 // расстояние, которое преодолел пользователь + Speed float64 // средняя скорость, с которой двигался пользователь + Calories float64 // количество потраченных килокалорий на тренировке } // TrainingInfo возвращает труктуру InfoMessage, в которой хранится вся информация о проведенной тренировке. func (t Training) TrainingInfo() InfoMessage { // вставьте ваш код ниже - ... + return InfoMessage{ + TrainingType: t.TrainingType, + Duration: t.Duration, + Distance: t.distance(), + Speed: t.meanSpeed(), + Calories: t.Calories(), + } } // String возвращает строку с информацией о проведенной тренировке. @@ -74,7 +79,8 @@ func (i InfoMessage) String() string { // CaloriesCalculator интерфейс для структур: Running, Walking и Swimming. type CaloriesCalculator interface { // добавьте необходимые методы в интерфейс - ... + Calories() float64 + TrainingInfo() InfoMessage } // Константы для расчета потраченных килокалорий при беге. @@ -86,7 +92,7 @@ const ( // Running структура, описывающая тренировку Бег. type Running struct { // добавьте необходимые поля в структуру - ... + Training } // Calories возввращает количество потраченных килокалория при беге. @@ -95,14 +101,15 @@ type Running struct { // Это переопределенный метод Calories() из Training. func (r Running) Calories() float64 { // вставьте ваш код ниже - ... + f := r.meanSpeed() + return ((CaloriesMeanSpeedMultiplier*v+CaloriesMeanSpeedShift)*r.Weight/MInKm*r.Duration.Hours()*MinInHours) } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. // Это переопределенный метод TrainingInfo() из Training. func (r Running) TrainingInfo() InfoMessage { // вставьте ваш код ниже - ... + return r.Training.TrainingInfo() } // Константы для расчета потраченных килокалорий при ходьбе. @@ -115,8 +122,8 @@ const ( // Walking структура описывающая тренировку Ходьба type Walking struct { // добавьте необходимые поля в структуру - ... - ... // рост пользователя + Training + Height float64 // рост пользователя } // Calories возвращает количество потраченных килокалорий при ходьбе. @@ -126,14 +133,20 @@ type Walking struct { // Это переопределенный метод Calories() из Training. func (w Walking) Calories() float64 { // вставьте ваш код ниже - ... + h := w.meanSpeed() * KmHInMsec + h = math.Pow(v, 2) + heightInM := w.Height / CmInM + if heightInM <= 0 { + return 0 + } + return ((CaloriesWeightMultiplier*w.Weight+(h/heightInM)*CaloriesSpeedHeightMultiplier*w.Weight)*w.Duration.Hours()*MinInHours) } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. // Это переопределенный метод TrainingInfo() из Training. func (w Walking) TrainingInfo() InfoMessage { // вставьте ваш код ниже - ... + return w.Training.TrainingInfo() } // Константы для расчета потраченных килокалорий при плавании. @@ -146,9 +159,9 @@ const ( // Swimming структура, описывающая тренировку Плавание type Swimming struct { // добавьте необходимые поля в структуру - ... - ... // длина бассейна - ... // количество пересечений бассейна + Training + LengthPool int // длина бассейна + CountPool int // количество пересечений бассейна } // meanSpeed возвращает среднюю скорость при плавании. @@ -157,7 +170,11 @@ type Swimming struct { // Это переопределенный метод Calories() из Training. func (s Swimming) meanSpeed() float64 { // вставьте ваш код ниже - ... + hours := s.Duration.Hours() + if hours <= 0 { + return 0 + } + return float64(s.LengthPool)*float64(s.CountPool)/MInKm/hours } // Calories возвращает количество калорий, потраченных при плавании. @@ -166,25 +183,32 @@ func (s Swimming) meanSpeed() float64 { // Это переопределенный метод Calories() из Training. func (s Swimming) Calories() float64 { // вставьте ваш код ниже - ... + x := s.meanSpeed() + return (x + SwimmingCaloriesMeanSpeedShift)*SwimmingCaloriesWeightMultiplier*s.Weight*s.Duration.Hours() } // TrainingInfo returns info about swimming training. // Это переопределенный метод TrainingInfo() из Training. func (s Swimming) TrainingInfo() InfoMessage { // вставьте ваш код ниже - ... + return InfoMessage{ + TrainingType: s.TrainingType, + Duration: s.Duration, + Distance: s.distance(), + Speed: s.meanSpeed(), + Calories: s.Calories(), + } } // ReadData возвращает информацию о проведенной тренировке. func ReadData(training CaloriesCalculator) string { // получите количество затраченных калорий - calories := ... + calories := training.Calories() // получите информацию о тренировке - info := ... + info := training.TrainingInfo() // добавьте полученные калории в структуру с информацией о тренировке - ... + info.Calories = calories return fmt.Sprint(info) } @@ -230,4 +254,4 @@ func main() { fmt.Println(ReadData(running)) -} +} \ No newline at end of file From d714b975e0c90d8f8afdcc47c93af29f3779e83e Mon Sep 17 00:00:00 2001 From: Creadark Date: Fri, 10 Jan 2025 18:30:02 +0300 Subject: [PATCH 2/3] second commit. Changed return in string 37 --- main.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index c8476ca..5e105d5 100644 --- a/main.go +++ b/main.go @@ -22,18 +22,19 @@ type Training struct { Duration time.Duration // продолжительность тренировки Weight float64 // вес пользователя в кг } + // distance возвращает дистанцию, которую преодолел пользователь. // Формула расчета: // количество_повторов * длина_шага / м_в_км func (t Training) distance() float64 { // вставьте ваш код ниже - return float64(t.Action)*t.LenStep/MInKm + return float64(t.Action) * t.LenStep / MInKm } // meanSpeed возвращает среднюю скорость бега или ходьбы. func (t Training) meanSpeed() float64 { // вставьте ваш код ниже - return t.distance()/t.Duration.Hours()n + return t.distance() / t.Duration.Hours() } // Calories возвращает количество потраченных килокалорий на тренировке. @@ -102,7 +103,7 @@ type Running struct { func (r Running) Calories() float64 { // вставьте ваш код ниже f := r.meanSpeed() - return ((CaloriesMeanSpeedMultiplier*v+CaloriesMeanSpeedShift)*r.Weight/MInKm*r.Duration.Hours()*MinInHours) + return ((CaloriesMeanSpeedMultiplier*v + CaloriesMeanSpeedShift) * r.Weight / MInKm * r.Duration.Hours() * MinInHours) } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. @@ -137,9 +138,9 @@ func (w Walking) Calories() float64 { h = math.Pow(v, 2) heightInM := w.Height / CmInM if heightInM <= 0 { - return 0 + return 0 } - return ((CaloriesWeightMultiplier*w.Weight+(h/heightInM)*CaloriesSpeedHeightMultiplier*w.Weight)*w.Duration.Hours()*MinInHours) + return ((CaloriesWeightMultiplier*w.Weight + (h/heightInM)*CaloriesSpeedHeightMultiplier*w.Weight) * w.Duration.Hours() * MinInHours) } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. @@ -174,7 +175,7 @@ func (s Swimming) meanSpeed() float64 { if hours <= 0 { return 0 } - return float64(s.LengthPool)*float64(s.CountPool)/MInKm/hours + return float64(s.LengthPool) * float64(s.CountPool) / MInKm / hours } // Calories возвращает количество калорий, потраченных при плавании. @@ -184,7 +185,7 @@ func (s Swimming) meanSpeed() float64 { func (s Swimming) Calories() float64 { // вставьте ваш код ниже x := s.meanSpeed() - return (x + SwimmingCaloriesMeanSpeedShift)*SwimmingCaloriesWeightMultiplier*s.Weight*s.Duration.Hours() + return (x + SwimmingCaloriesMeanSpeedShift) * SwimmingCaloriesWeightMultiplier * s.Weight * s.Duration.Hours() } // TrainingInfo returns info about swimming training. @@ -254,4 +255,4 @@ func main() { fmt.Println(ReadData(running)) -} \ No newline at end of file +} From e0fa435f034cb221ed3b9f1031d61e6edd8229af Mon Sep 17 00:00:00 2001 From: Creadark Date: Fri, 10 Jan 2025 18:34:11 +0300 Subject: [PATCH 3/3] third iteration. Changed two strings 106 and 136. --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 5e105d5..2a07233 100644 --- a/main.go +++ b/main.go @@ -103,7 +103,7 @@ type Running struct { func (r Running) Calories() float64 { // вставьте ваш код ниже f := r.meanSpeed() - return ((CaloriesMeanSpeedMultiplier*v + CaloriesMeanSpeedShift) * r.Weight / MInKm * r.Duration.Hours() * MinInHours) + return ((CaloriesMeanSpeedMultiplier*f + CaloriesMeanSpeedShift) * r.Weight / MInKm * r.Duration.Hours() * MinInHours) } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. @@ -135,7 +135,7 @@ type Walking struct { func (w Walking) Calories() float64 { // вставьте ваш код ниже h := w.meanSpeed() * KmHInMsec - h = math.Pow(v, 2) + h = math.Pow(h, 2) heightInM := w.Height / CmInM if heightInM <= 0 { return 0