Будет ли корректно выполняться данный код? Если нет, то укажите почему и по-возможности исправьте ошибки
func mult(_ a: Double, _ b: Double) -> Double { a * b }
Функция написана корректно. Оператор return
не обязательно должен быть в коде, когда тело функции состоит из одного выражения.
Разработайте функцию, которая принимает на вход значение типа Bool
, преобразует его в строку и возвращает. То есть передав true
типа Bool
должно вернуться "true"
типа String
, то же самое и для false
.
func booleanToString(_ b: Bool) -> String { return String(b) }
Возможно вы решили данную задачу с помощью оператора ветвления. Ваш вариант так же будет верным.
Напишите функцию, которая принимает на вход массив с элементами типа Int
, а возвращает целое число — сумму всех положительных элементов переданного массива.
К примеру для массива [1,-2,3,4,-5]
должно быть возвращено 1+3+4 = 8
func sumOfPositives(_ a: [Int] ) -> Int{ var result = 0 for i in a { // тернарная форма оператора ветвления позволяет сократить код // вы оожете использовать сокращенный или стандартный синтаксис result += i>0 ? i : 0 } return result } //внутри цикла for применяется терная sumOfPositives([1,-2,3,4,-5]) //8
Напишите функцию, которая принимает на вход массив типа [Int]
и, в случае, если количество элементов > 0, то возвращает целое число — произведение всех элементов переданной коллекции. Если количество элементов = 0, то возвращается 0.
Пример:
[1,2,3,4] -> 1 * 2 * 3 * 4 = 24
func grow(_ a: [Int]) -> Int { var result = 0 if a.count > 0 { result = 1 for i in a { result *= i } } return result } grow([1,2,3,4]) //24 grow([]) //0
Используя перегрузку (overloading) создайте две одноименные функции, которые могут принимать два однотипных параметра (Int
или Double
) и возвращают их произведение
Пример:
(4, 5) -> 4 * 5 = 20
(4.1, 5.2) -> 4.1 * 5.2 = 21.32
func multi(_ a: Int, _ b: Int) -> Int { return a*b } func multi(_ a: Double, _ b: Double) -> Double { return a*b } multi(4.1, 5.2) //21.32 multi(4, 5) //20
17 Comments
Реализация 7 задания через Guard смотрится приятнее.
func rentCost (days: Int) -> Int {
let totalRentCost = 850*days
guard days >= 3 else {return totalRentCost}
guard days >= 7 else {return totalRentCost-550}
return totalRentCost — 1620
}
В 8 задании реализацию через цикл, можно сделать с where, вместо if.
func testEight8 (_ array: [Int], _ b: Int) -> Bool {
for num in array where num == b {
return true
}
return false
}
задание 12 самый короткий вариант.Если количество общих элементов будет первого со вторым равно количеству элементов второго значит они одинаковые
func fun12 (a : String, b : String) -> Bool {
if Set(a).intersection(b).count == b.count {
return true
}
return false
}
fun12(a: «qwe», b: «qwe»)
return s1.sorted() == s2.sorted()
9 задание, допускается выполнение через if ?
func repeatFunc(repeatString: String, repeatCount: Int) -> String {
return String(repeating: repeatString, count: repeatCount)
}
repeatFunc(repeatString: «Swift», repeatCount: 2) // SwiftSwift
//(«Xcode», 0) -> «»
func repeatFunc2(repeatString: String, repeatCount: Int) -> String {
let repStr = «»
if repeatCount == 0 {
return repStr
} else {
return String(repeating: repeatString, count: repeatCount)
}
}
repeatFunc(repeatString: «Xcode», repeatCount: 0) // «»
Текущее решение в задании 4 не подойдет, если в массиве внутри будет 0. Предлагаю такой вариант
func runTask4(_ array: [Int]) -> Int {
var result = array.count == 0 ? 0 : 1
for num in array where num != 0 {
result *= num
}
return result
}
Задание 12
func checkSameSymbols(in1: String, and: String) -> Bool {
return Array(in1).sorted() == Array(and).sorted()
}
Хотел бы дополнить ответ 10 заданияfunc ballMy (height h: Float, boyFloor N: Int, motherFloor M: Int, ratio L: Float) -> Int { var count = 0 //Проверка на то, что сын находится выше чем мама count = N > M ? 1 : 0 if h > 0 && N >= 2 && L < 1 && M >= 1 { var currentFloor = Float(N) * L while Float(M) < currentFloor{ currentFloor *= L count += 2 } }else{ print(«Переданны неверные данные») } return count}ballMy(height: 10, boyFloor: 2, motherFloor: 1, ratio: 0.75)
задание 13
по заданию допускается на вход диапазон целых чисел (а значит и отрицательных)
решение по учебнику не учитывает введение отрицательных чисел, если требуется вернуть все простые числа (а значит не только кроме 0, 1, но и только положительных)
поправьте, если я не прав
нужно указать, что number > 1
_________________________________
func getSimpleNumbers(from range: ClosedRange<Int>) -> [Int] {
var simpleNumbers = [Int]()
for number in range {
for delimeter in range {
if [0, 1].contains(delimeter) {
continue
}
if number % delimeter == 0 && number == delimeter && number > 1 {
simpleNumbers.append(number)
} else if number % delimeter == 0 && number != delimeter {
break
}
else if number < 0 {
print («Введен диапазон с отрицательными числами»)
break
}
}
}
return simpleNumbers
}
Задание 12
func checkSameSymbols( in: String, and: String) -> Bool {
return `in` == and
}
checkSameSymbols(in: «str», and: «str») // true
checkSameSymbols(in: «str», and: «sot») // false
Вы неправильно поняли задание)
Прошу добавить более интересный вариант решения 10 задания:
func MyFunc (floorWeight:Float, boyFloor:Float, momFloor:Float, coefficient:Float) {
// проверка на условие задачи
var errorCounter = 0
if coefficient >= 1 {print(«Коэффициент должен быть в диапозоне от 0 до 1»); errorCounter += 1}
if momFloor < 1 {print("Минимальный этаж мамы — 1"); errorCounter += 1}
if boyFloor < 2 {print("Минимальный этаж мальчика — 2"); errorCounter += 1}
if boyFloor <= 0 {print("Высота этажа не может быть отрицательной"); errorCounter += 1}
if errorCounter != 0 {exit(0)}
//
var countOfBallViews = 0 // задаем начальное количество взглядов на мячик
var currentBallFloor = boyFloor
while momFloor<(currentBallFloor*coefficient) {
if countOfBallViews == 0 {countOfBallViews += 1} // считает первое падение
currentBallFloor *= coefficient
if momFloor+1<currentBallFloor { // учитывает что мячик скрылся выше этажом, и второй раз показался когда летел вниз
countOfBallViews += 2;
print("Прыгнул выше на этаж")
} else {
countOfBallViews += 1
}
}
if countOfBallViews != 0 {print("Мама увидит мячик \(countOfBallViews) раз(-а)")} else {print("Мама ни разу не увидит мячик")}
}
MyFunc(floorWeight: 4, boyFloor: 7, momFloor: 4, coefficient: 0.75)
Менее производительное, но тоже решение для 11 задания:
func MyFunc (_ a: String) -> Bool {
let a = a.trimmingCharacters(in: .whitespaces).lowercased() // убрать из учета пробелы и большие учет регистра
for i in Array(a) { // взятие буквы для сравнения
var countOfRepeats = 0 // переменная для подсчета повторений
for iTwo in Array(a) { // взятие букв которые сравниваются с первой
if i == iTwo && countOfRepeats == 0 {
countOfRepeats += 1 // если буквы одинаковые, то + повторение (с учетом проверяемой)
} else if i == iTwo && countOfRepeats != 0 { // если встретилась буква после исходной, то отметить дубликат и завершить функцию
return false
}
}
}
return true
}
print(MyFunc(«привет»))
print(MyFunc(«Раз двА «))
Мой вариант решения 12 номера :
func charCheck ( firstLetterSet: String , secondLetterSet: String ) -> Bool {
return (Set(firstLetterSet) == Set(secondLetterSet)) == (firstLetterSet.count == secondLetterSet.count)
}
// ЗАДАНИЕ 13
// isPrime умеет в определение простых чисел
func isPrime(_ number: Int) -> Bool {
return number > 1 && !(2..<number).contains { number % $0 == 0 }
}
isPrime(6)
//теперь использую isPrime в primeNumbers
func primeNumbers ( range: ClosedRange ) -> [Int] {
var array: [Int] = []
for i in range {
if isPrime(i) {array.append(i)}
}
return array
}
primeNumbers(range: 1…10) // [2, 3, 5, 7]
//ЗАДАНИЕ 14
func exponentiation (degree: Int , num: Int) -> Int {
let doubleDegree = Double(degree)
let doubleNum = Double(num)
let i = Int(pow(doubleDegree, doubleNum))
return i
}
exponentiation(degree: 2, num: 3) // 8