ПРОФЕССОР: Так повестка дня на этой неделе, не то, что много вещей. Но мы надеемся, очень, очень полезно и отношение к вам, ребята на этой неделе. Но мы собираемся провести, может быть 15, 20 минут просто быстро говорить о списке ссылок. Списки Link собираетесь быть покрыты на викторине. Так что, возможно, было бы очень полезно чтобы узнать немного о том, что есть. Мы собираемся провести подавляющее Большинство сегодняшних разделе переходя викторины ноль проблем практики. И тогда мы, может быть, будете экономить 20, 30 минут в конце для любых сохраняющихся вопросов кто имеет. А потом, в последний пять минут, я собираюсь выступить с речью насоса для викторины. Вы, ребята, все хотим быть здесь для этого. Потому что это будет хорошее время. Ладно, так что некоторые Материал на список ссылок. Как правило, они структурированы является у вас есть то, что называется узел, верно? Вы эти вещи, называемые узлы, которые являются структурами. Я пойду над тем, как создать узел на следующем слайде. Но по сути все связаны списков это данные, была нанизанные с помощью указателей. И поэтому у нас есть преимущество использования связанного списка в течение, возможно, как массив, это тот факт, что в массиве вам нужна одна непрерывный блок памяти все в том же месте, один за другой, чтобы иметь возможность этого. В то время как связанный список, вы могли бы имеют случайные кусочки памяти по всему компьютеру нанизанные указателями. И в этом, как вы может получить доступ к информации что приходит один за другу, за другим без необходимости просто огромный кусок памяти в компьютере где-то. И так это один из важнейших причин, почему мы используем список ссылок. Во-вторых, это очень легко динамически размер список ссылок, потому что в массиве, когда вы объявляете массив, у вас есть определенный набор значение. Скажем, я хотел, чтобы создать массив из 10 целых чисел. Я создаю массив 10 целые числа, и это все. Это 10. Я не знаю, что делать после этого. Если бы я хотел, чтобы сделать его 11, не может это сделать. Если я хочу, чтобы сделать его 9, не может это сделать. В то время как в списке ссылок, вы можете добавлять и удалять и вставлять везде, где вы хотите. Вы можете динамически изменить размер структурировать здесь, структуру данных. И это дает нам много более дополнительную гибкость что мы обычно не есть с массивами. Любой путать на основной Структура, как список ссылка или почему мы должны использовать один над массивом? Да, мы пойдем по детально как на самом деле создать. Но это только отчасти общий смысл прямо сейчас. Круто. И так массивы нанизанные этих милых мелочей называемые узлы. Все узел является тип структуры. Помните, структура, если вы хотели чтобы создать определенный тип переменной в С, не уже существует, вы, как программист, может действительно создать сами. И так этот тип данных Структура называется узлом, фактически было создано нами, что не существует в C по себе. И так, что вы создать один у вас есть заголовок ЬурейеЕ структуры, который говорит компилятору Я о, чтобы создать структуры. Мы собираемся это имя "узел". А внутри мы собираемся объявить переменную в, который будет хранить значение. И тогда мы также собираемся есть указатель называется "рядом" что указывает на следующий узел в список ссылок. И тогда вы закончите, что от , просто повторяя узел снова так компилятор знает, ОК что это конец моей структуры. И поэтому в этом случае, мы вроде создания милый маленький массив Такие вещи с Значение и с указателем. И вы можете связать их все вместе с этим указателям. Так что все они могут быть своего рода нанизанные в цепи. Круто. Вы можете услышать, что немного лучше? АУДИТОРИЯ: Да. ПРОФЕССОР: Все правильно. Таким образом, путь, который, как вы, ребята, можете увидеть, типичный список ссылок структурирована это у вас есть голова. Вы имеете значение головной который не время отметил любым другим указателем. Но это будет указывать на, или ссылка, другой узел. Узел после будет ссылаться на Узел после этого, и так далее и тому подобное пока вы в конечном итоге не попал конец вашего списка ссылок. И вы просто не будете иметь указатель есть. И так, думаю, как, по цепочке, или даже если любой из вас, ребята, сделанных, я не знаю как с фруктовыми Loops когда вы были маленьким. Вы бы строка их вместе и носить их на шее. Думаете, что это тот же самый вещь. Вы должны эти маленькие вещи, которые вы может соединить вместе, что точка к одному После этого, в одном после это и так далее и тому подобное пока у вас есть цепь структуры данных что вы можете использовать, как вам нравится. Таким образом, путь, который мы бы это как правило, вставить или удалить любой узел по ссылке Список очень отличается В зависимости от места, что узел. Так, например, из-за указатели всегда указывая при определенном значении, при удалении или вставить узел, Вы хотите, чтобы убедиться, что указатель это все указывая на правильных вещах. Так что, если вы хотите, чтобы вставить потенциально новый узел со значением одного внутри отсортированного ссылку Список, все мы знаем, здесь от картины, что происходит в перейти в между головой и два, правильно? Потому что подходит прямо там. Но путь, в котором мы бы, что это сначала разыменования указателя с головы и отправки, что к одному. Но мы придем в задачи здесь. Может кто-нибудь увидеть, что проблема если мы должны были первой разыменования указатель с головы до одного? Что проблема может бежим в, если мы попытаемся чтобы добавить это к фронту нашего массива? АУДИТОРИЯ: [неразборчиво] ПРОФЕССОР: Точно. Так вот у нас есть указатель, который был когда указывая от головки до двух. Но если вы избавиться от этого указатель, вы указываете его в один, мы теперь не имеют ни малейшего понятия куда идти, чтобы найти два. Потому что, как я уже говорил, вы получили гигант кусок памяти в вашем компьютере. Все эти узлы мог случайно перемежаются в любом месте на вашем компьютере. И вы не знаете, как чтобы идти о поиске, что. И поэтому вы должны иметь указатели указывая на все узлы на конце. Или, если вы случайно разыменовать одного без первого присвоения значение первых, вы просто хочу, чтобы потерять все потом. Так что мы собираемся сделать, вы должны сначала хотите создать указатель на узел вы хотите вставить. Направьте его туда, где вы хочу, чтобы вставить его в, а затем после вы может указывать голову к одному. Имеет ли это смысл для всех здесь? Отлично. Думайте об этом как раз как цепь. Если вы добавляете цепочку, это своего рода интуитивное как бы вы идти о вставке, что. ОК, так что это на самом деле гораздо короче я думал, что это будет, в пяти минутах злоключениях в списках связи. Точно так же вы, ребята, есть Основная идея, что это такое. Здесь мы имеем повестку дня викторины нулевой. Не позволяйте этому запугать вас. Я знаю, что это много информации. Это выглядит очень страшно. Это также много, я думаю, CSC рода условиях. Такие вещи, как шестнадцатеричных строк, указатели, выделение динамической памяти очень страшно звучащие термины. Но мы собираемся, чтобы разорвать их вниз, сделать некоторые проблемы практики так что вы, ребята, все готовы для этого теста. Как многие из вас, ребята, есть уже начал изучать? ОК, вы, ребята, вероятно, хотите, чтобы начать получать начал на что, потому что викторина завтра. Или четверг для некоторых из вас. Да, таким образом мы собираемся идти над некоторыми проблемами практики. Если вы, ребята, все хотим, чтобы принять из листа бумаги, карандаш. Мы собираемся, чтобы просто провести Подавляющее большинство сегодняшних разделе переходя некоторые, что так вы, ребята, идея о том, что ожидает викторины. ХОРОШО. Пару материально Подробнее, а также, для кого кто не был в этой связи там, если Вы идете в cs50.yale.edu, на передней Эта страница существует связь что говорит "О Викторина Zero." Ссылка приведет вас туда. Если вы не читали его, пожалуйста, прочитайте его. Потому что он говорит вам действительно важно информация о викторине. Я собираюсь осуществить это из что только потому, что физически, если вы, ребята, не знаю, где идти, у нас будут проблемы. И поэтому, если ваш последний в отношениях с А в N, перейдите к юридической школы зала. И если ваши последние начинается с P в Z, перейдите к Дэвис аудитории. И это относится только к люди в разделе среду. Если вы принимаете викторину на Четверг, вы идете в SSS 114 где ваш лекция, как правило, есть. АУДИТОРИЯ: [неразборчиво] ПРОФЕССОР: вывода Z, вы собираетесь идти в зал Дэвис. Я собираюсь изменить это, верно? Ах, да, вы просто не в состоянии автоматически. Ах да, вот вы Криста. Да, мой плохой. Да, вывода Z, вы собираетесь чтобы перейти к Дэвис Auditorim. Я собираюсь исправить это, как только я загрузить. Да. И тогда тоже что-то Важно виду является то, что среда, если вы официально поступил в разделе среду, Вы должны принять вашу викторину в среду. И если вы зачислены в четверг, Вы должны принять вашу викторину Четверг. И это во времена класса. Где, я думаю, это как 1:00 до 2:15 по средам и 2:30, чтобы 3:45 по четвергам. Если у вас есть неразрешимые конфликты, Оправданий Дина являются Единственное, К сожалению, мы можем принять. Потому что у нас было Подавляющее большинство запросов для переключения со среды на четверг. Какие мы не можем почтить если у нас есть запрос на Дина. ХОРОШО. Поэтому, прежде чем начать на пара проблем практики, Я просто собираюсь перейти на Полезные советы Энди успеха. Ребята, когда вы изучаете, вы действительно хотите практиковаться в написании кода вручную. В первый раз я когда-либо взял викторину CS, я не имел практика написания кода вручную до и это было чрезвычайно шокирует, как трудно это было. Когда вы, ребята, не попасть в Привычка набрав из всего, она очень естественно быть состоянии, что autocompleted Кронштейны и запятой там. Когда вы пишете его вручную, иногда это очень, очень легко забыть запятой, или забыть, чтобы закрыть скобку, или забыли закрыть двоеточие, или что-то вроде того. Итак, когда вы пишете код вручную, это очень разные чувства. Таким образом, вы ребята, когда вы работаете через некоторые из проблем практики, было бы хорошо, чтобы действительно практиковать сегодня. Или завтра, я думаю, если вы принимая викторины в четверг. Во-вторых, у нас есть последний, как, восемь лет стоит практики викторины онлайн. Тест этом году, вероятно, будет очень, очень похожи на все из них. Они все очень похожи. Вы вроде попасть в стиль типа вопросов что мы просим, ​​тип Функции, которые мы напишем его в, и так далее, и так далее. Так что тренировочные тесты, особенно при ограничениях времени. 75 минут, чтобы сделать викторины не так много времени. Это очень, очень долго. И так вы, ребята, действительно хотите чтобы убедиться, что вы, ребята, в привычку написания Код рукой быстро. Потому что вы не хотите, первым время, чтобы увидеть викторину, длина которого на вашем викторины. Вы, ребята, действительно хотите, чтобы убедиться, что вы придерживаетесь заранее. В-четвертых, вы хотите, чтобы рассмотреть лекционные и раздел горки. Вы не должны запоминать вещи. На самом деле, каждый позволил один лист белой бумаги нот, спереди и сзади. Вы, ребята, можете ввести или писать. Если вы окажетесь необходимости запоминать что-нибудь, положил ее на этом листе. Я гарантирую вам, вы не хотите, чтобы застрял в середине этого викторины будучи, как, ах да, то, что это выполнения такого рода против такого рода. Просто положите его вниз и скопируйте его прямо с вашего ноте листа. Тогда вы можете просто использовать ваш мозг думать о проблемах вместо того, чтобы вспомнить факты. И так на самом деле воспользоваться из каких-либо деталей ниши что вы думаете, вам нужно запомнить, хлопнуть его на рассмотрения листа. ОК, какие-либо вопросы материально-технического обеспечения о викторину прежде чем мы начнем некоторые проблемы викторины придерживаетесь? Да? АУДИТОРИЯ: у меня не было шанса посмотреть на викторине [неразборчиво] но это будет Приложение в основном, или там тоже будет, как вопросы знания? ПРОФЕССОР: Это много. Так, так, что я будет описано викторины is-- я собрал некоторые проблемы практики что я вытащил из всех викторин. Но вы увидите, что есть два основных типы вопросов, которые мы будем просить вас. Одним из них является деталь очень низкий уровень вещи. Мы дадим вам небольшой фрагмент кода и сказать, есть ли ошибка здесь? Что бы печать здесь? Что этот код производить, и так далее. Так очень низкий уровень дополнительные сведения. И, с другой стороны, мы будем иметь очень Высокий уровень вопросов, основанных на знаниях. Можете ли вы объяснить, что Разница между двоичный поиск и линейный поиск? Почему мы хотели бы использовать один над другим? Может быть, то, что GDB? Почему мы хотим, чтобы использовать GDB? Более высокий уровень, более фундаментальный понимание вопросы. Таким образом, вы увидите смесь два из них на вашем викторины. Что-нибудь еще, прежде чем мы прямиком в нее? ХОРОШО. АУДИТОРИЯ: Еще один. ПРОФЕССОР: О, еще один. Сожалею. АУДИТОРИЯ: Да, все в порядке. Так вы говорите, 75 минут слишком короткий, как это вряд ли что мы закончим? Или, как, 75 минут Именно столько времени как мы должны были бы, если бы мы были соответственно подготовлены? ПРОФЕССОР: ОК, так что Тест является сложной задачей. Это, безусловно, интересно. Вы окажетесь на краткое время. Вы, наверное, собирается ударить, как 10, 15 минут, чтобы идти, и, будучи, как, дерьмо. Я так много осталось сделать. И это совершенно нормально. Все будет чувствовать себя так же. Просто очень хорошо осведомлены о сколько времени у тебя есть. И вот почему я говорю вам, Ребята делают практики викторины. Потому что это действительно дает большое чувство чего викторина собирается быть. Так что если вы окажетесь возможность закончил практику викторины в хорошем размере Время, вы можете изнурять себя хорошо, то вы не будете иметь проблемы в среду или в четверг. Круто. Так что, если все wants-- Я думаю, у большинства людей есть листы бумаги уже. Я собираюсь по существу только дать вам образцы вопросов, дать вам, ребята, вроде бы, Несколько минут, чтобы сделать их. И мы будем идти по как класс то, что ответы на них. Так что это очень типично ранний вопрос мы будем прошу вас, просто преобразование число между различными базами. Бинарные, как вы, ребята, можете Напомним, это база два. Десятичная основанием 10, или то, что мы как люди, как правило, интерпретировать. Шестнадцатеричное основание 16, которая равна нулю через девять, а также через F. Так что четыре числа я в прошу вас, ребята, чтобы преобразовать здесь. Я дам вам нравится, три четыре минуты, чтобы продумать, как мы бы идти о решении этого. АУДИТОРИЯ: Мы позволили калькуляторы? ПРОФЕССОР: Вы не будете нужно калькуляторы, да. Я думаю, что основная Кроме того, я думаю, все вы, ребята, будет предложено сделать. И только так я вроде есть чувство , когда каждый будет сделано, посмотрите вверх, волна, я не знаю,, улыбка, выглядят счастливыми, если вы сделали. Да. Может быть, еще пару минут. ОК, давайте привести его в. Я намеренно собирается дать вам ребята меньше времени чем вы, вероятно, нужно сделать некоторые из этих проблем, просто потому, что я хочу, чтобы убедиться, что мы получаем через кучу проблем. Так что не беспокойтесь, если вы не сделали есть шанс, чтобы закончить. Всего в порядке, пока у вас есть идея о том, как идти об этом. Так что давайте идти вперед и делать первый. Итак, сначала, кто-нибудь хочет сказать мне, в двоичном, что делают каждый из этих цифр представляют с точки зрения их значения? Да? АУДИТОРИЯ: Два в Мощность нулю, два к одному. ПРОФЕССОР: Точно. Так. Право, так, как правило, когда мы находимся в базе 10 Все они представляют, подобно, 10 к основанию нулю, так? Это твоя свое место. Все ваше место 10 является является 10 в степени одного. Место вам 100 составляет 10 к власти в два раза. Независимо база ты в собирается делать с той же самой вещи, только с другим основанием. Так двоичный, все, что является базой двух. Вы собираетесь конвертировать все цифры в два независимо мощности из этой цифры. И поэтому в этом смысле, мы может иметь более легкий путь быть в состоянии добавить вверх или просуммировать все номера в порядке преобразовать в базу 10. Так же кто-то хочет сказать мне, что Ответ на первый из них находится в базе десять? АУДИТОРИЯ: Два, [неразборчиво] ПРОФЕССОР: Да. АУДИТОРИЯ: 42. ПРОФЕССОР: 42, там вы идете. Так как мы получили этот ответ был по делать два первых, что в два. Плюс два третий, который восемь лет. Плюс два пятый, который это все, что осталось. Вы подвести их, и это 42. Кто-нибудь путают о том, как мы получили это? Так основная Кроме того, как Я сказал, вы должны быть в порядке. Если нет, ну, мы можем практиковать это. Но это все в порядке. Круто. Кто-нибудь хочет, чтобы дать мне ответить на второй, а? 50? Хорошо. Любой путают о том, как мы получили, что либо? Круто, я есть ответы на следующем слайде. Так что не беспокойся, если тебе нужно скопировать его. Итак, шестнадцатеричное немного сложнее. но я собираюсь показать вам, ребята, ярлык о том, как это сделать. Так шестнадцатеричной, а вас Помните, что все это будет 16. И потому, что мы, как люди на самом деле не есть 16 число, для представления, что мы идем от нуля до девяти, которые наша первая 10 значений, а затем мы делаем через F, которые являются следующие шесть значений. И так самый простой способ перейти от любой двоичный номер в шестнадцатеричное является разбить их на две половинки. И поэтому любое двоичное число мы дадим вы, вероятно, есть восемь цифр. Вы можете просто разорвать их в середине. Таким образом, первый одно-- один один, один один, один, один, один один. Вид думаю, что это, вы знаете, привлечь косая черта или запятая между ними. И вы можете просто конвертировать непосредственно все Это на первый Количество шестнадцатеричной и все, что здесь является второй из шестнадцатеричном виде. Так что помните из общего обозначения, что же шестнадцатеричные значения начать? АУДИТОРИЯ: Ноль. ПРОФЕССОР: 0x. Итак, мы знаем, что в любое время, мы просим вас конвертировать любое количество в шестнадцатеричной или в любое время вы видите какой-либо номер, который начинается с 0x, Вы знаете, что это шестнадцатеричное значение. И тогда вы будете попросили определить, что эти две цифры. И то, как вы это сделаете, соответствуя до что половина и счета до, что половина. Таким образом, в этом примере, то, что будет один, один, один, один будет? Какое значение это будет? Это было бы F, верно? Это было бы 15. Таким образом, это будет один Ф., один, один, один здесь также F. Таким образом, один, один, один, один, один, один, один, одним в шестнадцатеричной все это является 0xFF. Потому что эта половина представлена F, значение 15, и эта половина представлена F, значение 15. Потому что помните, мы считая от нуля до девяти. А как 10, B, как 11, F 15. Имеет ли это смысл для всех хау мы получили из двоичной в шестнадцатеричные? АУДИТОРИЯ: И так, как же мы получаем 15 с одной, один, один, один? ПРОФЕССОР: Да, это двоичный, верно? Представьте себе, что это просто двоичное число. У вас есть два в нулевой, который является одним. АУДИТОРИЯ: О, хорошо. Таким образом, вы просто составить его. ПРОФЕССОР: Да, а затем Вы только что из всего. Это все, что есть. АУДИТОРИЯ: ОК. ПРОФЕССОР: ОК. АУДИТОРИЯ: Так вы идете из двоичного чтобы в шестнадцатеричное? ПРОФЕССОР: Это Самый простой способ сделать это, да. Вы не собираетесь в десятичную, потому что десятичной имеет только нуля до девяти. Мы просто вид разделив это до надвое. АУДИТОРИЯ: [неразборчиво] с помощью десятичной найти что это совпадает в шестнадцатеричном виде. ПРОФЕССОР: Я имею в виду, вы Подводя итоги, используя основы математики. АУДИТОРИЯ: Да. ПРОФЕССОР: Да, довольно много. Это немного сбивает с толку. Но точно знаю, что вы можно разделить на то, что это значение в только половины. Посмотрите, что это в двоичной? Какое число является то, что? Это будет то от нуля до F. Здесь также будет то от нуля до F. И тогда вы можете просто положить эти два прямо там. АУДИТОРИЯ: ОК. ПРОФЕССОР: Да. ХОРОШО. Таким образом, вы, ребята, хотите, чтобы попробуйте следующий тогда? Ноль, один, ноль одним, одним, ноль, один нуль. Я дам вам, ребята, как 30 секунд, так как вы, вероятно, не знаете, трюк, чтобы, как это сделать раньше. ОК, кто-то хочет получить этот выстрел? 0x5A. ПРОФЕССОР: 0x5A. 5а. Хорошо. Таким образом, это здесь было be-- вы хотите чтобы сказать нам, как вы получили это? Во-первых, как вы получите пять? АУДИТОРИЯ: Потому что ноль, Один из них, ноль, один пять. ПРОФЕССОР: Понимает ли каждый Поэтому ноль, один, ноль, один пять? Вы получили один здесь. Вы не имеете ничего двух на первый. В двух до второй, вам есть один, который четыре. Таким образом, вы добавить четыре плюс один, у вас есть пять. Все хорошо? ХОРОШО. А потом, что это было и почему? Какое количество делает соответствовать? АУДИТОРИЯ: 10. ПРОФЕССОР: А что это в базе двух? АУДИТОРИЯ: [неразборчиво] ПРОФЕССОР: Точно. Таким образом, это второе значение здесь будет 0x5A. Все хорошо о том, как преобразовать? Это намного проще, чем вы думаете. Я просто хочу, чтобы убедиться, что Вы знаете, полезные советы и трюки о том, как это сделать. АУДИТОРИЯ: Почему вы можете просто разделить он в середине, как, что? Просто, как, хорошо, я собираюсь только заботиться о них в первую очередь [неразборчиво]? ПРОФЕССОР: Потому что это на самом деле способ представлены шестнадцатеричные значения. 0X, что на самом деле означает, ничего, кроме говорю вам что это шестнадцатеричное число. И это всегда представляет первые четыре цифры. И это всегда представляет Последние четыре цифры. И поэтому эти две цифры просто соответствуют различным битов. АУДИТОРИЯ: Так что мы будем always-- ПРОФЕССОР: Вы всегда собирается получить восемь значение бита. АУДИТОРИЯ: Это просто как вещь здесь или что вещи все кончено? ПРОФЕССОР: Это просто что в компьютерах, да. АУДИТОРИЯ: ОК. Здорово. ПРОФЕССОР: Кроме того, так что в этом примере мы преобразовали из двоичной системы в десятичную, и из двоичной в шестнадцатеричную. Вы, ребята, хотите, чтобы убедиться, что вы также практиковать в другую сторону вокруг. Так что, если я дал вам 0xFF, вы могли бы привлечь, что из в двоичной, верно? Вы преобразовать F в двоичной, который является одним, один, один, один, преобразовать F в двоичный, который один, один, один, один. Таким образом, мы можем попросить вас сделать наоборот. Так десятичную в двоичный или шестнадцатеричное двоичный. Итак, вы хотите, чтобы сделать что вы знаете, в обоих направлениях. Мы, вероятно, спросите Вы Сочетание этих двух. Да, у вас есть вопрос? Я могу see-- вы хорошо? АУДИТОРИЯ: Да. ПРОФЕССОР: ОК. У меня хорошо, чтобы стереть это? Отлично. Ладно, так ответы здесь, если кто- Любопытно, позже и запутаться. ХОРОШО. АУДИТОРИЯ: Имеет ли значение, если положить наши письма в столице или нижнем регистре? ПРОФЕССОР: Это так, потому в шестнадцатеричном, по соглашению, все символы в верхний регистр. Таким образом, через F являются будет в верхнем регистре. Если поставить в нижнем регистре а, я не знаю, если бы мы обязательно отметить это неправильно. Но теоретически, что технически не как вы должны иметь его. Таким образом, они все должны быть в верхнем регистре. Да, хороший вопрос. ХОРОШО. Второй вопрос. Рассмотрим этот прекрасный программу здесь. Я задаю вопрос, Я вернусь в этом. Так, во-первых, то, что внутри стандарта io.h, что представляет интерес для программы? Во-вторых, то, что делает недействительными означает в третьей строке? И в-третьих, то, что делает возвращение к нулю из Основной, как линия шесть, как правило, означает? Если вы, ребята, хотите, чтобы написать те вниз, поскольку у меня есть, чтобы вернуться к слайду, только так можно увидеть код. Это является примером, как, возможно, высокий уровень вопрос, где мы просим вас какие вещи в виду в программе. Все хорошо для меня, чтобы вернуться к слайду? Ладно, круто. Поэтому я дам вам, ребята, как, может быть, три минут, чтобы посмотреть на этого одного очень быстро. ОК, так что это одно как довольно легко, концептуально. Кто-нибудь хочет сказать мне, что в первую очередь изнутри хэш в том числе наша стандартная библиотека io.h файл? Почему мы должны эту библиотеку включены для этой программы? Что здесь нам нужно это? Да? АУДИТОРИЯ: Это когда Вы помещаете что Printf? ПРОФЕССОР: Точно. Так Printf, в любое время вам принять ввод от пользователя и печать что-то на экран, это стандартный ввод, вывод библиотека. Думайте о нем, что way-- вход, выход. Есть ли у меня выход? Да. Так что я знаю, что я всегда буду нужна библиотека гостирован i.o. Так Printf функция с помощью которых мы должны получить доступ и включают в себя хэштегом Стандартная библиотека i.o. ХОРОШО. Во-вторых, это что же пустота означает? У нас есть Int основной (пустоту), что делает аннулированию здесь имею в виду здесь, на третьей линии? Да, в спину. АУДИТОРИЯ: [неразборчиво] ПРОФЕССОР: Точно. Так что помните, мы узнали, начиная с нашего PSET что вы можете на самом деле указать командную строку Аргументы, что ваша программа, что вы Основная функция, принимает, как вы, пользователь, назови это. Если у нас есть пустота, это означает, что вам может просто запустить программу непосредственно без каких-либо аргументов командной строки. Все ясно, на что? ХОРОШО. И, наконец, почему мы так делать это возвращение нулевой вещь здесь? Почему мы даже иметь INT главный? Почему мы не можем просто пустот основной пустоту? Да? АУДИТОРИЯ: Просто так, что мы можем быть уверены, что программа выход успешно, а противоположность, если он был пронумерован. И мы знали, что это различного рода ошибки. ПРОФЕССОР: Да, именно так. Это просто очень обычный, что мы делаем, является то, что только в конце ваша программа, просто чтобы убедиться, что основной функцией работает правильно, мы всегда хотим, чтобы сделать возвращение нулевой. Даже если мы обязательно не видите, что печатается в любом месте. Потому что, как программистов, вы знаете, если у вас есть много различных строк кода и вы не знаете, где это идет не так, и если происходит ошибка вы хотите убедитесь, что вы получите эту ошибку. И так, как правило, если что-то не так, мы будем иметь возвращение одного только чтобы убедиться, что мы знаем, что это такое. Так что, если вы видите возвращение нулю, что, как правило, означает, что ваша программа успешно выполнена. Хорошо? Круто. ОК, вторая программа здесь. Считают, что. И если вы, ребята, видите плавать, вы, ребята, вероятно, может есть хорошая идея о том, что Я собирался спросить вас. Поэтому, когда эта программа выполняет, как вы можете видеть, Я заявляю, поплавок в моей основной функции. Я назвав его "ответить", и я устанавливаю что делится равными друг на 10. Я печатаю, к одному десятичного знака, что поплавок. А потом я возвращаюсь к нулю. Так при выполнении программы, вспомните жадные сейчас, эта программа печатает 0.0. Как мы все знаем, мы все надеемся, знаете, разделенного на 10 не 0,00, это 0,1. Но объясните, почему эта программа думает, что 1 делится на 10 отпечатков 0,1 другой чем 0,1? Я дам вам, ребята, может быть, как 30 секунд, чтобы просто быстро думать о том, что и я пойду обратно в программу. ХОРОШО. Кто-нибудь хочет, чтобы дать ему шанс? В трех предложениях или меньше, потому что, как правило, мы собирается ограничивать все ответы в трех предложениях или менее так что вы не просто пересказывают случайные вещи на вашем викторины. Да, сделать снимок. АУДИТОРИЯ: Так что я думаю, что есть это что называется, как, [неразборчиво] Так может быть, например, может быть, как, 0,09, что когда вы печатаете первым значный, было бы на 0,0? ПРОФЕССОР: Закрыть, не совсем. Christabell? АУДИТОРИЯ: Вы разделения одного и 10, и они оба целые числа. И поэтому способ, которым это происходит хранить это в виде целого числа. И так ближе число будет 0.0. И так вот 0.1. ПРОФЕССОР: Да, это действительно хорошо. Это правильный ответ. Так что это очень запутанной Концепция для многих детей. И я действительно хочу, чтобы убедиться, что Это подкрепляется в голове каждого. Так, что мы называем плавающей Точка неточность, где причина, почему много из ваших программ в жадные не работает, потому что изначально было Вы забыли отдать свой переменную. Так что сказал Christabell был совсем правильно. Поплавок изначально неточными. Потому что в компьютере, справа, у нас есть конечное количество битов памяти мы можем использовать для представления чисел. Так, например, это CS50 ID is-- Я думаю, что это 64-разрядный компьютер. Поплавок может быть представлена ​​только на конечную величину этих битов. И так 0,1 с бесконечными нулями, что было 0.1, верно? Но мы не можем на самом деле хранить что номер на нашем компьютере. Мы просто не имеют Недостаточно памяти, чтобы сделать так. И поэтому ближайший приближение то, что хранится в памяти на самом деле что-то вроде что-то 0.000, то, что-то, что-то. Который, как только вы усечь это, округляет 0.0. И так этот пример является лишь одним который демонстрирует много вопросов у нас есть всякий раз, когда мы пытаясь сделать математику неправильно без литья под другим целым числом. Так что будьте осторожны, что это произойдет. На викторины, если мы дадим вам блок кода, и это, как, то, что выводит в конце? А если это какая-то случайная величина вы Ребята должны знать, почему это происходит. Да? АУДИТОРИЯ: Обрезать это избавиться от все после определенного момента? [Неразборчиво] ПРОФЕССОР: Да, на самом деле так это действительно плохой пример, потому что на самом деле все, что 0,100 будет обрезать до 0,1. Но если вы запустите it-- я не помню, потому что в прошлом году они провел ее на другую программу. Они побежали его в то, что называется CS50 бытовой, который отличается от ID. Это был 32-разрядная система, я думаю. И так были разные номера. Но по сути, просто знаю, что вся концепция усечения и как он просто режет раздеваться. И так, если это rounds-- АУДИТОРИЯ: Без округления. ПРОФЕССОР: Точно. Да. Круто. Привет, в спину. Мы просто собираемся на себя некоторые Тест обзор вопросов. Все в порядке. Так считают другую программу здесь. Я собираюсь дать вам парням пару минут, чтобы прочитать над этим. Это то, что было для очень Недавно, когда я думаю взорвали много из вас умы парней годов. Но мы будем говорить через это снова только чтобы убедиться, что вам понять его полностью. ХОРОШО. ХОРОШО. Любой нужно больше времени для прочитать этот код? ХОРОШО. Так что мне кажется, что В этой программе я создание двух строк, используя GetString. Один называется с и один называется т. И если они равны равно друг к другу, он должен напечатать "Тебя введите то же самое ". Но Elsewise, было бы напечатать ", Вы набрали разные вещи ", не так ли? Кажется, очень, очень просто. Но, тем не менее, если я на самом деле попробуйте написать эту программу, кажется, что даже когда я Входные те же самые строки, он по-прежнему печатает, "You набрали разные вещи! " Кто-нибудь хочет взять выстрел в, почему эта программа всегда отвечает, что входы различны, даже когда сами слова то же самое? Так, если бы я input-- Дэвид любовь использовать пример как мама, верно? Строчные М-О-М для S, T равна строчной M-O-M. Если я побежал это через что код, с чего бы это распечатать "вы набрали разные вещи?" Кто нужен ли более время, чтобы подумать об этом? ОК, я думаю, что мы хорошо. Да? АУДИТОРИЯ: ОК, так это то, о где он хранится в памяти, не так ли? ПРОФЕССОР: Да. АУДИТОРИЯ: Где это как, если это Строка с хранится в памяти spot-- Я изобретая this-- равна нулю. ПРОФЕССОР: Конечно. АУДИТОРИЯ: И строка т хранится при месте памяти, как, 167, а затем нулю не равен 167. ПРОФЕССОР: Точно. Итак, помните, что это невероятно Откровение мы объяснили вам, ребята на прошлой неделе, что Строки самом деле не существует? Когда мы создаем то, что называется Строка мы, в действительности, создавать что-то под названием символ звезды. Какие все это является указателем на строка или массив символов. И поэтому в данном примере, если я были входного M-O-м пути что мой компьютер будет хранить это в памяти обратной косой черты нулевой, верно? Эти четыре символа, символы, будет где-то хранить. А потом эти четыре символы, обратный слеш ноль, хранятся где-то еще, не так ли? Я понятия не имею, где адреса являются, они где-то в моем компьютере. Но я точно не знаю, где они находятся. Когда я создаю строку с, все, что на самом деле это указатель на начало этой строки. И когда я создаю эту т значение, все, что является указателем на здесь. И поэтому, когда вы пытаетесь приравнять и проверить чтобы увидеть, если ей это равно равна T, компьютер на самом деле просто возвращаясь к Вы адрес этого м а также адрес этой м. И потому, что они два отдельных частей данных , которые хранятся в двух разных адреса в компьютере, Ваш компьютер никогда не будет признать их в качестве то же самое. Кто-нибудь хочет дать выстрел на то, что мы придется делать, если мы хотели, чтобы исправить это и есть правильный запущенную программу вместо? Подумайте о том, что в течение нескольких секунд. Что нам нужно, чтобы изменить получить эту работу программы как мы хотим, чтобы он действовал? Да, хочу, чтобы принять удар на него? АУДИТОРИЯ: Можем ли мы попытаться разыменовать указатель и проверить через массив? ПРОФЕССОР: Это один из способов сделать это. Итак, что ваше имя снова? Я извиняюсь, напоминают мне. Зее: Зее. ПРОФЕССОР: Да, так, что-Зее предложил бы абсолютно работать. Правильно? Мы могли разыменования указателя и на самом деле идти и доступ физические данные внутри здесь. И мы можем просто сравнить весь экран. Мы можем говорить, ОК, указатель, дать мне то, что внутри здесь. Это вернется в м. И я бы сказала, указатель, дать мне то, что внутри здесь. Вернуться к м. У тех матч? Да. Затем мы перейдем. Мы продолжаем проверки всего два струны вплоть до конца и посмотреть, если те, равны, если все значения равны. И если все значения равны, то мы знаем, струны верны. Безусловно, это, как бы мы это сделать? Кто-нибудь путать на все это? Вся концепция о том, как струны действительно только указатели, и как они на самом деле не существует? И почему мы получаем ошибки как, как мы получить его? Потому что я гарантирую вам, ребята, указатели и распределение строка и память собираются придумать. Да? АУДИТОРИЯ: [неразборчиво] разыменовать это, вы просто положить звезду [неразборчиво] ПРОФЕССОР: Верно. Таким образом, чтобы derererence указатель средства идти по этому адресу указателя и получить данные, значение есть. И то, как сделать это звезда указатель. Не смущает, что. АУДИТОРИЯ: [неразборчиво]. ПРОФЕССОР: Да. АУДИТОРИЯ: Так что вы можете просто написать если звезды сек равно равно звезда т. ПРОФЕССОР: Ну, нет. Нет. АУДИТОРИЯ: Это не достаточно хорошо, верно? ПРОФЕССОР: Это не так, потому что вы только проверки первую букву. Вы, вероятно, будет нужен некий цикл, который перебирает каждый символ в обеих строках. Да. Так что, если вы хотите, чтобы просто проверить, чтобы увидеть если они начали с того же, Вы можете сделать, если, звезды с равен звезд тонн. Тогда вы знаете, что по крайней мере они начал с того же характера. Да? АУДИТОРИЯ: Так как Вы что бы как встроенный цикл или указатель? ПРОФЕССОР: Да. Довольно много как раз для петли. Помните, Давид упоминается класса свободный синтаксический сахар? И он был очень это запутанным делом звезда типа Т плюс один, где он будет интегрировать через и переместить указатель? Чем проще способ сделать это просто т I. Так что это просто массив. Таким образом, что бы вы иметь для цикл, который бежал от нуля до I, где я длина из Строка, можно просто пишут, что вместо того, чтобы делать то Вся указатель, ссылка вещь. Таким образом, эти вещи в точности эквивалент в компьютере. Вы, ребята, наверное, не будет нужно знать, что, но это хорошо, только вид есть в спину свой ум. Просто знаю, что компьютер признает различные блоки кода как то же самое. Поскольку это так гораздо пользователь дружественных нам представить его, как массив. Это просто легче. АУДИТОРИЯ: Так что используйте STRLEN нравится, get-- ПРОФЕССОР: Да. АУДИТОРИЯ: ОК. ПРОФЕССОР: Вы могли бы использовать StrLen или, если вы не имеют StrLen вы можете просто сделать до пока вы не нажмете обратный слеш ноль для обоих. Либо будет работать. Да. АУДИТОРИЯ: Так что это для разыменования каждый один символ, если мы были фактически писать этот код, мы может просто сделать т скобки I нравится со звездой перед ним? ПРОФЕССОР: Да, равна равна S Кронштейн я, а затем двигаться I вниз, пока вы не попали в конец. Да, это то, что вы могли бы сделать. И я на самом деле имеют следующий пример, когда мы на самом деле написать StrLen так что вы, ребята, будет своего рода из получите, чтобы поиграть с ним немного. Так все ясно только на память, строки, указатели, качество адреса? Некоторые понятия более высокого уровня, что вы воля наверняка необходимости знать о викторине завтра. Все в порядке. Хорошо. Ага. Итак, одна вещь, что мы будем также спросить Вы, как мы делаем каждый год на викторине, это, Предположим, что вы забыли (который мы, кажется, забыли сделать в год) в котором заявил, файл заголовка StrLen. И поэтому мы должны переписать это сами. Вот список рекомендаций что мы можем представить вам Ребята, где вы получите предположить, что ы строка не будет нулевым. Вы можете считать, что ей будет обратная косая черта нулевой. Таким образом, вы знаете, что это то, что он собирается заканчиваться. И, например, что Длина привет будет пять. Таким образом, вы можете предположить, что привет будет пять, Н-Е-Л-Л-О. Вы не должны считать, что Оборотная сторона нулевые счета для длины. Это последнее, что здесь, не беспокоиться о переполнении целого. Помнит ли кто-нибудь то, что число переполнения? АУДИТОРИЯ: выходит за рамки Длина [неразборчиво]. ПРОФЕССОР: Да, вы можете объяснить немного, что это значит? АУДИТОРИЯ: Итак, я думаю, это восходит к усечения пример ранее. Но если у вас есть только так много чисел которые выходят за рамки числа битов что вы можете назначить его что это будет просто вид отрезаны. ПРОФЕССОР: Да, так и на типичный компьютер, сколько бит у нас? АУДИТОРИЯ: 32? ПРОФЕССОР: Да, 32, правый. И так вот, то, что четыре млрд, два миллиарда? Четыре миллиарда до четырех миллиардов целые положительные числа, не так ли? Два миллиарда отрицательным, два миллиарда положительным, зависит от того, как вы хотите, чтобы сделать это. И поэтому в основном мы можем иметь достаточно целые, которые могут пойти вверх от двух до 31 минус 1, верно? Потому что как только мы попали два в 32-м, мы не есть так много памяти в нашем компьютере. И так, в принципе, я мог придумать ряд что, вроде бы, два 46-. Это число огромный задница, но Теоретически вы могли бы. И так Целочисленное переполнение, если вы попытаетесь создать целое число, которое выходит за рамки компьютер способен хранить. И так вы, ребята, для Этот пример не должны беспокоиться о нас, давая вам гигант Строка, два 32-й символов длинный. Это было бы на самом деле означает. Ладно, так что я просто хочу, чтобы дать вы, ребята, базовой структуры этого. Вы собираетесь создать Функция называется INT StrLen где пропуск в, полукокса звезда, или строка, указатель на строку называют с. Ладно, все, что копировать вниз. Круто. Oops-- другой способ. Так что это вроде как труднее кусок проблемы, так что я дам вам, ребята, может быть, пять, чтобы шесть минут до вида мозгового штурма и написать эту функцию из. АУДИТОРИЯ: Мы не счет для [неразборчиво], мы не должны использовать число? ПРОФЕССОР: Нет, вы не знаете. Я дам вам подсказку парням. Некоторое время цикла может быть очень полезным здесь. Да. Вот конфеты. Конфеты также будет доступна для викторины, я думаю. Так вы, ребята, все будет засахаренные завтра. Может i-- вы его получили. АУДИТОРИЯ: ОК. ПРОФЕССОР: Да. Может быть, еще 30 секунд или около того. Ладно, если вы не сделано, не беспокойтесь. Мы будем двигаться через это вместе. ХОРОШО. Так что я собираюсь просто макет Базовая структура для этой функции здесь. Int StrLen. Во-первых, кто-нибудь хотите сказать мне, что это означает INT? Мы должны иметь в этой функции. АУДИТОРИЯ: STRLEN [неразборчиво]. ПРОФЕССОР: Точно. Так все, что происходит здесь, мы должны возвращать целое число. И, как указано в спецификации, мы хотим, чтобы return-- Перейти на него, ребята, просто продолжать идти. Все хорошо. Ешьте все это, так что я не принять его обратно, на самом деле. ИНТ просто означает, что вы будет возвращение целое. Что это символ звезды с? Что это значит? АУДИТОРИЯ: Как, что на вход в. ПРОФЕССОР: Точно. И то, что почти То же самое, как полукокса звезды? АУДИТОРИЯ: String? ПРОФЕССОР: Точно. Таким образом, все, что мы делаем это дает это указатель на строку. ХОРОШО. Круто. Кроме того, не забывайте, если забыть чтобы дать вам эти скобки, не забудьте написать их самостоятельно. Потому что теоретически, ваш код неправильно, если вы забыли записать их. Просто всегда обращают внимание. Мол, мелочи что вы не замечаете, когда вы программируете на вашем ноутбуке, потому что ваш ноутбук сделает это за вас? Не забывайте, когда Вы пишете от руки. Да? АУДИТОРИЯ: Но как неправильно? Мол, мы получаем всю проблему плохого? ПРОФЕССОР: Нет, нет. Не волнуйтесь. Это на самом деле теоретически возможно для Вас, чтобы получить полную точек на вопрос даже если ваш код будет никогда не работать в реальной жизни. Я предлагаю вам не пытайтесь чтобы это произошло. Например, как, если все что здесь правильно, но вы забыли двоеточие или скобки, ваш код не будет реально работать. Но мы можем быть милосердными. Да? АУДИТОРИЯ: Вы должны комментировать на нашем почерком? ПРОФЕССОР: Нет, нет, нет беспокоится о том, что. Нет комментариев. Стиль должен быть хорошим. Мол, не smush все на одной линии. Мы не будем счастливы с вами, если вы сделаете это. Кто-нибудь хочет дать мне первую линию? Подсказка, это очень просто. Да? АУДИТОРИЯ: Int, п равна нулю. Просто установите счетчик. ПРОФЕССОР: Итак, мы хотим некоторые Сортировать счетчика, верно? Я просто хочу, чтобы назвать это "рассчитывать" ради удобства чтения. Что мы хотим, чтобы установить его равным? АУДИТОРИЯ: Ноль. ПРОФЕССОР: Да. Точка с запятой. Это также очень странные запятой рисования. Только практика делает. Поэтому мы хотим, чтобы сначала счетчик типа Int. Потому что мы хотим, чтобы подсчитать, как многие персонажи или буквы в этой строке, верно? Очень легко первый шаг. ОК, может быть, немного более сложным, Теперь, как мы собираемся это сделать? Кто-нибудь хочет дать мне строки кода которые могут быть в состоянии помочь цикл через то, что это? Да, смельчак в спину? АУДИТОРИЯ: ОК, так что пока точка звездочки, то да, звезда с, не равен нулю, то сделать что-то? ПРОФЕССОР: Это очень, очень близко. Действительно близко. Так что я собираюсь обратиться две вещи с этим. Прежде всего, это не в точности равна нулю. Что это? Это нулевая терминатора, что обратная косая черта нулю. Так они отличаются в Условия, как они хранятся. Таким образом, вы на самом деле близко. А во-вторых, мы не хотим, просто переместить указатель. Мы хотим, чтобы на самом деле доступ к значениям, верно? И так, как мы делаем это? Очень просто. Не думаю, что об указателях, Не думаю, что о воспоминаниях. Вернуться к второй неделе этого курса. АУДИТОРИЯ: [неразборчиво]. ПРОФЕССОР: По, помните? Какие струны? Как они хранятся в памяти? АУДИТОРИЯ: Они подняли. ПРОФЕССОР: Они поднимаются. Так как мы доступ каждый символ внутри? АУДИТОРИЯ: [неразборчиво]. ПРОФЕССОР: Точно. Так что while-- идет внутри здесь? S из - АУДИТОРИЯ: И. ПРОФЕССОР: О, я не существует, не так ли? АУДИТОРИЯ: Да, рассчитывать? ПРОФЕССОР: Мы можем только использовать счет, мы не можем? АУДИТОРИЯ: К сожалению, я назвал это я. ПРОФЕССОР: Да, это все хорошо. Мы имеем переменную здесь это уже был объявлен в нашей счетчика. Так почему бы нам просто не использовать, что для перемещения по время цикла? Имеет ли это смысл? Таким образом, хотя ей из count-- кто-нибудь хочет чтобы дать мне то, что происходит после того, здесь? АУДИТОРИЯ: Это не равны. ПРОФЕССОР: Не равно, верно? Это челка равно, Восклицательный знак равно, все, что вы, ребята, хотите, чтобы называть его не equal-- АУДИТОРИЯ: [неразборчиво]. ПРОФЕССОР: Да. Помните одну цитату для полукокса, двойные кавычки для строки. Будьте осторожны при их использовании. Поэтому, когда мы смотрим через массив, последний символ, мы знаем, что мы не хотим это будет обратный слэш нулю. Так что пока. Мы не в конце строки. Что мы хотим сделать внутри? АУДИТОРИЯ: Мы хотим, чтобы добавить к Счетчик поэтому рассчитывает плюс плюс? ПРОФЕССОР: Точно. Так вот, мы собираемся сделать рассчитывать, рассчитывать плюс плюс. Пропавших без вести больше одной строки. Мы почти там. Что мы забывая делать? АУДИТОРИЯ: Возвращаясь к нулю? ПРОФЕССОР: Вы хотите, чтобы вернуться к нулю? АУДИТОРИЯ: Нет, возвращаясь к STRLEN. Подождите. ПРОФЕССОР: Какое хранится в? АУДИТОРИЯ: граф. Граф. ПРОФЕССОР: Точно. Так вот мы идем, чтобы вернуться кол. Потому что то, что мы здесь делаете ultimately-- у нас есть переменную счетчик, что это происходит приращение через нашу строку. Мы собираемся продолжать, продолжать происходит, вокруг и вокруг в этом цикле. И в то время как мы не в конце этого Строка, которая является нулевым терминатором. И каждый раз мы идем через это, мы добавляем в наш счетчик. И мы собираемся дальше наряду в этом массиве. И в конце концов, когда-то мы ударил нулевой терминатор, мы знаем, о, мы можем перерыв, вернитесь кол. У нас есть STRLEN. Получает ли каждый, как это было реализовано? В то время как loops-- Я знаю, мы не сделать слишком много с ними, но они, как правило очень, очень полезно, если вам не знаю, что вы останавливаете состояние обязательно должен быть. Вопрос? АУДИТОРИЯ: Можем ли мы написать NULL при условии, время? ПРОФЕССОР: В то время как? Да, так что в этом проблемы я вам ребята предположить, что ей не будет нулевым. Потому что помню, Теоретически, если я дал вам указатель, что было слишком большой памяти, это даст вам нуль, верно? Это то, что операционная Система будет делать. Так что, если я не скажу вам предположить, с нулевым бы, вы должны проверить. Так здесь, вы могли бы сделать, если ей равна нулю равен, возвращать одно. Что-то вроде того. АУДИТОРИЯ: [неразборчиво] нулю. ПРОФЕССОР: ОК, я скажу Вы почему мы не можем этого сделать. Потому что помню, в памяти, правильно, здесь. Мы пойдем сюда. Вы получили гигантские блоки памяти все с сетками что хранить различные значения, верно? А так все это строка is-- для Например, если мы хотим ввода привет, было бы Н-Е-Л-Л-О Обратная косая черта нулю, верно? И тогда кто знает, как случайная вещи, которые здесь после него. Мы не знаем, на самом деле, что там. И так, если вы должны были сделать вместо обратной косой черты нулевой, NULL, оно не может быть нулевым. Потому что это просто может означать, некоторые случайные другие вещи которые не принадлежат в строке. И так как, что мы всегда знаем, что строка заканчивается это с обратной косой черты нулевой. И так, что всегда, как мы проверить, чтобы видеть конец строки. Null, все, что средства, если у вас есть несуществующей указатель, прежде всего, или если ваша память просто так велико, что Вы не можете вернуть его, то это было бы пустым. Так будьте очень осторожны при дифференцировании разница между нулем и обратный слеш нулю. Да. Все в порядке с этим? ХОРОШО. Так что мне пришлось вы, ребята, напишите StrLen. Технико-экономическое мы могли бы также попросить вас написать из А до Я, помните, что "Atwoa" или все, что вы, ребята, хотите назвать это? Эта функция в Vigenere и Цезарь, что преобразует значение Ascii в целое? Это также пришел на последние опросы функций мы попросили вас написать. Практически любой функции что вы использовали и очень легко написать самостоятельно, Датчики нравится меньше, сверху, чтобы снизить, чтобы верхний. Функции, которые бы преобразовать строка из строчных в прописные. Мы все знаем, как это сделать, не так ли? Это довольно легко. Просто хочу, чтобы убедиться, что вы can-- это же мыслительный процесс. Вы просто перебора и вы включаете вещи. Вы либо рассчитывать, или когда Вы включаете по-другому. Я бы suggest-- I не знаю, если мы собираемся попросить вас запомнить, какой капитале или Столица Z, или нижний регистр или нижний регистр г в ASCII, но я хотел бы предложить возможно, написав, что вниз в случае мы делаем. Точно так же вы, ребята, есть ссылка. Как в верхнем регистре А, то, что, 197? А потом в нижнем регистре, как 50 что-то. 65, да, там вы идете. Так что в значительной степени знаем, Разница между ними составляет 32. Это очень важно. Да. У меня хорошо на этом? ХОРОШО. АУДИТОРИЯ: Мы могли бы Теоретически написать некоторые из них вниз, а на нашем little-- ПРОФЕССОР: Вы теоретически может просто скопировать функцию вниз. Это правда. АУДИТОРИЯ: Не [неразборчиво]. Профессор: Вы, ребята, есть лист. Вы, ребята, есть примечание лист. Вы можете ввести его. Вы можете написать его. Вы можете делать все, что вы хотите с ним. Да. Так, теоретически, если Вы хотите, чтобы, идти. АУДИТОРИЯ: [неразборчиво] но мы действительно не обязательно нужно помнить, значение, мы можем только использовать в верхней или нижняя функция, верно? ПРОФЕССОР: Да. Но если мы дали вам вопрос что говорит написать верхняя, Затем вам нужно будет написать его. Так вы, ребята, можете считать, что вам ребята имеют доступ ко всем функциям, но если вы хотите использовать для верхней или ниже, что вы также должны делать? АУДИТОРИЯ: [неразборчиво] использовать CS50 [неразборчиво] ПРОФЕССОР: Это CS50.h? Будьте осторожны там. Таким образом, чтобы верхняя, снизить, сверху, ниже, Функции, которые включают строками являются все в пределах или в формате ASCII или в математической библиотеки или в строке библиотеки. Так что, если вы, ребята, использовать те Функции, будьте осторожны, чтобы помнить включить этот заголовок. Так что, возможно, также то, что вы хотите включить в лист, какие заголовок? Какие библиотеки вы используете? Какие функции внутри этих библиотек? Это важно. Да? АУДИТОРИЯ: Может, мы просто Полицейский и сделать хэштегом через абсолютно каждая буква мы когда-либо видел, как на все вопросы? ПРОФЕССОР: Вы могли. Я не знаю, как счастлива мы собираемся быть в первый класс что викторина, когда каждый кусок кода это вдвое больше, чем она должна быть. Я не знаю, мы могли бы снять точку для стиля. Но теоретически СВОЙ код будет правильно. Вы, ребята, может, и полицейский просто включить все. Это тоже хорошо, да. АУДИТОРИЯ: [неразборчиво]. ПРОФЕССОР: Да. Я хотел бы предложить не делать, что, хотя. Да. АУДИТОРИЯ: Прохладный. ПРОФЕССОР: Хороший вопрос. АУДИТОРИЯ: Таким образом, в худшем случае. ПРОФЕССОР: В худшем случае. Если вы полностью забыть, вы могли бы сделать это. Да. Да, код прямо там. Я н а счета, но, вам знаете, все, что плывет лодка. АУДИТОРИЯ: Подождите, так что мы не придется хэштегом включают в себя, потому что мы начиная с Int? ПРОФЕССОР: Да, я просто предположил, что нас попросили написать функцию. Если вы хотите быть в безопасности, вам может, вероятно, положил его там. Но я просто не беспокоить, да. Я даже не знаю, если вы нужна библиотека для этого. Потому что вы на самом деле не печатать что-нибудь или что-нибудь, не так ли? Да, я не знаю, если Вы должны библиотека. ХОРОШО. Это также немного больше вдоль линии манипуляции памяти. Этот вид немного сложнее. Думать об этом. У вас есть функция под названием FUNC. Я мог бы назвал его все, но я хочу, чтобы назвать его функ. Я его выше моей основной. Помните, что вы хотите, чтобы функция после ваш главный, Вы хотите, чтобы убедиться, что вы включают в себя прототип сверху. Но в данном случае это было так коротко что я чувствовал, что я мог бы просто включить его на вершине основной. Мне не нужно, чтобы иметь прототип, потому что это уже написано выше. Таким образом, все, что я делаю в моей основной функции создает целое х равен 10. Я звоню своему функцию Func, а затем что-то печатать. И тогда это на самом деле то, что функ делает. Вы, ребята, хотите, чтобы продумать это. Потому что это немного сложнее. Это очень, очень сложно, на самом деле. Продумайте, что это Программа будет Вывод. Я дам вам ребята за две минуты. Хорошие дискуссии? АУДИТОРИЯ: Да. ПРОФЕССОР: Да. Ладно, так что это сложно по причине. И именно поэтому я хотел принести на это внимание каждого. Кто-нибудь хочет, чтобы дать мне предложение, попытка? Что бы это напечатать? Совершенно нормально, если вы не правы. Да? АУДИТОРИЯ: Я думаю, что это 100 и затем 10 на две отдельные линии. ПРОФЕССОР: А 10? Кто-нибудь есть какие-либо другие предположения? Да? АУДИТОРИЯ: Может быть, просто потому, что 10 FUNC не возвращается что-нибудь? ПРОФЕССОР: ОК, так что мы есть предположения номер один является то, что думаю номер два просто хочу, чтобы распечатать 10. Кто-нибудь есть какие-либо другие предположения? ХОРОШО. Так что давайте идти через это, верно? Всякий раз, когда вы получаете кусок кода, не просто смотреть на него и сказать: ах, это так много вещей! Я весьма озадачен! Мол, успокоиться. Просто знаю, что вы могли бы просто просматривать код построчно. Это все, что есть. Это как читать книгу. Так что с какой-либо функции, мы всегда начинаем в основной. Итак, мы собираемся, чтобы начать в INT основной пустоте, даже програмы уже бежать вниз, не так ли? Начало в в главном пустоту. Int х равен 10. Так что я собираюсь стереть это. Я собираюсь сделать память просто так вас ребята, можете рода посмотреть, что происходит. Запомнить здесь у нас есть стек? До здесь у нас есть наши кучи где-то здесь. Стек растет вверх, вправо? И в стеке, у вас есть сетевой функции, а также все сетевого локальных переменных. Так вот, INT х равняться 10. В нашей основной функции мы создание переменную х. Мы устанавливаем, что равно 10. Здесь у вас есть несколько х, и вы установка, что равно 10, справа, в основном. Все хорошо? Функция. Так что теперь, в наши основные Функция, мы называем функция мы написали выше. Таким образом, мы в настоящее время ввести вторую функцию. Мы собираемся создать еще Переменная INT х равен 100. То, что происходит здесь, в стеке? Что происходит, когда вы называете функция, которая создает новые переменные? Что здесь происходит на стеке? АУДИТОРИЯ: [неразборчиво] сваи на вершине? ПРОФЕССОР: Да. Так что на самом деле создает копию. И это своего рода свай на вершине. Подумайте о stack-- стек книг, стопки что-нибудь. Сваи сверху, первые в прошлом из, последним пришел, первым из. Так это будет создавать х здесь. Это будет иметь все funcs переменные. Отлично. Так что теперь у нас есть два различных х, что представляют собой два совершенно разные вещи. Тогда мы идем к печати из целого х. Итак, давайте печатать 100, верно? Потому что здесь это 100. Так вот, первое, что что он собирается напечатать. Как эта функция возвращает ничего, Теперь эта функция, эта линия в основной готово. Все хорошо со мной до сих пор? Так что мы теперь через два из три линии нашей основной функции. Теперь мы едем в третьей строке. Мы собираемся PRINTF. Что это х в основной? Что это представляете? Какой смысл х сейчас? АУДИТОРИЯ: 100. ПРОФЕССОР: Это 100? АУДИТОРИЯ: Еще 10. ПРОФЕССОР: Еще 10. Да. Потому что помните, в наш FUNC, х равен 100. Но если мы вернуться к нашей основной функции, переменная хранится в другое место на нашем стеке. Так что теперь мы должны вернуться к Основной стек, сетевой локальные переменные. А вот х равен 10. И поэтому мы собираемся, чтобы распечатать 10. Таким образом, она была абсолютно права. Мы собираемся, чтобы иметь Выход 100 и 10. Да? АУДИТОРИЯ: Когда вы таНос, является его куча или стек, который [неразборчиво]? ПРОФЕССОР: Когда вы таНос, вы принимаете память из кучи и выделение его. Так что вам не придется возиться с любой из этого. Так что я думаю больше вынос вот то, что называется областью. Для тех из вас, кто был на обзор сессия прошлой ночью, мы говорили кратко об этом. Сфера определяет, как и когда существует ваши переменные. Или в то, что кадры существуют ваши переменные. В значительной степени правило обычно есть, ваш variables-- если вы создаете их внутри фигурной braces-- они существуют только внутри этих фигурных скобках. Так, например, в зависимости от нашего FUNC, вы видите эти две скобки. Если вы создаете ничего внутри него, Шансы все, что вы делаете это создание стека и хранения, что там. То же самое в основной. Вот только хранится внутри основной. Также вы хотите быть очень, очень осторожны. Потому что сфера также предоставляет себя различные примеры. Так, например, для петля для Int я равна 0. Я меньше, чем, я не знаю, 10. Я плюс плюс. И у вас есть код внутри него, верно? Где эта переменная, я, на самом деле существуют только? Только внутри ваш цикл. Так что я думаю многие из вас, ребята имеют вероятно, столкнулись эту ошибку, когда вы делаете в ваших программ psets. Как многие из вас, ребята пытались использовать I вне для цикла и были ошибки? Как неразрешенных ссылках чисел или что-то вроде того? Причина, почему это происходит потому, что здесь вы создавать что-то, что только существует в вашей цикл. И если вы пытаетесь использовать его, я не на самом деле существует вне ее. Так в основном компьютер говоря, я не знаю, что вы говорите. Все, что я знаю, это что я был здесь, но теперь уже нет. Так что, если бы я был, чтобы создать цикл внутри, не так ли? И я собираюсь создать другой, как INT J, и он сделать что-нибудь. И у вас есть код внутри что цикл, только J существует здесь. Но также существует в I. И так J существует только в этом цикл, в то время как я существует в целом вещь. Все ясно? То же самое с условных операторов если вы хотите создать что-нибудь. То же самое с в то время как циклы, если Вы хотите, чтобы создать что-нибудь. Это то, что будет очень, очень осторожны. Таким образом, это был действительно хороший проблема в чувствую, что он показал две вещи. Он показал, во-первых, объем. И он показал Также выделение памяти. Потому что вы, ребята, должны знать, что Функции расти вверх в стеке. И, что, когда вы звоните Функции, вы создаете по существу, новый стек памяти. Это очень отличается от что ваш сетевой памяти. Да. Вот так! Все ОК, что? Это было заблуждение. Очень хорошие темы перейти, потому что вы, вероятно, собирается получить некоторые сложно такие вещи, как, что на викторине. Да. Круто. Я положу вы получите 100 на одном линии, а затем 10 с другой стороны. Да, очень хорошо. Хорошо, теперь вы, ребята, получите шанс быть ТП. Вы ответить на все милые электронные письма, которые я иногда получаю. Так что, дорогие Энди, я вижу, я думаю, что что-то происходит не так с моим компилятором. Я уверен, что мой код является правильным, но я продолжаю получать ошибки сегментации каждый раз, когда я бегу. Что происходит? Пожалуйста, помогите, много любви. Если вы, ребята, есть что-то вроде что, как бы вы ответили? Это на самом деле очень распространены вопросы мы просим вас. Разве, если мы дадим вам сценарий, мы дадим нам Ваш лучший догадываться, что происходит. Кто-нибудь есть удар на то, что происходит? Да? АУДИТОРИЯ: Может быть разыменовываются NULL, то, как указатель указывает на то нуль. ПРОФЕССОР: Да, это было бы быть пример, когда это произойдет. Но то, что больше картина что здесь происходит? АУДИТОРИЯ: Это вы пытаетесь для доступа к памяти, что вы не должны иметь доступ к? ПРОФЕССОР: Точно. Так думать о вине SEG, в офф пределы, запретная зона в памяти что вы не должны касаться. Так довольно много, когда вы пытаетесь чтобы index-- как например, Вы объявлен Массив от нуля до девяти. Но вы попробуйте прикоснуться к 10-й Значение, вы не имеете доступа к этому. Потому что вы не заявили его. И поэтому ваш компьютер будет смотреть на это, как бы, Ой-ой, вы пытаетесь идти за пределы индекса. Я собираюсь дать вам ошибки сегментации. Подумайте как сегмента, верно? Дополнительный сегмент, неисправность при попытке нарушить что-то и вы не должны быть там. Сегментация виноват в любое время Вы пытаетесь коснуться вещей что вы не должны касаться. Так общие примеры индекс. Конечно, если вы пытаетесь прикоснуться, что было пустым, что также будет работать, как хорошо. Если указатель пытался коснуться вещей, которые не должны коснуться, которые могли бы также работать, как хорошо. Наиболее типично вы будете увидеть это в массиве. Все хорошо? АУДИТОРИЯ: Так что, если вы хотите чтобы получить доступ к 10-точка и есть только ограничение девять или что-то. ПРОФЕССОР: Да, именно так. Довольно много. Круто. Дорогой Энди. Итак, мы получили эти замечательные вещи называются всякие. Если слияние sort-- как мы видел в пример, когда Дэвид сделал все вещь в class-- почему, если это так намного быстрее, чем любой из других видов, почему мы даже потрудились зная любой из других видов? Что это на самом деле вопрос прошу тебя? Что три word-- АУДИТОРИЯ: Что компромисс? ПРОФЕССОР: Точно. Это то, что просят вопрос. Что компромисс между Слияние рода стихи других видов? АУДИТОРИЯ: займет памяти, верно? ПРОФЕССОР: У вас объяснить, что немного больше? Прежде всего, давайте объяснить Merge магазин. Как сортировка слиянием работает? АУДИТОРИЯ: Так это работает, деления пополам все а затем положить его вместе и перераспределение его в порядке, что каждый раз, вы объединяете наборы. ПРОФЕССОР: Довольно много. Так что я могу сделать это, но это было бы взять меня пять минут, чтобы сделать это. Оглянитесь на разделе слайдов где мы рассмотрели сортировки слиянием. В точку. Таким образом, способ сортировки слиянием работ это делит вещи в половине, а затем он просто смотрит на Первые значения всех из них и сортирует только. Постоянно создаются новые массивы и ставит вещи более и более в порядке. И так, что в то время как на самом деле, на самом деле быстро, потому что вы знаете, it's--, двоичный поиск н лог н. Вы создаете так много различные массивы, что вы используя огромный объем памяти. И поэтому, хотя это быстрее, компромисс является то, что вы используете больше памяти. И так, намек, виды и поиск были покрыты много больше в этом году чем они были в годы предыдущих. Вы, ребята, должны видеть, что соответствующим образом отражено на викторине. Я определенно провести время собирается бы за то, что все разных сортов являются, как бинарный поиск, как линейный поиск работы. Как, возможно, псевдокод код таких проблем. Каковы работает раз? Что-то вроде, работающих раз очень легко скопировать вниз на ноту листа, правильно? Это действительно трудно, когда ты в середине проверка по и вы должны понять это. Скопируйте его вниз. Я гарантирую вам, вы понадобится знать. Какие компромиссы? В худшем случае, лучшие сценарии тематических для всех из них, очень узнать. Да? АУДИТОРИЯ: Не нужно знаете, как кодировать сортировки слиянием? Мол, мы должны помню рекурсивной? ПРОФЕССОР: Я очень сомневаюсь, это просто потому что это, как довольно сложная. Но оно не может быть невозможным, если мы просим Вас использовать псевдокод его. Да. Да, хорошо, еще один. Это может прийти в Вы последний кусок в немного. Да? Все ли услышать, что? ОК, так что довольно много прежде Все, что тип программы будет давать вам выход, как это? Помните, мы просили вас, чтобы узнать о это новый тип отладки инструмент? Как звали его? Valgrind, право Это была программа, где Вы могли бы назвать, которые могли бы отслеживать все памяти вы находитесь используя в вашей программе и происходит. Так что, если у вас есть что-то, как, безусловно, потерял, 40 байт в одном блоке. Возможно вы не помня, чтобы освободить ее. Потому что, если вы используете байт памяти, это означает, что вы обращались, что память, но вы не смогли освободить. Итак, вы хотите, чтобы сделать Убедитесь, что вы также используя free--, что это function-- освободить все памяти перераспределяются по таНос. Круто. Так данном слайде, я буду иметь его. Это везде в большом количестве лекции, в много слайдов. раздел Вы действительно хотите, чтобы убедиться, вы просто знаете, все это. Либо в записную листа или если вы хочу запомнить его, не стесняйтесь. Это действительно, действительно, действительно важно. Также очень хорошо Вопрос, который мы можем попросить. Почему взгляд Selection sort-- на Выбор sort-- все время автономной работы которые п в квадрате. Независимо от того, список идет Вы, как, так почему sort-- Выбор Я дам вам ребята 30 второй думать об этом. Потому что это своего рода заблуждение. Она включает в себя некоторую концептуальную мысль. Почему бы времена Run быть то же самое в и худшие и лучшие сценарии тематических? Да? АУДИТОРИЯ: Потому что выбор вроде друг положение или место в этой небольшой массив вещь или что-то. Таким образом, даже в лучшем случае, даже если это совершенно отсортированы, он все равно должен быть, как, хорошо, один. В моем первом месте у меня есть один. И пройти через все из них. ОК, один является наименьшим. А потом снова идет и как, в порядке, два является самым маленьким из всех вещей. Но он по-прежнему должен проверить каждый, и каждый. ПРОФЕССОР: Да. Так, например, давайте просто скажем, У нас есть список, уже отсортированный, массив одного до пяти. Таким образом, что виды отбора является то, что он проходит через, он проверяет эти два. Затем он проверяет эти двое. И тогда он проверяет и проверяет. Он продолжает проверки всех из них, независимо от того, является ли это на самом деле отсортированы. Потому что это просто то, как-то работает. И так этот вопрос вроде как концептуальное вопрос мы просим. Где-первых, вам знаю, что-то Selection это, право, чтобы быть в состоянии ответить на вопросы. Вы должны быть в состоянии понять концептуально то, что происходит. И тогда вы можете применить его и думать, ОК давайте просто представить наихудший сценарий. Они все в порядке убывания. Как это повлияет это? Что делать, если это порядок по возрастанию? Если это уже отсортированы? Как это повлияет на время автономной работы? А потом вроде Выбор, вы заметите, что на самом деле не имеет значения. Потому что вы проверяете все значения, независимо от того, что происходит. И так хорошие вещи, чтобы помнить. Почему некоторые виды отличаются от других и как лучше и худшие сценарии повлияет все из них. Я собираюсь действительно ударил в родах потому что это будет на викторине. Да. ХОРОШО. Там шести минут осталось. Я могу взять три минуты вопросы. Я также могу торчать как 20 минут после раздела если вы хотите, чтобы задавать вопросы, а также. Кто-нибудь просто действительно краткое вопросы или концептуальные вопросы они непонятно о прямо сейчас? Да? АУДИТОРИЯ: Можете ли вы рассказать немного Немного о поразрядными операторов? ПРОФЕССОР: Да. Так битовые операторы то, что вы, вероятно, может просто хочу, чтобы положить на листе. Так quickly-- я не хочу идти слишком много в глубине потому что Гарвард, в своем обзоре сессия, покрыли его очень хорошо. Оператор Побитовое, есть пять из них, верно? Там эта, которая х или функция, есть амперсанд, который является и. Труба, которая является или. И тогда у вас есть два различные типы сдвигов. Если я дам вам два значения, в случае Я даю вам, как, один и один. Что бы это оценить,? Если я даю вам верно и справедливо, верно? Что о истинным или ложным? Тем не менее верно, верно? Потому что есть или. Мы, скорее всего, даст вам число. Так что помните, один равняется правда, ноль равняется ложь. И мы могли бы дать вам эти вещи и прошу вас рассказать нам, что происходит. Гарвардский покрывает ее в течение первых 10 минут их учебной сессии, действительно, действительно хорошо. Таким образом, вы, ребята, хотите, чтобы что вы оглянуться на что. Зала: pisa5 будет на викторине? ПРОФЕССОР: Нет Даже не смотрите на pisa5 прямо сейчас. Это тяжело. Просто даже не потрудились глядя на pisa5. Однако, так как некоторые намеки и предложения, я хотел бы предложить вам начать pisa5 как только викторина закончилась. Это будет самая трудная неделю, но тогда вы, ребята, будет принят его на холмах прокатки зеленый и щенков, и это прекрасно. Этот класс получает значительное легче после пятого PSET. АУДИТОРИЯ: Часы являются воскресенье, понедельник? ПРОФЕССОР: Да, так в рабочее время будет воскресенье на понедельник для PSET. Часы сегодня вечером по существу будет просто обзор для викторины. Если кто-то хочет прийти и спросить Тас вопрос, мы будем там. Я возьму, может быть, еще один вопрос если у кого есть вопросы? Да? АУДИТОРИЯ: Когда вы определяющие узлы, [неразборчиво] если вы говорите, узел звезд, а затем в следующем, делает компьютер автоматически понимаю, что ты со ссылкой на другой указатель? ПРОФЕССОР: Нет АУДИТОРИЯ: Вы должны слинкуем [неразборчиво]? ПРОФЕССОР: Поэтому в основном структура из узла, помните, это, как вы создать узел и то у вас есть указатель, называемый рядом. Все, что вы делаете, имеющих структура есть. Вы должны назначить что где-то указатель. Таким образом, компьютеры не знаю, что он еще делает. Вы есть на самом деле, когда назначить Вы создаете свой связанный список. И это то, что в основном PSET 5 будет дальше. Так что не беспокойтесь о ничего из этого прямо сейчас. АУДИТОРИЯ: Таким образом, мы не должны слишком большой акцент на список ссылок, просто общая концепция? ПРОФЕССОР: просто очень много стеков, Очереди, ссылка списки, деревья, хеш-таблицы. Просто быть в состоянии знать, что они есть. Мы не собираемся просить Вам нравится что-то конкретное потому что мы действительно не сделали PSET, что охватывает любой из что еще. Таким образом, в последние две минуты до Я освобожу тебя убить эту викторину. Довольно много, как, думаю, о том, как далеко вы, ребята, пришли в этом классе. Я помню, когда вторая неделя этого класса, некоторые из вас провести три часа писать воды. Как долго это займет вас Ребята написать воду сейчас? 30 секунд, может быть? Подумайте о том, сколько вы, ребята, узнали. CS действительно, действительно трудно тема. Там нет сомнений. Это трудно, вот почему никто не изучает его. Это просто трудно. И это совершенно нормально. И я горжусь, что все сделал это настолько далеко. Psets не легко. Они принимают много времени. Вы, ребята, я никогда не будет просить вас, чтобы написать игра 15 или Vigenere на PSET. Нет необходимости, чтобы просто урод об этом. Все мы тестируем здесь, чтобы оценить Ваш концептуальных знаний, а также как некоторые из ваших основных навыков кодирования. Тест предназначен для действительно сложной задачей. Мол, он предназначен для вас, чтобы не получить 100. Он также предназначен для вас, вероятно, не быть в состоянии закончить в 75 минут. И это совершенно нормально. Я студент сам. Я знаю, я ненавижу его, когда я иду из викторины быть, как дерьмо. Это было действительно трудно. Возможно, что будет happen-- и это совершенно нормально, Я говорю вам, ребята, прямо сейчас. Средства на эти вещи не высокие вообще. А для тех, кто были получать, как, тройки на проблемных наборов, это не значит, что ты собирается получить 60 процентов в этом классе. Если вы получаете 60% на Тест, который не означает, что вы собираетесь получить D в этом классе. Мы видим, особенно я, тех из вас, в моей секции, Я вижу, как сильно вы, ребята, все работает. И я отслеживать, что. Вы, ребята, все будет в порядке. Там нет институциональной памяти счастье в конце семестра. Потому что все дети из Гарварда говорят их друзья, ох, ты будешь в порядке. Никто не говорит вам, что здесь ребята. Так что я должен сказать вам, ребята, что здесь. Вы, ребята, все будет в порядке. Я так горжусь всеми вами, ребята. Тест будет трудно. Изучите для него, а затем его просто выбросить. Будьте готовы, чтобы узнать новые вещи. И съесть конфету. У нас есть много конфет. Получить хороший сон ночью. Не не спят, потому что что бы действительно плохо. CS много логики. Если вы не спите, вы не можете работать, и ваш мозг не может функционировать. И я буду здесь в течение следующих 20 минут, если кто-то хочет, чтобы бродить вокруг. Вы, ребята, собираетесь убить его. Удачи.