From 3fc8c32d13f866b2044c06875019bd3a70b26368 Mon Sep 17 00:00:00 2001 From: Sergei Raskin Date: Mon, 18 Nov 2019 15:07:12 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson02/2L_RaskinSergey_.swift | 145 +++++++++++++++++++++ lesson02/lesson02.1/2L_Raskin_Sergey.swift | 145 +++++++++++++++++++++ 2 files changed, 290 insertions(+) create mode 100644 lesson02/2L_RaskinSergey_.swift create mode 100644 lesson02/lesson02.1/2L_Raskin_Sergey.swift diff --git a/lesson02/2L_RaskinSergey_.swift b/lesson02/2L_RaskinSergey_.swift new file mode 100644 index 0000000..5d9822f --- /dev/null +++ b/lesson02/2L_RaskinSergey_.swift @@ -0,0 +1,145 @@ +// +// main.swift +// 2l_RaskinSergey +// +// Created by raskin-sa on 17/11/2019. +// Copyright © 2019 raskin-sa. All rights reserved. +// + +import Foundation +//функция определяет число четное или нет +func IsEven(in_digit:Int)->Bool +{ + if in_digit%2 == 0{ + return true + } + else{ + return false + } +} + +//функция определяет число делится на три или нет +func IsDividedByThree (in_digit:Int)->Bool{ + if in_digit%3 == 0{ + return true + } + else{ + return false + } +} + +//функция добавляет число Фибоначчи в массив на входе +func add_fib(input_array:[Double])->[Double] +{ +var fib_1: Double +var fib_2: Double +var fib_sum: Double +let fib_max_index:Int = input_array.count +var new_array : [Double] = input_array + +fib_1 = input_array[fib_max_index-1] +fib_2 = input_array[fib_max_index-2] +//print("fib_1= " + String(fib_1)+" fib_2= " + String(fib_2)) +fib_sum = fib_1 + fib_2 +new_array.append(fib_sum) + +return new_array +} + +/// +///ТЕЛО ПРОГРАММЫ +/// +//// + +print("Создаем массив от 1 до 100 с удаленными четными числами и числами, не делящимися на 3") +//создаем массив из 100 чисел +var workarray = [Int]() +var i:Int +var maxIndex:Int = 99 +var initial_set100:Set=[0] //для будущего массива простых чисел + +for i in (1...100){ + workarray.append(i) + initial_set100.insert(i)//пригодится в задаче для массива простых чисел +} + +//удаляем четные числа +for i in (0...99){ + if i>maxIndex { + break + } + if IsEven(in_digit: workarray[i]) { + workarray.remove(at:i) + maxIndex -= 1 + } + } + +//удаляем числа, не делящиеся на 3 +i = 0 +maxIndex = workarray.count - 1 + +while i < maxIndex + { + if !(IsDividedByThree(in_digit: workarray[i])){ + // print("Удаляем элемент с №: " + String(i) + " его значение = " + String(workarray[i])) + workarray.remove(at:i) + maxIndex -= 1 + }else{ + i += 1 + } +} + +print(workarray)// это массив от 1 до 100 с удаленными четными числами и числами, не делящимися на 3 + + +//создаем новый пустой массив Double для 100 чисел Фибоначчи +//в Int - не помещается +var curr_array = [Double]() +var prev_array :[Double] = [1,2] + +print("добавляем 100 чисел Фибоначчи") + +for _ in (1...100){ + curr_array = add_fib(input_array:prev_array) + prev_array = curr_array +} +print(curr_array) + +//Задача сформировать массив простых чисел +print("Создаем массив простых чисел") + +//print(initial_set100.count)//в это множество ранее закачали числа от 1 до 100 +var set_to_remove:Set=[0] //в это множество закачиваем "не простые" числа, которые потом вычеркнем +var i_step:Int=2 + +i = 0 + +for i in (2...100){ + if initial_set100.contains(i)// в это множество ранее мы закачали числа от 1 до 100 + { + for i_step in stride(from: i, to: 101, by: i)//удаляем цифры последовательно с шагом 2,3,4... после вычитания множеста set_to_remove в исхоном множестве останутся только простые числа + { + if i_step != i { //что-бы само простое число не удалить + set_to_remove.insert(i_step) + } + }//for + initial_set100 = initial_set100.subtracting(set_to_remove) + }//if initial_set100.contains(i) + + // print("i= " + String(i)) + // print(initial_set100) +} +//print("Результирующее множество простых чисел от 1 до 100") +//print(initial_set100) + +//копируем в массив +curr_array.removeAll() //обнуляем то, что раньше в нем было +for i in (0...100) +{ + if initial_set100.contains(i) + { + curr_array.append(Double(i)) + } +} +print("Результирующий массив простых чисел от 1 до 100") +print(curr_array) diff --git a/lesson02/lesson02.1/2L_Raskin_Sergey.swift b/lesson02/lesson02.1/2L_Raskin_Sergey.swift new file mode 100644 index 0000000..5d9822f --- /dev/null +++ b/lesson02/lesson02.1/2L_Raskin_Sergey.swift @@ -0,0 +1,145 @@ +// +// main.swift +// 2l_RaskinSergey +// +// Created by raskin-sa on 17/11/2019. +// Copyright © 2019 raskin-sa. All rights reserved. +// + +import Foundation +//функция определяет число четное или нет +func IsEven(in_digit:Int)->Bool +{ + if in_digit%2 == 0{ + return true + } + else{ + return false + } +} + +//функция определяет число делится на три или нет +func IsDividedByThree (in_digit:Int)->Bool{ + if in_digit%3 == 0{ + return true + } + else{ + return false + } +} + +//функция добавляет число Фибоначчи в массив на входе +func add_fib(input_array:[Double])->[Double] +{ +var fib_1: Double +var fib_2: Double +var fib_sum: Double +let fib_max_index:Int = input_array.count +var new_array : [Double] = input_array + +fib_1 = input_array[fib_max_index-1] +fib_2 = input_array[fib_max_index-2] +//print("fib_1= " + String(fib_1)+" fib_2= " + String(fib_2)) +fib_sum = fib_1 + fib_2 +new_array.append(fib_sum) + +return new_array +} + +/// +///ТЕЛО ПРОГРАММЫ +/// +//// + +print("Создаем массив от 1 до 100 с удаленными четными числами и числами, не делящимися на 3") +//создаем массив из 100 чисел +var workarray = [Int]() +var i:Int +var maxIndex:Int = 99 +var initial_set100:Set=[0] //для будущего массива простых чисел + +for i in (1...100){ + workarray.append(i) + initial_set100.insert(i)//пригодится в задаче для массива простых чисел +} + +//удаляем четные числа +for i in (0...99){ + if i>maxIndex { + break + } + if IsEven(in_digit: workarray[i]) { + workarray.remove(at:i) + maxIndex -= 1 + } + } + +//удаляем числа, не делящиеся на 3 +i = 0 +maxIndex = workarray.count - 1 + +while i < maxIndex + { + if !(IsDividedByThree(in_digit: workarray[i])){ + // print("Удаляем элемент с №: " + String(i) + " его значение = " + String(workarray[i])) + workarray.remove(at:i) + maxIndex -= 1 + }else{ + i += 1 + } +} + +print(workarray)// это массив от 1 до 100 с удаленными четными числами и числами, не делящимися на 3 + + +//создаем новый пустой массив Double для 100 чисел Фибоначчи +//в Int - не помещается +var curr_array = [Double]() +var prev_array :[Double] = [1,2] + +print("добавляем 100 чисел Фибоначчи") + +for _ in (1...100){ + curr_array = add_fib(input_array:prev_array) + prev_array = curr_array +} +print(curr_array) + +//Задача сформировать массив простых чисел +print("Создаем массив простых чисел") + +//print(initial_set100.count)//в это множество ранее закачали числа от 1 до 100 +var set_to_remove:Set=[0] //в это множество закачиваем "не простые" числа, которые потом вычеркнем +var i_step:Int=2 + +i = 0 + +for i in (2...100){ + if initial_set100.contains(i)// в это множество ранее мы закачали числа от 1 до 100 + { + for i_step in stride(from: i, to: 101, by: i)//удаляем цифры последовательно с шагом 2,3,4... после вычитания множеста set_to_remove в исхоном множестве останутся только простые числа + { + if i_step != i { //что-бы само простое число не удалить + set_to_remove.insert(i_step) + } + }//for + initial_set100 = initial_set100.subtracting(set_to_remove) + }//if initial_set100.contains(i) + + // print("i= " + String(i)) + // print(initial_set100) +} +//print("Результирующее множество простых чисел от 1 до 100") +//print(initial_set100) + +//копируем в массив +curr_array.removeAll() //обнуляем то, что раньше в нем было +for i in (0...100) +{ + if initial_set100.contains(i) + { + curr_array.append(Double(i)) + } +} +print("Результирующий массив простых чисел от 1 до 100") +print(curr_array) From 98315a8b630e59e1e55c943cfb7968d5b7e0a6b1 Mon Sep 17 00:00:00 2001 From: Sergei Raskin Date: Wed, 20 Nov 2019 09:31:35 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D1=8B=20=D0=B8=20=D0=BF=D0=B5=D1=80=D0=B5=D1=87?= =?UTF-8?q?=D0=B8=D1=81=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson03/3L_RaskinSergey.swift | 186 +++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 lesson03/3L_RaskinSergey.swift diff --git a/lesson03/3L_RaskinSergey.swift b/lesson03/3L_RaskinSergey.swift new file mode 100644 index 0000000..9b2bc10 --- /dev/null +++ b/lesson03/3L_RaskinSergey.swift @@ -0,0 +1,186 @@ +// +// main.swift +// 3L_RaskinSergey +// +// Created by raskin-sa on 19/11/2019. +// Copyright © 2019 raskin-sa. All rights reserved. +// + +import Foundation + +//1. Описать несколько структур – любой легковой автомобиль и любой грузовик. +struct automobile { + //2. Структуры должны содержать марку авто, год выпуска, объем багажника/кузова, запущен ли двигатель, открыты ли окна, заполненный объем багажника. + let v_type: String="Легковой" + var v_mark:String + var model: String + var year: Int + var trunc_v:Double + var e_status:engine_status + var w_status:window_status + var trunc_filled:Double + + enum engine_status{ + case on, off + } + + enum window_status{ + case opened, closed + } + + //3. Описать перечисление с возможными действиями с автомобилем: запустить/заглушить двигатель, открыть/закрыть окна, погрузить/выгрузить из кузова/багажника груз определенного объема. + enum vehicle_todo{ + + enum engine{ + case off + case on + } + + enum window{ + case closed + case opened + } + enum load{ + case put(weight:Double) + case take(weight:Double) + } + } + + //4. Добавить в структуры метод с одним аргументом типа перечисления, который будет менять свойства структуры в зависимости от действия. + mutating func switch_engine(iEngine_status:engine_status){ + self.e_status = iEngine_status + } + + //функция добавляет объем заполненного багажника на величину add_volume + mutating func put_to_trunc(add_volume:Double){ + self.trunc_filled += add_volume + } + //функция уменьшает объем заполненного багажника на величину get_volume + mutating func get_from_trunc(get_volume:Double){ + self.trunc_filled -= get_volume + } + + + func description() + { + var str_back:String + if ((trunc_filled/trunc_v) <= 0.5) //хулиганство в зав. от объема загрузки двигателя + { + if trunc_filled == 0{ + str_back = "багажник - пустой" + } + else{ + str_back = "багажник почти пустой - в багажник загружено всего : \(trunc_filled) литров" + } + + } + else{ + str_back = "багажник заполнен - загружено: \(trunc_filled) литров" + } + print("Вид транспортного средства: \(v_type), Марка: \(v_mark), Модель: \(model), год: \(year), объем багажника: \(trunc_v) литров, статус двигателя: \(self.e_status), окна: \(self.w_status), \(str_back)") + } + +} //конец описания структуры automobile + +struct truck { + //2. Структуры должны содержать марку авто, год выпуска, объем багажника/кузова, запущен ли двигатель, открыты ли окна, заполненный объем багажника. + let v_type: String="Грузовик" + var v_mark:String + var model: String + var year: Int + var trunc_v:Double + var e_status:engine_status + var w_status:window_status + var trunc_filled:Double + + enum engine_status{ + case on, off + } + + enum window_status{ + case opened, closed + } + + //Для грузовика не будем создавать структуру с действиями, но добавим два конструктора: + //для обобщенного грузовика, по дефолту, чтобы не вводить параметры + init(){ + v_mark = "обобщенный" + model = "-" + year = 2000 + trunc_v = 10000 + e_status = engine_status.off + w_status = window_status.closed + trunc_filled = 0 + } + //для грузовика с параметрами + init(iv_mark:String, imodel: String, iyear: Int, itrunc_v:Double, ie_status:engine_status, iw_status:window_status, itrunc_filled:Double){ + self.v_mark = iv_mark + self.model = imodel + self.year = iyear + self.trunc_v = itrunc_v + self.e_status = ie_status + self.w_status = iw_status + trunc_filled = itrunc_filled + } + + + //4. Добавить в структуры метод с одним аргументом типа перечисления, который будет менять свойства структуры в зависимости от действия. + mutating func switch_engine(iEngine_status:engine_status){ + self.e_status = iEngine_status + } + + //функция добавляет объем заполненного багажника на величину add_volume + mutating func put_to_trunc(add_volume:Double){ + self.trunc_filled += add_volume + } + //функция уменьшает объем заполненного багажника на величину get_volume + mutating func get_from_trunc(get_volume:Double){ + self.trunc_filled -= get_volume + } + + //функция красиво печатает свойства машины + func description() + { + var str_back:String + if ((trunc_filled/trunc_v) <= 0.5) //хулиганство в зав. от объема загрузки двигателя + { + if trunc_filled == 0{ + str_back = "багажник - пустой" + } + else{ + str_back = "багажник почти пустой - в багажник загружено всего : \(trunc_filled) литров" + } + + } + else{ + str_back = "багажник заполнен - загружено: \(trunc_filled) литров" + } + print("Вид транспортного средства: \(v_type), Марка: \(v_mark), Модель: \(model), год: \(year), объем багажника: \(trunc_v) литров, статус двигателя: \(self.e_status), окна: \(self.w_status), \(str_back)") + } +} //конец описания структуры truck + +//*************** +//ТЕЛО ПРОГРАММЫ +//*************** + +var honda = automobile (v_mark: "Honda", model: "Civic", year:2018, trunc_v:1500, e_status: .off, w_status: .closed, trunc_filled: 0) +var man = truck (iv_mark: "Man", imodel: "TGA", iyear:2015, itrunc_v:15000, ie_status: .off, iw_status: .closed, itrunc_filled: 12000) +var default_truck = truck() + +//5. Инициализировать несколько экземпляров структур. Применить к ним различные действия +//6. Вывести значения свойств экземпляров в консоль. + +print("Печатаем свойства машин AS IS") +honda.description() +default_truck.description() +man.description() +print("\nВключаем двигатель хонды") +honda.switch_engine(iEngine_status: automobile.engine_status.on) +print("уменьшаем загрузку MAN") +man.get_from_trunc(get_volume: 500) +print("увеличиваем загрузку обобщенного грузовика") +default_truck.put_to_trunc(add_volume: 3000) +print("\nПечатаем свойства машин по итогам изменений") +honda.description() +man.description() +default_truck.description()