[Powered by Google Translate] David J. Малан: Все правильно, это CS50, и это начала недели две. Спасибо. Давайте начнем вот с телефонного звонка. Я собираюсь набрать 617-BUG-CS50. CS50: Это CS50. Для Shuttle Boy, нажмите 1. Чтобы начать сначала, нажмите кнопку 9. David J. Малан: Так он сказал на Shuttle Boy, нажмите 1. Таким образом, мы собираемся нажмите 1. CS50: Каково ваше происхождение? Для четверых, нажмите 1. Mather, нажмите 2. Boylston, нажмите 3. Ламонт, нажмите кнопку 4. Сувениры зал, пресс 5. Чтобы начать сначала, нажмите 0. David J. Малан: Мы будем нажмите 1 для четверых. CS50: Следующий шаттл уходит в эту самую минуту в PM 1:10 и Затем в 1:20 вечера, 1:30, 1:40 вечера. Это CS50. David J. Малан: Так что это голос CS50 в. И это пример вида окончательного проектов, Например, вы можете откусить к К концу семестра. Например, что shuttleboy.cs50.net существует - на самом деле проект, который я впервые написал после того, CS51 назад, когда я был студентом. И вдохновение здесь было тогда, все, что они имели, было печатные автобус расписание, и не было Понятие ищет вещи в Интернете. А так я вроде голубя в один уик-энд, налил через печатной графике, и перенес его в компьютерной программе. В то время, компьютерная программа случилось быть написано в C. И вы на самом деле бежал, введя Shuttle Мальчик на мигать подскажут, как мы делали до сих пор. Но за эти годы, она превратилась в мгновение сообщениями бот. Она превратилась в последнее время в этом веб-сайте, в SMS-инструмента, а также в этот голос-инструмент. И это намекнуть на виды вещей, которые вы можете сделать для себя до конца семестра. Например, там, версия СМС Shuttle Boy происходит работать как следует. Если, на ваш мобильный телефон, отправить текстовое сообщение на 41411 и затем отправить специальную sboy символ, для Shuttle Boy, следует А и В, где А и B происхождения является пункт назначения - Например, Boylston космической Quad - то, что вы должны вернуться в течение нескольких секунд текст Сообщение от Shuttle Boy говорю вам точно, когда Следующие несколько шаттлы, с этой точки собираюсь, что точке В. И это более общий пример того, что известно как использованием API. Так, например, это здесь просто shuttleboy.cs50.net, фактический веб-воплощение этого. Но данные, которые подчеркивают эту и другие приложения, которые CS50 разработаны все подвержены всем здесь в виде из API-интерфейсы, интерфейсы прикладного программирования. И это только причудливый способ сказать, что люди, как мы на Интернет и другие провели некоторое время на создание Программное обеспечение, которое можно использовать для того, чтобы получить данные от нас и затем построить собственные приложения поверх этого набора данных. Так, например, этот API Shuttle Boy странице здесь, которые оказывается в CS50 руководства, по существу документов как вы можете идти о выяснении CS50 серверы для хранения данных. Например, если вы знакомы с CSV файлами, запятая значения, разделенные, это просто как бы быстро и грязно Excel-подобные файлы. Таким образом, вы можете попросить Shuttle Boy для всех данных на всех домов и их GPS координаты, и вы получите назад, по сути, электронными таблицами так, что Вы можете читать в программу собственных, а затем получения результатов, как Shuttle Мальчик сам , случается, делают. Для тех, кто более знакомы, более современные представления данных включают JSON, JavaScript Object Notation. Что-то придет к вам на К концу семестра. Но опять же, это всего лишь одна из нескольких собственных API, CS50 в. И захватывающая вещь сейчас, в эти дни, Facebook и Twitter и Google, и почти каждый из популярного веб-сайта там есть какая-то API, который означает, что если вы читаете Документация на их сайте, вы подпишитесь на учетной записи, вы можете начать писать программы на вершине все инструменты и данные, которые предоставляет компания существует. И вот один из наших парней преподавания пару лет назад написал версию Mac об этом. Таким образом, по ссылке под названием Mac здесь, в левом верхнем углу, вы можете на самом деле скачать виджеты Mac OS, которая работает на собственной Mac, чтобы сделать такие же вещи. Так что это все о строительстве в верхней части набора данных, как эти. Но об этом в конце семестра. Так давайте погрузимся в реальном быстро ошибка, просто чтобы получить вид вещи разогревается сегодня, и вспомнить о некоторых вещи, которые мы посмотрели на прошлой неделе. В частности, позвольте мне идти вперед и вырывать, скажем, этот пример здесь. Buggy1.c, это доступно на веб-сайте Конечно, если вы хотите хотелось, чтобы загрузить его и тыкать вокруг себя. Но давайте увеличить здесь, на этом довольно короткую программу, а просто Супер-быстрое повторение некоторых из основных строительных блоков, которые мы действительно собираемся просто начать принимать как должное. Таким образом, синие вещи, в строках с 1 по 9, всего лишь софтбол вопросы. Так что это просто комментарий. Они не имеют никакого функционального смысла. Но они комментарий в том смысле, что они отмечается, что Я, человек, сделал себе так, что в лекции и после лекции, я могу фактически помнить, что эта программа не обходится без того, чтобы прочитать его строка за строкой и воссоздания истории, на мой взгляд. Более того, если я вручаю эту программу, чтобы кто-то другой, как Вас, это гораздо яснее для вас, потому что комментарии, как это, то, что программа на самом деле делают, или, по крайней мере то, что Программы должны делать. Или нет, это правильно, это совсем другое дело. Теперь, С, многострочные комментарии, вспомним, что на линии один здесь является магическим символом, / *. Это значит, что вот идет начало комментария. И ничто другое не имеет значения, пока вы не дойдете до конца терминатор, который * /, наоборот. Поэтому тот факт, что у меня есть 80-странные звезды здесь с Слева направо на самом деле просто эстетическая деталь. Он не имеет функциональное значение. Теперь, как о линии 11? Что это делать с точки зрения непрофессионала? Что это? АУДИТОРИЯ: Включает в себя стандартный. David J. Малан: Хорошо, хорошо. Таким образом, она включает в себя библиотеку stdio.h. Так что же это значит? Ну, внутри этого файла, stdio.h, которые целый букет Функция декларации - то есть код, который написал кто-то другой. И прекрасный пример функции, которая объявлена ​​в stdio.h это - которая любимый сейчас? Так Printf, одним из наиболее распространенных из них использовать, конечно, на ранней стадии, из этой библиотеки есть. Если я исключаю, что строки кода, Clang будет кричать у меня что-то об использовании необъявленных символ. Что-то необъявленной, наверное, ключевое слово, потому что Мы не сообщил компилятору, что выглядит Printf нравится, если мы включим эту линию. И еще на Землю, на самом деле, то, что эта линия говорю, открыть этот файл, stdio.h, где он находится на сервере жесткий диск или жесткий диск прибора, и скопировать его тут же в моем файле, без моего того, чтобы сделать это вручную. Теперь, когда мы приступим здесь к основной, в скором времени мы начнем дразнят друг от друга, что Int и то, что пустота. Но сейчас, давайте посмотрим на три линии в пределах от 15 до 17. Такой вот я утверждаю, как багги. Линия 7 в своем комментарии говорит: "Должна печати 10 звездочками, но не ". Почему это не печать, на самом деле, 10 таких звезд? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Совершенно верно. Таким образом, заметили, что мы начинаем считать от 0. И это на самом деле конвенции в области программирования и компьютерные науки в целом, начиная рассчитывать от 0 вместо 1. И это действительно просто вытекает из того факта, что для Например, когда у нас было восемь человек на сцене, когда никто не поднимал свои руки, они были Все эффективного нули. А так это просто вид компьютера конвенции, с тем, Таким образом, чтобы начать отсчет с 0. Если это наименьшее число можно представить в двоичном виде. Так вот мы начали инициализации я до 0. Мы установили я равна 0. Но потом я сделал эту ошибку здесь, говоря, что я меньше или равно 10. Но если вы думаете, что с помощью, если у меня начинаются с 0, а затем я иду до 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, на самом деле я собираюсь распечатайте 11 звезд на экран, потому что я выросла к и равно 10. Так легко исправить, вот тогда это что? АУДИТОРИЯ: [неразборчиво]. David J. Малан: просто измените его меньше. Если вы действительно хотите, вы можете сделать это. Но в целом, это неодобрительно. И так начинаем считать от 0 лишь то вы должны Обычно привыкнуть. Теперь, что вся эта конструкция сама по себе? Эта линия 15 demarks цикла. Так, не является функцией. Это просто заявление. Это циклической конструкцией, как мы видели в Scratch. И она состоит из трех частей. Обратите внимание, что это первая часть, чтобы Слева от точки с запятой. Там в средней части между двумя точками с запятой. А тут еще правая часть справа второй запятой. Теперь, первая из этих что делает? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Back туда? Да? АУДИТОРИЯ: инициализация. David J. Малан: инициализация. Так что же это значит? Мы объявили переменную я. Это типа INT, потому что я указал Int я. И я инициализации я со значением 0. Так что же это на самом деле говорил? Это фактически говорит на компьютер Эй, дай мне достаточно памяти, достаточный объем оперативной памяти, чтобы соответствовать ряду, а затем положить номер 0 в том, что кусок памяти. И как в сторону, насколько велика Int обычно, по крайней мере внутри из прибора? АУДИТОРИЯ: 32 бит. David J. Малан: 32 бит. Значит, мне 32 бит, иначе известный как 4 байта, и поместить значение 0 в нем, что довольно легко, потому что Это просто означает, установить все биты в 0. Так вот, вторая часть здесь является состояние. И состояние, как следует из названия, является то, что проверено снова и снова, и снова, будет ли это правда или ложь. Так что это просто говорю, выполните следующие строки кода - а именно строка 16, потому что это единственный отступом внизу - Пока я меньше 10. И после каждой итерации этого цикла, сделайте приращение, которое в данном случае я + +. Теперь, она не должна быть я + +. Это может быть я -. Но если бы я сделал это, то, что поведение собирается чтобы быть эта программа? АУДИТОРИЯ: Это будет бесконечный цикл. David J. Малан: Это будет своего рода бесконечный цикл, если нам повезет после негативного 2 млрд или около того. Может быть, все будет обернуть вокруг, просто по своей природе конечной число битов, которые мы выделили для внутр. Но это, конечно, собираюсь повторять гораздо больше, чем 10 и конечно, более чем в 11 раз здесь. А теперь, как и в сторону, понимаешь, что я + +, и я - на самом деле просто синтаксический сахар. Это просто сокращенная запись для того, что немного больше явно записать следующим образом: I = I + 1. То есть идентичные я + +. Это просто какая-то выглядит красивее сказать, что я + +. Это более лаконичным, более читабельным. И поэтому большинство людей делают это вместо этого. Но это идентичных функционально то, что мы только что видели. Короче говоря, быстрых решений здесь просто сказать, я итерация от 0 вплоть до менее чем 10. И тогда мы действительно получим 10 звезд. Так давайте попробуем это. Позвольте мне открыть терминал в нижней части. Позвольте мне перейти в каталог, что это дюйма И я собираюсь собрать его вручную с помощью Clang на данный момент. И я собираюсь собрать это как buggy1.c, Enter. А теперь buggy1, почему нет такого файла или каталога buggy1 называется? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да. Так что это на самом деле называется a.out. Так Напомним если вы просто запустите Clang, где Clang является компилятор, а не указать имя, которое вы хотите дать вашей программы, это будет по умолчанию a.out. Так ведь если я Ls - упс. И я didn't - черно-белый вопроса некоторые из Вы сталкивались была исправлена. Но позвольте мне сделать это. Там у нас есть a.out на левой стороне. Поэтому мы должны работать a.out вместо buggy1. Итак, позвольте мне идти вперед и делать это. . / A.out, Enter. И я, видимо, не делать? АУДИТОРИЯ: Сохранить. David J. Малан: Спасите мою файл. Так что легко решается, нажав Control S, или собирается Файл, Сохранить как и в большинстве программ. Отпусти меня сюда, очистить экран, запустите его снова. И есть еще ошибка. Так что же происходит - АУДИТОРИЯ: Вы не компилировать. David J. Малан: А, хорошо. Я не компиляции. Как идиот, я смотрю на код, чтобы посмотреть, что случилось. Таким образом, лязг buggy1.c, теперь a.out. И уф, сохранены. Так это выглядит немного уродливо, потому что нет новой линии в любом месте программы. Но опять же, это только эстетическая деталь. И по крайней мере, если считать те, мы должны теперь видим 10 таких звезд. Ну, что эта вторая разминка, например? Таким образом, в buggy2, я утверждаю, что эта версия тоже будет печатать 10 звезд, по одному на строку. Поэтому в этот раз, у меня есть символ новой строки, просто чтобы убедиться, вещи немного красивее. Но вместо того, что я получаю это. Итак, позвольте мне сделать лязг buggy2.c, Enter. Теперь он вновь призвал a.out. Enter. Я вижу только одну новую линию, только самая последняя новая линия, которая перемещает мое приглашение на следующую строку. И все же ясно я печатью *, то новая линия, *, То новая строка. Но то, что ошибка здесь? Да? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Совершенно верно. Таким образом, в отличие от некоторых языков, как Python, где отступы на самом деле имеет функциональное значение, в язык, как C - Как мы увидим, PHP, JavaScript - отступ на самом деле просто для пользы людей. Поэтому тот факт, что я красная строка 16 и 17 отлично выглядит, но он не имеет функциональное значение здесь. Если я хочу обе линии для выполнения как часть для петля, то я должен вложить их в фигурные скобки, делая это. Вы можете только сократить этот угол и опустить фигурные скобки, если в чем дело? АУДИТОРИЯ: Только одна строка. David J. Малан: Только одна строка. Вот только вид хороший вид синтаксиса подробно, чтобы Вы не тратите время на написание три линии, две из которых являются фигурные скобки, лишь бы написать ни одной строки кода. Но если у вас две или больше линий, мы действительно нужно это сделать. Так что теперь позвольте мне сохранить это. Позвольте мне идти вперед и повторно запустить Clang. Тогда позвольте мне повторно a.out, и теперь я получаю их по одному на строку. Теперь, a.out снова это своего рода немой имя для программы. Как я могу сказать Clang на самом деле дать мне имя файла , что более удобно, как buggy2 себя? Еще немного яснее? АУДИТОРИЯ: [неразборчиво]. David J. Малан: ОК, так что я могу на самом деле взять очень удобный ярлык и просто написать сделать buggy2. Я не уточняют. C в этом случае, и нажмите Enter. И то, что делает делает, он компилирует buggy2.c для меня Clang просят это сделать. В частности, он называет Clang, он работает Clang использовании намного больше, Аргументы командной строки или переключатели, чем я на самом деле нужно. В свое время мы вернемся к тому, что все эти различные загадочные выражения через дефис означает. Но сейчас, вот только что спас меня от труда того, чтобы помнить и того, чтобы вводить все эти различные дефис выражений. И верх в конечном итоге и является что теперь у меня есть buggy2. Если я хочу сделать это вручную, хотя, я может вместо этого - лязг-о buggy2, а затем buggy2.c. И это будет так же дать мне файл с именем buggy2. Короче говоря, Clang это компилятор. Сделать это просто удобный инструмент, который мы будем использовать более и больше, потому что она только начинает упростить вещи для нас. И мы возвращаем 0, наконец. На данный момент, только потому, что, но мы начнем дразнят, что часть Сегодня и в среду. Любые вопросы по любой из этого? Да? АУДИТОРИЯ: [неразборчиво] Ls в кавычках там? David J. Малан: OK. Когда я набрал Ls в кавычки, что было мне делать некоторые магии за кулисами, чтобы исправить ошибку. Я забыл, как мы говорили многие из вас на доски обсуждений делать - Мы сделаем это сейчас - Суда ням-у обновление appliance50. Ой, что это пишется справа. Таким образом, прибор, как операционная система. Это работает эта операционная система под названием Fedora. А теперь из-за моей медленное подключение к Интернету, у меня действительно обливали его. Так работает Суда обновление ням, как мы говорим вам, чтобы сделать в Проблема набора, по существу, как работает автоматическое обновление В Mac OS или Windows. И причина для выполнения этого в самом начале Проблема набора потому что, когда мы создали прибор, я перепутались, и я случайно сделал все Ваши программы выглядят черное на черном экране, который является, почему вы не видите их по умолчанию. Но последняя версия прибора фиксирует это. И я починю, что во время перерыва, когда я в Интернет подключение. Таким образом, котировки просто скрывает свою ошибку, очень осторожно, по-видимому. Другие вопросы? Да? АУДИТОРИЯ: Где сделать взялось? [Неразборчиво] David J. Малан: Хороший вопрос. Где сделать взялось? Это Linux программа, которая существует уже много лет, задолго Перед CS50. И он приходит с операционной системы, как Fedora. Он не приходит с CS50 библиотеки. На самом деле, единственное, что от CS50 библиотеки до сих пор, что мы видели, являются GetString, GetInt, все Получить эти функции, и слово строки, и некоторые степени, слово BOOL. Но мы будем дразнить, что, помимо, когда мы погрузимся в CS50 сам прибор. Так что, да, еще один вопрос. АУДИТОРИЯ: Когда вы сказали сделать, а затем багги, каким образом компьютер знаю [неразборчиво]? David J. Малан: Хороший вопрос. Итак, когда вы просто запустите сделать buggy1 или сделать buggy2, как делает знаете? Таким образом, по умолчанию, если вы введете сделать buggy1, сделать вид для Файл называется buggy1.c. И тогда она выполняет соответствующие команды Clang, тем самым перекрывая файл по умолчанию, выходной файл с именем a.out. В самом деле, если мы посмотрим на то, что сделать, что - Давайте выйти из этого. Если мы посмотрим на то, что делает на самом деле делают, делают buggy2, он уже в курсе. Итак, позвольте мне удалить RM команды, программы я написал раньше. Ввод Y-E-S, чтобы подтвердить, что я хочу, чтобы удалить его. Если я сейчас делаем, обратите внимание, что в этой очень длинной линии, есть это последняя вещь здесь,-о buggy2. Все делают это делает, кстати, что аргумент, так сказать, Clang, так что я не придется вводить его себе. Ладно, пару быстрых административных объявлениях. Таким образом, для разделов, которые официально начались предстоящий Воскресенье, вы всегда хотите принести, если у вас есть, ноутбук. Если у вас нет ноутбука, не дотянуться до меня падение мне письмо. И мы будем выяснить рабочего процесса. Что вообще вы найдете в разделе является то, что они являются частью концептуальных, часть практический. Мы специально использовать часть вопросов, часть из Проблема неделе набора, чтобы пройти через некоторые из концептуального материала лекции. И это все, что в текущем наборе проблемы. И мы также погрузиться в некоторых практических действиях, иногда которые должны будут быть представлены, иногда которая не будет. Например, это первая неделя, они предназначены как разминку упражнения. И вы увидите, что эти проблемы действительно так. Они предназначены, чтобы быть довольно маленьким, но не обязательно тривиальных программ, чтобы написать, что не обязательно захватывающих и сами по себе, но хорошие возможности для практиковаться с синтаксисом, с новыми функциями, в комфорте раздел, где у вас есть несколько своих одноклассников представить в виде а также ваши TF. И что мы будем делать в течение долгого времени, это использовать инструмент под названием CS50 пространства, которой вместо простого использования CS50 Appliance, вы Вместо перехода на веб-страницу в браузере, где вы сможете писать код, в окне браузера при разделе. И потом, если вы выберете, ваш парень обучения можно показать, то, что это вы печатаете на экране в Вашем браузере окна на фронте класса, будь то анонимно или публично, так, чтобы он или она может пройти через с одноклассниками, что ты сделал хорошо, что вы не очень хорошо. И еще, будьте уверены, все это может быть красиво выдается. Но это будет хорошая возможность для гораздо более интерактивности, чем что-то вроде лекции позволяет. В то же время, мы будем иметь эти вещи называют супер разделам, которые не являются обязательными, но открыты для всех в класс, так что вы можете сделать это в совокупности для более Проблема установить один. Вот график. Это также размещена на домашней странице cs50.net. Обратите внимание, что там будет хакера конкретных завтрашний день. И мы будем снимать до сегодняшнего дня и одну завтра, и опубликовать эти Интернет в течение 24 часов. Так что, если вы не можете сделать любой из этих времен, чтобы не волноваться. И снова, расписание на форуме в cs50.net. С точки зрения секционирования себя, вы должны были получить по электронной почте с инструкциями по перейдите на главную страницу курса, чтобы найти Ваши разделе. Если жизнь изменилась, и вы должны изменить свой раздел, не проблема. Вернитесь в тот же URL, cs50.net/section, единственное, и вы будете заполнить подобную форму, так что вы можете Затем дайте нам ваши предпочтения. И мы будем следовать до к концу недели о том, что мы можем разместить. На прошлой неделе, напомним, что мы предложили использовать Обсудить CS50, обсуждение курса инструмента, в лекции. Так что мы были на 40 вопросов, которые были заданы и ответил во время лекции. Так что, казалось, работало хорошо, поэтому мы будем продолжать пытается это сделать. Если во время лекции, вы не просто чувствовать себя комфортно повышение Вашу руку, не проблема. К cs50.net/discuss, размещать там, и один из наших обучение стипендиаты будут либо ответить на него в электронном виде или повысить их руки от вашего имени анонимно, чтобы спросить, в зависимости от характера вопроса. И с точки зрения обратной связи, как правило, psets будет возвращены в течение недели. Потому что это занимает некоторое время для секций для достижения равновесии, первые PSET, 0 и 1, будет немного отложено, поскольку вещи успокоиться. Но следите за обновлениями, что в ближайшие недели. Ладно, так что позвольте мне поставить на мой серьезный Голос на мгновение. Так что это на самом деле интересный климат, чтобы быть имеющие эту дискуссию, что со всеми другими вещами происходит на территории кампуса, относящихся к ним. Но CS50, безусловно, были свои истории данного темы, в той мере, каждый год, это, конечно, для многих лет, Ad-платы примерно на 3% в классе. Это самый последний год, 2011, CS50 Ad-сели 35 студентов. Это не так, я думаю, из-за отсутствия ясности. Поймите, что в программе курса, есть страницы заявление, объясняющее, где линии. В том же заявлении повторяется на каждом из Проблема задает на первой странице. Поэтому я говорю об этом сегодня на самом деле просто сделать Люди помнить об этом. И мы попробовали разные вещи. И то, что я думал, что мы делаем сегодня просто воспользоваться моментом, чтобы реально взглянуть на некоторые из прошлых дел, которые придумали. Вместо того, чтобы держать их как грязные маленькие секреты, на самом деле Отметим, что студенты сделали и как мы обнаружили он и в самом деле, что всеобъемлющая мотивации для даже этот разговор. Таким образом, с учетом сказанного, линии по существу это - Согласно программе, вы приветствуется, рекомендуется, чтобы поговорить с одноклассниками. Вот и весь смысл наличия этих совместных Приемные часы в Annenberg и поощрение людей к Окончательный проект для совместной работы. Но линия, когда приходит время, чтобы действительно написать ваше окончательное решение. Говоря на английском, совершенно нормально, выступая в псевдо-код, совершенно нормально. Отправка вашего одноклассника PSET, позволяя им выглядеть более Экран, как руки продолжают печатать, на линии, а также. Вы посмотрите на программу для конкретной линии. Но только, чтобы нарисовать картину того, как это, к сожалению, реальность, понимают, что есть сайты, которые там имеют решения этого класса и много других классов. Дело в том, что вы или около 3% из вас знают, что это такое означает, что мы знаем, что это существует. Дело в том, что есть сайты, как эта, где вы может платить кому-то, чтобы на самом деле сделать ваш множества проблем - это было реальный случай, который придумал в прошлом году. Это веб-сайт под odesk.com. И Тиму было имя человека, кто был на объявление по этому сайту и спросил кого-то, чтобы сделать его PSET 7 в данном конкретном случае. Ну, odesk.com очень Google-возможности, и мы тоже очень хорошо на поиск в Google. Здесь тоже есть сайты - и это одна довольно зверский, честно говоря. [Смех] David J. Малан: Самое смешное об этом сайте, если Вы читали о странице, они говорят о своих корпоративных культура и как обслуживание клиентов является их номер один приоритет, чтобы убедиться, что ваши задания получите Оказалось вовремя. Но со всей серьезностью, опять же, тот факт, что эти сайты существует, понимаете, мы тоже осведомлены о эти виды сайтов. И чтобы дать вам ощущение того, что это в целом образует берет, мы вообще не имеют большой скандалов, где люди сотрудничают в любой массовый, а скорее именно эти ночные минуты слабости, когда у вас так многое предстоит сделать, это 4:00 утра, вы исчерпаны, и вы думать про себя, ну, позвольте мне взглянуть на мое соседа или код моего друга или тому подобное. И проявления этого, к сожалению включать Студенческая Представлении что-то вроде этого и представление студенческих B что-то вроде этого, что, безусловно, в компьютере наука класса, удивительно легко для компьютерных ученых обнаружить с помощью программного обеспечения. Это еще одна общая парадигма, где вы рода работал рядом с кем-то, может быть, говорят в Английский, просто отлично, псевдокод. Но потом приходит время, чтобы действительно представить, и psets просто получить обменялись по электронной почте или Dropbox или тому подобное. Но в попытке сделать его менее очевидно, что это что случилось, то это то, что представлено. Это тоже не сработал до хорошо написанные куски программное обеспечение, как мы есть на самом деле обнаружения такие вещи. И в самом деле, что мы делаем, это запустить программное обеспечение, которое сравнивает все В этом году в представлениях против всех прошлом году представлений, против всего, мы нашли на Интернет, против каждой работы сайта там. Это все очень автоматизировано. И так мы делаем это действительно большая справедливости по отношению к 97%, которые действительно работают их задниц в этой и в других Классы и положить во всех этих усилий, так что работа в конечном счете они представляют, является их собственным. И я могу пойти на целую вечность. Это всего лишь несколько случаев в прошлом году. Несколько студентов представили эти файлы одинаково для PSET 2, PSET 3, PSET 4, PSET 5, PSET 6, PSET 9. В этом случае, это был тест 0 и в прошлом году, когда два Студенты представили одинаково это предложение среди многих другие ", запрос типа -" точка, точка, точка. Таким образом, даже в классе из 600 ли мы обнаружить эту на представленных викторины. Короче говоря, это - честно говоря, я очень не хочу иметь такую разговор - но это действительно целенаправленные усилия В этом году, чтобы попытаться снизить эту цифру. Потому что даже если мы говорим такие вещи каждый год, я думаю, что реальность в том, остановился на нем в течение нескольких Еще секунд чем обычно, и на самом деле просто указывая что то, что может показаться, что ль, не такая большая проблема, по крайней мере, вспоминаю этот момент, как в справедливости по отношению к себя и своих одноклассников здесь. Так что если вы когда-нибудь у вас возникли вопросы о том, где линия это, пожалуйста, просто выйти на меня лично. Но ответ всегда, полностью подчеркнули в последнюю минуту, денежные средства в конце дня. Или, если это дело не имея никакого конца дней, честно говоря, напишите мне лично. Мы что-нибудь придумаем. Пожалуйста, не ставьте свое время здесь, в Гарварде в опасности. Теперь, я думал, что мы должны поднять настроение, поэтому я включить это как следующий слайд. [Смех] David J. Малан: Этот сайт был большим. Я на самом деле стало немного отвлекся. Там в это. А потом этот был удивительным. Ладно, думаю, что Котенок поздно вечером, когда делать эти решения. Ладно, вернуться к более приятным и менее серьезные вещи, как условиях. Хорошо, таким образом, мы кратко говорили об этом. Это то, что, наверное, хорошо знакомы с Мир Scratch. И в мире Scratch, у нас есть эта потребность иногда пойти сделать развилки. Либо сделать то или это, или это другая вещь здесь. И когда мы хотим это сделать, мы можем использовать в C сейчас, это, если еще построить. А то вот у нас есть логические выражения. Например, логические выражения здесь, мы можем или их вместе, в том смысле, что у нас есть это условие или это условие. Мы можем и их вместе, в том смысле, что мы хотим проверить это состояние и это условие. И здесь у нас есть переключатель заявление сейчас, что это не так синтаксически похожи на те виды условий, но позволяет нам делать эквивалент, если, иначе, если, иначе, если еще если и тому подобное просто перечисляя их индивидуальной от случая к случаю. Таким образом, мы увидели тех, кто в прошлый раз. И тогда мы начали касаясь вещей, как петли. Мы видели одну из этих мгновение назад. Но есть эти другие циклические конструкции. Например, это здесь. Так что пока (условие), сделать эту вещь снова и снова. Таким образом, принципиально, что, кажется, различных между этим цикл, и это в то время как петля здесь? Этот цикл, и это в то время как петля. Да? Что это? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Хорошо. Таким образом, в то время как в цикле условие, там четко более синтаксиса. Там эта инициализации, там это обновление. В то время как цикл, там просто это условие. Поэтому кажется, что это немного урезанный по сравнению с для цикл, который означает, что если мы хотим иметь переменные, и мы хотим иметь приращение, мы на самом деле нужно этого сделать сами. Итак, позвольте мне идти вперед и открывать Gedit. Позвольте мне перейти на прибор. И давайте просто сделать быстрый маленький пример, что отличает одно из них от другого. А в глубине моего сознания здесь, я должен сказать одну вещь. Я специально упомянул имя Тима. Тим был на самом деле кто-то, что студент пытался найти, чтобы сделать домашнее задание для них. У нас не было Тиму в данном разделе. Так понимаю, чтобы мне не раскрыто студентом, это был не студент. Это был случайным человеком в интернете делать вещи по доверенности в прошлом году. Таким образом, мы видим, что, тоже. Поэтому в данном случае здесь, позвольте мне идти вперед и открывает новый файл. File, New. Это дает мне вкладке здесь. Позвольте мне идти вперед и сохранить его как loop.c. Позвольте мне пойти и нажмите кнопку Сохранить. А потом сюда, давайте идти вперед и начать писать # Включить . Позвольте мне изменить масштаб изображения Теперь мы будем делать Int основных (недействительными). Теперь позвольте мне идти вперед и делать для (INT = 0; I < ой, 10; я + +). А сейчас я собираюсь идти вперед и не печатать звезды, что я делали раньше. И тогда в конце этой программе, мы просто собираемся Печать на новую строку, просто так, что мои строки не выглядит грязным. возвращать 0. Казалось синтаксически правильные? До сих пор. Итак, давайте посмотрим. Итак, позвольте мне масштаб, перейдите в моем окне терминала. И позвольте мне идти вперед и запустить цикл, потому что я назвал эту вещь loop.c. Так что сделайте петлю. Кажется, для компиляции OK. Позвольте мне запустить цикл, и теперь Enter. И это, кажется, напечатанный 10 звезд. Так что давайте просто преобразовать это в то время как цикл и посмотреть, что виды вопросов, которые мы споткнуться. Таким образом, вместо этого, отпусти меня сюда и сказал, пока я есть меньше чем 10 - Позвольте мне избавиться от цикла. Итак, у нас есть несколько проблем уже. Таким образом, условия те же, но я явно не хватает инициализации. Мне не хватает приращения. Так что же компилятор вероятно, скажи мне, когда я пытаюсь скомпилировать эту программу? Да? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Хорошо. Таким образом, он собирается сказать что-то вроде необъявленной - в этом случае, переменная я. И действительно, использование необъявленный идентификатор я. И это в отличие от языков, таких как PHP и Python и Ruby, с которой некоторые из вас могут быть знакомы, где вы можете просто какая-то начала использования переменных волей-неволей, а не придется беспокоиться об объявлении их явном всегда. В C и в языках, как Java и C + +, вы должны быть Супер явным. И если вы хотите переменной я, вы должны сказать мне, какие переменные он. Таким образом, мы будем иметь, чтобы исправить это следующим образом. Я собираюсь пойти вверх здесь и введите Int я, следовательно, Я объявил переменную я. Теперь, я пропустил один шаг. Я, очевидно, не инициализируются, но давайте посмотрим, что в мере делает Clang прекратить жаловаться. Итак, позвольте мне переделать эту программу. Ладно, сейчас это просто жаловаться по другой причине. "Переменная 'я' не инициализирована при использовании здесь". Ладно, это довольно явно. Initialized просто означает, положив ее равной ценности. И мы не сделали этого, поэтому позвольте мне попробовать равна 0. Теперь давайте попробуем это снова и снова запустить Clang. Составитель этого времени. И я собираюсь запустить его. Но большой старый бесконечный цикл, потому что я сделал инициализации, я сделал состояние, но я никогда не делал любое приращение. Так как же я могу сделать приращение? Ну, в то время как цикл, он чувствует, как я буду иметь сделать это внутри цикла, потому что так же, как первый неделю примеров делают циклических конструкций, как с носках и с собственным счета, мы должны были сделать что-то в самом конце, хотелось вернуться к следующей строке. Что делать, если я иду вперед и делаю это я + + здесь? Давайте даже не компиляции этого. Поймай меня уже. Что тут не так? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Так что это определенно не Int. Это я. И фигурные скобки, как и прежде, отступ не достаточно. Так что теперь я эту конструкцию. Так что, хотя я меньше 10, распечатать звезды, Затем увеличиваем я. И то, как время цикла работ является то, что, как только вы нажмете конце цикла, который в данном случае выглядит как линия 10, он собирается вернуться в строке 6, в какой момент Условие будет еще раз проверено. И если я все еще меньше 10, мы сделаем линии 8 и то 9, то мы ударим 10, и вернитесь к 6, снова и снова и снова, и снова, пока я меньше 10. Так что давайте повторно запустить сделать здесь. Ладно, мы собрали все в порядке. Позвольте мне повтор цикла. И теперь он на самом деле, кажется, работает. Таким образом, плюсы и минусы здесь? Ну, до сих пор там на самом деле не все ООП - так мило. Ладно, что было - Ах, это был несчастный случай. Ладно, давайте вернемся к цикл. Таким образом, для петли хороши, потому что они очень четко. И хотя они немного неуклюжим, чтобы написать, что это очень мощный, и это позволяет сделать несколько вещей сразу. В то время как петли, кажется, не имеют огромную сумму стоимости всего Пока, потому что она чувствует, что мы просто должны делать больше работы. Мы должны поставить инициализации здесь, обновлять сюда, и мы должны помнить, чтобы делать все это. Таким образом, мы увидим во времени, в то время как на самом деле петли придают себя просто разные контексты, различных данных структур, как списки и хеш-таблицы, то, что мы доберемся до середине семестра. Но сейчас, знаю, что есть этот третий тип, известный как DO- время цикла. И мы видели это ненадолго. И это может быть очень полезным с PSET 1. Каждый раз, когда вы хотите что-то сделать, а затем проверить, если Пользователь сотрудничали, и если они этого не сделали, сделать это снова, делать- время цикла поддается такой логике. Потому что, как заказ сверху вниз здесь предполагает, сделать буквально означает это сделать. И делать это снова и снова, что это может быть? Может быть, это означает вызов GetInt или GetString, а затем проверив значение GetInt или GetString, а затем кричать на пользователей, если они не сотрудничали, попросив их снова и снова, и снова. Если вы хотите сделать что-то один раз, Затем проверить некоторые условия. Так давайте попробуем это. Позвольте мне на самом деле изменить эту ситуацию к DO-цикла. И я собираюсь пойти дальше и сделать следующее. Таким образом, выполните следующие действия. Давайте сделаем Int я = GetInt (), но давайте сначала сообщить пользователю что делать. Так мало чем отличается этот раз. "Дайте мне Int". Так что я буду использовать Printf для этого. А теперь я пойду сюда, и я собираюсь это сделать в то время как я есть, скажем, больше - Давайте посмотрим, у меня есть, скажем так, менее чем 0, или я это больше 10. Другими словами, я хочу число от 1 до 9, всего произвольно. Так что я с помощью комбинированного логическое выражение для убедиться, что я меньше 0 или больше 10, в которой случае я буду делать этого цикла здесь снова. Итак, еще раз, сделать это - а я меньше 0 или я больше 10. А теперь давайте идти вперед и сделать это один раз мы сделали это. Давайте просто сделать быструю проверку вменяемости. Е ("Спасибо, я это% D", I). Так что это простая программа запрашивает у пользователя Int, делает уверен, что это в некотором диапазоне от 1 до 9 включительно, , а затем благодарит пользователей, напоминая им, что они просто набрали, так же, как небольшой проверки вменяемости. Но давайте посмотрим, если это работает, как предполагалось. Отпусти меня головой вниз здесь и повторно запустить сделать петлю. Хм. "Использование необъявленный идентификатор" я "". Это странно. Я думал, мы решили, что. То же симптом, но другой код. Да? АУДИТОРИЯ: [неразборчиво] в два, мы должны [Неразборчиво]. David J. Малан: Совершенно верно. Так что это на самом деле приводит нас к теме известны как сфера. Оказывается, C, опять же, это действительно берет вас в буквальном смысле. И если вы делаете что-то вроде этого, где вы объявляете Int , а затем присвоить ему какое-то значение, но вы, что внутри пара фигурных скобок, что C делает это предполагает, что вы Только хочу, чтобы эти 32 бита известного как я существовать в контексте этих фигурных скобок, в рамках линии С 6 по 9. Так что я объявлен, и ему присваивается Значение в строке 8, но как только вы получаете за пределами строка 9 ниже фигурной скобкой, я уже не в сферы, так сказать. S-C-O-P-E. Это уже не в правильном контексте. Так что теперь нет я, так что это как бы у нас не было даже заявил на всех. Так что исправление то что-то вроде этого, если Причина в том, что я объявлен в фигурные скобки, которые видимо плохо? Здесь? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да. Итак, мы можем инициализировать ее пределами. Итак, позвольте мне идти вперед и удалить объявление частей которой Я указать тип, и позвольте мне сделать это здесь. Таким образом, в строке 5, теперь он говорит: "Дайте мне Int." Назовите это я. Обратите внимание, в строке 9, я не хочу этого делать, потому что я уже есть 32 бит. Я не хочу попросить компьютер различными 32 бит. Я хочу использовать те же 32 бит. И сейчас, потому что я объявлен в строке 5, она по-прежнему законно использовать его в строке 11 и строке 12. Итак, позвольте мне попробовать перекомпилировать и посмотрим, если Clang прекращает кричать. сделать петлю. Так что теперь это "неявное объявление функции "GetInt" недопустим в C99. "Что это такое? Да? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да. Так что теперь я на самом деле использование GetInt, это не то, что просто приходит с C. Это происходит от CS50. Так что мы должны это здесь. И позвольте мне вернуться в строку вниз Здесь и повторно запустить сделать. Ладно, в конце концов. Теперь мы решили, что и другие ошибки. Позвольте мне теперь запустить цикл и посмотреть, что происходит. "Дайте мне Int." Я дам ему 11. Я дам ему -1. Я дам ему Foo. Я дам ему 5. И теперь это действительно работает. Но строке изменился по причине здесь. Почему он сказал повторить один из этих раз, но дайте мне Int другие три раза? Почему это поведение отличается? АУДИТОРИЯ: Бросил в него строку. David J. Малан: Простите? Зала: Вы дали ему строку. David J. Малан: Да. Таким образом, мы дали ему строку в этой третьей попытки, когда я набрал Foo. Foo является строкой. Очевидно, что это не Int. И то, как CS50 реализован GetInt том, что мы не проверять, если что-то не меньше 0 или больше 10 для вас, потому что, как мы знаем заранее, какой вид Int вы хотите? Но мы можем минимально проверить тебя, не пользователь по крайней мере, Введите число? А если они этого не сделали, мы кричать на пользователей, набрав "повторить" на экран. Так что теперь у нас есть программа, которая циклов. Хорошо. Теперь, какой из них является своего рода лучше построить? Так вот где все становится немного грязным, То, что вы должны помнить, чтобы объявить переменную здесь если вы хотите использовать его внутри некоторых фигурные скобки и за ее пределами. Но даже если это выглядит немного загадочный на первый взгляд, просто еще раз, помните, простая логика. Для того, чтобы использовать все, что в C, является ли это функция или это переменная, вы должны включить его, если это функция В некоторых библиотек, или вам нужно объявить. Но теперь вы должны быть очень помня о том, что Вы объявив его в нужном объеме. Вы не поставив его слишком сильно внутри скобок. Поэтому позвольте мне на самом деле откат. Если мы вернемся к нашему например, от ранее, и я иду Вернуться к для Int, Int = 0; I <10; + + я, и я сделать Printf звезд, как это, и затем закройте парень, и теперь Printf я сейчас - в соответствии с той же логикой, что произойдет, когда я пытаюсь скомпилировать эту программу? АУДИТОРИЯ: Неверный идентификатор. David J. Малан: Так что это еще один неверный идентификатор, необъявленный идентификатор. Теперь, причина немного иная. Там, очевидно не фигурные скобки здесь, но то же самое Идея та же история сфера относится. Если вы объявили переменную, как я внутри цикл, даже если вы не написан фигурные скобки, думать о них мысленно все еще находится там, в которых случае, если я действительно только внутри цикла. Это не действительны, как только вы получите на следующей строке, которая в этом случае в настоящее время 10. Таким образом, всего за несколько вопросов сферы и тому подобное. Ладно, есть вопросы? Ладно, это вроде тривиальная небольшую программу, печать только немного звезд. Но давайте посмотрим, если вы помните эту песню здесь. Это невероятно раздражает песню дети будут петь на Школьный автобус и тому подобное. Но то, что хорошо о нем, что он имеет эту цикличность, которому это "99 бутылок пива на стене, 99 бутылок пива. Возьмите одну вниз, передать его вокруг, 98 бутылок пива на стены ". И тогда песня повторяется 97, то 96, то 95, затем 94, все, вплоть до 0, если вы действительно получили, что далеко на автобусе. Так что это хорошая программа для сортировки из орудия, потому что моя Бог, если можно просто реализовать это с помощью нескольких строк кода, вы могли бы выплюнуть всю лирику к этой Песня довольно быстро. Но на этом пути, мы можем начать сейчас дразнят друг от друга некоторыми из этих основных конструкций циклов, а теперь и Введем функции, что мы пишем сами, возвращать значения что мы обойти. Но, во-первых, почему бы нам не пойти дальше и принять наши пять минут разбить здесь? А когда мы вернемся, мы будем петь эту песню. Хорошо, таким образом, мы вернулись. И когда я говорю, что мы теперь будет петь эту песню, я имею в виду программно, а не в устной форме. Таким образом, здесь мы имеем beer1.c, который является одним осуществление этого конкретной песни. И чтобы было ясно, для тех, кто незнаком с тем, что эта вещь выглядит, позвольте мне идти вперед и сделать beer1, Enter. Теперь позвольте мне выполнить beer1, и что мы увидим - сколько бутылок пиво будет? Я буду вводить в 99, как поется в песне. Enter. И теперь, если мы прокрутки - упс - если мы прокручиваем через все это, мы увидим, что это действительно петь всю песню. Подождите минуту. Мой прокрутки немного перепутались. Давайте используем большие окна. Так beer1, 99, там мы идем. Так что здесь у нас есть целая песня, спетая гораздо быстрее, компьютер, чем это могло бы быть нами. Так заметить, однако, цикличность здесь. Это говорит 99, а затем 99, затем "взять одну из них, передать его вокруг ", то 98. И теперь она повторяется снова и снова. Так что на самом деле это прекрасная возможность для какой-то Построим цикл. Обратите внимание, что я немного резка угла здесь. Обратите внимание, что я говорю "98 бутылок пива на стене, 97 бутылок пива на стене ", и это было просто так что, когда мы добраться до одной бутылки пива, у меня нет беспокоиться о грамматике английского языка. Но мы также можем исправить это с немного, если Условие, возможно. Если это число особых, идти вперед и сказать: "Бутылка", в противном случае, если это множественное число, скажем, "бутылки". Но сейчас я полностью резки этом углу. Итак, давайте посмотрим, что мы имеем здесь. Таким образом, у нас есть некоторые комментарии в верхней части. Я в том числе эти две библиотеки, а Мы часто были. А теперь позвольте мне прокрутите вниз до первого фактические строки кода. Строка 17 стартует основной. Line 21 и 20 имеет, сколько бутылок пива будет? И тогда я называю GetInt. И теперь у меня есть немного здравомыслия проверки. Таким образом, это соглашение, по которому мы будем начинать с принятия более тщательно проверить введенные пользователем данные. Иногда вы просто не хотите, чтобы побудить их снова и снова и снова. Если пользователь винты и не сотрудничает, хорошо. Выйти и просто не иметь с ними дело. И вот что я здесь делаю. Если п меньше 1, то я просто буду кричать на пользователя, "Извините, что не имеет смысла". А потом я собираюсь произвольно возвращает 1. Таким образом, опять же, это всего лишь условность, чтобы привыкнуть. На данный момент, принять его на веру. Но до сих пор, мы всегда возвращались 0, так как Мы уже говорили возвращается 0 означает что? АУДИТОРИЯ: Успех. David J. Малан: успех, вот и все. Так что теперь мы, наконец, начинаем думать о без успехов - Другими словами, угол случаи, ошибки условиях - Теперь у меня есть бесконечный запас, или по крайней мере четыре миллиарда возможных вещей, которые могут пойти не так в моей программы. И я могу начать присвоение им индивидуальных номеров. Сейчас, как правило, достаточно просто вернуться нечто иное, чем 0. Итак, мы собираемся, чтобы просто вернуть 1 на данный момент. Но причина для возвращения 1, что, как только вы вернетесь 1, угадайте, что происходит с остальной частью программы? Он останавливается. Вот и все. Таким образом, тот факт, что я возвращаюсь 1 является эффективным короткое замыкание выполнения этой программы таким образом, чтобы ничего ниже линии 27 будет продолжать выполнение. Как только основная возвращается, что это такое. Ладно, если пользователь делает сотрудничать и мы достигнем линии 30 потому что они ввели в законную номер, вот мой осуществление этой песни. Так я впервые распечатать символ новой строки, только для эстетику. Теперь у меня есть цикл. И обратите внимание, что я делаю вещи немного в другом направлении. Я не должен делать менее, я не должен делать + +. Я могу сказать вместо инициализации переменной я, установите его равным п, число пользователей набрали, выполните следующие действия, чтобы Пока я больше 0, то я - как только вы закончили одну итерацию этого цикла. Таким образом, мы можем рассчитывать вниз с помощью цикла, а также. Теперь, это в значительной степени неделе один материал теперь, с Printf. Таким печати "% D бутылок пива на стене". Печать "% D бутылок пива. "" Возьмите одну вниз, передавать его ". для печати "% D бутылок пива на стене". Так что это еще% D, но заметить, что аргумент Printf меняется. После запятой, у меня есть я, потому что я хочу сказать 99. После этого запятой, у меня есть я, потому что я хочу сказать 99. После этого запятой, у меня есть я - 1, потому что я хочу сказать, 98 в это первая итерация, и так далее. И теперь здесь, я просто глупые маленькие замечания. И тогда линия 42, я возвращать 0 в соответствии с соглашением, показывая, что все в порядке. Так что, если я goofed? Что может распространенная ошибка здесь может быть? Ну, а если я случайно сказал хорошо, я хочу, чтобы подсчитать до 0, я хочу, 0 бутылок пива на стене? Поэтому я говорю, я больше или равна 0. Что это будет признаком того, что я теперь вижу, если я перекомпилировать beer1 и запустить его? АУДИТОРИЯ: Отрицательно. David J. Малан: Да, это пойдем отрицательным. Это не совсем по одной ошибке, невероятно Распространенной ошибкой сделать. Давайте на самом деле вернуться в окно терминала и сделать это Здесь, таким образом, мы можем увидеть в большем времени. Введите, 99 бутылок пива. Близко, но мы пошли чуть-чуть слишком далеко. Мы пели песни слишком далеко, так, что мы сейчас попали в отрицательное число. Так что не совсем работает. Ладно, так что мы можем легко исправить, что, возвращаясь к как это было раньше. Но то, что некоторые возможности сейчас улучшение? Хорошо, позвольте мне открыть beer2.c и прокрутите вниз, здесь и принять посмотрите на эту версию. Что первое, что бросается в глаза вам, как различные В этой версии здесь? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да, так не я, потому что пришло в голову, Мне знаете что, я спрашиваю у пользователя п, и тогда я полагая в равной п, а затем я меняю я, но я никогда не касаясь п раз. Так какого черта была точка Вы выделении еще 32 битов называется просто мне так, что я могу иметь различные переменные? Таким образом, в данном случае, я, конечно, признать, что ненужное Особенностью конструкции. И я сейчас собираюсь сказать в то время как п больше, чем 0, перейдите вперед и распечатать ту же песню, проходя п к Printf как Второй аргумент, и п - 1 в качестве второго аргумента здесь. И тогда на каждой итерации этого цикла, идти вперед и только уменьшения п себе. Теперь, функционально, эта программа будет одинаковым. Если я печатаю в 99, п начинается на 99. Я снижение, уменьшение, снижение, уменьшение. Я собираюсь пройти весь путь до "Одна бутылка пива стены, одна бутылка пива. Возьмите одну вниз, передавать его. 0 бутылок пива на стене ". Конца, потому что я и сделал получим условие правильной. Это больше 0. Я не делайте эту ошибку. Так что же лучше, версия одной или второй вариант? Я слышал кучу ропот на двоих. Почему два? Что это? АУДИТОРИЯ: [неразборчиво]. David J. Малан: О, все в порядке. Таким образом, он не будет опускаться ниже 0, но помните, в первой версии, Оригинальный правильная версия не опускалась ниже 0 либо. Поэтому помните, что это правильная версия. Так давайте хотя бы сравним два правильных версий. Что аргумент в пользу версии два из которых, ммм, лучше? Да? АУДИТОРИЯ: Он использует меньше пространства. David J. Малан: Да, это занимает меньше места, верно? В то время как версия, которая используется 32 бит для п, а потом еще 32 бита для меня. Версия вторая использует только 32 бита для п, так что кажется, это плюс. Другие мысли? Кто-нибудь хочет спорить в пользу одного? Да? АУДИТОРИЯ: Вы должны использовать дополнительные строки кода при п -. David J. Малан: Хорошо, конечно. Так что это справедливо. Так что это просто, по крайней мере для меня - Я имею в виду, это на самом деле чувствует себя немного грязнее, тем, что Я не могу сортировать инкапсулировать все мои логики в одном красивые линии, петли для, так как цикл может. Вот, я как бы должны лавировать на этом п - В конце цикла, потому что это логически необходимо. Но это вроде трется меня неправильно, просто потому, что Кажется, отдельная от логики здесь, хотя, опять же, это необходимо. Другие мысли? Да? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да. Так что, если вы вместо этого, в конце песни, хотел распечатать еще раз название песни? Как "Спасибо за игру 99 бутылок пива", или что-то глупо, как это? Но дело в том, что вы хотели доступ к исходному значению. Тот факт, что вы мутировал или изменился п на каждом итерации и, следовательно, уничтожить свое первоначальное значение означает, что вы просто не можете сделать это в конце. Теперь, пожалуй, мы, очевидно, не хотят делать , что в этой программе. Так кого это волнует? Но это очень правильный момент. И, честно говоря, там действительно никто не Право ответа здесь. Они оба одинаково правильны. Я мог убедиться в любом случае. Я скажу, что, в общем, это хороший принцип, если Вы спросил у пользователя некоторую ценность, и вы хранится в переменной как и я, только вид в принципе, это, наверное, хороший сохранить, что вокруг. И любые данные, которые вы хотите мутировать снова и снова, только дать себе копию этой переменной, просто так, что вы иметь доступ к оригиналу. Вы тратите еще 32 бита, но на самом деле это Компьютер, как, двумя гигабайтами оперативной памяти в эти дни, и мы спор по поводу 32 бит? Действительно не такое уж большое дело. И даже на этом устройстве здесь, с половины концерта или гигабайтом оперативной памяти, 32 бит и 64 бит, Не такое уж большое дело. Конечно, сегодня, это будет путь поражены размером самой программы, которая будет несколько сотен килобайт, если бы не несколько мегабайт, в эти дни. Таким образом, разумная озабоченность, ни один правильный ответ. Но по крайней мере те мысли, которые должны начать пройти через ваш ум? Потому что в PSET 0, хотя мы действительно только ожидается Правильность или, по крайней мере снимает с различными ошибками, что Вы, возможно, сталкивались, как мы продвигаемся вперед, дизайн будет еще один ключевой аспект, оба написания кода а также наши оценки кода. И так по крайней мере дать думал что-то вроде этого. И только потому, что что-то работает не означает, что это хорошо, не означает, что это хорошо разработан. И это одна из вещей, обучение стажеров и Проблема набора поможет нам дразнить часть с течением времени. Ну, что, скажем, эта версия здесь? Позвольте мне сделать что-нибудь сексуальное здесь в данный момент. Прежде всего позвольте мне избавиться от этого. А теперь давайте исправим эту грамматическую вопрос. Таким образом, в этой версии, я хочу, чтобы исправить грамматику, так что, , а не просто сказать скобках с, как "бутылка" или "бутылки", - Я не хочу, чтобы сократить этот угол - Я также хочу, чтобы динамически распечатать слово "бутылки" или "бутылку", тем самым используя эти заполнители% сегодняшних. Так что мне нужно условно проверить, что это значение я. И если это 1, я хочу сказать "бутылка", и если это ничего, еще, я хочу сказать "бутылки". Так давайте попробуем это сделать. Так что, если я == 1, то позвольте мне пойти дальше и объявить - Мне нужна строка, поэтому позвольте мне сделать строку s1, потому что это Первая строка меня волнует прямо сейчас. Я собираюсь сказать: "Бутылка". И потом, давайте посмотрим, струнный s2 - и я объясню, куда я иду в данный момент - "Бутылки". Так Напомним, что в этой песне, мы должны быть в состоянии печатать вещи, два разных слова потенциально. Таким образом, если мы оглянемся назад здесь, заметили, что когда мы доберемся до этот пример здесь ", две бутылки пива на стене, две бутылки пива, возьмите одну вниз, передавать его ", я хочу эта четвертая линия теперь говорят, "одна бутылка пива на стена ". Таким образом, я должен решить, я хочу сказать" бутылки "или "Бутылки"? Так что я собираюсь сколь угодно говорить, все в порядке, Я собираюсь сейчас объявить переменную s1, строка одно, что собирается получить подключены здесь, а также здесь, потому что эти слова всегда одинаковые, только потому, что характер песни. И я буду называть s2 все слова я хочу в конце концов появится здесь. Сейчас, буквально, в 99 случаях из 100, то это будет в обоих этих случаях, так как 3 множественное число, 2, множественном числе, 4, множественное число. Но в этом углу случай, когда мы доберемся до 2, а затем 1, или даже 1 и 0, мне нужна эта логика. Так что я должен провести некоторое время в моем коде получение этого права. Так что, если я это сделаю, если я == 1, то множество S1 равно "бутылка" и s2 равны "бутылки", потому что это будет в течение 1 бутылки, и это будет для 0 бутылки. И это здесь, что это представляете? Просто чтобы быть ясно. Это просто комментарий. Поэтому тот факт, что вы можете иметь однострочные комментарии означает, что вы Комментировать могут коде, как это, но другого общего парадигмы, тоже является то, что если у вас есть супер-короткие фразы, Вы хотите поставить себя, и это просто более удобным для чтения, чтобы положить это право в конце строки кода, вы можете Абсолютно сделать что-то вроде этого. Так что теперь, если я сделаю это? Иначе, если я не равна 1. Так взрыва равна - Восклицательный знак известен как "взрыв". Таким образом, взрыв = 1. Так что, если я не равна 1, что я вместо того, хотите сделать? Ну, первое слово, которое я хочу быть что? Таким образом, строка 1 должна быть "бутылки" для множественного бутылки, и тогда это будет множественное число "бутылки", а также, на данный момент. И мы увидим, если это на самом деле заставляет нас куда мы хотим идти. Так что теперь, если я прокрутите вниз здесь, заметили, что я подключением Не только я, но s1. Я подключением я и s1. А потом сюда, я минус 1, который так же, как раньше, но s2. Другими словами, я хочу, чтобы английское слово, чтобы изменить основе На этой логики. Теперь, уже есть некоторые проблемы в этом коде. Что разбито уже из ворот здесь? Да? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Совершенно верно. Так что я уже нарушил урок из области видимости. Таким образом, я заявил S1 и S2, но я сделал это внутри фигурные скобки, что означает, что да, этот код будет работать до до линии 42, но как только я попал линии 43, думаю, что нет больше не существует? Ну, думаю, что это больше не по масштабу - ни S1 и S2. Поэтому мы должны это исправить. Итак, позвольте мне удалить деклараций. И я оставлю имена переменных и удаления этого здесь и удалите это здесь. И в каком направлении я должен действительно объявить эти вещи? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да, так, вероятно, прямо здесь, 33-иш. Таким образом, строки s1 и строки s2. И оказывается, я могу это сделать. Если вы объявления двух переменных такого же типа, вы можете просто использовать запятую и сделать это в С. Все Право, так что теперь у меня есть две переменные - S1 и S2. Я присвоения им значений в этих Условия здесь, или здесь. И тогда я использую их вниз. Как она теперь будет работать? Ну, это еще немного глючит, но давайте хотя бы увидеть как далеко мы получили. Итак, позвольте мне пойти дальше и сделать beer3. Это beer3? Да, это beer3. А теперь позвольте мне идти вперед и работать beer3. 399 99. Мы, вероятно, может пропустить большинство из них. И сюда, посмотри на это. "Одна бутылка пива на стене, одна бутылка пива, принять один вниз, передавать его, 0 бутылок пива на стене ". Но я обращаю ваше внимание лишь половина решения. Вид облажался здесь. Так что, похоже, что угол случаи возникают, когда я равно, что два значения? АУДИТОРИЯ: 2, 1. David J. Малан: 2 и 1. Это не 1, а не 1. Это действительно просто эти последние две строфы этой песни. Итак, что я вместо этого хотите сделать? Так что я, кажется, поймал случай, когда, если г == 1, то первое слово "бутылка", а второе слово является "бутылки". Но здесь, я хочу изменить это, чтобы быть == 2. И если это так, то, что я хочу Первое слово быть? АУДИТОРИЯ: "Бутылки". David J. Малан: "Бутылки", так и для двух бутылок. И тогда это слово здесь должно быть - АУДИТОРИЯ: "Бутылка". David J. Малан: "Бутылка", особая. Ладно, давайте масштаб, вернуться сюда, повторные сделать, повторные beer3, Тип 99 раз. Ладно, "Ошибка сегментации (ядро сбрасывали)". Что я сделал не так? АУДИТОРИЯ: Вы не имеют значения [неразборчиво]. David J. Малан: Ах, отличная точка. Ладно, так что тут не так? Таким образом, сегментация вина, и мы фактически увидим это довольно много раз в будущем, сознательно. Но сейчас, что это на самом деле означает? Сегментация вина почти всегда означает, что у вас есть как-то пытался получить доступ к памяти, оперативной памяти в компьютере, что у вас нет, что вы, собственно, не просил операционная система для. Таким образом, в этом случае, обратите внимание, что я сделал, что недостатки в моей логике. Я назначен S1 и S2 значение, если я равна 1. Я также сделал, что если я равна 2. Но я не сделал это в бесконечное число других Возможности - В частности, 3 или 4 или точка, точка, точка, 99. Так что исправить это может быть просто давайте есть другое состояние. И отпустил меня сюда и сказал s1 равно - какой она должна быть здесь? АУДИТОРИЯ: [неразборчиво]. David J. Малан: "Бутылки", потому что в общем случае, это просто то же самое. Так равна цитата, конец цитаты ", бутылки". Так что для множественного бутылки, а затем здесь, на множественное число бутылок. Итак, теперь позвольте мне вернуться к моей окно терминала, перекомпиляция, вновь запустить его. 99. Вот так. И давайте сделаем быструю проверку вменяемости. Технически, мы хотели бы, чтобы прочитать все из них, чтобы убедиться, что они правы, но давайте посмотрим на наименее известных преступников. 3 бутылки, 2 бутылки, 2 бутылки, 1 Бутылка, 1 бутылка, 0 бутылки. Мы, кажется, по крайней мере, установил его на данный момент. Но загвоздка в том, что то, что Бог ужасный беспорядок, это просто решить глупо один символ грамматических деталей. Так что отчасти причиной того, что я вырезал этот уголок Ранее, потому что она просто полностью раздражает необходимость написать столько кода. Но оказывается, что есть чуть более элегантным способами выражающих одно и то же. И мы можем сделать это следующим образом. Позвольте мне оставить это на экране на мгновение и ввести нечто, известное как тройной оператор. Это своего рода одну строчку, что просто хотел сделать нашу Живет немного сексуальнее, как и обещал. И я собираюсь сделать это следующим образом. Дайте мне строки называется s1, и позвольте мне назначить его следующим образом. (Я == 1)? "Бутылка", иначе "бутылки". String s2 получает (я == 2)? "Бутылка", иначе "бутылки". Итак, что же тогда разница? Эти две строки кода, я считаю, может заменить весь этот бардак. Так я называю это беспорядок, только потому, что она как бы трется меня неправильным образом, что он так много строк кода. Не неправильно. Это не плохой дизайн. Мол, это совершенно правильный и прекрасно. Но кодирование становится утомительным, если у вас есть, чтобы выразить себя так, Черт специально снова и снова, и снова с простым Сценарий, как это. Так что C имеет некоторые ярлыки, как это. Так что это по существу говорит объявить строку называется S1 и назначить его либо это значение или это значение, если г == - Простите, я должен сказать, что это более четко. Объявление переменной s1, присвоить ему это значение, если это правда. В противном случае, присвоить ему это значение. Итак, другими словами, это своего рода одна линия способом говорят, если иное делать уступки по пути. Так что, если я равна 1, а затем пойти дальше и называют это "бутылки". И то это другое, называют его "бутылки". Между тем, s2, Второе слово, что мы должны определить, если я равна 2, мы будем установите переключатель S2 в "бутылке". В противном случае, установите его в "бутылки". И то, что это означает, что теперь я могу пройти через это и удалить все эти строки кода. И когда я говорю, немного смешно, что это сейчас сексуальнее, это сексуальнее в своего рода стилистические смысле. Тот факт, что функционально этот код на самом деле происходит в сделать точно такую ​​же вещь. И хотя это может выглядеть немного загадочные на первый взгляд, потому что мы не видели эту конструкцию раньше, я бы утверждают, что это в конечном счете будет гораздо больше чтения и намного проще для людей, чтобы мы вроде понять, потому что теперь вы можете просто прочитать Код все на одной линии. Он по-прежнему близки по духу, если там, где это состояние и тогда, это то, что внутри, если и это это то, что находится внутри другого. Но мы можем сделать это, только гораздо более элегантно. И если я теперь вернуться к моим терминал, удалив все из этих линий и заменили их только те два, перекомпиляции, повторные бутылки пива с 99 Обратите внимание, что моя грамматики является, по сути, по-прежнему верны. Итак, еще раз, что-то начать. 2 бутылки пива, 1 бутылку пива. Выглядит права. Да. Так что у нас есть гораздо более емкие решения. Так что это тоже, как вы получите более комфортно с C, не обязательно с первого PSET или даже секунды, но понимаю, что эти конструкции может позволить нам делать вещи, когда-либо более элегантно. Теперь давайте сделаем еще одну вещь здесь. Позвольте мне идти вперед и открывать return1.c. Теперь давайте начнем решить еще одну проблему таким образом, что позволяет написать более сложный код. Итак, вот простая маленькая программа, цель которой в жизни это для увеличения значения. А на самом деле, давайте сделаем шаг назад. Позвольте мне сделать это вручную. Позвольте мне сделать включать и Int основных (недействительными). И позвольте мне называть это increment.c. И то, что я хочу делать? Я собираюсь идти вперед и сказать что-то вроде - мы будем называть числа же - Int х. Так Int х получает 2; Printf х% й, новая линия, х. Так что я печатаю быстро, но вроде знакомые вещи сейчас. Тогда я буду делать X + +. Тогда я иду к печати в том же предложение еще раз. А потом я собираюсь возвращать 0 только для выхода из программы. Ладно, так это программы, которые приращения числа. Это первый выход для инициализации что-то 2, а затем это собирается увеличивать его и распечатать его снова. Так что давайте работать прирост, невероятно простой программы. Но предположим теперь, что я хочу куб значение, так что что-то несколько произвольно. И я на самом деле хочу делать х получает куб ее. Так что я мог бы использовать то, что называется функцией военнопленных, но я не действительно знаю, где это пока. Так что я собираюсь сделать это старомодным способом. х раз в этом равных х раз х раз х. Так что я кубатуры значение, умножив ее на себя снова и снова и снова, так что мы получаем власть 3-в этом случае. Так что теперь числа я должен распечатать и должно быть, как мы увидим здесь - сделать шаг, так что это на самом деле не совсем увеличить больше, но мы оставим только название - 2, а затем 8. Теперь у нас есть зачатки возможность для уточнения Здесь, в которой эта вещь измерения кубатуры умножения числа сама по себе сама по себе сама по себе чувствует, как это может быть просто Полезно иметь как функция, так же, как кто-то решил, лет назад - Вы знаете, вроде полезно, если один из нас садится и пишет Printf, так что остальной мир может его использовать, Почему бы нам не сесть и написать функцию, называется кубом , что делает это измерения кубатуры для нас, поэтому мы не должны вручную осуществление понятие кубатуры значения здесь? Таким образом, простой пример, но давайте идти вперед и использовать это в качестве возможность написать свою функцию. Таким образом, до сих пор мы использовали только основные, и мы использовали другие Народный функции, но мы еще не написали наш собственный. Таким образом, здесь мы идем. Я собираюсь пойти дальше и написать функцию, называется кубом. И я буду иметь это займет вход. Таким образом, ее вход будет целое число. И то, что он собирается делать? Это собирается объявить Int выход = вход раза вход раз вход. А потом он собирается вернуться, что выход. И тогда я должен быть конкретным сейчас. Эта функция будет возвращать Int. Так вот то, как Вы бы написать свои собственные функции. Сначала решите, что имя Функция будет. И вообще, что-то пояснительной хорошо, так что я называют его куб. Затем вы должны указать, что он собирается вернуться, что его выход будет. И мы не так уж много вариантов пока нет. Int, Char, дробный, логический, строка. А сейчас я собираюсь придерживаться Int, потому что я хочу, для возврата целого числа. Тогда вы должны указать, что его входов, если таковые имеются. И если куб принимает аргумент, берет что-то между скобки, вы должны дать аргумент, что имя, чтобы Вы можете назвать это то, как вы реализуете или записи эту функцию, и вы должны дать ему типом, который в этом случае будет Int. Короче говоря, куба это функция, которая принимает целое качестве входных данных и возвращает целое число в качестве вывода. Так что же делать с этим входом? Ну, а в строке 14, я объявляю переменную выходные, и я присвоить ему значение, вход раз входные раз вход. А потом я вернусь выход. Так как я могу использовать это тогда? Что я могу изменить эти подчеркнул символов в строке 7 должны быть, как вы думаете? АУДИТОРИЯ: [неразборчиво]. David J. Малан: Да, так кубе х. Так что х является переменной, которая означает, что она имеет некоторое значение. К счастью, это тип целого числа. И потому х INT, это означает, что я могу передать его в куб. И хотя я переопределения значения х со значением куба х, как это было в случае до сих пор, в любое время имеют знак равенства и строки кода, материал на право запускается на выполнение, а затем получает назначение в Значение слева. Таким образом, порядок операций так, как мы хотели бы надеяться. Так это работает? Ну, отпусти меня сюда. Позвольте мне открыть мое окно терминала. Позвольте мне сделать шаг, Enter. "Неявное объявление" куб "функция не работает в C99. «Как в стороне, C99 относится к языку C, как это было определен в 1999 году, которое было обновление на версию с 1989 года, который является обновлением по сравнению с первоначальной. Так что все это значит. Так что же это значит, что "неявное объявление "куб" функция не работает? "Это прямо здесь. Это прямо там, в строке 12. АУДИТОРИЯ: [неразборчиво]. David J. Малан: Что это? АУДИТОРИЯ: Это не раньше. David J. Малан: Это не раньше. Так вот в чем дело. С видом глуп, или компиляторов являются своего рода глупым. Они действительно только то, что вы говорите им сделать. А они, в частности, только читать ваш код сверху вниз, слева направо. Так что, если компилятор, Clang, читает ваш код, линия 1, выясняет, как это сделать. Ах, вот идет основной. Хорошо, позвольте мне пойти дальше и объявить переменную х. Позвольте мне напечатать что-нибудь. Линия 7, что же такое куб? Это не объявлена ​​в stdio.h. Он не приходит с С. Я понятия не имею, что делать. И так Clang просто останавливается и выходит с сообщением об ошибке. Таким образом мы можем исправить это в несколько способов. Мы можем научить Clang, что куб является просто перемещение которых декларация. Так что я вырезал и вставил ее поверх основного. Теперь понимаю, что только потому, что главное, уже не первый, это по-прежнему выполняется по умолчанию. Главные является основной. Это имя по умолчанию функция. Не имеет значения, где он находится в файле. Но по крайней мере теперь Clang видел куба, прежде чем использовать его. Итак, давайте посмотрим, если Clang является счастливым сейчас. Сделайте шаг, она компиляции этого времени. Позвольте мне выполнить приращение. И в самом деле, кажется, работает. Теперь вы можете придумать сценарии, где в конечном итоге это не возможно поставить любой функции выше всех других функций. Вы застряли в этом бесконечном цикле в действительности, где этот парень хочет быть здесь, но это парень должен быть там. Так что не всегда работает. Так что, к счастью, C имеет более элегантное решение. Я собираюсь поставить это туда, где она была, просто потому, что предпочитают, как в принципе, что главное всегда быть в верхней части, потому что это просто приятно видеть, что эта программа делает по умолчанию. И то, что я собираюсь сделать здесь это объявить, что называется прототип. Я собираюсь повторно заявляю о своем кубе функции, буквально копирования и вставки. На самом деле, это не в буквальном смысле. Таким образом, буквально копируя и вставляя линии 15 до выше линии 6. Это не имеет значения, какой линии это заканчивается на. Это случается, в строке 4. Но это должны быть, прежде чем основная. Но заметите разницу. 4 линия заканчивается точкой с запятой, что означает, эй, Clang, поверьте мне на слово, что существует функция называется кубом, который принимает и возвращает Int Int. Но я не скажу тебе, что это такое. Просто знаю, что я обещаю рассказать вам в конце концов. И действительно, сейчас это нормально, что это внизу. Так что это, как правило, лучше, потому что тогда в верхней части Ваш файл, вы можете просто отбарабанить, быстрого огня, одной строкой каждая, что имена ваши функции, каковы их Входы, что их выходы. А если быть более ясным, как правило, означает ввод аргументов или Параметр, синонимами. Выходной означает возвращение стоимости, что делает это руки ко мне спиной. Поэтому в данном случае здесь, куб был объявлен в верхней части, но определено, иначе известный как реализованы, в нижней части. Итак, теперь давайте вернемся сюда и вновь запустить этот. Так что теперь позвольте мне идти вперед и повторно запустить сделать, повторно запустить прирост. И теперь, кажется, работает просто отлично. Итак, теперь мы можем идти вперед и учитывать что-то вроде Пиво пример в этой четвертой версии. Итак, позвольте мне прокрутить вниз здесь. И заметил, что я как бы принял этот урок близко к сердцу только сейчас. Тот факт, что я пел то же строфе снова и снова и снова, в той же строке хора в песне, чувствовал себя Например, почему не я фактора, что из в функцию? И действительно, это должно быть одним из мотивов. Помимо того, что кто-то еще в мире может потребоваться использовать куб функцию - это хороший повод, чтобы разложить что-то и написать собственные функции - если есть кусок кода в вашей программе, которая просто делает концептуальном смысле, что вы вроде хотите, чтобы дать ему имя - как в данном случае, хора - Вы можете так же написать, что в качестве отдельной функции. Вы не должны написать все, в основном, если он только чувствует себя чистой, чтобы отделить его и дать ему имя. Поэтому в данном случае здесь, заметили, что у меня есть комментарий на вершине это функция, которая просто поет о указано количество бутылок. Заметьте, что здесь мне не нужно называть эти вещи вход и выход. В самом деле, на этот раз я просто позвонил мой вклад б за бутылку. И обратите внимание, здесь, пустота предлагает то, что? Это хор - АУДИТОРИЯ: Не вернуть его. David J. Малан: не возвращает значения. И в самом деле, функции не должны возвращать значения. Они просто могут что-то сделать. Они могут иметь так называемые побочные эффекты, которые в этом случае это просто целая куча печати на экране. Так заметить, что этот код здесь, я буквально только что украли у в предыдущем примере. Разница лишь в том, вместо использования я, как моя переменных, я сейчас, используя б, как мой переменной. Так что я б сюда, я б сюда, я б минус 1 здесь. Но код точно так же. Но только, чтобы показать вам, как мы можем использовать это, отпусти меня вперед и фактически изменить это будет цикл. для (INT я = п;> п, I -). Так что я украл, что из нашего предыдущего примера. Ранее он находится в строке 37, что я бы начал петь эту песню раздражает. Но вместо этого, я просто хочу, чтобы теперь называют хором я. Готово. Так что теперь в каждой итерации этого цикла, я называю это другим Функция, хор, который мне довелось писать. Она не была написана кем-то еще год назад. Но хор, тем временем, использует Printf для печати из этих четырех линий. Но то, что я звоню хор снова и снова петля означает, что я собираюсь получить, в самом конце, точно такую ​​же песню, как у меня до сих пор. Короче говоря, теперь, если я оглядываюсь на свой код, даже если функционально это равносильно, обратите внимание, что это начинают получать еще более читаемыми. Я точно не знаю, как GetInt реализован. Честно говоря, я не знаю, как хор реализован. Но это не имеет значения для меня. Меня не волнует, потому что теперь я могу сортировать, как человек, читать это от верха до низа. И потому, что функции называются по тому, что они делать, мой код более читабельным. А так как наши программы получить гораздо более сложной - К концу семестра, вы будете писать сотни строк кода в языках, как PHP и JavaScript и т.п. - Вы увидите, что это гораздо проще, чем следить за что вы сделали. И когда вы начинаете сотрудничество с друзьями или партнерам или коллегам, вы будете иметь возможность писать гораздо больше массивных программ, начиная осуществлять эти основные строительные блоки. Таким образом, с учетом сказанного, почему мы не называем это день? И мы будем видеть вас в среду. [Аплодисменты]