Выступающий 1: Хорошо. С возвращением. Это неделя Два CS50, и у нас есть до сих пор используют функции, но значительной мере взял их как должное. Мы использовали Е, который имеет Побочный эффект печати вещи на экране. Мы использовали получить-INT, получить плавать. Но что, если вы на самом деле хотите создать свои собственные функции, а некоторые из Вы, возможно, уже начали сделать для Проблема Установите один, хотя не является обязательным? Ну, давайте идти вперед и вернуться к этому Проблема только запросить у пользователя их имена и печати что-то на экране, но попробуйте для исключения некоторых общности, что мы видели в нашем коде до сих пор. Итак, что я имею в виду следующее. Я собираюсь пойти дальше и создать Новая программа, просто позвоните это hello.c как обычно. Я собираюсь идти вперед и дать себе включают в себя стандартные io.h на самом верху. Я собираюсь также дать себе превентивно CS50 библиотеку так, чтобы Я не получаю кричал на компилятор. И теперь я собираюсь идти вперед и объявить Интернешнл, основным, недействительными. А потом здесь, это то, где я хочу начать аутсорсинг функциональность некоторые другие функции, что я сам собираюсь написать, но это не В настоящее время существуют. Например, предположим, что я хотел написать функцию, которая позволяет мне распечатать Привет, запятая, и Затем некоторое имя пользователя. Вместо того, чтобы продолжать делать Е Здравствуйте,% S, не было бы неплохо, если бы было просто функция называется Е не для печати, но имя? Итак, другими словами, я хочу, чтобы иметь возможность написать программу, которая делает немного что-то вроде этого. Во-первых, я хочу сказать Е вашей имя, тем самым предлагая пользователю дайте мне его или ее имя, а затем я собирается использовать знакомые с строку объявить строку. Дайте мне переменную типа строка, называем это с, и хранить в том, что Результат вызова получить строку. Но теперь в прошлые недели, я бы Несколько утомительно сделано привет,% S / N. А другими словами, мы видели в этом Например кучу раз, и это тривиальный пример, потому что есть только одна строка кода так что это действительно не большое дело для продолжайте вводить снова. Но предположим, что эта строка кода на самом деле становятся в тягость, и это не одна строка кода, но это 10 строк кода пару недель с этого момента, А ты просто устал копирования и вставки или перепечатывания тот же код. Не было бы неплохо, а не делать Е привет,% S и т. д., не было бы хорошо, если бы были просто Функция называется печатными буквами, что принимает аргумент - другими словами, он принимает вход - а затем с запятой. Так, что функции, не так ли бы хорошо, если, которые существовали? Тогда бы мне не придется беспокоиться о что Е есть, какой% с и все эти сложности, которые Не все, что интересно. Они полезны. Так надписью названия, к сожалению, не было изобрел около 40 с лишним лет назад. Никто не думал, чтобы написать ее. Но в этом вся прелесть наличия Язык программирования, как и в Царапины можно определить пользовательские блоки, так что В С и наиболее любом языке, не так ли определить свою собственную функциональность, может Вы можете определить собственные функции. Поэтому, даже если мы получаем по основным автоматически бесплатно, мы можем объявить наши собственные функции. Так что я собираюсь сделать несколько номеров здесь наверху, и я собираюсь объявить мое собственные функции, которая будет выглядеть немного странным сначала, но мы приедем вернуться к этому в ближайшее время. Я собираюсь сказать, пустоту, тем самым Указывает, что функция делает что-то, имеет побочный эффект, но не возвращает мне что-то в так же, как получить или десятичного получить строка сама по себе. И я собираюсь дать эту функцию имя печатными буквами, и я собираюсь указать, что этот парень собирается взять строку, а я буду называть, что Строка имени. Я мог бы назвать это все, что я хочу, но я хочу, чтобы мой код был самодокументируемыми. Другими словами, если один из вас были открыть этот файл и прочитать его, вы можете рода заключить из названия, что входного какую роль он должен играть. А теперь ниже, что, я собираюсь открыть фигурной скобкой и закрытых фигурной скобки, и так замечаю я следовал той же узор на линиях с четвертого по седьмой, как Я следил за хорошую неделю плюс Теперь, скажем, между девятью и линий 14, которые составляют основной. Другими словами, напечатать имя Другой функцией. Теперь, компилятор не будет знать, поворачивается назвать это автоматически потому что я буквально только что придумал, но он будет знать еще называют основным автоматически, а затем, конечно, в строка 13, я призываю моих собственных функций. И потому, что я заявил, что функции на четвертой строке перед основным, это будет учить компилятор то, что цитата, конец цитаты ", расшифровка подписи" означает и то, что он должен делать. Так я вроде придав ему новый пользовательский блокировать в контексте, скажем, царапины. Так что здесь, я могу поставить, что очень часто или повторяющиеся структуры кода я держу писать в классе, Е % S привет,% S / N ", - Что я хочу поставить здесь? S? Так я хочу поставить имя в этом контексте. Так заметить немного дихотомии здесь. Потому что я объявляю мою собственную функцию и я несколько условно называется распечатать имя, а потому, что я указанные в скобках, что это Функция принимает один аргумент типа который является строкой - так это слово или фраза или что-то вроде этого - и Я звоню, что имя аргумента, что означает, единственная переменная, которая находится в сферы, так сказать, это имя. S существует только между тем, что два фигурные скобки, конечно? Ну действительно, как через линию 10 14, так же, как в понедельник не может использовать S, но что я могу сделать, это пройти S в печать имя. Напечатать имя именно так происходит, чтобы дать ему псевдоним, синоним, прозвище, назвав его имя, и теперь использовать его в этой линии. Так что теперь позвольте мне сохранить это, уменьшения. Позвольте мне пойти дальше и сделать привет. Выглядит хорошо. Не выплевывать любые ошибки. . / Привет Enter. Как меня зовут? Давида. И привет Давиду. Так что не все, что интересно, Но подумайте сейчас. Теперь у вас есть, что же ингредиенты как мы делали в пустом месте, чтобы сделать наши собственные функции. Но есть немного Гоча. Предположим, что я действительно не думал, это через и я фактически без действительно думал об этом писал эта функция здесь. Ощущается вполне разумным. В царапин нет понятия нахождения в ваших сценариях. Вы можете поднять один здесь, один здесь, один здесь, и он может начать , чтобы выглядеть немного грязным, если вы не положите его аккуратно, но это не так имеет значения, где физически скрипты были на экране. К сожалению, в C - и это в отличие от языки, как Java и Python и другие, которые вы можете быть знакомы с - к сожалению, в C, порядок не имеет значения, потому что часы сейчас произойдет. Функция по умолчанию, что происходит запустить, является, конечно, основным. Главное собирается позвонить печати имя на линии восемь, но, к сожалению, компилятор даже не будут знать, что печатные название существует, пока не доберется до линии 11, которая, к сожалению, будет слишком поздно. Так что давайте делают привет. А теперь, черт побери, две ошибки генерируется. Так что теперь позвольте мне прокрутить до самого Во-первых, как мы всегда должны делать, и заметите, что он кричит на меня, "Неявная декларация функции напечатать имя. " Итак, мы рассмотрели это сообщение раньше, неявная декларация функции. Когда мы видели такую ​​ошибку? Когда я не включал библиотеку. Если я забыл cs50.h и я хотел бы получить кричал на для получаю строку или получить Int. Но в данном случае, эта функция печати имя не в библиотеке, не так ли? Это буквально в этом файле, так что что на самом деле проблема? Ну к сожалению, в C, это займет у вас буквально так невероятно, что если вы хотят функция называется печати имя существует, вы должны либо осуществление , которые функционируют на самом верху код так, чтобы она была доступна для снижения функции, но честно говоря, это становится неаккуратно очень быстро. Лично я, как положить первый основной потому что тогда это очень ясно, что это Программа делает на первый взгляд. И плюс, вы можете попасть в странный угол случаях, когда, если X хочет назвать у, но могли бы назвать Y X, вы просто физически не может на самом деле положил одну над другим. Но оказывается, в C, мы можем решить это очень просто. Я собираюсь положить немного пространства здесь, и я просто хочу, чтобы превентивно, хотя и несколько избыточно, научу компилятор, который существует функция называется печатными буквами, он принимает строку, и я буду называть его называют точкой с запятой. Так что это время в очереди четыре, которые мы раньше не видели, это декларация имени функции печати, но это только обещание, что эта функция будет в конечном счете быть определен, в конечном счете реализованы. Это теперь я могу оставить в покое, потому что Сейчас это определение, реализации, вроде последней мили реализации этого определенной функции. Так откровенно, что это глупо, это раздражает, но это путь С, и это потому что он принимает вас очень буквально и, как компьютер прямо следует, того, что именно то, что вы скажете ей делать, и так, что порядок важен. Так что имейте это в виду, и снова, начинают заметите повторения узоров. Вполне вероятно, вы будете, если вы еще не Уже сейчас начинают сталкиваться с сообщениями как это, которые на первый взгляд кажутся совершенно загадочным, но если вы начинаете смотреть на эти ключевые слова, как "Неявная декларация", упоминание о функция в данном случае - и, честно говоря, вы иногда даже получить немножко зеленых морковь символ, который говорит вам, где Вероятно, проблема есть - Вы можете начать работать ваш путь через еще не было видимо сообщения об ошибках. Есть вопросы по написанию собственную функцию таким образом? Давайте делать то, что это немного более убедительным. Вместо того, чтобы просто делать то, что имеет Побочный эффект печати, отпусти меня вперед и сохранить новый файл, и мы называем это positive.c, даже если это будет немного по-другому по сравнению с прошлым временем. И на этот раз, я хочу повторно реализовать Например positive.C последний раз, которое как заставить пользователя, чтобы дать мне положительное целое число. Но я должен был использовать десятичного получить последний раз. Разве не было бы хорошо, если было Функция называется получить Позитивный Межд что я мог просто передать эту кусок функциональности? Таким образом, разница здесь мы будем реализации получить положительные Интеллект, но в отличие от печать имя, которое имеет побочный эффект - он не вернул мне что-то вроде число или строка - Позитивный Межд получить, конечно, собираюсь вернуться, мы надеемся, положительно Int. Так давайте сделаем это. Включите cs50.h, включают в себя стандартные io.h. Тап_п недействительными. И теперь здесь, я собираюсь идти вперед и скажем, Интеллект, называют его N, равна получить положительные Int. И так же, как получить десятичного уже существует потому что сотрудники ее написал, я собираюсь предположим на минуту, что получить Позитивный Межд существует, и теперь я собираюсь идти вперед и сказал Е, спасибо за% I / N ", N. Так что теперь, если я компиляции этой программы, что будет происходить в моем терминале окно в нижней части экрана? Я собираюсь получить, что, вероятно, такая же ошибка, как раньше. Так давайте попробуем это. Сделать положительным. И опять же, неявное объявление функции, получить положительные Int. Поэтому мы можем разрешить это в несколькими способами. Я собираюсь сохранить его простым и просто положил мое заявление здесь и получить положительные Int. Мне нужна так называемая подпись. Подпись относится только к эстетике Первая строка программы. Итак, что нужно получить положительные десятичного взамен? Так Int. Я имею в виду в идеале, он вернется что-то вроде Позитивный Межд, но это не существует. Мы не видели, что среди наших данных типы, так что мы имеем дело с То, что у нас очень мало Типы данных для работы с. Но мы можем вернуться Целочисленное и просто доверять, что она будет положительной. Это будет называться получить положительные Int. И теперь, как о его аргументы? Оно принимает любой вход? Нужно ли любой вход? Поэтому не нужно знать Заранее ничего. Получить строка не, получить десятичного нет. Printf делает - для этого нужно иметь некоторые входных данных, передаваемых в нее - и распечатать имя необходимы некоторые материалы, но получить Позитивный Межд нет. Так что я буду явным сказали компилятору недействительными. Пустота является отсутствие что-либо еще. Так что ничего не означает Пустотность происходит внутри тех скобки, точка с запятой. И теперь в нижней части моего файла - и опять же, я просто вид анальных Здесь поставив основной в верхней части, который хорошая практика, потому что таким образом, в любое время вы или кто-то другой открывает файл, функциональности тут же. Вы можете погрузиться в с нуля. Так что теперь я собираюсь дублировать этот, получить Позитивный Межд пустота, но я не ударю запятой сейчас. Я собираюсь открыть фигурные скобки, и теперь мне нужно заимствовать некоторые идеи с понедельника. Итак, как вы помните, мы сделали что-то Нравится следующее время что-то было правдой. И что же мне делать? Я сделал что-то вроде дают меня положительное целое число, Немного строке. Я мог бы использовать любые слова, которые я хочу. И тогда я использовал то, что? Int N равно получить Интеллект, Никакие доводы на него. И заметите разницы. Когда вы вызываете функцию, когда вы используете функции, вы не ставите в пустоту. Вы делать это только при объявлении функции, преподавание, что компилятор он должен быть готов. Так что вам не нужно положить аннулированию туда сами. А теперь то, что было мое состояние? Хорошо, п не равно положительным, но это только псевдо-кода. Так как я могу выразить это более аккуратно? Таким образом, меньшее или равное нулю. Итак, еще раз обратите внимание, что вы можете сделать меньше или равно. Даже если это два отдельных символы, вы можете сделать это на клавиатуры как таковой. Но есть еще ошибка, Я облажался прошлый раз также. Я должен объявить - точно. Я должен объявить вне N цикла. Так что мне нужно поставить п до здесь, и я не хотите повторно объявить его здесь чтобы я получить новую переменную. Я просто хочу, чтобы присвоить значение здесь. И теперь я не совсем закончили. Позвольте мне забегать вперед и делать вид, я сделал. Принимать позитивные, и теперь есть новая ошибку. Управление достигает конца непустых функции. Так новое сообщение об ошибке, но если вы вид дразнить друг от друга каждое из слов, он , вероятно, намекает на то, что это неправильно. Управления. Управление означает лишь порядка операций в программе. Компьютера в контроле и что-то пошло не так. Таким образом, достигает конца непустое функции. Какую функцию он, очевидно, в виду? Какая функция не является недействительным? Так что положительные Интеллект, и немного путаницу, ну, это вроде недействительными. Она имеет спецификацию пустоту своими аргументы, но его выход будет иметь тип N. Таким образом, слово на левой стороне так называемый тип возвращаемого значения. Слово на внутренней здесь нуль или более аргументов что функция принимает. Так что же мне нужно сделать? На данный момент в моем коде, строка 21, где быстрое мигание сейчас, я есть Позитивный Межд внутри переменной называется N. Как мне вернуть ее основным? В буквальном смысле. Вернуться N запятой. Так же, как Колтон вернулся кусок бумаги с ответом на меня, понижая эту бумажку в маленьком черном коробку на стол, сделать это в Код, вы в буквальном смысле просто написать, вернуть N, и это, как будто были Колтон протягивая мне что-то физическое назад. В этом случае то, что происходит, это получить Позитивный Межд собирается вручить назад что предположительно положительным целое для кого? Где, что значение в конечном итоге? , Который заканчивается в этой переменной, N, и Затем мы продолжим линию девять. Итак, другими словами, в порядке операций, эта программа начинает выполнения и компилятор понимает, Ах, вы хотите в библиотеку? Отпусти меня захватить все, что находится внутри. Ах, вы хотите стандартной библиотеки IO? Отпусти меня захватить все, что находится внутри. Что же компилятор сказать себе , когда она попадает четыре линии? О, вы обещали реализовать Функция называется получить положительные, но мы вернемся к этому позже, что-то в этом направлении. Int основных пустоту просто означает вот внутренности моей программе. Линия семи просто фигурной скобкой. Линия восемь говорит на левом, дать мне 32 бита для целого, назовем его п. На правой стороне, это говоря получить положительные Int. Теперь давайте остановимся эту историю, потому что теперь Я не держу перемещении моего курсора вниз. Мой курсор теперь идет сюда, потому что теперь получить Позитивный Межд выполняет. Int N объявлен. Выполните следующие действия. Printf дает мне положительное целое число. Получить Целочисленное от пользователя, храните его в N, и, возможно, сделать это снова и снова. Этот цикл означает, что этот код может выполнить вверх и вниз как это снова и снова, но когда пользователь окончательно сотрудничает и дает мне положительные Интеллект, я ударил линии 21, и в этот момент номер вернул, а какой я должен выделить сейчас? Девять. Управления, так сказать, возвращается в линию девять. Это линия, которая сейчас у власти. Так вот то, что происходило все на этот раз под капотом, но когда мы использовали функции, такие как Е или даже получить строку, что кто-то другой написал вам, контроль того, как передал прочь к чужой код линии По линии По линии. Это просто мы не могли видеть его, и мы не мог представить ее в этом программу, потому что это в некоторых других файлов на жестком диске без ведома нам. Так что давайте компилировать и запустить это сейчас. Сделать положительным. Компиляция, это прогресс. . / Положительным. Дайте мне положительное целое число. Давайте быть трудным. Отрицательные 1. Ноль. Давайте дадим ему 50. Спасибо за 50, так и управления сейчас вернулась. Любые вопросы, то, по этому поводу? Да? [Неразборчиво]. Скажи еще раз. О, хороший вопрос. Таким образом, вы можете заметить, что здесь параллель Я вроде резки углу. В строке 12, я говорю, получить Позитивный Межд возвращает целое, но к тому же логике, теперь понятно, что в линии шесть, я говорю, что основная возвращается Интеллект, но то, что мы никогда раньше не было ни в одной из наших программ? У нас никогда не было упоминания о это клавиши возврата слова. Вот и получается, что в C, по крайней мере версия, что мы используем сделано в 1999 году, технически, это происходит автоматически. В любое время вы реализуете программу, и вы реализовать функцию, называется основным, что функция возвратит нуль умолчанию, если вы не говорите, в противном случае, и нулевой всего лишь соглашение. Мир тем самым возвращает ноль о том, что все хорошо, эффективно оставляя нас с четырех миллиардов возможные вещи, которые могли бы пойти неправильно, таким образом, что, если мы вернемся одной, что может означать код, который означает, что этот вещь пошло не так. Мы могли бы вернуть два, что означает, это другая вещь пошло не так. Мы могли бы вернуться четырех миллиардов, которые означает, что это другая вещь пошло не так. И если вы сейчас думаете о своем собственном ПК или Mac, вы можете вспомнить, что иногда вы получаете сообщения об ошибках, от программного обеспечения, которое вы использовании, а иногда он имеет человеческое понятное описание, но есть Часто код или номер на экране? Если это не приходит в голову, просто следите за это. Это обычно, что эти Коды в виду. Они включены в Microsoft Word и других программ, так что, если вы подадите отчет об ошибке с компанией, вы можете скажите им, ой, я получил номер ошибки 45. А некоторые программист назад в компании можете посмотреть, что в свою код и сказать: о, это потому что я сделал это ошибка, и именно поэтому пользователь получил это сообщение. Но, откровенно говоря, это просто немного отвлекает и немного утомительно заключить, что, по крайней мере, на наш Первые несколько программ, итак, мы были опуская его. Но все это время каждый из ваших Основными функциями тайно была эта линии автоматически добавляется для Вас компилятора, просто конвенции сэкономить ваше время. [Неразборчиво]. Вам не нужно включать его в основной. Это прекрасно. Вы должны включить его, если вы были реализации функции, как это. В противном случае функция плоского из не будет работать. Но в главном, в этом нет необходимости. Через неделю или две, мы начнем получать в эту привычку, как только мы хотим начать означающее ошибок. Очень хороший вопрос. Так быстро словесные перерыв, чтобы отметить, что в эту пятницу, мы не будем обедать как таковой, но мы будем обедать с некоторые из студентов и преподавателей. Если вы хотите присоединиться к нам, чувствуют себя свободно ходить в cs50.net/rsvp. 6:00 вечера в эту пятницу. Пространство, как всегда, ограничено, но мы продолжать делать это на почти еженедельной основе, если пространство закончится на этой неделе. Так захватывающим, что мы остановились на Понедельник было то, что строки могут на самом деле быть проиндексированы на, который просто означает, что вы может получить с первого символа, Второй персонаж, третий символ и так далее, потому что вы можете эффективно думать строкой, например привет, как в данном случае пять Письма внутри коробки. И вы можете получить на каждом из этих коробки с тем, что мы сделали синтаксиса ввести в понедельник? Те квадратные скобки на клавиатуре. Это просто означало пойти в расположение нуля. Мы начинаем отсчет с нуля, так что кронштейн нулю означает, ч, кронштейн одной означает, е, и так далее. И так все время, когда мы были используя строки и печатать на машинке "привет" и "Мир" и другие вещи на экране, это было сохранено в коробках, как это. И сделать предположение. Что означает каждая коробка представляют физически внутри компьютера? [Неразборчиво]. Простите? Персонажей. Таким характером, конечно, в случае строк, и характер просто восемь битов или один байт. Таким образом, вы, вероятно, по крайней мере смутно знакомы с тем фактом, что ваш Компьютер имеет память. Она состоит из двух типов памяти по крайней мере. Одним из них является жесткий диск, где Вы сохранили вещи постоянно, и это обычно большие, поэтому вы можете есть фильмы и музыки и так далее. Тогда у вас есть другой тип памяти называется RAM, R-A-M, произвольный доступ Памяти, и это тип памяти , который используется, когда компьютер работает, но, если вы потеряли власть или ваш аккумулятор умирает, все, что хранится в оперативной памяти исчезает, если вы потеряли власть в целом, потому что это не стойким. Как правило, есть, в эти дни, концерт этого, два концерта, может больше. И вверх оперативной памяти, что намного гораздо, гораздо быстрее, чем жесткие диски или даже твердотельных накопителей в эти дни, но это правило, дороже, так у вас есть меньше. Поэтому сегодняшний разговор действительно относится в ОЗУ, что тип памяти, который существует только пока есть власть подается в компьютер. Итак, когда вы вводите в Н-Е-Л-Л-О, Enter на клавиатуры, H происходит в одном байт оперативной памяти, E собирается в другой байт оперативной памяти, как это остальные слова. Так вспомним, что мы смогли сделать последний раз было так. Позвольте мне идти вперед и открывать файл , который мы назвали string.c, и вспомнить что это выглядело немного что-то вроде этого. Позвольте мне на самом деле откат и измените это именно то, что это было похоже, длина строки с. Так что смотрите на программу здесь. Мы включаем библиотеку, так CS50 что мы можем использовать получить строку. Мы включили в стандартную io.h поэтому мы можем использовать Е. Почему мы включаем string.h? Это было новым в понедельник. Таким образом, мы хотели длину строки. Ленг ул. Люди решили лет назад, давайте просто быть краткими. Вместо того, назвав его "длина строки" назовем ее "ул Ленг", и пусть мир понять это, и таким образом, это то, что мы получаем доступ к string.h с. Это знакомо. Это знакомо. Это знакомо. Это немного новых. В линии 22 - и мы вернемся к этому, но сейчас знаю - и вы бы только знаю, что это от того, читать документацию или если Вы знали, С, уже - получить строка иногда может испортить. Если пользователь действительно состязательного или отказывающихся от сотрудничества, и он или она просто не вводите ничего с клавиатуры или Типы столько на клавиатуре, которая переполняет память компьютера, В теории, взять веревку может вернуться нечто иное, чем строку символов. Он может вернуться специальное значение, называемое NULL заглавными буквами, N-U-L-L, а это только так называемые дозорные значения. Это специальное значение, которое означает что-то плохое произошло в данном случае. Это отсутствие строки. Так нуль я проверяю для просто так, что, Короче говоря, ул Ленг и другие функции, которые приходят с C, если они ожидают строку, но их можно передавать отсутствие строку, если вы передаете их ничтожными, компьютер или программа будет просто потерпеть крах сразу. Она будет висеть. Это будет бросить некоторое сообщение об ошибке. Могут произойти неприятные вещи. Так что, хотя это по-прежнему не четко - это будет иметь больше смысла в неделю или два - в линии 22, это всего лишь Примером самостоятельного оборонительного проверки ошибок на всякий случай один раз из млн. что-то пойдет не так, по крайней крайней мере, моя программа не рухнет. Так что, если с не равно что-то плохое, У меня есть цикл, и это было где у нас было, что другие новая часть синтаксиса. У меня есть цикл итерации от нуля до длины с. А потом вот, я была распечатка с Кронштейн я, но почему я использую C% всех Внезапно вместо% даже с хотя ей это строка? Это символ, не так ли? S является строкой, но что-то с кронштейном, с кронштейном я, где я равна нулю или один или два, это отдельные символа в строке, и поэтому для что Е должен быть проинформирован, что это действительно символ ожидать. А потом вспомнить, что сделал это Программа на самом деле? Распечатал его в столбцах. Да, именно. Это просто напечатал слово, которое я печатаю в колонка, один символ в строке. Итак, давайте посмотрим это снова. Так что строка. Составитель OK. . / Строка. Позвольте мне ввести Н-Е-Л-Л-О, ввода и более того, я понимаю, по одному на строку. Итак, позвольте мне сделать одно оптимизации здесь. Если вы думаете об этом, особенно если вы программировали раньше, есть возможно неэффективности линии 24. Другими словами, это не обязательно лучший дизайн. Простой, по крайней мере, как только вы помните, что Ленг ул есть, но это делать что-то потенциально немой. Что это может быть? [Неразборчиво]. Именно так. Это проверка на длину с каждый раз, даже при том, H-E-L-L-O всегда будет в пять символов. Каждый раз, когда через этот цикл пять не меняется. Я мог бы увеличивая я, но то, что это длина с на каждый итерации этого цикла? Это пять, это пять, это пять, а все же я задаю этот, тем не менее вопрос снова и снова и снова. Сейчас, честно говоря, компьютер так чертовски быстро, никто не заметит Разница в этом случае, однако эти виды бедных дизайнерских решений может начнут расти, если сам компилятор не пытается исправить это для вас, которые он обычно не будет, по крайней мере, в устройстве. Так что я собираюсь сделать это. Я собираюсь добавить запятую после моя первая переменная, я. Я собираюсь дать себе еще переменную, назвав его N, просто Конвенция для чисел, а затем я собирается назначить п значение строки длина с. А потом я собираюсь изменить мое состояние то, что? Я собираюсь изменить свое состояние в то время как я меньше N. Так что теперь, сколько раз я проверка длины с? Один раз, но это нормально, чтобы проверить, что я против N снова и снова, потому что теперь эти значения фактически не меняется. Сейчас на данный момент, просто знаю, что в любое время вы вызвать функцию, есть немного над головой, не достаточно, чтобы отговорить вас от действительно никогда не используя функции, но конечно, когда есть строка кода нравится, что - и границы получите более интересным вскоре - где есть возможность подумать, если я введите этот код, сколько раз он будет выполнять? Вы начнете видеть в течение долгого времени выполнение своих программ действительно изменится. В самом деле, одним из домашних заданий мы в сделано в прошлые годы включает в себя реализации, как вы помните из нулевой неделе, проверка орфографии, но проверки орфографии, которая была разработана для поддержки словарь 150000 плюс Слова, которые мы даем вам, ребята. Вы должны были бы написать код, который загружает эти слова в памяти, так что в коробки, как мы видели на экране момент назад, а затем так быстро, как вы может, вы должны быть в состоянии ответить вопрос о форме, это слово орфографическими ошибками? Это слово с ошибкой? Это слово с ошибкой? И что-то в этом роде, что мы сделано в прошлые годы включении его в, хотя и на отказ в факультативной основе Конкурс родов, в результате чего студентов, которые используют меньше памяти и меньше время, уменьшается загрузка процессора, в конечном итоге пузырьков вверх к верхней части немного доски лидера или рейтинг, который мы ставим на Конечно домашнюю страницу, как мы сделано в прошлые годы. Итак, еще раз, совершенно необязательно, но это говорит о возможности дизайна которые впереди как только мы начинаем построение поверх некоторых из этих основные строительные блоки. Итак, позвольте мне вернуться к этой схеме На мгновение и раскрыть немного нечто большее. Разумеется, эта строка, и мы взяли Преимущество несколько библиотек стандартные io.h которая имеет - Printf. Printf, между прочим. cs50.h, который получают десятичного и получить строку и так далее, string.h, который Ленг был ул. Но, оказывается, есть еще один. Честно говоря, есть много-много заголовков файлы, которые объявлять функции для библиотек, но это является ctype.h на самом деле происходит, чтобы быть несколько выгодно, потому что я собираюсь идти вперед и реализовать один другие программы здесь. Позвольте мне идти вперед и открывать что-то Я написал заранее называют capitalize.c, и давайте Посмотрите, как это работает. Обратите внимание, что я использую, в этой версии его, три знакомы файлов. Обратите внимание, что в строке 18, я получение строки текста. Уведомление в строке 21, я, утверждая, что Следующий код будет выгоду с, что введенный пользователем в, и как я это делаю? Ну, я беру - Урок, извлеченный из последнего времени - Я объявляю я и н и итерации более символов в строке. И тогда то, что этот блок код в соответствии с 24 по 27 делать с точки зрения непрофессионала? Строчной буквы обратно. Именно так. Если я с кронштейном - так что если г-й Характер с, что конкретный символов в строке, больше или равна нижнему регистру и - Напомним, что двойной амперсанд и означает - и тот же характер, с кронштейном I, является меньше или равно в нижний регистр Z, , что означает, что он или B или C или точка, точка, точка, или Z, что означает, это строчными буквами. Что я хочу сделать в таком случае? Ну, что я могу сделать это несколько загадочно, но давай дразнить этого друг от друга. Я буду называть Е, печатает% C потому что я хочу, чтобы перепечатать эту символа на экране. Я тогда собираюсь взять с кронштейном I, I-ый символ в сек, то почему бы и я делаю это маленькая хитрость, нижний регистр минус капитала? И что это даст Мне, вообще говоря? [Неразборчиво]. Именно так. Я действительно не помню - это было 65 на капитальный А. Мне не очень помните, что нижний регистр есть, Но независимо от того. Компьютер знает. Так, говоря, нижний регистр минус капитала, это странно, чтобы быть вычитания один символ от другого, но какие символы под капотом? Они просто цифры. Поэтому, что бы эти цифры, пусть компьютер помню а не мне человека. Так нижний регистр вычетом капитальных является собирается дать мне разницу. Это, оказывается, 32, и это было бы в случае строчными B и B капитала и так далее. Он остается последовательной, к счастью. Так что я по сути, говорит, возьми строчной буквы, что Вычтем стандарт различие, и эффективно изменений с кронштейном я от нижний регистр, чтобы, конечно, прописные, без моего действительно того, чтобы думать о или вспомнить, что это были за номера мы говорили о том, когда восемь добровольцы пришли на сцену? Теперь Между тем, в другой, если это не строчной буквы, как это определено по линии 24, его можно просто вывести. Я только хочу, чтобы коснуться символов, которые были на самом деле изначально нижний регистр. Итак, давайте посмотрим это. Сделать выгоду. Составитель, OK. . / Выгоду. И позвольте мне ввести Н-Е-Л-Л-О в нижнем регистре, Enter. И заметьте, что он преобразуется в верхнем регистре. Позволь мне сделать это снова другое слово. Как насчет D--V-I-D с первым D капитализируются как правило, это имя? Enter. Обратите внимание, она по-прежнему верна. Это только первый вывод, что D неизменным через что еще построить. Поэтому имейте в виду, то, Пару вещей. Один из них, если вы хотите проверить два условия сразу, вы можете и их вместе, как мы и предсказывали. Вы можете сравнить символы таким образом и эффективно лечить как символы цифры, но, честно говоря, это так чертовски загадочные Я никогда не буду помнить Как придумал это с нуля без объяснения причин через него в течение достаточно немного времени. Разве не было бы хорошо, если кто-то там написал вызванная функция ниже, чем мог ответить для меня истинным или ложными, этот символ в нижнем регистре? Ну, к счастью, тот, кто писал ctype.h сделал именно это. Хотел бы я пойти здесь и добавьте CType для C типа, а теперь отпустил меня сюда и переписать эту строку следующим образом. Так что если это называется ниже, я утверждаю, с Кронштейн я, то я собираюсь удалить эти две линии в целом. Так что теперь кого-то еще, я надеюсь, написал Функция называется ниже, и это Оказывается, что они сделали и они объявлены его внутри ctype.h. А теперь я собираюсь оставить линию 27 один, я собираюсь оставить линии 31 один, не заметить, как сильно я затянул мне кода. Это теперь чище. Это меньше, трудно смотреть через потому что теперь функции, кроме того, так чудесно назвал его просто делает то, что он говорит. Так что теперь я иду, чтобы спасти этого. Я иду, чтобы уменьшить масштаб. И так же, как и в нуля, вы могли бы Логические, логические значения истина или ложными, это именно то, что эффективно снизить отдачу. Позвольте мне перекомпилировать. Позвольте мне опять запустить. А теперь давайте попробуем это снова, H-E-L-L-О, Enter. Это очень хорошо. И попробуйте еще раз, убедиться, что я не что-либо испортите. То есть капитализируются, а также. Но этого не достаточно хорош, потому что Другая вещь, которую я никогда не собираюсь помните, если я не работать через него действительно тщательно, скажем, бумага эту проклятую линию. Не было бы неплохо, если бы Функция называется в верхний? Ну оказывается, есть находится в ctype.h также. Я собираюсь идти вперед и тип - лучше я выведу эту линию спины. Вместо этого здесь, позвольте мне идти вперед и сказать, заменить C% результате вызова этой функции верхняя на I-ый символ с. А теперь замечаю это становится немного сбалансированы. Я должен следить за сколько скобках я открываться и закрываться. Так что теперь это даже чище. Теперь эта программа становится все лучше и лучше разработаны, возможно, потому что это многое, многое другое для чтения, но Ведь не давайте исправим. Сделать выгоду. . / Выгоду. H-E-L-L-вывода. Давайте запустим его снова, D-A-V-I-D. Итак, мы все еще в довольно хорошей форме. Но теперь к верхнему. Я полагаю, что есть еще одна Уточнение мы могли бы сделать, что бы действительно хороший, которые могли бы действительно затянуть этот код и действительно, дайте нам пять из пяти дизайн, например. Что неплохо бы избавиться? Ну, посмотрите, как чертовски долго этот блок код только, чтобы сделать что-то простое. Теперь, как в стороне, как вы могли видели в этом разделе супер прошлом выходные, вам не нужно строго фигурные скобки, когда у Вас только одна строка кода, хотя мы предложили держать их так, что он делает много более ясным, как для Scratch в П-образной блоки, что внутри отрасли. Но разве не было бы неплохо, если бы в верхний, когда дано его вход, превратил его в верхний регистр, если это не так, и что будет быть замечательными в противном случае, если это уже верхний регистр? Просто передайте его через и оставить его в покое. Поэтому, возможно, он делает это. Я мог бы попробовать и просто надеюсь, что она делает, но позвольте мне ввести еще одну вещь. Вместо использования этого встроенный терминал окна здесь, напомним, что это квадратный значок черного дает большие окна терминала, что я может полный экран, если я хочу? Вот и получается, что они вроде странно имени, но есть такие вещи называются Человек страниц, страниц руководства, человек для краткости, и я могу получить доступ к ним человек, набрав - Что я хочу набрать? Человек в верхний. А теперь обратите внимание, если существует функционировать внутри компьютера, в этом случае устройство, которое как раз операционная система Linux, она собирается дать мне несколько загадочным набором выход, но вы увидите, что с течением времени она всегда форматируется в значительной степени так же вы начинаете привыкать к нему. Обратите внимание, в верхней части до верхней и видимо, те же самые документы для снижения. Кто бы ни написал он резал некоторых углы и положил все это на одной странице. Эти вещи "в целях жизни заключается в преобразовании Письмо верхний или нижний регистр. Обратите внимание, что под Synopsis, справочную страницу учит меня, что у меня есть файл включить, чтобы использовать эту вещь. Это дает мне подписей для этих Функции, оба из них, даже хотя мы сейчас только заботиться об одном. Вот теперь описании. Для верхней преобразует символ C в верхний регистр, если возможно. Еще не так поучительно, но позвольте мне Теперь смотрите под возвращаемого значения, вещь который вернул. Таким образом, значение, возвращенное в том, что из преобразуется буква или С, если преобразование не удалось. Что такое C? Оригинальный характер. Оригинальный характер и мы знаем, что, опять же, подойдя к синопсис, и тот, кто написал это Функция просто решил, что входной чтобы на верхний и нижний просто произвольно будет называться C. Они могли бы назвал это практически все, они хотят, но они оставили его просто, как в. Так что я консультировался с человеком странице. Эта фраза меня успокаивает, что если это не строчной буквы, это собирается просто отдай мне с, что совершенной, которая означает, что я могу избавиться от мое другое состояние. Итак, позвольте мне вернуться к Gedit и Теперь позвольте мне сделать это. Я собираюсь скопировать мой Е заявлении. Я собираюсь идти вперед и прямо в цикл, что из печати, и получить Теперь избавиться от всего этого, если конструкцией. Был не плохая идея, и это было очень много правильно и согласуются с все, что мы проповедовали, но только не надо. Как только вы понимаете, некоторые библиотеки функция существует, что кто-то другой написал, или может быть, вы писали в другом месте файла, вы можете использовать его и в самом деле начать подтянуть кода. И когда я говорю такие вещи, как хороший стиль, на то, что этот человек называется функционировать в верхний или ранее является нижняя удивительно полезно, потому что они очень описательный характер. Вы не хотели бы обратить ваше функций X и Y и Z, которые имеют гораздо, гораздо меньше смысла. Любые вопросы по этой серии улучшений? Таким образом, достаточно сказать, один из вынос еще как свои собственные проблемы Набор - может быть, проблема набора, но конечно P установить два и далее, даже когда они правы, не обязательно означает, что они просто идеально или все же продуманным дизайном. Вот другой оси начать думать о. Так что это было строку внутри вашего памяти компьютера, но если у вас есть целая куча персонажей вроде H-E-L-L-O внутри оперативной памяти, и предположим, что вам в вашей программе называем получить строку несколько раз так, что вы позвоните получить строку один раз, то вы позвоните получить строку снова. Ну, то, что собирается произойти с течением времени? Другими словами, если у вас есть линия кода, хотя из контекста, как Строка с добирается - давайте сделаем это. Имя строки равно получить строку. Поэтому предположим, что строка кода предназначен спросить у пользователя его или ее имя. В следующей строке кода хотела спросить пользователю для его или ее школе, и эта следующая строка, и так далее. Предположим, что мы постоянно спрашивают Пользователь еще и еще и еще строку. Они собираются оставаться в памяти в то же время. Один из них не собирается замещать другие. Школе не перекрывать друг друга. Но там, где они все в конечном итоге в памяти? Ну, если мы начнем рисовать на экране, которые мы можем использовать эту вещь здесь, как доска, если это черный прямоугольник представляет моего компьютера памяти, я собираюсь начать произвольно разделив его на небольшие квадраты, каждый из которых представляет один байт памяти. Честно говоря, если у вас есть гигабайт оперативной памяти в эти дни, у вас есть миллиард байт памяти в вашем компьютере, так миллиардов из этих квадратов. Так что достаточно сказать, это на самом деле не в масштабе. Но мы могли бы сохранить рисунок все эти ясно не в масштабе квадратов, и эта коллективно представляет моей памяти компьютера. Теперь мы просто сделаем точка, точка, точка. Итак, другими словами, когда я теперь побудить пользователю взять веревку, чтобы дать мне Строка, что происходит? Если пользователь введет в "привет", который заканчивается в H-E-L-L-вывода. Но предположим, что Затем пользователь типов - На самом деле, я не должен был делать привет, потому что мы просим их за их имена. Итак, давайте вернемся, если я могу сделать это. Так что если я типа в D--V-I-D имени Моему, но напомнить, что во второй строке Код был получить строку снова чтобы получить их школе. Где это слово, которое пользователь типы собирается идти дальше? Ну, может, это будет идти в H-A-R-V-A-R-D. Так что, хотя я нарисовал его в виде двух строк, это будет просто целая куча байтов в вашем оперативной памяти компьютера. Там проблема сейчас, потому что сейчас, если я использование оперативной памяти в этом очень разумно а как бы наивно, что вы можете видимо, не отличить? Где начинается одно и где заканчивается один, верно? Они вроде размытия вместе. Вот и получается, компьютер не делает этого. Позвольте мне на самом деле прокрутить назад во времени несколько символов, а вместо Гарварда собирается сразу после имени пользователя, пользователь получает на самом деле, за кулисами, специальные символы вставляется Компьютер для него или нее. / 0, иначе известной как нулевой символ раздражающе называемый N-U-L, не N-U-L-L, но вы пишете его как / 0. Это просто все нули является маркером в между первое слово, которое пользователь напечатан и второго. Так что на самом деле сейчас Гарвардского заканчивается как это последовательность символов И еще один / 0. Итак, другими словами, при наличии этих дозорные значения, восьми последовательных нуля бит, теперь вы можете начать различать один символ от другого. Так что все это время, что был "привет" является на самом деле "привет" с / 0, а Между тем, вполне может будет немного больше оперативной памяти внутрь компьютера. Позвольте мне сделать еще одну вещь сейчас. Оказывается, что все эти квадраты мы рисую, они, да, строки, но в более общем эти вещи являются массивы. Массив это просто кусок памяти вот спина к спине, чтобы спина к спине, и как правило, используется массив путем этой площади обозначения кронштейна. Итак, мы собираемся, чтобы увидеть эти совсем немного с течением времени, но позвольте мне идти вперед и открываются, назовем его возраста. И обратите внимание, что мы можем сделать с эти же трюки, немного немного больше синтаксисом. Таким образом, в строке 17 этой программы - на самом деле, позвольте мне запустить программу первым поэтому мы можем видеть, что эта вещь делает. Позвольте мне обратить возрастов, чтобы сделать компиляции этой программы. . / Возрастов. Сколько человек в комнате? Назовите это три. Возраст первого лица? 18, 19 и 20. А теперь несколько смешно, я просто сделали программу, которая возрастов тех, трех человек. Таким образом, есть очевидная возможность для некоторой забавы вот арифметика. К счастью, математика является правильным. 18 пошел в 19, 19 пошел 20 и так далее. Но что на самом деле значит быть иллюстративные вот как мы сохраняем этих трех людей возрастов. Позвольте мне увеличения на то, что здесь происходит. Итак, сначала, эти первые несколько строк должно получать довольно хорошо знакомы. Я просто с помощью которого пользователь Количество человек в комнате. Тогда я использую получить десятичного и время, чтобы сделать делать это снова и снова и снова. Мы видели, что модель и раньше, но строка 27 является новым и на самом деле довольно полезными, и станет более полезными. Обратите внимание, что что по-другому в линии 27 то, что я, кажется, объявив Int называется возрастов, но ждать. Это не просто десятичного возрастов. Там в эти квадратные скобки, внутри которого п. Таким образом, кронштейн н в данном контексте не Внутри Е заявление здесь, но В этой единственной линии 27, эта линия говоря: дайте и мне целых N, каждый из которых имеет тип Int. Так что это ведро, так сказать, из, В этом случае, три целых Вернуться к спина к спине так, что я эффективно есть три переменных. В качестве альтернативы, быть Ясно, это было бы. Если бы я хотел первым студента возраста, я мог бы это сделать. Если бы я хотела второго студента возрасту я мог бы сделать это. Если бы я хотел третьего студента возраста, я мог бы это сделать. И не дай Бог нам нужно каждому возраста в этой комнате - Я имею в виду, это чертовски много копий, вставьте снова и снова и снова. И плюс, как только я компиляции этой программы Если другой студент ходит в более чем из этой двери, теперь мой номер переменных является неправильным. Так что приятно об массив как только вы начинаете чувствовать себя копирование и вставка, вполне вероятно, что это не самый лучший подход. Динамический массив потенциально. Я не знаю заранее, сколько людей собираются быть в комнате, но я знаю, что нужно п из них, а я выяснить, N, когда придет время. Эта строка кода в настоящее время означает, дай мне участок памяти, который выглядит следующим где количество окон на экране полностью зависит от N, что Пользователь ввели дюйма Так что теперь на остальной части этой программы на самом деле очень похоже на то, что мы только что сделали с символами. Заметьте, что я для петли начиная с линии 30. Так что сразу после я получаю массив, я итерации от Y равно нулю на до н. Я просто эту поучительную Е сообщение просто говорю, дайте мне возрасте человек #% я, так что номер один, номер два, номер три. И почему я это делаю? Честно говоря, люди предпочитают считать от одного в то время как на компьютере до ученых, нулю и выше. Компьютер ученые не собираются использовать этот вид программы, так что мы собирается просто начать отсчет в одно, как нормальные люди. И сейчас в строке 33, обратите внимание на несколько другой кусок синтаксис. I-го возраста, что в переменной типа Массив собирается получить Int. И теперь, наконец, это просто арифметические здесь. Я решил в отдельной петле требовать проходит некоторое время, и теперь в этом отдельный цикл, эти строки выполнить. Через год, человек, которого я буду я лет, не заметить, что это не Я переменную. Это сейчас я% для Int. И обратите внимание, как первый заполнитель, я подключите я плюс 1, так что мы рассчитываем как нормальный человек. И тогда для значения их возраст, для Я лет, я беру возрастов кронштейн Я - и зачем я это делаю плюс один здесь? Они только в возрасте. Это мой глупый выбор программ. Они просто в возрасте одного года. Я могу ввести любое число, которое Я действительно хочу там. Так что на самом деле все отношение к вышесказанному? Ну, позвольте мне на самом деле прокрутить назад сюда и нарисовать картину , что ждет впереди. Что мы будем делать с нашим следующим Проблема будет установить два вмешиваются в Мир криптографии. Так что это строка символов, так что Последовательность из нескольких символов, и что это говорит? Это не в онлайн-версии из слайдов. Поэтому я утверждаю, что это равно это, глупая реклама в течение многих лет назад, что может на самом деле вспомнить одна из его происхождении. Так что это пример шифрования или криптографии. Получается, что, если вы хотите на самом деле отправить информацию или поделиться Информация с кем-то надежно, как такое сообщение, вы можете карабкаться букв. Но, как правило, слова Не случайно яичницу. Они переставляются в той или изменен в некотором роде, так что - ой. Это весело спойлер в следующий раз. Таким образом, вы можете отобразить, что является очевидно O заметить, что Б. выстраивает Капитализация-мудрым. Видимо R становится электронной. Видимо F-H-E-R становится S-U-R-E. Так оказывается, есть отображение, а в этом случае есть довольно глупо отображение, если кто понял это? Это то, что называется Rot 13, поворот 13. Это самая глупая шифрования механизмы, потому что буквально только что добавляет 13 к каждому из писем, глупо в том смысле, что если вы просто есть немного свободного времени на ваших руках и карандаш, или вы просто думаю, что это через в вашей голове, вы можете попробовать всех возможных дополнений - один, два, три, точка, точка, точка, от 25 до всего вращать весь алфавит, и в конце концов, вы поймете, то, что это сообщение. Так что если вы сделали что-то вроде этого в начальной школе передачи сообщений вашего лучший друг, если ваш начальной школе Учитель просто прочитать сообщение и грубой вынуждены решение, Вы, возможно, получили Ответа на это. Теперь, конечно, в реальном мире, криптографии является более сложным. Это фрагмент текста из Компьютерная система, которая имеет имя пользователя и паролей, так как почти все наши делают, и это то, что пароль может выглядеть, если хранящиеся на жестком диск, но в зашифрованном виде. Это не только вращение буквы А В и В С. Это гораздо более сложной, но использует то, что обычно называют секретным ключом криптографии. Эта картина рассказывает следующую сюжет с несколькими иконами. На левом, мы имеем то, мы будем называть простой текст. В мире криптографии, простой текст только исходное сообщение написано на английском или французском или любой язык вообще. Если вы хотите зашифровать его, мы передадим это наглядно через замок, так что некоторые виды алгоритмов, некоторые функции или программы, которые кто-то написал что карабкается буквы, надеюсь более сложно, чем просто добавление 13 для каждого из них. Что вы получаете из этого процесса в среднего там называется cyphertext. Так вид сексуального слова. Это просто означает, что это зашифрованный версия простой текст. И только если у вас есть, что же тайна, 13 или минус 13, вы в состоянии расшифровать подобное сообщение. Таким образом, в проблеме установить два, среди вещей вы будете делать, если в хакерской Издание, вам придется писать код для взломать эти пароли, выясняя то, что они были и как они были зашифрованное, хотя мы и дать вам немного руководства по пути. В Standard Edition, введем пару шифров, шифрование Механизмы, одна называется Цезарь, один называется Vigenere, которые все еще вращения шифры, где становится что-то, B становится чем-то, но Вы должны сделать это программно потому что там действительно будет тайным ключ участвует который обычно представляет собой число или ключевое слово, что только отправителем и получателем этих сообщения должны понять. Теперь, это на самом деле имеет воплощений в реальном мире. Это, к примеру, сиротка Тайные декодер Энни кольцо, и вы может на самом деле реализации этих вращения шифры - Что-то становится, B становится что-то - с парой колес, один на внешней стороне, один на внутренней такое, что если повернуть колесо или кольца, вы можете выстроить письма с разных букв, получения секретного кода. И так как на сегодняшний день захватывающим, то, что я думал, что я делаю это немного возврат, что если вы включите телевизор 24 декабря, вы можете смотреть фильм до тошноты для 24 часов подряд. Но на сегодняшний день, я открою его здесь и дать нам только две минуты педагогически соответствующих Рождественская история с маленьким человеком по имени Ральфи. [ВОСПРОИЗВЕДЕНИЕ ВИДЕО] -Да будет известно всем и каждому, что Ральф Паркер Настоящим назначен Член сиротка Энни тайну круга и имеет право на все почести и преимущества происходящих ней. -Подпись, сиротка Энни. Контрассигнуют, Пьер-Андре, в чернила. Почести и преимущества уже в возрасте девяти лет. [Кричит по радио] Давай, давай покончим с этим. Мне не нужны все такое прочее о контрабандистов и пиратов. -Слушай завтра ночь для заключительные приключения черного пиратский корабль. Теперь пришло время тайных Энни Сообщение для Вас членами тайного круга. Помните, дети. Только члены Тайного круга Энни может расшифровать секретное сообщение Энни. Помните, что Энни в зависимости от вас. Установите контакты до B2. Вот сообщение. 12, 11, 2 - -Я в моей первой встречи тайной. -25, 14, 11, 18, 16 - -Пьер был в отличной сегодня голос. Я могу сказать, что сообщение сегодняшнего было действительно важно. -3, 25. Вот сообщение из себя Энни. Помните, не говори никому. -90 Секунд спустя, я в единственном номере В доме, где девятилетний мальчик могла сидеть в уединении и декодирования. Ага, Б. Я пошел к другому. E. Первое слово "быть". С. Он доносился проще. U. 25. Это R. -Давай, Ральфи. Я должен идти. -Я сейчас спущусь, Ма. Вот здорово. -T. О. Обязательно. Будьте уверены, к чему? Что было сиротка Энни пытается сказать? Будьте уверены, к чему? -Ральфи, Рэнди должен уйти. Не могли бы вы выйти? -Все в порядке, мама. Я сейчас выйду. -Я все ближе к теперь. Напряжение было ужасно. Что это было? Судьба планеты может висят на волоске. -Ральфи, должен идти Рэнди. -Я сейчас выйду на с ума сойти. -Почти. Мои пальцы полетели. Мой разум был стальной капкан. Каждую пору вибрации. Это было почти ясно. Да, да, да, да, да. -Обязательно пейте вашей Ovaltine. Ovaltine? Вшивой коммерческой? Сын сука. [КОНЕЦ ВИДЕОВОСПРОИЗВЕДЕНИЕ] АС 1: Это CS50, и Проблема будет установить два. Увидимся на следующей неделе. Докладчик 2: На следующей CS50, это происходит. Выступающий 1: Так одна тема у нас нет посмотрел на до сих пор является , что указателей на функции. Теперь, указатель на функцию только адрес общественных функции, но так же, как - Сын -