[Играет музыка] ANDI Пэн: Это CS50, и Добро пожаловать в неделю два раздела. Это на самом деле в то время как неделю два наших class-- фактически, первая неделя у нас была раздел. Показать рук, как многие из вас все пришли к супер раздела на прошлой неделе? ОК, это нормально. Ничего страшного. Как многие из вас смотрели супер раздел на прошлой неделе? ХОРОШО. А вы, ребята, сделали хорошо по проблеме установить один? Так что я собираюсь взять его, что мы имеем куча действительно умных детей в этом классе и все будет в порядке. ХОРОШО. Так first-- Во-первых, мы только собираемся кратко перейти в повестку дня на сегодня. Мы будем говорить о курсовых логистики. Многие из вас, наверное, есть вопросы, касающиеся как вещи работают в этом курсе. Мы на них ответить. Мы собираемся кратко перейти петель в случае любой из вас, ребята пропустили супер раздел. Мы будем говорить о отображения ASCII. Мы будем говорить о массивах, функции, аргументы командной строки. И, наконец, то, что вы, ребята, наверное, все действительно хотите быть здесь, чтобы узнать о, Ваш pset2. Мы будем иметь некоторые интересные трюки и советы о том, как это сделать. ХОРОШО. Кроме того, во-вторых, мы имеем много конфет здесь. Тот, кто любит конфеты, просто прийти сюда. Захватите некоторые. У меня есть куча. У нас есть тонны в офисе. Я действительно не хочу съесть конфету весь день. Вы, ребята, должны съесть все конфеты, потому что я принес его здесь для вас, ребята. Просто есть конфеты. Там будет конфеты каждая секция. Итак, сначала, кто я? Меня зовут Энди Пэн. Я являюсь руководителем ТА CS50 здесь в Йельском университете. И в дополнение к что, я также be-- если кто-то like-- свой ход приятель, плечо, чтобы кричать на. Если ночь прежде из вашего Pset, в Вы понятия не имеете, что происходит, ударил меня. Мы посочувствовать вместе, и так далее. Просто знаю, что я здесь, как ресурс для вас, как линии фронта помогая вам, ребята, выяснить, как для решения проблем в CS50 и за ее пределами. Моя электронная почта andi.peng@yale.edu. Я также отправить индивидуальный по электронной почте с мой номер телефона в нем так что не все на Интернет может увидеть свой номер телефона. Не стесняйтесь звонить мне в любое время. Серьезно, мой телефон как правило, прилагается к моей руке. Я не может ответить в течение нескольких минут. Я не может ответить в течение нескольких часов. Но я могу гарантировать вам, если Вы по электронной почте мне, если вы звоните мне, напиши мне, я отвечу в течение 24 часов. Часто, я отвечу, прежде чем что, потому что я понимаю что каждый получил некоторые проблемы, и вы хотите, чтобы ваши ответы дать ответ очень быстро. Тем не менее, если вы звоните мне 30 минут до что кусок, который из-за четверг night-- быть, как Энди, помоги мне, Я не started-- я могу дать Вы что плечо, чтобы кричать на. Но это может быть время, чтобы думать о как не делать, что в следующий раз. ХОРОШО. Ой. Как вернуться? Там мы идем. Таким образом, в этом, конечно, у нас есть тонна поддержки для всех. В дополнение к только что разделы здесь, которые вам каждую неделю получаю потратить 90 прекрасные минуты со мной, у нас также есть приемные часы. Как многие из вас, ребята, уже был в рабочее время за помощью? Отлично. Это действительно приятно видеть, потому что мы иметь штат более 45 ТП и сертификации подготовку для этого, конечно, что здесь находятся за помощь, вы, ребята с psets. По понедельникам они проводятся в ТЭАл класс в 17 Hill House здесь в Йельском университете. По вторникам и четвергам, они проводятся в обыкновенные. С 8:00 до 11:00 в значительной степени каждый будний день. Заходите, выйти. Любая проблема, нет problem-- просто заходите, и тогда мы вам поможем в этом. Во-вторых, в дополнение к офисных часов и секции, у нас также есть шорты. Кто-нибудь когда-нибудь видел пару из шорты или пошаговые видео в на вебсайте? ХОРОШО. Таким образом, они на самом деле, очень полезно. Наш прекрасный производство Гарвардского команда там на этой школе до севера, они сняли и производится эти невероятные Прохождение видео. Они возьмут Вас шаг за шагом через как идти о решении проблемы. Часто, если вы путать о простая концепция, особая концепция, взглянуть, потому что мы, вероятно, короткий на него где-то на нашем сайте. И это, как правило, большой ресурс смотреть, когда вы находитесь в первую очередь потеряли о том, как справиться с проблемой. В-третьих, у нас также есть study50 и reference50. Так что учитесь на 50 Сайт это всего лишь ссылка. Это, мне кажется, study.cs50.net или что-то вроде того. Просто Google это. У нас есть много слайдов, подготовленных. У нас есть много шорты и walkthroughs-- вещи все скомпилированные очень красиво и аккуратно для вас всех, ребята просматривать, какие понятия см что вы смущены о. Это, наверное, будет покрыта там, в study50. Reference50-- похожи. У нас есть много различных нот легко доступны для вашем распоряжении. И, наконец, у нас есть то, что называется CS50 Обсудить, форум, в котором, если в ночь перед вы делаете ваши проблемы, скажем, у вас есть вопросы. Войти в CS50 Обсудить. Задайте свой вопрос. И тогда один из hundreds-- возможно, thousands-- сверстников принимая этот класс онлайн будет войти. И, может быть, кто-то может получить Ваш ответ перед банкой TA. По сути, это просто онлайн форум, который мы все можем использовать, чтобы обсудить наши проблемы. Это круто. ХОРОШО. Так проблема устанавливает. Мы собираемся прямо в толщиной проблемы установите два. Многие из нас уже боролись с проблемой установить один. Мы уже знаем, что, возможно, ждет в течение прошлой ночи, чтобы сделать вашу PSET не самый умный, что нужно сделать в CS50. Советы и подсказки по существу для Успех читаются весь спец. Как многие из вас уже читать спецификации для PSET 2? ХОРОШО. Это твердое количество. Я знаю, вы ребята, наверное, признали сейчас спецификации действительно долго. Они действительно, действительно долго. Это действительно трудно читать каждую строку этого осторожно слово за словом. Вы хотите, чтобы просто бегло, где он говорит вам что-то делать. Я могу гарантировать вам, не делайте этого. Если вы сделаете это, вы, вероятно, буду скучать-то где он говорит вам, как начать проблему или говорит вам, что имя ваша проблема, или это говорит вам, это, пожалуй, лучший способ чтобы начать делать вашу проблему. И тогда вы будете потеряны. При попытке прочитать вашу спекуляция на полпути, много важной information--, что вы не будет в состоянии действительно доступа. Так что читайте всю спецификацию. Попробуйте прочитать всю спецификацию на прежде чем прийти к разделу, потому что тогда, когда мы говорить о PSET, мы все можем иметь представление что происходит. Во-вторых, это концепция что я буду ссылаться на нравится много на протяжении всего семестра. Но по сути, нам навстречу, верно? Меня, как ваш ТА и Джейсон, конечно менеджер и Scaz качестве профессора и Дэвид, как ваш профессор и все другие милые ТП в этом процессе, помощниками в этом course-- мы сделаем все возможное, чтобы гарантировать, что вы установлены до успеха в этом процессе. Мы будем проводить раздел. Мы будем проводить рабочие часы. Мы ответим ваш телефон звонки, отвечать на электронную почту, сделать все от нас зависящее, чтобы сделать уверен, что ваши вопросы отвечает. Тем не менее, помочь нам тоже. Нам навстречу. Если вы приехали в рабочее время не уйдя в разделе не увидев лекции, имея никакого Идея, что происходит, быть, как мне помочь. Я собираюсь быть, как хорошо, я извиняюсь. Это может быть время, чтобы оказать что плечо, чтобы кричать на, потому что я не уверен, что я могу сделать, чтобы помочь вам если вы не пытаетесь по крайней мере, помощь сами немного в начале. Нам навстречу. Вы знаете, пожалуйста, приходите готов ответить и получить готовы участвовать в материале. Это делает вещи намного проще для всех участников. Да, это довольно много его. Классификация. Так на программе, это довольно в глубине относительно, как мы класс. Но по сути, пробой в это 50% Вашего сорта будут psets, которые прекрасный, потому что это где вы тратите огромное Большинство своего времени курс на. Викторины 40%, и ваш Окончательный проект будет 10%. Там будет два викторины по всему курс семестра. Я думаю, что раз и даты также перечислены на программе. Таким образом, что мы будем быть сортировки ваши psets является то, что у нас есть, по существу четыре ценности, которые мы приписываем каждого сорта. У нас есть значение объема, Правильность, дизайн, и стиля. Итак, как вы видите, что это своего рода наш Формула для расчета psets. Три мы даем наиболее Вес правильности, потому что очевидно, ваш тренер должны испытывать за исключением случаев, что мы хотим, чтобы проверить. Вы, ребята, все имеют check50 в вашем распоряжении. Это очень полезная функция что вы, ребята, все это может загрузить код к нашим серверам, где мы будем проверять ее для вас. И вы видели тех, frowny лица, улыбающиеся лица. Они действительно, действительно полезно. Пожалуйста, не будьте студент, который хотел попыток жестко во всех ответов на них. Я определенно видел PSET где кто-нибудь видел все значения check50 и они просто жестко, если in-- это число, распечатать этот номер. Если это число, распечатать этого числа. Не делай этого. Даже если технически check50 правильно, Ваш способ решения Проблема не правильно. Так просто использовать check50 экономно. Но и убедитесь, что вы понять, как это работает, Программа функционирует в дополнение к check50, потому что мы не можем проверить каждый возможный случай check50. Мы будем тестировать некоторые из них. Дизайн по сути дела, как хорошо разработана ваш код? Если вы копирования вставки нескольких строк кода много, много раз. Может быть, вы не имеют вполне лучший дизайн в коде. Может быть, пришло время добавить, что цикл. По сути, здесь это просто все о попытке сделать ваш код, пытаюсь написать код, как эффективно как можно так, что ваша программа работает как можно быстрее. Наконец, у нас есть стиль. Так стиль своего рода произвольным, субъективным. Я знаю, что мы официально есть стиль 50 руководство для CS50, где он говорит тебе, о, вы, должен иметь место здесь. Вы должны рода формате код таким образом. Вы должны назвать это таким образом. Я действительно не волнует, как таковой, как Вы выбираете для оформления кода, как долго, как вам оставаться последовательным. Например, если вы хотите оставить пространство после ваших четырех до вашего четыре цикла, просто делать, что каждый раз. Не вид это сделать. Не сделать это в другое время. Если вы хотите сохранить вьющиеся скобки пространство определенным образом, просто всегда сделать это таким образом. Не вид сделать это где-то здесь и где-то не там. Когда мы классификации, это действительно трудно если у меня нет идеи, как Вы форматирование кода, вещи дурацкие и не к месту. Если вы просто держать его в соответствие, это гораздо легче для меня, как большая чтобы иметь возможность читать ваш код. Это гораздо проще для вас, как студенту чтобы иметь возможность просматривать код и посмотреть, что случилось с это сократить почему есть проблемы. Стиль является одним из самых простых вещей, вы, ребята, можете сделать, чтобы получить полный оценки. По сути, если вы просто заботятся, если Вы платите пять минут внимания чтобы ваш код каждую неделю, вы должны быть полный стиль очков. Наконец, у нас есть то, что называется множитель масштаба. Scope-- Я знаю, что это большой Слово, особенно в этом классе. Но сфера, все, что средства является то, что вы пытаетесь в psets к лучшему вашей способности. Если вы включите в трех из из ваших четырех проблем и даже не попытка Последний, вы, вероятно, собирается терять несколько точек на сферу. Даже если вы только начинаете проблему, сделать все возможное, чтобы пройти через это. Даже если это не работает, выключите его, потому что показывает и демонстрирует нам, что вы пытаетесь, что Вы попытались установить проблему к лучшей из Вашей способности. И тогда мы можем дать вам полная очков за рамки. Область является также очень важным, когда мы говорить о низкой капли оценка PSET. Так в течение из семестр, вы, ребята, есть девять psets. И мы на самом деле будет падать самая низкая оценка из тех девяти, но только если у вас есть полный точки размах. Так что, если вы включите в неполном PSET, К сожалению, мы не можем отказаться, что один, потому что Вашей области не были завершены очков. Таким образом, даже если у вас есть ужасный неделю где вы умираете и вы больны или ваша собака умирает, ваша кошка умирает, и вы перегружены домашними заданиями, просто попытаться PSET. Сделайте это в меру ваших возможностей. Если это не работает, это не имеет значения. Просто включите его в. По крайней мере, мы можем дать Вы очки за усилия. А при попытке в этом классе. По крайней мере, низкой капли оценка для усилия. Так что да. Это довольно много его. Кто-нибудь есть вопросы, чтобы далеко, как мы сорта в классе? Или любой из них? Любой из них так far-- Разделы, офисная часов? Круто. ХОРОШО. Так что это вопрос, который не человек действительно любит поговорить. Я действительно не хотел, чтобы об этом говорить. Вы, ребята, действительно не хочу чтобы услышать меня говорить об этом. Но, к сожалению, мы все должны говорить об этом. Дэвид провел 20 минут в лекции говорить об этом. И это является предметом академической честности. Таким образом, мы все здесь, вероятно, написана эссе-то в нашей Йельского карьеры. Мы, вероятно, получили разговор, где мы сказали не заниматься плагиатом наш очерк, потому что работа не наша. В компьютерной науке, у нас есть такой же концепции. Все работы, которые вы предоставляете, весь код, который вы пишете должно быть код, который вы написали. Не должно быть код, который Вы скопированы из другого. Не должно быть код, который Вы гугле и шлепнулся в и вы действительно не знаю, работает ли он. Вы вроде есть чувство что он делает, но не совсем. Если вы сомневаетесь, по сути, это просто быть разумным. На нашем учебном, у нас есть целый список вещей, мы видим, как разумно по сравнению с не разумно. Например, разумно это вы и ваш друг обсуждали, что лучший способ пойти о логике решения проблемы. Это довольно разумно. То, что не было бы разумно, если вы Ребята собрались, набрали такой же код, и оказалось в том же коде. Это не разумно. То же самое, своего рода эссе. Если вы хотите, чтобы обсудить с вашим другом, эй, это то, что я хочу написать о. Эти шаги, которые я хочу времени, чтобы написать об этом, великий. Это прекрасно. Пожалуйста, сотрудничать друг с другом. Если вы, ребята начать написать то же самое, включить в той же статье, что меньше ОК. Поэтому, когда есть сомнения, просто не сделать это. Здесь мы в CS50, у нас есть сценарии которые работают для автоматизации, чтобы проверить не только правильность кода, но также уникальность вашего кода. Поэтому, пожалуйста, не ставьте нас в положение того, чтобы обратиться ваше дело EXCOMM. Пожалуйста, просто для всех, давайте просто сделать это замечательный опыт. Каждый учится лучше, все мы счастливее, и мы все настроены на добиться успеха в этом процессе. Что-то, что очень Уникальность этого класса Я думаю, что каждый должен действительно обратить внимание на то, что у нас есть то, что называется сожаление оговорка в нашей программе. Так по существу, в течение 72 часов, если Вы уверены, что вы сделали что-то Вы не уверены, был действительно необходимости, пожалуйста, приходите к нам. Мы обещаем вам, что в течение 72 часов мы будет обрабатывать сами дела не обращаясь к выше власть в администрации. Так что, если вы пришли ко мне и говорят, Энди, эй, я действительно сожалею, но я думаю, что есть пара строк по моему Код вчера вечером, что я вроде гугле, сошел из стека Переполнение, скопируйте и вставить, и я очень, очень жаль о том, дайте мне знать. Пожалуйста, не просто позволить ей тлеть и только надеюсь, что я поймать его. Мы поймать его. Просто приходите ко мне. Позвольте мне знать, в течение 72 часов. Мы выяснить, решение. И мы обещаем, что мы не будем ссылаться на университетские власти по существу. Так что это в ваших интересах просто быть честным со всеми участие в процессе. ХОРОШО. ХОРОШО. Так что теперь, быстро, прежде чем Я двигаться дальше, кто-нибудь есть вопросы, касающиеся логистики от того, как курсы мы собираемся работать, как секции собираются бежать, любой из что? ХОРОШО. Да. АУДИТОРИЯ: [неразборчиво]? ANDI Пэн: Да. Так как quizzes-- многие из вас в разделе понедельник / среду? Как многие из вас в вторник / четверг? ОК, так что это твердое сплит здесь. Таким образом, путь, который мы запускаем это в Йельском университете, что мы будут иметь два отдельных quizzes-- один для каждого section--, что будут приняты во время занятий. Я думаю, что это октября конец октября, что-то подобное, а недели один викторины. Да, так просто прийти в класс. На этой понедельник или в среду, вы будете принимать тест. На этой вторник или четверг, вы будете принимать различные викторины. Но тот же материал будет покрыта. Да. Хороший вопрос. Да. АУДИТОРИЯ: Где мы пойти проверить наши оценки? ANDI Пэн: Да. Так что я буду посылать вне адрес электронной почты все, что каждую неделю когда викторины graded-- или извините, когда psets оцениваются. Psets обычно оказалось в полдень или в пятницу. Так что я обещаю, что я буду попытаться получить их обратно к вам к полудню следующего пятницу. Всякий раз, когда я Grade A PSET, я пошлю из уведомления о книге класса что говорит вам ваш счет можно смотреть онлайн. Так прямо на этой неделе, после того как я завершить классификации psets на прошлой неделе, вы, ребята, получите по электронной почте Уведомление говорю вам, Эй, это где вы перейти просматривать оценки. И вы можете видеть каждый Анализ ваших классах. Вы можете видеть комментарии. О, быстро, что также. В разделе комментариев в большой Книга, где я, наверное, проводят большую часть своего времени классификации. Так одна вещь, которая Очень важно, когда Вы, ребята, просмотра Ваши сорта на ваших psets не только ищет на физическом счет но также нашли время, чтобы действительно прочитал мои комментарии. Часто это дает вам обратную связь о том, как вы решаете проблему. Если вам нужно сделать, что-то немного лучше, конструктивная критика обычно лучше назначать в тех разделе комментариев. Так что пожалуйста, пожалуйста, я собираюсь провести время на написание комментариев. Пожалуйста, я бы очень признателен если вы, ребята, будет читать эти комментарии. ХОРОШО. Круто. Все в порядке. Итак, мы собираемся, чтобы начать говорить и просто рассмотрение быстро некоторые из материала с нулю просто так мы неделю на правой странице для начиная проблемы на этой неделе. Таким образом, в то время как петля является одним из трех типов петель мы обсуждали ранее в этом классе. Некоторое время цикла существенно написано в синтаксисе где, в то время как определенное состояние, Сделайте это несколько раз, верно? Думайте о нем, в этом графике здесь. Вы собираетесь начинаются в определенная точка в коде. Вы собираетесь войти в условие цикла if-- я не знаю-- х меньше, чем один. Если это правда, что вы собираетесь для выполнения тела цикла. И вы собираетесь продолжать делать что опять, опять, опять, снова и over-- поэтому это loop--, пока ваш условие не станет ложный. Так что в этом пути, в то время как петли является одним из самых простых способов написать какой-либо условии, что Необходимо повторить снова и более. Только будьте осторожны, когда Вы пишете какой-либо петли что у вас есть выход в состояние а также обновление для бы то ни так что ваш цикл не просто придется снова и снова бесконечно. В любом случае, вы будете хотят, чтобы убедиться, что вы изменяете некоторый аспект код или в конце цикла просто чтобы убедиться, что у вас есть способ прогрессирующей к состоянии что вы хотите, чтобы удовлетворить до конца. Имеет ли это смысл для всех? Мы просто не хотим быть оказавшихся в этой спирали где мы идем вокруг и вокруг и нет никакого способа, чтобы разорвать петлю. И каждый цикл по существу есть способ сделать это. ХОРОШО. Во-вторых, многие из вас в ваших psets Марио вероятно, использовать Этот тип цикла. Это называется делать во время цикла. Прежде всего, кто может сказать мне, в чем разница между дел в то время как цикл и в то время как цикл? Да. Аудитория: сделай то время как цикл работает на первый [неразборчиво]. ANDI Пэн: Да, именно так. Так сделай то время как цикл всегда делает то, что находится внутри дел, в скобках там и делает, что условие до проверки the-- извините, делает что-код перед проверка состояния. И это особенно актуально для нас Здесь в этом классе, потому что большинство времени мы собираемся хотите, чтобы побудить пользователь в течение некоторого рода входом. А потом, в зависимости от вход они дают нам, то мы можем оценить, ох, сделать мы должны побудить их снова? Таким образом, в Марио, если пользователь дал вам отрицательный рост, например, Вы собираетесь первой строке и делать все, что находится внутри. Тогда вы идете, чтобы проверить время. Вы знаете, это отрицательный 1, является то, что положительное число? Если это не так, я собираюсь пойти назад и повторить делать и повторения и повторять и повторять, пока они наконец, дать вам номер, который вам нравится, что все мы можем использовать в нашем коде. Это очень важно для по существу, любой пользовательский ввод. Я могу гарантировать вам, любой раз в PSET где мы просим вас ввести какой-либо кода, мы вероятно, чтобы дать вам тест случай, в котором мы собираюсь дать вам что-то плохое, что это будет пытаться сломать ваш код. Если мы пытаемся спросить вас Для ввода число, мы можем просто дать вам строку и посмотреть, как вы бы справиться с этим. Если мы просим вас использовать возраст, мы можем дать вам отрицательное число чтобы посмотреть, как вы бы справиться с этим. Просто убедитесь, что вы, ребята, тестирование на случаи, в которых вы не получите лучший вход, давайте просто сказать. И сделай то время как цикл это часто лучший способ создать свой код так, что он отвечает, что объем. ХОРОШО. ХОРОШО. Так что это, вероятно, наиболее Комплекс цикл из трех что мы смотрели на до сих пор. И, кажется, очень страшно на первый взгляд. Но я гарантирую вам, после того, как вы, ребята, получить навык, как использовать цикл, это один из самых полезных вещей, наиболее полезных инструментов в вашем арсенале для продвижения вперед в этом классе. Так, например, в пустом, у нас была эта очень простой блок что только что сказал, повторять это наверняка фразы определенное количество раз. Кстати, SAJ-- это Scaz Энди Джейсон. Мы часто войдите наши письма Сай. Если мы говорим, Сай, не путать. Вот только мы. Таким образом, в пустом, мы были в состоянии иметь блок, который сказал, что я люблю повторять Сай! 10 раз. Очень просто. Логика, которая является очень, очень просто, верно? Я хочу, чтобы сначала пройти через первый время и видеть, что во второй раз и видеть, что в третий раз, и так далее и так далее, пока вы не нажмете 10. И то, как мы будет представлять, что в Код просто через простой цикл. Таким образом, для, вы собираетесь объявить переменная здесь, в этом случае, с внутр. Мы собираемся назвать это я. Мы собираемся, чтобы инициализировать его в 0. И остановка издание будет я меньше 10. И обновление будет я ++. И в цикле, это происходит не выполнять пока в конце концов его парад конец condition--, в котором так, он собирается разорвать петлю. Там должно быть вещи, которые вы Ребята все вроде видел и должен был сделать для вашей проблемы установите один. Кто-нибудь есть какие-либо вопросы в отношении, петель прямо сейчас? ХОРОШО. Отлично. ХОРОШО. Так что для тех из вас, кто читать Pset спецификации на этой неделе знаете, что мы будем иметь на работу то, что называется ASCII и таблицы ASCII. Давид в лекции подошел кратко как компьютеры все essentially-- кодируется в компьютере в двоичный, в нулей и единиц. И то, компьютеры способны для хранения различных ценностей, в дополнение в нулей и единиц являются отображением через эти цифры представляют другие цифры или существенно другие характеры. Таким образом, в этом случае, ASCII-table-- все это делает это символы карту, или символы, на номера. Так файла исходного кода в Ваш computer-- он видит, эй, куча нулей и единиц, нулей и единиц, нулей и единиц. Это то, что хранится в фактический объем памяти вашего компьютера. Но когда мы, люди, хотим общаться с компьютером, мы want-- сказать, например, если я хочу заглавную A, Я собираюсь нужно каким-то образом рассказывать компьютер, ох, когда я печатаю в верхнем регистре A, я имею в виду это представление в двоичной системе. И так, как мы делаем, что бросил произвольное, что называется таблицу ASCII, где, как люди, так как программисты, некоторое время назад, мы произвольно решил, что мы собирались назначить эти номера Значения этих символов в. Таким образом, вы, ребята, можете Google это в Интернете. Я думаю, что есть ссылка на него в вашей pset-- просто ASCII таблица карты, ASCII Таблица. Это просто переводит двоичный номера в символов. И это будет очень полезно для вашей проблемы набора всякий раз, когда вы хотите, чтобы рассчитать что-нибудь или если вы хочу, чтобы отобразить определенный символы или целые числа или манипулировать определенные символы. Это собирается быть очень Важно, что вы все знаете, как перемещаться таблицу ASCII. Так, например, в верхнем регистре A представлена ​​на число 65. И в нижнем регистре представлена ​​97. Поэтому важно знать, что Разница между этими двумя значениями 32. Часто, если вам нужно конвертировать из друг к другу, разница 32. И не волнуйтесь, если вы вид смущен об этом сначала. Мы пойдем над тем, как мы бы использовать это в реальной кода. ХОРОШО. Так что для тех из вас с ноутбуками вне, не стесняйтесь, чтобы подтянуть таблицу ASCII, потому что они, вероятно, требуют вы, ребята, чтобы ссылаться на то, что персонажи. ХОРОШО. Так, зная, что некоторые символы отображаются на определенные номера, если бы я работать только первый линия, что code-- в PRINTF а, нижний регистр в минус, прописные А. Кто-нибудь есть предположение о том, что будет печать из экрана прямо сейчас? Итак, прежде всего, то, что делает Строчные представляют? Какое число является то, что кодируется в таблице ASCII. Сожалею? АУДИТОРИЯ: 97? ANDI Пэн: 97, большой. И то, что в верхнем регистре A? АУДИТОРИЯ: 65. ANDI Пэн: Так что 97 минус 65? АУДИТОРИЯ: 32. ANDI Пэн: ОК. Так что вы, ребята, думаете, что произойдет, когда я вход, строка кода в моем компьютере? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: К сожалению, говорить. Не беспокойся. Это очень безопасно среда, минус камера. Мы все, целью которых без забот. Просто мы все собираемся делать вид, как это просто нам охлаждения в этой комнате. Не беспокойся. Ни один вопрос не является слишком глупо. Ответа не глупый ответ. Я, вероятно, будет делать ошибки в ходе моего обучения. Серьезно, ребята, просто ляпнуть это. Будьте уверены в себе, вы знаете? Так что это было? Кто сказал, что последний ответ? ХОРОШО. Кричите, что красиво и понятно. АУДИТОРИЯ: 32? ANDI Пэн: 32. ОК, давайте запустим этот код и увидеть, если это то, что происходит. ХОРОШО. Итак, как вы, ребята, можете вид см, типичный обозначения Я настроить здесь, как мы будет использовать какой-либо программы в нашем компьютере. У нас есть основной функцией в нашей основной функции. Я просто хочу, чтобы скопировать и вставьте эту строку кода. Также будьте осторожны, когда вы, ребята, копировании и вставке код. Иногда некоторые операторы не оклеивать правильно. В этом случае, минус Знак был на самом деле тире. И поэтому компьютер не забрать его. Так что мне пришлось вернуться и физически перепечатывать, что. Только будьте осторожны, когда вы, ребята, делаете это. ХОРОШО. Мы собираемся запустить это здесь. Итак, мы собираемся, чтобы компакт-диска в нашей раздел2. Я назвал эту программу asciimath. Так что помните, когда мы бежим любой Программа, мы хотим, чтобы скомпилировать его запустив его через наш марки. И тогда мы действительно хотим работать Программа делая точка-слэш. Итак, мы собираемся, чтобы ./asciimath. Право, мы идем. И мы видим, 32. Отлично сработано. Вы заслуживаете конфету. Конфеты для вас. Сожалею. Все в порядке. ХОРОШО. Таким образом, мы можем вернуться к нашему примеру здесь. Ааа, нет. Ааа. ХОРОШО. Я просто хочу, чтобы держать его так. ХОРОШО. ХОРОШО. Итак, как вы, ребята, можете увидеть, что мы можем сделать много очень интересных вещей, много очень интересных вещей, много очень сложные вещи с участием Символы ASCII и цифры. После того, как вы садитесь на линию пять, что это много, чтобы следовать. Мы не собираемся идти через секцию. Не стесняйтесь, если вы можете, Причина это на бумаге в первую очередь на то, что должно быть, когда происходит Вы ввели такой строки значений. Например, в последнем линии, мы имеем z-- который представляет определенный number-- a-- который также представляет собой некоторые number-- плюс 1 модуло 26 плюс нижний регистр а. Если вы, ребята, продолжайте чтение через них, вам можно увидеть образец придумать в как мы манипулировать код. Я очень, очень рекомендую после раздела вы все ребята идти вперед и вход те, все в вашем компьютере и посмотреть, какие номера выходят и рассуждая, почему через те происходит, потому что для psets это будет действительно важно для вас, чтобы понять, почему некоторые вещи случаются. Все эти слайды будет онлайн. Так что не беспокойтесь о попытке физически копировать заметки. Онлайн Все в. Это само по себе раздел будет онлайн. Все мой исходный код, что Я бегу будет онлайн. Да. Ты все еще есть вопросы? АУДИТОРИЯ: Что модуло? ANDI Пэн: ОК. Так модулю является оператором, который собирается довольно важно PSET ваши ребята игровая Вот. Таким образом, путь, который операторы в С и в программировании работы является то, что у вас есть то, что называется символ разделения и символом модуль, который так же, как знак процента. Таким образом, в C, когда вы делаете целое разделить на целое число с косой черты, С имеет тенденцию требуется вырезать от всех десятичных знаков, потому что целое хочет преобразовать в целое число. Это не захочет быть двойной с кучей знаков после запятой все после него. Так что, если я 3 разделенный на 2, это будет отрезать 0,5 и просто дать вам 1. Так вот что-то, чтобы быть очень осторожны, когда вы делать какой-либо математики в программировании, является то, что число вы получите может быть число что вы думаете, поэтому округление в вашем Последнее PSET так важно. Модулю дает остаток. Так, например, если бы я сделал 3 модулю 2-- так 3 знак процента 2-- это даст вам оставшуюся часть этого. Так 3 делится на 2 1,5. Это 1 остаток 1. Это даст вам 1, который является остатком этого. Так что, когда вы, ребята, движется по таблице ASCII, по модулю будет в конечном итоге то, что очень важно, и мы обсудим, что позже. ХОРОШО. Так что-то, что является довольно, довольно новый и довольно уникальный что мы обсуждали на этой неделе концепция о том, что массив является. Так массив первым тип структуры данных что мы собираемся столкнуться в этом классе. Все структуры данных является своего рода произвольным, буквально вещи, как структуры что мы, как программисты создали, что мы вложили в нашем коде, что может содержать другие куски кода. Так что в этом смысле, array-- думаю о нем, как картотеке, где, если вы открыть отличается полки вашего картотеке, Вы можете получить доступ разные вещи. В памяти массив просто делает то же самое на вашем компьютере. Вы можете иметь различное blocks-- мы называть их indices-- массива. Это просто, как блок, полка памяти что мы создали в вашей компьютер, вы можете ввести некоторые вещи в разных пространствах. Так с массивом, вы всегда должны specify-- Вы должны указать объявлении Массив в следующем формате. Вы собираетесь сначала указать тип данных что вы хотите создать массива. Если я хочу массив целых чисел, Я собираюсь поставить Int прямо там. Если я хочу массив строк, Я собираюсь поставить струны там, имя вашего массива, а затем Вы будете иметь квадратные скобки. А внутри квадратных скобок, вы будет иметь размер вашего массива. Что-то, что действительно важно для имейте в виду, когда создания массивов что, как только вы создаете Массив, что размер не может измениться. Так что, если вы знаете, что сейчас у вас есть массив размером 10, Вы знаете, что я буду иметь 10 ячеек в пределах или 10 показателей в пределах этого массива, и это никогда не собирается расширить или уменьшить независимо от того, что, и что есть В настоящее время всего в 10 кварталах пространства выделено в вашей памяти, которая может хранить до 10 вещей, того, что вы вложили. Таким образом, в этом случае, тип данных массива, структура данных, которая является массивом очень отличается от некоторых других мы покрывать позже в этом курсе. Да. Например, если вы хотите, чтобы создать массив размером 3, содержащиеся переменные integer-- ой, извините, из temperature-- и температура, из Конечно, это целое число. Таким образом, мы создали бы Int, которая является Тип данных, что мы хотим сохранить. Мы собираемся называть это температур ради номенклатуры названий то, что мы все поняли. И мы собираемся, чтобы иметь квадратные скобки. И мы хотим, три номера. Итак, мы собираемся поставить три внутри него. Что-то, что действительно Важно иметь в виду, является то, что массивы равны нулю индексируются. Все это означает, что вы начать с индексом 0, и вы подбежали через размер массива минус 1. Так, например, здесь, мы есть массив размером 3. Это собирается быть в состоянии провести три значения. Но цифры, которые themselves-- Количество массив, что индекс, массив, являются от 0 до 2. Так ребята, действительно, на самом деле осторожны при Вы собираетесь через ваши проблемы, установленным и создания каких-либо массива, потому что много времени это действительно, очень легко забыть, что. Я на самом деле не имеют индекс из 3, что я в настоящее время только имеют индекс 2. И если вы попытаетесь доступ к третьему индекс, это будет то, что называется нуль-терминатор. Это не собирается на самом деле существует в массиве. И компьютер не понравится, что. Так что будьте осторожны, когда вы обращаетесь вещи только чтобы убедиться, что вы помните что массивы равны нулю, индексированные. ХОРОШО. Таким образом, первый пример является лишь один из способов создания массива. Второй пример у меня есть Ниже только отдельный путь создания что то же самое данные Структура, что мы только что введенный. Таким образом, вместо физически работает через и положить в температуре от 0 равна бы то ни было, температура 1 равна угодно, температуры 2 равных все, я мог на самом деле просто непосредственно создавать все это в одной строке в квадратных скобках температуры равна. И заметьте, в этом случае, вам не нужно чтобы указать, как велик ваш массив, потому что компьютер собирается пройти и посмотреть, что там три элемента в этих фигурных скобках. И это будет знать, ОК, Мне нужен массив размером 3. Вы не будете нуждаться, чтобы вход это следующим образом. А также, да, именно так. Кто-нибудь есть вопросы о том, как мы делаем массивы или как структура из массива работает? Да. АУДИТОРИЯ: [неразборчиво]? ANDI Пэн: Да, именно так. Так что, если вы были объявить и инициализировать массив следующий метод, который является вторым способом, Вы можете просто оставить их. И компьютер автоматически знает, что это нужно посчитать, сколько элементов которые в те фигурные скобки, разделенные запятыми. Так вот они видят 65, 87, 30. Таким образом, компьютер знает, о, есть три числа. Я знаю, чтобы создать имя массива Температура с тремя элементами в нем. Хороший вопрос. Да. АУДИТОРИЯ: Разве это не возможно, чтобы создать массив с различными типами данных которые могут быть в него вошли? Например, с целыми числами [неразборчиво]? ANDI Пэн: Для целей этого класса, нет, прямо сейчас. При создании данных структурировать как массив, вы говорите компьютер, эй, ты мне нужен выделить столько память в моем жестком диске, с каждой ячейки быть Определенное количество битов. Помните, что мы узнали в неделю нулю, что различные данные типы имеют разные размеры? Так, например, строки это разное количество пространства, чем гольца, который это другой объем пространства от целого числа. И так, если вы не укажете, и вы смешивать и сочетать, какие виды переменных у вас есть компьютер-х будет очень смущен. И это не будет знать, сколько памяти, чтобы дать вам. Таким образом, для целей права Теперь, компьютеры могут только признать один тип массива. Хороший вопрос. ХОРОШО. Так естественно, Второй вопрос у нас есть , ну, теперь, когда мы создали Массив и мы поставить все эти вещи в массиве, как мы будет в состоянии получить доступ к его? Таким образом, типичная структура, что мы всегда доступ к массиву наш прекрасный цикл. Я обещаю вам, ребята, что мы будем видя много этого человека здесь. По сути, в любое время вы хотите для ввода значения в массив или вы хотите, чтобы доступ к ним, то Лучший способ сделать это для цикла, потому что в цикле, вы знаю, сколько раз вы собирается хотите запустить через массив, потому что у вас есть остановки издание, не так ли? И каждый раз, когда вы запустите через, вы можете получить доступ другой элемент массива. А также, это причина, почему, как правило, мы начинаем для петель на значение 0, потому что, когда вы получаете доступ массивы, Вы можете получить доступ к нулевой индекс. И так параллели очень красиво. Вы, ребята, возможно, хотели писать для INT я равна 1. Я меньше или равно 3. Но это не будет работать совсем как Ну вот, потому что вы только есть элементы 0, 1, и 2. И поэтому, если вы были, чтобы начать ваш I в элементе 1, 2 и 3, Вы собираетесь в конечном итоге работает из пределов вашего массива, и плохие вещи будут происходить. Поэтому я надеюсь, что вы, ребята увидеть Segue почему в предыдущих классах мы учили вас, ребята, как запустить и отформатировать цикл так, что мы были. Это потому, что, теперь мы перешли в массивы, Вы можете видеть, почему придает 0 Сама очень красиво доступа. Таким образом, как мы делаем это that-- Я просто печатая его здесь ради печатать его. Но у меня есть заполнителя, запятую. И фактическая Доступ часть происходит. Название массива назвали температура. Так что это температура и я-й элемент массива. Так как цикл проходит через, он собирается начать с 0. Это происходит, чтобы распечатать 0-й индекс массива. Тогда это будет печатать из первого элемента. Тогда это будет печатать из второго. А потом мы собираемся сломать. Это все ясно, на как это происходит? Отлично. Все в порядке. Так вот у нас есть способ говорит, что если мы не хотим, на жесткий-код in-- меня как программиста. Я не хочу, чтобы на самом деле физически положить в каждую отдельный элемент этого массива. Если бы я хотел, чтобы вместо есть пользовательский ввод значения, что лучший способ сделать это? Ну, вот я создал это прекрасный функция, в котором я могу объявить массив. Так INT scores-- давайте просто сказать, что мы хотим сделать массив, который провел оценки всех 18 отсюда в этом разделе студентов. Я думаю, что мы получили немного более 18 детей сегодня. Но ради полученными в Примере, в давайте предположим, у нас было 18 лет. Я бы создать десятки имя массива с Тип Внутренние, потому оценки, конечно, являются числа. И я собираюсь иметь 18 в квадратных скобках, потому что это, сколько студентов я хочу, чтобы иметь возможность хранить множество. И то, как я заполнить массив, что я запустить его через цикл, из Конечно, с 0 мой 0-я индексом. А потом с 18 Быть моим остановки издание, потому что есть 18 элементов в массиве. А потом я собираюсь сделать Printf, введите забил student-- болтовня болтовня. Может кто-нибудь сказать мне, почему здесь я печать I плюс 1 и нет? Это своего рода хитрость Вопрос, на самом деле не. Это на самом деле не физически влияет на ход кода. Да. АУДИТОРИЯ: [неразборчиво] 0? ANDI Пэн: Да, именно так. Это немного неудобно сказать, эй, ты студент 0-я в этом классе. Это немного странно. Так нас, как людей, на самом деле не как думать о том, как компьютеры думать. Так что, хотя в компьютер, это хранение значений в 0-й, когда индекс мы люди, мы действительно не хотел бы сослаться на себя нулю. Поэтому, когда я просто распечатать, что Я собираюсь печатать и добавлять 1 только для ясности. Так что, когда я печатаю, я буду возможность печати студентов с 1 по 18. Это на самом деле не влияют на бег кода в любом случае, то, как я печатаю. Но будьте осторожны, когда вы фактически доступа массива. Когда вы видите результаты я, заметить здесь на самом деле я доступ к 0-й индекс и не 1 плюс 0-- или 1 плюс 1, В этом случае, так индекс что это на самом деле понятно. Это все вроде ОК как это проходит через и с каждым индексом Я положить значение в массив и создание массива с 18 чисел что пользователь будет вводить? ХОРОШО. Круто. ХОРОШО. Теперь мы переходим в то, что это довольно отношение к этой части установленного также. Я знаю, в лекции, David-- извините, у вас вопрос? АУДИТОРИЯ: Можете ли вы увеличить его? ANDI Пэн: Да, поэтому я попытался. Но я не знаю. По какой-то причине, это версия PowerPoint действительно не работает а с дисплеем. Таким образом, мы просто собираемся держать его, как это. Все это будет загружен в Интернете. Извините ребята. Да. ХОРОШО. Таким образом, мы можем также строки. Так что, если вы, ребята, на самом деле notice-- I знаю, Роб подошел это в той лекции что он did-- строка на самом деле просто массив символов, если вы думаете об этом, верно? Строка это имя или предложение или слово, верно? Если бы я был, чтобы создать строку с именем в Andi-- только мое имя, А-Н-Д-я. Вы думаете, что из просто как одной переменной. Но на самом деле, это разбивается в только массив символов. Так он получил персонаж хранимая в значении массива. Он получил характер п хранится в Второй индекс и так далее, и так далее. Так таким образом, мы на самом деле есть такой структуры установить в место для наших струн. Так вот, если бы я, чтобы ввести в Слово "есть" - так строка слово равна получить строку. Если бы я был, чтобы ввести слово "есть", что физически так, что мой компьютер хранит эту строку в моей памяти. И если бы я хотел, чтобы пробежать, что и печать, что out-- так и для I в равна нулю, помните, в лекции, мы то, что покрывается называется StrLen, или длина строки. Потому что я на самом деле не знаете, как большой массив из какой inputting-- пользователя Например, я вводятся слово "есть", и я знаю, это долго трех символов, верно? Так что я мог бы поставить в три там и все будет в порядке. Но если ваш пользовательский ввод чего-то что это разное количество значений, Вы собираетесь не сможет по-настоящему знаю, что когда вы программируете свой код. Таким образом, путь, который мы обрабатываем тестов так это то, что мы что-то называется StrLen, что это просто функция который говорит вам, как долго строка. Так STRLEN слова. Мое слово, это есть. п равна STRLEN в слова. Может кто-нибудь сказать мне, что это значение на самом деле тут? Что н представляющий право Теперь, в этом примере, если бы мне пришлось съесть? АУДИТОРИЯ: 3. ANDI Пэн: 3, точно. Итак, мы имеем для INT я равна нулю, п равен 3, по существу,. И я намерен запустить пока это не меньше, чем 3i ++. И это происходит, по существу, перейти через и делать то же самое. Это происходит, чтобы распечатать каждое значение и даст вам ЕСТЬ. Это просто, обозначающие Другой способ написания. Это будет очень полезно. Да. АУДИТОРИЯ: Что преимущества сдачи п равна STRLEN слово внутри, что для контура [неразборчиво]? ANDI Пэн: Да. Так что, если бы я был, целью которых, например, сказать, если бы я был сделать это, а затем do-- oop--, что в моем коде, было бы на самом деле делать, как то же самое. Однако, способ, которым объяснил Дэвид это во время лекции, если какие-либо из вас, ребята помните, было то, что, поскольку люди, как программисты, Мы действительно стараемся, чтобы Наша программа Код, чтобы наш компьютер имеет работать как можно меньше, так что наш код не очень эффективным. Так что, если я, что там, что будет происходить через мой цикл является то, что я впервые объявить Переменная с именем я будет 0. Я собираюсь проверить, ох, что такое StrLen слова? О, StrLen 3. Так я меньше, чем три? Да это так. Я собираюсь бежать. А потом второй раз назад вокруг цикл, я иду, чтобы увеличить I. я будет один. И я намерен проверить, ох, но то, что StrLen слова? О, это три. И делает это, кажется, вид расточительно, каждый раз, когда вы запускаете через петлю, чтобы проверять функцию, даже несмотря на то STRLEN слова никогда не изменяет? Таким образом, это дополнительное питание для компьютера. Когда вы начинаете говорить о вещах, что миллиарды и миллиарды и миллиарды мест долго, представьте компьютер того, чтобы физически пережить и проверить все, что каждый раз. Именно поэтому, чтобы просто ради эффективности, мы, как правило, только сделать это, потому что таким образом мы только вызова функции один раз в начале, и что каждый раз, когда он проходит через это происходит для хранения значения 3 там, что вы не должны постоянно проверять каждый раз. Да. АУДИТОРИЯ: Извините. Просто [неразборчиво]. Может вы Int N равен StrLen и положить что выше внешней стороны для контура также? ANDI Пэн: Да. Вы можете сделать это, абсолютно. Причина, почему мы должны его в здесь потому что путь для цикла работ является то, что это называется локальная переменная в том смысле, что все вы создание внутри цикл существует только внутри для цикла. Таким образом, переменная я только существует в тех скобках. А вот переменные п также существует только в тех скобках. Так что, если вы были в использовании STRLEN из Слово несколько раз внизу, абсолютно лучший способ сделать это будет объявить его на вершину так что вам не придется сделать это один раз. Да. АУДИТОРИЯ: Почему у вас есть Новая линия после процента видя, если вы хотите, чтобы поставить все буквы рядом с ним разделяют? ANDI Пэн: О, я хотел печатать их все на каждой линии. Это не имеет значения. Да, это форматирование. Это хороший вопрос, хотя. Да, если бы я хотел, чтобы напечатать все только на одной линии, что, Я бы не тире в. ХОРОШО. Все хорошо? ХОРОШО. Круто. Так что я думаю, что я говорил достаточно. Поворот, вы, ребята, чтобы запустить через Код и скажите, что это не так. Где ошибка? Итак, как вы видите, я объявлен Новый массив строкового типа по имени класса. И я вводятся Сэм, Джесс, и Ким в него. И я пытаюсь распечатать все элементы массива. Может кто-нибудь сказать мне, почему это собирается дать мне проблемы? Я дам вам ребята 10 секунд, чтобы думать об этом. ХОРОШО. Да? АУДИТОРИЯ: Является ли левый центральный равным 3 или [неразборчиво]? ANDI Пэн: Право. Так сколько раз это на самом деле собирается запустить через эту петлю? АУДИТОРИЯ: Четыре. ANDI Пэн: Точно. Это будет через четыре раза. Это собирается бежать через на 0, 1, 2 и 3, потому что их элементом является я меньше или равно 3. Это не собирается останавливаться, когда это 2. Это будет держать происходит, пока не достигнет 3. И как мы знаем, есть только три элементы нашего фактического массива. Если мы попытаемся открыть четвертый элемент или индекс 3, Вы собираетесь куда-то ударил в памяти, что не существует. Это называется нуль-терминатор. Ничто не собирается быть там. Ваш компьютер не будет быть очень счастлив с тобой. Да. Кто-нибудь есть вопросы о том, почему, что происходит? Это общая площадь, чтобы избежать. Да. АУДИТОРИЯ: Не первый скользить также строку 2? ANDI PENG: Нет Так по существу, когда Вы делаете массив, что кронштейн правой там, что все number-- это говорю вам как многие элементы у меня есть. Это на самом деле не говорил мне индексы нибудь. Таким образом, в этом случае, я знаю, что я хочу писать трех местах, с трех физических мест для провести все, что я хочу, чтобы держать. Так вот, почему номер три есть. Тем не менее, если бы я хотел на самом деле получить к нему доступ, если я хотел сказать, Printf номер класса кронштейн, затем Вы собираетесь на самом деле положил индекс физического там. Да, хороший вопрос. АУДИТОРИЯ: Так это физическое Индекс должен быть [неразборчиво]? ANDI Пэн: Мне очень жаль. Можете ли вы говорить немного? АУДИТОРИЯ: Так индекс физического [Неразборчиво], каждая из коробки? [Неразборчиво]? ANDI Пэн: Да. Так что я собираюсь вернуться к прямо здесь. Подумайте прямо здесь. У нас есть массив размером 3. Там три места, как и, физические заполнители здесь. Но они назвали 0, 1, 2 и. Так что, если я хотел, чтобы получить к ним доступ, так, что я к ним доступ это Printf всего, что я хотел здесь. Вы должны напечатать из имени ней, Потому что тогда компьютер знает, о, мне нужно посмотреть в этом массиве на 0-й индекс. Да. Но размер этого не меняется. Размер 3, независимо как вы их пометить. ХОРОШО. Все хорошо? АУДИТОРИЯ: Так что каждый раз я [неразборчиво]? ANDI Пэн: ОК. Таким образом, в этом случае, мы на самом деле не попасть в него сейчас в процессе. Но знаю, что string-- как I говорил раньше, строка по существу массив символов. Так что, если я создаю массив строк, я вроде есть массив массив символов, верно? Таким образом, в этом случае, потому что я есть массив строк, если бы вы были на вход действительно длинное слово, которые до сих пор занимает только одно место, потому что это одна струна. Но если вы были думать о герои этого массива, то, что это занимая много более символов, чем любой из других слов находятся. Не очень важно для прямо сейчас. Но это только в целом как это работает. ХОРОШО. Так что это то, что я дам вам сделать много в течение семестра. Мне нужно, чтобы отдохнуть мой голос. Вы, ребята, нужно, чтобы стимулировать себя. Многие из вас, наверное, придется спать прямо сейчас. Я ввода случайных проблем где мы, как класс, или вы с партнером рядом с вами собираемся провести пару минут обсуждения о том, как мы идти о решении или создание программы, такие, как этот. Так что сейчас, мы хотим создать program-- мы собираемся называть его upper.c--, что новообращенные строчная слово к верхней класса string-- верхний регистр, извините. Слово в строках, извините, это синонимы. Я собираюсь их менять означает то же самое. Да. Возьмите пару минут. Это не должны быть написаны на любом языке. Просто в коде или псевдокода логически, как мы бы даже ходить делать такой проблемой. Да. [СТОРОНА РАЗГОВОР] Я также заметил, что вы, ребята can-- Я вроде уже видим программу. Я думаю, мое отсутствие Режим ведущий проблема. Но это хорошо. [СТОРОНА РАЗГОВОР] Да, пожалуйста, ребята. Приходите получить конфету. Приходите получить конфету. АУДИТОРИЯ: Да! [СТОРОНА РАЗГОВОР] ANDI Пэн: Кроме того, да, Я начну бросать конфеты на людей, которые не отвечают на вопросы. Таким образом, вы должны ответить на вопросы всех. Или я полагаю, люди, которые у отвечать на вопросы. Да, наоборот. [СТОРОНА РАЗГОВОР] АУДИТОРИЯ: [неразборчиво] ANDI Пэн: Да. Да. [СТОРОНА РАЗГОВОР] Ладно, ребята. Возьмите, например, еще 10 секунд. [СТОРОНА РАЗГОВОР] Хорошо, парни. Поэтому, прежде чем мы начнем, пытаясь на самом деле физически написать код, хорошая привычка развивать то, что мы хотим, чтобы первого рода причинам логически, как мы сделаем это. Вы хотите, чтобы убедиться, что, перед вами физически начать пытаться кодировать в Марио, что вы делаете Убедитесь, что у вас есть псевдокод. То есть принимая вас через то, что вам нужно, чтобы создать так что, когда вы физически написать программу позже, вы лучше в состоянии поймать ошибки в коде и тому подобное. Итак, мы собираемся, чтобы просто начать по-- на английском языке, в псевдокоде, Кто-нибудь хочет, чтобы дать мне родовое объяснение о том, как мы бы об этом? Да. АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Конечно, не стоит беспокоиться. АУДИТОРИЯ: Можете ли вы попросить его или попросить кто-то получить строку 1-- Да, строку, а потом-- ANDI Пэн: Да, так что это хорошее начало. Я начну набирать, извините, как вы говорите. Так-- АУДИТОРИЯ: --the строчные цифры выше, верно? Или строчные буквы имеют высокие цифры? ANDI Пэн: Точно. АУДИТОРИЯ: Итак, мы вычитаем 32 от того, что [неразборчиво]. ANDI Пэн: Отлично. Так мы вроде есть общий смысл о том, как работать с этой проблемой. Зная, что мы узнали вид физическое так, что строки хранятся в памяти, Что вы уже знаю, что вы собираетесь, вероятно, нужно написать в коде для того, чтобы двигаться по строке? АУДИТОРИЯ: Для цикла. ANDI Пэн: для цикла, точно. Отлично. Так мы вроде есть общий псевдокод записано что вид дает Вы отмечает, как вы будет двигаться о решении проблемы. Теперь у вас есть это, вам может ссылаться на потом когда вы пытаетесь на самом деле писать код. Таким образом, мы можем на самом деле идти здесь. И я получил функцию под названием upper.c-- там is-- только из пустого шаблона Прямо сейчас, что вы, ребята, собираетесь помочь мне выяснить о том, как написать эта линия code-- не строку кода. Это будет несколько строк кода. При запуске какой-либо заготовки PSET, что Первое, что мне нужно помнить, чтобы делать? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Великий Да. Включают. stdio.h. Часто это является одним из Самый простой ошибки люди сделает, когда они писать, что они будут забудьте включать Важно библиотека им нужно. Так что, если это офис часов, и вы, как, Я не знаю, почему мой код не работает. Можете ли вы сказать мне, почему это не работает? Мы собираемся сказать ты #include? Вы должны #include его. ХОРОШО. Итак, мы получили стандарт I / O здесь. Разве что только библиотека мы собираемся здесь нужно? Что еще мы будем делать? Сожалею. Кто-то просто кричите это? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Там вы идете. ХОРОШО. И как я могу идти о запуске какой-либо функции, любой вид основной функции в нашей программе? Int основной. ХОРОШО. Что я могу положить внутри здесь? Что первое, что вы хотите сделать? Если мы хотим, чтобы получить строка от пользователя, что мы будем иметь чтобы сделать на этом первой линии? К сожалению, вы, ребята, просто чувствую, свободно говорить и громко. Просто кричать что угодно. АУДИТОРИЯ: Попросите пользователя? ANDI Пэн: Как мы это делаем? Ask-- я собираюсь ввести "задать пользователю"? АУДИТОРИЯ: Printf. ANDI Пэн: ОК. Printf. Что я хочу, чтобы PRINTF? АУДИТОРИЯ: Тип в чем-то. ANDI Пэн: Как что? Ребята, делать вид, будто я компьютер. Физически скажите мне каждый шаг что мне нужно ввести здесь? Я делаю что-то неправильно? Должен ли я что-то набрали? АУДИТОРИЯ: Вы должны кавычки. ANDI Пэн: Мне нужно кавычки? ХОРОШО. ХОРОШО. АУДИТОРИЯ: А потом новая линия. Точка с запятой. ANDI Пэн: точкой с запятой? ХОРОШО. Хорошо. АУДИТОРИЯ: А может быть, указать что вы хотите, в нижнем регистре? ANDI Пэн: Отлично. Вы, ребята, надо мной смеяться забывая поставить точку с запятой. Я гарантирую вам, где В ходе этого класса, Вы забудете поставить точка с запятой, и это Вам потребуется три часа, чтобы выяснить почему ваш код не работает. Это случилось со всеми нами. Это, вероятно, случится с вами. Получить в хорошую привычку с запятой. ХОРОШО. АУДИТОРИЯ: Вы хотите сделать обратный слеш в? ANDI Пэн: Конечно. Вы хотите, чтобы сделать обратный слеш? АУДИТОРИЯ: Да. ANDI Пэн: Отлично. ХОРОШО. Что мне делать дальше? АУДИТОРИЯ: Получить строку. ANDI Пэн: Получить строку. Так что я типа? Кто-то? АУДИТОРИЯ: String s. ANDI Пэн: Строка с. АУДИТОРИЯ: GetString. ANDI Пэн: Кто-то, Вы можете сказать мне, где эта функция GetString приходят? АУДИТОРИЯ: string.h. ANDI Пэн: string.h? Вы думаете, что это из string.h? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Там вы идете. Это от CS50.h. Если вы всегда путают от того, где Файл библиотеки или файл заголовка, Google буквально string.h, и я скажу вам, какие все функции которые находятся в string.h. ХОРОШО. Так что теперь я создал строку а у меня предложит пользователю для него, Я сохранил его в переменной названные ей, что мне нужно делать сейчас? АУДИТОРИЯ: Проверьте, если он находится в нижнем регистре. ANDI Пэн: К сожалению? АУДИТОРИЯ: Проверьте, если он находится в нижнем регистре. ANDI Пэн: Ладно, давайте сделаем это. Как я это сделал? На самом деле, для целей класса прямо сейчас, мы только собираемся Предположим, что все что мы вход уже в нижнем регистре. Если вы хотите, чтобы проверить, вы бы просто добавьте условную что проверяется, что побежал через каждый элемент массива и проверяется, если это между определенными значениями. Я забыл, что число значений строчные буквы. Вы можете посмотреть его на стол ASCII. Но да, это действительно хорошая точка. Но прямо сейчас, мы просто собираемся Предположим, что все строки ввода мы в нижнем регистре. ХОРОШО. Так как я пошел бы около эта проблема в следующем? АУДИТОРИЯ: Для цикла. ANDI Пэн: Для цикла? ХОРОШО. Скажи мне, что печатать. АУДИТОРИЯ: Для Int я равна 0. ANDI Пэн: ОК. АУДИТОРИЯ: Да, на самом деле, то вам сделать запятую и делать н равна STRLEN. ANDI Пэн: Так важно что я думаю, что она заметила, здесь является то, что мы не должны сказать Int н второй раз мы сделали это. Просто знаю, что в течение цикл, когда вы заявив, вы на самом деле не нужно Int в второй раз, когда вы переменную. Вы можете сказать, н STRLEN. АУДИТОРИЯ: Из с. ANDI Пэн: с. ХОРОШО. АУДИТОРИЯ: Тогда точка с запятой. ANDI Пэн: Конечно. АУДИТОРИЯ: И затем [неразборчиво] п. Тогда я ++. ANDI Пэн: Отлично. Все в порядке. Что мы хотим внутри это цикл теперь? Помните, что если мы собираемся запустить через строка и запустить через массив, мы хотим, чтобы проверить вещи в нем. Что мы собираемся нужно? Это своего рода сложная часть в настоящее время. Любой, есть предположение? ХОРОШО. Итак, сначала, как мы даже получить доступ? Как мы даже первая проверка или доступа к элементу в массиве? Как мы это делаем? Что обозначение мы используем, чтобы сделать это? Что имя этого массива называется? Это называется с, правильно? Помните, любая строка всегда является массивом. Так ей кронштейн я, верно? Потому что это текущее значение или значение индекса, мы проверки. И мы собираемся установить, что равно , целью которых мы хотим строчную значение, верно? Мы хотим, чтобы превратить это lower-- извините, мы хотим заглавными буквами. Мы хотим, чтобы включить нижний регистр значение в верхнем регистре. И так like-- я извиняюсь, как вас зовут? АУДИТОРИЯ: Хайди. ANDI Пэн: К сожалению? АУДИТОРИЯ: Хайди. ANDI Пэн: Хайди. Как сказал Хайди Первоначально, мы, вероятно, понадобится the-- мы вероятно, придется вычесть 32 из любого charc, что, верно? Потому что на ASCII стол, разница между строчной буквы и прописная буква 32. Поэтому, когда мы делаем это, мы, вероятно, захочет, чтобы вычесть 32, верно? Так что мы собираемся делать S I. Все ли понимают, почему я это сделал? Потому что сейчас, в нашем массиве, мы проверки 0-й индекс, верно? А в 0-й индекс Строка, это первый символ. И, что персонаж, которого мы собираемся чтобы предположить, что это в нижнем регистре. Если мы хотим, чтобы сделать его в верхнем регистре, мы должны вычесть 32 из его стоимости, потому что в нашей ASCII стол, вот как мы получим его на следующий соответствующей Значение, которое делает его в верхнем регистре. Все понимают, что ли? Да. АУДИТОРИЯ: Могли бы вы также у нижний регистр в minus-- ANDI Пэн: Да, так вот на самом деле очень хорошо. Я собираюсь вернуться к тому, что Вопрос после того как мы это сделать. Да. И потом, если я хочу видеть, что происходит, Я, вероятно, будет хотите напечатать, верно? Кто-то сказать мне, что Я хочу напечатать здесь. АУДИТОРИЯ: Printf процентов С обратной косой [неразборчиво]. Это значение [неразборчиво] S I. ANDI Пэн: я ей, извините? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: я не знаю. Что вы думаете? АУДИТОРИЯ: Ну, я wouldn't-- Я думаю, я бы не bring-- Я бы оно вне внутри, потому что [неразборчиво]. ANDI Пэн: О, вы бы сделали это? АУДИТОРИЯ: Да. ANDI Пэн: Давайте оставим это так, как она есть, и я объясню, почему позже. Помните, даже если вы есть держатель место, Вы хотите, чтобы положить скобки вокруг него. Все в порядке. Таким образом, это должно быть твердое функцию здесь. Давайте запустить его и посмотреть, если он компилирует. Сделайте верхний. Ой-ой. Это не выглядит слишком хорошо. Почему это происходит? Как и в любой ошибки, вы хотите пойти назад и начать с первого, потому что обычно вызывает одну ошибку много других ошибок после него. Здесь мы видим, upper.c: 18: 25, что говорит мне в этой программе имени upper.c, в строке 18, ошибка неявно объявления библиотека функций STRLEN с типом unassigned-- бла, я не знаю, что происходит после этого. Все это говорит мне прямо сейчас что что-то происходит на STRLEN. И это путать компьютер, потому что это как, я не знаю, что это StrLen? Что, что, вероятно сказать, что вы не хватает? АУДИТОРИЯ: Вы пропустили [неразборчиво]. ANDI Пэн: Вы правы. В точку. Так что это, где это Важно, чтобы убедиться, что каждая функция вы используете в вашей код, имеющий правильный заголовок файл для библиотеки, или же Вы собираетесь получить много ошибок и ваш код не будет знать, что происходит. Итак, мы собираемся включить string.h здесь. Теперь, когда мы пытаемся составить верхней. Компиляция правильно. Давайте запустить эту программу. Так что-то типа в нижнем регистре. Что вы, ребята, хотите, чтобы ввести? Выкрикните что-то. Ладно, Чарли просто вошел. Мы введите имя Чарли в. Чарли в нижнем регистре. И, надеюсь, мы надеемся, это собирается кричать и выплюнул Чарли в верхнем регистре. Ура! Все ли понимают, как Я пошел о решении, что? Таким образом, что я могу манипулировать с помощью целых чисел решить то, что Я хочу сделать в строках, потому что персонажи и целые можете ссылаться таким же образом, потому что отображения ASCII. Таким образом, чтобы вернуться к точке, если я хотел поставить здесь вместо 32 прописные минус нижний регистр справедливый, как что, что будет работать одинаково хорошо, потому что это просто только Разница между этими двумя значениями. Если я хочу, чтобы сделать эту again-- Charly. О нет. Я думаю, что мы пошли не в ту сторону, да? АУДИТОРИЯ: [неразборчиво] нижний регистр а. ANDI Пэн: Там вы идете. Ага. И из плюет Чарли. Так что будьте осторожны, когда Вы вычитания значения помнить, какой из больше, чем другая. Например, здесь я забыл что в нижнем регистре а является на самом деле больше, чем в верхнем регистре A. Поэтому, когда я пытался вычитать их в другую сторону вокруг, я получил отрицательный 32. И мой компьютер, как, Я не знаю, что это такое. Это лишь некоторые вероятность случайного Значение, которое не очень хорошо. И поэтому убедитесь, что вы вычитания в правильной длины найти символ, который вы хотите. ХОРОШО. Кто путать, как мы ли пошел о написании этой функции? ХОРОШО. Так на самом деле, функция уже существует в библиотеке называется ctype.h. Называется ctype.h библиотеки. Эта функция на самом деле уже написана для вас. Это называется в верхней. И так для целей это PSET, вы собираетесь чтобы найти, что вы действительно хотите использовать много функций, содержащиеся в библиотеке CTYPE. Для верхней, снизить, сверху, является lower-- те все функции что вы сможете использовать очень, очень быстро в своем коде, что делает именно, что это делает. Мы написали, как преобразовать строку в верхний регистр. Но это на самом деле код что кто-то написал и что вы можете получить доступ к с помощью другой функции. Да? АУДИТОРИЯ: Таким образом, вы просто скопировать годов там и сделать это для каждого письма? ANDI Пэн: Да, потому что я не заботиться о значениях а. Я просто все равно, что разница между ними 32, верно? Разница между строчными б и в верхнем регистре B также 32. И разница между C а верхний С всегда 32. Мне просто нужно заботиться о Разница между этими двумя, потому что все буквы по той же схеме, верно? Если у меня есть разница между одним из них, Я знаю, что разница между всеми из них. Хороший вопрос. Да. Все хорошо? ХОРОШО. ООП. ХОРОШО. Так еще одно понятие, что это будет очень полезно, как вы продолжать развивать код эта идея создания функции или абстракцию. Так что сейчас, мы все приняли алгебру. В алгебре, вас учат, что есть это замечательная вещь называется функцией машина, где, если вы вход один вид числа, она проходит через этого замечательного функции и вне хлопает другой выход, верно? В коде, то же самое происходит в какой-либо функции. Так что я мог физически написать в моем теле моего кода главная утверждение, что на самом деле все тело кода делает. Но за пределами этого, я могу также написать множество различных функций что делать много разных вещей. Например, мы уже начали использовать некоторые из них. Printf--, что является Функция что кто-то уже написано, что мы можем назвать в нашем коде. Для upper-- в этом случае, upper-- другая функция мы написали, что мы можно позвонить в наш код. И поэтому я думаю, почему у нас даже есть функции? Почему бы нам просто не хлопнуть его все в той же строке кода? Это делает его легким для всех. Ну, что обоснование это, в первую очередь, организации. Это действительно раздражает собирается через чью-то код и одна функция, как Printf. Если вы, ребята, на самом деле знал, что Функция Printf повлекшее написать, это, вроде бы, 1000 строк кода. Если каждый раз, когда я хотел чтобы PRINTF то, Я должен был написать 1000 строк кода, Это было бы действительно раздражает, чтобы читать, правильно? Вот почему мы только создал этот абстрактная функция что у нас есть кто-то уже еще написал где-то еще. И каждый раз, когда мы должны использовать его в наш код, мы просто должны сказать Printf. И это возможность использовать функцию кто-то написал в коде. Это облегчает организационно читать код. Во-вторых, это упрощение. Это упрощает шаги, которые мы принять, чтобы решить нашу проблему. Printf, функции, такие как Printf, функции, такие как в верхней все вещи, которые позволяют нам упростить код вниз так легче. И последнее, что является возможность многократного использования. Так на то, что у нас есть функция называется Printf что мы можем назвать много разных раз и позволяет ему быть многоразового использования. Если бы мне пришлось писать Printf, Я пишу только один раз. Она существует только в этом одном месте. Если бы я хотел, чтобы сделать это снова, я бы должны скопировать и вставить все, что в моей второй строке кода. Вот почему, если мы создадим функцию что существует вне нашего главного, мы можем только призвать это и использовать его, когда мы должны так, что это намного проще, для нас, как программы для записи. Таким образом, путь, который мы бы на самом деле писать функция очень похожа, да? Это своего рода первый случай, в котором мы будем см функцию берут на стиль отличается, чем наш основной Int пустоту. В этом случае, если бы я хотел, чтобы написать функцию с именем д, верно? И здесь значение INT это все рассказывал мне, что я хочу, чтобы это функционировать, чтобы вернуться ко мне? Если я хочу, чтобы куб целое, Я собираюсь хотите ввести. Эти параметры. Я собираюсь вводит значение типа Int. И я собираюсь вернуться другое значение тип Int. И здесь, как вы видите, все, что я делаю является то, что в куб мой вход как мой выхода и возвращения его. Так что все это делает функция является занимает какое-то число. Это умножает его на себе два раза так, чтобы он кубов в действие. А потом он возвращается все, что выход. Таким образом, в этом случае, это две линии код, который мы должны были написать отдельно. Но если мы хотели назвать На этой несколько раз, это намного проще набрать, что один линия прямо здесь, что это в кубе, чем должны пройти несколько раз. Таким образом, способ, что практически любой форматирование для любого вида функции будет существовать, как здесь. Таким образом, мы имеем имя функции. В этом случае, это называется куб. И мы называем это, потому что куб это легко запомнить. Вы можете назвать это квадрат и это на самом деле может быть в кубе. Не имеет значения. Просто имя, что ты присвоения вашу функцию. Это прямо здесь, INT, является тип параметра нужно. Итак, что же эту функцию нужно для того, чтобы работать? Ну, она должна вход. Я назвал его ввода. Вы можете назвать это, что вы хотите. Но мне нужно что-то типа Int. Это происходит на самом деле выполнить все, что внутри здесь, тело функции. И тогда тип возвращаемого прямо здесь, в этом int-- Все это говорит мне, это что эта функция собирается вернуться ко мне в междунар. Таким образом, это займет в INT, и он собирается дать вам обратно в Int. Все понимают ли, как форматирование этого рода работы? Круто. ХОРОШО. Так что не беспокойтесь, если это кажется немного абстрактный прямо сейчас. Это то, что мы будем говорить о. Мы нырять глубже позже в курсе. Таким образом, что какой-либо более высокого уровня абстракция эти вещи работают является то, что, в памяти, в компьютер, все хранится в этом типе стека, я должен сказать. Так там на самом верху. Я не знаю, если вы ребята, можете увидеть, что хорошо. Я постараюсь, чтобы увеличить. Здесь на вершине, мы имеют физический текст что компьютер interpreting-- все нули и единицы, которые существуют в нашем компьютере. А потом мы инициализированное Данные данных и неинициализированных, что мы называем глобальные переменные. Так переменных, которые существуют всех программ и по всей вашей, по сути, код. Не беспокойтесь, если вы, ребята, вид неясно об этом. Это действительно не имеет значения прямо сейчас. И тогда у нас есть то, что называется куча в стеке. Подумайте о стеке буквально так же, как стек вещей, стек отличается вещи толкают сверху друг от друга, что хранить различные Переменные и синтаксис в коде. А потом здесь, в самом низу, у нас есть переменные среды что вы выполняете в просто ваш маленький строки кода. И мы только собираемся, чтобы увеличить В от фактического части стека. Так вот здесь, если бы мы были, чтобы увеличить В только на этой области стека, это то, что он выглядит. И это на самом деле очень важно когда вы, ребята, говорить о функциях, потому что уведомление о том, что памяти компьютера хранит переменные и функции и параметры как ваш функции и ваши основные переменные в разных местах. Так что сейчас, главное, фактическая функция что вы выполнение в коде. Вы его параметры хранятся здесь и ее локальные переменные хранятся здесь. Локальная переменная просто означает любую переменную что существуют только в этой функции. И на нем, у вас есть это отдельная функция называется куб. Вы должны это параметры а также тех местных жителей. И причина вы можете видите здесь то, что происходит, когда куб занимает в Значение из основного функции является то, что на самом деле это копирование что в течение. Так что, если я хотел куба 2 и вернуться 8, что 2 фактически вводится в качестве параметра, и это скопированы, так что у вас есть это существующая в двух разных местах в памяти. И вы должны быть очень осторожны, на запоминание, которые один из тех, вы на самом деле манипулирования. И пример того, что произошло это было бы очень, очень плохо существует прямо здесь. Так прямо здесь, у меня, в теории, Программа прямо здесь, главным функция что я объявив Int х равен 1. Я объявляю еще один INT у равен 2. И тогда я бегу его через эту функцию называется подкачки, куда я предполагаю, что это обмен двух значений. А потом я собираюсь печатать их, верно? Это то, что я хочу, чтобы эта программа делать. Итак, давайте спуститься и посмотреть. Так что, если я на самом деле написать отличается Функция, как вы можете видеть, у нас есть основные функции здесь. И тогда у нас есть наши Вторая функция здесь. Пустота подкачки. Пустота означает лишь то, что это не собирается ничего возвращать. Название Функция называется своп, и это собирается впускных двух переменных, Int А и INT B, с вашей [неразборчиво] функции. Так по существу здесь, мы проходя х и у в эту функцию. И если бы мы создать this-- поэтому мы хотим создать временное значение, верно? Мы собираемся назначить, что а. А потом будет настоящее равной б. И б собирается вернуться где значение температуры было, которая представляет собой, потому что, когда Вы хотите, чтобы обменять вещи, Вы не можете просто нравится поменять их местами. Вы должны держать одного из них здесь, так что он помнит, что это такое, потому что, когда Вы поменять один, вы забыли что это первоначальное значение было, верно? Так в теории, эта программа должно работать, не так ли? Если бы я хотел, чтобы поменять местами два, они должны поменять. Итак, давайте запустить его и посмотреть, работает ли он. Итак, как вы, ребята, можете увидеть, х когда-то был 1 и у 2 был когда-то. И если я распечатать его, х еще 1 и Y 2. Хм, эта программа не кажутся работает так, что я хочу, чтобы работать. Кто-нибудь хочет, чтобы сделать снимок на гадать, почему это происходит? Это имеет отношение к пути что различные вещи хранятся в разных местах в памяти. ХОРОШО. Таким образом, вы, ребята, не надо беспокоиться слишком много об этом прямо сейчас. Но знаю, что куб Часовой переменные были б, потому что здесь, в нашей функции, мы объявили А и В а переменные, которые существуют в кубе, что функция. Но, как вы видите, параметры, которые он принимает в хранились здесь. Но мы не были на самом деле возвращение ничего. Мы не были на самом деле изменения х и у. Мы были только в замене и б. Мы скопировали х и у в то называется и б. Но мы никогда фактически манипулировать х и у самих себя. Вы, ребята, видя как это происходит? Это мы просто скопировали их закончилась, но мы на самом деле не хранится трек, где они были в памяти. И вот теперь компьютер ищет, О, я запустить эту вещь через это прекрасный функция. Но х и у еще х и у. Ничего не случилось им из-за того что этих параметров и локальные переменные хранятся в другой место в памяти. И это выше уровня Концепция, что мы будем начать видеть позже в курсе. Но точно знаю, что это проблема, которая может случиться и что мы будем выяснить способы о том, как иметь дело с этим позже в курсе. ХОРОШО. Все в порядке. Таким образом, последнее понятие мы на самом деле происходит, чтобы покрыть что будет полезно для PSET на этой неделе то, что называют Аргументы командной строки. Так Роб в своей лекции прошли вид кратко, как эти работы. По сути знаю, что когда вы пишете как основной функции, когда мы написал функций до и в прошлом, у нас было Int основной пустоту. И причина у нас было недействительным есть потому, что наши программы не сделал нужно входных значений для запуска, правда? Когда я побежал Марио, мне не нужно на самом деле просто введите то когда я бежал Марио. Я мог бы подсказать пользователю в дальнейшем. Но не всегда будет так. Например, в этом Проблема неделю устанавливает, Вы собираетесь быть предложено, что в Помимо запуска вашей программы, Вы собираетесь хотите, чтобы ввести некоторые вещи в прямо, как вы запустить программу. Таким образом, как мы делаем, что называется аргумент командной строки, что это как аргумент Вы можете ввести непосредственно как вы пытаетесь запустить вашу программу. Таким образом, обозначение для этого, это довольно сложный вид, но это действительно не то, что сложно. Так INT main-- это просто ваш главный функция. В ARGC запятой строка ARGV скобках. Таким образом, все, что говорит, что это INT argc-- все, что говорю вам, является то, что те число Аргументы компьютер должен ожидать. Так одна вещь, которая действительно Важно следить является физическое имя вашей программы считается одним из тех аргументов. Так что, если я хотел, чтобы моя программа запустить один дополнительный плюс командной строки Аргумент, на самом деле я будет иметь два. ARGC на самом деле будет два. И тогда строка ARGV bracket-- все, что делает, это дает мне Массив строк, это собираюсь просто показать и сохранить то, что все эти аргументы командной строки. Так, например, если бы я хотел, чтобы это Программа, ./copy входной_файл выходной_файл, верно? Это просто Типичная команда Linux. Что на самом деле ARGC? Сколько аргументов командной строки есть на самом деле в это? Все это делает, это сделать копию входной_файл имени одного файла и копирует его в другой файл, верно? Вот все это делает. Как вы можете видеть, я делаю это по одной линии фактически не нуждаясь в программу. Что наша ARGC в этом случае? Сколько аргументов у нас? АУДИТОРИЯ: Три? ANDI Пэн: У нас есть три, точно. Так что это очень интуитивно просто думаю, что это просто входной_файл и выходной_файл. Но знаю, что физическое имя из Программа вы работаете рассчитывает как один. Таким образом, в этом случае, на самом деле ARGC три. Как насчет того, что ARGV 0? Помните, что все из Аргументы командной строки были сохранены в массиве строк. Так что, если я пытаюсь получить к нему доступ, то, что будет ARGV кронштейн 0 дать мне? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Точно. Это даст мне точку сократить копию, потому что это 0-я стихия, Первый элемент моего массива. Что о ARGV 1? АУДИТОРИЯ: входной_файл. ANDI Пэн: входной_файл, точно. Что о ARGV 2? АУДИТОРИЯ: OUTFILE. ANDI Пэн: OUTFILE. Это немного сложнее в настоящее время. Что вы, ребята, думаю, ARGV 3 будет давать мне если бы я попытался напечатать, что из? АУДИТОРИЯ: [неразборчиво]? ANDI Пэн: Было ли у вас руки вверх? Да. АУДИТОРИЯ: альтернатива. ANDI Пэн: Точно. Так что помните, в лекции, что мы есть в конце гоночного то называется нуль-терминатор? Мы войдем в это также далее в классе. Но знаю, что в обозначениях, способ компьютер знает, что это конец массива является то, что этим ставит то, что называется нулевым терминатор или тире равна нулю. Так что, если вы пытаетесь получить доступ ARGV 3, Вы собираетесь ударить эту черту 0. Это даже больше вопрос с подвохом. Что о ARGV 4? Так это прошлое нуль терминатор, мимо пределах массиве. Что вы думаете, что произойдет, когда мы пытаемся сделать? АУДИТОРИЯ: [неразборчиво]? ANDI Пэн: К сожалению? Скажите, что немного громче? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Да. Это имя из площадь вы скорее всего, получите. Но знаю, что ARGV 4-- что позволяет получить доступ к места вашего компьютера памяти, что вы на самом деле не должно быть трогательным, потому что Прямо сейчас вы знаете, что это ARGV. Вы знаете, что это массив размера 3 что имеет точка копирования, INFILE и выходной_файл. Если вы попытаетесь пойти так далеко за пределы, что что вы мимо пустого терминатора, Ваш компьютер имеет, вероятно, хранить что-то в ARGV 4. И вы действительно не должны быть разрешен доступ в ARGV 4, потому что у вас есть файл шкаф, и вы только разрешен доступ к этим трем полок. Но если вы пытаетесь достичь далеко за пределы шельф, где вы имеете право, Вы собираетесь начать возиться с другие вещи в памяти компьютера. Это будет очень, очень плохо. Так просто знаю, что. Будьте очень осторожны, что вы не просто случайно начать доступ к элементам массива, что не в том, что вы хотите создать. Ага. ХОРОШО. Так что мы собираемся сделать еще один Терминал пример здесь. ХОРОШО. Так Роб быстро в лекции другой день пошел через этот пример, где была INT INT основной ARGC строка ARGV кронштейны, которые говорит мне, что я будет иметь аргументы командной строки. Он, если ARGC равна равен 2-- помните, равна равно означает сравнение. Если он равен 2, то я в печать привет, что было первой элемент массива является. Иначе печать, привет мир. Что это собирается произошло в основном? Может кто-то просто объяснить Английский что эта программа делает? Да. АУДИТОРИЯ: Если кто-то набрал в команду и сказал, что их имя и фамилия, это будет не просто печатать Первый и сказать, привет, все ваше имя есть. ANDI Пэн: Хорошо, давайте его запуска. Так, например, если бы я, чтобы сделать этот файл сделать привет привет, целью которых , целью которых то, что ты хочешь, чтобы ввести? АУДИТОРИЯ: имя и фамилия. ANDI Пэн: имя и фамилия? Пространства? АУДИТОРИЯ: Да. ANDI Пэн: Может кто-нибудь сказать мне прямо сейчас, что ARGC? Просто тут? Ой, извини. Позвольте мне вернуться. Сколько аргументов командной строки are-- вы, ребята, не могу видеть. Но я постараюсь, чтобы увеличить. Я пытаюсь. Да, есть три, не так ли? Это точка слэш привет, это Энди, и это Пэн. Так что вы, ребята, думаю, что это Программа будет распечатки? Ой. Ой, извини. Неправильное имя. Это распечатки, привет мир. Кто-нибудь хочет объяснить почему это происходит? Да? АУДИТОРИЯ: [неразборчиво]. ANDI Пэн: Точно. Так вот, являются условными есть, если ARGC равна равна 2. Таким образом, только в том случае, существует два аргумента командной строки. Тогда я иду к печати, привет, что это такое. А еще, я собираюсь напечатать только, привет мир. Так же кто-то хочет чтобы дать мне пример о том, как я мог бы на самом деле сделать это, чтобы напечатать значение ARGV 1? Что бы я, чтобы вход здесь? Только одна вещь, верно? Поскольку точка привет к уже считается как первый аргумент. У меня есть еще один только. Так точка привет, если я просто сделать Энди. Здравствуйте, Энди. Понимает ли все почему это происходит? Да. АУДИТОРИЯ: Так пространство между Команда line-- это [неразборчиво]? ANDI PENG: Нет Так пространстве в командной строке Аргумент, х, сказать компьютер что это начало новой строки. Так строка ARGV here-- это магазины все ваши аргументы линии команд в строках. И поэтому пространство в командной строке argument-- все, что делает вам сказать, это в конце одной строки и это время, чтобы перейти к другой. Да. Это очень важно для Ваш PSET, потому что вы будет испытывать их. Так кто-нибудь есть какие-либо вопросы по этому поводу? Ладно, круто. Да? АУДИТОРИЯ: Так что причина вам будет поместить целое аргумент известково вместо из [неразборчиво] будет, когда вы хотите ввести дополнительную информацию [Неразборчиво]? ANDI Пэн: Да, именно так. Некоторые программы требуют для ввода аргумента командной строки что она проходит в и который использует это. Да. АУДИТОРИЯ: Так что, если [неразборчиво]? ANDI Пэн: Ну, то, что у меня есть чтобы затем изменить в моей программе? АУДИТОРИЯ: Просто 3. ANDI Пэн: Почему это происходит, как вы думаете? АУДИТОРИЯ: Потому что [неразборчиво]. АУДИТОРИЯ: Вы должны были бы изменить его на 2 [неразборчиво]. АУДИТОРИЯ: 1 и 2. ANDI Пэн: 1 и 2, точно. Таким образом, в этом случае, вы, вероятно, хотят иметь двух Printf statements-- который печатается ARGV 1 и тот, который печатается ARGV 2. Вот. Я может реально сделать что реальный быстрый. Там вы идете. Ой. Не совсем то, что вы хотели. Но если вы, ребята, возиться с форматирование, он выйдет. Да. Круто. Я знаю, мы немного короткий по времени. Но я просто хочу, чтобы быстро провести пару минут, проходящие через helpful-- АУДИТОРИЯ: У вас есть две минуты. ANDI Пэн: у меня есть две минуты? Спасибо. Некоторые быстрые подсказки Pset. Таким образом, для этой PSET, я настоятельно рекомендую, как я уже сказал, все читать спецификации. Вы будете писать три programs-- один называется initials.c, одна называется caesar.c, одна называется vigenere.c. Некоторые важные советы, которые вы, ребята, действительно хотят сохранить в mind-- так есть эта функция называется atoi--, как я люблю говорить, труа. Непонятно, если это на самом деле, как вы это говорите. Но все, что он делает, это ввод. Он преобразует строку в Int. Таким образом, представляет ASCII для целого я. Это просто преобразование ASCII значения в целое значения. Так что помните ARGV, массив, который хранит все ваши команды выстраиваются arguments-- он хранит их всех, как струны. И поэтому, если вы хотите, чтобы иметь возможность у одного из них стали целое число, Вы будете иметь использовать здесь это значение. Модулю, как мы рассмотрели ранее в классе сегодня, позволяет иметь Остальная часть, что вы есть. Так что, если у нас есть очень, очень большие номера в Цезарь, что, если у нас есть конец из строки Vigenere? Как вы собираетесь быть в состоянии чтобы получить, что обернуть вокруг? Если я ударил г и я хочу это, чтобы вернуться к, как я собираюсь получить что, чтобы обернуть вокруг? Возможно хотите использовать модулю где-то там. Во-вторых, просматривать вокруг Ваша библиотека. ctype.h. Это новая библиотека у нас есть. Вы найдете много очень, очень полезно functions-- ISUPPER, ISLOWER, ToUpper, ToLower, ISALPHA, и так далее. Все функции, которые будут очень полезны когда вы пытаетесь выяснить,, этот персонаж строчной буквой? Как преобразовать это строка заглавной буквы? Все эти вещи будут очень, очень полезно для вашего PSET. ХОРОШО. Часы сегодня вечером 8:00 до 11:00 в ТЭАЛ классе завтра а также в среду и в четверг ночью. Часы работы офиса в обыкновенные. Настоятельно рекомендую вам, ребята все начать прямо сейчас, потому что вы не хотите быть, что Ребенок, который в четверг вечером есть проблемы представив свой PSET и как, я не знаю, что делать. Я начал, я закончил, я представил. Попробуйте дать себе некоторые возможности, потому что в всегда происходят проблемы кода. Вы хотите, чтобы убедиться, что вы даете себе много времени, чтобы быть в состоянии для завершения psets. Круто. Я повешу здесь. АУДИТОРИЯ: Это онлайн уже? ANDI Пэн: Я не знаю, если это уже в Интернете, но он будет. Я повешу здесь, если кто- уже какие-либо вопросы. Спасибо, что пришли.