From 047f76537e5f74f9194ac2462b9e460d8f06254a Mon Sep 17 00:00:00 2001 From: Yuriy Date: Tue, 11 Feb 2025 22:26:03 +0300 Subject: [PATCH 1/2] 1st commit --- main.go | 104 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 36 deletions(-) diff --git a/main.go b/main.go index 1248e38..aeaa3f5 100644 --- a/main.go +++ b/main.go @@ -16,11 +16,11 @@ const ( // Training общая структура для всех тренировок type Training struct { - ... // тип тренировки - ... // количество повторов(шаги, гребки при плавании) - ... // длина одного шага или гребка в м - ... // продолжительность тренировки - ... // вес пользователя в кг + TrainingType string // тип тренировки + Action int // количество повторов(шаги, гребки при плавании) + LenStep float64 // длина одного шага или гребка в м + Duration time.Duration // продолжительность тренировки + Weight float64 // вес пользователя в кг } // distance возвращает дистанцию, которую преодолел пользователь. @@ -28,36 +28,48 @@ type Training struct { // количество_повторов * длина_шага / м_в_км func (t Training) distance() float64 { // вставьте ваш код ниже - ... + if t.LenStep == 0 { + return 0 + } + return float64(t.Action) * t.LenStep / MInKm } // meanSpeed возвращает среднюю скорость бега или ходьбы. func (t Training) meanSpeed() float64 { // вставьте ваш код ниже - ... + if t.Duration.Hours() == 0 { + return 0 + } + return t.distance() / (t.Duration.Hours()) } // 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, в которой хранится вся информация о проведенной тренировке. +// 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 +86,8 @@ func (i InfoMessage) String() string { // CaloriesCalculator интерфейс для структур: Running, Walking и Swimming. type CaloriesCalculator interface { // добавьте необходимые методы в интерфейс - ... + Calories() float64 + TrainingInfo() InfoMessage } // Константы для расчета потраченных килокалорий при беге. @@ -86,7 +99,7 @@ const ( // Running структура, описывающая тренировку Бег. type Running struct { // добавьте необходимые поля в структуру - ... + Training } // Calories возввращает количество потраченных килокалория при беге. @@ -95,14 +108,20 @@ type Running struct { // Это переопределенный метод Calories() из Training. func (r Running) Calories() float64 { // вставьте ваш код ниже - ... + return (CaloriesMeanSpeedMultiplier*r.meanSpeed() + CaloriesMeanSpeedShift) * r.Weight / MInKm * r.Duration.Hours() * MinInHours } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. // Это переопределенный метод TrainingInfo() из Training. func (r Running) TrainingInfo() InfoMessage { // вставьте ваш код ниже - ... + return InfoMessage{ + TrainingType: r.TrainingType, + Duration: r.Duration, + Distance: r.distance(), + Speed: r.meanSpeed(), + Calories: r.Calories(), + } } // Константы для расчета потраченных килокалорий при ходьбе. @@ -115,8 +134,8 @@ const ( // Walking структура описывающая тренировку Ходьба type Walking struct { // добавьте необходимые поля в структуру - ... - ... // рост пользователя + Training + Height float64 // рост пользователя } // Calories возвращает количество потраченных килокалорий при ходьбе. @@ -126,14 +145,21 @@ type Walking struct { // Это переопределенный метод Calories() из Training. func (w Walking) Calories() float64 { // вставьте ваш код ниже - ... + var meanSpeedInMInSec float64 = math.Pow(w.meanSpeed()*KmHInMsec, 2) + return (CaloriesWeightMultiplier*w.Weight + (meanSpeedInMInSec/(w.Height/CmInM))*CaloriesSpeedHeightMultiplier*w.Weight) * w.Duration.Hours() * MinInHours } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. // Это переопределенный метод TrainingInfo() из Training. func (w Walking) TrainingInfo() InfoMessage { // вставьте ваш код ниже - ... + return InfoMessage{ + TrainingType: w.TrainingType, + Duration: w.Duration, + Distance: w.distance(), + Speed: w.meanSpeed(), + Calories: w.Calories(), + } } // Константы для расчета потраченных килокалорий при плавании. @@ -146,9 +172,9 @@ const ( // Swimming структура, описывающая тренировку Плавание type Swimming struct { // добавьте необходимые поля в структуру - ... - ... // длина бассейна - ... // количество пересечений бассейна + Training + LengthPool int // длина бассейна + CountPool int // количество пересечений бассейна } // meanSpeed возвращает среднюю скорость при плавании. @@ -157,7 +183,10 @@ type Swimming struct { // Это переопределенный метод Calories() из Training. func (s Swimming) meanSpeed() float64 { // вставьте ваш код ниже - ... + if s.Duration.Hours() == 0 { + return 0 + } + return float64(s.LengthPool*s.CountPool) / MInKm / s.Duration.Hours() } // Calories возвращает количество калорий, потраченных при плавании. @@ -166,26 +195,30 @@ func (s Swimming) meanSpeed() float64 { // Это переопределенный метод Calories() из Training. func (s Swimming) Calories() float64 { // вставьте ваш код ниже - ... + return (s.meanSpeed() + 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) } @@ -229,5 +262,4 @@ func main() { } fmt.Println(ReadData(running)) - } From 84b82ad5fbcf02f5327455d8c85d1746b7ea5268 Mon Sep 17 00:00:00 2001 From: Yuriy Date: Thu, 13 Feb 2025 20:14:27 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=A3=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 81 +++++++++++++-------------------------------------------- 1 file changed, 18 insertions(+), 63 deletions(-) diff --git a/main.go b/main.go index aeaa3f5..a3c465d 100644 --- a/main.go +++ b/main.go @@ -27,7 +27,6 @@ type Training struct { // Формула расчета: // количество_повторов * длина_шага / м_в_км func (t Training) distance() float64 { - // вставьте ваш код ниже if t.LenStep == 0 { return 0 } @@ -36,23 +35,20 @@ func (t Training) distance() float64 { // meanSpeed возвращает среднюю скорость бега или ходьбы. func (t Training) meanSpeed() float64 { - // вставьте ваш код ниже if t.Duration.Hours() == 0 { return 0 } - return t.distance() / (t.Duration.Hours()) + return t.distance() / t.Duration.Hours() } // Calories возвращает количество потраченных килокалорий на тренировке. // Пока возвращаем 0, так как этот метод будет переопределяться для каждого типа тренировки. func (t Training) Calories() float64 { - // вставьте ваш код ниже return 0 } // InfoMessage содержит информацию о проведенной тренировке. type InfoMessage struct { - // добавьте необходимые поля в структуру TrainingType string // тип тренировки Duration time.Duration // длительность тренировки Distance float64 // расстояние, которое преодолел пользователь @@ -62,7 +58,6 @@ type InfoMessage struct { // TrainingInfo возвращает структуру InfoMessage, в которой хранится вся информация о проведенной тренировке. func (t Training) TrainingInfo() InfoMessage { - // вставьте ваш код ниже return InfoMessage{ TrainingType: t.TrainingType, Duration: t.Duration, @@ -85,7 +80,6 @@ func (i InfoMessage) String() string { // CaloriesCalculator интерфейс для структур: Running, Walking и Swimming. type CaloriesCalculator interface { - // добавьте необходимые методы в интерфейс Calories() float64 TrainingInfo() InfoMessage } @@ -98,30 +92,20 @@ const ( // Running структура, описывающая тренировку Бег. type Running struct { - // добавьте необходимые поля в структуру Training } -// Calories возввращает количество потраченных килокалория при беге. -// Формула расчета: -// ((18 * средняя_скорость_в_км/ч + 1.79) * вес_спортсмена_в_кг / м_в_км * время_тренировки_в_часах * мин_в_часе) -// Это переопределенный метод Calories() из Training. +// Calories возвращает количество потраченных килокалорий при беге. func (r Running) Calories() float64 { - // вставьте ваш код ниже + if r.Duration.Hours() == 0 { + return 0 + } return (CaloriesMeanSpeedMultiplier*r.meanSpeed() + CaloriesMeanSpeedShift) * r.Weight / MInKm * r.Duration.Hours() * MinInHours } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. -// Это переопределенный метод TrainingInfo() из Training. func (r Running) TrainingInfo() InfoMessage { - // вставьте ваш код ниже - return InfoMessage{ - TrainingType: r.TrainingType, - Duration: r.Duration, - Distance: r.distance(), - Speed: r.meanSpeed(), - Calories: r.Calories(), - } + return r.Training.TrainingInfo() } // Константы для расчета потраченных килокалорий при ходьбе. @@ -131,35 +115,24 @@ const ( KmHInMsec = 0.278 // коэффициент для перевода км/ч в м/с ) -// Walking структура описывающая тренировку Ходьба +// Walking структура, описывающая тренировку Ходьба type Walking struct { - // добавьте необходимые поля в структуру Training Height float64 // рост пользователя } // Calories возвращает количество потраченных килокалорий при ходьбе. -// Формула расчета: -// ((0.035 * вес_спортсмена_в_кг + (средняя_скорость_в_метрах_в_секунду**2 / рост_в_метрах) -// * 0.029 * вес_спортсмена_в_кг) * время_тренировки_в_часах * мин_в_ч) -// Это переопределенный метод Calories() из Training. func (w Walking) Calories() float64 { - // вставьте ваш код ниже - var meanSpeedInMInSec float64 = math.Pow(w.meanSpeed()*KmHInMsec, 2) - return (CaloriesWeightMultiplier*w.Weight + (meanSpeedInMInSec/(w.Height/CmInM))*CaloriesSpeedHeightMultiplier*w.Weight) * w.Duration.Hours() * MinInHours + if w.Duration.Hours() == 0 || w.Height == 0 { + return 0 + } + meanSpeedInMInSec := math.Pow(w.meanSpeed()*KmHInMsec, 2) + return (CaloriesWeightMultiplier*w.Weight + (meanSpeedInMInSec/(w.Height/CmInM))*CaloriesSpeedHeightMultiplier*w.Weight) } // TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. -// Это переопределенный метод TrainingInfo() из Training. func (w Walking) TrainingInfo() InfoMessage { - // вставьте ваш код ниже - return InfoMessage{ - TrainingType: w.TrainingType, - Duration: w.Duration, - Distance: w.distance(), - Speed: w.meanSpeed(), - Calories: w.Calories(), - } + return w.Training.TrainingInfo() } // Константы для расчета потраченных килокалорий при плавании. @@ -171,18 +144,13 @@ const ( // Swimming структура, описывающая тренировку Плавание type Swimming struct { - // добавьте необходимые поля в структуру Training LengthPool int // длина бассейна CountPool int // количество пересечений бассейна } // meanSpeed возвращает среднюю скорость при плавании. -// Формула расчета: -// длина_бассейна * количество_пересечений / м_в_км / продолжительность_тренировки -// Это переопределенный метод Calories() из Training. func (s Swimming) meanSpeed() float64 { - // вставьте ваш код ниже if s.Duration.Hours() == 0 { return 0 } @@ -190,40 +158,27 @@ func (s Swimming) meanSpeed() float64 { } // Calories возвращает количество калорий, потраченных при плавании. -// Формула расчета: -// (средняя_скорость_в_км/ч + SwimmingCaloriesMeanSpeedShift) * SwimmingCaloriesWeightMultiplier * вес_спортсмена_в_кг * время_тренировки_в_часах -// Это переопределенный метод Calories() из Training. func (s Swimming) Calories() float64 { - // вставьте ваш код ниже + if s.Duration.Hours() == 0 { + return 0 + } return (s.meanSpeed() + SwimmingCaloriesMeanSpeedShift) * SwimmingCaloriesWeightMultiplier * s.Weight * s.Duration.Hours() } -// TrainingInfo returns info about swimming training. -// Это переопределенный метод TrainingInfo() из Training. +// TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке. func (s Swimming) TrainingInfo() InfoMessage { - - return InfoMessage{ - TrainingType: s.TrainingType, - Duration: s.Duration, - Distance: s.distance(), - Speed: s.meanSpeed(), - Calories: s.Calories(), - } + return s.Training.TrainingInfo() } // ReadData возвращает информацию о проведенной тренировке. func ReadData(training CaloriesCalculator) string { - // получите количество затраченных калорий calories := training.Calories() - // получите информацию о тренировке info := training.TrainingInfo() - // добавьте полученные калории в структуру с информацией о тренировке info.Calories = calories return fmt.Sprint(info) } func main() { - swimming := Swimming{ Training: Training{ TrainingType: "Плавание",