Skip to content

Commit 98315a8

Browse files
committed
Задание про структуры и перечисления
1 parent 3fc8c32 commit 98315a8

File tree

1 file changed

+186
-0
lines changed

1 file changed

+186
-0
lines changed

lesson03/3L_RaskinSergey.swift

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
//
2+
// main.swift
3+
// 3L_RaskinSergey
4+
//
5+
// Created by raskin-sa on 19/11/2019.
6+
// Copyright © 2019 raskin-sa. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
//1. Описать несколько структур – любой легковой автомобиль и любой грузовик.
12+
struct automobile {
13+
//2. Структуры должны содержать марку авто, год выпуска, объем багажника/кузова, запущен ли двигатель, открыты ли окна, заполненный объем багажника.
14+
let v_type: String="Легковой"
15+
var v_mark:String
16+
var model: String
17+
var year: Int
18+
var trunc_v:Double
19+
var e_status:engine_status
20+
var w_status:window_status
21+
var trunc_filled:Double
22+
23+
enum engine_status{
24+
case on, off
25+
}
26+
27+
enum window_status{
28+
case opened, closed
29+
}
30+
31+
//3. Описать перечисление с возможными действиями с автомобилем: запустить/заглушить двигатель, открыть/закрыть окна, погрузить/выгрузить из кузова/багажника груз определенного объема.
32+
enum vehicle_todo{
33+
34+
enum engine{
35+
case off
36+
case on
37+
}
38+
39+
enum window{
40+
case closed
41+
case opened
42+
}
43+
enum load{
44+
case put(weight:Double)
45+
case take(weight:Double)
46+
}
47+
}
48+
49+
//4. Добавить в структуры метод с одним аргументом типа перечисления, который будет менять свойства структуры в зависимости от действия.
50+
mutating func switch_engine(iEngine_status:engine_status){
51+
self.e_status = iEngine_status
52+
}
53+
54+
//функция добавляет объем заполненного багажника на величину add_volume
55+
mutating func put_to_trunc(add_volume:Double){
56+
self.trunc_filled += add_volume
57+
}
58+
//функция уменьшает объем заполненного багажника на величину get_volume
59+
mutating func get_from_trunc(get_volume:Double){
60+
self.trunc_filled -= get_volume
61+
}
62+
63+
64+
func description()
65+
{
66+
var str_back:String
67+
if ((trunc_filled/trunc_v) <= 0.5) //хулиганство в зав. от объема загрузки двигателя
68+
{
69+
if trunc_filled == 0{
70+
str_back = "багажник - пустой"
71+
}
72+
else{
73+
str_back = "багажник почти пустой - в багажник загружено всего : \(trunc_filled) литров"
74+
}
75+
76+
}
77+
else{
78+
str_back = "багажник заполнен - загружено: \(trunc_filled) литров"
79+
}
80+
print("Вид транспортного средства: \(v_type), Марка: \(v_mark), Модель: \(model), год: \(year), объем багажника: \(trunc_v) литров, статус двигателя: \(self.e_status), окна: \(self.w_status), \(str_back)")
81+
}
82+
83+
} //конец описания структуры automobile
84+
85+
struct truck {
86+
//2. Структуры должны содержать марку авто, год выпуска, объем багажника/кузова, запущен ли двигатель, открыты ли окна, заполненный объем багажника.
87+
let v_type: String="Грузовик"
88+
var v_mark:String
89+
var model: String
90+
var year: Int
91+
var trunc_v:Double
92+
var e_status:engine_status
93+
var w_status:window_status
94+
var trunc_filled:Double
95+
96+
enum engine_status{
97+
case on, off
98+
}
99+
100+
enum window_status{
101+
case opened, closed
102+
}
103+
104+
//Для грузовика не будем создавать структуру с действиями, но добавим два конструктора:
105+
//для обобщенного грузовика, по дефолту, чтобы не вводить параметры
106+
init(){
107+
v_mark = "обобщенный"
108+
model = "-"
109+
year = 2000
110+
trunc_v = 10000
111+
e_status = engine_status.off
112+
w_status = window_status.closed
113+
trunc_filled = 0
114+
}
115+
//для грузовика с параметрами
116+
init(iv_mark:String, imodel: String, iyear: Int, itrunc_v:Double, ie_status:engine_status, iw_status:window_status, itrunc_filled:Double){
117+
self.v_mark = iv_mark
118+
self.model = imodel
119+
self.year = iyear
120+
self.trunc_v = itrunc_v
121+
self.e_status = ie_status
122+
self.w_status = iw_status
123+
trunc_filled = itrunc_filled
124+
}
125+
126+
127+
//4. Добавить в структуры метод с одним аргументом типа перечисления, который будет менять свойства структуры в зависимости от действия.
128+
mutating func switch_engine(iEngine_status:engine_status){
129+
self.e_status = iEngine_status
130+
}
131+
132+
//функция добавляет объем заполненного багажника на величину add_volume
133+
mutating func put_to_trunc(add_volume:Double){
134+
self.trunc_filled += add_volume
135+
}
136+
//функция уменьшает объем заполненного багажника на величину get_volume
137+
mutating func get_from_trunc(get_volume:Double){
138+
self.trunc_filled -= get_volume
139+
}
140+
141+
//функция красиво печатает свойства машины
142+
func description()
143+
{
144+
var str_back:String
145+
if ((trunc_filled/trunc_v) <= 0.5) //хулиганство в зав. от объема загрузки двигателя
146+
{
147+
if trunc_filled == 0{
148+
str_back = "багажник - пустой"
149+
}
150+
else{
151+
str_back = "багажник почти пустой - в багажник загружено всего : \(trunc_filled) литров"
152+
}
153+
154+
}
155+
else{
156+
str_back = "багажник заполнен - загружено: \(trunc_filled) литров"
157+
}
158+
print("Вид транспортного средства: \(v_type), Марка: \(v_mark), Модель: \(model), год: \(year), объем багажника: \(trunc_v) литров, статус двигателя: \(self.e_status), окна: \(self.w_status), \(str_back)")
159+
}
160+
} //конец описания структуры truck
161+
162+
//***************
163+
//ТЕЛО ПРОГРАММЫ
164+
//***************
165+
166+
var honda = automobile (v_mark: "Honda", model: "Civic", year:2018, trunc_v:1500, e_status: .off, w_status: .closed, trunc_filled: 0)
167+
var man = truck (iv_mark: "Man", imodel: "TGA", iyear:2015, itrunc_v:15000, ie_status: .off, iw_status: .closed, itrunc_filled: 12000)
168+
var default_truck = truck()
169+
170+
//5. Инициализировать несколько экземпляров структур. Применить к ним различные действия
171+
//6. Вывести значения свойств экземпляров в консоль.
172+
173+
print("Печатаем свойства машин AS IS")
174+
honda.description()
175+
default_truck.description()
176+
man.description()
177+
print("\nВключаем двигатель хонды")
178+
honda.switch_engine(iEngine_status: automobile.engine_status.on)
179+
print("уменьшаем загрузку MAN")
180+
man.get_from_trunc(get_volume: 500)
181+
print("увеличиваем загрузку обобщенного грузовика")
182+
default_truck.put_to_trunc(add_volume: 3000)
183+
print("\nПечатаем свойства машин по итогам изменений")
184+
honda.description()
185+
man.description()
186+
default_truck.description()

0 commit comments

Comments
 (0)