Step 1 (S-38598)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/13030/step/1

Step 1 (S-38598) 1.png

[00:00 - 00:16] привет на сегодняшнем занятии мы будем пользоваться всякими прикольными готовыми штуками это самая классная программирования что можно взять день чужой труд воспользоваться им и стоять с гордым видом победителя


Step 1 (S-38598) 2.png

[00:16 - 00:31] научимся для начала сортировать что нибудь к например вектор еще 1 способом уже 3 по счету большей части того чем мы сегодня пользуемся содержится в библиотеке алгоритм но поскольку это


Step 1 (S-38598) 3.png

[00:31 - 00:46] все довольно логично итак читаем вектор чисел и просто порядочным


Step 1 (S-38598) 4.png

[00:46 - 01:05] чит у меня у нас уже до боли знакомо сразу делом его размерам


[01:05 - 01:21] из китая а теперь легким движением руки вектор превращаться в отсортированный вектор вектор превратилось в да


[01:21 - 01:40] все очень просто пишем сорт это название функции сортировки и у этой функции 2 параметра начиная откуда сортировать и заканчивая чем сортировать начинаем сначала begin заканчиваем концом and а теперь выведем то что нас получилось


Step 1 (S-38598) 5.png

[01:40 - 01:57] проверим да функция работать


Step 1 (S-38598) 6.png

Step 1 (S-38598) 7.png

[01:57 - 02:14] здорово теперь посмотрим еще 1 штуку часто бывает нужно не просто отсортировать последовательность чисел или строк или еще чего нибудь что можно сравнивать между собой но и их номера в исходной последовательности например то есть пар


Step 1 (S-38598) 8.png

[02:14 - 02:29] число его номером исходной последовательности ли число число число и строка общем какие нибудь пар с парой мы немного встречались в прошлом занятии посвященном словарям сейчас научимся работать с ними


[02:29 - 02:47] по полной программе для того чтобы они работали нужно подключить библиотеку утилите теперь можем создавать пары давайте решим такую задачку упорядочить массив чисел и вывести номера элемента в том порядке как они стояли в исходном


[02:47 - 03:03] оси что где то будем делать нам понадобятся временная перемена что посчитать число а до этого мы сделаем наш лектор из пар


[03:03 - 03:17] парад означает слом pr и в треугольной в скобочках через запятую с чем оно состоит из числа и числа отлично теперь можно считывать насчитываем во временную переменную


[03:17 - 03:33] и наш вектор кладем пар чтобы создать пары нужно фигурным скобочкам через запятую написать в нашем случае 2 числа сначала значение а потом номер в исходной последовательности


[03:33 - 03:49] ну то есть текущая значение счетчика сортируем и выводим second это нам уже знакомо в паре есть first и second 1 элемент и 2 элемент вашем случае номера это 2 элемент


[03:49 - 04:07] посмотрим что же происходит и пытаюсь найти этому какое то разумное объяснение на слезы стояли задом наперед пословица что в начале после сортировки стал стоят человек который был на 4 месте той самой последней


Step 1 (S-38598) 9.png

[04:07 - 04:22] на 2 месте тот кто был 3 предпоследний так далее вот какой смысл об этой сортировки как между собой сравниваются 2 пары во 1 они sometimes по полю first если в 1 паре


Step 1 (S-38598) 10.png

[04:22 - 04:38] 1 поле меньше чем в соответствующие поля во 2 20 меньше чем 2 если они совпадают то сравнение идет по 2 например вы хотите упорядочить людей сначала по росту


[04:38 - 04:54] а потом по возрасту если 1 человек не же другого то понятным то стоит раньше а если просто одинаковой то тогда уже дело доходит до сравнений ростов пусть теперь мы хотим учиться сортировать не по возрастанию пал по убыванию выводить мы будем


[04:54 - 05:13] уже собсно значения что у нас ничего не путаю пока не знаю как отделаться есть очень простой способ есть функция реверс развернуть последовательность параметров нее такие же как у сортировки начиная с какого места разворачиваться и заканчивая каким местом


Step 1 (S-38598) 11.png

[05:13 - 05:30] разворачивать последовательность посмотрим отлично она вылилась по убыванию сейчас мы изучим еще 1 штуку все просто который называется структур


Step 1 (S-38598) 12.png

Step 1 (S-38598) 13.png

[05:30 - 05:45] а предназначен для того чтобы объединять в себе несколько разных полей ну например вы хотите написать книгу не есть имя автора название год издания и еще куча всякой информации а также все можно объединить структур наша структура будет попроще


Step 1 (S-38598) 14.png

[05:45 - 06:02] она будет содержать в себе рост человека и его имя мы хотим упорядочить опять же людей и вывести их имена в том порядке как они идут по возрастанию роста кто нам понадобятся во 1 если мы хотим использовать строки то string


[06:02 - 06:20] и можно создавать структур описание человек для этого мы пишем слова с тракт название как она будет называться и фигура в скобочках перечисляем все поля которые не будут это рост целое число


Step 1 (S-38598) 15.png

[06:20 - 06:36] и строка да именно человек отлично теперь мы хотим создать вектор из наших структур делается точно просто места нет пишем название наш структур


[06:36 - 06:50] считать это все читать немножко сложнее зайдем временную переменную для роста и для имени очередную человека


[06:50 - 07:05] читаемых создадим временную структуру


[07:05 - 07:21] и положим в ее поля эти значения мы пишем имя структура ставим точку и вас появляется список полей которая доступна в структуре в рост мы кладем рост


[07:21 - 07:35] повышен кладем имя и добавляем это все векторы


[07:35 - 07:50] мы хотим порадовать людей по их росту при этом камне фамилия для нас значения не имеет чтобы сделать это нам нужно написать функцию сравнения 2 людей какой из них идет раньше какой пож вашем случае она очень простая достаточно взять только


Step 1 (S-38598) 16.png

[07:50 - 08:07] поле роста структура и сравнить их между собой сделать это можно с помощью функции удается им п которая принимает на вход в 2 людей а и б и должна защищать истину если а


Step 1 (S-38598) 17.png

[08:07 - 08:25] меньше чем в вашем случае меньше по росту так и пишем если рост а меньше роста человека бы и теперь мы можем передать функцию сорт в качестве 3 параметра имя нашей функции


[08:25 - 08:43] для сравнения 2 структур каждый раз когда 2 элемента сравниваться будет называться эта функция и с помощью нее проверять меньше 1 что 2 или нет для сортировки достаточно только 1 операции сравнения меньше остальная описывать не нужно


[08:43 - 08:58] а то реально хватает пусть мы хотим вывести только фамилии людей как они стоят нас есть уже оценил для вывода из предыдущей задачи теперь нам нужно выводить поля


[08:58 - 09:13] имя и разделять например переводом строки пусть у нас есть всего 3 человека каким нибудь ростом и какими то странными именами


Step 1 (S-38598) 18.png

[09:13 - 09:29] она вводит нам то что нужно сначала фамилию самого низкого человека а тем среднего и затем самым высоко с помощью структур можно сортировать что угодно


Step 1 (S-38598) 19.png

[09:29 - 09:44] частности очень часто сбои сейчас задача посортировать значение вместе с их номерами в исходной последовательности это несложно я верю что у вас получится а мы посмотрим еще 1 задачу опять же пусть нас люди выстроились в ряд нужно по сортировать их по росту


[09:44 - 10:02] но если например есть вася петя у них одинаковый рост то хотелось бы чтобы они остались в том же порядке как были в исходной последовательности то есть если в вазе стоял раньше петь то он должен так остаться после сортировки говоря не обязательно что произойдет после вызова функции sort


[10:02 - 10:19] не вполне могут меняться местами но иногда очень важно сохранять такой порядок такая сортировка скрывающая порядок одинаковых элементов называются устойчивой на нее опять же есть замечательная функция stable software stable по английски устойчиво


Step 1 (S-38598) 20.png

[10:19 - 10:36] давайте посмотрим что он действительно нас не меняет людей если они шли в каком то порядке пусть нас есть люди одинакового роста они должны так остаться да так и остались вообще говоря функция sort работать чуть чуть быстрее чем stable 40


Step 1 (S-38598) 21.png

Step 1 (S-38598) 22.png

[10:36 - 10:53] поэтому если устойчивость для вас не важна то лучше пользоваться и там и букв меньше работать быстрее посмотрим еще 1 задачу очень практическую прав средняя зарплата например у меня зарплата 3000000 у вас 0 потому что вы еще учитесь и с нами студент вася него стипендия 300 р


[10:53 - 11:09] тогда наш средний доход 1000100 р неплохо живем но часто это бывает обманчива как нашем случае и поэтому используется такое понятие как медиана что такое медиана это если мы всех выстроен по возрастанию зарплаты в нашем случае


[11:09 - 11:28] и потом возьмем того кто стоит на среднем месте не среднее значение этой площади медиану нашем случае 300 р вася искать медиану довольно просто можно взять массив и просто отсортировать его давайте вернем все как было


Step 1 (S-38598) 23.png

[11:28 - 11:45] чтобы нас опять были числа читаемых отсортирован


[11:45 - 12:02] и выведем элемент который стоит на среднем месте случае если в четное количество то на среднем месте стоит 2 но обычно в городах либо из них меч доставка будет работать посмотрим наш пример про зарплаты


Step 1 (S-38598) 24.png

[12:02 - 12:21] нас 3 человека моя зарплата и как ее назвал вот медиана составляет 300 посмотрим что нибудь еще кроме сортировки например генерацию перестановок можно только перестановка я думаю вы себе представляете это когда какие то элементы


[12:21 - 12:39] представляются то есть у нас например есть числа от 1 до н давайте их сделаем наш объект рассчитаем и положен вектор числа от 1 до н


Step 1 (S-38598) 25.png

[12:39 - 12:55] вот так отлично нас есть метр снимать числа от 1 до н и мы хотим сделать следующую перестановку то есть начале


Step 1 (S-38598) 26.png

[12:55 - 13:14] все числа расположен по порядку грамм получим следующее перестановку раз 2 последних элемента поменяются местами давайте напишем функцию вывода вектор это придется много раз делать поэтому нам будет проще если будет функции


Step 1 (S-38598) 27.png

Step 1 (S-38598) 28.png

[13:14 - 13:29] сама функция по себе довольно простая но облегчить нам жизнь


[13:29 - 13:43] итак напечатан как вектор выглядел сначала и применим к нашему вектор функций у нас продают


[13:43 - 13:59] следующая перестановка 2 такие же параметры как и в сортировке начало и конец вектора которые будут представлять наша есть элемент напечатать его еще раз и посмотрим


Step 1 (S-38598) 29.png

[13:59 - 14:13] вот они 1 2 перестановки 3 элементов 1 2 3 1 3 2 сбор с помощью этой функции можно сгенерировать вообще все перестановки какие у нас есть


Step 1 (S-38598) 30.png

[14:13 - 14:31] эта функция работает не просто так отражает истинную ли ложь обычно она обозначает истину а ложь она возвращает когда все перестановки кончились то есть в нас элемент уже расположена в обратном порядке и следующая перестановка сделать нельзя таким образом мы должны написать пока следующая перестановка


[14:31 - 14:48] будем я печатаю все вот они все наши перестановки из 3 элементов ну перед количество перестановок растет довольно быстро


Step 1 (S-38598) 31.png

Step 1 (S-38598) 32.png

[14:48 - 15:04] например можно посмотреть как они из 10 элементов все печатает сегодня мы научились пользоваться стандартными функциями библиотеки алгоритм их там кроме тех что мы изучили еще очень много но можно почитать документацию и научиться пользоваться ими сами


Step 1 (S-38598) 33.png

Step 1 (S-38598) 34.png

[15:04 - 15:22] а вообще говоря я надеюсь что благодаря вашему курсу теперь вы сможете прочитать документацию к чему угодно и научиться делать это самостоятельно но и на пойти изучать программирование где нибудь более серьезном университете ни на каких нибудь курсах на этом я с вами прощаюсь пока