Step 1 (S-38593)

From Stepik Wiki
Jump to: navigation, search

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

Step 1 (S-38593) 1.png

[00:00 - 00:17] на сегодняшнем занятии будем изучать массивы такие штуки которые позволяют хранить последовательность чисел я уверен вам их не хватало решение задачи предыдущего занятия а начнем мы изучения с нового типа цикла for


[00:17 - 00:35] вспомним задачку с прошлого занятия вывод всех чисел от 1 до 100 зайдем переменную которая начале равна единице а цикл while до тех пор пока она меньше или равна 100 на каждом шаге будем я печатать


[00:35 - 00:50] и увеличивать текущее значение на единицу смотрим что мы не забыли как отделаться выводится


Step 1 (S-38593) 2.png

[00:50 - 01:08] программисты люди ленивы поэтому стараются как можно меньше букв мы придумали себе новый цикл for в котором можно делать такие штуки перебор всех значений от какого то до какого то легко и просто как это делается в начале


Step 1 (S-38593) 3.png

[01:08 - 01:27] пишется то что она стоит перед while вот оно переменной мы можем заводить прямо в форме они будут видны только в этом блоке то есть от фигуру скобочки открываются до фигуру скобочки закрывающей значит следующее форе это условия до каких пор он работает


Step 1 (S-38593) 4.png

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


[01:41 - 01:57] убираем смотрим что мы ничего не сломали выводит отлично теперь буду выбирать опять лишних буковки


Step 1 (S-38593) 5.png

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


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


[02:29 - 02:45] поскольку прибавляется денежка нужна очень часто то для этого придумали еще более короткую запись и + + что означает прибавить к текущему значению переменной и единицу по аналогии с ней есть операция - -


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


Step 1 (S-38593) 6.png

Step 1 (S-38593) 7.png

[03:01 - 03:16] все просто есть несколько типов массивов 1 из них это вектор вектор это не палочка со стрелочкой а набор чисел например или каких то объектов заминированных это слово пришло к нам из математике используется в си + +


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


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


[03:51 - 04:06] если переменная нас от коробочка в которую можно класть числа то вектор это набор коробочек у которых есть одинаковое имя то есть 10 набор называется каким то именем и у каждой коробочки есть ее порядковый номер 0 1 и так далее этот номер называются индексом


Step 1 (S-38593) 8.png

[04:06 - 04:24] элемента в массиве сейчас мы сдаем вектор длины n для этого нужно в кругу в скобочках после его именем написать арифметическое выражение количество элементов которой мы хотим создать теперь нужно считать его


[04:24 - 04:39] у нас есть готовый цикл for воспользуемся им а читать мы будем начинать с 0 до тех пор пока и меньше n то есть нас элементов вектора если в нем их n штук то они наберутся от 0 до н - 1


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


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


Step 1 (S-38593) 9.png

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


[05:30 - 05:46] этот номер последнего элемента продолжаем это до тех пор пока и больше 0 на каждом шаге делом и - - мишань текущее значение на единицу остается только напечатать а и ц и разделить их пробелами


Step 1 (S-38593) 10.png

[05:46 - 06:05] запустим что то не работает странно ошибка допустим еще раз у нас есть 5 элементов 1 2 3 4 5


Step 1 (S-38593) 11.png

Step 1 (S-38593) 12.png

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


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


[06:39 - 06:54] отправлять мы будем по мере необходимости на этапе считывания мы будем читать все во временную переменную смотреть если ее значение больше 0


[06:54 - 07:12] то ее можно добавить последовательность добавить можно с помощью операции push back это метод то есть мы пишем имя вектора точка push back вообще говорят почти тоже самое что функцию можно просто запомнить значит мы делаем push back вот это щит на перемены


[07:12 - 07:29] то есть теперь у нас нашу вектора будут храниться только положительные числа а сколько их теперь мы хотим вывести задом наперед да но вот с так работать не будет почему потому что мы здесь раньше выводил т - 1


[07:29 - 07:45] а теперь положительно число мог быть не все их можешь стать меньше это тоже есть классный способ а именно этот файл для вектора который говорит нам сколько элементов содержатся в векторе проверим


[07:45 - 08:00] пусть у нас 5 чисел ну и как в перемешку положительно отрицательно отлично выводит только положительные от что полезного в этой программе это push back


Step 1 (S-38593) 13.png

Step 1 (S-38593) 14.png

Step 1 (S-38593) 15.png

[08:00 - 08:16] добавление в конец и size определения размера вектор посмотрим еще 1 более сложную задачу пусть нас есть группа детей которая пришла музей смотреть на картину но кто то очень низкий ему не видно из за спин других что нужно сделать можно взять его и поставить вперед


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


[08:33 - 08:48] чем заключается обработка массива мы будем искать номер минимального элемента в начале он равен 0 а потом мы будем ходить по всему нашему вектора


Step 1 (S-38593) 16.png

[08:48 - 09:05] и если мы встретим какой то элемент меньше нашу то сделаем замену итак вот проход если а и то текущий элемент куда мы смотрим сейчас меньше чем a


[09:05 - 09:20] ну мин чем то что надо было раньше что делать в этой ситуации меняем на текущее значение итак мы знаем номер минимального элемента можно обменять элемент с индексом 0


[09:20 - 09:35] с этим элементом как это делать например пусть меня есть а 2 маркера на руках я хочу поменять их местами но руки у меня кривые я не могу взять 2 мастера одновременно как я буду это делать я положу


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


Step 1 (S-38593) 17.png

[09:50 - 10:06] темп временно 3 действия 1 взять из левой руки положить на стол temp равно а нулевое на стол кладем из левой руки чем дело и дальше в левую руку


[10:06 - 10:21] брали то что лежит в правый а нулевое равно а ну и наконец в правую руку брали то что лежит на столе


[10:21 - 10:39] все значения поменялись местами мы сделали обработку теперь перейдем к выводу здесь я покажу еще 1 прикольную штуку опять же родившуюся программистской лень правда 2011 году так что вообще свежачок есть еще 1 запись


[10:39 - 10:54] цикла for еще меньше букв сейчас я покажу потом вот так out now двоеточие а что это означает out это те перемены поскольку нас вектор стоит и зонтов то автоматически


[10:54 - 11:10] переменной now будут создаваться двоеточие а означает поочередно перебрать все элементы которые лежат в векторе а то есть на место но будут подставляться поочередно все элементы мы можем печатать но пробежек


[11:10 - 11:25] и все вот такой короткий красивый вывод запустим и посмотрим было несколько человек они стояли как попало и вот в самой нижней оказалась впереди


Step 1 (S-38593) 18.png

Step 1 (S-38593) 19.png

[11:25 - 11:44] отлично с этим мы справились теперь сделаем сложно штук пусть вас там не оказалось придешь обратно установить картину теперь все захотели стать так чтобы всем было удобно то есть люди стали упорядочена по росту сначала самые низкие а потом самым высоким как это сделать


Step 1 (S-38593) 20.png

[11:44 - 11:59] мы умеем ставить на место 1 человека самого низкого вот он встал и нас все остальные люди тоже хотят стать так что можем сделать мы можем повторить эту операцию для всех кроме самого 1 человека


[11:59 - 12:14] а потом для всех кроме 1 2 1 3 и так далее в итоге окажется что наш массив стал порядочным сделать это очень легко нужно поправить только обработку как мы это будем делать


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


[12:30 - 12:45] значит что начать жить сколько человек уже стоит как нужно сначала на стоит мой человек собственно жизнь у нас начинают считаться с 0


[12:45 - 13:01] что нужно делать на каждом шаге в качестве номер минимального человеком то есть вот этого неупорядоченного хвоста будем брать самый 1 человек и искать того кто ниже его будем тоже начиная с места


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


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


[13:36 - 13:51] на каждом шаге посмотрим что у нас получилось пусть наши люди стояли как то


Step 1 (S-38593) 21.png

Step 1 (S-38593) 22.png

[13:51 - 14:08] и после выполнения программы стали стоит правильно написать сортировку выбором причем выбором минимума мы каждый раз оставшиеся части выбираем минимальный элемент и ставим его в начало когда мы повторяем эти операции n раз то все на элементов оказывается на своих местах


Step 1 (S-38593) 23.png

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


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


Step 1 (S-38593) 24.png

[14:46 - 14:52] на следующем занятии мы с вами научимся работать с таблицами двумерным массивом до встречи