Роб Боуден: Это более комфортно раздел, но это не значит, что если вас чувствовать, что вы не удобнее Вы не узнаете вещи здесь. Так что давайте начнем. Есть ли у вас слайды ладится в вещи. Могу ли я собирался просто взять его прямо сейчас? Переключение ноутбуки. Элисон: Вы не хотите, чтобы представьтесь, Роб? Роб Боуден: О, я Роба. Это мой пятый год TF-ING CS50. Габриэль: Я Гавриил. Я руководитель TF из CS50. Я был TF в прошлом году и в этом году. Элисон: А я Элисон, и это мой второй год TF-ING CS50. Роб Боуден: Ладно, так эта вещь слева, надеюсь, вы видели это раньше. Если не из-за вас скачать его для себя, Вы бы видели его в лекции. Так что это CS50 прибор, и он сделал несколько из описания него в лекции. Но в основном это просто вы работают под управлением операционной Система в вашей операционной Система так что мы можем дать вам программы без необходимости беспокоиться, о это будет работать как на Windows, и Mac, или если некоторые из вас уже с использованием Linux, Linux. Это просто, как предполагается, быть общей игры поле, так что каждый имеет точно такой же среды. Так что если у вас есть не скачал это уже, Вы должны загрузить его, потому что ты понадобится его для множества задач. И это два гигабайта скачать, так это может занять некоторое время. На Гарварде он будет идти быстро. Так CS50 прибор. Теперь в начале, мы собираемся говорить о просто набор командной строки материал, и так с тем, что я имею в виду работы в этой маленькой окружающей среды в течение здесь. И заметьте, все вещи Я говорю здесь и сейчас будут работать, если вы внутри Терминал внутри машины, или если вы внутри окно Gedit терминал внутри прибора. Так эти среды являются идентичными. Но я собираюсь пойти в третий маршрут. И обратите внимание, здесь это немного IP адрес прямо здесь. Таким образом, вы не должны сделать это, но это IP- address-- теперь, если i-- исключением он заблокирован с помощью этой вещи. ОК, так что IP-адрес более в терминале here-- так этот терминал за вот терминал в моей Mac. Так что это ни в коей мере в настоящее время связан с прибором на всех. И если вы на Windows, то вы понадобится что-нибудь скачать специально для этого, в частности, люди, как правило использовать шпатлевки, Р-U-Т-Т-Y. Так что я собираюсь сделать, это ввести SSH, а затем, что IP-адрес. Ну, jharvard в то IP-адрес. Так 192.168.24.220. Это страшно сообщение, игнорировать его. Просто введите да. Это CS50 в коробке. Он просит пароль. И так во многих условиях, где он просит ввести пароль, [неразборчиво]. У нас есть много вопросов, где он говорит, что на самом деле не набрав. Она не показывает вам характеры пароль при вводе, во всяком случае, в операционной системе, потому что, если кто-то ищет через плечо и они видят звезды звезды звезда звезда, то они знаю, что ваш пароль это четыре символа. Таким образом, идея это попросит Вы для вашего пароля, типа. Это не собирается показывать Вы герои, но это на самом деле принять их. В этом случае, в любое время вам когда-нибудь увидеть приглашение ввести пароль дело с устройством, Пароль будет малиновый. Так малиновый. И вот внутри этого Окно, которое находится в моем Mac, Я в основном имеющие точно такой же вид как внутри терминала в приборе. Таким образом, вы не должны делать это. Вы можете делать все, что хочу внутри машины. Я почти никогда не делают что-нибудь в приборе. Я почти всегда минимизировать, что и сейчас Я работаю SSH в прибор. Во всяком случае, если вы есть медленный компьютер, Вы можете заметить разницу. Я делаю это, потому что я предпочитаю это окно терминала. Он имеет некоторые функции, такие как Я могу разделить окно, и теперь я могу SSH в через прибор. Я получил два SSH происходит сразу. Если ваш компьютер является особенно медленным и вы работаете в приборе, и вы понимаете, что это действительно тормозит, все. Как правило, гораздо быстрее, если вы SSH-е изд в. Но в противном случае вы можете работать в любом случае. АУДИТОРИЯ: Что это значит SSH? Роб Боуден: Безопасные снаряды, что-то подобное? Что SSH в виду? Габриэль: Безопасная оболочка. Элисон: Это просто безопасная оболочка. Роб Боуден: Безопасная оболочка. Это протокол, который you-- это безопасный протокол, так шифруется. Люди не могут шпионить сети и посмотрим, что вы говорите, к чему Вы SSH-е изд к. И в самом деле, в старину дни CS50, поэтому в 2009 когда я был на первом курсе, так что Вы работали на CS50 проблемных наборов, было у вас SSH-е изд, чтобы какой-то сервер что мы дали вам доступ к, и вы работали там. Таким образом, вы не должны это Графический прибор. Вы не должны Gedit. У вас не было все эти вещи, которые Вы могли визуально точку и нажмите. Вы должны были работать в этом интерфейсе. Я предпочитаю работать в этом интерфейсе. Так часть того, что мы собираемся чтобы идти в течение прямо сейчас куча Команды, которые вы должны начать ознакомление с как Вы продвигаетесь в курсе. И, честно говоря, как только вы привыкнуть к ним, он так намного быстрее, чтобы работать в этой среде чем это работать с искателем, перетаскивания и нажав вещи. Так вот мы здесь. Теперь я просто SSH-е изд в, и так по умолчанию location-- вас видел некоторые из этих команд в классе, но мы пойдем по всем из них снова. По умолчанию мы в это домашний каталог. И каталог, просто другое слово для папки. Таким образом, мы находимся в домашнем каталоге. Введите Ls, список файлов В этом каталоге. Я, видимо, создали blah.c ранее. Поэтому у нас есть каталог рабочего стола. Вы заметите подсветку синтаксиса? Светло-голубой подсветки указывает каталог и прямо белый указывает только простой файл. Так что собираемся быть некоторые другие цвета, которые вы видите. Исполняемый файл, вероятно, будет чтобы быть зеленым или что-то подобное. Итак, мы находимся в домашнем каталоге. Теперь, если я хочу пойти в другое каталог, CD является команда, которую я хочу. Так изменить каталог, а затем вы передать имя каталога что вы хотите пойти в. Так вот у нас есть четыре варианта. Я могу пойти в закачек, и теперь мы видим, здесь он обновил этот скобках сказать, что я в ~ / загрузки. Так что же такое Тильда? Это сокращение для ваш домашний каталог. Таким образом, практически все, что вы делаете собирается быть по отношению к вашей домашней директории, и PWD просто команда Я использую один раз в год, что просто печатает текущий каталог. Итак, вы видите здесь, что ~ / Загрузок действительно решает к / дома / jharvard / загрузки. Так / дома / jharvard мой домашний каталог. Таким образом, мы можем кд точка точка. Теперь точка точка находится специальный каталог, который всегда относится к одной директории вверх. Так что, если я нахожусь в ~ / загрузки, затем компакт точки точка собирается довести меня до тильды. Что мы думаем кд точка точка собирается принести мне теперь? Это будет приносить мне / дома. Так Тильда по рабочей директории печати, Я в ныне / дома / jharvard. один каталог вверх от этого, Теперь он говорит здесь / домой. Теперь кд точка точка. Теперь я нахожусь в корневом каталоге, и вы не можете сделать это снова. Вы просто остаться в Корневой каталог навсегда. Корневой каталог имеет целый букет вещи, которые, если вы хотите взглянуть на, ты можешь. Например, если я иду в бункер, который содержит все эти двоичные файлы, такие как Л.С., и кд, и все эти вещи. Таким образом, эти команды должны существует где-то в системе, и это в каталоге / бен. Но почти все, что вы делаете это будет от вашей домашней директории. И кд без каких-либо аргументов бы то ни было, Вы могли бы сказать, кд ~, не нужно. кд собирается принести вам вернуться к вашей домашней директории. Один последний. кд - собирается вернуть вас к последний каталог, что вы были в. Так что я просто cd'd два раза подряд, так что моя Последний каталог был домашний каталог. Если я иду в слэш мусорное ведро, и теперь давайте и в пользователем. Доля пользователей. Пойдем в акцию пользователя. Теперь я теперь в акцию пользователя. кд - еще в мусорное ведро. Таким образом, это становится особенно полезным когда вы have-- и он будет переключаться. Так доля пользователей, задней бен, доля мусорное ведро. Таким образом, это становится полезным. Вы можете найти себе того, многие, много, много вложенных каталогов. И вы хотите, чтобы что-то сделать реальный быстрый в верхней директории. Вы идете в этот каталог, сделать изменения и все в таком духе, что, и теперь вы хотите пойти туда, где вы были. кд -. Я всегда расстроен когда я, оказывается, идете для этого каталога I хотел сделать работу в. Я всегда расстраиваются, когда я сделал она в два этапа, а не один шаг, потому что это означает, что компакт-диск - собирается привести в этой промежуточной месте вместо где я хочу пойти. Итак, мы видим все файлы списков. Мы знаем, как обойти сих пор. Так что теперь давайте поговорим о редактировании файлов. Таким образом, в этом, конечно, вы почти всегда будет использовать Gedit. Если вы хотите, вы можете сделать следующий шаг и начать изучать текст командной строки редактор. Так существуют различные варианты. И те, которые, вероятно, будет отношение к вам, у нас есть Nano, Vim и Emacs. Так Nano является новички командной строки текстовый редактор. Так Nano пойдем на blah.c я создал раньше. Это просто это стандартный файл C. И вы увидите целую кучу вещей происходит в нижней части экрана, и, видимо, blah.c содержит этот код на Си. Таким образом, в данном конкретном редактора, то, что он говорил на bottom-- Теперь этот символ вставки, мы видим, этот ^ G, ^ X, ^ O. Так, что практически во всех Контекст, что вы видите, Вы могли бы видеть, что символ курсора в в других местах в Интернете, на переполнение стека, что-то подобное. Это почти всегда означает контролировать. Таким образом, чтобы выйти я хочу сделать Контроль X. управления X, выходит. И я могу использовать мою стрелку Клавиши для перемещения. Обратите внимание, я не могу указать и нажмите легко. Вы должны использовать ваш стрелку Клавиши для перемещения. Там может быть настройка чтобы кликать. Но давайте сделаем некоторые изменения. Теперь контроль X идти выход. Это скажет Сохранить измененный буфер. Теперь подсказка, у для да, н для нет. Контроль C для отмены. Я просто скажу, да. Имя записи в файл. По умолчанию файл что она уже есть. Нажмите Enter. Хорошо. Теперь я просто редактировать файл, спас его, и он изменился. Так Nano является самым простым текстовый редактор привыкнуть. Альтернативы Вим и Emacs. Те, текстовые редакторы выше уровня что есть очень крутой кривой обучения. Так мое личное предпочтение является Вим. И это имеет большое разнообразие вариантов. И как только вы привыкнете к нему, вы никогда не будете хочу пойти в любой другой текстовый редактор, потому что вы просто есть так много вещей, доступны для вас в них, но это занимает очень долгое время, чтобы учиться. Так, может быть, вы просто хотите, чтобы заставить сами прямо сейчас, чтобы привыкнуть к нему, но я бы сказал, это того стоит. Но это трудно. И тогда Emacs. Я всегда борьба в Emacs, потому что Я знаю, как это сделать абсолютно ничего. Видимо Emacs не по умолчанию установлены на приборе. Мы, вероятно, добавить, что как установок по умолчанию. Как только вы научитесь один из Вим или Emacs, есть нет веских причин для когда-либо узнать с другой стороны, но это совершенно другой стиль. ОК, так что это редактирования текстовых файлов. АУДИТОРИЯ: Если вы застряли в Vim прямо сейчас, как сделать we-- Роб Боуден: Есть несколько режимов в Vim, и есть вся учебники по обучению Vim. Так что, если вам случится быть в режиме вставки в порядке для ввода текста, который вы можете введите что различными способами, но я, как вы получите в режим вставки. В или выйти из какой-то особый Режим, который вы находитесь, просто Побег. И вы просто колотить Побег получить из всех вложенных режимов ваш в. Нормально, сейчас я вернулся в нормальный режим. И так в нормальном режиме, двоеточие. Вы видите это появится в нижней. А потом кв. Так кв уйдет, если вы внесли изменения, которые я-- есть я внес изменения? Я сделал изменения, по-видимому. Так что если вы внесли изменения, это будет говорят, что вы можете поставить восклицательный знак. Я буду называть его взрыва. Таким образом, вы можете наложить запрет на просто бросить, ничего не делая, или толстой кишки WQ будет сохранить и выйти. Так ж вообще писать. Так записать файл. Я могу написать и бросить. Или вы могли бы просто дх шлема, д взрыва просто чтобы выйти туда, независимо о любых изменениях, которые Вы сделали. Ладно, так что теперь давайте go-- мы можем создавать файлы. Начнем удаления файлов. И я просто бросить в одном Быстрый новая команда, сенсорный. Так коснуться Foo. Сенсорный бар. Сенсорный Баз. Если I Ls, теперь мы видим, что существуют эти файлы. Они совершенно пуст. Так сенсорным просто легко способ один, [неразборчиво]. Во-вторых, технически просто состоянии это, он обновляет метки. Таким образом, любой файл, который вы создаете имеет отметка, связанные с ним. Так Баз был создан на 14 сентября в 16:21. Это сейчас 16:22, поэтому, если Я прикасаюсь Баз снова, мы видеть, что Баз был наиболее Недавно изменены в 16:22. Но иначе я почти никогда посмотреть на временные метки на файлы. Так ощупь, здесь я только с помощью это создать несколько быстрых файлы. Ладно, так что теперь гт Команда, что мы заботимся о здесь. И мы можем гт бу. Скажем удалить регулярный пустой файл бу. И мы можем ввести у, и теперь он удаляет. гт Баз. Удалить обычный пустой файл Баз и тип н для нет. Теперь он не удаляется. Так бар и Баз все еще существуют. Foo ушел. Габриэль: Продолжайте говорить. Роб Боуден: Великий. Так назойливого сообщения здесь, удалить регулярный empty-- что ты там делаешь? Удалить обычный пустой файл. Так что, если мы не хотим, чтобы быть обеспокоены этим сообщением, мы можем бросить в этом -f Флаг, и таким образом, это сила. И теперь, если я гт -f, он не собирается говорят вы хотите удалить этот файл. Это будет просто сделать это. И Ls, я не вижу бар там больше. Теперь, когда это возможно, опасно команда. Она, как правило, не так уж плохо. Мы вернемся в секунду, как это может стать действительно опасным. И давайте создадим некоторые временный каталог. MkDir, другая команда. Так MkDir это команда что делает каталог. А теперь Л.С. мы видим этот хороший свет синий подчеркнул временный каталог. Я могу компакт-диск в темп. И я могу MkDir Foo. перейдите в Foo. MkDir бар. перейдите в баре. Итак, мы видим, мы можем легко получить в какой-то довольно глубокой вложенности. Теперь, как я удалить каталог? удалить каталог. Так что, если я просто прямо пытаются гт, как мы это делали с обычного файла, гт бар собирается сказать не могу удалить бар. Это каталог. Там в специальной команды для удалении каталогов, вид. Так удалить каталог бар. Теперь бар ушел. Итак, удалить каталог, я не очень много и не использовать. Причина being-- теперь давайте сделать обычный бар файла здесь. Так удалить каталог бу. удалить каталог. Не удалось удалить Foo. Каталог не пуст. Таким образом, вы не можете использовать удалить директорию в Каталог, есть вещи в нем. Так у вас есть несколько вариантов. Вы можете перейти в этот каталог, удалить все вручную, а затем выйти и RMDIR каталог. Это, безусловно, звучит раздражает. Что делать, если есть тысячи файлов в там? Ну, вы могли бы гт *. Мы будем говорить о * в секунду. Это в основном означает, что все вещи. Но еще лучше, так гт -г. Так гт -r-- в большом количестве контексты, -r означает рекурсивный, который мы будем говорить о том, что рекурсивные средства в несколько недель. Но это в основном означает, траверс полнота этого каталога и удалить все. Так гт -г Foo собирается сказать спуститься в каталоге Foo? Да. Удалить обычный пустой файл Foo / бар? Да. Удалить каталог Foo? Да. Так что теперь Foo и все в пределах она была удалена. Теперь, может получить особенно раздражает when-- давайте прикасаться 1, прикасаться 2, прикоснуться 3. Может есть целая куча файлов. Если бы я хотел, я мог бы создать тысячи файлов в здесь. И гт -г Foo собирается чтобы быть очень раздражает. Да, да, да, да, да, да. С намного больше файлов вы видеть, как много раз Я должен был бы набрать да. Ну, мы только что видели прежде, как мы можем избавиться от необходимости набирать да, -f. Так MkDir Foo кд Foo сенсорным 1 2 3. Итак, гт -rf Foo собирается удаляйте подряд Foo целиком. Нет быстрое. Нет ничего. Foo ушел. Так что я предпочитаю использовать это Команда все время. Тем не менее, это очень опасно команда, потому что, если я делаю что-то вроде это, он не запросит. Это уже не будет. И это происходит довольно часто, и даже в более высокого уровня CS курсов. Иногда мы увидим что-то, где кто- говорит, что я случайно наш гт ВЧ-е изд мой дом каталог и все мои P набора ушел. И это разрушительное, но нет мусорное ведро. не Там нет там ничего чтобы вы могли получить. Это просто ушел. Еще хуже будет что-то вроде гт -rf /. Таким образом, мы только что обсуждали что корневой каталог. Он проводит все файлы на вашей системе. Вещи, как правило, получить довольно грязно при удалении вещи, как Ls, и кд, и все из них. АУДИТОРИЯ: В чем разница между РМ, РФ, и гт * Роб Боуден: Так гт * - Элисон: Вопрос был в чем Разница между РМ, РФ, и гт *. Роб Боуден: Так гт *. Звезда в общем означает, что все содержимое этого каталога. Попытка думать о другом способы показывая звезду. Ну, звезда на самом деле вообще означает соответствие любой рисунок. Так что, если у меня есть файл с именем dog1, коснуться dog2, прикоснуться cat1, прикоснуться КАТ2. Так Ls * 1 собирается печатать cat1 и dog1, потому что звезда может быть заполнено в with-- нужно быть там, но звезда может быть либо кошку или собаку. Это дикая карта. Это слово я ищу. Дикий карты. Или я мог Ls собака *, и Я добрался, чтобы видеть dog1, dog2. Так что те, которые перечислены файлы которые соответствуют этой конкретной схеме. Можно использовать Ls таким образом. Ls * звезда соответствует чему-либо. Так это будет печатать все содержимое этого каталога так как все они совпадают. Это не собирается печатать что-либо в каталогах верхнего уровня. Если у меня есть подкаталог, Foo, и прикоснуться 1 2 3-- так что теперь, если гт * звезды, удалить cat1, КАТ2, dog1, dog2. Не могу удалить Foo. Это каталог. Так звезда расширяется до всего файлы в каталоге. Так технически гт *, как говорят гт cat1, cat2, dog1, dog2, нечто. В то время как гт -rf, технически звезда будет сделать то, что мы хотим, но гт -rf-- если я выхожу из этого каталог, гт -rf температура, что собирается пойти в температуре и рекурсивно удалить все. Так звезда отдельный в том, что, что Понятно, по-- так это дело что я бегу в это дело что побуждает меня для команд а затем выполняет и делает им, я называю это моя оболочка. И так эта оболочка сама программа. И если бы я хотел, я может работать в / бен / Баш. Оболочка называется Баш. И теперь мы видим, что-то изменилась незначительно, и это потому, что мои настройки для оболочка несколько отличаются. Но теперь я технически работает Оболочка в моей оригинальной оболочки, и я могу выйти из этой оболочки, и теперь Я вернулся к своей раковины верхнего уровня. Цель говоря что is-- звезду. Так звезда является то, понимают Баш. Так гт -rf, -rf флаг поняты только гт. Он знает, что, когда вас пройти -rf что вам хотите, чтобы он рекурсивно удалить все файлы без выдачи запроса. Звезда-то понял по Баш, что, когда вы говорите, гт *, Баш не собирается говорить эй гт *, снять звезду. Bash собирается сказать гт * удалить cat1, КАТ2, dog1, dog2. Это автоматически будет расширяться все файлы в каталоге. И точно так же тильды еще один Символ, который Баш понимает. Когда вы говорите, кд ~, Баш расширяет что в вашем домашнем каталоге. Другие вопросы до сих пор? ОК так что мы собираемся начать идти быстро. Вкладка завершение. Просто, чтобы бросить его там. Много людей не понимаю, что это существует. Так что, если я печатаю кд Доу, я хочу пойти в загрузок. Мне не нужно, чтобы ввести nloads. Я могу просто нажмите Tab. Так она признает, что Dow является префиксом, что ничего не совпадают еще в этом каталоге, так что это будет завершить, что для вас. Теперь я могу войти. Я также, что рекурсивно. Так MkDir нечто. Пойдем в Foo. MkDir бар. Так возвращаясь к моему дому каталог, я вижу, скачивали. Теперь попав вкладку снова, автоматически собирается заполнить Foo. Это единственный справочник. Удар вкладку снова, автоматически собирается заполнить бар. Так что теперь я в (~ Загрузки / Foo / бар). Так что это завершение вкладка, всякий раз, когда я добрался до рабочего дня, и я стою над чье-то плечо, и они собираются гт D-O-W-N-L-О-A-D-S, я умирает. Просто вкладка, вкладка, вкладка, вкладка. Так определенно использовать вкладку. И точно так же и вниз, много людей Просто случилось никогда не ударил вверх и вниз. Это будет пройти предыдущий Команды, так что если вы просто побежал что-то, и вы хотите, чтобы запустить его снова, просто задержать, пока вы получите к нему. Хорошо. Так быстро, некоторые другие вещи. Давайте вернемся в темп. Давайте создадим несколько файлов. Так здесь, я просто буду перечислять какие-то слова. собака, кошка, мяу. Давайте сделаем собаку, рыбу. Так что теперь репутация является очень полезные команды, что вы использовать для поиска во всем файлы для конкретного текста, и технически это можно сделать действительно сложные выражения для того, чтобы соответствовать. Так вот, если я вычленить, и то, что я хочу, чтобы искать? Скажем Я ищу кошек, и Я хочу, чтобы искать все эти файлы. Так как я делаю все эти файлы? Звезда. Таким образом, в файле одной, у меня есть кот. Я, вероятно, могли бы называется она что-то лучше, потому что выглядит как номера строк или что-то. Но в файле одного меня есть строка с кошкой. В файле две у меня есть строка с кошкой. Так что теперь я могу заглянуть внутрь файла одного и см, о, да, что файл действительно кошку. Уведомление файл три не был подобран потому что кошка не там. Я могу вычленить информацию о мяу. Только файл два имеет мяуканье. Так что это можно совместить, снова, с -r, которая как я уже говорил часто означает рекурсивный. И поэтому я могу прийти сюда, Grep -r для любой экземпляр of-- давайте редактировать этот просто выбросить кошку в там. Так вычленить -r для любого экземпляра Кошка в данном каталоге. И это будет рекурсивно поиск поддиректорий. Таким образом, в Baz, есть кошка. В TEMP / 2, есть кошка. И в температуре / 1 есть кошка. Так вот поиск в файлах. Теперь вы можете также использовать находку. И так найти конкретно о поиск файлов с заданным именем. Так давайте сделаем некоторые более. Пойдем в загрузок. Сенсорный dog1. Сенсорный КАТ2. Сенсорный cat_dog. Сенсорный CatCat. Поэтому я хочу, чтобы найти все Файлы с собакой во имя. Так найти, и на самый длинный раз, когда я не помнила, как найти не работал, пока я, наконец, читать что-то, что заставило его так ясно. Так что найдите, автоматически рекурсивно. Вам не нужно, чтобы пройти -r. Так что найдите точку. Мы не говорили о точке еще. В то время как точка точка всегда означает один каталог вверх. Dot всегда означает текущий каталог. Так что я мог гт -r точку в Точно так же я могу гт -rf *. В конечном счете они сделать то же самое. гт -rf точка собирается снять весь текущий каталог. ОК, которые я не хочу, чтобы сделать там. Но найти точку. Так рекурсивно искать тока каталог, и теперь все после этого куча флагов, которые вы использовать, чтобы исключить вещи от возвращения. Так что найдите точка возвращает все то, что его можно найти в текущем каталоге. Таковы все файлы рекурсивно искать. Мы увидим, некоторые из тех, кто в секунду. Но в случае, если вам интересно, как я делаю что, таким образом, командное К, по крайней мере в моем терминале в Mac очищает его. Контроль L обычно очищает это для какой-либо терминал. Вы также можете ввести ясно. И если вы когда-нибудь в странную scenario-- это случилось со мной пару time-- где цвета ваших подсказок всех испортил, или вам не в состоянии увидеть что-либо набираясь когда вы печатаете, потому что иногда как цвет фона устанавливается так же, как цвета переднего плана и теперь вы не можете видеть шрифты. Сброс это то, что просто сбрасывает Вам умолчанию черном фоне с, белый спереди, или то, что Вы устанавливаете их. Так, где мы были? Найти точку. Так что теперь все это в прошлом Точка ограничивает результаты к чему-то, что соответствует данная модель. Так вот, я хочу, чтобы поиск все с именем кошки. Я ничего не получил. Почему это так? Ну, я просто ищу что-то с точно таким именем кота. Если я хочу, чтобы искать что-то что есть некоторый шаблон, и cat-- котировки технически не являются необходимыми, но я бросал их туда. Так что теперь он находит CatCat, потому что это единственное, что имеет некоторое произвольное картина с последующим кошки. Я могу поставить кошка *, и сейчас найти CatCat, cat_dog, КАТ2, потому что те все вещи с кошкой в начале последующим нибудь. Вы можете совместить это. Если вы хотите найти все файлы C что у вас есть, вы можете сделать * .c. Мы blah.c здесь. Так вот находка работ. Вы можете искать. Он имеет целый букет флагов для дальнейших ограничений. И один на них, скажем -d. Так устаревшим. О, это не то, что я хочу. Не -d. Тип d. Так что найдите точку - тип d. Так что, что только что сделал это Я ищу для всех файлов в текущем каталоге с a-- d обозначает directory-- типа каталогов. Это возвращает все каталоги в текущем каталоге. И типа F все регулярные Файлы, все не каталоги. Так что это просто Пример других способов может ограничить поиск другой чем просто имя файла. Это было 30 минут. Все еще. Элисон: Я ветер через. Все будет хорошо. Роб Боуден: Таким образом, некоторые другие вещи. Теперь бац, восклицательный знак. Так что в целом означает: хорошо, давайте посмотрим пример. Так! Е, что, что будем делать? Ну это, кажется, повторил находка точка -типа е. Что о! Г? Это просто вычленить -r кошку *. Так бац вы можете использовать, чтобы повторить Недавно сделал команду. Так что, если я печатаю! GRE, он собирается снова запустить команды, которые начались с GRE наиболее в последнее время. И вы можете видеть все это Команды с историей. Так история. Это все Команды Я бежал сегодня. И хорошо, что это не в буквальном смысле ограничивается сегодня, но я использовал только это Прибор на сегодняшний день. Это ваша полнота История вашей оболочки Bash, за исключением того, отсекает на какой-то момент. АУДИТОРИЯ: Что произойдет, если вы делаете История команды [неразборчиво] и об ошибке в результате все равно будет печатать the-- Роб Боуден: Да, если есть Ошибка в одном из этих commands-- так скажем, что это ошибка команды не нашел. Тем не менее появляется в истории. Хорошо. Другие вопросы по теме? Так вот взрыв. Теперь, действительно полезная команда, человек. Так что дает пособие для данной команды. Так скажем, человеко Ls, так это показывает мне Ls. В нем перечислены содержимое каталога. И это то, где я вижу, что есть эти различные флаги, которые существуют. Таким образом, мы видим, что Ls -l существует если бы мы должны были прочитать, что. Ls -l дает мне это полный список каталог с тем, кто является владельцем файла, размер файла, модифицированная метка. Так Ls -a еще один, что вы могли бы на самом деле использовать несколько чаще. -al мой самый общий признак эти прошлые Ls. Так -а, обратите внимание, что есть много больше файлов, чем просто Ls. Ls -a. Что общего со всеми этими файлами? Они начинаются с точки. Так что это соглашение в Linux, что файлы, которые начинаются с точки скрыты. Так это просто означает, что когда мы просто прямые Ls, или мы ищем этот каталог, используя нашедший эквивалент, или для Windows Проводник эквивалент, что мы не хочу, чтобы эти точечные файлы. Они просто загрязняют взгляд на вещи. Таким образом, они скрыты если вы специально просить их что-то вроде -а. Так что я могу кд в .local, и я вижу, что, что само по себе является каталог с общий каталог, и приложения и бла-бла-бла. Так точка, файлы, они просто скрыты. ОК, так что другие важные. У меня есть пара, я могу пропустить. Давайте просто реальный быстрый разговор о Перенаправление файла вещи. Таким образом, есть целый комплекс серия вещей, которые вы можете делать с ними, но только, чтобы увидеть их, скажем, эхо. Еще одна команда. Действительно немой команда. Все это делает печать, что я говорю это, чтобы. Так эхо привет. Это просто повторил привет экране. Привет мир. Отголоски привет мир. Так одна команда или один Символ, который Баш понимает это больше, чем символ, и то есть выходной символ для файла. Так что, если я выходной, чтобы это Фу, есть теперь файл называется Foo, внутри который является привет мир. Так заметить, что, когда я эхо привет мир труб в Foo, это не эхо привет мир. Вместо этого он был введен в файле Foo. И другая команда просто бросить его на тебя, кот. Это простой способ, чтобы просто полностью список содержимого файла так что у меня нет, чтобы открыть текстовый редактор, для его просмотра. Так содержимое Foo файл являются привет мир. И я мог кошка blah.c, содержимое этого. Опять же, это команды, которые, не ожидают, что вы их всех наизусть. Идея вы видели их. Может быть, вы работаете на что-то, и ты как я устал от открытия этого файла. Я хотел бы просто посмотреть на содержание действительно быстро. Вы можете сделать это, то оглянуться назад и сказать о I помню что-то вроде что существует, и это кошка. Так что происходит в файл. Теперь есть на самом деле не любой хороший Пример чтения из файла еще. Что-то, что берет что-то от стандарта в? Любая простая команда Linux? Когда мы добираемся до него, через пару недели все piece-- хорошо, что, На этой неделе у вас есть кусок, где вы начать принимать ввод от пользователя. И так, как правило, при вводе что ввод с клавиатуры. Вместо того, чтобы печатать, что поступающие на клавиатуре, Вы можете вместо трубы из файла так что, когда вы делаете Марио, ./mario, Труба в от какого-либо файла, и что собирается запустить программу Марио. Не ожидая ввода в клавиатура, а не это просто зачитаю строки из файла Foo. Так больше Foo помещает его в файл Foo, и меньше, чем Foo берет материал из файла Foo и использует в качестве входных данных, что к этой программе. И только, чтобы увидеть его, мы могли бы также повторить Foo бар Баз, а затем вместо одного больше, давайте сделаем два в Foo. Что это делать? Это просто добавляет в файл. Таким образом, вместо заметили, если я эхо-бла в Foo, а затем кошка Фу, это просто бла. Итак, когда вы вывод в файл, его полностью перезаписывает файл. Если вы просто хотите добавить, дважды [? грейдер. ?] И последнее, это труба. Труба становится намного более сложным, где он принимает вывод одной команды и подает его в следующей команде. Таким образом, некоторые обычное дело, история. Так, тьфу, я не хочу смотреть на это. Показать все команды в моей истории где я вычленить-ред за что-то. Нет, это заблуждение. Показать все команды, где я нахожу. Все находятся команды я когда-либо управляли. Так история. Теперь история выводит на экран этот список команд, но я не хочу, чтобы Выход его на экране. Вместо этого я собираюсь трубы него в Grep. Так что давайте вычленить информацию о всех случаях находки. Так что теперь вместо GREP взятия вход, вместо of-- Grep способен обрабатывать как input-- мы с помощью Grep немного по-другому здесь. Таким образом, вместо того, чтобы печатать список вещи, которые мы хотели искать и сказал Grep принимает в качестве входных данных. Так что, если я просто Grep найти, его ждет, чтобы я типа вещи. Так кот привет найти. Привет. Найти. Обратите внимание, каждый раз, когда я печатаю найти он признает, что я набрал находку. Таким образом, вместо этого, будет поиск файлов для находке. Так история теперь собирается Выход список всех команд. Мы положить, что выход, и мы кормим его вычленить, и поэтому он выплевывая все экземпляры найти. Поэтому я сказал, что это был бы запутанным это если я-- это все-таки запутанной. Если я вычленить информацию о Grep. Обратите внимание, что это в значительной степени всегда показывая команду I просто побежал, потому что этой команде Сам имеет Grep внутри него. ОК, так что любые вопросы по теме? И я буду передавать его по в этот момент. Надеюсь, это хороший Обзор всех команд что вам не нужно иметь запомнил, но они составляют твердый 95% того, что я сделать в командной строке. Также имейте в виду, что в командной строке Сам, Баш это язык программирования, и поэтому, когда вы садитесь на него, вы возможно, захотите сделать действительно сложные вещи. И поэтому он имеет что-то вроде петель, и IFS, и всех тех, что вы собираетесь, чтобы привыкнуть к со своими языками программирования. Но что находится за пределами Объем данного раздела. ОК, так что никаких вопросов? АЛЛИСОН: Нет? Габриэль: Вы собираетесь to-- Элисон: Я могу сделать это на шахте, если вы хотите. Мы можем видеть, что происходит. Роб Боуден: Off для Allison. Элисон: Ву. Ты недосягаемый, Роб. Ты хочешь, чтобы переключиться с вами? Или вы получили, ОК. Я собираюсь попробовать и не вполне может быть как длительным там. Давайте посмотрим, если это воля работать так, как я хочу, чтобы. Может быть? Ха-ха! Да. Так что я просто хочу, чтобы очень быстро идти через переменные, циклы, условные, и немного от компилятора. Если у вас есть вопросы по в любое время, пожалуйста, прекратите меня. Эти ребята будут напоминать мне повторить Ваш вопрос в случае, если я забыл, но не должно быть слишком плохо. Так переменных, да. У нас нет одного из ваших Скретч части здесь. Я уверен, что большинство из вас, если Вы были какие-то игры что вы создали с нуля, вы имели отслеживать то, как оценка, или время, или что-то подобное. Так что те, ярко-оранжевый штук, которые мы видим там просто царапинам форма переменные, и вы, безусловно, быть с помощью переменных на протяжении ваших программ. Если вы не, я не очень уверен, что вы делаете. Но в любом случае, большое дело, определения переменных. С С каждая переменная имеет иметь тип, объявленный, так что я дал вам очень Вообще один в верхней части. Таким образом, вы будете иметь ваши введите, а затем все, что Вы решили назвать вашу переменную. Таким образом, в этом случае необходимо ввести в вашем списке переменных. У нас есть три примера. Чар некоторой степени, из А, который является то, что Я уверен, что вы все хотите чтобы получить в этом классе. Вы можете определить несколько переменные по одной линии пока они все тот же тип, которая является нашим вторым примером есть где у вас есть три Переменные, х, у, г. Они все поплавки. И тогда вы можете также, в этот последний Пример с INT счетом и числа команд, вы можете инициализировать их прямо там. Таким образом, в среднем, например, где мы просто поплавок х, у, и г, те, которые еще не инициализирован. Они не имеют никакой ценности. Или они имеют значения для мусора. А если попробовать и использовать их, компилятор будет кричать на вас. Вы должны как объявлять и инициализировать переменные. Так что в этом последнем, мы делаем другое. Мы объявляем переменные из забить и количество команд, и мы инициализации их, давая им их начальные значения 7 и 4 соответственно. Прохладный. Все хорошо? Удивительный. Итак, некоторые конвенции. Если вы, ребята, читали через стиле 50, эти просто вещи, которые мы хотели бы для Вам реализовать в вашем стиле. Так значимые имена. Если вы начнете называть вещи только х, у, г, особенно как вы получите в длительный программы, вы вероятно, запутать себя и быть как то, что это переменная, относящаяся к. Я понятия не имею, что это значит. Так что, если это имеется в виду провести оценка, называют его забить. Если это имеется в виду провести какой-то ответ или привести, дать ему имя, как, что. Для петель, которые мы будем попасть в на следующем слайде, Одна буква переменные прекрасны. Роб Боуден: I, J и К. всего соглашения для для петель что все ждут их называться I, J и К. Вы можете позвонить them-- я вижу ряд столбец или строка вызова иногда в течение двух вложенных циклов, и это также своего рода стандарт. Но я и J полностью понял. Элисон: Да, я и J ты совершенно нормально. Для ясности, как в некоторых из ваших наборов P, возможно, имеет смысл, чтобы иметь больше описательные вещи в там просто чтобы отслеживать его. Но я думаю, I, J и К я думаю, Подавляющее большинство из нас все используют. Роб Боуден: С этим конвенции, так стиль имеет важное значение. Это один из четырех осей на котором вы оцениваются, и это так легко просто перейти Ваш P установлен в конце и убедитесь что есть не стилистические ошибки. Поэтому убедитесь, что вы табулируя правильно. Убедитесь, что ваши переменные называются. Оставьте некоторые комментарии. Это очень легко получить те пункты. Вам не придется думать о том, что-нибудь для того, чтобы получить эти очки. Вам не нужно, чтобы понять что-либо из. Это просто делает его выглядеть довольно. Элисон: На ​​самом деле, мы есть стиль 50, который расскажет вам, где вы Мессинг , если вы испортить по стилю и скажу вам точно, что вам нужно исправить и как вам нужно, чтобы исправить это. Это также просто хорошо отметить что это политика, конечно что если вы в офисе часов и ваш код является беспорядок, мы можем отказать в помощи Вы пока не выглядит лучше. Так что начните прямо, держать единый стиль, Вы также просто собирается сделать ваша жизнь намного проще, когда Вы пытаетесь пройти отладки. Если вы пытаетесь выяснить, где Вы пропускаете фигурная скобка и они повсюду, вы просто сделать свою собственную жизнь сложнее. Так соответствовать стилю. Я обещаю, что это будет сделать вашу жизнь проще. Это сделает нашу жизнь проще. Все будет гораздо счастливее. И это то, что вы хотите. Габриэль: Ваша оценка будет выше. Элисон: Да, и ваша оценка. Если TF это, как вы, имеет тенденцию быть благоприятным. Ладно, а затем просто Второй момент здесь. Последовательные инициализации. Так, как мы видели, можно объявить и инициализировать вещи. Несколько переменных в одной строке. Одна вещь, мы бы не хотели вас сделать, это объявить некоторые переменные а не инициализировать их на то же самое линия, что вы инициализации других. Таким образом, в случае, что сделано не имеет смысла вообще, мы имеем пример здесь где мы объявив целыми в переменных кварталов пятаков и пенни, но кварталы и пенни нет начального значения. Мы не инициализировать их, но прямо в середине там мы уже инициализирован пятаков на 0. Так что либо делать, четвертей и десять центов, гроши. Или четверти равняться 0. Dimes равняться 0. Пенни равняться 0, или что-то те начальные значения. Большой вещь со стилем, быть последовательным. Если вы сомневаетесь, быть последовательным. Но следовать нашим гидом стиль тоже. Прохладный. Все там хорошо? АУДИТОРИЯ: Где стиль руководства? Элисон: гид по стилю является on-- что сайт? Габриэль: Я думаю, что это manual.cs50.net/-- Элисон: Стиль? Габриэль: Стиль. Да. Элисон: Да. Так вопрос, где это стиль 50. manual.cs50.net/style. Да? АУДИТОРИЯ: Если мы определяем Переменные, это ОК если положить, как [неразборчиво], как INT оценка, а затем интервал цель. Так бы вы сказать, что теперь мы получил определить их вместе? Элисон: Так вопрос, следует у вас есть избыточный код когда вы определяете переменные, такие как Int счетом и На следующей строке INT игре? Роб Боуден: Есть, безусловно, случаи, когда избыточная код плохо. Я не буду рассматривать что избыточная код. Я почти никогда не заявляют кратное переменные по одной и той же линии когда-либо. И если что-нибудь, это потому, что Обычно я оставляю своего рода комментарий объясняя, что переменная является для. Так что я буду говорить, INT вратаря слэш слэш. Отслеживает бы то ни было. В общем слэш слэш. Так что это гораздо грубее таким образом поставить их все на одной и той же линии. Я просто никогда не ставил их на одной линии. Элисон: Я чувствую, что это личное предпочтение на данном этапе. АУДИТОРИЯ: Значит ли это, пойти на для петель и прочее тоже? Роб Боуден: Как внутри? Как междунар я равна 0 запятую длина равна-то? Это у вас нет выбора. С для петель инициализации part-- так что вы, возможно, видели только INT I равен 0 запятой я меньше чем то, что точка с запятой я плюс плюс. Это INT I равен 0, технически можно также делать то, что мы видели раньше с синтаксисом запятыми. INT I равен 0 запятой J равна 3 запятая к равна 5. Вы не имеете выбор, чтобы разделить что на несколько линий, и это стандарт. Видя это есть хорошо. АЛЛИСОН: Awesome. Ну, удобно переходить в петли. Так что да, вот у нас есть несколько примеров из петли, что вы, ребята, видели в пустом. И, конечно, все эти может просто быть воссозданы в С. И они в основном позволяют вам повторить какой-нибудь участок кода до определенного состояния удовлетворяется, которые мы будем попасть в праве после разговора о петли с условных. Таким образом, мы имеем три основных типа. Для, в то время, и сделать время, которое мы все пойдет через прямо сейчас. Итак, сначала один для петель. Таким образом, для некоторых условий, выполнить этот блок кода. У нас есть немного прохладной График здесь внизу. Но в основном у вас есть в Ваш для, что первой линии, вы собираетесь инициализировать переменные. Так как мы говорили, я это равно 0 или I, равна 10. Все, что нужно, что Переменная быть это собирается инициализировать там, объявлять и инициализировать до некоторого значения. Итак, мы имеем некоторые состояние, что происходит быть проверка нашего Переменная против чего-то. Таким образом, в этом случае типичный случай, где может быть, вы хотите, чтобы эта часть кода чтобы выполнить пять раз. Таким образом, мы должны были бы INT I равен 0, и мы хочу, чтобы это было, когда я меньше 5. Так что состояние просто собирается проверить, что каждый раз, когда. Если этого условия истинно, это собирается запустить код, который точно что эта маленькая схема показывает. И так он выполняет его. Он обновляет переменную, которая является то, что мы видим в последней части нашего за инициализация кольца есть. Так что будем просто продолжать делать это пока что условие не выполнено, и затем он выходит цикл и продолжить перейти с остальной частью вашей программы. Все там хорошо? Прохладный. Так вот пример, очень похожи на то, что я только что говорил о. Таким образом, мы просто хотим, чтобы распечатать это CS50 в 10 раз. Итак, вы видите здесь у нас есть наш для, а затем мы инициализации переменной Я равным 0. Наша условие проверки что это меньше, чем 10. Так оценивают в верно, когда мы впервые начать, а затем обновляет нашу переменную каждый раз, что он на самом деле выполняет и выводит это CS50. И закончится после 10 раз. Прохладный. Таким образом, хотя петли в следующий раз. И, как вы видите здесь, мы просто должны некоторые в то время как это condition-- вопрос? АУДИТОРИЯ: Как я могу прыгать на самом деле просто не одно число, но два номера [неразборчиво] Я плюс плюс плюс? Элисон: Так что вопрос в том, как вы можете обновить переменную более чем одного за один раз. Так что я плюс плюс будет обновление на единицу каждый раз. Если вы хотели, чтобы обновить его, два, вы могли бы сделать, я плюс равна 2. Роб Боуден: Вы видели плюс равно в лекции еще? АУДИТОРИЯ: [неразборчиво]. Элисон: Это эффективно То же самое, как я равняется я плюс 2. Так что собирается взять его и обновить его на два каждый раз. Плюс равна как раз то, мы называем синтаксический сахар. Роб Боуден: Да, тех, существуют почти все арифметические операции. Так что я раз, равное удвоит число. J разрыв равен 3 такая же, как J равна J делится на 3. Элисон: Или минус равняется 2 будет уменьшения I на два каждый раз. Роб Боуден: Даже современная равно. Вы еще не видели битовых операторов, но вставки равна и амперсанд равно, все те, существуют. Элисон: Так много раз, особенно с первых двух наборов P, Вы будете, вероятно, увеличивается на один, так что я плюс плюс, J плюс плюс все вещи, которые вы собираетесь чтобы, как правило, быть с помощью. Но что состояние обновления полностью под вашим контролем. Вы можете обновить его любыми шагом или в какой бы путь вы решите. Может быть, вы даже хотите, чтобы это было случайное число иногда. Но да, есть много вещи, которые можно сделать с этим. Вы не ограничены I плюс плюс. Роб Боуден: Просто так вас знаю, что это существует, это также существует в другой форме, плюс плюс я. Так что если вы когда-либо поиска в Интернете и случится увидеть плюс плюс я, в значительной степени означает то же самое. Элисон: Прохладный. Хорошо? Удивительный. Таким образом, хотя петель. Очень похоже. У вас есть какое-либо условие. Главное, чтобы заметить Здесь вместо того, три разные части установить, у нас есть один. Мы просто есть условие который проверяется. И таким же образом, как долго, как что состояние оценивается как истина, Ваш код будет работать. И если это ложь, это прекращает, шаг на следующей части вашей программы. Так что это своего рода like-- что хороший пример проверки по какой-то нормальное состояние? Габриэль: В то время как верно. Элисон: Вы могли бы сделать в то время как верно. Хорошо, 1 равен 1. Роб Боуден: Вы можете сделать while-- только вместо использования для петли, Вы всегда можете закодировать для цикла в то время как петля, так что я больше, чем 0 или в то время как я менее 10. АЛЛИСОН: Awesome. И тогда мы делаем во время петли, которые отлично подходит для проверки пользователя, где Вы хотите, чтобы получить что-то от Ваш пользователь, увидеть, если она действует, а затем продолжить оттуда. Так, одна из вещей, чтобы знать, является с сделать в то время как в том, что он собирается выполнить, и тогда он будет повторно выполнить если это условие выполнено. Так, вероятно, лучший способ сделать это это просто, чтобы увидеть пример здесь. Так как я только что упомянул, пользователь проверка действительно useful-- или сделать whiles действительно полезно с проверкой пользователя. Так что это просто будет повторно запрашивать некоторую пользователя пока они не указать положительное число, которые могут быть полезны для вашего P набора на этой неделе. И поэтому в данном случае, когда мы первоначально запустить эту программу, он собирается печатать введите положительное число. Это собирается получить некоторые ввод от пользователя, а затем он собирается проверить что вход на условии что вы установили для него. Таким образом, в данном случае это будет проверять. Это будет сказать, в порядке, это наш вклад отрицательный, или это 0 или отрицательный, который будет недействительным. Так то оно будет повторно приглашение. Вопрос? АУДИТОРИЯ: Это то же самое, то, как в то время как петли, если вы просто скопировали этот код и положил его [неразборчиво] петли а? Элисон: Так вопрос был бы это может быть таким же, как только время цикл, если бы мы должны были просто скопировать то время как цикл выше. Таким образом, в этом случае, ваше время петля собирается проверить состояние в первую очередь. Таким образом, в этом случае, если мы попытались написать просто как время цикла, было бы сказать, в то время как вход составляет менее одного. Но мы не должны вход для него. АУДИТОРИЯ: Если вас [неразборчиво] в то время как цикл в том числе этот код, но тогда вы справились код выше то время цикла тоже. Просто нужно было этот код [Неразборчиво] в то время как цикл. Элисон: Было бы то же самое, да. Таким образом, вы могли бы просто write-- вместо того, чтобы do-- да. Габриэль: Но это более элегантно. Элисон: Да, это более элегантно. Вы можете попасть в дизайне и еще много чего, но да, вы можете полностью сделать это. Еще вопросы? Хорошо, прохладно. Таким образом, мы много говорили об условиях со всеми этими петлями, которые мы имеем, так что мы на самом деле попасть в условия в логических выражений. Опять же, вы используете их в C, так только отчасти переход от более графическим интерфейсом на самом деле кодирования. Круто, так большой, если. В основном только позволяет ввести какая-то логика в нашу программу и проверки SYS условия. Таким образом, в данном случае, в порядке, п больше 0? Да, это, так что вы можете выполнить это. Это просто проверка некоторых состояние, что у Вас есть установить, что я думаю, мы все комфортно с проверки условия. Прохладный. Так что, если еще ваш другой, Вы можете сказать, в порядке, если это правда, сделать это первым делом. В противном случае я хочу, чтобы вы по умолчанию и сделать что-то еще. Как в этом случае, вы либо выбрать положительное число или отрицательное число. У вас есть только два варианта. Вы должны это выполнить независимо о том, что ваши пользователь вводит. Таким образом, вы можете сказать, хорошо, это больше, чем 0? Прохладный. Распечатать положительное число. Если это не так, распечатать отрицательный. Все хорошо? А потом одно дело признать, что если, если условие выполнено, еще никогда не также выполнить. Только один из них будет выполнить за один раз. Так что это компромисс. Вы не можете иметь оба. Вы должны либо первое условие. Вы должны либо если или в другом месте, не так. Какой тогда может сделать вещи еще более сложной, потому что вы можете сделать, если, иначе он, а затем еще. Таким образом, в данном случае, мы есть три условия. И снова, только один из них является будет в конечном итоге выполняется. Таким образом, вы можете быть удивлены, хорошо, что, если вас есть что-то, что можно встретить два из них. Может быть, все, что вы ввода встречается как условие ибо, если и еще если. Единственное, что собирается бежать Элисон: Как только он находит что-то что он отвечает условию, что истинно, что к чему это будет не бежать и ничего больше. Так что, если у вас было это число между 0 и 5 для вашего первого, или это число между 3 и 5 для еще, если часть, и вы вводите number-- Я сказал 0 и 5 и-- 4. Это ударит первый. Это скажет ОК, это число между 0 и 5. Выполнить и оставить. Он никогда не будет ударить, что второй вариант. Прохладный? Удивительный. ОК, мы также имели переключатели отчетности, если Вы хотите получить еще more-- или жаль, Переключатель находится рядом. Я забегаю вперед здесь. Опять же, многократное если блоков где, как я только что сказал, это, как только вы найдете условие что встречался и если еще, если в другом месте, она оставляет. Если вам нужно проверить несколько вещей, вы захочет использовать это, потому что она будет проверять каждый раз здесь. Так что это будет работать через и, если это больше, чем или равно 90, он собирается печатать что. И он будет работать через и проверить каждый один из них. АУДИТОРИЯ: Так что это будет более ошибок, чем [неразборчиво]. Будет ли это как [неразборчиво]? Элисон: Вопрос будет ли это багги или это делать то, что вы хотите. Это действительно зависит от того, что вы хотите от вашей программы. Аудитория: Я имею в виду, если бы вы положили 90 в. Элисон: Если поставить 90-- АУДИТОРИЯ: [неразборчиво]. Габриэль: Вы собираетесь получить две вещи. Элисон: Вы собираетесь получить две вещи. Да, два. Роб Боуден: Два? Элисон: Нет. Роб Боуден: Четыре. Если поставить 90, он собирается сказать вам получил A, вы получили B, вы получили C, Вы получили D. АУДИТОРИЯ: [неразборчиво]. АЛЛИСОН: справа. Так что я, зависит от того, что хочу от вас программы. Иногда вам нужно проверить несколько вещей. Вы получите гораздо глубже в то, что хороший дизайн, как вы идете вперед. Важно понимают, что это будет проверять все четыре условия здесь. В то время как если бы это было, если еще, если еще если еще, было бы ударить, что первый случай, было бы напечатать вы получили A и сделать. Роб Боуден: даже если мы решили изменить это, если и больше или равна 90, Если и больше или равна 80, и меньше, чем или равно 89, если N больше или равно 70, и п меньше или равен 79, так, что будет правильным. Это будет делать то, что мы хотим, но он по-прежнему проверяет каждый это. Так в то время как в первом случае, если мы введите 90 с только если иначе, если еще, если, и мы входим 90, то он собирается исправить. Он проверит первый один, печать вы получили A, пропустить все, потому что это уже нашел тот, который работает. Все случаи являются взаимоисключающими на основе, если еще, если еще, если. Так что буду исполнять Первый, если, то это будет сделано. Это будет идти до конца. В то время как, если мы изменим это будет то, что я был говоря с менее чем или равно 89. Это собирается проверить первый. Это будет печатать. Это будет проверить второй. Это не собирается печатать. Проверьте третий. Не в печать. Проверьте четвертую. Теперь в печать. Таким образом, в этом случае, если еще версия, так как эти случаи являются взаимоисключающими, это лучше использовать, если еще, если еще, если, потому что будет иметь меньше проверок условий чем эта версия. АЛЛИСОН: Awesome. Так еще одна вещь, мы можем сделать, это перейти заявления. В основном Переключатель занимает в какой-либо переменной, в данном случае это п и определяет этом случае выполнить. Так что это также является одним где ваши случаи должен быть своего рода взаимоисключающими. Таким образом, в этом случае, если мы получаем один, это собирается соответствовать все, что переменная-- независимо от значения п заключается в одном из этих случаев, так 1, 2, или 3, и распечатать соответствующую строку. И тогда, если вы заметили, здесь, у нас также есть по умолчанию, которые вы можете из думаем как ваша еще. Так что, если вы выбираете любое другое число к тому же 1, 2, 3 и в этом случае это просто будет печатать недействительным. Решение, когда использовать сослагательного наклонения в сравнении если ELSES против переключателей собирается быть что-то, что вы, ребята, будет см проектировать мудры, как вы начнете писать более сложные программы, и нет никаких жестких правил о том, когда использовать их. Это действительно зависит от контекста. Роб Боуден: И только чтобы бросить его там так как это более удобно разделе. Выключатели, они, как правило, be-- так вы ограничены в ряде направлений вы можете использовать их, потому что IFS, условие может быть довольно все, что вы хотите. С переключается случаи должны быть числами, или технически они могут быть символы, но символы, как мы увидим, это всего лишь числа. Таким образом, они должны быть цифры, но переключатели действительно более эффективным, чем если бы еще если еще, если, потому что даже беря пример before-- хорошо, Пример класса кажется хорошей. Ну, скажем, вот, мы вместо того, чтобы делать это как если еще, если еще, если сценарий. Так что, если н равна равна 1, распечатать вы выбрали небольшое количество. Если еще при п равна равна 2, Вы выбрали средний ряд. Иначе, если равно равняется 3, высокий. Иначе недействительным. Так скажем, это было нашим сценарием. Так скажем, мы входим 4, поэтому мы ожидаем, недействительным. Таким образом, что, если еще, если еще если подход будет работать это проверяет первое условие. Это не удовлетворил. Таким образом, мы проверить второе условие. Это не удовлетворил. Проверьте третье условие. Не удовлетворены. Так мы идем в другом месте и распечатать недействительным. То, как переключатель работы это компилирует в то, что мы собираемся называть таблицу переходов. Основная идея в том, что при вводе 4, он может сразу перейти в состояние по умолчанию. Для этого не нужно, чтобы проверить я такой случай 1? Неа, это не он. Случай 2? Не-а. Случай 3? Не-а. По умолчанию. ОК, это должно быть, где я хочу, а затем выполнить это. Нет, это сразу же переходит в состояние по умолчанию. Или это я вхожу 2, это сразу пойду к 2 без необходимости проходить через случае 1. Так что в этом пути, реально в наше время это не то, что большая часть прироста эффективности. Обычно компьютеры довольно быстро, и это не так уж велика. Но это тот случай, когда переключатели быстрее. Если вы действительно пытаетесь оптимизировать, использовать переключатель. Элисон: Прохладный. А то у нас тройной оператор. Так что я знаю, я уже упоминал ранее слово синтаксический сахар. Так что это просто вещи, которые делают ваш код гораздо более кратким. Так что это один из тех случаев. Так тройной оператор знак вопроса толстой кишки, как мы видим, в строке линии ы равна п больше, чем 100 Вопросительный знак высокой толстой кишки низка. Так в основном, как это работает, это N больше, чем 100 представляет собой состояние. Так что я думаю, что это может иметь смысл. Это как задать вопрос. Это говорит о, п больше, чем 100. Кто знает? И если это имеет значение правда, он собирается дать вам Первое, что это перечисленные в нем, который является высокой. В противном случае это будет давать вам низкий. Так что это просто очень простой и эффективный способ сделать как если в другом месте. Вот и все это. И если бы мы должны были написать это как если еще условный, было бы, если п больше 100, вернуться высокая. В противном случае, вернуться на низком уровне. Это просто гораздо более кратким способ написания его. Роб Боуден: Так что это частный пример является всякий раз, когда вы делаете что-то как это, это шаблон где я использую тройных очень часто. Таким образом, мы не говорили о рамках еще, но я ненавижу видеть запятой струны с. Если п больше, чем 100, с равно высоким. В противном случае, с равным низким. Так что картины, эти пять линий кода буквально 100% времени могут быть переданы в какой был там с тройных. Так тройной, одной строки кода. Если еще, пять. Вот пример, который я указать из каждого времени. Это будет отличное место для тройной оператор. Это так чисто. Но люди, как правило, никогда не использовать его. Элисон: Уберите это Гейб. Габриэль: Итак, теперь вы, ребята, все узнал в лекции на этой неделе что все в Компьютер в двоичной, не так ли? Так же, как лампы здесь. Вы можете быть включен и выключен. И по всему, я имею в виду буквально все. Некоторые цифры и символы и строки, и даже код, который вы пишете, когда это будет скомпилирован на машине Код и все в таком духе, что, так что все это сводится к 0 и 1 ". И поэтому, когда мы имеем дело с целыми числами, которые является то, что это технически очень просто, мы должны быть в состоянии делать такие вещи, как добавлять их, что является вероятно, один из самых простых вещей Вы можете сделать, чтобы два целых числа, не так ли? Так сложение и вычитание работает только как это работает в десятичной системе счисления, кроме вот это двоичный, не так ли? Так что это в базе два. Так что добавьте 1 плюс 1. Это дает 0 и 1 переносится. И просто продолжать делать, что, Так что теперь приходит более интересный вопрос. Мы знаем, как представляют все целые положительные числа в компьютере, но давайте сделаем это упражнение. Представьте, что вы, ребята, все в 1960 году, или что-то пытается создать компьютер, и вы должны придумать из способ хранения минус 1, Например, любая или минус число в этом отношении. Как бы вы это сделали? Любые идеи? Просто бросить что-нибудь на меня. Да? АУДИТОРИЯ: [неразборчиво] назначить специальная если ваш [неразборчиво]. Габриэль: Вы можете назначить специальный бит, который будет 0 или 1. Скажем одно, если это положительно и 0, если он отрицательный. И тогда как остальная часть бит просто, чтобы сохранить номер. Прохладный. Так что это очень хорошая идея. У нас есть, я не знаю,, 200. И если первый бит равен включен, то это плюс 200. Если выключен, это минус 200. Прохладный. Существует только одна небольшая Проблема с этим, который, если мы попытаемся подвести итог вещей. Итак, представьте, у нас есть 11 111 здесь, и мы подводя это с 00100 угодно. Если эти двое будут положительными, это нормально. Но тогда, если один из их отрицательное, как скажем, что это немного здесь это тот, который отвечает for-- я собираюсь сделать separate-- таким образом, этот означает, что это число здесь положительна. Это означает, что один этот число здесь отрицательный, не так ли? Но потом, когда ты собирается подвести их, вы нужно, если заявление говоря о, если это 0, Затем моя сумма будет что-то другое, не так ли? Таким образом, есть немного более умный способ сделать что, что называется в дополнительном. Поэтому в основном то, что мы сделать, мы определяем минус 1 быть вещь, что если мы добавляем до 1 дает нам 0. Позвольте мне повторить это. Так скажем, что это здесь 1. Что это то, что естественно в положительных чисел добавил к этому дает нам 0? Что делать, если мы пытаемся, чтобы добавить его к этому числу? Мы собираемся have-- Итак, давайте добавим. Мы собираемся иметь 1 плюс 1 0, а затем он переносится. А потом мы собираемся, чтобы получить 0 раз. Я получаю путать. И вы собираетесь получить 0 и 0 и 0 и 0 и 0 и 0. Много 0-ых. В самый последний один, мы не будет в состоянии нести его на, потому что, скажем, мы только дело с одного байта, так что только 8 бит. Так что компьютер делает по умолчанию просто забывает о том, что [неразборчиво], Хорошо? Так что это то, что называется в в дополнительном. Мы просто определяем минус 1, чтобы быть вещь здесь, что если добавить, что к 1 даст вам 0. И это очень здорово потому что мы на самом деле не нужно поздно реализовать другой тип сумму в зависимости от того, является ли что отрицательное или положительное число. Имеет ли это смысл? Так что, одно, что мы делаем здесь для того, чтобы преобразовать между положительным и отрицательным целое число, то мы перевернуть все, а затем добавить 1 к этому числу. Если вы попытаетесь сделать это самостоятельно на листке бумаги, Вы будете видеть, что имеет смысл. Но если я возьму этот номер здесь, это пять. Так что, если я перевернуть все Здесь, так 1, 1, 1, 1, 1. Flip, флип, флип. А потом я добавляю к нему 1. Я собираюсь иметь точно минус 5. Хорошо? Этот вид имеет смысл, потому что, если Вы пытаетесь подвести это с числом что у нас было раньше, что was-- давайте перевернуть этот раз. Это был 101 и много 0-х. При попытке добавить их два числа вместе, Вы будете иметь точно 0. Хорошо. Есть вопросы? АУДИТОРИЯ: [неразборчиво] Габриэль: Что ты имеешь в виду? АУДИТОРИЯ: Отрицательные к положительный [неразборчиво]. Габриэль: Нет, вы переключаете и добавить 1 всегда. Да. ОК, так что персонажи также кодируются двоичные файлы. У нас есть таблица ASCII, как вы Также видел в лекции, не так ли? Так что это в основном отображение вещей. И здесь я не могу не подчеркнуть, что за компьютером, и 65 буквально то же самое. Так что, если я пишу что-то вроде полукокса с равно, я мог в то же время просто написать 65 вот, и это будет точно такой же, ОК? Там нет никакой разницы. Мы, как правило, имеют тенденцию ставить символы в переменных типа. Чар, не потому, что они по существу сделал для этого, но потому, что из конвенции человека. Но вы можете просто иметь дело с целыми числами вместо переменных типа CHAR, и вам будет хорошо. Только фактическая разница между полукокса с и INT I является то, что интервал имеет четыре байта в наиболее системы, в то время как символ имеет один байт. Они, по существу, То же самое с точки зрения данных. Так что будет печатать здесь? Здесь мы печати цифру при помощи Printf с плюсом 1, и так же, как целые числа, символы могут быть подведены, так символы могут быть подведены. Так что это точно 65. Так что это будет 66, и здесь у нас есть 65 плюс немного минус большой, который будет, я не знаю. Но это будет точно разрыв между заглавными буквами и и более мелкие буквы, так мы собираемся, чтобы получить малое а, не так ли? Да. Так это будет распечатать характер, который является точно, это один. Хорошо? Есть вопросы? Здесь мы имеем кучу разные Типы числовых переменных. Мы уже говорим о междунар. Поплавок это просто способ to-- это действительно Забавно, потому что, когда я впервые узнал, программировать назад в день с Python, первая программа, я когда-либо пробовал писать, я увидел, что там было тип называется в и тип называется поплавок. И поплавок был для всех действительных чисел. Тогда я спросил, почему Я никогда использовать Int тогда? Потому что, если я могу использовать все действительные числа с плавающей точкой, Я бы просто прекратить использование целыми, не так ли? Потому что реальные цифры так же, как более общий. Оказывается, что это не имеет место в компьютерах потому что они по существу разные вещи. Так чисел и плавает, операции, которые вы делаете с ними существенно отличаются, потому что пути, что они хранятся, хорошо? Мы собираемся поговорить немного немного больше о том, что в одну секунду. Так дважды просто больше поплавок. Обычно в большинстве систем, поплавок четыре байта, так же, как междунар. И дважды в восемь байт. Долго долго на самом деле всего лишь символ что вы добавляете к типу как междунар. Вы говорите, что давным-INT, как это. Давным INT х, чтобы сделать его больше. Таким образом, в большинстве систем, что даст восемь байт вместо обычных четырех. И вы можете упасть в, так что он может просто сказать долго долго, и что работает слишком, ОК? Вы также можете делать другие вещи, как неподписанных INT, или снова только без знака также будет работать. И, что бы сделать х быть переменной как все положительное, так что вы не можете на самом деле имеют отрицательный Цифры в пути, что мы видели здесь. Так следующий замечательный с плавающей точкой и точность. Это одна из причин, почему вам хотите использовать целыми, а не плавает, потому Интс 100% точным, не так ли? Это именно то, что число. Для плавающих точек, если вас сказать ответ равен 1 над 10-- Я, оказывается, есть точная Программа здесь, float.c. Это выводит до 20 знаков после запятой. 1 делится на 10, и что обычно составляет 0,1, не так ли? Но вот если мы делаем плавать, а потом мы запустить его, мы видим, что это не совсем 0,1. Это 0,149-то. И почему? Потому что вы не можете на самом деле представляют собой каждый единственно возможным реальное число в памяти потому что есть несчетное многие из них. Так что мы технически только в состоянии представляют собой конечное количество из них с конечным количеством данных. Но это действительно интересно. Теперь это умоляет Вопрос о том, как вы бы идти о представляющих это с битами, не так ли? Так как хранятся плавает? С целых было легко. Но с поплавками вы хотите Для максимального увеличения, и вы хотите, чтобы иметь возможность представлять Огромные номера и очень маленькие номера, как 0.000001 одновременно. Итак, еще раз, та же игра. Кто-нибудь есть идеи, как мы могли идти о представляющих поплавок в памяти? Просто выбросить что-нибудь. Да, пожалуйста. АУДИТОРИЯ: [неразборчиво], как если это было два целых и один будучи [неразборчиво] и одно существо все после запятой. Габриэль: ОК, круто. Так два разных числа. Вы можете иметь 12,45, так что это 12 и 45. Хороший. Что прежде чем вы собираетесь говорить? То же самое? Да? АУДИТОРИЯ: [неразборчиво] обозначения где вы отделить базу. Габриэль: Научно обозначения, да, это, как правило, то, что происходит. Так что это то, что называется мантисса. Вот что на самом деле число, а затем показатель степени просто где запятая, не так ли? Так что это будет что-то вида 1, 2, 3, 4, 5 раз 10 в минус 4. Я просто понял, that-- да, точно. И тогда это 10 в минус 4 является будет определять, где запятая, ОК? В Бразилии мы используем запятую. Вот вы, ребята, использовать точку. Так точка. И это здорово, потому что тогда вы можете сосредоточиться много ваших битов на этого парня здесь, на мантиссы, и тогда это будет фактическая точность. И вы можете сделать это либо в десятичной или в системе, основанной двоичной. Существуют различные способы осуществить это. Вопросы? Да? АУДИТОРИЯ: Сколько мест после десятичной [неразборчиво]? Габриэль: Это сложный вопрос, потому что это никогда не действительно на 100% точным, потому что, как вы видите здесь, на некоторые номера это 100% точным. Я считаю, если мы ставим 0,5 здесь, это будет 100% точным. Это будет 0,500000. Так что в этом случае, это прекрасно. Но в других случаях, это гораздо менее совершенным. По моему опыту, как до четырех, пять знаков после запятой довольно точным. Если вы используете двойной, он собирается быть способ точнее, чем, ОК? Роб Боуден: Так просто бросить более определенный контекст на поплавках, Я не помню, 100%, как в Спецификация поплавков на самом деле работает, но я всегда помню, что плавает начнете получать грязный. Таким образом, идея в том, что, когда вы получаете действительно, действительно большие числа или очень, очень малые числа, мы начинаем все хуже и хуже дифференцировать между двумя близкими поплавков. Так как мне нравится думать о том, с точки неточности плавающей, Есть два поплавки, что если я пытаюсь указать их в С, несмотря на то, что они разные цифры, они собираются быть интерпретировать как тот же номер, потому что мы не можем хранить их по-разному. Мы должны использовать те же биты. И поэтому, когда мы доберемся до действительно, действительно большое количество, говорить, как 10 к 300 или что-то, что это на тот момент что от 10 до 300 или 5 раз 10 в 300 не могут быть дифференцированы от 7 раз 10 в 300. Так что это довольно большая разница между двумя числами. Но затем, когда вы получаете вниз в нормальных вещей дальности, Вы, как правило, довольно хорошо дифференциации. А потом, когда вы садитесь на самом деле мало, вы также получаете довольно плохо снова. Так как целым букетом 0.0000, это становится довольно плохо. Габриэль: Да, так быстро записку. Никогда не делайте этого. Никогда попытаться сравнить поплавки с помощью равных с равными, потому что даже если они почти же, почти такой же, не то же самое. Так что вы обычно делаете это вы вычтите им, принять абсолютное значение, что, и посмотреть, если это меньше, чем 0.0001 или что-то подобное, ОК? И здорово. Я знаю много людей, у некоторые фон на Яве, особенно те, кто сделал AP информатика, верно? И Java является языком что в основном базируется на C, у этого есть несколько очень большие разницы. Но для петель, и IFS, и все в таком духе что, они все же синтаксис. У меня есть несколько программ здесь, чтобы показать это. Так, например, простой привет мир. Это привет мир в С, что вам Ребята, безусловно, знакомы с, и это, и это один находится в Java. Таким образом, в Java есть это общественного класса, привет мир, и государственной статической силы Основной, и струнные аргументы. Струнные аргументы идут появляться в C в самое ближайшее время. Но давайте не будем идти туда еще. Сейчас у нас есть пустота здесь, а это означает, что главный не принимает аргументов. А то у нас System.out.println, и это вид эквиваленте для Printf. Здесь мы на самом деле не нужен обратный слэш н потому печати пер сделает это за вас. Это добавляет обратную косую черту н на конце линии. Но если вы идете в что-то вроде А для, вы можно увидеть, что они в значительной степени то же самое. Так инициализации, и состояние и обновление is-- я пропустил пробел here-- они в значительной степени то же самое, за исключением того, Java есть также несколько более высокого уровня вещи. Здесь мы можем сделать плюс я и Java автоматически сделать это, я здесь, который является целое число, в строку, а затем добавить две строки вместе. Здесь, в C мы должны сделать и% d. Линия здесь, для выглядит точно так же. И если мы посмотрим на то, если, МСФ Также выглядеть точно так же, верно? Так настоящие большие различия в тех вещах, которые вы видите здесь. Общественный статический, пустота, и Затем общественного класса, если. Так Java имеет то, что называется виртуальной машиной. И это очень сильно на основании каких называется объектно-ориентированного программирования, что является очень, очень распространены парадигма для программирования в настоящее время. И это классная вещь, что вы видите, что-то от ориентации объекта, в создании класса, а затем вам можно вывести объекты из этого класса. Мы не собираемся говорить слишком много о том, что в CS50, но это, безусловно, что-то действительно здорово, особенно если вы хотите пойти в Более сложный веб-разработки В конце курса, как представить окончательный проект и некоторые хорошие рамки и прочее. Поэтому в основном идея в том, что вам не хочу, чтобы повторно реализовать что-то, так вы создаете что-нибудь очень общий характер, как форма, а затем вы создаете различные формы от него, а затем из каждой из эти формы, вы создаете некоторые более конкретные формы в трех размеры или что-то подобное. И у них есть эта иерархия они наследуют от остальных, так все функции и все переменные, которые большая форма здесь имеет, все они будем иметь, и все они являются будет иметь, и так далее и тому подобное. Так вот основная идея. С не имеет, но C ++ действительно есть такой функцией. И Java находится под сильным влиянием по объектно-ориентированного подхода, так вот почему вы видите класс здесь все время. И другое дело, это виртуальная машина Java. Так что это, как мне кажется, это очень умная идея. Так что люди, которые изобрел Java сделал это они не хотели, чтобы компилировать свой код дважды если бы им пришлось запустить его в Windows, или Mac, или Linux, так что они делают будет буквально бежать что-то вроде прибора, но вы действительно не видите, что происходит. Таким образом, они запустить виртуальную машину внутри вашего компьютера, которые в основном, как мини-операционная система. И что операционная Цель системы в жизни просто запустить то, что называется байт-код. Поэтому вместо того, в C, то, как мы бы скомпилировать это сделать, если, а затем запустить ./if. Я забыл обратный слеш в. В Java, вы могли бы сделать первый Java C скомпилировать его, if.c. Это не точка Java C. Это. И тогда вам придется бежать не ./. Вы получите этот новый файл if.class, но вы не можете действительно запустить if.class теперь просто как мы делали раньше. Это не является исполняемым. Вы должны запустить. Вы должны кормить его в Программа называется Java, и что программа является виртуальной машины, а затем вы if.class, или, если. Да. И тогда это работает. ОК, так что это своего рода Виртуальная машина происходит. С не имеет, что, таким образом, если бы я был в поставить эту программу в машине ОС Windows, он не будет работать в С. В Java это делает. Вопросы? Прохладный. Вот если для супер разделе на сегодняшний день.