Джейсон Хиршхорн: Добро пожаловать в неделю три, все. У нас есть занят, но интересно Раздел впереди нас. Итак, сначала, потому что мы сделали некоторые Headway с курса, но мы по-прежнему уже много обучения осталось сделать, я собираюсь показать вам, ребята некоторые ресурсы что должно оказаться невероятно полезными, как вы не только приблизиться к своему Проблема устанавливает, но и переварить все материал мы даем вам ребята в лекции и шорты и раздел. Тогда мы собираемся провести первую 20 25 минут разделе переходя GDB, которые вы можете иметь или не иметь использован на этой стадии, но это невероятно полезный инструмент, который будет помочь вам отладки программ. Многие из вас, возможно, использовали Printf в середина вашей программы, чтобы выяснить , что переменная равных. GDB даже лучше, чем Printf и не испортить свой код, потому что вам запустить его на исполняемый файл. Таким образом, мы пройдемся по 10 самым полезным команды, что нужно для GDB, и мы идете на упражнения вместе так в задаче установить три и за его пределами, вы можно использовать GDB для отладки ваши программы. И, наконец, мы собираемся перейти на некоторые сортировки и поиска алгоритмов что вы видели в лекции, и мы собирается на самом деле код, а не только псевдокод, но код бинарный поиск, пузырьковой сортировки, и выбор рода. Итак, сначала я хочу пойти над ресурсами. Это обширный список, и это меньше шрифта, потому что я имел непосредственное отношение к поместиться на здесь. Но это не только поможет вам, опять же, с проблемных наборов и переваривания информации вы узнали, но определенно, пришел время викторины, они будут быть невероятно полезными. Итак, сначала лекция отмечает. Если вы идете в cs50.net/lectures и перейдите к конкретной недели и дня, вы увидите, что есть записи для каждого лекции, которая является не просто стенограмма, но отредактированная версия , что было покрыто в лекции с кодом фрагменты и другие полезные лакомые кусочки. Я очень рекомендую движение над теми. И то, как хорошо, что есть исходный код имеющихся в каждой лекции. И опять же, эти горки будут также можно ознакомиться на сайте cs50.net/sections в этот вечер. Так второй являются шорты каждую неделю, что крышка темы, как правило, от 5 до 15 минут в длину. А те, надеюсь, даст вам отличный учебник по различным темам. В-третьих - и это является новым в этом год - это study.cs50.net. Если вы еще не проверили его, я настоятельно рекомендуем вам сделать это. Вы добираетесь, чтобы выбрать тему. У нас есть десятки вопросов там. Так, например, вы выбираете функции. Это дает вам несколько слайдов и отмечает на функциях. Те, на самом деле слайды, что ТФ рекомендуется использовать во время нашего презентации в разделе. Там также советы и рекомендации по работе с функциями, и есть проблемы практики, которые помогают Вы работаете с функций. Мы также даем вам ссылки на мало Функции и время, что функции придумали в лекции. Так study.cs50.net, новый это год, фантастический ресурс. Далее, у меня есть человек, который является руководство Команда, что вы можете работать на командной строки. Так что если у вас есть какие-либо вопросы о Команда, например, рандов, которые мы столкнулся на прошлой неделе во разделе и вы, скорее всего встречаются в ваша проблема установить, проходя генерировать код, но если вы введете мужчину рандов, вы получите страницу, рассказывает вам все о рандов. Это дает вам то, что нужно, параметры он принимает, а также о доходах Тип и краткое описание этой функции. Так проверьте рандов. Это может быть немного многословным и запутанным, так что иногда я считаю, что просто погуглить, что я хочу знать, лучший способ, чтобы найти ответ. Так практике с Google. Получить хорошо Google. Он станет вашим лучшим другом. А также Google, если вы не можете найти его на Google, cs50.net/discuss, это форум. Скорее всего, если у вас есть вопрос, один из ваших 700 + сверстниками также имеет, что вопрос и, возможно, попросил это уже в обсудить форумов и он ответил. Так что если у вас есть общие вопросы или у вас есть вопрос, что вы думаете может быть, другие люди, возможно, столкнетесь с, проверить cs50.net/discuss. Наконец, последние два, если вы хотите поговорить с реальным человеком, офиса часов с понедельника по пятницу. Там также онлайн часы работы для студентов расширения. И последнее, но, конечно, не в последнюю очередь, мне, восклицательный знак. У всех вас есть мою контактную информацию. не Если вам нужно что-нибудь, пожалуйста, никогда стесняйтесь обращаться ко мне. Всегда не стесняйтесь делать это. Очень немногие из вас, которые добавили меня на Gchat, так что вызывает разочарование, но, надеюсь, это изменится между в этом и следующем разделе. Любые вопросы до сих пор на ресурсы? Великий. Наконец, еще один разъем для обратная связь, sayat.me/cs50. Вы можете дать мне анонимный обратной связи о том, как я делаю. Это было действительно полезным на прошлой неделе. Я получил несколько замечаний от вас, ребята сразу после раздела, плюс от другие студенты, которые смотрели его в течение недели, и это был невероятно предупредителен. Я собираюсь попытаться ограничить мое использование слово "сладкий", но я покажу мой энтузиазм и волнение в других отношениях. Но были и другие дополнительные основные результаты воздействия, как плюсы, так и дельта. Поэтому, пожалуйста, я даю вы, ребята, обратная связь на ваших проблемных множеств. Не стесняйтесь, чтобы дать мне обратную связь на моем учении. Я здесь для вас, ребята. Великий. Это все, что у меня есть для Первый раздел. Кто-нибудь есть любая вопросы до сих пор? И у меня есть к сведению для центр управления. Студенты расширения уже Messaged меня говоря что они не получают никакого аудио, но это из моих силах, чтобы исправить. Так, мы надеемся, что получает решен в ближайшее время. Если вы смотрите онлайн, привет, но вы не можете услышать меня. Итак, сначала мы собираемся пройти через GDB. GDB, как я намекнул на ранее, является инструментом отладки намного лучше, чем Printf. Таким образом, чтобы начать работу с GDB, вы, ребята, если Вы хотите открыть свой прибор и принять файл, который я послал по электронной почте к вам раньше - этот файл будет также доступны в Интернете в немного - и запустить GDB. / имя файла. Прежде всего, конечно, у вас есть для компиляции подать, потому что GDB работает только на исполняемые файлы. Но если вы хотите, чтобы начать GDB, первое, что вы делаете, запуске GDB. / Цезарь. Так вот название программы мы находимся собирается пойти с ним прямо сейчас. Так что я собираюсь писать сделать Цезаря, который даст мне исполняемый файл здесь выделены зеленым цветом. А потом я собираюсь запустить GDB. / Cesar. И там вы идете. Вы видите у нас есть некоторый текст рассказывал мне о версии GDB, давая мне некоторые сведения о гарантии, и тогда мы есть приглашение ВВП, который выглядит вроде вроде нашей командной строки строке но вы видите, что это открыто Парень, GDB, рядом скобка. Прежде чем мы продолжим и отладки этот файл что я посылал к вам всех, давайте посмотрим на некоторые полезные команды так у нас есть чувство того, что мы собираемся рассказать. Эти команды перечислены здесь в Порядок, в котором я обычно используют их. Так что я начала мою программу, запустив ГПБ. / Имя программы, в этом случае, Цезарь. И то первое, что я делаю 99,9% часть времени типа брейк имею в виду. Это устанавливает точку останова на основной. По сути, то, что вы делаете там является программа собирается останавливаться на Основным так что вы можете приступить к изучению его линию за строкой, а не работает все путь до конца. Вы можете разбить в разных точках ваш код, но главным, как правило, хорошее место для начала. Следующая команда запуске запускается. Это начинается программу запущенной, и если вам нужно ввести командную строку аргументы, вы запустите его таким команду. Запуск с аргументами. Так, поскольку мы собираемся за версию из С, что программа вы, ребята, написал для PSet два - этот, конечно, имеет некоторые ошибки в нем, что, надеюсь, мы найдем - мы собираемся запустить запустить с некоторой команды аргументы командной строки, потому что Цезарь, как вы, ребята, знаете, за проблемы установить спецификацию, занимает некоторое аргументы командной строки. Следующая пара команд, следующий один на самом деле называется следующая. Это один займет у вас строка за строкой через вашу программу. Так удара п, то введите отнимет у вас на следующую строку, выполнение предыдущая строка. Шаг принимает вас не только Следующая строка, но это отнимет у вас внутри функции. Так что если вы написали функцию в ваш код или если вы хотите, чтобы исследовать чтобы я, например, вы можете нажать с, а вместо того, чтобы следующей строке файл, который вы собираетесь через право Теперь, вы действительно будете шаг в эта функция и посмотреть свой код. Список показывает вам, в очень удобной для пользователей формат, 10 или около того линии вокруг где вы в настоящее время в коде так что вы можете увидеть файл вместо того, чтобы поменять назад и вперед между различными видами. Печать, как Printf, как следует из названия. Это показывает то, что переменная равна. Информация местные жители действительно полезно. Это специальная версия печати. Информация местные жители показывает вам все местные переменные, печатает их все для вас что в настоящее время доступны. Так что я, как правило, вместо того, чтобы распечатать четыре переменные, которые я любопытно, если я в цикле, для Например, я просто пишу информация местных жителей, и он будет показать мне, что мой счетчик я равна, а также массива, что я работает на равных. Наконец, по-прежнему. Ввод перерыв останавливается вам в точке разрыва. Вы можете идти по линии от линия с рядом и шагу. Продолжить запускает программу, чтобы ваш следующий не нарушать пункт или до завершения, если больше нет точек разрыва. Отключение удаляет точки останова, если вам решил перерыв в основное было неуместно, вы хотите установить его в другом месте. И, наконец д, бросить курить, получает из GDB. Так эта программа,. / Цезарь, мы собираемся просматривать прямо сейчас, и мы собираетесь использовать GDB, чтобы найти что ошибки в этой программе. Я побежал эту программу ранее с Проверьте 50, и я получил один хмурый взгляд. Все это существовало, это скомпилирован, прошло много испытаний, но для почему-то, он не проходил пятый тест, обращаясь BARFOO, все крышки, в Е-Д-У-И-Р-Р, все заглавные, с использованием три качестве ключа. Я получил довольно близко. Я вышел на одну букву. Таким образом, есть некоторые небольшие ошибки в здесь. Я посмотрел через мой код. Я не мог понять его. Будем надеяться, что вы, ребята, можете помочь мне выяснить, что эта ошибка есть. Так вот ошибка, что мы поиск. Давайте двигаться в GDB. Опять же, я бежал GDB. / Цезаря, так что теперь мы находимся в GDB. И то, что это первый что я должен делать? Я только что вступил GDB. Кто-то дал мне хороший Команда для входа. СТУДЕНТ разговора Основное. Джейсон Хиршхорн: Перерыв основной. Фантастика. Давайте введите что дюйм Вы, ребята, можете смотреть здесь или следовать вместе на ваших компьютерах. Перерыв основной, и вы увидите, Точка разрыва была установлена ​​на уровне - это дает мне некоторые странные адреса памяти, и это также дает мне номер строки. Если бы я был, чтобы оглянуться назад на этот файл, Я понял бы, что основные произошло на линии 21. То, что я должен работать дальше? Работает ли моя программа? Нет. Так что я должен работать дальше? СТУДЕНТ: Запустите. Джейсон Хиршхорн: Запустите. Должен ли я просто Run Run, или должны Я добавить некоторые другие вещи в? СТУДЕНТ: Запуск с аргументом. Джейсон Хиршхорн: Запуск с команда аргументы. А так как я отладки очень специфическая так, я должен указать, что линия аргумент командной. Так что я буду действительно работают три, которые, опять же, выходной я получил от Выезд 50. Начиная программу. Мы проходим через пару строк. Теперь вы увидите, что мы находимся на линии 21. Как я знаю, что мы находимся на линии 21? Потому что если вы посмотрите налево моего окна терминала, есть он говорит линию 21. И это дает мне, на самом деле, код, который на линии 21. Так что я оговорился ранее. Основное на самом деле не на линии 21. Главная находится пару строк выше 21. Но в строке 21, это где мы ломать. Эта строка кода имеет еще не выполнена. Это важно. Линия вы видите имеет не был выполнен еще. Это следующая строка кода Вы собираетесь выполнить. Так что в следующий линия, как вы, ребята, вероятно, знакомы с, это проверка состояния, чтобы увидеть, если у меня есть вступил аргумент командной строки. И чтобы я: что является вторым часть, что делаешь? Что такое для меня? СТУДЕНТ: Изменение его в целое число. Джейсон Хиршхорн: Извините? СТУДЕНТ: Она меняется аргумент в целое число. Джейсон Хиршхорн: Так, чтобы я изменяет аргумент v1 из строки в целое число. А потом что же это проверка? СТУДЕНТ: Если есть вторая аргумент командной строки, в сторону от запуска программы. Джейсон Хиршхорн: И что Во второй половине этого Проверки логическое выражение? Эта часть здесь, чтобы я? СТУДЕНТ: Если он отрицательный. Джейсон Хиршхорн: Убедившись, что? СТУДЕНТ: Убедившись, что это, по сути, положительным. Джейсон Хиршхорн: Совершенно верно. Это проверка того, если это отрицательным, и, если она отрицательна, я есть ощущение, следующая строка мощь быть мне кричать на пользователя. Так что давайте ударил конец выполнить эту линию. Мы не видим, что линия, что вы, ребята, может быть, ожидал увидеть кричать на Пользователь, а затем возвращаются, потому что эта линия не был выполнен. Я вошел 3. Так что я, в самом деле, введите два команду аргументы командной строки, и 3 больше нуля. Таким образом, мы увидели, что линия, мы выполнили, но мы не шаг внутри, если условия. Так что теперь, рядом, я вижу, я устанавливаю внутр ключевым равно до я аг v1. Так что это мне создании ключ переменной. Так что если я распечатать ключ прямо сейчас, потому что что позволяет увидеть значение в переменной, Ключ равна 47. Это странно, но конечно, это потому, что у меня нет выполняется эту линию еще. Так что теперь, если я ударил п, выполнить эту строку, и сделать ключ печати, ключ будет равен 3, что мы и ожидаем, что он составит. Итак, еще раз, в GDB, линии, которую вы вижу, вы еще не выполнена. Вы должны ударить н или с или ряд из других команд в самом деле выполнить эту строку. Ключ для печати. Ключа на 3. До сих пор так хорошо. Строка представляет собой простой текстовый. Давайте выполним эту линию. Я получаю строку от пользователя. Давайте посмотрим, на мой Выезд 50, я введите BARFOO все заглавные буквы, так это то, что я ввожу. Если бы я сейчас печатать обычный текст. Вы увидите, что она равна строку. Это дает мне некоторую другую странную шестнадцатиричную число, но это происходит в Дело в том, что моя строка BARFOO. Если бы я хотел, чтобы увидеть, какие ключевые составил в эта точка, как я мог проверить ключ? СТУДЕНТ: ключ печати. Джейсон Хиршхорн: ключ печати, именно так. А на самом деле, есть ярлык. Если вы устали от введя печать, Вы можете просто ввести с. Так р ключевым делает точно такой же вещи. И опять же, я вижу, что равно 3. Если бы я хотел, чтобы выяснить, что оба ключа и BARFOO составил в то же время но я устал от набрав каждый один индивидуально, я могли бы ввести информация местных жителей. Это дает мне ключевые равно 3. Обычный текст равно BARFOO. Это также дает мне эти два странные вещи в верхней части, эта переменная я и эта переменная н. Те, которые реально существующих в моей основной программы. Мы не столкнулись с ними еще, а в качестве предварительного просмотра, тем существуют в моем цикле. Поэтому в данный момент, они равны какой-то загадочный номера, потому что они не были инициализации пока нет, но они все еще существуют в памяти, так что они просто установить до некоторого значения мусора. Но мы видим ключ в простой текст прямо там. Так что я собираюсь выполнить эту линию, Линия 34, для петли. Мы собираемся, чтобы перейти в цикл, нажав н. И мы внутри цикла. Мы находимся в нашей первой проверки. И опять же, это должен рода выглядеть вам знакомы, потому что это было Программа Цезарь, который был написан, но опять же, есть какая-то ошибка. И теперь, если я сделаю информация местных жителей, потому что я внутри, что цикл, вы увидите что я равна нулю, как мы ожидаем. Это то, что мы поставили его в и инициализации это в цикле. н равна 6. Это также имеет смысл, потому что мы устанавливаем это к STRLEN обычного текста. Так что я хотел сделать информация местных жителей или печать к переменной часто, чтобы убедиться, что все всегда то, что Я ожидаю, что он равен. В этом случае, все то, что я ожидаю, что он равен. Итак, давайте начнем перемещение через это для петли. Линия Я на это линия 36, при обычном текст, который я больше и равнины текст, который я меньше или равна г. Я знаю, что моя проблема не в мой первый Письмо, это со вторым письмом. Если мы оглянемся назад при заезде 50, В идет в E штрафа. Я беру А и оставляя его в качестве , не изменяя его словам Д. Итак что-то не так с вторая буква. Так что я собираюсь двигаться там через секунду. Но если бы я хочу, чтобы проверить, какой равнину Текст я составил в этот конкретный так, я думаю, что это должно быть что? То, что должно обычный текст я равняться в этом Первый раунд через цикл? СТУДЕНТ: Ноль? Джейсон Хиршхорн: Обычный текст из I? Таким образом, он должен быть капитал B. Я, конечно, равна нулю, но обычный текст Кронштейн нулю замкнутый кронштейн равна B потому строки, как мы видели на прошлой неделе, являются массив, поэтому мы получаем Первый символ от этого. Итак, еще раз, если я распечатал простой текст Я, я, по сути, получить символ Б. И это аккуратно, не так ли? Я на самом деле не простой текстовый I. Это не одна из переменных, которые я поставил или инициализации, но вы можете распечатать из целого ряда вещей если вы хотите, чтобы. Но давайте перейдем через. Если обычный текст я больше А и простой текст I меньше или равно Z, который четко верно, потому что у нас есть капитал Б. Я собираюсь запустить некоторые команды на нем. Мы видели, что математика на прошлой неделе, так что мы будем принимаем это как должное, что он работает Право согласно Проверьте 50. Эти фигурные скобки, первый показал, что я выходил, если состояние, а второй показал что я выхода для цикла. И вот теперь, когда я ударил Далее, мы увидим мы вернулись в цикл снова. Мы собираемся через цикл снова. Давайте на самом деле шаг в секунду итерация для цикла и типа Информация местные жители. Таким образом, мы находимся в второй итерации нашего цикла. Я равна 1, который мы ожидаем. N равна 6, который мы ожидаем. Ключ равно 3, что мы ожидаем. И обычный текст, вы увидите, равна EARFOO сейчас, а не BARFOO больше, потому что в нашей предыдущей итерации, B был изменен на капитал E. Таким образом, мы собираемся столкнуться с проблемой, так что это Здесь мы собираемся погрузиться в отладке. Но кто-нибудь есть какие-либо вопросы о том, что мы сделали до сих пор? Фантастика. Таким образом, мы собираемся выполнить это, если состояние, обычный текст кронштейн Я закрыл Кронштейн больше А и простой текст я меньше или равна Z. Но прежде Я иду в это, потому что это, где Я знаю, что моя ошибка, я хочу указать из простого текста I. Так давайте поставим распечатку. Он делает равняться символов A, так что кажется до сих пор, все хорошо, и хорошо. Так что я ожидаю эту линию за моей логике, эта линия должна быть правдой. Это заглавная буква. Но если бы я ударил п, мы понимаем, что это линия, по сути, не был выполнен. Я спрыгнул на другое, если. Почему это произошло? СТУДЕНТ: Потому что у вас есть ваше состояние обычного текста больше чем, не больше или равно. Джейсон Хиршхорн: Так у меня был свой обычный текст Я больше, не больше или равно. Итак, ясно, столица не сделал вызвать это, если условие, и мы сделали не войти в него, и мы сделали не сделать необходимые сдвиг. Так вот оно что, на самом деле. Я понял, мой баг. Я не мог вернуться в моем исходном файле, изменить его, и обновлять его и запустить Проверьте 50 раз. Но мы увидим, как раз для педагогика'S ради, если я продолжаю. Остальное, если не выполняет либо, но что вместо равна является команда это не меняет. Так что это не изменилось вообще, и если я печатать обычный текст здесь, мы увидим собирается через что цикл не стал, по сути, изменить эту второй символ вообще. Он по-прежнему столица А. Итак, еще раз, мы отлажена нашу ошибку. Мы поняли, что есть логика отсутствует. И мы отлажена его загодя до фактического выполнения этой линии, но вы бы заметили, если бы мы просто ударил Далее и перейти к что еще, если, это означает, что, что если условие не соответствует действительности. Мы не, на самом деле, получить результат мы ожидали. Таким образом мы могли бы быть предложено, было мы не были так проницательны, чтобы смотреть на что если условие и проверить, если, по сути, наше условие следует оценить в правда в текущем контексте. Вот и все, для отладки эту программу. Кто-нибудь есть вопросы? Что команда, которую я мог поразить бросить GDB? Вопрос: А потом я будет предложено, бросить в любом случае? Да или нет. Я ударю да, и я буду ушли GDB. Так, чтобы был быстрый грунт, чтобы GDB. На самом деле, в реальном сценарии, Я сделал это в рабочее время. Я GDBed этот точный программу в Приемные часы с студентом. И если мы вернемся к командам, которые мы видели ранее, мы использовали разговора Основное, первое , что мы сделали. Мы использовали бег с аргументами командной строки, Второе, что мы сделали. Мы использовали следующий много двигаться нам по линиям. И снова, короткая версия из следующего является н. Вот в скобках серым цветом на слайде. Мы не использовали шаг, но мы не сделали обязательно должны в этом случае. Но мы могли бы использовать его в немного позже на сегодня, если мы отладке, для Например, бинарный поиск, когда двоичный Поиск вызывается в отдельный Функция но есть некоторые ошибки с ним. Мы собираемся хотите, чтобы войти в призыв к бинарного поиска и на самом деле его отладки. Перечислите мы не использовали либо потому, что у нас было хорошее чувство нашего кода, но если я действительно хотели получить представление о том, какой код я был вокруг, я мог бы просто использовать список. Распечатать мы использовали, информация местных жителей, которые мы использовали. Продолжить мы не должны использовать в этом так, при этом мы не должны использовать отключить, но мы сделали использование бросить. Опять же, эти 10 команд, практиковать их. Если вы понимаете, эти 10 команд, вы должны быть установлены для отладки любой выдавать с GDB. Таким образом, мы собираемся пойти на, опять же, Суть разделе сегодня, переходя эти сортировки и поиска алгоритмы. Прежде, чем мы это сделать, опять же, все вопросы, комментарии, опасения за GDB? Так как все собираетесь использовать GDB, а не Е? Так что все, ради навечно, в все кивает их головы право сейчас, так что я буду видеть Вас в рабочее время и все ТФ будет видеть Вас и они скажут, покажи мне, как использовать GDB, и вы сможете показать им, не так ли? Вид? Может быть, мы надеемся. Круто. Так что мы собираемся переехать в сортировки и поиска. Вы увидите меня есть список уже отсортированный для нас, но, что не собирается , имеет место всегда. Таким образом, в проблеме установить спецификации для Проблема установить три, у вас есть шорты что вы можете смотреть, и это на самом деле просит вас смотреть эти шорты. Кроме того, в лекции на прошлой неделе, мы перешли многие из этих алгоритмов, поэтому я не собираюсь тратить время в классе происходит над этими алгоритмами снова или рисунок картинки о том, как они алгоритмы работы. Опять же, что информация, которую вы можете повторно часы лекция, или, что информация захватывается превосходно на шортах на эти результаты, все которые доступны в cs50.net. Так вместо этого, что мы собираемся сделать, это написать эти программы. У нас есть ощущение, ментальную модель, о том, как они работают, и так, что мы собираемся сделать, это кодировать их по-настоящему. Мы собираемся превратить эту ментальную модель, эта картина, если хотите, в Фактический код. И если вы были немного смущены или туманно на ментальной модели, я полностью понять. Мы на самом деле не собирается перейти к кодом сразу. Таким образом, хотя это приглашение на этом слайде спрашивает вам код бинарный поиск, и на самом деле, повторяющийся версия бинарный поиск, первое, что я действительно хотим вас сделать, это написать некоторый псевдокод. Так у вас есть эта ментальная модель о том, как бинарный поиск работы. Выньте лист бумаги, если у вас есть один легко доступны, или открыть текстовый редактор, и я хотел бы все написать. Возьмите четыре минуты, чтобы написать псевдокод для бинарного поиска. Опять же, думаю о том, что ментальной модели. Я приду вокруг, если у вас есть вопросы и мы можем сделать картину из. Но сначала, прежде чем мы начнем программирование, Я хотел бы написать псевдокод для бинарного поиска поэтому, когда мы начать, у нас есть некоторые направления, как туда, где мы должны возглавить. СТУДЕНТ: Можно ли считать, массив значения, которые мы получаем уже отсортированы? Джейсон Хиршхорн: Так что для бинарного поиска работать - отличный вопрос - вы должны принять в отсортированный массив значений. Так предположить, что это будет работать. Мы вернемся к этому слайду. Вы увидите в порфиру функции декларация BOOL binary_search внутр значение, внутр значения, Int N. Это должно выглядеть знакомым, если вы уже подошел или получили ваш руки грязные с множеством проблем. Но это ваше объявление функции. Опять же, не нужно беспокоиться о что многое в этот момент. То, что я действительно хочу, чтобы вы сделать, это принять четыре минуты до псевдокода двоичный поиск, а затем мы пойдем более, что в составе группы. И приду вокруг. Если у вас есть вопросы, пожалуйста свободно поднять руку. Почему бы вам не взять больше двух минут закончить псевдокод? Я знаю, это может показаться смешным, что мы тратим столько времени на то, что даже не на самом деле в С, но особенно для них более сложные алгоритмы и проблема наборы, которые мы должны выяснить, начиная с псевдокод не беспокоясь о синтаксисе, просто беспокоясь о логика, невероятно предупредительный. И таким образом, вы не решая два невероятно трудные проблемы сразу. Ты просто сосредоточиться на логике, а то вы переехать в синтаксисе. ОК. Начнем переживает псевдокод. Я написал здесь, двоичный Поиск псевдокод. Мы напишем это на сесть вместе. Или я напишу его, и вы будете давать мне Приглашения мне нужно. Так кто-нибудь может дать мне первый линия псевдокоде вы написал для бинарного поиска? Да, Энни? СТУДЕНТ: В то время как длина Список больше нуля. Джейсон Хиршхорн: В то время как длина из списка больше нуля. И снова мы видим некоторые C-глядя синтаксические вещи на здесь. Но больше это на английском языке. Кто-нибудь есть какие-либо линию, они поставили до этого в их псевдо-код? СТУДЕНТ: Получить массив из сортируются числа. Джейсон Хиршхорн: Вы написали "получить Массив отсортированных чисел. "Пер Объявление функции, мы будем прохождения массив отсортированных чисел. СТУДЕНТ: [неразборчиво]. Джейсон Хиршхорн: Так мы будем иметь, что. Но да, если у нас не было, что мы необходимо будет разобраться наш массив номера, потому что бинарный поиск работает только на упорядоченные массивы. Таким образом, хотя длина списка равна нулю, я собирается поставить в некоторых фигурных скобок , чтобы она выглядела немного больше, как С. Но в то время, кажется, отображение на в то время как петли, так что внутри этого время петли, что нам нужно сделать для бинарного поиска? Кто-то, кто не дал мне ответить еще, но кто это написал? СТУДЕНТ: К середине списка. Джейсон Хиршхорн: Том. К середине списка. И дополнительный вопрос, что мы делаем только мы находимся в середина списка? СТУДЕНТ: Сделайте проверку будь то номер, который вы ищете. Джейсон Хиршхорн: Отлично. Перейти середину списка и проверить если наша ценность есть - фантастическим. Кто-нибудь что-нибудь еще это было иначе, чем это? Вот именно. Первое, что мы делаем в бинарный поиск будет идти в середине списка и проверьте, если наша ценность есть. Так что я полагаю, если наша значение там, что же нам делать? СТУДЕНТ: Вернемся к нулю [неразборчиво]. Джейсон Хиршхорн: Да, если наш значение есть, мы нашли его. Таким образом, мы можем сказать некоторый путь, однако это функция определена, мы говорим пользователю мы нашли его. Если его там нет, хотя, это где это становится сложнее. Так что, если его там нет, кто-то другой, кто работал над бинарного поиска или имеет представление о том, в настоящее время, что мы будем делать? СТУДЕНТ: Вопрос. Джейсон Хиршхорн: Да? СТУДЕНТ: Каково массив уже отсортирован? Джейсон Хиршхорн: Да, мы предполагаем, массив уже отсортирован. СТУДЕНТ: Так то вы должны проверить, если значение, которое вы видите больше, чем значение, которое вы хотите, вы можете перемещать к середине другой половине. Джейсон Хиршхорн: Так что, если середина список больше чем то, что мы ищете, то мы что? Мы движемся, где? СТУДЕНТ: Вы хотите, чтобы перейти к половина списка с цифры ниже, чем это. Джейсон Хиршхорн: Так мы будем позвоните, что левая. Так что если средний больше, мы можем искать Левая половина списка. А потом при поиске, что я имею в виду при поиске? СТУДЕНТ: [неразборчиво]. Джейсон Хиршхорн: Мы идем в середине. Мы фактически повторить эту вещь. Мы возвращаемся через нашу время цикла. Я дам вам последний - иначе, если, средний меньше, чем мы, что мы делаем здесь? СТУДЕНТ: Идите направо. Джейсон Хиршхорн: Поиск право. Это выглядит хорошо, но кто-нибудь есть все, что мы может отсутствовать или быть все остальное, что вы положили в псевдо-код? Так что это то, что мы до сих пор. В то время как длина списка больше нуля, мы собираемся пойти в середине списка и проверить, если наша ценность есть. Если средний больше, мы собираемся поиск налево, еще, если середина менее, мы собираемся искать право. Так мы все были немного знакомы с термины, которые мы используем в информатике и инструменты у нас есть. Но вы уже заметили, мы были говоря по-английски, но мы обнаружили, много вещей, которые, казалось, карта на инструменты, которые есть в нашей кодирования набор инструментов. Так прямо с места в карьер, мы не собирается еще на самом деле код. Что мы видим здесь на английском языке, что карты на что мы можем написать в C? СТУДЕНТ: В то время как. Джейсон Хиршхорн: В то время как. Так что это в то время как здесь, карты на ни к чему? СТУДЕНТ: в то время как петля. Джейсон Хиршхорн: в то время как цикл? Или возможно, в более общем плане, петля. Мы хотим сделать что-то снова и снова. Так что мы собираемся, чтобы закодировать петлю. И мы уже знаем, потому что мы сделали это пару раз, и мы есть много примеров там, как на самом деле писать этот показатель для петли. Так что должно быть довольно легко. Мы должны быть в состоянии получить, что начал довольно быстро. Что еще мы видим здесь? Какие еще структуры синтаксиса, вещи что мы знакомы с в С, мы уже есть чувство основе от слов, которые мы использовали? Да, Анна? [Неразборчиво] шучу. Анна, идти вперед. СТУДЕНТ: Если и в другом месте. Джейсон Хиршхорн: Если и остальное - прямо здесь. Так что же те, похож? СТУДЕНТ: если еще заявлении. Джейсон Хиршхорн: Да, условия, не так ли? Таким образом, мы, вероятно, нужно написать некоторые условия. И снова, хотя, возможно, путая при во-первых, мы как правило, имеют смысл сейчас как написать условий и Синтаксис для условий. И если мы не делаем, мы просто посмотреть Синтаксис условий, вырезать и вставлять что, потому что мы знаем, что нужно условие здесь. Любые другие вещи, которые мы видим, что отображение на вещи, которые мы, возможно, потребуется сделать в C? Да, Aleha? СТУДЕНТ: Это может быть очевидно, , просто проверка, если значение равно что-то. Джейсон Хиршхорн: Так как же мы проверяем и - для этого заходим в середине списка и проверить, если наша ценность есть? Как мы это делаем, что в C? Что синтаксис для этого? СТУДЕНТ: Равно, равно. Джейсон Хиршхорн: Равно, равно. Так что это проверка, вероятно, будет быть равенства, равных. Поэтому мы понимаем, что необходимо, что где-то. А на самом деле, просто при ее написании, мы видим эти другие вещи. Мы собираемся иметь, чтобы сделать некоторые Операторы сравнения в там - фантастическим. Так что на самом деле выглядит, по большой, мы не писали слово C кода еще. Но мы получили ментальную модель вниз через лекции и тех шортах. Мы написали псевдо-код в виде группы. И уже, у нас есть 80%, если не 90% того, что нам нужно сделать. Теперь нам просто нужно закодировать он, который снова, нетривиальная проблема, требующая решения. Но по крайней мере мы застряли на логике. По крайней мере, сейчас, когда мы идем в рабочее время, Я могу сказать, я знаю, что мне нужно сделать, но вы можете напомнить меня синтаксиса? Или даже если рабочее время переполнены, вам Может ли Google для синтаксиса, а чем застревание на логике. И снова, вместо того, чтобы решать логика и синтаксис проблемы все сразу, часто намного лучше разорвать эти два жестких проблемы прочь в две более управляемые те и делать псевдо-код, а затем код на языке C. Итак, давайте посмотрим, что я сделал для псевдо-код загодя. В то время как длина списка больше нуля, посмотрите на середине из списка. Если число найдено вернулся правда, еще если число выше, поиск слева. Иначе, если число меньше, поиск Хорошо, возвращение ложным. Так что выглядит почти идентично, если не почти идентичен тому, что мы написали. На самом деле, Том, что вы сначала сказал, нарушая середине списка, и если число найдено в двух утверждений на самом деле, что я сделал. Я объединил их там. Я должен был слушать Вы в первый раз. Итак, это псевдо-код у нас есть. Если вы хотите сейчас, извините, перейдите Вернемся к нашему исходной задачи. Давайте кода binary.c. Так реализации итеративный версию бинарный поиск, используя следующие Объявление функции. И вам не нужно копировать его вниз только пока. Я на самом деле происходит, чтобы открыть прямо здесь binary.c. Так что есть объявление функции в середине экрана. И вы увидите, я взял псевдо-код от на моих сторон, но практически идентичны к чему мы писали, и положить, что в для вас. Так что теперь, давайте пять минут закодировать эту функцию. И опять же, если у вас есть какие-либо вопросы, поднимите руку, дайте мне знать, я буду прийти. СТУДЕНТ: [неразборчиво]. Джейсон Хиршхорн: Так что я взял двоичный Определение поиск в вверх, на линии 12. Вот что я получил для своих слайда. А потом все это псевдо-код, я просто скопировать и вставить на слайде, псевдо-код слайд. Я все еще не слыша [неразборчиво]. Так что если вы закончили реализация, я хочу, чтобы проверить его. Мне по электронной почте вам файл helpers.h ранее в этом классе. И она будет доступна онлайн, а также для загрузки для людей, смотрящих на этот раз раздел задерживается. И я просто использовал общий распределение Код от pset3. Так что я взял find.C, использовать свой helpers.h файл Вместо файла helpers.h что дал в коде распределения. И я должен был сделать одно изменение в find.C вместо вызова просто Поиск, звоните binary_search. Так что, если вы хотите проверить свой код, знаю, что это, как это сделать. В самом деле, когда мы будем проводить этот код Прямо сейчас, я просто сделал копию мой каталог pset3, опять же, выгружена Помощники файлы, а затем сделал, что изменить в find.C позвонить binary_search а не просто поиск. Джейсон Хиршхорн: Да. У Вас есть вопросы? СТУДЕНТ: Nevermind. Джейсон Хиршхорн: Не беспокойтесь. Ну, давайте начнем. Мы будем кодировать это как группа. Еще одно замечание. Опять же, это может легко быть заменены в для задачи установить три. У меня есть helpers.h файл, который, скорее чем helpers.h нам дают, заявляет бинарный поиск, пузырь рода, и выбор рода. И в find.c вы заметите на линии, что это такое, линия 68, мы называем двоичный поиск, а не поиск. Итак, еще раз, код, который доступен онлайн или код, который вы создание прямо сейчас можно легко поменять местами в течение р набор 3, чтобы проверить его. Но сначала, давайте код бинарный поиск. Наша объявление функции, мы вернемся логическое значение. Возьмем целое под названием значение. Возьмем массив целых чисел с именем значения, и мы берем п размер массива. В строке 10, прямо здесь, у меня есть Резкое включают stdbool.h. Кто-нибудь знает, почему это там? Так, что это строка кода делать? СТУДЕНТ: Она позволяет использовать возвращаемый тип BOOL. Джейсон Хиршхорн: Совершенно верно. СТУДЕНТ: Или это библиотека, которая позволяет использовать тип возвращаемого BOOL. Джейсон Хиршхорн: Так резкое включают stdbool.h линия дает мне некоторые определения и объявления для вещей что я имею право использовать в эта библиотека. Так среди тех, говорит, что есть Этот тип называется логический, и это может быть истинным или ложным. Так вот что, что линия делает. И если у меня не было, что линия, я бы попасть в беду за написание этого Слово прямо здесь, логический, прямо там. Совершенно верно. Поэтому мне нужно, что в этом коде. ОК. Так что это, опять же, является повторяющимся версия, не рекурсивный один. Так давайте начнем. Давайте начнем с этого первого линия псевдо-код. И, надеюсь, мы будем - или нет, мы надеемся. Мы собираемся пойти по комнате. Мы пойдем построчно, и я помогу Вы выясняете линию, что нам нужно написать первый. Таким образом, хотя длина списка больше нуля. Начнем в передней части. Какую линию я должен написать здесь, в коде? СТУДЕНТ: В то время как скобка N больше 0. Джейсон Хиршхорн: В то время как н велик, чем 0. Таким образом, п размер списка, и мы проверяем, если - [вставляя ГОЛОСА] Джейсон Хиршхорн: - Простите? СТУДЕНТ: Как мы знаем, что п-размер списка? Джейсон Хиршхорн: Извините. За спецификации PSet, поиск и как бы действует вам нужно написать, N является размер списка. Я забыл объяснить, что здесь. Но да. N является размер список, в этом случае. Таким образом, хотя п больше 0. ОК. Это может оказаться немного проблематично хотя, если так будет продолжаться. Потому что мы будем продолжать, чтобы знать Размер списка на протяжении всего этого Функция, но сказать, что мы начнем с массивом 5 целых чисел. И мы проходим через, и мы сейчас сократился до массив из 2 целых чисел. Какие 2 целые числа, что? Размер 2 теперь, когда мы хотим смотреть, но которых 2 является то, что? Имеет ли это смысл, на этот вопрос? ОК. Я попрошу его снова. Таким образом, мы начнем с этого массива 5 целые числа, п равна 5, не так ли? Мы будем работать до конца здесь. мы, вероятно, изменить размер, Право, как дела идут на. Что то, что мы говорим, что хотим сделать. Мы не хотим искать полный вещь снова. Так сказать, что мы изменить его на 2. Берем половину списка Это странно. Так просто взять 2. Так что теперь п равно 2. Я прошу прощения за бедных сухого стирания маркеры. Не так ли? И мы ищем по списку снова со списком размера 2. Ну, наш массив по-прежнему размера 5. Мы говорим, мы только хотим, чтобы поиск 2 места в нем. Итак, какие 2 места это такое? Имеет ли это смысл? Являются ли они левые 2 места? Являются ли они правильные 2 места? Являются ли они средние 2 места? Мы разбили проблему вниз, но мы на самом деле не знаю, какая часть проблема, которую мы все еще смотрим, только при наличии этих 2 переменные. Так что мы должны немного более, а п больше 0. Мы должны знать, где, что п в нашем фактическом массиве. Так кто-нибудь есть изменится на этой линии? Большая часть этой линии совершенно правильно. Есть еще одно дополнение? Можем ли мы поменять что-то для п к сделать эту линию немного лучше? Угу? СТУДЕНТ: Можете ли вы инициализировать переменную как длины к п, то будем использовать позже в функции? Джейсон Хиршхорн: Так инициализации переменной длины п, и мы используем это позже? Но тогда мы просто обновить длину и мы еще столкнулись с этой проблемой, где мы сократить длину нашей проблеме, но мы никогда не знаем, где, собственно, что длина отображается на. СТУДЕНТ: Разве это не произойдет позже, когда вы говорите, поиск слева, поиск не так ли? Вы собираетесь перейти на другой Область Ваших - Джейсон Хиршхорн: Мы собираемся пойти в область, но как мы знаем, которые должны идти? Если у нас есть только массив и это п, как мы знаем, где перейти в массиве. В задней части, да? СТУДЕНТ: У вас есть, вроде бы, ниже граница и верхняя граница переменной или что-то в этом роде? Джейсон Хиршхорн: ОК. Так что это еще одна идея. Вместо того чтобы просто отслеживать размер, мы отслеживаем нижнего и верхняя граница переменной. Так как же нам рассчитать размер от нижняя граница и верхняя граница? [вставляя ГОЛОСА] Джейсон Хиршхорн: вычитание. А также отслеживать нижняя и правую границы, дайте нам знать, мы поиске этих двух? Неужели мы поиске эти два сюда? Неужели мы поиске среднюю два? Наверное, не две средние, потому что это, по сути, является бинарный поиск. Но теперь мы сможем получить размер, но и пределы массива. В сущности, если у нас есть гигант Телефонная книга, мы сорвать его пополам. Теперь мы знаем, где, что меньше, Телефонная книга. Но мы на самом деле не разрывая Телефонная книга в два раза. Нам все еще нужно знать, где Новые границы нашей проблемы. Кто-нибудь есть какие-либо вопросы об этом? Да? СТУДЕНТ: Будет ли это работать, создавая переменная, я, что вы потом просто перенести позиция я по отношению к его текущее положение и длина, п? Джейсон Хиршхорн: А что это я? СТУДЕНТ: Как я быть как своего рода - Как вы бы инициализировать я быть среднее положение массива. А потом, если значение в положении я в середина массива в установлено, быть меньше, чем значение, вам нужно, я сейчас становится длина массива, а также значение я разделил на 2. Мол, видите, вы скорость I - Джейсон Хиршхорн: Верно. СТУДЕНТ - до - Джейсон Хиршхорн: Так что я почти уверен, что будет работать. Но дело в существо, необходимо два фрагменты информации здесь. Вы можете сделать это с начала и конца, или вы можете сделать это с размером, а затем некоторые маркер. Но вы должны две части информации здесь. Вы не можете пройти с только один. Значит ли это, имеет смысл? Так что мы собираемся, чтобы пройти, и мы собираемся сделать [неразборчиво] и создать некоторые маркеры. Так Что вы пишете в коде? СТУДЕНТ: Я только что сказал, внутр границу один равно 0. Джейсон Хиршхорн: Давайте назовем что внутр, начиная. СТУДЕНТ: ОК. Джейсон Хиршхорн: Это делает больше смысла для меня. И? СТУДЕНТ: Я сказал, я думаю, Int заканчивается. Джейсон Хиршхорн: десятичного заканчивается. СТУДЕНТ: Я думаю, п минус 1, или что-то в этом роде. Мол, последний элемент. Джейсон Хиршхорн: Таким образом, вы писали, внутр начиная равен 0, точка с запятой, и междунар окончание равно п минус 1, точку с запятой. Так по существу, что мы делаем здесь, 0 первое место. И, как мы знаем, в массивах, они не идут до п, они идут до н минус 1. Так у нас есть некоторые пределы нашего массива. И эти первоначальные границы, случается, начальные границы нашей проблемы. ОК. Так это звучит хорошо. Тогда, если мы вернемся к этой линии, в то время как длина списка больше 0, что, вместо того, чтобы п, должны мы ставим здесь? СТУДЕНТ: Написать заканчивая минус начало. Джейсон Хиршхорн: В то время как окончание минус начинают больше 0? ОК. И мы могли бы, если бы мы хотели сделать это немного лучше, чем еще мы могли сделать? Если бы мы хотели, чтобы убрать этот код немного? Как мы можем избавиться от 0? Это просто вопрос стиля. Это правильно, прямо сейчас. СТУДЕНТ: Концовка не равна начало? Джейсон Хиршхорн: Мы можем сделать что? [вставляя ГОЛОСА] СТУДЕНТ: Ending больше? Джейсон Хиршхорн: Да. Мы можем просто сделать то время как окончание больше, чем начала. Верно. Мы добавили начинают с другой стороны об этом, и мы избавились от 0. Так что это просто выглядит немного чище. ОК. Так, в то время как длина списка равна 0, мы писали что, в то время как окончание больше чем начало. Мы собираемся поставить в наш необходимости фигурные скобки, и то первое, что мы хотим сделать, это посмотреть на их в небольшом списке. Вы? Вы можете дать мне - СТУДЕНТ: Если скобка значение квадратная скобка - Джейсон Хиршхорн: Если скобки значение квадратная скобка. СТУДЕНТ: Концовка разделить на 2. Джейсон Хиршхорн: Ending? СТУДЕНТ: Я вижу проблему с вашим - Джейсон Хиршхорн: ОК. Ну, посмотрите на середине. Откуда мы знаем, что середина? Да. Итак, позвольте мне удалить этот код. Откуда мы знаем, что середина? В чем, когда у вас есть начало и конец, как вы находите средний? СТУДЕНТ: Вы в среднем. СТУДЕНТ: Вы добавить их вместе, а затем - Джейсон Хиршхорн: Добавьте их вместе, а затем? СТУДЕНТ: И вы в среднем. Разделите его на 2. Джейсон Хиршхорн: Добавьте их вместе и разделить на 2. Так внутр среднего равных? Том, вы можете дать его мне? СТУДЕНТ: Начиная плюс окончание - Джейсон Хиршхорн: Начало плюс окончание. СТУДЕНТ: Все, кронштейн, делится на 2. Джейсон Хиршхорн: Все, в скобках, делится на 2. Так что это дает мне середину ни о чем, правильно? СТУДЕНТ: Кроме того, необходимо, чтобы закруглить его. Джейсон Хиршхорн: Что вы значит, мне нужно округлить его? [вставляя ГОЛОСА] СТУДЕНТ: Потому что, если Это странное число, то это все равно, - Джейсон Хиршхорн: Ну, хорошо. Так что я мог окружить его. Но если это нечетное число, 5, я могу принимающая значение 1, от середины. Или, если это четное число, а, что это лучше так. Если это 4, у нас есть только 4, я могу взять первый "средний", цитата, конец цитаты или второй «средний» один. Либо будет работать для бинарного поиска, так что я на самом деле не нужно округлить его. Но есть одна вещь, которую я нужно смотреть на этой линии. Мы не могли бы понять это, но мы вернемся к нему. Потому что эта линия на самом деле еще необходим еще одну вещь. Но до сих пор, мы написали четыре строки кода. Мы получили наш начало и заканчивая маркеры. У нас есть время цикла, которая отображает непосредственно к нашей псевдокоде. Мы смотрим на середине, которая отображает непосредственно на нашем псевдокоде. Я бы сказал, это идет к середине из списка, эта строка кода. А потом, когда мы идем в середине список, следующее, что мы должны сделать, это проверить, если наша ценность есть для псевдокод мы писали ранее. Так как же мы проверяем, если наша ценность находится в середине списка? Вы. Почему бы вам не сделать это? СТУДЕНТ: Если наша ценность является в середине равна все, что мы установить - Я имею в виду равна равна - Джейсон Хиршхорн: Это - ОК. СТУДЕНТ: Я не уверен, что Переменная мы ищем ибо, хотя, потому, что - [вставляя ГОЛОСА] СТУДЕНТ: [неразборчиво]. Джейсон Хиршхорн: Совершенно верно. За объявлении функции, мы ищем значение. Так мы ищем значение в массиве значений. Таким образом, вы совершенно правы. Вы будете делать, если она открыта скобка значение кронштейн средний закрыт кронштейна равных равна стоимости, а внутри Что же мы должны делать? Если наша ценность там, что мы должны сделать? [вставляя ГОЛОСА] СТУДЕНТ: Вернуться к нулю. Джейсон Хиршхорн: Вернуться правда. СТУДЕНТ: Вернуться правда. Джейсон Хиршхорн: Михаил, что же это линия делать? СТУДЕНТ: [неразборчиво] программа запуска его курс, и что закончилась, и у Вас есть, что вам нужно делать? Джейсон Хиршхорн: Программа или что? В этом случае? СТУДЕНТ: Функция. Джейсон Хиршхорн: Функция. И вот, чтобы вернуться к тому, что называется это и дать ему значение, правда. Совершенно верно. Главная. Что возвращаемый тип из основной, Майкл? СТУДЕНТ: внутр, целое? Джейсон Хиршхорн: внутр, точно. Целое. Это был просто вопрос, чтобы убедиться, вы, ребята, были на нем. Что это, как правило, вернуться, если все работают хорошо? СТУДЕНТ: Ноль. Джейсон Хиршхорн: Ноль. Совершенно верно. СТУДЕНТ: Если это просто возвращает истину, нет информации уделяется о том, что - О, это просто говорю, что это значение внутри массива. Джейсон Хиршхорн: Совершенно верно. Эта программа не дает информации от того, где именно это значение. Это только говорят, да, мы нашли это, или нет, мы не нашли его. Так что, если число найдено, вернуться верно. Ну, на самом деле мы просто сделали, что действительно быстро с этой одной строки кода. Так что я буду двигаться, что линию псевдокоде. СТУДЕНТ: Не нужно изменить массив? Она должна быть значений, а не стоимость, не так ли? Джейсон Хиршхорн: Извините. Спасибо. СТУДЕНТ: Да. Джейсон Хиршхорн: Эта линия должны быть значения. Совершенно верно. ОК. Таким образом, мы смотрели на среднем списке. Если число найдено возвращение правда. Продолжая с нашим псевдокоде, если средний больше, поиск осталось. Так что мне пришлось здесь, если число выше, поиск осталось. Константин, вы можете дать меня эта строка кода? СТУДЕНТ: Если значение середине - Джейсон Хиршхорн: Так что, если значение - если открыто скобка значения кронштейн средний закрывающая скобка - СТУДЕНТ: меньше, чем значение? Джейсон Хиршхорн: Меньше чем. СТУДЕНТ: меньше значения. Джейсон Хиршхорн: Значение. Ну, на самом деле, вы хотите проверка номера - Извините. Это немного сбивает с толку. Но еще, если число в середина списка больше. СТУДЕНТ: О, хорошо. Джейсон Хиршхорн: Я буду изменить эту ситуацию. Иначе, если средний выше, мы Для поиска слева, хорошо? И что же нам делать внутри это, если состояние? СТУДЕНТ: Могу ли я сделать небольшое изменение в условие, изменить его на другое, если? Джейсон Хиршхорн: Иначе, если? ОК. Так что это код будет выполняться о том же. Но хорошая вещь об использовании, если, еще если, в противном случае или, если иначе, если, еще означает, что только один из тех, собирается быть проверены, не все три из них, потенциально. И это делает его немного приятнее на компьютере, это выполнение вашей программы. Так [? Константин,?] мы внутри этой линии, иначе, если значения, кронштейн среднего закрывающая скобка больше, чем значение. Что мы должны сделать? Мы должны искать левую. Как мы это делаем? Я собираюсь дать вам начать. У нас есть эти две вещи, называемые начиная и заканчивая. Так что должно произойти к началу? Если вы хотите найти слева от Список, мы получаем наш Начало тока. Что нам нужно сделать? СТУДЕНТ: Положим начало в середине плюс 1. Джейсон Хиршхорн: Так что, если мы поиск левую? СТУДЕНТ: К сожалению, средний минус - так концовка будет средним минус 1 и начало - Джейсон Хиршхорн: А что происходит с самого начала? СТУДЕНТ: Он остается тем же самым. Джейсон Хиршхорн: Так значение остается неизменным. Если мы ищем левую, мы с использованием тех же начало - Совершенно верно. И заканчивая? К сожалению, то, что делает заканчивая равно снова? СТУДЕНТ: Ближний минус 1. Джейсон Хиршхорн: Ближний минус 1. Теперь, почему минус 1, а не только средний? СТУДЕНТ: середина из картина уже, потому что мы имели проверил, что это вне? Джейсон Хиршхорн: Это Совершенно верно. Середина из картины. Мы уже проверили середину. Таким образом, мы не хотим "середину", цитату конец цитаты, чтобы продолжать быть в Массив, что мы ищем. Так что это фантастически. Иначе, если значения кронштейн среднего больше чем значение заканчивая равных средний минус 1. Джефф, что по этому поводу последней строке? СТУДЕНТ: остальное. Значения среднего меньше стоимости? Джейсон Хиршхорн: Мы будем вы даете мне еще. Так что если вы не дадите мне - СТУДЕНТ: Итак, начиная будет средним плюс 1. Джейсон Хиршхорн: Начиная равно средний плюс 1, опять же, за то же самое Причина, по которой Константин дал нам ранее. И в конце концов, кто не дал меня строка кода еще? Вернуться ложное, Aleha, что мы пишем здесь? СТУДЕНТ: Вернуться ложным. Джейсон Хиршхорн: Вернуться ложным. И мы должны сделать это, потому что если мы не найти его, мы должны сказать, мы не нашли его. И мы сказали, что мы собираемся вернуться логический, так что мы определенно должны вернуться BOOL где-то. Так что давайте запуском этого кода. Я на самом деле собирается - так что мы в терминале. Мы очистить наше окно. Давайте сделаем все. Мы обнаружили, что одна ошибка. Там в ошибке в строке 15, ожидается Точка с запятой в конце Декларация. Итак, что же я могу забыть? СТУДЕНТ: Точка с запятой. Джейсон Хиршхорн: Точка с запятой прямо здесь. Я думаю, что был код Тома. Так Том, [неразборчиво]. Шучу. Давайте же сделать все снова. СТУДЕНТ: Что каталог Dropbox мы должны быть в для этого? Джейсон Хиршхорн: Таким образом, вы можете просто смотреть на этот бит. Но опять же, если вы хотите, чтобы переместить это код в ваш каталог pset3 попробовать это, вот что я сделал. Если вы заметите здесь - жаль, хороший вопрос. [? LS,?] У меня есть здесь код find.c из кода дистрибутива на этой неделе. У меня есть helpers.h. У меня есть Make-файл, который я на самом деле слегка изменена, чтобы включить эти новые файлы мы пишем. Все, что код будет доступен, не код распределение, но новый Сделать файл, новый файл helpers.h будет быть доступны в Интернете для скачивания. Опять же, так что те, являются дополнительные коды у нас есть. Так что все, за этой линии, делает найти, двоичный, выбор пузырь - марки все трое и компилирует в это исполняемый код находка. Так вообще, мы не хотим, чтобы прямо в check50. Мы хотим, чтобы выполнить некоторые тесты самостоятельно. Но именно так мы можем ускорить этот немного, check50 2013 pset3.find пройдет в helpers.c-- мое плохое. У меня нет, что прямо сейчас. Так что мы на самом деле собирается запустить код по-настоящему. Usage.find /, вы знаете, что это значит? СТУДЕНТ: Вам нужен второй командной строки на нем. Джейсон Хиршхорн: мне нужно Второй командной строки. И в соответствии со спецификацией, мне нужно ввести то, что мы ищем. Итак, давайте взглянем на 42. Мы будем держать его в отсортированный, потому что мы не написали функцию сортировки еще - 42, 43, 44. И управления D не нашли Иголка в стоге сена. Это плохо. Это определенно есть. Давайте попробуем что-то еще. Может быть, это потому, что я положил это в самом начале. Давайте сделаем 41, 42, 43. Там мы идем. Это его нашли. Скажем в конце сейчас, просто так что мы можем быть тщательным - 40, 41, 42. Не нашли иглу. Так что я говорил об этом раньше. К сожалению, я знал, что это должно было случиться. Но в педагогических целях, это хорошо, чтобы исследовать его. Это не работает. По некоторым причинам, он не может найти его. Мы знаем, что там, но мы не находя его. Таким образом, одна вещь, которую мы могли сделать, это пройти через GDB, чтобы найти его, но делает никого, минуя GDB, есть Чувство, где мы облажались? [? Маду? ?] СТУДЕНТ: Я думаю, что это может быть, когда заканчивается равна начала, и это просто список из одного элемента. Тогда он просто игнорирует его вместо фактически проверяя его. Джейсон Хиршхорн: Это Совершенно верно. Когда окончание равна начало, мы еще есть элемент в нашем списке? СТУДЕНТ: Да. Джейсон Хиршхорн: Да, на самом деле, мы есть один и только один элемент. И это, скорее всего, произойдет, когда, за коде мы тестировали, мы находимся в Передняя часть стоге сена или, по крайней конец сена. Вот где начало и окончание собирается равно один, с бинарного поиска. Таким образом, в этих двух случаях он не работает, потому заканчивая был равен начала. Но если заканчивая равна начала, ли это, в то время как цикл выполнить? Это не так. И мы могли бы проверили что опять же через GDB. Так как мы можем исправить этот код, потому что когда то время как окончание равна начиная, мы также хотим, чтобы этот в то время как петля для запуска. Так что исправление мы можем сделать, чтобы выровнять 18? СТУДЕНТ: [неразборчиво] больше или равно. Джейсон Хиршхорн: Совершенно верно. В то время как окончание больше или равна начала. Так что теперь, мы уверены, чтобы получить, что угол случай в конце. И давайте посмотрим. Давайте запустим этот еще раз. Давайте сделаем все. Опять же, вам придется просто следовать вместе здесь. Найти 41 на этот раз. Просто держать его в соответствие. Найти 42. Скажем в начале - 42, 43, 44. Мы нашли его. Так, чтобы было действительно изменение мы должны были сделать. Это было много кодирования мы только что сделал, бинарный поиск. Кто-нибудь есть любые вопросы перед Я перейду в линии мы писали в бинарный поиск или как мы полагали, то, что мы не выясняли? Прежде чем мы перейдем, я также хочу отметить , что по большому счету, мы сопоставили наша псевдо-код от одного до один на наш код. У нас действительно были, что сложная вещь чтобы выяснить, с начиная и заканчивая. Но если бы вы не поняли, что из, вы написал бы в значительной степени идентичны код, за исключением эти два верхних строках. И тогда вы бы поняли, когда Вы сделали это в сдержек и случаях, которые нужно что-то еще. Так что даже если вы следовали нашим псевдо-код строки к строке, вы бы уже получили все, кроме двух линий код, который вы должны были написать. И я был бы готов поспорить, что вы, ребята, бы все понял, что из довольно быстро, что вам нужно, чтобы положить своего рода маркером туда, чтобы выяснить , где вы были. Это опять же, есть сила делать псевдо-код загодя. Таким образом, мы можем сделать логику, а затем мы можем беспокоиться о синтаксисе. Если бы мы были смущены о логике при попытке записать этот код в C, мы получили бы все испортил. А потом мы будем задавать вопросы о логика и синтаксис и сцепление их все вместе. И мы получили бы потерянным в том, что может быстро стать очень трудная задача. Так давайте перейдем теперь к выбору вида. У нас есть 20 минут в запасе. Поэтому у меня есть чувство, что мы не сможем пройти через все выбора рода и пузырьковой сортировки. Но давайте по крайней мере, попытка закончить выбора рода. Так реализации выбор рода помощи Следующий объявление функции. Опять же, это взято из Проблема установить спецификацию. Int значения является скобки, является массив целых чисел. И int.n является размер этого массива. Рода Выбор собирается сортировать этот массив. Так в соответствии с нашей ментальной модели отбора рода, мы тянем - Сначала мы пройдемся по списку первым Время, найти наименьшее число, положить его в начале, найти вторую наименьшее число, положить его в Вторая позиция, если мы хотим вроде в порядке возрастания. Я не заставляю вас писать псевдо-код прямо сейчас. Но прежде, чем мы делаем код как класс в пять минут, мы собираемся написать псевдо-код, поэтому мы должны некоторый смысл от того, где мы идем. Так пытаться записать псевдо-код по своему усмотрению. А потом пытайтесь повернуть, что псевдо-код в код. Мы сделаем это в качестве группы через пять минут. И, конечно, дайте мне знать, если у вас есть какие-либо вопросы. СТУДЕНТ: Что это? Джейсон Хиршхорн: Посмотрите, как далеко вы можете получить в более двух минут. Я понимаю, вы не будете быть в состоянии закончить. Но мы пойдем на это в группе. Вы все кодирования так [неразборчиво], поэтому я жаль, чтобы приостановить, что вы делаете. Но давайте пройдем это как группы. И снова, бинарный поиск, вы все дают мне один, если не больше строк кода. Спасибо Вам за это. Мы собираемся сделать то же самое здесь, код вместе как группа. Так выбор рода - давайте напишем В результате быстрой псевдо-код. За ментальной модели, может кто-то дать мне первая линия псевдо-код, пожалуйста? Что я хочу сделать? СТУДЕНТ: В то время как список вышел из строя. Джейсон Хиршхорн: Хорошо, в то время как Список вышел из строя. А что вы имеете в виду "не в порядке?" СТУДЕНТ: В то время как [неразборчиво] не сортируются. Джейсон Хиршхорн: В то время как список вышел из строя, что же нам делать? Дайте мне вторую линию, пожалуйста, Маркус. СТУДЕНТ: Так найти следующий наименьшее число. Это будет с отступом. Джейсон Хиршхорн: Так найти Следующий наименьшее число. А потом кто-то еще? Как только мы найдем следующий по величине число, что же нам делать? Я собираюсь сказать, найти наименьшее число. Это то, что мы хотим сделать. Так что найдите наименьшее число. Тогда что же нам делать? СТУДЕНТ: [неразборчиво], чтобы начала. Джейсон Хиршхорн: Извините? СТУДЕНТ: Поместите его в начале списка. Джейсон Хиршхорн: Так поместите его в начало списка. И что же нам делать, чтобы вещи что было в начале из списка, не так ли? Мы перезаписи что-то. Так где же мы ставим, что? Да, Анна? СТУДЕНТ: Где самый маленький число было? Джейсон Хиршхорн: Так положил начало списка, где Наименьшее число было. Таким образом, хотя этот список не в порядке, найти наименьшее число, поместите его в начало списка, положить начало списка, где Наименьшее число было. Маркус, вы можете перефразировать эту линию в то время как список не в порядке? СТУДЕНТ: В то время как число не были отсортированы? Джейсон Хиршхорн: Итак, для того, чтобы знаю, что номера не были сортируются, что мы должны сделать? Сколько нам нужно пройти через этот список? СТУДЕНТ: Так что я думаю цикл, или в то время как, в то время проверили номера меньше чем длина списка? Джейсон Хиршхорн: ОК, это хорошо. Я думаю, что misphrased мой вопрос плохо. Я просто пытаюсь получить на мы собираемся должны пойти через весь список. Таким образом, хотя этот список не в порядке, для меня это трудно сопоставить на. Но в принципе, это, как Я думаю об этом. Пройдите весь список, найти наименьшее число, поместите его в начиная - на самом деле, вы правы. Скажем их обоих. Таким образом, хотя этот список не в порядке, мы нужно идти через весь список один раз, найти наименьшее число, место это в начале списка, положить начало списка, где Наименьшее число было, а потом, если Список по-прежнему не в порядке, у нас должны пройти через это Процесс снова, не так ли? Вот почему выбор рода, среда Большой-O отборочного рода, кто? СТУДЕНТ: Н в квадрате. Джейсон Хиршхорн: Н в квадрате. Потому что, как Маркус и я просто понял, здесь, мы собираемся должны пройтись по списку список количество раз. Так переживает нечто Длина п п число раз на самом деле н квадрат. Так что это наш псевдокод. Это выглядит очень хорошо. Кто-нибудь есть какие-либо вопросы о псевдокоде? Потому что на самом деле выбор рода должны вероятно, прийти 12:59, кода из псевдокод. Поэтому все вопросы о Логика псевдокоде? Пожалуйста, попросите его сейчас. Рода Выбор - в то время как список из порядка, мы собираемся пройти через это и найти наименьшее каждый раз и положил его в передней. Таким образом, хотя этот список не в порядке, может кто-нибудь дать мне эту строку кода, который не дал мне пару строк кода еще, пожалуйста? Это звучит как что? СТУДЕНТ: Это цикл. Джейсон Хиршхорн: Это звучит нравится цикл. Хорошо, вы можете дать мне для цикла? Для - СТУДЕНТ: я равна 0. Джейсон Хиршхорн: я или - что же нам не хватает? То, что происходит прямо здесь? СТУДЕНТ: Int. Джейсон Хиршхорн: Совершенно верно. (INT = 0; - СТУДЕНТ: <п; я + +). Джейсон Хиршхорн: прибил его, Джефф. Мы собираемся по списку, не так ли? Мы видели, что код раньше. Прекрасно. Так давайте поставим наши фигурные скобки здесь. Я собираюсь поставить некоторые Фигурные скобки здесь. Таким образом, хотя это 0, мы должны пойти через весь список. Таким образом, каждый раз, когда мы пройдемся по списку, что мы хотим, чтобы отслеживать? СТУДЕНТ: Если какие-либо свопы сделаны. Джейсон Хиршхорн: Найти наименьшее число. Таким образом, мы, вероятно, следует отслеживать наименьшее число каждый раз. Так линия я могу сделать, чтобы отслеживать наименьшего числа? Aleha, как я могу держать трек-то? СТУДЕНТ: Начните новую переменную. Джейсон Хиршхорн: Начните новую переменную. Так давайте создадим переменную. Какой вид? СТУДЕНТ: Int. Джейсон Хиршхорн: Int. Давайте назовем это самый маленький. И то, что делает его равным, когда мы только начинают свою деятельность? Мы не пошли по списку еще. Мы находимся в первой части список в наш первый раз до конца. Что его равным, наименьшее число? СТУДЕНТ ценностей, которые я. Джейсон Хиршхорн: ценностей, которые я. Это звучит совершенно верно, не так ли? Наименьшее число в начале где мы находимся. Так что теперь у нас есть маленький, и мы должны пройти через весь список и сравнить это маленький со всем остальным. Так что мы идем по списку снова? Майкл? СТУДЕНТ: Вам нужно сделать другой цикл. Джейсон Хиршхорн: Другой цикл. Давайте сделаем это. Дайте мне код. СТУДЕНТ: Для цикла - для самых маленьких - просто Int J, не могли бы вы сказать? = 0; таким образом, что - Джейсон Хиршхорн: Ну, если мы хотим пройти через весь список - СТУДЕНТ: J <п, J + +). Джейсон Хиршхорн: Фантастика. Мы собираемся пройти через цикл еще раз. И как мы можем найти наименьшее число? Том? У нас есть текущий наименьшее число, так как мы можем найти новый маленький? СТУДЕНТ: Мы можем проверить, если наименьшая число у нас есть больше, чем значения кронштейн J. Джейсон Хиршхорн: Так что, если наименьшим больше, чем значения кронштейна у. Так что, если наша нынешняя маленький больше - Я собираюсь двигаться эти две строки кода там на секунду. Потому что, прежде чем делать какие-либо замену, мы нужно идти через весь список. Так что это псевдокод должны на самом деле быть вне что внутренняя цикла. Так что через весь список. Если маленький больше то значения J и что? СТУДЕНТ: Тогда маленький равна значения J. Джейсон Хиршхорн: Фантастика. Один быстрый вопрос - в первый раз мы идем через эту петлю, я собирается равняться 0, J собирается равным 0, как только мы сюда попали. Таким образом, мы собираемся сравнивать ряд себе. Разве что эффективнее? Нет, это не совсем эффективно. Так же наша J нужно идти от 0 до п каждый раз? Всегда ли мы должны проверить через весь список? [Неразборчиво]? СТУДЕНТ начала я вместо этого. Джейсон Хиршхорн: J банку начать с чего? СТУДЕНТ: я. Джейсон Хиршхорн: J можете начать с I. Так что теперь мы сравниваем начиная с той, которую мы находитесь. Но даже тогда, является то, что в качестве эффективным, насколько это возможно? СТУДЕНТ: + 1. Джейсон Хиршхорн: + 1, кажется, наиболее эффективным, потому что мы уже есть я. Мы о том, что, как маленький в строке 15. Мы собираемся начать с следующий автоматически. Так мы проходим цикл. Мы пойдем через каждый раз. Мы пойдем через количество раз. Теперь мы получили через это внутреннее цикла. У нас есть наименьшее значение спасает. Нам нужно, чтобы поместить его на начале списка. Так как я могу разместить его на начале списка? Что такое переменная, которая ссылается в начале списка? Мы находимся в этой внешней цикл, ну и что относится к начале списка? СТУДЕНТ ценностей, которые я. Джейсон Хиршхорн: Совершенно верно. Значения я это начало - или жаль, не начало. Это было заблуждение. Это место, где мы находимся в начале несортированный часть списка. Так оценивает я. А что значит, что равны? СТУДЕНТ: Наименьший. Джейсон Хиршхорн: Значения я равна что? СТУДЕНТ: Наименьший. Джейсон Хиршхорн: Наименьший. Совершенно верно. Таким образом, мы поместив его в начале из списка, и теперь мы должны поставить начало списка, где наименьшее число было. Так как я могу написать, где Наименьшее число было? Значения что? СТУДЕНТ: 0. Джейсон Хиршхорн: Небольшой число это на 0? СТУДЕНТ: Да. Джейсон Хиршхорн: Что делать, если маленький число было в конце это несортированный список? СТУДЕНТ: К сожалению, какой был вопрос? Джейсон Хиршхорн: Где наименьшее число? Мы взяли самый маленький и положил его на начиная с этой линии прямо здесь. СТУДЕНТ: Он должен иметь сохранена в некоторых - СТУДЕНТ: Значения J. Джейсон Хиршхорн: Ну, это не обязательно значения J. Это даже не существует на данный момент. СТУДЕНТ: Вы должны объявить переменная раньше и затем назначить его - когда вы найдете наименьшее число, назначить индекс этого числа в некоторая переменная или что-то вроде этого. Джейсон Хиршхорн: Так может вы говорите, что снова? СТУДЕНТ: Итак, где вы заявили Int маленький, вы должны также объявить Int наименьший индекс = я, или что-то в этом роде. Джейсон Хиршхорн: Так где я десятичного маленький, я должен не только отслеживать стоимости, но расположение. внутр smallest_location = в этом так, мы просто делают я. Нам нужно знать, где он находится. Мы добрались до конца кода, и мы понял, что мы понятия не имели, где это было. И так снова, мы отображение это на 12:59. Вы, ребята, кодирующие это на свой страх и воли вероятно, получить к той же проблеме. Как, черт возьми, я нахожу это? И тогда вы поймете, подождите, я нужно отслеживать, что. Так что, если маленький больше чем значения J. Мы установили маленький равна значений у. Что еще нам нужно изменить? Константин, что еще сделать, мы должны изменить? СТУДЕНТ: Расположение. Джейсон Хиршхорн: Совершенно верно. Так дайте мне эту строку в коде. СТУДЕНТ: smallest_location = у. Джейсон Хиршхорн: Совершенно верно. А потом упал в конце, если мы хотим положил начало списка, где наименьшее число было, как мы см. где Наименьшее число было? Маркус? СТУДЕНТ: Наименьшее число было расположен в маленькой месте. Джейсон Хиршхорн: Так при значениях smallest_location. И что же мы поставить там? Начало Список, что это такое? СТУДЕНТ: Ну, мы действительно не знаем, больше, потому что мы переписал. Так что это поменялись места из этих двух линий? При переключении эти две линии вокруг. Джейсон Хиршхорн: Итак, мы не больше, потому что мы сбросить линию до значений я до маленьких. Таким образом, мы потеряли эту начальное значение. Так вы сказали своп эти две линии. Так что теперь положил начало списка где наименьшее число было. Так smallest_location равна ценности я. Это движется начале этого несортированный часть списка на маленький место. А потом в значения я мы движемся что наименьшее число. Имеет ли это смысл, почему мы должен был сделать, что своп? Мы бы переписаны это значение - другое дело, вы бы, наверное, понял, и найти в ВВП. Таким образом, мы позаботились все псевдокод. Есть ли что-нибудь еще, что мы нужно написать здесь? Кто-нибудь может думать ни о чем? СТУДЕНТ: Как вы знаете, когда вы закончите? Джейсон Хиршхорн: Как мы знаете, когда мы закончим? Большой вопрос. Так как же нам знать, когда мы закончили. СТУДЕНТ: Создайте переменную, чтобы держать счет из, если есть своп сделал или нет и пройти через проход. Джейсон Хиршхорн: ОК. Это было бы работать в пузырьковой сортировки. Но для выбора рода, если мы не будем сделать обмен, что может быть просто потому что наименьшее значение в нем его правильное расположение. Мы могли бы иметь список 1, 2, 4, 3. Во второй раз через мы не будет делать никаких свопов. Мы будем на числа 2, но мы будем еще нужно, чтобы продолжать идти. Так что нам нужно отслеживать, когда мы сделали, или же мы просто хотим, чтобы пойти пока это не будет закончено? СТУДЕНТ: Мы можем просто пойти пока она не будет закончена. Джейсон Хиршхорн: Мы можем просто идти, пока это не закончено. В пузырьковой сортировки, вы совершенно правы, Джефф и Aleha, с вашим решением - это здорово, чтобы отслеживать, сколько свопы вы сделали, потому что в пузырь рода, если вы на самом деле не делают никаких свопов, вы закончите, и вы можете возможно сократить ваши Проблема немного вниз. Но для выбора рода, вы, действительно надо идти до конца в список каждый раз вокруг. Таким образом, это то. У нас есть две минуты осталось. Давайте сделаем все. Позвольте мне просто открыть Найти здесь и сделать уверен, что я на самом деле вызова - Я не называю пузырьковую сортировку. Давайте изменим это в мой выбор рода. сделать все. / найти. Давайте узнаем 42. На этот раз мы собираемся пройти несортированный список, потому что она может решить во-первых, в соответствии с кодом найти - должны разобраться Первый, использующих нашу функцию сортировки, а затем искать что-то. Пальцы скрещены всех. О боже мой. Эй, мое сердце билось. Так что это правильно. В самом деле, если мы побежали это более широко, код, насколько я могу сказать, совершенно правильно. Есть некоторые предложения, Я бы за вас. Например, 15 и 16, кажется немного излишним. Кажется, что вы не обязательно необходимо сохранить и те. Если у вас есть наименьшее месте, вы можете легко найти наименьшее значение по просто набрав значения I. Так что, если бы я должен был быть классификации кода, который я фактически будет, я бы вероятно, снять точку, если вы включены оба из них, потому что вам не нужно обоих из них. Если у вас есть место, вы можете очень легко получить значение. И, кажется, немного странно хранить их обоих. Может быть, даже не взять точку, но конечно комментировать, что это может быть, не стилистический выбор Вы должны сделать. Конечно, код по-прежнему работает на отлично. Поэтому, к сожалению, мы не сделали добраться до пузырьковой сортировки. Я сожалею об этом. Мы сделали финишную выбора рода. Кто-нибудь есть какие-либо окончательные вопросы о выборе рода? Хорошо, прежде, чем мы кочан, я хочу, чтобы вы открыть свой Chrome браузер. К сожалению, это было просто вопиющим плагин для одного типа интернет-браузера. Вы можете открыть любой тип браузера, но это, вероятно, будет Chrome. И пойти в этот следующем веб-сайте - sayat.me/cs50. Если вы не печатаете на компьютере Прямо сейчас, вы четко не делаю это, Том. И, пожалуйста, сделать это либо прямо сейчас или в течение следующего часа - дать мне некоторую обратную связь. Это только раздел два. У нас есть еще много вместе, поэтому я есть много места для улучшения. Я надеюсь также сделал некоторые вещи хорошо. Таким образом, вы можете заставить меня чувствовать себя все так плохо, но если Вы также хотите, чтобы дать мне смайлик лицо, я был бы признателен, что хорошо. Заполните, что дюйма И с одной минуты налево, что было три недели. Я буду стоять за некоторое время если у вас есть какие-либо вопросы. Я увижу вас, ребята в лекции завтра.