Skip to content

Commit

Permalink
Вторая домашка
Browse files Browse the repository at this point in the history
  • Loading branch information
Игорь Драгун committed Dec 8, 2023
1 parent 2a99cf5 commit 68e2c89
Showing 1 changed file with 38 additions and 47 deletions.
85 changes: 38 additions & 47 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,48 +16,49 @@ 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()
}

// 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 возвращает строку с информацией о проведенной тренировке.
Expand All @@ -73,8 +74,8 @@ func (i InfoMessage) String() string {

// CaloriesCalculator интерфейс для структур: Running, Walking и Swimming.
type CaloriesCalculator interface {
// добавьте необходимые методы в интерфейс
...
Calories() float64
TrainingInfo() InfoMessage
}

// Константы для расчета потраченных килокалорий при беге.
Expand All @@ -85,24 +86,21 @@ const (

// Running структура, описывающая тренировку Бег.
type Running struct {
// добавьте необходимые поля в структуру
...
Training
}

// Calories возввращает количество потраченных килокалория при беге.
// Формула расчета:
// ((18 * средняя_скорость_в_км/ч + 1.79) * вес_спортсмена_в_кг / м_в_км * время_тренировки_в_часах * мин_в_часе)
// Это переопределенный метод 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 r.Training.TrainingInfo()
}

// Константы для расчета потраченных килокалорий при ходьбе.
Expand All @@ -114,9 +112,8 @@ const (

// Walking структура описывающая тренировку Ходьба
type Walking struct {
// добавьте необходимые поля в структуру
...
... // рост пользователя
Training
Height float64
}

// Calories возвращает количество потраченных килокалорий при ходьбе.
Expand All @@ -125,15 +122,13 @@ type Walking struct {
// * 0.029 * вес_спортсмена_в_кг) * время_тренировки_в_часах * мин_в_ч)
// Это переопределенный метод Calories() из Training.
func (w Walking) Calories() float64 {
// вставьте ваш код ниже
...
return (0.035*w.Weight + (math.Pow(w.meanSpeed()*KmHInMsec, 2)/(w.Height/CmInM))*CaloriesSpeedHeightMultiplier*w.Weight) * w.Duration.Hours() * MinInHours
}

// TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке.
// Это переопределенный метод TrainingInfo() из Training.
func (w Walking) TrainingInfo() InfoMessage {
// вставьте ваш код ниже
...
return w.Training.TrainingInfo()
}

// Константы для расчета потраченных килокалорий при плавании.
Expand All @@ -145,46 +140,42 @@ const (

// Swimming структура, описывающая тренировку Плавание
type Swimming struct {
// добавьте необходимые поля в структуру
...
... // длина бассейна
... // количество пересечений бассейна
Training
LengthPool int
CountPool int
}

// meanSpeed возвращает среднюю скорость при плавании.
// Формула расчета:
// длина_бассейна * количество_пересечений / м_в_км / продолжительность_тренировки
// Это переопределенный метод Calories() из Training.
func (s Swimming) meanSpeed() float64 {
// вставьте ваш код ниже
...
return float64(s.LengthPool*s.CountPool) / MInKm / s.Duration.Hours()
}

// Calories возвращает количество калорий, потраченных при плавании.
// Формула расчета:
// длина_бассейна_в_метрах * количество_пересечений / м_в_км / время_тренеровки_в_часах
// Это переопределенный метод 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 s.Training.TrainingInfo()
}

// ReadData возвращает информацию о проведенной тренировке.
func ReadData(training CaloriesCalculator) string {
// получите количество затраченных калорий
calories := ...
calories := training.Calories()

// получите информацию о тренировке
info := ...
info := training.TrainingInfo()
// добавьте полученные калории в структуру с информацией о тренировке
...
info.Calories = calories

return fmt.Sprint(info)
}
Expand Down

0 comments on commit 68e2c89

Please sign in to comment.