вторник, 30 января 2018 г.

Swift 13. Classes and Structures

13 Урок посвящен описанию понятия класс и структура в Swift.
Домашнее задание:

/*
 1. Создайте структуру студент. Добавьте свойства: имя, фамилия, год рождения, средний бал. Создайте несколько экземпляров этой структуры и заполните их данными. Положите их всех в массив (журнал).

 2. Напишите функцию, которая принимает массив студентов и выводит в консоль данные каждого. Перед выводом каждого студента добавляйте порядковый номер в “журнале”, начиная с 1.

 3. С помощью функции sorted отсортируйте массив по среднему баллу, по убыванию и распечатайте “журнал”.

 4. Отсортируйте теперь массив по фамилии (по возрастанию), причем если фамилии одинаковые, а вы сделайте так чтобы такое произошло, то сравниваются по имени. Распечатайте “журнал”.

 5. Создайте переменную и присвойте ей ваш существующий массив. Измените в нем данные всех студентов. Изменится ли первый массив? Распечатайте оба массива.

 6. Теперь проделайте все тоже самое, но не для структуры Студент, а для класса. Какой результат в 5м задании? Что изменилось и почему?

 007. Уровень супермен

 Выполните задание шахмат из урока по энумам используя структуры либо классы
 38:53
 */

struct Student {
    var firstName: String
    var lastName: String
    var year: Int
    var averageRate: Double
}

var student1 = Student(firstName: "Alex", lastName: "Tim", year: 1984, averageRate: 4.5)
var student2 = Student(firstName: "Vasya", lastName: "Ivanov", year: 1990, averageRate: 4.1)
var student3 = Student(firstName: "Petya", lastName: "Petrov", year: 1980, averageRate: 4.7)
var student4 = Student(firstName: "Vanya", lastName: "Petrov", year: 1982, averageRate: 3.9)

var listStudents = [student1, student2, student3, student4]

/*
 2
 */

print("\nN 2\n")
func printList(listStudents: [Student]) {
    
    for (index,student) in listStudents.enumerated() {
        print("№ \(index + 1). \(student.lastName) \(student.firstName) was born \(student.year). AverageRate: \(student.averageRate)")
    }
}

printList(listStudents: listStudents)

/*
 3
 */
print("\nN 3\n")

let listRateSorted = listStudents.sorted { (st1, st2) -> Bool in
    st1.averageRate > st2.averageRate
}

printList(listStudents: listRateSorted)

/*
 4
 */
print("\nN 4\n")
let listNameSorted = listStudents.sorted { (st1, st2) -> Bool in
    st1.lastName == st2.lastName ? st1.firstName < st2.firstName : st1.lastName < st2.lastName
}
printList(listStudents: listNameSorted)


/*
 5
 */
print("\nN 5\n")
var modifyListStudents = listStudents
modifyListStudents[0].firstName = "Den"
modifyListStudents[0].lastName = "Zaytsev"
modifyListStudents[1].firstName = "Vasek"
modifyListStudents[1].lastName = "Trubachev"
print("Old List (Struct):")
printList(listStudents: listStudents)
print("\nModify List (Struct):")
printList(listStudents: modifyListStudents)

/*
 6
 */
print("\nN 6\n")

class StudentClass {
    var firstName: String
    var lastName: String
    var year: Int
    var averageRate: Double
    init(firstName: String, lastName: String, year: Int, averageRate: Double) {
        self.firstName = firstName
        self.lastName = lastName
        self.year = year
        self.averageRate = averageRate
    }
}

var newStudentList = [
    StudentClass(firstName: "Alex", lastName: "Tim", year: 1984, averageRate: 4.5),
    StudentClass(firstName: "Vasya", lastName: "Ivanov", year: 1990, averageRate: 4.1),
    StudentClass(firstName: "Petya", lastName: "Petrov", year: 1980, averageRate: 4.7),
    StudentClass(firstName: "Vanya", lastName: "Petrov", year: 1982, averageRate: 3.9)
]

func printList(listStudents: [StudentClass]) {
    
    for (index,student) in listStudents.enumerated() {
        print("№ \(index + 1). \(student.lastName) \(student.firstName) was born \(student.year). AverageRate: \(student.averageRate)")
    }
}

var newModifyListStudents = newStudentList

newModifyListStudents[0].firstName = "Den"
newModifyListStudents[0].lastName = "Zaytsev"
newModifyListStudents[1].firstName = "Vasek"
newModifyListStudents[1].lastName = "Trubachev"

print("Old List (Class):")
printList(listStudents: newStudentList)
print("\nModify List (Class):")
printList(listStudents: newModifyListStudents)

/*
 7
 */
print("\nN 7\n")

enum ChessColor: String {
    case  white, black
}
enum ChessLetter: Int {
    case a , b, c, d, e, f, g, h
}

enum ChessDigit: Int {
    case one = 0 , two, three, four, five, six, seven, eight
}

enum ChessType: Int {
    static let  countOfType = 6
    case king = 0x2654, queen, rook, knight, bishop, pawn
}

class ChessFigure {
    let type: ChessType
    let color: ChessColor
    var letter: ChessLetter
    var digit: ChessDigit
    
    init(type: ChessType, color: ChessColor, letter: ChessLetter, digit: ChessDigit) {
        self.type = type
        self.color = color
        self.letter = letter
        self.digit = digit
    }
    func symbol() -> Character {
        let delta = (self.color == .white) ? 0 : ChessType.countOfType
        let unicode = self.type.rawValue + delta
        let scalar = UnicodeScalar(unicode);
        return Character(scalar!)
    }
}

func createEmptyChessMate() -> [[Character]] {
    var chessArray = [[Character]]()
    for vertical in 0...7 {
        var line = [Character]()
        for horizontal in 0...7 {
            line += (horizontal + vertical) % 2 == 0 ? "⬛" : "⬜"
        }
        chessArray.append(line)
    }
    return chessArray
}

func showChessMate(chessMate: [[Character]]) {
    let letter = "   a b c d e f g h"
    print(letter)
    for (index,lineArray) in chessMate.enumerated().reversed() {
        var lineChar = String(index + 1) + " "
        for char in lineArray {
            lineChar += String(char)
        }
        print(lineChar)
    }
    print(letter)
}

func setFiguresInChess(chessMate: [[Character]], figureArray array: [ChessFigure]) ->  [[Character]]{
    var chessArray = chessMate
    
    for figure in array {
        chessArray[figure.digit.rawValue][figure.letter.rawValue] = figure.symbol()
    }
    return chessArray
}

var chessMate = createEmptyChessMate()
let figuresArray = [
    ChessFigure(type: .king, color: .white, letter: .b, digit: .one),
    ChessFigure(type: .rook, color: .white, letter: .d, digit: .seven),
    ChessFigure(type: .rook, color: .white, letter: .e, digit: .eight),
    ChessFigure(type: .king, color: .black, letter: .f, digit: .eight)
]
chessMate = setFiguresInChess(chessMate: chessMate, figureArray: figuresArray)
showChessMate(chessMate: chessMate)





Console:



N 2

№ 1. Tim Alex was born 1984. AverageRate: 4.5
№ 2. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9

N 3

№ 1. Petrov Petya was born 1980. AverageRate: 4.7
№ 2. Tim Alex was born 1984. AverageRate: 4.5
№ 3. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9

N 4

№ 1. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 2. Petrov Petya was born 1980. AverageRate: 4.7
№ 3. Petrov Vanya was born 1982. AverageRate: 3.9
№ 4. Tim Alex was born 1984. AverageRate: 4.5

N 5

Old List (Struct):
№ 1. Tim Alex was born 1984. AverageRate: 4.5
№ 2. Ivanov Vasya was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9

Modify List (Struct):
№ 1. Zaytsev Den was born 1984. AverageRate: 4.5
№ 2. Trubachev Vasek was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9

N 6

Old List (Class):
№ 1. Zaytsev Den was born 1984. AverageRate: 4.5
№ 2. Trubachev Vasek was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9

Modify List (Class):
№ 1. Zaytsev Den was born 1984. AverageRate: 4.5
№ 2. Trubachev Vasek was born 1990. AverageRate: 4.1
№ 3. Petrov Petya was born 1980. AverageRate: 4.7
№ 4. Petrov Vanya was born 1982. AverageRate: 3.9

N 7

   a b c d e f g h
8 ⬜⬛⬜⬛♖♚⬜⬛
7 ⬛⬜⬛⬛⬜⬛⬜
6 ⬜⬛⬜⬛⬜⬛⬜⬛
5 ⬛⬜⬛⬜⬛⬜⬛⬜
4 ⬜⬛⬜⬛⬜⬛⬜⬛
3 ⬛⬜⬛⬜⬛⬜⬛⬜
2 ⬜⬛⬜⬛⬜⬛⬜⬛
1 ⬛⬜⬛⬜⬛⬜

   a b c d e f g h

Комментариев нет:

Отправить комментарий