-
Notifications
You must be signed in to change notification settings - Fork 216
/
main.go
233 lines (199 loc) · 9.16 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
package main
import (
"fmt"
"math"
"time"
)
// Общие константы для вычислений.
const (
MInKm = 1000 // количество метров в одном километре
MinInHours = 60 // количество минут в одном часе
LenStep = 0.65 // длина одного шага
CmInM = 100 // количество сантиметров в одном метре
)
// Training общая структура для всех тренировок
type Training struct {
... // тип тренировки
... // количество повторов(шаги, гребки при плавании)
... // длина одного шага или гребка в м
... // продолжительность тренировки
... // вес пользователя в кг
}
// distance возвращает дистанцию, которую преодолел пользователь.
// Формула расчета:
// количество_повторов * длина_шага / м_в_км
func (t Training) distance() float64 {
// вставьте ваш код ниже
...
}
// meanSpeed возвращает среднюю скорость бега или ходьбы.
func (t Training) meanSpeed() float64 {
// вставьте ваш код ниже
...
}
// Calories возвращает количество потраченных килокалорий на тренировке.
// Пока возвращаем 0, так как этот метод будет переопределяться для каждого типа тренировки.
func (t Training) Calories() float64 {
// вставьте ваш код ниже
...
}
// InfoMessage содержит информацию о проведенной тренировке.
type InfoMessage struct {
// добавьте необходимые поля в структуру
... // тип тренировки
... // длительность тренировки
... // расстояние, которое преодолел пользователь
... // средняя скорость, с которой двигался пользователь
... // количество потраченных килокалорий на тренировке
}
// TrainingInfo возвращает труктуру InfoMessage, в которой хранится вся информация о проведенной тренировке.
func (t Training) TrainingInfo() InfoMessage {
// вставьте ваш код ниже
...
}
// String возвращает строку с информацией о проведенной тренировке.
func (i InfoMessage) String() string {
return fmt.Sprintf("Тип тренировки: %s\nДлительность: %v мин\nДистанция: %.2f км.\nСр. скорость: %.2f км/ч\nПотрачено ккал: %.2f\n",
i.TrainingType,
i.Duration.Minutes(),
i.Distance,
i.Speed,
i.Calories,
)
}
// CaloriesCalculator интерфейс для структур: Running, Walking и Swimming.
type CaloriesCalculator interface {
// добавьте необходимые методы в интерфейс
...
}
// Константы для расчета потраченных килокалорий при беге.
const (
CaloriesMeanSpeedMultiplier = 18 // множитель средней скорости бега
CaloriesMeanSpeedShift = 1.79 // коэффициент изменения средней скорости
)
// Running структура, описывающая тренировку Бег.
type Running struct {
// добавьте необходимые поля в структуру
...
}
// Calories возввращает количество потраченных килокалория при беге.
// Формула расчета:
// ((18 * средняя_скорость_в_км/ч + 1.79) * вес_спортсмена_в_кг / м_в_км * время_тренировки_в_часах * мин_в_часе)
// Это переопределенный метод Calories() из Training.
func (r Running) Calories() float64 {
// вставьте ваш код ниже
...
}
// TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке.
// Это переопределенный метод TrainingInfo() из Training.
func (r Running) TrainingInfo() InfoMessage {
// вставьте ваш код ниже
...
}
// Константы для расчета потраченных килокалорий при ходьбе.
const (
CaloriesWeightMultiplier = 0.035 // коэффициент для веса
CaloriesSpeedHeightMultiplier = 0.029 // коэффициент для роста
KmHInMsec = 0.278 // коэффициент для перевода км/ч в м/с
)
// Walking структура описывающая тренировку Ходьба
type Walking struct {
// добавьте необходимые поля в структуру
...
... // рост пользователя
}
// Calories возвращает количество потраченных килокалорий при ходьбе.
// Формула расчета:
// ((0.035 * вес_спортсмена_в_кг + (средняя_скорость_в_метрах_в_секунду**2 / рост_в_метрах)
// * 0.029 * вес_спортсмена_в_кг) * время_тренировки_в_часах * мин_в_ч)
// Это переопределенный метод Calories() из Training.
func (w Walking) Calories() float64 {
// вставьте ваш код ниже
...
}
// TrainingInfo возвращает структуру InfoMessage с информацией о проведенной тренировке.
// Это переопределенный метод TrainingInfo() из Training.
func (w Walking) TrainingInfo() InfoMessage {
// вставьте ваш код ниже
...
}
// Константы для расчета потраченных килокалорий при плавании.
const (
SwimmingLenStep = 1.38 // длина одного гребка
SwimmingCaloriesMeanSpeedShift = 1.1 // коэффициент изменения средней скорости
SwimmingCaloriesWeightMultiplier = 2 // множитель веса пользователя
)
// Swimming структура, описывающая тренировку Плавание
type Swimming struct {
// добавьте необходимые поля в структуру
...
... // длина бассейна
... // количество пересечений бассейна
}
// meanSpeed возвращает среднюю скорость при плавании.
// Формула расчета:
// длина_бассейна * количество_пересечений / м_в_км / продолжительность_тренировки
// Это переопределенный метод Calories() из Training.
func (s Swimming) meanSpeed() float64 {
// вставьте ваш код ниже
...
}
// Calories возвращает количество калорий, потраченных при плавании.
// Формула расчета:
// (средняя_скорость_в_км/ч + SwimmingCaloriesMeanSpeedShift) * SwimmingCaloriesWeightMultiplier * вес_спортсмена_в_кг * время_тренировки_в_часах
// Это переопределенный метод Calories() из Training.
func (s Swimming) Calories() float64 {
// вставьте ваш код ниже
...
}
// TrainingInfo returns info about swimming training.
// Это переопределенный метод TrainingInfo() из Training.
func (s Swimming) TrainingInfo() InfoMessage {
// вставьте ваш код ниже
...
}
// ReadData возвращает информацию о проведенной тренировке.
func ReadData(training CaloriesCalculator) string {
// получите количество затраченных калорий
calories := ...
// получите информацию о тренировке
info := ...
// добавьте полученные калории в структуру с информацией о тренировке
...
return fmt.Sprint(info)
}
func main() {
swimming := Swimming{
Training: Training{
TrainingType: "Плавание",
Action: 2000,
LenStep: SwimmingLenStep,
Duration: 90 * time.Minute,
Weight: 85,
},
LengthPool: 50,
CountPool: 5,
}
fmt.Println(ReadData(swimming))
walking := Walking{
Training: Training{
TrainingType: "Ходьба",
Action: 20000,
LenStep: LenStep,
Duration: 3*time.Hour + 45*time.Minute,
Weight: 85,
},
Height: 185,
}
fmt.Println(ReadData(walking))
running := Running{
Training: Training{
TrainingType: "Бег",
Action: 5000,
LenStep: LenStep,
Duration: 30 * time.Minute,
Weight: 85,
},
}
fmt.Println(ReadData(running))
}