Функции (func) в Swift

Домашняя работа к главе 15

Задание 1

Будет ли корректно выполняться данный код? Если нет, то укажите почему и по-возможности исправьте ошибки

func mult(_ a: Double, _ b: Double) -> Double {
 a * b
}
Правильный ответ

Функция написана корректно. Оператор return не обязательно должен быть в коде, когда тело функции состоит из одного выражения.

 

Задание 2

Разработайте функцию, которая принимает на вход значение типа Bool, преобразует его в строку и возвращает. То есть передав true типа Bool должно вернуться "true" типа String, то же самое и для false.

Правильный ответ

func booleanToString(_ b: Bool) -> String {
   return String(b)
}

Возможно вы решили данную задачу с помощью оператора ветвления. Ваш вариант так же будет верным.

 

Задание 3

Напишите функцию, которая принимает на вход массив с элементами типа 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

 

Задание 4

Напишите функцию, которая принимает на вход массив типа [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

 

Задание 5

Используя перегрузку (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

Доступ закрыт

Дополнительные 9 заданий доступны только подписчикам

Оформить доступ


9 Comments

  1. disconnect:

    Реализация 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
    }

  2. disconnect:

    В 8 задании реализацию через цикл, можно сделать с where, вместо if.

    func testEight8 (_ array: [Int], _ b: Int) -> Bool {
    for num in array where num == b {
    return true
    }
    return false
    }

  3. Илья Кузнецов:

    задание 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”)

  4. Дмитрий Ахмеров:

    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) // “”

  5. torin.dmitriy:

    Текущее решение в задании 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
    }

  6. torin.dmitriy:

    Задание 12
    func checkSameSymbols(in1: String, and: String) -> Bool {
    return Array(in1).sorted() == Array(and).sorted()
    }

  7. ageres7:

    Хотел бы дополнить ответ 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)

  8. Alekschatov:

    задание 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
    }

Добавить комментарий