48
Глухих Михаил Игоревич mailto: [email protected]

Глухих Михаил Игоревич mailto: [email protected]/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Глухих Михаил Игоревичmailto: [email protected]

Page 2: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Последовательность действий (обычно записанная формально), необходимая для решения определённой задачи

2

Page 3: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Запись алгоритма на языке программирования (или в машинных кодах)

3

Page 4: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Запись алгоритма на языке программирования (или в машинных кодах)

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

4

Page 5: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Участок программы, также решающий определённую задачу (часть или всю задачу, решаемую программой)

5

Page 6: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Участок программы, также решающий определённую задачу (часть или всю задачу, решаемую программой)

Имеет входы (параметры) и выход (результат)

6

Page 7: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Участок программы, также решающий определённую задачу (часть или всю задачу, решаемую программой)

Имеет входы (параметры) и выход (результат)

Похожа на функцию в математике (но не полностью)

7

Page 8: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

8

fun sqr(x: Int) = x * x

fun = ключевое слово

sqr = имя функции

x: Int = параметр функции◦ Int = тип параметра функции

“= x * x” = тело функции◦ x * x = результат функции

* = операция

Page 9: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Элементарные арифметические, логические и прочие действия, обозначаемые знаком операции = оператором

9

Page 10: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Сложение a + b

Вычитание a – b

Умножение a * b

Деление a / b

Остаток от деления a % b

Скобки ( … )

10

Page 11: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Тип подобен области допустимых значений в математике

11

Page 12: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Тип подобен области допустимых значений в математике

Например, множеству целых чисел в математике соответствует целый тип в программировании

12

Page 13: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Тип подобен области допустимых значений в математике

Например, множеству целых чисел в математике соответствует целый тип в программировании

Тип есть у параметра функции, результата функции, переменной, …

13

Page 14: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int = целое число -231 … 231 - 1

14

Page 15: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int = целое число -231 … 231 – 1

Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308

15

Page 16: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int = целое число -231 … 231 – 1

Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308

Boolean = true или false, истина или ложь

16

Page 17: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int = целое число -231 … 231 – 1

Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308

Boolean = true или false, истина или ложь

Char = символ (из таблицы Unicode), с кодом 0 … 216 - 1

17

Page 18: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int = целое число -231 … 231 – 1

Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308

Boolean = true или false, истина или ложь

Char = символ (из таблицы Unicode), с кодом 0 … 216 - 1

18

Page 19: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int = целое число -231 … 231 – 1

Double = вещественное число (примерно) -1.7 * 10308 … 1.7 * 10308

Boolean = true или false, истина или ложь

Char = символ (из таблицы Unicode), с кодом 0 … 216 – 1

String = строка = любое количество Char

19

Page 20: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int : 42, -256

Double : 1.0, 3.1415, 6.67e-11

Boolean : true, false

Char : 'a', 'z'

String : "Hello", ""

20

Page 21: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int : точный тип, Double : приближённый

21

Page 22: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int : точный тип, Double : приближённый

Диапазон значений Double гораздо шире

22

Page 23: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int : точный тип, Double : приближённый

Диапазон значений Double гораздо шире

Операции над целыми числами дают целый результат: 5 / 2 = 2

Операции над вещественными числами дают вещественный результат: 5.0 / 2.0 = 2.5, 5 / 2.0 = 2.5

23

Page 24: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Int : точный тип, Double : приближённый

Диапазон значений Double гораздо шире

Операции над целыми числами дают целый результат: 5 / 2 = 2

Операции над вещественными числами дают вещественный результат: 5.0 / 2.0 = 2.5, 5 / 2.0 = 2.5

Преобразования: n.toDouble(), x.toInt()

24

Page 25: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Используются, чтобы различать различные элементы программы

Есть у функций, параметров, переменных, типов, …

25

Page 26: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Обязаны начинаться с буквы (или с символа _ что не рекомендуется)

Состоят из букв, цифр, символа _

Прописные и строчные буквы различаются

26

Page 27: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Только латинские буквы, никаких моё_имя_123

Нет транслитерации, никаких dlinaOtrezka

27

Page 28: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Только латинские буквы, никаких моё_имя_123

Нет транслитерации, никаких dlinaOtrezka

Имена функций, параметров, переменных начинаются со строчной буквы: segmentLength или calculateArea

Имена типов начинаются с прописной: Rectangle

28

Page 29: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Параметр – это объект, существительное

Функция – это действие, глагол

29

Page 30: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Пакет (package) Math◦ abs(x: Int), abs(x: Double) – модуль◦ sqrt(x: Double) – квадратный корень◦ pow(x: Double, y: Double) – x в степени y◦ sin/cos/tan(x: Double) – синус / косинус / тангенс,

аргумент задаётся в радианах◦ exp(x: Double) – e в степени x◦ log / log10(x: Double) – натуральный и

десятичный логарифмы◦ min / max(x: Int, y: Int) или (x: Double, y: Double) –

минимум и максимум из двух чисел◦ PI = 3.14…, E = 2.72…

30

Page 31: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

// Комментарий: дискриминант

fun discriminant(a: Double, b: Double, c: Double) = sqr(b) - 4 * a * c

// sqr(b) = вызов функции sqr

// b = аргумент функции sqr

31

Page 32: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

// Комментарий: дискриминант

fun discriminant(a: Double, b: Double, c: Double) = sqr(b) - 4 * a * c

// Комментарий: корень квадратного уравнения

fun sqRoot(a: Double, b: Double, c: Double) = (-b + Math.sqrt(discriminant(a, b, c))) / (2 * a)

// Math.sqrt(…) – вызов функции sqrt из пакета Math

// discriminant(a, b, c) – вызов функции discriminant

// и одновременно аргумент функции sqrt

32

Page 33: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Math.sqrt = полное имя (с указанием пакета)◦ В IDEA можно сократить автоматически: Alt+Enter

sqrt = короткое имя

// Директива импорта – в верхней части файлаimport java.lang.Math.sqrt

// …

fun sqRoot(a: Double, b: Double, c: Double) = (-b + sqrt(discriminant(a, b, c))) / (2 * a)

33

Page 34: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun quadraticRootProduct(a: Double, b: Double, c: Double

): Double /* тип результата */ {

// Тело в виде блока

}

34

Page 35: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun quadraticRootProduct(a: Double, b: Double, c: Double

): Double /* тип результата */ {

// Тело в виде блока

// val = промежуточная переменная

val sd = sqrt(discriminant(a, b, c))

}

35

Page 36: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun quadraticRootProduct(a: Double, b: Double, c: Double

): Double /* тип результата */ {

// Тело в виде блока

// val = промежуточная переменная

val sd = sqrt(discriminant(a, b, c))

// Ещё две переменных

val x1 = (-b + sd) / (2 * a)

val x2 = (-b - sd) / (2 * a)

}

36

Page 37: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun quadraticRootProduct(a: Double, b: Double, c: Double

): Double /* тип результата */ {

// Тело в виде блока

// val = промежуточная переменная

val sd = sqrt(discriminant(a, b, c))

// Ещё две переменных

val x1 = (-b + sd) / (2 * a)

val x2 = (-b - sd) / (2 * a)

// Чему равен результат?

return x1 * x2

}

37

Page 38: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

val = определение промежуточной переменной

return = оператор возврата (вычисления результата)

38

Page 39: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun solveQuadraticEquation(a: Double, b: Double, c: Double

) /* no result */ {

val sd = sqrt(discriminant(a, b, c))

val x1 = (-b + sd) / (2 * a)

val x2 = (-b - sd) / (2 * a)

}

39

Page 40: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun solveQuadraticEquation(a: Double, b: Double, c: Double

) /* no result */ {

val sd = sqrt(discriminant(a, b, c))

val x1 = (-b + sd) / (2 * a)

val x2 = (-b - sd) / (2 * a)

// Вывод на экран значений x1 и x2

println(x1)

println(x2)

}

40

Page 41: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun solveQuadraticEquation(a: Double, b: Double, c: Double

) /* no result */ {

val sd = sqrt(discriminant(a, b, c))

val x1 = (-b + sd) / (2 * a)

val x2 = (-b - sd) / (2 * a)

// Вывод на экран значений x1 и x2

println(x1)

println(x2)

// Вывод на экран строки вида x1 = 3.0 x2 = 2.0

println("x1 = $x1 x2 = $x2")

}

41

Page 42: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun solveQuadraticEquation(a: Double, b: Double, c: Double

) /* no result */ {

val sd = sqrt(discriminant(a, b, c))

val x1 = (-b + sd) / (2 * a)

val x2 = (-b - sd) / (2 * a)

// Вывод на экран значений x1 и x2

println(x1)

println(x2)

// Вывод на экран строки вида x1 = 3.0 x2 = 2.0

println("x1 = $x1 x2 = $x2")

// Вывод на экран произведения корней

println("x1 * x2 = ${x1 * x2}")

}

42

Page 43: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Особый вид функций

Контролируют правильность работы других функций

Обычно реализуются на основе специальных тестирующих библиотек (пример = JUnit)

43

Page 44: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

// Test = аннотация@Test

fun testSqr() {// Проверить, что квадрат нуля это 0assertEquals(0, sqr(0))// Проверить, что квадрат двух это 4assertEquals(4, sqr(2))// Проверить, что квадрат -3 это 9assertEquals(9, sqr(-3))

}

44

Page 45: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

Проверка на равенство◦ Ничего не делает, если аргументы равны

◦ Прекращает тест с ошибкой, если аргументы не равны

45

Page 46: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

«Точка входа» в программу = отсюда программа начинает свою работу

Во многих языках называется main

46

Page 47: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

fun main(args: Array<String>) {

// Решаем x^2 - 3*x + 2 = 0

val x1x2 = quadraticRootProduct(1.0, -3.0, 2.0)

println("Root product: $x1x2")

}

47

Page 48: Глухих Михаил Игоревич mailto: glukhikh@mailkspt.icc.spbstu.ru/media/files/2017/kaf/Kotlin01.pdf · abs(x: Int), abs(x: Double) –модуль sqrt(x: Double)

См. lesson1/task1 в обучающем проекте

Решите хотя бы одну из задач

Протестируйте решение

Добавьте коммит в свой репозиторий

Создайте Kotoed Submission и убедитесь в правильности решения

Попробуйте написать главную функцию, использующую функцию, написанную вами

48