[МУЗЫКА ИГРАЕТ] David J. МАЛАН: Хорошо. Это CS50, и это это конец недели 2. Итак, сегодня, мы собираемся продолжить наш обзор на то, как мы представляем вещи под Вытяжка-- отходя от номера, как целых и плавающей запятой и сосредоточение внимания на строки и в конечном счете, более интересные программы. Но мы также взглянем на Пару предметно-ориентированного problems-- первый из которых быть с участием криптографии, искусство карабкаться информацию, , в котором вы видите выше здесь картина Радио Сирота Энни Секрет декодер кольцо из прошлого. Это на самом деле очень примитивная форма и для детей форма cryptopgraphy причем это кольцо имеет два disks-- один внутри и один снаружи. И, вращая один из тех, вы можете существенно выстраиваются письма как через Z с другими буквами как B через А. Другими словами, Вы можете буквально повернуть алфавит, тем самым придумывать отображения из письма букв, так что, если вы хотел послать секретное сообщение кому то нравится Энни, вы могли бы написать вниз ваше сообщение, и затем поверните буквы, в результате чего, если вы имеете в виду сказать "А", вы вместо сказать "B" Вы хотите сказать, "B" Вы вместо сказать "C" - или нечто более умное чем that-- а затем, наконец, так долго, как Энни имеет этот декодер кольцо, она может декодировать сообщение. Теперь, вы, наверное, помните, в самом деле, что это был использован в очень известном фильме, что играет до тошноты во время Рождественский сезон. Давайте взглянем здесь. Ralphie PARKER: "Да будет известно всем в резюме что Ральф Паркер настоящим назначается членом сиротка Энни Secret Круг и имеет право на все почести и преимущества происходящих в этой ". Ralphie PARKER (повествующая): Подпись сиротка Энни. Контрассигнуют, Пьер Андре! В чернил. Награды и преимущества, уже в возрасте девяти лет. [МУЗЫКА ИГРАЕТ] [RADIO БОЛТОВНЯ] Ralphie PARKER: Давай. Давайте покончим с этим. Мне не нужно все такое прочее о контрабандистов и пиратов. Диктор: Слушайте завтра ночь для заключительной приключений из The Black пиратский корабль. Теперь, пришло время для Энни Секрет сообщение для вас членов Тайной кругом. Помните Дети, только членов из Энни Secret Circle может декодировать секретное сообщение Энни. Помните, Энни в зависимости от вас. Установите флажки для B-2. Вот message-- 12, 11, 2-- Ralphie PARKER (повествующая): Я нахожусь в своей первой тайной встречи. Диктор: --25, 14, 11, 18, 16-- Ralphie PARKER (повествующая): О, Пьер был в отличной голосовой сегодня. Я мог бы сказать, что сегодня вечером сообщение было действительно важно. Диктор: --3, 25. Это сообщение от самой Энни. Помните, никому не говорите. [Задыхаясь] Ralphie PARKER (повествующая): Девяносто секунд спустя, я в единственной комнате в Дом, где девятилетний мальчик мог сидеть в уединении и декодирования. Ах. "Б." [Хихикает] Ralphie PARKER (повествующая): Я пошел к другому. "Е." Первое слово "быть". Да! Он доносился проще. "У." [Хихикает] Рэнди PARKER: Да ладно, Ralphie. Я должен идти! Ralphie PARKER: я сейчас спущусь, Ма. Вот здорово. "Т." "О." "Будьте уверены, в "." Обязательно "что? То, что было сиротка Энни хочешь сказать? "Обязательно" что? МАТЬ: Ralphie, Рэнди должен уйти. Не могли бы вы выйти? Ralphie PARKER: Ладно, мама! Я сейчас выйду! Ralphie PARKER (повествующая): Я был все ближе сейчас. Напряжение было страшное. Что это было? Судьба планеты может висят на волоске. МАТЬ: Ralphie, Рэнди должен идти! Ralphie PARKER: Я буду из, с ума сойти! Ralphie PARKER (Повествующая): Почти там! Мои пальцы летали! Мой разум был стальной капкан. Каждый пор вибрирует. Это было почти ясно! Да! Да! Да! Да! Ralphie PARKER: "Будьте уверены, пить свой Ovaltine ". Ovaltine? Вшивый коммерческий? [МУЗЫКА ИГРАЕТ] Ralphie PARKER: Сукин сын. [Смеется] David J. МАЛАН: Так что же тогда проблеск на каком криптографии может быть для это-- а пить из прошлого. Так быстро объявление. Если вы свободны в этом В пятницу в 1:15 вечера и будет бы присоединиться к нам для CS50 обед, направиться в этом URL здесь. Первый пришел, первый обслужен, как обычно. Но с течением времени, мы позаботимся, чтобы Наиболее кто хотел бы участвовать может планировать мудрый. Так струны. У нас есть Zamyla-- которых Вы сейчас встретились, скорее всего, в задаче Набор 1-- которого название пишется таким образом. И предположим, что вы набрали ее имя в компьютерную программу, это используя нечто вроде GetString. Для того, чтобы восстановить эти нажатия клавиш, как мы можем идти о представляющих строка, слово, абзац, или несколько букв, как это здесь? Мы говорили в прошлый раз о целые и проблемы которые возникают с целочисленного переполнения и плавающей запятой и проблемы, которые возникают в точности. Со строками, мы, по крайней мере есть немного больше гибкости потому strings-- просто в реальном world-- может быть довольно произвольной длины. Довольно короткая, довольно долго. Но даже тогда, мы собираемся что найти компьютеры могут иногда запустить из памяти и даже не хранить достаточно большой строку. Но сейчас, давайте начнем визуализировать строка как нечто в этих коробках здесь. Так шесть таких коробок, каждая из которых представляет символ или "символ". Так напомним, что "символ" - с-ч-а-r-- является один из встроенных типов данных в C. И что приятно, что вы можете использовать такого рода в качестве строительного блока, паззл, если хотите, чтобы сформировать больше тип данных, которые мы будем продолжать называть "строку". Теперь, что полезно о мышлении о таких вещах строк в этом случае? Ну, получается, что мы можем на самом деле использовать эту структуру на самом деле доступ отдельных символов в довольно простым способом. Я собираюсь идти вперед и создавать файл с именем "stringzero.c," но вы можете называть его как угодно. И на сайте ходе является Этот пример уже заранее, так что вам не нужно введите все. И я собираюсь идти вперед и сначала сделать тап_п пустоту. И в течение нескольких дней, мы начнем дразнить друг от друга что пустота здесь, почему это Int рядом с основным, и так далее. Но сейчас, давайте продолжим скопировать вставить, что. Я собираюсь объявить строку под названием сек. И я собираюсь вернуться из GetString независимо от типа пользователя в. Это собирается быть простым Программа, никакие инструкции, Я просто собираюсь слепо ожидать, что пользователь знает что делать, чтобы сохранить его простым. А теперь я буду иметь для петли. А внутри моего для цикла я будет иметь INT I получает ноль. И я, опять же, всего лишь условность, индексная переменная для подсчета, но я мог бы назвать это все, что захочу. Я собираюсь сделать я меньше than-- хорошо Имя Zamyla является длинный шесть букв. Так что я собираюсь трудно код, который есть на данный момент. И тогда я ++. А теперь внутри них вьющиеся брекеты я собираюсь сделать Printf, и я хочу, чтобы распечатать один характер, в то время. Так что я собираюсь использовать% с для пожалуй, впервые. А потом я хочу, чтобы напечатать каждый характер по своей собственной линии. Так что я собираюсь поставить немного косая черта п существует. Закрыть цитата. А теперь я хочу сделать что-то здесь. Я хочу, чтобы распечатать конкретных буква в строке, с, как я итерации от нуля на до шести. Другими словами, я хочу, чтобы распечатать i-го характер с. Теперь, как я могу это сделать? Ну так же, как коробок в это представление здесь, вид, вызывают в воображении понятие бокса буквы в, вы можете так же сделать это синтаксически в C просто указав, Я хочу, чтобы распечатать S: i-го характера. Используя квадратные скобки на клавиатуре компьютера что на клавиатуре США являются как правило, выше вашего возвращения ключа. Так что это не совсем правильно все же, как вы, наверное, заметили. Но я собираюсь вида слепо идти вперед здесь. И я собираюсь сделать сделать строку 0. Но прежде чем сделать это, давайте посмотрим, если мы не можем предвидеть некоторые общие ошибки. Будет ли это для компиляции? Нет, я пропускаю целую кучу вещей. Библиотеки я слышал. Итак, какие файлы заголовков может я хочу добавить здесь? Да. АУДИТОРИЯ: Вам нужно Стандарт I / O [неразборчиво] David J. МАЛАН: Отлично. Поэтому мне нужно стандартный ввод / вывод. Для чего Цель я хочу стандартный ввод / вывод? Для Printf. Так включают stdio.h. И вы также предложить, чтобы я включил Библиотека CS50 по какой причине? Чтобы иметь строки. Таким образом, мы будем видеть, что Библиотека CS50 в делает Для создания этой понятие строки. Но сейчас, вы можете просто думаю о нем, как фактический тип данных. Так что, кажется, немного в порядок. А теперь я собираюсь идти вперед и действительно делают строку 0. Составитель. Так что это хорошо. Так ./string0 позвольте мне увеличить поэтому мы можем см более тесно, что происходит. Enter. Z-А-М-Y-L-входа. И мы распечатали на имя Zamyla в. Так что это очень хорошо. Теперь давайте идти вперед и запустить эту программу снова, и введите из полное имя Daven в. Сюрприз, сюрприз. Enter. Хм. Мы не печатается Daven сайт полный имя правильно. Теперь это должно быть очевидно в ретроспективе из-за чего, рода, глупо дизайнерское решение? Да, я жестко шесть внутри мой цикл. Теперь я сделал это только потому, что Я знал, что имя Zamyla в должен был быть из шести букв. Но, конечно, это не Общее решение. Вот и получается, мы можем динамически выяснить длину строки позвонив функцию с именем StrLen. Опять же, сознательно лаконично назвал просто чтобы сделать его более удобно набирать. Но это синоним получение длины строки. Я собираюсь вернуться в моем терминале окно и повторно запустите компилятор. Но это на меня орать. Косвенно объявив библиотечную функцию STRLEN с типом знака Int const-- Я потерялся. Полностью. Так, в частности, как свой глаза начинают тускнеют с сообщениями об ошибках, как это, фокусе честно на первых же слов. Мы знаем, что проблема в Линия 8, как указано здесь. И это в строке-0.c. Косвенно объявив Библиотечная функция STRLEN. Так, что, как правило, собирается быть образцом сообщений об ошибках. Косвенно объявив то. Короче говоря, то, что есть я, казалось, сделали по отношению к линии 8, здесь. Что может быть решение еще если вы никогда не использовали StrLen себя? АУДИТОРИЯ: Часть другую библиотеку? David J. МАЛАН: Часть из другой библиотеки. Так он объявлен, так сказать. Об этом говорится в некотором файле кроме stdio.h и CS50.h. Теперь, где она определяется? Чтобы быть честным, вы должны либо просто знаю, что это от верхней части головы, или вы Google это и выяснить. Или это вы знаете, я открыл в CS50 оборудование, для терминальной программы, которые просто большой, полный экран версия что в нижней части окна GEdit в. И получается, что есть аналогично лаконичным команда, называется человек для руководства, где, если вы вводите Имя функции и нажмите Ввод, вы получите обратно довольно тайной документации. Это просто текст, который обычно выглядит немного-то вроде этого. Это немного подавляющее на первый взгляд. Но честно говоря, я собираюсь пусть мои глаза тускнеют и акцентировать внимание только на части Я забочусь о на данный момент. Что это. Какой выглядит структурно, как то, что я знаком с. Действительно страница мужчина, так говорить, скажет вам, в том, что заголовок файла функцию как StrLen определяется. Так что я собираюсь вернуться теперь к Gedit. И я собираюсь идти вперед и добавить в здесь #include и сохраните файл. Я собираюсь очистить экран с Контроль L Если Вам не интересно. И я собираюсь повторно запустить марку string.0, компилирует этот раз. ./string.0 Zamyla. Это, казалось, работало Отпусти меня вперед и перегрузите его с Дэвенпорт. Enter. И это тоже, казалось, работало. Так что мы можем сделать немного лучше, чем это, хотя, мы можем начать аккуратные вещи до всего лишь немного. И я собираюсь на самом деле ввести еще одну вещь сейчас. Я собираюсь идти вперед и сохранить это в другой файл. И я буду называть этот файл string1.c просто в соответствие с кодом Вы сможете найти на сайте. И давайте сосредоточиться на точно так же код. Получается, что у меня есть был вид взятия как должное тот факт, что мой ноутбук, и, в свою очередь, CS50 устройство есть много памяти, много RAM, много байт пространства , в котором я могу хранить строки. Но реальность, если я набрал долго достаточно, и достаточно нажатия клавиши, Я мог в типа теории в более символов чем мой компьютер физически имеет память для. А это проблематично. Многое, как Int может только Количество так высоко, в теории, Вы можете втиснуть только так много символов в ОЗУ или Random компьютера Доступа к памяти. Так уж лучше предвидеть эта проблема, даже хотя это может быть редкий пограничные случаи, так сказать. Не бывает, что часто, может случиться. И если это произойдет, и я не предвидеть и программа для него, моя программа может делать, кто знает что. Замораживание, повесить, перезагрузка, что угодно. Что ожидается могло бы случиться. Так что я собираюсь делать Теперь, отныне действительно, является, прежде чем я слепо использовать переменную как с, что был назначен возвращаемого значения некоторые другие функции, как GetString, Я хочу убедиться, что что его значение является действительным. Так что я знаю только из прочитав Документация CS50 для GetString, что в конечном итоге мы укажу вам на, что GetString возвращает специальный символ называется NULL, N-U-L-L во всех шапки, если что не так. Так обычно, это возвращает строку. Но в противном случае, если она возвращает N-U-L-L-- мы в конце концов посмотреть, что на самом деле означает: это просто означает, то плохое случилось. Теперь это означает, так же, как в пустом, Я могу проверить состояние здесь в C, если с не равно NULL. Так что, если вы не видели это раньше, это просто означает, не равно. Так что это противоположность равные с равными, которая, напомним, отличается от одного равна, что назначение. Таким образом, если с не равно NULL, только тогда Я хочу, чтобы выполнить эти строки кода. Таким образом, другими словами, прежде, чем я нырять в слепо и начать итерации Больше чем, и его обработки как будто это последовательность персонажи, я собираюсь сначала проверить, постойте, это ы определенно не равным этому особого значения, NULL? Потому что если это так, плохие вещи могут случиться. И сейчас, предположим, что плохие вещи происходит значит ваши сбой программы, и вы не можете обязательно восстановить. Так откровенно говоря, это выглядит уродливее. это вроде запутанной сейчас взглянуть на. Но это станет более знакомы в ближайшее время. Но я собираюсь предложить Теперь одна улучшение. Это улучшение в корректности. Моя программа в настоящее время более правильно, потому что в редких случаях, когда не хватает памяти существует, я буду обращаться с этим, и я не буду просто ничего не делать. Я по крайней мере не рухнет. Но давайте сделаем окончательный вариант здесь. И файл с именем string2.c. Я собираюсь вставить, что Тот же самый код на мгновение, и я собираюсь выделить этот Линия, 11, здесь, на мгновение. Теперь реальность такова, что умные компиляторы как Clang может исправить это для нас за кулисами без нашего не зная. Но давайте подумаем об этом принципиально как проблемной дизайна. Эта строка кода является, конечно, говоря, инициализировать некоторые переменные я к 0. Это довольно просто. И то, что снова это Заявление, здесь, я ++, делаешь? Мы видели это и раньше, но мы действительно не говорить об этом. АУДИТОРИЯ: Инкрементирование I. David J. МАЛАН: Инкрементирование я. Так на каждой итерации через этот цикл, каждый цикл, Вы увеличивая I на единицу. Так что становится больше, и больше, и больше пока цикл не завершится. Как это прекратить? Ну есть этот средний условие, которое мы использовали раньше. Вы видели и в пошаговые в P набора. Но что это высказывание? Сделайте следующий цикл так Пока я меньше чем? АУДИТОРИЯ: длину строки. David J. МАЛАН: Длина строки. Так оно переводится довольно чисто на английский язык в этом смысле. Теперь проблема заключается в том, что каждый раз, когда перебора этой петли в теории, Я задаю этот вопрос. Является я меньше длина строки с? Является я меньше длина строки с? Теперь, я меняется на каждой итерации? Это. Из-за ++. Таким образом, каждый итерации я становится все больше. Но это с становится все больше, или меньше, или изменения вообще? Количество Так что в плане дизайна, одной из осей , вдоль которой мы пытаемся оценить код в классе, это чувствует вид глупо. Как вы буквально, на каждой итерации из этой петли с просьбой же чертовски вопрос снова, и снова, и снова, и в буквальном смысле он никогда не изменится. По крайней мере, если я не прикасаясь с и пытается изменить содержимое с. Так что я могу сделать немного лучше, чем это. И то, что я собираюсь сделать, это не объявить только один переменная В, но вторая переменная я буду произвольно, но условно, назвать это н. Связать н равна длина строки с. А потом сюда, я собираюсь сделать умный мало оптимизации, так сказать, что в конце концов нет правильнее или не менее правильно чем раньше. Но это лучше, дизайн. В том, что я использую меньше времени, меньше циклов процессора, так говорить, чтобы ответить тем же вопрос, но только один раз. Любые вопросы по этой генерального Принцип совершенствования, говорят, эффективность программы? Да? АУДИТОРИЯ: Почему вас использовать [неразборчиво]? David J. МАЛАН: Хороший вопрос. Так почему же мы поставить ++ на конце я вместо началом I? В этом случае он имеет нет функциональное воздействие. И вообще, я, как правило, использовать оператор постфиксную так что это немного более ясно, как , когда операция происходит. Для тех, кто незнаком, есть еще один заявления, в котором вы могли бы сделать ++ I. Это функционально эквивалентны в этом случае потому что нет ничего иного, вокруг этого приращения. Но вы можете придумать случаи и строк кода , в котором, что делает разницу. Так вообще, мы не даже говорить об этом. Потому что, честно говоря, это делает вашу Код сексуальнее, и своего рода плащ, и меньше символов. Но реальность такова, что это намного сложнее, Я думаю, даже для меня, чтобы обернуть свой ум вокруг него иногда, порядок операций. Так как в сторону, если вы действительно не нравится это, хотя это вроде сексуальный глядя, вы также можете сделать я + = 1, который является уродливей версия Та же идея для постфиксного приращения. Я говорю это и вас должны высмеивать его, но вы придете, чтобы увидеть код, то красивое в ближайшее время. [Смех] David J. МАЛАН: справа? Да. Вопрос в середине. АУДИТОРИЯ: Вы должны сказать Int N? David J. МАЛАН: Вы делаете не нужно говорить Int N. Так, потому что мы уже говорили, Int, Вам не нужно, чтобы сказать это снова. Загвоздка в том, что н должен быть того же типа данных, как я. Так что это просто удобство здесь. Да. АУДИТОРИЯ: Можете ли вы перейти печати персонажа с кронштейн я снова? David J. МАЛАН: Абсолютно. Так% с, помните из прошлого Время, это просто заполнитель. Это означает поставить символ здесь. н обратной косой, конечно, только средства поместить здесь перенос строки. Так что просто оставляет, сейчас, этот кусок нового синтаксиса. И это буквально говоря, захват строка называется с и пойти получить его i-й символ, так сказать. И я постоянно говорю i-й символ потому что на каждой итерации этого цикла это как если бы мы печатаем , во-первых с кронштейн 0, как программист может сказать. Тогда S Кронштейн 1, затем с кронштейн 2, затем 3 затем 4. Но, конечно, это переменная, так что я просто выразить это с г. Ключ, хотя, это осознать, особенно, если вы не было акклиматизации в этот мир программирования, где мы все кажется, считаются от нуля, должен начинаться с нуля, сейчас. Поскольку строки, первый символ, г в Zamyla и к лучшему или к худшему будет жить в точке номер ноль. Ладно, так что позвольте мне привести нам сюда, чтобы Zamyla и посмотреть, что на самом деле происходит на под капотом. Так что это понятие приведения типа. Вы, возможно, на самом деле играл с этим уже, возможно для хакера издание P установить один. Но приведение типов только относится к способность в C и некоторых других языках для преобразования одного типа данных в другой. Теперь, как мы могли бы увидеть это довольно прямолинейно? Так что это, напомним, является началом из английского алфавита. А контекст, вспомнить, с как и неделю назад, ASCII. Американский стандартный код для обмена информацией. Какие это просто действительно длинный путь сказать отображение из букв на номера, и от номера на письма. Так через M здесь, точка точка точка, линии с, напомним, десятичное число 65 и выше. И мы не говорим об этом явно, но наверняка есть похоже номера для строчных букв. И в самом деле, есть. Мир решил несколько лет назад, что немного, нижний регистр, будет 97. И немного б собирается быть 98, и так далее. И для любой другой клавиши на клавиатура, есть будет аналогичная картина битов. Или то же самое, десятичное число. Так что вопрос в стороны, то, как мы можем на самом деле увидеть это под капотом? Так что я собираюсь перейти к Gedit снова. И вместо того, типа это один из нуля, Я собираюсь идти вперед и просто открыть то от сегодняшнего кода, который называется ASCII нулевой. И ASCII нуля выглядит следующим образом. Так что давайте обернуть наши умы вокруг этого. Итак, сначала я прокомментировал Код, который хорош. Потому что это в буквальном смысле рассказывал мне, чего ожидать, отображать отображение для заглавными буквами. Теперь я даже не знаю, что я имею в виду, что, так что давайте вывести. В английском языке, может быть, несколько технарь английский, что делает линии 18 появляются , делает для нас? Просто линия 18. Что это вызывающие? Как это будет, чтобы начать здесь? АУДИТОРИЯ: петля. David J. МАЛАН: петля. И сколько раз что собирается повторять? АУДИТОРИЯ: [вставляя ГОЛОСА] в шесть раз. David J. МАЛАН: Не шесть раз. АУДИТОРИЯ: 26 раз. David J. МАЛАН: 26 раз. Да, жаль. 26 раз. Почему? Ну, это немного странно, но Я начал отсчет с 65. Что странно, но не так. Это не плохо за, говорят. И я делаю, что только потому, что для этого примера, Я вроде предвосхищая что капитал был 65. Теперь это не самый изящный способ сделать это, чтобы рода жесткий код не эзотерические значения, что никто когда-либо ожидается, помню. Но сейчас, обратите внимание, что я делать это через 65 плюс 26. Потому что, видимо, я даже не хочу сделать арифметику в моей голове. Поэтому я дам компилятор это сделать. Но тогда на каждом цикле, каждая итерация петли, я увеличивая I. Так что теперь это выглядит немного загадочно. Но мы должны иметь основное здание блоки с которой, чтобы понять это. % С просто заполнитель для гольца. % Я является заполнителем для междунар. И получается, что с помощью этого Новый синтаксис, это в скобках, так говорить, так типа данных внутри скобок, Я могу заставить компилятор для лечения я не является целым числом, а как символ. Тем самым показывая мне характер эквивалент этого числа. Теперь сюда, этот код практически идентичны. Я просто хотел убедиться, супер явный факт что я начинаю на 97, который нижний регистр. На через 26 более букв. И я doing-- снова, кастинг я, так сказать. Или типа кастинг я, так сказать. С междунар к гольца. Таким образом, конечный результат будет, честно говоря, информация, которую мы уже знаем. Я собираюсь сделать ASCII-0 не dot-- точка в. Обратите внимание, вы, вероятно, сделал, что ошибкой, поскольку я только что сделал случайно. Сделать ASCII-0. Теперь я собираюсь сделать ./ascii-0. Я увеличения, и, к сожалению, он собирается прокрутки с экрана. Но мы видим целую диаграмму где карты до 97, б карты до 98, и если мы прокрутки вверх дальше Конечно, отображает до 65. Таким образом, это только, чтобы сказать, что что мы проповедовали, есть эта эквивалентность, является на самом деле имеет место в действительности. Так быстро модификация этого. Позвольте мне открыть ASCII-1.c. И заметьте, эта умная, вроде из, разъяснение этого. Это ASCII-1.c, и заметить эту сумасшедшую вещь. И это действительно добирается до сердца о том, что компьютеры делают. Даже при том, что мы, люди бы Не рассчитывайте по letters-- Я не начать думать, все в порядке, то б, и использовать их, чтобы рассчитывать физические объекты. Можно, конечно, сказать, что я хочу инициализации некоторых переменную c-- но я мог бы назвать это anything-- так с инициализируется капитала А. Потому что в конце дня, компьютера не важно, что вы храните, это только заботится, как вы хотите представить эту информацию. Как вы хотите, чтобы компьютер интерпретировать эту картину битов? Так что это не то, что я , как правило, рекомендуют делать. Это действительно просто пример, чтобы передать, что вы можете абсолютно инициализации целое к гольца. Потому что под капот из гольца, конечно, это просто число от 0 до 255. Таким образом, вы можете, конечно, положить его внутри от междунар. И то, что это также демонстрирует, что мы может конвертировать из одного типа в другой, здесь, в конечном счете, печати и то же. И в самом деле, это я исправлю online-- должен был сказать это, опять же, здесь. Позвольте мне очистить это онлайн, и мы будем см в онлайн-руководстве по мере необходимости, , что было задумано есть. Хорошо. Так последний пример теперь с участием а и Б, и тогда мы принимать вещи на ступеньку выше. Так с и Б и C годов в капитализации и эквивалентность их, давайте взгляните на этот пример, здесь. Другой пример кода. Мы откроем тот, который уже сделали, поэтому мы не придется вводить его все из нуля. И заметьте, в ожидании мы используем несколько заголовок Файлы, среди которых наш новый друг, string.h. Теперь это выглядит, на первый взгляд, может показаться загадочным. Но давайте посмотрим, если мы не можем рассуждать через то, что здесь происходит. Сначала я получить строку от пользователя, и я положил эту строку в переменной называемые сек. Скопируйте пасту от лица. В строке 22, я, видимо, делает именно то, что Я сделал некоторое время назад, я итерации более персонажей с. И новые трюки здесь используете Длина строки, незначительные оптимизации хранить длину строки в п, вместо вызова STRLEN снова, и снова, и снова. И только убедившись, что я меньше п. Теперь вот, все становится немного интересно. Но это всего лишь приложение этой же новой идеи. Что в Английский делает с кронштейн я представляю? АУДИТОРИЯ: Подсчет друг характер [неразборчиво]. David J. МАЛАН: Подсчет каждого символа. И даже более кратко, с кронштейн Я представляю, что? Можете ли вы сказать. Не поставить вас на месте здесь. АУДИТОРИЯ: Ну-- David J. МАЛАН: Так что, если слово is-- если строка Zamyla, которые starts-- АУДИТОРИЯ: --вы дело с персонажи separately-- David J. МАЛАН: Хорошо. Точно. Запись квадратная скобка позволяет для доступа к каждому характер индивидуально, так с кронштейн 0 будет Первый символ в строке. с кронштейн 1 будет второй, и так далее. Так что вопрос, что я прошу, здесь, в этом состоянии есть что? Является ли i-го характер ов Большого или равно нижний регистр? И что это значит, здесь, с двойными амперсандами? АУДИТОРИЯ (ВМЕСТЕ): А. David J. МАЛАН: А. Это просто эквивалентно это. И не является ключевым словом в C, вы должны использование, раздражающе, амперсанд амперсанд. И это, наоборот, просит есть S: i-го символа меньшим или равным в нижний регистр г? И снова, вот где Понимание основных реализация Компьютер имеет смысл. Обратите внимание, что, хотя у меня есть точка точка точка там, Похоже, через г в нижнем регистре будут все смежные значения до от 97 и выше. И то же самое для верхнего регистра, начиная с 65. Таким образом, вынос, а затем, является то, что в английском языке, как бы вы описали что линия 24 делает? Да? АУДИТОРИЯ: 24 это проверять, ли каждый символ является строчной. David J. МАЛАН: Это проверки, является ли каждый персонаж является строчная буква. Таким образом, даже более кратко, является i-й символ ов нижний регистр? Вот и все, что мы выражая здесь логически, немного загадочно, но в конечном счете, довольно прямолинейно. Является S: i-го символа в нижнем регистре? Если это так, и вот где вещи получить немного умопомрачительным на мгновение, если да, то перейти вперед и распечатать характер. Так что это просто заполнитель, но то, что характер? Почему я это делаю с кронштейна I минус это выражение здесь? Ну заметить картину здесь. Реальные цифры не имеют значения так много. Но обратите внимание, что 97 является как далеко от 65? АУДИТОРИЯ: 32. David J. МАЛАН: 32. Как далеко находится 98 из 66? АУДИТОРИЯ: 32. David J. МАЛАН: Маленькая с от большой C? 32. Таким образом, есть 32 прыжков с одно письмо в другую. Так откровенно я, мог упростить это, что. Но тогда я отчасти трудно кодирования это понимание низкий уровень что ни один читатель не никогда поймут. Так что я собираюсь обобщить его как, я знаю, что строчные буквы крупнее. Я знаю, что заглавные буквы являются меньшие значения, по иронии судьбы. Но это практически эквивалентно говоря вычесть 32 из ов кронштейна I. Таким образом, в контексте их буквы, если буквы случается,, в нижнем регистре , и я вычесть 32, какой эффект это имеет, математически, на нижний регистр? АУДИТОРИЯ: Capitalizes-- David J. МАЛАН: заглавным его. И действительно, именно поэтому наш Программа называется выгоду нулю. Эта программа либо капитализирует письмо, после проверки, если это действительно строчная буква. В противном случае, в строке 30, что мне делать, если это не строчная буква, что я глядя на на частности итерации в цикле. Просто распечатайте его. Так что не изменить вещи это даже не в нижнем регистре. Ограничить себя немного через небольшой г. Теперь это довольно сложных. Но в конце концов, это Так мы, однажды, было реализовать вещи. Если я вместо открытого выгоду один, о слава богу. Там в функции призван верхней, что может сделать все, что мы только что сделали на довольно низком уровне. Теперь, чтобы верхняя интересно потому что он заявил в файле, и вы бы только знаю, что это путем проверки документации, или говорят, скажем, в классе, где она существует, в файле с именем ctype.h. Так что это еще один новый друг. И чтобы верхняя делает именно что предполагает его название. Вы можете передать в качестве аргумента, между эти скобки, то символ. Я собираюсь пройти в i-й символ из S с помощью нашего фантазии новые обозначения с участием квадратные скобки. И сделать предположение, что это возвращение Значение для верхней по-видимому, происходит быть? Прописную букву. Прописную букву. Так что, если я прохожу в строчной а, надеюсь, по определению, чтобы верхняя, он собирается вернуться Прописная А. В противном случае, если это не строчная буква в первое место, я просто распечатать его. И в самом деле, заметить Второй друг здесь. Не только, чтобы верхняя существует, но ниже, которые на самом деле отвечает, что для меня вопрос. Теперь тот, кто писал эти вещи, 10s лет назад, вы знаете, что? Реализованные в верхней и снизить с помощью кода, как это. Но, опять же, в соответствии с эта идея, абстрагируясь от, рода, нижний уровень Детали реализации. И стоял на плечах людей кто был до нас, с помощью функции как в верхней и нижней, которые достаточно удивительно приятно делают имени сказать, что они делают, является замечательный парадигма принять. Теперь, получается, что если я читаю страница руководства по, скажем, в верхней, Я узнать что-то еще. Так человек TOUPPER. Это немного подавляющее. Но заметьте, вот что упоминание о Файл заголовка, что я должен использовать. Как в стороне, потому что это вводит в заблуждение, функция использует целыми вместо символов по причинам проверки ошибок. Но мы, возможно, прийти вернуться к этому в будущем. Но обратите внимание, здесь, на верхние новообращенных буква с в верхний регистр, если возможно. Так что это довольно просто. А теперь давайте быть немного более конкретными. Давайте посмотрим на части Человек страницы под возвращаемого значения. Значение, возвращенное в том, что преобразованного письме. Или с, если преобразование не удалось, где с является оригинальным ввода. Который я знаю отсюда, из аргумент в верхней. Так в чем же вынос из этого? Значение, возвращенное в том, что преобразованного письма, или с, оригинал письма, если преобразование не удалось. Что улучшение я могу поэтому внести в дизайн моего кода в? Да? АУДИТОРИЯ: Вы можете снять еще. David J. МАЛАН: я могу удалить еще о, и не только другое заявление. АУДИТОРИЯ: Вы можете удалить [неразборчиво]. David J. МАЛАН: я могу удалить всю вилку в дороге, если еще в целом. Так действительно, позвольте мне открыть Окончательный вариант этого, капитализировать-2 и обратите внимание, насколько, если Вы, сексуальная, код теперь получает, в том, что я снижена с некоторых семь или около того линии до всего четыре, функциональные возможности, которые я намеревался просто звонок в верхней, проходя в ы кронштейна I, и печати из, с заполнителем% С, что особый характер. Теперь возможно, есть ошибка, или, по крайней мере риск ошибки, в этой программе. Так что просто вернуться к более раннему вынос, что я должен, вероятно, также сделать в эта программа, чтобы сделать его более устойчивым, так что нет никакого способа, он может крах, даже в редких случаях? АУДИТОРИЯ: Убедитесь, что это не NULL. David J. МАЛАН: Убедитесь, что это не NULL. Так на самом деле, чтобы сделать этот супер собственно, я должен сделать нечто подобное, если с не NULL, то идти вперед и выполнить эти строки кода, которые Я могу то отступ так, , а затем положить в моей закрывающую фигурную скобку. Так хорошо связывая вместе двух идей. Да? АУДИТОРИЯ: Не могли бы вы использовать сделать в то время как петли, а? David J. МАЛАН: Мог Я делаю делать во время цикла? АУДИТОРИЯ: --вы хотите, чтобы убедиться, что вы на самом деле [неразборчиво]. David J. МАЛАН: Мог Вы используете делать во время? Короткий ответ, нет. Потому что вы собираетесь ввести еще угловой случай. Если строка имеет нулевую длину. Если, например, я просто ударил Введите, никогда не набрав Zamyla. Я собираюсь вручить вам обратно фактическая строка, как мы будем в конечном счете видеть, что имеет нулевые символы. Это все еще строка, это просто супер короткие. Но если вы используете сделать в то время, вы собираетесь слепо попытаться сделать то с уважать в этой строке, и ничего не будет есть. АУДИТОРИЯ: Ну, если вы сделали сделать [неразборчиво], а s-- David J. МАЛАН: О, я вижу, держите получаю строку от пользователя. Так короткий ответ, вы может, и держать приставать их, чтобы дать вам строку вот достаточно коротким, чтобы поместиться в памяти. Абсолютно. Я просто решил не. Если они не дают мне строку ввода хотите, Бросаю, я сдаюсь. Но абсолютно, для этой цели, Вы могли абсолютно сделать это. Так файлы заголовков библиотеки, что мы теперь знакомы с таковы, здесь. Стандартный ввод / вывод, CS50.h, string.h, ctype.h, и есть, на самом деле, другие. Некоторые из вас обнаружили Математическая библиотека math.h, Но позвольте мне представить вам, теперь, чтобы это ресурс, который персонал CS50, Дэвин, и Роб, и Гейб частности собрали. Это скоро ссылаются на сайт Курса. Она называется CS50 ссылка. Какой просто чтобы дать вам быстрый Вкус этого, работает следующим образом. Пустите меня к reference.cs50.net. Вы увидите на левой руке сторону с огромным перечнем функций, которые приходят с в. Но если я все равно, на данный момент, о чем-то вроде STRLEN, Я могу напечатать его там. Он фильтрует список вниз только то, что меня волнует. Я собираюсь нажмите его. А теперь слева, вы увидите, что мы надеемся, является более простым, человеческим дружелюбный объяснение того, как эта функция работает. Возвращает длину строки. Вот краткий обзор, вот как вы использовать его в терминах файла заголовка, и в плане того, что функции Похоже, с точки зрения своих аргументов. А потом здесь, возвращается длина строки. Но для тех из вас, более комфортно, Вы можете фактически нажмите более удобной, и содержание этого страница, сейчас, изменится быть значения по умолчанию что Вы получаете, используя справочную страницу. Другими словами, CS50 ссылка упрощение страниц руководства по персоналу, для студентов. В частности, тех, меньше знакомы и между ними, так что вы не должны пытаться обернуть ваш ум вокруг, откровенно говоря, некоторые довольно загадочным синтаксис и документация то. Так что имейте это в виду, в грядущие дни. Так вот, опять же, является Zamyla. Давайте теперь задать вопрос вот немного больше человеческого доступны. Благодаря Чанг, кто был печать больше слонов без остановок в течение последних нескольких дней. У нас есть возможность дать по меньшей мере, один из них же. Если бы мы могли получить только одного волонтера прийти на до рисовать на экране. Как здесь? Поднимайтесь. Как тебя зовут? ALEX: Алекс. David J. МАЛАН: Алекс. Хорошо. Алекс, давай до. Мы собираемся, чтобы увидеть ваш рукописного текста на экране здесь. Ладно, приятно познакомиться. ALEX: Хороший вы встретиться с вами. David J. МАЛАН: Хорошо. Так, супер простое упражнение. Бар не является высокой, чтобы получить слона сегодня. Вы играете роль GetString. И я собираюсь просто сказать вам, строка, когда вы получили. И предположим, что вас, GetString, были названы. И человек, как и я, имеет ввели в Zamyla, Z-A-Y-M-L-A. Просто идти вперед и написать Zamyla на Экран, как будто вы получили его и сохраняется ее в памяти,. Оставляя место для того, что будет несколько другой words-- это нормально, продолжайте идти. [Смех] Так Zamyla, Отлично. Так теперь, что вам, GetString, называются снова. И поэтому, я предоставить вам, в клавиатура, с другим именем, Белинда. Хорошо. И теперь в следующий раз GetString является называется, я печатаю в нечто вроде Гейба, Г-А-В-Е. Вы действительно принимая с сердечно-памяти с произвольным доступом. Который рисунок все совершенно случайно. Хорошо. [Смех] ALEX: К сожалению мой почерк плохо. David J. МАЛАН: Нет, это нормально. А как насчет Роба, R-O-B. Хорошо. Хорошо. Так что я не ожидал, вам будет рода лежали вещи таким образом. Но мы можем сделать эту работу. Так как же вы идете по поводу укладки из этих символов в памяти? Другими словами, если мы думаем о это прямоугольный черный экран как представляющие компьютера RAM, или памяти. И напомнить, что оперативная память только целая куча байтов, и байты целая куча бит. И биты так или иначе реализованы, как правило, с некоторой формой электричество на аппаратном уровне. Так что своего рода наслоение мы говорили о и теперь может принимать как должное. Как вы идти о решить, где написать Роб против Гейб против Белинда против Zamyla? ALEX: Я только что сделал это в заказать, что вы сказали мне. David J. МАЛАН: И то верно. Но то, что регулируется, где вы положили Имя Белинды и имя Гейба? ALEX: Ничего? David J. МАЛАН: [Смеется] Так что работает, это нормально. Так компьютеры немного более упорядоченным, чем это. И поэтому, когда мы implement-- остаться там в течение только moment-- когда мы на самом деле осуществить нечто подобное GetString в компьютере, Zamyla может быть выложен в значительной степени как вы делали на экране, есть. И то, что является ключом к заметите здесь, что Алекс сделал, есть это своего рода демаркации среди каждого из этих слов, не так ли? Вы не писал Z-А-М-Y-L-А-В-Е-Д-И-Н-Д-А-Г-А-В- другими словами, есть своего рода демаркационная который, кажется,, рода, случайная расстояние между этими различными словами. Но это хорошо, потому что мы, люди, можем сейчас себе, что это четыре различных строк. Это не просто одна последовательность множество символов. Таким образом, компьютер, то, между тем, может занять строку как Zamyla, положить каждый из этих писем внутри байта в памяти. Но это число намного больше, Конечно, чем шести символов. Там целая куча памяти. И так далее, это Сетка коробок собирается представлять, что Алекс просто сделал здесь на экране. А теперь, Алекс, мы можем предложить вам синий или оранжевый слон из Чанг. ALEX: Я возьму синий слон. David J. МАЛАН: синий слон. Так большое аплодисменты, если бы мы могли, для Алекса здесь. [Аплодисменты] ALEX: Спасибо. David J. МАЛАН: Спасибо. Таким образом, вынос в том, что, несмотря на то, образец вид изменился с течением времени, здесь на борту, там был этот демаркация между различными строками что Алекс получил для нас. Теперь компьютеры, честно говоря, может сделать то же самое. Они могли рода хлопнуть строки в любом месте в памяти. Здесь, наверху, здесь, сюда, сюда. Они могли сделать именно это. Но, конечно, это вероятно, не лучшее планирование. Верно? Если я спрашивал Алекса получить имена, вероятно, он поставить еще несколько здесь, может быть, до здесь, здесь, здесь, в конце концов, сюда. Но с планирования немного больше, конечно, мы могли заложить вещи более аккуратно. И в самом деле, это то, что компьютер делает. Но загвоздка в том, что если следующая строка я получаю после Zamyla нечто как Белинда, предложить, где мы могли бы написать Письмо б по отношению к этой сетке? Куда бы вы отправились? Для справа от A, ниже г, ниже а? Что бы ваши первые инстинкты быть? АУДИТОРИЯ: Ниже г. David J. МАЛАН: Так ниже г. И это в значительной просто, не так ли? Это отчасти опрятно, это то, что мы делаем на клавиатуре, когда мы попали Enter, или по электронной почте, делая маркированный список вещей. Но реальность такова, что компьютеры попытаться быть более эффективным, и втиснуть конечно столько данных в оперативной памяти, насколько это возможно, так что вам не нужно тратить никаких байт. Так что вам не нужно тратить любой экран недвижимости. И проблема, однако, заключается в том, что если мы буквально положил письмо б после, как мы собираемся знать, где заканчивается имя Zamyla в и имя Белинды начинается? Так вы, люди, только что предложил, ну, нажмите клавишу ввода, существенно. Положи его ниже. Или даже, как сделал Алекс, просто начать писать имя следующего ниже предыдущего, и ниже, что один, и Затем ниже того. Это визуальный сигнал. Компьютеры есть еще один визуальный сигнал, но это немного более лаконичным. Именно этот трусливый характер. Обратная косая черта 0, которая, возможно, напоминает обратной косой п, и так далее, в настоящее время. Специальные управляющие последовательности. Обратная косая черта 0 является способ представляющих восемь ноль бит подряд. 0000 0000. То, как вы выразить это не означает, попал в число ноль на клавиатуре, потому что в том, что представляет собой ASCII-символ. Это выглядит как число, но на самом деле это десятичное число что представляет собой циркуляр Символ, круговая шрифт. Между тем, обратный слеш ноль означает, буквально положить восемь ноль байт здесь для меня. Так что это несколько произвольно. Мы могли бы использовать любой узор битов, но мир решил несколько лет назад, что для представления конец строки в памяти, просто поставить целую кучу нулей. Потому что мы можем обнаружить, что. Теперь это означает, что нет буква алфавита могут быть представлены нулями. Но это не страшно, мы уже видели что мы используем 65 на до в 97 и выше. Мы ничего не дала закрыть для всех нулей. Так Белинды в памяти компьютера на самом деле происходит, чтобы пойти сюда. Я нарисовал его в желтый просто чтобы привлечь наше внимание к нему. И заметьте, тоже это совершенно произвольно. Я нарисовал ее в виде сетки. Как, ОЗУ лишь некоторые физический объект. Это не обязательно строк и столбцов, как таковой. Это просто есть целая куча байтов реализованы в аппаратных средствах или иначе. Но если после Belinda I набрал в имени Гейба, он будет в конечном итоге здесь, в памяти, и если я набрал в имени Daven в, например, он будет в конечном итоге здесь. И я могу продолжать написать даже несколько имен. К сожалению, если я пытаюсь написать супер длинное имя, Я в конечном итоге может не хватить памяти. В этом случае, GetString является собирается вернуть NULL, как мы уже говорили. Но, к счастью, по крайней мере, в это визуальная здесь, мы не добирались так далеко. Теперь то, что приятно, что это Общая идея лечения вещи как в коробках является Представитель особенность C и много языков, Известно, в виде массива. Массив представляет собой другой тип данных. Это структура данных, если вы будете. Структура в смысле его действительно, вид, похожий на коробку, по крайней мере, в вашем воображении. Массив представляет собой непрерывный последовательность одинаковых типов данных, спина к спине к спине к спине. Так строка, в другом слова, представляет собой массив символов. Массив символов. Но, оказывается, у вас может быть массивы гроздья вещей. На самом деле, мы можем поставить даже числа в массиве. Так, в какой форме мы собираемся начать заявляют, что это данные Структура известны как массив также собирается использовать квадратные скобки. Но эти квадратные скобки собираетесь имеют разное значение в этом контексте. И давайте посмотрим его следующим образом. Предположим, что я открыл до нового файла здесь. И я сохранить это как ages.c. И я спасу это в моей папке здесь. А теперь я собираюсь идти вперед и начать печатать то как включить CS50.h, включают stdio.h, тап_п пустоту. А потом внутри здесь, я хочу сначала иметь Int называемый возраст. И я собираюсь использовать это, чтобы получить Int от пользователя для его возраста. Но эта программа предназначена для использования несколько человек, для любом контексте. У меня есть очередь людей. Все они должны ввести их возраст, возможно, некоторые, я не знаю,, конкуренция, или событие что они прибыли для. Так что в следующий человек, я нужно еще одну переменную. Потому что, если я просто делаю возраст получает GetInt, это собирается колошматить, или переписать возраст предыдущего человека. Так что нет ничего хорошего. Так мой первый инстинкт может быть, о, все в порядке, если я хочу, чтобы получить несколько народных ages-- давайте назовем этот age1, Int age2 получает Int, Int Age3 получает GetInt. А теперь я собираюсь использовать некоторые псевдокод код здесь. Действия, предусмотренные этими цифрами. Мы оставим на другой день, что мы там делаем, потому что мы только уход на данный момент о age1, age2, Age3. К сожалению, как только я скомпилировать эту программу и положил его перед реальных пользователей, что принципиально плохой дизайн Решение я, кажется, сделали? Да? АУДИТОРИЯ: [неразборчиво] David J. МАЛАН: Да, Я даже не пытался чтобы выяснить, как много веков я на самом деле волнует? Если у меня есть менее трех человек здесь, и, следовательно, менее трех возрастов, Я все еще слепо ожидали три. Не дай Бог, четыре человека появляются. Моя программа просто не будет даже поддерживать их. И таким образом, это, длинная история Короче говоря, это не очень хорошая привычка. Верно? Я был по существу копирования и вставить код и просто настройки имена переменных. И, мой бог, если у вас, не три возрастов, но 10 или 100, или даже 6500 магистрантов, например. Это не собирается быть особенно элегантный код, или устойчивое. Вы будете иметь, чтобы переписать программу каждый раз, ваш количество людей изменения. Так, к счастью, в наше фактическое ages.c файл на сегодня, у нас есть более умное решение. Во-первых, я собираюсь заимствовать построить мы использовали несколько раз, это сделать, в то время цикла, с тем чтобы получить количество людей в комнате. Я просто собираюсь приставать к пользователю, снова и снова, пока он или она дает мне значение п, что это положительное целое число. Я мог бы использовать, в прошлом Время перейдем положительный Int. Но мы не имеем, что по-настоящему, поэтому я пошел вперед и вновь реализовали эту идею. Теперь сюда, это новый трюк. В строке 27, как и замечания в линии 26 предполагает, объявить массив, в котором для хранения возраст каждого. Так что если вы хотите получить, не один Int, не два целых, но целая куча целыми. В частности н целые, были н мощи быть три, может быть 100, может быть 1000. Синтаксис, попросту говоря, является скажем, какой тип данных вы хотите? Что вы хотите позвонить что часть памяти? Что вы хотите позвонить сетку что выглядит так образно? И в скобках здесь, вы говорите, как большой Вы хотите массив, чтобы быть. И так раньше, когда я сказал, Синтаксис немного отличается здесь, мы до сих пор с помощью квадратных скобок, но когда я объявляю массив, число внутри Квадратные скобки средства насколько велика вы хотите массив, чтобы быть. Напротив, когда мы использовали S Кронштейн я минуту назад, с, строка, на самом деле массив символов, но когда вы не объявление переменной, как с этим ключевым словом здесь, вы просто получать конкретной индекс, определенный элемент из этого массива. После того, как мы знаем, что, остальные это очень просто. Если новая я первый буду распечатать что возраст человека числа I. Где я только что сказал человек номер один, человек номер два, человек номер три. И я просто делаю арифметику, так что, как нормальные люди, считать с вариантом Программа, а не от нуля. Тогда я называю GetInt, но я храню ответ в возрасте скобки I. Какой i-го возраст в массиве. Так в то время как последний раз мы были лечении эти коробки как символов для названия Zamyla в, и другие. Теперь, эти прямоугольники представляют 32 бита, или четыре байта , в котором мы можем хранить Int, Int, Int. Все это, опять же, тот же тип данных. Теперь я делаю глупость, как проходит время, просто чтобы оправдать написания этой программы. А потом сюда, я снова итерации по массиву говоря через год, человек номер один воля быть лишним лет. И выяснить, что math-- Я имею в виду, это не очень сложно arithmetic-- Я просто добавить один с их возрастом. Просто чтобы показать, опять же, это. Так же, как я могу Индекс в строку, с, так я могу Индекс в массиве возрастов, как что. Так где же это будет брать нас? Таким образом, мы увидим, в конечном счете, несколько вещей, в ближайшие дни. Один, все это время, когда писать собственные программы, как Марио, жадного, кредит. Ты вводить имя программа и удара Enter. И тогда становится ввод пользователя. С GetString, GetInt, getLongLong, или тому подобное. Но оказывается, что поддерживает Си то, что называется командной строки Аргументы, который идет, чтобы позволить нам на самом деле получить на слова, которые вы печатаете, на мигающую строке после названия вашей программы. Таким образом, в ближайшие дни, вам можно ввести нечто вроде Цезаря, или ./caesar число 13, после этого. Посмотрим, как это работает. Потому что действительно, в Проблема установить два, мы собирается познакомить вас в маленький-то напоминает Рэлфи вызов ранее картографии. Искусство карабкаться информацию. Это, по сути, является очень напоминает, что сделал Ralphie. Это пример шифрования Алгоритм называется rot13, R-O-T 13. Что означает просто повернуть буквы в алфавите 13 мест. И если вы это сделаете, вы увидите сейчас что это, пожалуй, знакомая фраза. Но то, как мы собираемся использовать это, в конечном счете, является в целом. В P установить два, в стандартной версии, вы реализуете несколько шифров, одна называется Цезарь, один называется Vigenere. Оба они являются вращения шифры, в том, что так или иначе вы превратить одну букву в другой буквой. И Цезарь супер просто. Вы добавляете один, вы добавляете 13, или некоторое число до 26. Vigenere делает, что на за письмом основой. Так Vigenere, как вы увидите в спецификации, является более безопасным. Но в конце дня, что Вы будете реализации и P установить два, является то, что ключ, который вы используете оба для шифрования и дешифрования. Ссылаясь на процесс превращения обычный текст, некоторые исходное сообщение, в шифровальщика текста, который это то, в зашифрованном виде. А потом расшифровки его снова. В хакерской издания, Между тем, вы будете поручено нечто подобное в духе, где мы дадим вам файла, от типичного Linux или Mac или Unix компьютер называется Etsy пароль, который содержит всю куча имен пользователей и паролей. И эти пароли есть все был зашифрован, или хэш, так сказать, более правильно как вы увидите в спецификации. И хакер издание будет оспаривать Вы с приемом вход, как это, и взлома пароля. То есть, выяснить, что пароль Человека на самом деле. Потому что, действительно, пароли как правило, не хранятся в открытом виде, и вообще пароли должно быть трудно догадаться. Это не часто бывает. И то, что я думал, что мы сделать, это заключить с пару минут Взгляд на особо бедный выбор паролей из фильма вы, возможно, помните нежно. А если нет, вы должны арендовать. [ВИДЕОВОСПРОИЗВЕДЕНИЕ] -Helmet, Вы злодей, что происходит? Что ты делаешь с моей дочерью? -Permit Мне представить блестящий молодой пластический хирург, Доктор Филипп Schlotkin. Наибольший работа носа человек в Вся вселенная и Беверли-Хиллз. -Ваш Высочество. -Nose Работа? Я не понимаю. Она уже была работа нос. Это было ее сладкий 16 присутствует. Нет, это не то, что вы думаете. Это гораздо, гораздо хуже. Если вы не даете мне Сочетание с воздуха щита, Врач Schlotkin даст свой дочь обратно свой старый нос. - [Вздыхает] Nooooooooooooo. Где ты это взял? -Все в порядке. Я скажу, я скажу. Нет, папа, нет. Вы не должны. -Ты Право моя дорогая. Я буду скучать по вашей новой нос. Но я не скажу им в Сочетание ни на что. -Хорошо. Доктор Schlotkin, дело ваше. -Мой Удовольствие. -NO! Подождите, подождите. Я скажу. Я скажу. -I Знал, что это будет работать. Хорошо, дайте его мне. Исследованы сочетание является одним. -Один. -Один. -Два. -Два. -Два. -Три. -Три. -Три. -Четыре. -Четыре. -Четыре. -Пять. -Пять. -Пять. -Так Сочетание является одним, два, три, четыре, пять. Это самая глупая комбинация Я когда-нибудь слышал в своей жизни. Это та вещь, ап идиот будет иметь на своем багаже. Спасибо, ваше высочество. [ДУ CLICKS] -Что Ты сделал? -I Выключил стену. Нет, вы этого не сделали, вы выключен весь фильм. -I Должно быть, нажал не ту кнопку. Ну, положил его обратно на! Положите видеофильм на! Да, сэр! Да, сэр. -Давай Идти, Арнольд. Приходите, Гретхен. Конечно, вы знаете, я буду должны выставить вам счет за это. Ну? Это сработало? Где царь? -It Работал, сэр, мы имеют комбинацию. -Великолепная. Теперь мы можем использовать любую последний вздох свежего воздуха с планеты Druidia. Что комбинация? -Один, Два, три, четыре, пять. -Один, Два, три, четыре, пять? Да. -Это Удивительно. У меня то же самое Сочетание на моем багаже. Подготовьте SpaceBall 1 для немедленный выезд. Да, сэр. -И Изменить Сочетание на моем багаже. [Закрытия дверцы SOUND] [CLINK ДВЕРЕЙ ПОРАЖЕНИЯ ШЛЕМ] -Ahh. [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] David J. МАЛАН: Вот именно для CS50, увидимся на следующей неделе. Рассказчик: И теперь, Deep Мысли, по Daven Фарнэме. Daven FARNHAM: Кодирование в C является так гораздо труднее, чем нуля. Е, царапинам, было ложью. [Смех SOUNDBITE]