[Играет музыка] Дэвид Малан: Привет, всем. Это supersection CS50 в. Назначенные Разделы не будет начать еще на неделю. И поэтому сегодня, я здесь with-- МАРИЯ: Мария. Дэвид Малан: --to самом деле взглянуть на проблемы установить один, курс годов Первые недели материала, вам ориентироваться с CS50 IDE, немного из Linux, операционной системы, это работающих на IDE, а также взглянем на некоторые из перехода с нуля до C ведущих до проблемы установите один. Так что без дальнейших церемоний, в задаче установить один, Вы будете введен в CS50 IDE, который это веб-программирования среда, которую мы используем для того, писать программы. Он разработан, чтобы выглядеть очень напоминает типичного компьютера Система работает под управлением операционной Система называется Linux. Но это в так называемом облаке, что означает каждый в классе может на самом деле имеют его или ее собственный счет и использовать его, как хорошо. Так что большинство из вас, вероятно, никогда не использовали среда Linux, прежде чем или, возможно, даже среда командной строки. И командной строки среда отличается. Это все текстовые. Это все клавиатурные команды. И это не Mousing, не иконы, нет диалога окон, ни меню. Это чисто текстовый. Поэтому сначала, что это вроде чувствует, как шаг назад в плане сложности. Но он оказался намного более мощный, конечно, для компьютерной ученого, в конечном счете,. Итак, давайте взглянем. Вот я в CS50.io, через который Вы можете войти в CS50 IDE. И так же, как в пустом, есть три основные области в этом экране. Так на левой стороне, у нас есть что будет файл-браузер. И есть эта папка на сверху, что в настоящее время пуст право так как я избавился от всех своих файлы до supersection. И вот, когда мы будем сохранить C файлы, которые мы пишем. В правом верхнем углу, у нас есть место, где весь наш код собирается получить письменное. И в самом деле, если я нажимаю это плюс, это будет позвольте мне выбрать новый файл. И здесь я могу начать писать код на Си или действительно, любое количество других языков. А потом на дно, где его говорит jharvard @ ide50-- и ваш будет что-то сказать немного different-- Что это было называется? Окно терминала. Да. Таким образом, окно терминала так называемый командной строки Интерфейс, через который вы можете взаимодействовать с операционной системой. И сейчас, мы собираемся сделать очень мало использование this-- скомпилировать, чтобы смотреть на Сообщения об ошибках, которые мы видим, и запустить наши программы. Но в конечном счете, мы собираемся чтобы сделать гораздо больше, а также. И вы даже можете установить программное обеспечение и управлять рабочее пространство в CS50 IDE, а также. Но больше на этом в другой раз. Так что давайте идти вперед и написать очень простая программа просто пройти через разминки hello.c, которые, возможно, простейший программа, мы можем написать. Я уже открыл новую вкладку. Я собираюсь идти вперед и говорят включают в себя стандартные io.h. Тогда Int основной (пустоту). И тогда Е ("привет, мир" Обратная косая черта н, недалеко цитата, Закрыть скобки, и точка с запятой. Отлично. Так что теперь моя заметить окно без названия. Так что я очень быстро собираюсь подняться на файл, сохранить. И важно, что Я называю это «не привет." Таким образом, очень распространенная ошибка, особенно в задаче на один, это случайно просто назвать свою Программа "вода" или "жадным" или "Марио" или "кредит" и тому подобное. Но вы на самом деле хотите, чтобы что у вас есть расширение файла потому что это единственный путь, который компилятор, а также редактор кода знает, что ты на самом деле писать код C. Итак, позвольте мне идти вперед и нажмите кнопку Сохранить. И сейчас тоже, то, что CS50 IDE сделал для нас это также Синтаксис подчеркнул все. Так что это все стало очень красочные. И весь смысл что не работает. Это просто, чтобы привлечь глаза на концептуально различных частей из этой программы. Так что давайте идти вперед и скомпилировать. И я могу скомпилировать в нескольких отношениях. И в неделю один, то старой школы, как мы сделали это было буквально на командования line-- "лязг hello.c." А потом я попал Enter. И ничего не кажется, произошло в окне терминала. Но то, что сделал изменения в IDE? Где, опять же, просто означает, что IDE Интегрированная среда развития. Это причудливый способ сказать, это комплексное развитие среда для разработки программного обеспечения. Итак, что же изменится в интерфейсе? Что вы заметили это другое, Мария? МАРИЯ: Я заметил, что-то под IDE50 папку здесь. Дэвид Малан: Да. Так здесь не только у нас есть "hello.c." У нас также есть "a.out", который является своего рода немой название программы. Но на самом деле, это имя по умолчанию для Программа, когда вы просто скомпилировать код и не говорите компилятор какой файл для вывода. Так что, если я хочу, чтобы запустить это, я нужно сказать compiler-- или, скорее, мне нужно рассказать рабочее пространство, что я хочу, чтобы запустить программу под названием "a.out". Войти. И есть "привет, Мир. "теперь" ./ ". на самом деле важно. Даже хотя обычно мы только написать имена команд, когда это программа у Вас есть написано, вы хотите сказать, "./" потому что явно говорит Linux что вы хотите, чтобы запустить программу под названием "a.out", который в этом, где точка означает этот каталог, что я в настоящее время в, который, случается, называется рабочее место, "a.out. Потому что, если я только что сказал "a.out", Enter, Я иду, чтобы получить "a.out команды не нашел ", потому что computer-- потому что я придумал "a.out"; он не пришел с computer-- не знаю, где его искать, хотя это право у меня под носом, так сказать. ОК. Таким образом, мы могли бы изменить это быть "звон -o привет hello.c." И если я ударил Enter, какая программа это происходит на выход для меня? Что имя файла? Да, в спину. Это верно. "Здравствуйте." Таким образом, "привет" будет название программы потому что мы использовали так называемый параметр командной строки, который является только способ изменения поведения компилятор на самом деле выход конкретное имя файла. И в самом деле, если я увеличить , и посмотреть здесь, Теперь у меня есть не только "a.out" и "hello.c", но и "привет", а также. Так что теперь я могу сделать "./hello," Enter. И есть "привет, мир." Но и это lastly-- теперь будет конвенция мы используем на протяжении всей семестр, typically-- что вы можете также просто сказать "привет сделать." И в самом деле, это сказать, что это до на сегодняшний день, потому что он уже существует. Позвольте мне идти вперед и удалить с команда RM, как "a.out" - и сказать "удалить регулярный файл a.out"? Это просто означает,, вы уверены, что хотите удалить его? Я хочу сказать, да. А потом я собираюсь удалить "привет", но не "hello.c." Я собираюсь сказать "да" в явном виде, но "у" достаточно, как хорошо. А теперь обратите внимание, если я введите ls-- который, напомним, означает list-- это список всех файлы в моей папке. И в самом деле, если я увеличить , и посмотрите на левой верхней, это подтверждает, что то, что в этой папке, даже хотя это помечены как IDE50 здесь и не место для работы, это просто "hello.c." Так что теперь здесь, если я у "сделать привет", Enter, Теперь я вижу гораздо больше команду, но более сложные команды, что происходит чтобы быть полезным в ближайшие недели. И теперь я могу сказать, "./hello." Итак, давайте сделаем краткий обзор команды некоторые другие Linux. Тогда почему бы нам не сделать шаг назад и реально взглянуть на C более Как правило, переход от нуля С, а затем заключить с выражением в первой задаче в С. Хорошо. Так что я собираюсь идти вперед и только чистый до моей рабочей области Control-L только держать экран аккуратно. Но это не имеет никакого функционального повлиять иначе. Напомним, что мы уже видели несколько команд сейчас. Таким образом, мы видели лязг, которые, как правило вы не придется выполнять вручную больше. Мы вместо этого использовать марку. Но мы также видели, Ls, который показывает список файлов в моем каталоге. А теперь почему there-- есть два Файлы теперь, "привет" и "hello.c." Почему звезда или Звездочка после "привет"? Что это означает на основе на то, что мы видели в неделю один? Как вы думаете? Что означают звезды? МАРИЯ: For-- программы "привет"? Дэвид Малан: "Привет *". Да. О, да? О, исполняемым. Это верно. Так это означает, что "привет" является исполняемым. Так на самом деле, вот почему Я могу сделать "./hello." Отлично. Так что еще я могу сделать здесь? Ну, оказывается, что я могу Также создавать каталоги. Итак, позвольте мне идти вперед и создавать, например, "pset1" Каталог. И проблема установить параметры будет у вас сделать именно это, так что вам не нужно помнить сегодня. Но "MkDir pset1" кажется не имеют никакого влияния. Но снова, сообщение об ошибке как правило, хорошо. Так что, если я типа "LS" now-- ах, теперь У меня есть исполняемый файл с именем "привет," С файл с именем "hello.c." И тогда Слэш, так говорить, что это означает, является каталогом. Так на самом деле, теперь я хочу, чтобы открыть его. И я не дважды щелкните на нем, как в GUI, графической среде. Я вместо сказать "CD pset1." Войти. Ничего интересного не кажется, произошло, за исключением моей маленькой строке here-- это способ в Linux напоминать мне, где я нахожусь, так, что папка открыта. Это просто говорит мне явно в отличие от графически. И если я набираю "Ls", почему я вижу другое подскажите сразу, как вы думаете, когда я перечислить содержимое pset1? МАРИЯ: Вы, наверное, не есть что-нибудь в там. Дэвид Малан: Да. Итак, мы имеем, очевидно, не создали ничего там потому что я просто создал каталог. Теперь, если я хотел, чтобы создать для file-- Я, например, мог бы создать новый файл. И тогда я мог пойти в Сохранить и сохраните его как, как, "mario.c", если вы делаете стандартный выпуск PSET одного. А потом, как и любой Mac или ПК, просто выбрать папку "pset1, Сохранить. А теперь файл пуст. Но давайте увеличивать раз в течение секунды. Давайте сделаем Ls здесь. Теперь мы видим, "mario.c". Так что несколько других команд, которые стоит имея в виду, в течение time-- ясно, или Control-L является то, что я было удара; MkDir мы видели; гт мы видели, как хорошо, что для удаления или удаление файла. Остерегайтесь вы можете also-- и если вы посмотрите на электронные учебники, вы гт-ВЧ является очень распространенным способом сказать удалить папку, в которой вещи в нем. Просто супер, супер осторожны. -rf означает рекурсивно удалить все это Вы пытаетесь удалить и насильно удалить его. Так рекурсивный средства, если это папка с папка с папкой с папкой, удалить все из них. И насильно означает даже не спросите меня, да или нет, я уверен, что? Так что это супер опасный путь удаление много вещей быстро. Но beware-- слишком часто делает бесстрашный студент случайно удалить, скажем, PSET Один из них, например. МАРИЯ: А если они просто сделать -r, они собираются чтобы спросить их о каждом файле. Дэвид Малан: Какой умеренно раздражает. МАРИЯ: Да. Дэвид Малан: Так вот почему так многие из нас, самостоятельно входит, нахожусь в привычку использовать -rf. Но это опасно. Так покупатель, берегись. А потом мв это своего рода интересно имени. Так что это команда перемещения, которая чувствует себя немного странно потому что вы действительно можете использовать его для перемещать файлы из одного места в другое. Например, предположим, что я испортил. Предположим, что я создал новый файл для PSET. И я сохранил его как "greedy.c." Но предположим, я случайно сохранить его в IDE50-- так и в самой моей рабочей а не в pset1. Вы можете видеть, как много в верхнем левом углу. Там это "greedy.c." И есть несколько решений. Таким образом, одна, я могу использовать супер удобно способ просто перетащив его. И что будет на самом деле исправить эту проблему. Но сегодня, мы пытаемся смотреть на более тайные, но эффективные способы делать это. Итак, позвольте мне взять "LS" в pset1. И я вижу только "mario.c." Позвольте мне идти вперед и делать "CD ..". Так компакт снова изменить каталог. ".." Означает, что, хотя? Последний раз я сказал "CD pset1 "идти в pset1. Поэтому, когда я говорю "CD ..", что я делаю? В обратном направлении. Да. Так это будет так называемый родителей. Перейти на один уровень вверх, как выхода из папки. Так Enter. И в самом деле, посмотрите, что он сделал. Это тронуло меня просто в рабочем пространстве, а не из в pset1, который находится в рабочей области. И теперь, если я печатаю "LS", есть целая куча вещей. В есть "greedy.c". Так что теперь позвольте мне использовать мв буквально двигаться "greedy.c" в pset1. И так много команд Linux работать так же, как это. Они не принимают никаких аргументов или они принимают один Аргумент, или они взять два командной строки Аргументы и так далее. И в этом случае, это делать то, что буквально он говорит, хотя succinctly-- двигаться greedy.c в pset1. Войти. Ничто, кажется, не произойдет. Но если я делаю Ls снова, жадный нет. А если я "CD" pset1, Enter, а затем Ls снова, теперь он находится в нужном месте. Как в стороне, если для некоторые reason-- особенно если у вас есть прерывистый подключения к сети или вы ходить Кампус с крышкой ноутбука закрыт, а затем открыть его снова и ваше рабочее пространство кажется несколько из синхронизации, не составило большого труда. Просто перезагрузите ваш браузер окна, и он должен ресинхронизация так, что левая файловый браузер выглядит точно как в окне терминала. Не беспокоиться. Если вы сомневаетесь, перезагрузите страницу, так Пока вы сохранили файлы уже. ОК. Так мв также может быть использован для переименования файлов. И давайте взглянем на это последняя команда здесь. Так suppose-- и это супер общего, тоже рано. Некоторые студенты иногда создают файл называется, давайте say--, что еще один? Как "WATER.C." Так что я просто кричать, для нет оснований, во всех крышек. Но это не Правильное название для файла если только потому, что наша задача установить Спецификация не сказать вам, чтобы сохранить файл как все заглавные "WATER.C." Вместо этого, мы ожидаем, "water.c" в нижнем регистре. И, в самом деле, это проблематично, поскольку check50, программа вы собираетесь встретиться в задаче установить один, который автоматически проверяет правильность кода будет кричать на вас, если он не может найти "water.c" в нижнем регистре. Поэтому мне нужно, чтобы исправить это. Так много разных способов сделать это, первый из которых будет контролировать клик или щелкните правой кнопкой мыши имя файла и просто изменить Переименовать. Всего в порядке, чтобы сделать это. Но, опять же, сегодня, давайте сделать его немного любитель. Давайте использовать мв изменить "WATER.C", чтобы "water.c." Таким образом, вы также можете использовать первый аргумент переименовать его на второй аргумент если второй аргумент не в То, папка или имя каталога. Отлично. И, наконец, немного trick-- так что я нахожусь в Мой сайт каталога на данный момент. Если я хочу, чтобы попасть в PSET одной, Я, конечно, можете ввести "CD pset1." Но это так утомительно типа "pset1" или больше названия файлов или каталогов все еще. Так очень часто в Linux, то, что Вы можете сделать, это начать, набрав "PSE" и просто скучно, ударил Tab, и пусть компьютер показатель его для вас. Супер полезно, чтобы попасть в эту привычку. Единственная загвоздка в том, если у вас есть несколько файлов или папок, начинающиеся с буквой "р" или "PS", вы, возможно, ввести еще несколько, прежде чем компьютер знает, что делать. МАРИЯ: Мы хотели ярлыки. Дэвид Малан: это сэкономить много времени. А также, как мы уже говорили в лекции, вы можно прокручивать в истории, вверх и вниз, найти недавно выполнен команды, а также. Отлично. Так что теперь, давайте обратим наше внимание назад в простой программе, привет мир. Таким образом, мы собрали в этом точно. А теперь, почему бы нам не взять взгляд на типы данных а затем переход от некоторых соответствующие блоки Скретч С МАРИЯ: Высокий. Так что теперь вы начали написание программ на С, мы собираемся, чтобы начать говорить о типах и переменных данных. Таким образом, некоторые типы данных, которые хотел бы знать, начиная с сегодняшнего дня являются те, которые выделены синим цветом. Итак, мы имеем INT-первых, которая выступает за целое. И, что имеет целых, как вы может иметь guessed-- так 1, 2, 3, и любые другие целые числа что вы можете думать. Дэвид Малан: А также отрицательный. МАРИЯ: А также отрицательные, да. И 0. Тогда у нас есть поплавки, которые плавающей запятой. Так вот все реальные цифры которые имеют десятичной точки. Так 5,0, 5,2, и еще более цифры после десятичной точки, а также, а также отрицательные. Тогда у нас есть символ, который является символом. Поэтому я думаю, мы говорили о это в лекции сегодня. Но у нас есть письма, за example-- A, B, C--, которые могут быть сохранены как символ. Но тогда у нас есть гораздо больше символов которые могут быть сохранены как символ. А те, хранятся в виде ASCII. И тогда у нас есть логический, которые Булевы. А те, оценить, Правда или Ложные или 1 и 0, соответственно. Дэвид Малан: И напомним, что BOOL приходит из библиотеки CS50. Так что это не встроенный в С, но это супер полезно иметь понятие истинное и ложное. И даже если вы может think-- забавный факт. Логическое значение технически необходим сколько битов, действительно, представлять Правда против неверно? Сколько битов вы думаете, Вы должны были бы, максимально? Да, только один. Так что получается, что C не могу дать вам только один бит. Наименьшая единица измерения Вы можете получить восемь. Так что это немного расточительно они вы используя весь байт, или восьми битов, представлять Правда или Ложь. Но это только так, как это реализованы в C библиотекой CS50. Мария: А потом те, которые мы не буду говорить о так широко Право now-- дважды, это для больших поплавков. Длинные длинные и короткие Также для целых чисел. Дэвид Малан: Действительно. В хакерской издания PSET одной, мы на самом деле использовать длинные долго. Но для стандартной версии, он не должен быть необходимым. МАРИЯ: Прохладный. ОК. Так operators-- вы должны быть вероятно, знакомы с большинством из них. Добавление +; вычитание, -. Для умножения, мы имеем *. Так что не Х, что мы обычно используем. Отдел, у нас есть обратную косую черту. И по модулю наш последний оператор, мы будем говорить о прямо сейчас. Это оператор, который позволяет взять остаток от деления. Так что, если у нас есть 4% 2, 4 делится на 2, 2 с остатком 0. Так 4% 2 0. 4% 3 1. 4% 5 4, как вы уже догадались, может. И помнить при использовании всех этих операторам использовать правила PEMDAS. Дэвид Малан: Так ясно, если вы сделать 4% 2, почему это 0, точно? МАРИЯ: Потому что 4 делится на 2 2 с остатком 0. Так модулю дает нам, что остаток как противоположность результате разделения. Дэвид Малан: И в самом деле, то, что мы найдем это полезно для, что в некоторых проблем это не обязательно одно, если вы хотите иметь Эффект ограничивая себя в диапазоне чисел как 0 через что-то, Вы можете использовать по модулю, чтобы обернуть вокруг ранее, чем как 2 млрд или 4 млрд значение, мы говорили в лекции. МАРИЯ: Да. И даже в "жадные" мы могли бы. Дэвид Малан: Да, в Проблема установить один, а также. МАРИЯ: Да, приятно. Дэвид Малан: Хорошо намек. МАРИЯ: Извините. Логическое expressions-- так для логических операторов, мы будем говорить обо всем из них, которые вы видите здесь. Так что сейчас у нас есть два равные знаки указаны для равных. Так что те для сравнения. До сих пор мы видели только один равняется знак. Вот когда мы назначаем значение переменной. Так что, если мы видели Int N = 5, то мы назначили 5 к переменной п. Но если мы хотим использовать == для сравнение, мы можем проверить, если п == 5. А если н == 5, то, что это правда. Так логические операторы позволит нам, в основном, оценить логическое выражения в Правда или Ложь. Так что не equals-- у нас есть восклицательный знак, а равно. Таким образом, мы могли также проверить, если п не равно 5-- так н! = 5. Менее, меньше или равно, больше, больше или равно, а то у нас логический И и логическое ИЛИ. А те, позволяют оценить несколько логических выражений вместе в основном собраться вместе, как одно целое логическое выражение. Так что, если мы хотим, чтобы найти номер, говорят, что больше, чем 5, но менее 15 в то же время, мы бы использовать логический оператор, чтобы увидеть, если п больше, чем 5 && н менее 15. Дэвид Малан: И вот, слишком, это действительно легко рано, чтобы случайно использовать только один амперсанд или один вертикальная полоса. И, надеюсь, компилятор будет кричать на вас, потому что они на самом деле имеют очень различное значение. Для тех, кому интересно, они для битовых операций, работающих на отдельных битов. Но вы хотите, пару из них здесь. И супер важно, что Первый, знак равенства, который является равенство оператор в в отличие от оператора присваивания. МАРИЯ: А вертикальная бар расположен между Удалить и возвращения. Дэвид Малан: Да. На типичной американской клавиатуре. МАРИЯ: Да. Итак, давайте прыгать прямо в условные операторы. В пустом, вы, уже видели, наверное, если заявления, которые позволяют вам проверить, если что-то верно, то сделать что-то еще. Таким образом, вы, возможно, хотели чтобы проверить, если ваш спрайт касаясь некоторых других спрайт или граница экрана. И тогда вы, возможно, хотели, чтобы закончить игру или сделать что-то еще. Так синтаксиса, что «если (условие)." Так что, если ваш спрайт касаясь что-то, то не находится внутри фигурных скобок. Тогда мы иметь, если-иначе заявления. Остальное позволяет нам делать что-то если условие, что мы проверить в начале это не так. Так что, если спрайт касаясь границы этого еще делать что-то еще. Так в противном случае сделать что-то еще. Тогда у нас есть короткий пример для этого. Так что, если (military_time <12), мы хочу PRINTF "Доброе утро!" Иначе мы собираемся Printf "Добрый вечер!" Простой пример. Дэвид Малан: Хорошо. МАРИЯ: Прохладный. Так что теперь у нас есть переключатель заявления. Переключатель заявления вообще может позволяют нам сделать много той же самой вещи что мы только что говорили о, если с заявлениями. Например, прямо сейчас у нас есть Общая форма переключателя заявление что позволяет нам принимать переменная называется п и сравнить ее с большим количеством различные значения, которую мы здесь назвал constant1, constant2. У нас может быть много больше. А те, которые называют случаи. Так что, если у нас есть переключатель statement-- и это работает только для integers-- у нас есть переменная в данном случае это п. Если переменная п равно constant1, мы будет выполнять некоторые фрагмент кода или что-то, что мы хотим сделать. И тогда мы бы сломать. Таким образом, разрыв означает, что переключатель заявление будет прекратить выполнение если п равна constant1, а затем ваша программа будет продолжаться. Это будет выхода из перейти заявление и оно будет продолжать делать что-то еще. Если, однако, п не равно constant1, то дело для constant2 будут проверены. Так, если п равно constant2, что другие фрагмент кода будет выполнен. А потом сломаю если равна ей. И тогда мы можем иметь also-- не обязательно, though-- вариант по умолчанию, что произойдет, если п не равно любой из случаев, что вы перечислили. И в случае, по умолчанию, мы также не нужен перерыв обязательно потому что коммутатор заявление будет знать, что необходимо прекратить после умолчанию случае, если это так. Дэвид Малан: Но стилистически, мы всегда ставим его там. МАРИЯ: Да. Дэвид Малан: Да. Так, особенно когда начинали, особенно если среди тех, кто менее комфортно, я бы лично просто рекомендуем придерживаться IFS и вернулись на Родину IFS-и если-иначе-если-вернулись на Родину и т.д., если только потому что они немного более простым. Это хороший оптимизация, или иногда даже эстетически это делает код более читаемым. И в самом деле, вероятно, середине семестра мы увидим проблему установить, где он просто выглядит лучше и легче читать на человека с помощью переключателя заявление. Но не беспокойтесь о цепляясь за это слишком рано. МАРИЯ: Да. Если у вас есть много если заявления, это может быть просто не очень читаемый. Это может быть не очень быстро для вас, чтобы пройти через это. Так отчетность переключения может быть очень полезно, как хорошо. А также, не remember-- не забудьте поставить перерывы в там. Дэвид Малан: Не помнить об этом. МАРИЯ: Потому что тогда вы может упасть через от одного случая к другому. Итак, давайте говорить, что случай constant1 не имеют о брейк в нем. Тогда мы могли бы провалиться внутри случай constant2. И мы не хотим, чтобы это сделать, если мы уже достигли случай constant1 и он равен п. Так, например, если мы имеем переменную п, который содержит номер класса, и мы хотим, чтобы посмотреть, что класс is-- если п равно 50, мы собираемся напечатать "CS50 является Введение в Computer Science I. " Тогда мы идем, чтобы сломаться. Вот и все. Если, однако, п равно 51, мы собираемся печатать "CS51 является внедрение информатике II ". Затем, опять же, мы собираемся сломать. Однако, если то положим 124, 61, любой другой номер, который вы могли бы думать о, или программа не будет признать, что. Так что собирается сказать: «Извините, я не знакомы с этим классом ". И это будет перерыв. Дэвид Малан: Таким образом, вы можете реально увидеть ПЧ, иначе, если еще идея здесь. Это просто разные синтаксис выражая ту же самую идею. МАРИЯ: Точно. Теперь у нас есть тройные операторов. Так тройные операторы три parts-- состояние, то делать, если условие истинно, а затем что-то делать если условие ложно. Итак, вы видите, в основном, синтаксис, что здесь. У нас есть знак вопроса, и то, что the-- мы называем это? Дэвид Малан: двоеточие. МАРИЯ: Колон. Спасибо. Сожалею. Итак, давайте посмотрим на наш пример с увидеть, если мы можем понять this-- class_num == 50. Так вот, мы видим наш оператор логическое == который сравнивает переменную class_num 50. Так class_num хранит целое число. И если этого числа равна 50, то мы собираетесь хранить "Дэвид Малан" внутри строки профессора. Если номер класса не равняться 50, "Давид не Малан" будет профессор. Дэвид Малан: Спасибо. И так это, кажется, соответствует что, вы скажете, на первый взгляд? МАРИЯ: Мне кажется, как если-иначе заявления. Дэвид Малан: Да. И в самом деле, это своего рода красивая один лайнер, так сказать, для реализации именно логика, если-иначе но делать все, что в один шаг. МАРИЯ: Точно. Да. Так что, если-иначе заявления могут занимают много места. Они могут быть слишком длинным для что-то же просто, как это. Таким образом, это может быть очень лаконичным и очень приятно. Так что теперь мы идем в глядя на выполнение что-то снова и снова, поэтому проверка для состояние несколько раз а затем продолжает делать то в то время как условие истинно. Таким образом, это приводит нас В то время как приятно в петлях. Слева, у нас есть наш первый цикл, а. Таким образом, хотя что-то верно, сделать что-то снова и снова. Поэтому убедитесь, что заметите, что наши состояние здесь проверяются на вершине. В то время как с нашим вторым loop-- мы называем что делать-то время loop-- мы делаем что-то, Затем мы проверяем, состояние. И если этого условия по-прежнему верно, мы вернемся и сделать это снова. Таким образом, главное отличие, где условие проверяется для. И код никогда не может быть выполняется, если условие не верно с то время цикла. В то время как с сделай время цикл, у нас есть код что всегда выполняется по крайней мере один раз. А потом, пока условие по-прежнему верно, мы можем вернуться назад и повторять снова внутри. Так почему же вы думаете, мы хотели бы использовать Сделай то время как цикл в течение время цикла? Правильно. Так что, если мы хотим, чтобы побудить Пользователь в течение некоторого рода вход, если мы хотим, чтобы попросить их ввести свое имя, мы хотим, чтобы, по крайней мере попросить их один раз. И если они введите что имя, мы не собирается просить их снова потому что мы уже знаем это. Но если они не входят их имя, или, если они введите что-нибудь очевидно, не имя, мы все еще хотим, чтобы продолжить с просьбой в течение их имени. Дэвид Малан: И в лекции у нас был один как это с положительной получить Int Например, там, где нет ничего, чтобы проверить сначала, потому что у вас нет даже получил письмо Int. Таким образом, мы хотим сделать this-- получить Int от user-- а затем проверить его, возможно, Снова и снова и снова. МАРИЯ: Точно. Для loops-- OK. Для петли могут позволить нам делать почти точно такая же вещь, как хорошо. Это на самом деле точно такой же вещь. Таким образом, нет ничего, что вы можете сделать с петель для что вы не могли бы делать с в то время как петли. Но для петель может показаться немного немного больше осложняется синтаксически потому что они имеют три части, что внутри было до просто состояние с в то время как петли. Таким образом, первая часть, что вы море, крайний слева, у нас есть "INT гномы = 0." Так что это, где мы инициализировать переменную. Тогда у нас есть запятой и "карлики <7." Так что это, где из состояние на самом деле. Так что то, что мы бы поместить только в то время loop-- "в то время как гномы <7." Здесь, который идет в Середина наш цикл. Таким образом, "dwaves <7." И тогда наша последняя часть "гномы ++," который является, где мы обновляем нашу переменную. Так важной вещи чтобы понять, что это будет идти через это цикл семь раз и выполнить семь раз. Итак, мы имеем семь гномы, и все они хочу сказать, "Я здесь, чтобы помочь вам, Белоснежка " потому что они готовы чтобы помочь Белоснежку. С, а петли, мы бы сделали инициализация и обновление не внутри состояния, снова, но либо до, либо внутри время цикла чтобы убедиться, что из-за we-- мы всегда должны те части. Таким образом, чтобы убедиться, что у нас есть им, мы бы до сих пор добавил их , просто не в круглых скобках. Дэвид Малан: И так это выглядит like-- В лекции, например, Я почти всегда используют, как, я и п и довольно скучные переменные. Похоже, что вы можете использовать более ловко имени переменных, слишком. МАРИЯ: Да, это на самом деле очень приятно использовать немного более описательные переменные потому что, особенно если кто-то еще читать вашу code-- может быть, вы грейдер или если вы сотрудничает с кем-то-- Вы хотите, чтобы убедиться, что они понять, что вы делаете. ОК. Так что это что-то очень funky-- цикл внутри цикла для. Я не знаю, если мы видели это раньше. Возможно нет. Но мы можем на самом деле имеют this-- так петли вместо петель. Так кто-нибудь, может быть, хотите, чтобы ходить мне через что здесь происходит? Дэвид Малан: Я возьму удар. МАРИЯ: Прохладный. Дэвид Малан: ОК. Так, spoiler-- мы хотим напечатать материал это в нижнем правом углу там. МАРИЯ: Верно. Ага-ага. Дэвид Малан: Таким образом, мы просто положить, что пример вывода есть. Так что я могу сделать вывод из верхний цикл, который вы перебора строк в внешний контур, так сказать. И вы перебора колонны с самого внутреннего цикла. И интуитивно, этот следует надеяться, имеет смысл потому что по своей природе каждая программа, что мы видели до, Printf, который является Функция мы используем, в итоге, имеет возможность печатать материал , по существу, строка за строкой. Мол, как только вы выводится новая линия, есть нет удвоения назад и что-то распечатать выше на экране, по крайней мере, не используя Printf, как это. И так в этой связи, что делает ощущение, что внешний контур следует иметь в виду строк так как для каждого данная строка, Вы будете хотеть, чтобы распечатать XXXXX, а затем перейти к следующей строке, XXXXX. Так строк в первую очередь. И затем в течение каждого ряд, печати столбцов. Если вы пытались сделать это в напротив, он, вероятно, не таким, как вы намерены. МАРИЯ: Да. Мы просто не могли вернуться к предыдущая строка с Printf. Дэвид Малан: И что интересно за сегодня поговорить о рамках, на самом деле, то, что ряд является INT который объявлен в верхней петли. Но обратите внимание, что до сих пор внутри, так сказать, фигурные скобки, что немедленно следует, хотя это технически не в этих фигурных скобках. Так строка в простор для Совокупность фрагменте кода, как внутри наружной петли для и внутри внутренний цикл. Но в отличие от, где это столбец в рамках? Переменная колонка? Да, только в внутри петли. И это нормально, потому что мы не открыть это за пределами его в фигурные скобки. Все, что мы делаем это распечатать новый линия в самом конце там. Так что на самом деле все в порядке. Таким образом, это имеет эффект, как он выглядит, делать три ряда и четыре колонки. МАРИЯ: Верно. Итак, сначала мы идем через наш первый ряд. И только в нашей первой строке, мы делаем четыре колонны внутри первой строки. Таким образом, мы распечатать четыре иксы. И тогда мы можем выйти для цикла, так как мы уже напечатаны четыре иксы. И мы печатаем новую строку. И тогда мы идем через Тот же самый процесс в течение еще двух строк чтобы в общей сложности три. Дэвид Малан: И стоит отметить, что это просто артефакт шрифта, то что выход образца кажутся гораздо выше, как будто там больше строк, чем столбцов. Но это только потому, что Х это выше, чем в ширину. Это все, что там происходит, плюс пробел между строками. МАРИЯ: Верно. Круто. Дэвид Малан: Ладно. Таким образом, быстрый взгляд на проблемы установите один, принимать какие-либо вопросы, а затем отложить? Отлично. Таким образом, в один проблема установить, есть три Основными проблемами, в конечном счете,. Но сначала, вы найдете что установить проблема Спецификация, как и многих из них psets этой осенью, будет ходить вас через несколько разминочных упражнений, указать вам несколько ресурсов что вы можете или не уже видели. Например, CS50 имеет набор шорты, которые являются короткие видео, не в отличие от этого, но, что очень тема specific-- может быть, пять минут, 10 минут в длину на петлях или на условиях или на алгоритмах или позже более дополнительные темы, а также. И мы, как правило вставлять те, в задачи наборы, так что студенты есть ресурс, с помощью которого рассмотреть материал, который может иметь уже пришли в лекции или раздела. Но этот путь, это более целенаправленной и более на кончиках пальцев. Мы также, как правило, для встраивания в задаче устанавливает вещи, называемые пошаговые. Таким образом, практически все примеры, которые я делаю в лекции, на сцене здесь, мы также расстреляли на камеру в содействовать более медленнее, более интимный прохождение мной на мой ноутбук из этого кода, строка за строкой так что в классе, мы будем часто бегло то или кого-то будет вставлять с ответить на вопрос. Но это не обязательно погружаться в для всех в аудитории. Таким образом, вы найдете код пошаговые руководства для большинства из примеров что мы делаем здесь, в лекции, так что вы может пройти через это в своем собственном темпе и перемотки назад или вперед или пропустить вообще, если вы хотели бы. Там часто несколько разминка вопросы, которые прошу вас разобраться в усилить этот материал и убедитесь, что вы удобные, прежде чем Вы переходите с остальной PSET. И тогда, конечно, есть сама PSET. И одна из вещей, мы совершенно сознательно сделать в CS50 почти каждый неинтересно или интеллектуально неинтересным механическая шаг, который Вы, возможно, придется сделать почти всегда очень хорошо документированы. В течение срока, мы будем начинают задавать риторические вопросы более как помню, как это сделать, или что? Но в целом, вы найдете что проблема наборы получите вас через механики о чем-то, так что интересные интеллектуальные вызовы, в конечном счете, оставляется вам студента. С учетом сказанного, Zamyla, которым мы продолжал в виду сегодня в лекции, является одним из наших давних сотрудников член, который также имеет пошаговые руководства на конкретных проблемах, таких как Марио Pset и жадный, хотя и не поливать в этом году. И это в те пошаговые, что она часто предлагает некоторые советы и рекомендации для как поступить, никогда не говорю вам, именно то, что нужно делать, но rather-- как состояние, если вы will-- дает вам по крайней мере, пара идей, так что до вас, В конечном счете, чтобы решить, как подойти к их. МАРИЯ: вроде как высокий уровень понимание того, что логика мы просим вас сделать. Дэвид Малан: Точно. И в самом деле, Zamyla-х пошаговые предназначены ответить на часто задаваемый вопрос о том, где я начал, особенно когда эти длинные технические характеристики немного сложной учитывая весь текст и образы, которые они имеют в них. Так water.c, вы найдете после того как вы завершили его, на самом деле относительно проста. Абсолютно куча из вас собирается ударить Ваши головой о стену, пытаясь чтобы выяснить, почему это не компиляции или почему он не работает правильно. Но как только вы закончите с ним и как только вы провел некоторое время боролся с любым из ошибок, которые вы могли бы иметь, Вы найдете, что это очень короткая программа. Это может быть сделано в течение нескольких строк кода, большинство из которых мы видели здесь, в лекции уже при вы собрать правильные блоки. И, как мы предполагаем, здесь, это будет спросить указать, сколько минут кто-то принимает душ на территории кампуса. Мы указываем на проблемы установить скорость потока воды в, как, душем низкого расхода голова, так же, как в клипе Seinfeld мы видели вчера или наоборот их. И тогда вы просто должны чтобы сделать немного математики, really-- арифметику с помощью C сказать нам, как многие, примерно, бутылки воды что эквивалентно, если мы принимая н-минутный душ. Теперь, в mario.c, это будет быть немного длиннее программы. Он по-прежнему не будет так долго. Всего несколько строк длиннее water.c. Но это будет возможность воссоздать старую школу Марио Пирамида из Super Mario Братья или некоторые последующие на. Это не будет выглядеть, как красивее или как красочные, как, что один там. Мы просто собираемся использовать маленькие хэштеги как у нас здесь, на экране используя текст ASCII. Но это будет приблизительно ту же идею. И это собирается быть осуществлять которые на первый взгляд кажется довольно просто simple-- напечатать простой пирамиды. Но есть пара характеристики здесь интересны. Обратите внимание, что в крайнем правом краю пирамида на самом деле имеет ширину два. Так что две равные высота колонны, которые делает его потребует немного немного мысли, чтобы сделать что вы получите, что именно право, а в отличие от просто прекрасно углом линия. Так что это немного углового случае но соответствует реальному игру. И это также сначала неочевидным взгляд, как печатать пробелы. Так что, когда я смотрю на Пример вывода here-- и это также в spec-- это вид выглядит как прямоугольник, а диагонали прямоугольник отрубили, и это только пробелы, так сказать. И так часто задаваемых Вопрос здесь всегда, хорошо, как я переместить хэштеги на правый? Или, как я распечатать пробелы? И это на самом деле проще чем большинство студентов думать. Правильно? Вы можете приблизить его визуально, просто нажав пробел один или два раза или три раза. И даже то, что с Printf мы почти всегда распечатать строку или Int или слово, как "привет, Мир "или серия слов, Вы также можете просто распечатать цитата, пространство, конец цитаты. И что будет на самом деле дать Вы пробел существует. Так что имейте это в виду и не overthink это. Вы действительно должны решить, строка за строкой по строке, не в отличие от вашего Например, Минуту назад, как многие из тех, Столбцы должны пробелы и сколько из них должно быть Hashtags. Это займет немного времени, но это в конечном счете, логическая головоломка в духе. МАРИЯ: Да. Но логика собирается строка за строкой будет очень полезно здесь. Дэвид Малан: Да. Я думаю, что пример кода вы gave-- даже хотя это не было полной программе. Вы все еще должны INT и основной силы и #include stdio.h, много материала из лекции. Но строительные блоки кажется, чтобы быть там. И тогда, наконец, что-то немного больше алгоритмическое. Так что получается, что любое время перейти в CVS или любой удобный магазин и кто-то вручает вам на кассир счета или монеты, как изменение, Оказывается, что они, люди, или не знают, что они это или нет, Вероятно, вы используете то, что называется жадный алгоритм, в результате чего, если вы задолжали, скажем, $ 21 в изменении, потому что по некоторым причинам Вы купили что-то очень недорогой с очень большой счет в CVS, это было бы действительно раздражает, если кассир дал вам 21 синглов, или, хуже Тем не менее, в целом много монет. Скорее всего, то, что разумный человек вероятно, сделать это они собираются чтобы захватить $ 20, а затем $ 1-счет, и вручить вам всего два счета в этом случае. МАРИЯ: Так они стремятся свести к минимуму изменения, которые они дают вам обратно. Дэвид Малан: Точно. И то же самое дело с монетами, а также. Если вы задолжали, скажем, $ 0,50, надеюсь, вы не хотите 50 копейки. Вы вместо этого хотите два кварталы, например. Теперь, это делает предположить что кассир достаточно каждой деноминации, которые он или она, возможно, захотите, чтобы дать вам. Но мы позволяют предположить, столько в задаче. И цель, в конечном счете, чтобы реализовать в C код жадный алгоритм. Таким образом, пользователь может ввести, сколько изменить он или она обязан с долларами и центов, своего рода плавающей точкой Значение наверное. И тогда вы должны сделать математику и выяснить алгоритмически, ну, сколько монет я могу дать Вы минимально дать вам именно такое количество изменений. Но там будет Несколько Хитрость здесь, верно? Как есть вся неточность вопрос. МАРИЯ: Точно. Так с плавающей точкой значения имеют погрешность. Разве мы говорим об этом в лекции сегодня? Дэвид Малан: Мы сделали последний раз в лекции. Мы говорили о неточности. И вы не хотите, чтобы обмануть пользователя о том, как много изменений он или она должен. И поэтому прохождение в проблема установить параметры, подумать, в конечном счете, чтобы как вы можете смягчить те неточность Ошибки, потенциально. Это можно избежать, конечно, для входы, мы говорим о. И в самом деле, pennies-- может быть, мы отложить до Zamyla, Я думаю, что для трюков там. Так в конечном счете, вы будете найти прогрессирование проблем на этой неделе, первый из которых довольно небольшой, затем средний, затем немного больше. Но все они используют здания блоки из этого на прошлой неделе, из этого supersection, Проблема установить параметры ставит вас на бесчисленных ресурсов. Но все-таки, если вообще изо всех сил, особенно среди тех, менее комфортно без предварительного фоне, прийти к офисной часов в понедельник и вторник и Среда и четверг. Перейти к CS50 Обсудить помощью Сайт Курса, через который вы можете общаться с персоналом и однокурсников. Но в конечном счете, я думаю, что Лучший совет, просто рано. Это не вид классе, что вы должны начинать psets в среду ночь, или еще хуже в четверг вечером. МАРИЯ: Мой лучший совет чтобы начали в понедельник. Дэвид Малан: понедельник. Так что, если вы еще не начали already-- нет. Но даже если не понедельник, то во вторник. Чем раньше тем лучше. И это причина, по которой Конечно есть так много поздних дней чтобы дать вам немного психологическое давление чтобы начать раньше, но до сих пор пусть вещи скольжения, когда вещи занять больше времени, чем вы ожидаете. МАРИЯ: А вы хотите, чтобы сделать использование Приёмные часы столько, сколько вы можете тоже. Дэвид Малан: Есть вопросы? Отлично. Ну, почему бы нам не отложить здесь?