Дэвид Дж Малан: Все Хорошо, так что это CS50. И это явно пятницу. И это конец недели один. Таким образом, вы, наверное, помните, что мы остановились, в прошлый раз, с захватывающим сортов. Причем мы не подвергайте эту ложь, что ни Неважно, что вы учили растет до, 1 делится на 10, не в То, 0,1 или 0,100 или 0,10000. В самом деле, если мы составляем этот Программа, как мы делали вчера, с, сделать неточность, а затем сделать точку, слэш, неточность, мы узнали, что это то, что 1 делится на 10 на самом деле. Так что на самом деле не совсем так. Но это делает намек на некоторые фундаментальное ограничение компьютеров. И в самом деле, среди вещи, которые мы собираемся сделать сегодня взглянуть на то, почему это имеет случилось, что последствия это имеет, как человечество не смогло чтобы понять это в некоторых очень серьезно situations-- Результатом установления который была довольно трагическая и expensive--, а также взглянем на то, как мы может на самом деле защищать против этих видов ограничений. Так интуитивно, пожалуй, почему 1 делится на 10, в соответствии с моего компьютера Здесь, не только 1/10, 0,10? Да. Что вы думаете? Зрительница: основание системы счисления отличается? Дэвид Дж Малан: The что? О, корень отличается? Так что не совсем. Это на самом деле более основополагающее значение для аппаратного обеспечения. Другие мысли? Да. Зрительница: Они представлять числа по-другому? Дэвид Дж Малан: Так they-- правой. Они представляют собой число по-разному. Неточно, по-видимому. Так что is-- Ну, иначе с чего? Или от кого? От нас? Зрительница: Да. Они не используют десятичную система [неразборчиво]. Дэвид Дж Малан: ОК. Таким образом, в некотором смысле, они не использовать десятичную систему. Под капотом, все, действительно, двоичный, и это связано, в действительности. Но это еще более простой Объяснение, чем это. Да. Зрительница: Они только так много битов. Они могут хранить только до определенного Степень, как с знаков после запятой. Дэвид Дж Малан: Да. Это то, что действительно становится на него. Оказывается, что компьютеры как правило, всегда будет только использовать ограниченное количество информации представлять что-то. Правильно? В конце концов, у нас есть только фиксированный объем пространства на жестком диске. У нас есть только фиксированную сумму ОЗУ или компьютерной памяти. И если у вас есть только фиксированная сумма-то, конечно, вы не можете на самом деле подсчитать до бесконечности или любой номер, который вы хотите. Вы, вроде, должны выбрать то, что спектр ценностей вы собираетесь поддерживать. И так, например, за неделю или два назад, когда мы говорили о ASCII, и мы говорили о 8 бит, или байт, так сказать, Наибольшее количество мы могли представляют 8 бит был то, что? 255. И мы можем представить 256 суммарные значения но если мы проводим одну из них на 0-- Ну, а если мы провести один из них на 0, то наибольшее количество есть, конечно, 255. Так что получается, что это случай тоже, в этом контексте. Мы начали говорить, в последний раз, о чисел с плавающей точкой, которые отличаются от целых чисел, в что они имеют десятичную точку и, надеюсь, некоторые номера после этого, но они слишком. Компьютер, как правило, только собираюсь использовать 32 бита, 64 бита, может быть, представлять значение с плавающей запятой. Так что, хотя мы выросли обучения математике и, зная, что вы можете абсолютно есть бесконечное количество чисел после десятичной точки, а не если у вас есть конечное памяти. Вы, вроде, есть, чтобы закруглить, или выбрать, какие номера вы собираетесь представлять. И поэтому вы можете думать, в каком-то смысле, этот являющийся ближайшим компьютер приближение к значению 1/10, что он может получить, только с 32 или около того бит. И это не просто 1/10. Например, если я изменить это 1/3, который мы думаем, еще проще. Так 1 делится на 3. Позвольте мне сохранить файл. Позвольте мне идти вперед и перекомпилировать его. И позвольте мне вновь запустить его. Здесь тоже, по-видимому, 1/3 не 0,3 а затем бесконечное число 3-х после этого. Вы должны это неточность в конце. Так мы, люди, правильно, и что Вы узнали, на самом деле, правильно, но мы натыкаясь против некоторых ограничений. И то, что я думал, мы делаем сегодня, является начать глядя на, откровенно говоря, Трагические последствия этого иногда, когда человечество не совсем реализовать для этой реальности, и эти ограничения. И мы увидим ряд виньеток от History Channel, который принимает взгляд на, как все пошло не так. Это долго около 8 минут, и мы вернемся после этого и взглянуть на точно что еще может пойти не так. Если бы мы могли затемнить lights-- [ПРОИГРЫВАНИЕ ВИДЕО] -Компьютеры, Мы все пришли к пониманию в часто расстраивает проблемы, которые идти с ними. Ошибки, вирусы, и программное обеспечение глюки небольшие цены платить за удобства. Но в высокотехнологичных и высокоскоростных военные и космические приложения, программы малейшая проблема быть увеличены в катастрофе. 4 июня 1996 года, ученые подготовили запустить беспилотный Ариан 5 ракета. На его борту научно Спутники предназначены установить, как именно Взаимодействует магнитного поля Земли с солнечными ветрами. Ракета была построена для Европейское космическое агентство и оторвался от своего объекта на побережье Французской Гвианы. -И Около 30 секунд в полет, они сначала заметил что-то происходит не так. Что сопла были поворота таким образом, они действительно не должны. Около 40 секунд в полете, ясно автомобиль попал в беду, и вот, когда они сделали решение уничтожить его. Диапазон офицер безопасности с Огромные кишки нажал кнопку, взорвали ракету, прежде чем он мог стать угрозой для общественной безопасности. -Это Был девичья вояж Ariane 5, и его разрушение взял разместить из-за ошибки встроенные в программное обеспечение ракеты. -The Проблема на Ариан было то, что был номер, который требуется 64 бит, чтобы выразить, и он хотел, чтобы преобразовать это 16-битное число. Они полагали, что число никогда не будет очень большой, что большинство из этих цифр в 64 битное число было 0 '. Они были неправы. -The Неспособность одного программа, чтобы принять вид номер генерируется другой был в корне сбоя. Разработка программного обеспечения стала очень затратная часть новой технологии. Ариан 4 ракеты были очень успешным, так программного обеспечения создано для того, был также использован на Ariane 5. -The Основная проблема в том, что Ариан 5 был быстрее, ускоряется быстрее. И программное обеспечение было не составили за это. -The Уничтожение ракеты был огромный финансовая катастрофа, Все из-за ошибки программного обеспечения минут. Но это был не первый время проблемы преобразования данных мучило современные технологии ракеты. -В 1991 с началом войны в Персидском заливе в первых, ракета Patriot испытал подобного рода проблемы преобразования номер. В результате 28 человек, 28 американских солдат были убиты и около 100 ранены, когда Патриот, который должен был для защиты от входящих бокоплавов, не удалось уволить ракету. -Когда Ирак вторгся в Кувейт и Америку запустил Буря в пустыне в начале 1991 года, Patriot ракетные батареи были развернуты чтобы защитить Саудовскую Аравию и Израиль из иракских ракетных атак Скад. Патриот это США, средней дальности земля-воздух системы производства компании Raytheon в. -Размер Перехватчика Patriot, Сам, о, долго примерно 20 футов. И он весит около 2000 фунтов. И это несет боеголовку about-- Я думаю, что это примерно 150 фунтов. И боеголовка, сам, это взрывчатое вещество, которая имеет фрагменты вокруг него. Кожух боеголовки предназначен, чтобы действовать как картечь. Исследованы ракеты осуществляется, 4 за контейнер, и транспортируются полуприцепа. -The Патриот против ракетной системы восходит по крайней мере, 20 лет. Первоначально он был разработан как зенитно-ракетного сбивать вражеские самолеты. Во время войны в Персидском заливе в первых, когда что война пришли вместе, Армия хотел использовать его для сбить бокоплавов, а не самолеты. Иракская группа не столько проблемы, но армия волновалась о бокоплавов. И так они пытались обновить Patriot. -Intercepting Врага Ракета путешествия в Маха пять собирался быть достаточно сложной задачей. Но когда Патриот был доставлен в эксплуатацию, Армия не известно о Иракский модификация, которая сделала их бокоплавы почти невозможно попасть. -Что Случилось, является бокоплавы, что шли в, были нестабильными, они были покачиваясь. Причина этого, был иракцев, для того, чтобы получить 600 километров из диапазон ракеты 300 км, взял вес из передней боеголовки и сделал боеголовка легче. Так что теперь, Патриот пытается прийти на ветру, и большую часть времени, подавляющее большинство из Время, было бы просто летать Скад. -После Системных операторов Patriot понял Патриот мимо ворот, они взорвали боеголовку патриота, в чтобы избежать возможных жертв, если он был падать на землю. -Это Было то, что видел, большинство людей, эти большие огненные шары в небе, и поняли, как перехватывает Скад боеголовок. Хотя в ночь небо, появились патриоты чтобы быть успешно разрушая бокоплавов, в Дахране, не может быть никакой ошибки о его исполнении. Там, радар система Патриота потерял входящего Скад, и никогда не запущен, из-за программного обеспечения недостаток. Это был израильтян, которые впервые обнаружен что больше система была на, тем больше время расхождения стал, в связи с часами встроенного в компьютере системы. -О За 2 недели до Трагедия в Дахране, Израильтяне сообщили Министерство обороны, что система теряя времени, что после примерно 8 часов работы, они заметили, что система была становится заметно менее точными. Министерство обороны ответил говорю все батарейки Patriot не оставлять системы в течение длительного времени. Они никогда не говорили, что долгое время было. 8 часов? 10 часов? 1000 часов? Никто не знал. -The Батареи Patriot размещены в казармах в Дахране, и его недостатки внутреннего часы, был на более чем 100 часов в ночь на 25 февраля. -Это Отслеживается время с точностью примерно 1/10 секунды. Теперь 1/10 секунды находится интересный номер потому что он не может быть выражается в двоичном, точно. Что означает, что не может быть выражено, точно, в любом современном цифровом компьютере. Трудно поверить, но использовать это в качестве примера. Давайте число, 1/3. 1/3 не может быть выражена в десятичной, точно. 1/3 0.333 происходит бесконечности. Там нет никакого способа, чтобы сделать это, с абсолютная точность, в десятичной. Это точно такая же Проблема, что произошло в Patriot. Чем дольше система работала, то хуже ошибка времени стал. -После 100 часов работы, ошибка В то время был только приблизительно 1/3 секунды. Но с точки зрения ориентация на Ракета путешествия в Маха 5, это привело к отслеживания Ошибка из более чем 600 метров. Это будет фатальная ошибка для солдат на Дахране. -Что Случилось, является запуск Скад был обнаружены с помощью спутников раннего предупреждения, и они новые, что Скад был в ближайшие их общем направлении. Они не знают, где он шел. -Это Был теперь до радара компонент системы Patriot, защиты Дахране, чтобы найти и сохранить трек приближающейся ракеты противника. -The Радар был очень умен. Это будет на самом деле отслеживания позиция по ветру а затем предсказать, где он, вероятно, будет, в следующий раз, то радар послал импульс из. Это называется ворота диапазон. -Тогда, Когда Патриот решает достаточно времени имеет передается вернуться и проверить на следующий место для этого обнаруженного объекта, она идет назад. Так что, когда он вернулся к неправильным Место, тогда не видит объект и не решит, что не было Объект, это была ложная обнаружения, и падает трек. Входящий Скад исчез с экрана радара, и несколько секунд спустя, его врезался в казармы. Скад убиты 28 и был последним одним уволен во время Первой войны в Персидском заливе. Трагично, что обновленное программное обеспечение прибыл в Дахране на следующий день. Программное обеспечение было недостаток было зафиксировано, закрытие одна глава в проблемных История ракеты Patriot. [КОНЕЦ ПРОСМОТРА] Дэвид Дж Малан: Таким образом, мы будем смотреть на некоторые аналогичные ограничения в только немного. Но сначала, давайте переход к вашему сведению несколько Вот. Так одно-- этот уик-энд, есть будет супер разделы, которые предназначены, чтобы вытеснить регулярно запланированные участки, которые пустят в неделю спустя. Взгляните на веб-сайте CS50 в для получения дополнительной информации о них. Они также будут сниматься и транслироваться жить для тех, кто не смог присутствовать. Проблема установить 1 на Сайт конечно уже, и мы взглянем на что в только немного. И рабочие часы тоже будет разместить этот понедельник по четверг. Так что это был самый канонический Программа, которую мы смотрели на последний раз. Это как простой Программа вы можете написать в C, и даже это немного смелое заявление. Правильно? Потому что очень много кажущаяся сложность этого. Итак, давайте взглянем на то, что некоторые из этих элементов были и затем попытаться обеспечить психическое модель, как Эти простейшие программы работать, а затем мы начнем взгляд на вещи еще более сложным. Так эта линия здесь, подчеркнул сейчас, в желтый, то, что мы говорили, в последний раз, что это делает для нас? Какова цель он служит? Любой из дальше назад? Да. Зрительница: [неразборчиво] Дэвид Дж Малан: Хорошо. Так что это дает вам доступ на команды, или давайте называют их функции, что кто-то еще писал, что объявлены, так сказать, в какой-то другой файл. Таким образом, мы будем видеть именно то, что .h файл это против файла .c, в конце концов. Но сейчас, просто знаю, что Printf, например, среди функций, которые были заявил в какой-то другой файл, где-то еще на жестком диске, что облака позволяет нам получить доступ к Printf и использовать его без необходимости заново изобретать что колесо себя. Между тем, главный. Что было аналогом основного, на прошлой неделе? Да. Зрительница: Зеленый флаг кнопки. Дэвид Дж Малан: Да. Царапины годов, когда зеленый флаг кнопки. Это как паззл что пинает вещи с. И так аналогично, сделал мир решил несколько лет назад, что в C, и куча других языках, если вы хотите, чтобы написать программу Ваш первый функция уже называть, главный. И он должен выглядеть следующим образом. Но мы вернемся, в другой раз, к чему, INT, и пустота, значит в этом контексте. В настоящее время, фигурные скобки являются своего рода из, как кусок головоломки формы нуля в который инкапсулирует несколько строк. И среди на линиях здесь, это одно здесь. Printf функция, цель которого в жизнь для печати отформатированную строку. И отформатировать, я имею в виду вас можно подключить значений заполнителей, и вы можете указать, сколько десятичной точки, сколько чисел для печати после десятичной точки и тому подобное. И Printf, конечно, занимает одно или более аргументов или параметров, иначе известный, более просто, в качестве входных данных. Так Printf, как много Функции, принимает входы. И эти входы обнял двумя скобками здесь. А внутри тех один вход. Это строка, как мы называли его, которая является просто последовательность символов, как слово, или фразу, или в целом эссе, даже в двойные кавычки. И это то, что происходит в влиять на Поведение Printf потому что, конечно, это просто обычная функция печати. Это не будет знать, что для печати, если вы не скажете ему. А потом, некоторые мелочи. Что мы говорим это странно последовательность символов? Да. Зрительница: Новая линия. Дэвид Дж Малан: Новая линия. Так что получается, вы не можете просто нажать, введите, когда вы пишете программу. Как правило, компилятор будет получить немного озадачены тем, что вы имеете в виду. Скорее всего, у вас есть в буквальном смысле говорят, дай мне новую линию здесь. И так / п то, что мы обычно вызвать управляющий символ. Так п, для новой линии. И компилятор знает что, когда он видит, / п, он должен фактически вызывают компьютер, В конечном счете, или Printf, в данном случае, распечатать фактический нового линия, как, попав в, введите, на клавиатуре. И, наконец, то, что мы говорили этот кусок синтаксиса для? Что она собой представляет? Да. Зрительница: [неразборчиво] Дэвид Дж Малан: Это просто конец линии. Это конец заявления. И понимаю, что мы не положить их везде. Мы, конечно, не помещайте их на концах каждой строки. Например, нет ни на Первая линия, нет ни на линии с, главным образом, нет ни после фигурных скобках, но вы начинаете видеть и получить знакомы с, где он призвал к. И это почти всегда после функции позвонить или заявление, некоторые действия что вы на самом деле принимает. И теперь знаем, особенно если среди тех, кто менее комфортно, эти виды глупых вещей что вы будете в конечном итоге случайно стучать Ваша голова к стене над. Потому что вы будете логически уверен, в какой-то проблемы Вы решили для задачи Набор и черта только не будет собирать или даже бежать. И так часто, на ранней стадии, это будет быть потому, что вы пропустили скобки, или вы пропустили точку с запятой. И так просто быть внимательными из этих видов вещей, и не пытаться получить разочарованы им, потому что очень быстро делает это стать старая шляпа. Но это очень легко получить разочарование на ранней стадии, в качестве результата. Так что теперь, давайте взглянем на то, как эта линия на самом деле работает а затем посмотрите на немного более сложным. Таким образом, мы имеем здесь, то умение рисовать на экране. И давайте предположим, что это мой экран компьютера, но я пишу, привет программу, и я не реализован, Printf. Кто-то реализовал, Printf. Кто хотел бы претендовать на реализовали, Printf? Если мы можем? Ладно, что ваше имя? СТУДЕНТ 1: [? Copal. ?] Дэвид Дж Малан: Copal, давай до. Давай до. Все в порядке. Итак, мы имеем, вот, некоторые теги имя, так как мы будем делать в небольшую игру это. И мы свяжемся с Вами, Printf. И если вы хотите, чтобы приехать сюда, то, что я только что нарисовали на экране, это довольно просто, есть я, это. Ладно, так, привет, меня зовут, Printf, если вы хотите, чтобы положить, что на. Все в порядке. И если вы можете идти стенд на экране компьютера как будто вы находитесь функция, пришел с этой компьютерной системы. И ваша цель в жизни на самом деле что-то напечатать. Но так же, как программы мы только что на экране, здесь, мы собираемся иметь, чтобы на самом деле дать вам некоторый вклад. А так, если мой вход, здесь, по-видимому, то, что передается PRINTF, давайте вид издеваться его, как это. Я собираюсь написать на буквально бумажка, "привет, мир", Обратная косая черта Н. И быть понятно, что Я только что нарисовали на этой бумажке, выглядит как это. Так что, когда я запускаю эту программу, и это желтая линия кода запускается на выполнение, Это как если бы я, программы привет, я передав часть вход с с функцией что кто-то написал. И если вы, с вашим пальцем, мог на самом деле, с пальцем, рисовать на экране то, что это вы были переданы, эффект в конечном итоге это точно узнать, что на экране. И маленький уголок случай. И хорошо, что мы не должны видеть The, новая линия, в этой точке. Было бы неправильно для вас явно нарисовать символ новой строки. Но если мы продолжали писать слова на экраном, они будут в конечном итоге ниже. Так что спасибо вам большое, но придерживаться здесь только для одного момента. Теперь нам нужно одно другое Работа на общественных началах, если бы мы могли, что собирается должны играть роль of-- Это только люди, в оркестре прямо сейчас. Как about-- ОК. Прямо здесь. Давай до. Как тебя зовут? СТУДЕНТ 2: [? Ivay. ?] Дэвид Дж Малан: Извините? СТУДЕНТ 2: [? Ivay. ?] Дэвид Дж Малан: Итан, давай до. Нет? Разве я что неправильно, даже после сказал, что это в два раза? Давай до. Трудно услышать здесь. ХОРОШО. И я очень жаль, что ваше имя? СТУДЕНТ 2: [? Ivay. ?] [? Дэвид Дж Малан: Ivay. ?] ХОРОШО. Сейчас, если вы не ум, вы GetString. СТУДЕНТ 2: ОК. Круто. Дэвид Дж Малан: Так что, если вы хотите стоять здесь на мгновение, давайте взглянем на немного более сложная программа, что в настоящее время имеет три строки кода. Итак, мы имеем один, назовите свое имя, используя Printf; два, призыв к GetString, сопровождается назначением на Переменная называется, строка с, или называют лет; а потом еще вызов, Printf, но на этот раз с двумя входами. Таким образом, мы уже сделали состояние Ваше имя, вернее, мы в уже сделал звонок PRINTF. Так что я собираюсь написать, государственных свое имя. И так, что я собираюсь пройти, Printf, в мгновение, это довольно просто, это. Так что, если вы хотите, чтобы идти вперед и делать это на экране, это ваш вклад в настоящее время. Все в порядке. И забудьте строку, у нас теперь есть наша собственная строка кода здесь. Таким образом, в, GetString, мы должны на самом деле назвать, GetString. Так ваша цель в жизни, чтобы просто ходить из в оркестр, если бы вы могли, и получить чье-то имя. Но давайте дать вам то, чтобы положить его на. Если вы хотите, идите вперед и получить строку, получить чье-то имя на том, что бумажка, если бы вы могли. Все в порядке. И мы видим, в мгновение, чье имя мы получаем. Между тем, что я собираюсь есть готов, это чистый лист из бумаги, в которых, я собираюсь хранить любое значение его является то, что GetString возвращается ко мне, Я, будучи переменная строка называется, с. Все в порядке. Так что вы здесь? Ник. Все в порядке. Итак, мы имеем имя Nik здесь. Так что это то, что в буквальном смысле был возвращен для меня, так сказать, по GetString. Я, в настоящее время, я собираюсь выполнить левой стороне этого выражения, где я просто скопировать вниз, для сегодняшних целей, Ник. Так что теперь, у меня есть переменная называется, с, хранения имя для Nik. Я уже передал Printf, предыдущий аргумент. Но в нашем третьем и окончательном линии Код, я на самом деле нужно руки Printf что-то немного different-- "привет,% s," обратный слэш п. И поэтому последняя строка я собираюсь чтобы send-- последнее, что я собирается записать сейчас, заключается в следующем. Таким образом, две строки кода, или а в последней строке кода, призывы к двух inputs-- Один из них, это, и два, это. Так что, если наша функция Printf Теперь можно принимать их в качестве входных данных, позвольте мне очистить экран для вас. На самом деле нет, вы можете пойти вперед. Мы оставим его, поскольку он находится на той же самой программы. Мы должны увидеть, привет, Ник. Все в порядке. Так что это было довольно мало обручи, чтобы прыгать через, просто писать, укажите ваши имя, и, привет, Ник. Но эта простая идея передачи сообщений, входного и выходного мимоходом получения, именно модель, которую мы будем иметь даже для самых сложных функций. Так что спасибо вам большое вам обоим. У нас есть прекрасный стресс Мяч здесь для вас. И спасибо нашей GetString и PRINTF добровольцы, так. Спасибо. Все в порядке. Спасибо вам обоим. Таким образом, мы говорим о до сих пор, в основном, о строках. И выясняется, что на самом деле С может понять несколько различных типов данных. В самом деле, давайте Посмотрите на эти здесь. Так C, и много языков, понимать вещи, называемые символы. Полукокса, как правило, один байт, или восемь бит. И это представляет собой один символ, как буква A, или капитала Письмо, или строчная буква А, или восклицательный знак, или любой символ, вы можете печатать на клавиатура, а иногда и больше. Мы также случится увидеть поплавки. Поплавок, вообще, А 32-битовое значение, или четыре байта потому что снова, один байт восемь битов. Таким образом, поплавок значение с плавающей точкой, что-то с запятой. И в самом деле, вот что фильм был разговор о том, когда они говорили о плавающей Значения точек, некоторое фиксированное число битов используется для представления вещественного числа. Но есть также вещи, называемые двойники. Они существуют в Java, если вы взяли АСУ ТП, и двойной, как имя, к счастью, предполагает, в два раза больше, как поплавок. Это все еще действительное число, он просто имеет больше битов с которой будет все более точным, или для хранения еще большего числа. INT легко. Мы говорили о том, что в последний раз. Это просто число. И это вообще 32 бит, или четыре байта. И так, если у вас есть, давайте теперь посмотрим, 32 bits--, и мы сделали это в неделю 0, очень briefly-- если у вас есть 32 бита, то, что самая большая Количество можно представить как целое? Дай или возьми? Это как 4 млрд, и это только если мы представляя только положительные числа. Если у вас есть 32 бита, и вы хотите, чтобы представлять отрицательные числа, а также, ваш диапазон, по сути, отрицательный 2 млрд на положительный 2 млрд. Но в целом, мы начнем при 0 подняться на 4 млрд. Вы не должны знать, точно, но мы можем убедиться в этом, на самом деле, если я просто открыть небольшой калькулятор, здесь. Я могу сделать 2 32, и это точно, как большой, сколько значений вы можете представляют, с 32 битами. И это примерно 4 млрд. Таким образом, мы будем держать, видя, что число в нескольких разных местах. Но если вам нужно больше номера, чем это, Оказывается есть то, что называется давным. И долго долго как правило, 64 бита, которые означает, что это на порядок даже больше, чем в междунар. Поэтому я не могу даже произнести крупнейшим номер, который вы можете представлять, но это заметно больше. Теперь, как в сторону, исторически, если INT 32 бит, и долго долго 64 бита, как большой длинный, не долго долго? Можно подумать, что это уже, чем Int но, возможно, менее длительный, чем длинный длинный, но это на самом деле зависит. И так получается один разочарований тоже с написания кода на некоторых системах, является то, что не все из этих типов данных есть заранее определенные значения. Иногда это это много битов. Иногда это что много битов. Таким образом, вы на самом деле нужно знать, иногда, какие аппаратные вы работаете программного обеспечения на. К счастью, другие языки и другие типы данных, которые в настоящее время существуют, позволит вам быть более точным. Ну, мы видели строку, и мы видели, логический, тоже но, оказывается, те, приходят Только с библиотекой CS50. Так что те, которые не построили в С. Те вместо прийти в этом файле, называемом CS50.h, что мы в конечном итоге отогните слоев. Но сейчас, они просто дополнительные типы данных. Логическое значение является истинным или ложным, и Строка представляет собой последовательность символов, как слово. Теперь Printf, мы видели, имеет заполнители,% S является одним. И вы могли бы, чтобы сейчас, вывести из этих примеров, других, как вы могли бы заполнитель для разных типов данных. Например, сделать предположение, если вы хотел, чтобы распечатать один символ с помощью Printf, заполнитель, вероятно,% гр. И если вы хотите, чтобы распечатать число с заполнителем,% I. % LLD это давным десятичное значение, но долго долго, так что карты до этого. И тогда% F для плавучих значение точки или для двойного, так что иногда они повторно использовать в разных контекстах. Таким образом, мы будем видеть и использовать некоторые из тех, кто в течение долгого времени. И Printf и другие функции также Управляющие последовательности поддержку других, а иногда, они необходимы. Так обратный слеш н новая линия. Обратная косая черта т, кто-нибудь хотите принять удар? Зрительница: Таб. Дэвид Дж Малан: Таб. Так что, если вы действительно хотите распечатать вкладку, не фиксированное количество пробелов, но фактически Вкладка характер, вы не попадаете, закладка, на клавиатуре, как правило,, вы на самом деле обратной косой т. Обратная косая черта двойной кавычки, почему я всегда хочу, что? Правильно? Почему я не могу Просто введите двойные кавычки на клавиатуре? Зрительница: Потому что, в противном случае, это будет думать, что это конец из нравится ваш печати [? Текст. ?] Дэвид Дж Малан: Точно. Помните, с нашей PRINTF примеры, когда мы проходили в PRINTF на входе, слева от этой строки ввода и справа от этого входа Весной, конечно, был двойной кавычки. Если ваш собственный вход имеет двойное Цитата в середине, что компьютер может потенциально запутаться, чтобы, делает эту двойную кавычку относятся к середине? Он принадлежит с левого? Он принадлежит с правого? И так, если вы хотите, чтобы сделать его супер ясно, у вас обратная косая черта двойной кавычки, так что это бежал, так сказать, и это не сплавлены что-то другое. И есть несколько других здесь, Обратная косая черта г, одинарные кавычки, 0, что мы можем увидеть в течение долгого времени, а также. А теперь, как насчет функций? Так действий, которые мы можем предпринять, таким образом, далеко на этом языке, С, хорошо, мы видели, Printf, конечно, и все из других на экране, вот, что мы будем использовать для Первый курс в несколько недель, только приходят, когда библиотека CS50. И они делают это намного проще, в С фактически получить пользовательский ввод. Оказывается, что в C, и откровенно на нескольких языках, это реальная боль в шее, чтобы сделать что-то простое, как быстрое пользователя для клавиатуры, для его или ее ввод. И поэтому эти функции делают его легче. И это также имеет ошибку проверки по всему, так что, когда вам Напомним, в среду, мы увидел, повторите попытку, предупреждение, когда я не сотрудничала, и я набрал слово, а не номер? Мы сделали тяжелую рано на убедиться, что пользователь взаимодействует. Но это всего лишь тренировка Колеса, что мы в конечном итоге, и быстро, снять. Таким образом, чтобы резюмировать, то, давайте взглянем, так же, как мы это делали с нуля, в некоторые канонические конструкции в С. Это должно, вроде из, быть беглый тур, просто так, что у вас есть ссылка и что вы видели вещи в первую очередь. Но тогда мы будем смотреть на фактическое кодирование использовать некоторые из этих строительных блоков. Так же, как в пустом, когда мы хотели заявления, сказать или подождите, в C, у нас есть функции, а, как Printf. Если мы хотим, чтобы выразить состояние в C, это похоже, в духе, к этому кусок головоломки, что посмотрел, как это в царапина. Но вместо этого, мы буквально написать, если. А потом, в скобках, мы поставили условие, где это условие, что мы будем звоните, опять же, логическое выражение. И опять же, это своего рода псевдокод. И, в самом деле, // это комментарий. Это просто английские слова к себе. Но это общая структура, если, состояние. Но мы увидим, бетон примеры в минуту. Если вы хотите, чтобы иметь двусторонняя вилка в дороге, так же, как мы сделали с нашей добровольцем на Среда, вы можете иметь, иначе, если. И если вы хотите, чтобы иметь третий и конечное состояние, или ситуация, по умолчанию, Вы можете иметь просто еще блок, там. И точно так же, с логических выражениях, Вы, может, и, их вместе. И мы увидели в среду, что это не один амперсанд, это два, по причинам, более низкого уровня, которые мы в конечном итоге увидеть и играть. Или-ющие вещи вместе на 2 вертикальные полосы. На клавиатуре США, это как правило, одним из ключевых с клавишей переключения выше Ваш Введите ключ или клавишу возврата. Тогда есть эти вещи, которые мы будем использовать, может быть, один или два раза. Они функционально эквивалентны то, что вы можете сделать с, если, иначе, если иначе, если еще, построить, но они называют переключатель. Они выглядят очень разные, но мы видеть в некоторых из нашего кода распределения, для будущего Поставленная задача, скорее всего, что иногда просто красивее способ выражения целое куча условий, не имея много фигурных скобках и много скобок и отступов. Но они не дают нам больше не энергии, чем мы уже. А теперь петли. А это, мы будем смотреть на чуть более медленно. Но тогда, мы начнем их использовать, особенно для тех, кто уже знаком. Это каноническое образом, если невероятно аркан образом, чтобы написать цикл в С Теперь петля в пустом было довольно проста. У вас есть, навсегда, блок. У вас есть, Повтор, блок с просто номер, который вы должны ввести в. И с, для петли, вы можете реализовать оба этих идей, но это немного более технический характер. Но, откровенно говоря, это также относительно простой. После того, как вы знаете, порядок операции, вы в буквальном смысле только собираетесь подключить значений и сказать компьютер, что делать. Так вот пример. Это цикл, который, вполне просто, считает от одного до числа через другую. И только взглянув у него, даже если у вас есть нет предыдущего опыта с этот язык, какой номер это, вероятно, начать отсчет с? ОК, 0. И я предполагаю, что это потому, что вы видеть, что есть более INT и я, который является переменной. Это инициализируется в 0. А потом, похоже, мы передаем Printf, значение. И в самом деле, я сделал немного опечатку здесь. Но это легко исправить. Позвольте мне добавить, я здесь. Теперь у нас есть PRINTF существо Прошло то значение заполнителя. И то, что происходит рассчитывать через? АУДИТОРИЯ: 50. 50. 49. Дэвид Дж Малан: 49. Так 50, на первый взгляд, кажется, правильно. Но, оказывается, будет наше состояние, что мы держим проверки. И мы собираемся остановиться, как только не я больше не меньше, чем 50. Так что это петля, наоборот, должны выполнить, так долго, как я меньше 50. Но как только она становится 50, или 51, или еще хуже, он должен остановится автоматически. Все в порядке. Так что на самом деле здесь происходит? Так что это порядок операции по петле. Один из них, у вас есть Так называемый инициализации. Этот желтый выделенный фрагмент кода выполняется первым, и это имеет эффект, что, за Среда, вы, вероятно, себе представить. Это создает переменную I и его магазины в этой переменной значение 0. Так я это 0 в этой точке в истории. Следующее, что происходит в этой конструкции, том, что условие получает проверены. Так что я проверить сразу, это я меньше 50? И, конечно, ответ на данный момент является, конечно же, да. Да потому, что я = 0, и это, безусловно, меньше, чем 50. Тогда то, что происходит, является то, что это строка кода, выполняются. И в самом деле, если есть несколько строк кода в этих фигурных скобках, Все они получают выполнен один за другим. И в силу здесь, по-видимому, чтобы распечатать число я, что будет быть 0, а затем 1, а затем 2. Но почему? Почему это получить увеличивается? Ну, четвертый вещь, которая происходит то, что этот синтаксис запускается на выполнение после запятой. я ++ является сокращенный способ говорить; взять значение I, и добавить к нему 1; и затем в следующий раз, добавить 1 к нему; и в следующий раз, добавить к нему 1. Так что, если мы продолжать идти, Что должно случиться Далее идет Я не собираюсь инициализировать я когда-либо снова. Если я все инициализации я до 0, этот пример никогда не кончится, потому что я бы застрял на 0. Но то, что происходит, так это что условие будет проверяться, строка кода будут выполнены, я будет увеличиваться, состояние будет проверяться, Код будут выполнены. И он продолжал на велосипеде снова, и снова, и снова, Пока я не индуцирует ++ значение 50. Состояние потом говорит, 50 менее 50? Ответ, конечно, нет, и так что весь код прекращает выполнение. И если у вас есть больше кода на экране внизу, это то, что произойдет дальше. Это выскакивает из этих фигурных скобках и продолжает печатать больше после этого. Таким образом, в настоящее время шутка, из фокстрота, что Вы, возможно, теперь понимаю. Это всегда забавно. Это как хихикает вид просачиваются, а потом понимаешь, вы не должны смеяться над юмора, как это. Но есть некоторые вынос здесь, педагогически, тоже. Так что получается, что я отсутствует кусок синтаксиса, или Фокстрот-х пропуская кусок синтаксиса здесь. Чего не хватает, что мы имели и в любой другой, например, до сих пор? Вернуться, есть, так что-то еще, что мы вернемся к скором времени. Чего не хватает, правда? Да. Зрительница: The инициализация [неразборчиво]. Дэвид Дж Малан: ОК. Так что да. Так на самом деле, это is-- Ну, и количество инициализируется наверху, или, скорее, заявил наверху. Так что это еще один способ сделать это. Но не в одной строке она действует, хотя. Как здесь? Зрительница: Это фигурные скобки? Дэвид Дж Малан: Да. Так фигурные скобки отсутствуют. Но этот код, я имею в виду, к их чести, на самом деле, синтаксически правильным. Оказывается, вы не нужны фигурные скобки если у вас есть только одна строка кода, Вы хотите, чтобы выполнить внутри цикла. Теперь мы всегда, в классе, и в весь наш код распределения, включают фигурные скобки в любом случае, просто для ясности. Но понимаю, что в учебниках и онлайн-примеры, Вы можете очень хорошо видеть вьющиеся подтяжки хватает нибудь. И это нормально, если то, что вы уже с отступом и предназначена это просто одна строка кода, а не несколько строк кода, потенциально. Все в порядке. Так связанной с вопросом неточность, это вопрос переполнения, в том смысле, что, как, у целых имеют ограничения на них так же, как с плавающей запятой? В мире плавающей точкой значения, мы можем быть только так точны, после чего, иногда плохие вещи могут случиться, и наши программы могут быть багги и ошибки. Теперь даже с целыми числами, Вы можете столкнуться с проблемами. Теперь целое не имеет десятичной точки или числа, следующие после него. Это просто натуральное число, как правило,. Так что может пойти не так с Int? Если я использую Int к Граф, что может пойти не так? Кажется, намного проще. Да. Зрительница: Если Количество попадает [неразборчиво] Дэвид Дж Малан: Да. Что делать, если вы считаете так высоко, что вы Не могу выразить, что на самом деле большое количество. Правильно? В какой-то момент, вы идете превышать границы из 32-битного значения или 64-битное значение. Теперь снова, я не уверен, как произносится 64-битное значение, но я знаю, с 32-разрядного целого числа, самая большая ценность это может быть, если это только положительно значения, примерно 4 млрд. Так что, если я пытаюсь считать до 5 млрд, что-то случится. Но давайте посмотрим, что на самом деле, может случиться. В мире целого Переполнение, где вы, в некотором смысле, переполнение Ёмкость число, что может случиться? Так вот двоичное число, это возврат к 0. Это все 1, и заполнители там, являются степенями 2, так что это двоичный файл. Таким образом, эти 8, 1 бит на экране. И если вы помните или Вы быстро сделать математику, какое значение представлены здесь с этих восьми битов 1? 255. И даже если вы не были уверены, в математике, вы могли бы сделать это. Или вы могли бы просто вид разума через него, подождите минуту, если я представляющих 8 битное значение, и я получил 256 возможных значений, но первый из которых является 0, Я просто знаю, что большой будет 255, и это то, что этот мог бы быть. Итак, пусть я пытаюсь добавить 1 к этому значению. Что бы вы сделали в классе Школа при добавлении 1, и это не очень подходит, потому что Вы должны нести 1? Что это число собирается чтобы стать, когда вы добавляете 1? Это станет 0. Правильно? Потому что, если бы у вас была более bits-- и я попробуйте, вроде, введите его here-- если у нас было больше битов, то, что мы могли бы сделать здесь добавить 1, и тогда мы бы получить это. Упс. Мы бы 1 бит всю дорогу сюда. Но если это конечное значение, это только 8 бит, и это предопределено с помощью компьютера, что 1 эффективно нет. Это просто какая-то падает с обрыва. И так, если вы добавите 1 к 255, то, что значение вы, по-видимому получить? 0. И так случайно чисел, и, возможно, непреднамеренно, в конечном итоге упаковка вокруг, как это. Так что может быть следствием этого? Ну, есть несколько разные вещи. Таким образом, одна, она в конечном итоге глядя как 0, непреднамеренно, но вы можете видеть рода, даже в реальном мире, лучше или хуже, проявления этой идеи предела. Например, любой из вас, кто когда-либо играл Lego Star Wars, Кто-нибудь случайно не знаете, максимальное число монет Вы можете собрать в Lego Star Wars? Возьмите догадку, основанную на сегодня наводящие вопросы. Это больше, чем 256 или 255. Это 4 млрд. Так что получается, а есть некоторые people-- некоторые прибегая к помощи подтвердил последний night-- получили 4 млрд золотых монет, или еще много чего, в Lego Star Wars. Хотя, по-видимому, есть способ обмануть игру, есть ошибка или особенность, которая позволяет вам только нарастать много-много точек. Но как можно большее Значение, по в этом скриншоте из кого я найти в Интернете, на самом деле, 4 млрд. Теперь, почему это? Это точно 4 млрд, вероятно, потому что кто-то решил, кто писал в эту игру, что они могли бы сделать 4 млрд, то, что-то, что-то, как значения я поднимал с калькулятором и раньше, но это просто немного чище для людей сказать максимальное количество из coins-- или шпильки, как они называют, что вы them-- может собирать это 4 млрд. И так, почему это? Как это LEGO игры реализации счетчика который отслеживает из Количество монет у вас есть? Они используют то, что? Зрительница: Он останавливается считая после 4 млрд. Дэвид Дж Малан: Он останавливается считая после 4 млрд, значит, вы можете вывод, как программист, что они, вероятно, с использованием 32 разрядное целое число. Как программист буквально типизированных, INT, в его или ее код, и это тип переменной, они используют для хранения чью-то код. Так что другие проявления из этих видов пределах. Так что я не играл в эту game-- и я читал на истории чтобы подтвердить, как much-- но в Оригинальная версия Civilization, где Вы, видимо, взаимодействуют друг с друга и могут вести войну или мир есть, Ганди должен был быть одним из самые мирные персонажи, как я понимаю, в первом Версия цивилизации. И в самом деле, по шкале от 1 до 10, его агрессивность была просто 1. Так так, мягко-либо агрессивный, по-видимому. Но в какой-то момент, вы можете по-видимому, установить демократию в вашем регионе. И, если вы установите демократию в вашей версии игры, то ваш уровень агрессии понижается. Это хорошая вещь. Люди более спокойный по-видимому, в этой ситуации. Но, видимо, кто-то сделал нет, если, состояние в оригинальной версии кода. Так уровень агрессии Ганди отправился из Положительный 1, минус 2, чтобы отрицательный 1, но игра не понять отрицательные числа. Так что случилось агрессия Ганди Уровень пошел от 1, 0, 1 до отрицательного, который имел эффект обтекание к тому, наиболее агрессивный характер в игре, при значении 255, по шкале от 1 до 10. И с тех пор, там было больше воплощения этой игре, и они сохранили его в качестве своего рода пасхальное яйцо, что Ганди по-видимому, ужасно агрессивным. Но это было результатом очень простая ошибка программирования в этом очень ранней версии игры. Сейчас более тревожно, более В последнее время Boeing 787 было зафиксировано как имеющие ошибка, не вид устройства вы особенно хотите, чтобы ошибка. И симптомы, которые я буду читать здесь, из статьи в Интернете, это было, модель 787 самолет что был включен постоянно для 248 дней, могут потерять все переменного тока, переменного тока, Электрическая мощность, в результате блоки управления генератором, ГПА, одновременно вдаваясь в Безопасный режим. Так что это было предупреждение выдается когда была обнаружена эта проблема. Это условие вызвано с помощью программных счетчика, внутренними по отношению к ГПА, так целое число или переменная, что переполнение после 248 дней непрерывной мощности. Боинг в процессе разрабатывает обновления программного обеспечения, что ГПА будет исправить небезопасное состояние. Так же, как ракеты сценарий, в котором они были какие-то переменной что рассчитывает, и подсчет, и подсчета, но постепенно переполнены границы его возможностей, Аналогично сделал проклятый самолет имеют переменную переполнения после достаточно времени бега. И так как язык-в-щеку работы вокруг этого вопроса это по-настоящему, перезагрузка, ваш самолет каждый 247 дней, так что память получает уничтожены и переменная возвращается 0. Но понимают, что это очень большой воплощение программного обеспечения, но особенно когда мы слышим о Apple, операционных систем происходит в автомобилях, и самостоятельного вождения автомобилей из Google, и любое количество воплощений программного обеспечения В нашей повседневной жизни, телевизоров и часы, и более, реализовать были окружены программного обеспечения, все из которых написана нас, людей. И, как мы все скоро обнаружите, это очень легко и очень типично ошибаться при написании программного обеспечения. И если вы не поймать их, некоторые плохие вещи могут случиться. Теперь иногда, некоторые смешные вещи могут случиться, или по крайней мере иногда мы знать, чтобы ожидать некоторого негодность. Так 0 делится на 0, из класса школа, как правило, плохо. Это определено. И получается out-- и давайте посмотрим, если мой микрофон может поднять это up-- что Apple было повеселиться с этим в последнее время. Так у меня есть iPhone здесь. Я собираюсь поговорить с Siri и попросить ее чтобы дать мне ответ на 0, разделенный на 0. Что 0, разделенный на 0? Сири: Представьте себе, что у вас есть 0 печенье, и вы разделить их равномерно среди 0 друзей. Сколько печенье имеет каждый человек получить? Видеть? Это не имеет смысла. И Cookie Monster грустно что нет печенья. И вы грустно, что у тебя нет друзей. Дэвид Дж Малан: Это своего рода неприятный. Так что это то, что как раз там сказал. Это неопределенным, это не определено, И действительно, многие языки программирования или, действительно, компиляторы определить, когда вы, в программе, попытаться разделить 0 на 0. Больше удовольствия, чем это, хотя, это что, по-видимому, Cookie Monster на Twitter в эти дни. И он ответил на это, с этим, что абсолютно очаровательны. Но давайте быстрый взгляд на несколько других конструкций, а затем положить некоторые из этих Код для использования, в хороших отношениях. Так что получается, кроме для петель, есть то, что называется в то время как цикл, в котором выглядит по-другому, и реализуется немного differently-- и мы в конечном счете видеть examples-- но в некотором смысле, это проще, потому что это не позволяют инициализировать и обновить пределах границы цикла. Вы все еще можете реализовать его. Таким образом, вы можете сделать те же самые вещи, с время цикла, как и для цикла, но ваш синтаксис, ultimately-- как мы в конечном счете see-- будет отличаться. Там даже делать то время как цикл, который на самом деле мало чем отличается, в этом в то время как для цикла и в то время как цикл всегда проверить их состояние во-первых, если Вы читаете эту вещь сверху вниз, это вроде похоже, что это собирается проверить это условие в прошлом, потому что это действительно последняя строка кода. И в самом деле, что будет полезно в некоторых программах, которые мы пишем, если вы хотите, чтобы просто слепо сделать что-то и в конечном итоге проверять состояние. Это не обязательно плохо. Если мы хотим переменные, мы можем сделать это в несколько различных способов. И мы увидели в Фокстрот мультфильм, один из способов сделать это, где вы объявляете переменную, как INT счетчик запятой, а затем, возможно, later-- следующий линия, может быть, 10 линий later-- вы на самом деле его инициализации. Таким образом, эти 2 строки кода объявить переменную типа Int и назвать его счетчик, так что это дает мне достаточно биты провести Int. А потом в конце концов, он ставит значение 0 в этой переменной. Это упорядочивает расположение 0 и 1 узор, что мы знаем с прошлой недели, представляет собой число, мы знаем, как 0. Или, честно говоря, вы можете сделать это гораздо более кратко, просто это нравится. Теперь мы также имеем Возможность вызова функций. И в самом деле, вот 2 линия программы или отрывок из него что позволяет нам на самом деле написать код, который получает строку из user-- много как наш волонтер на мгновение ago-- сохранения результата в переменная называется имя, и then-- так же, как с нашим волонтером с printf-- печатает эти значения передав два аргумента, то Строка, а затем переменной называется, имя, себя. Итак, давайте взглянем, прежде, чем мы возвращаемся к Марио есть, на пару сейчас, примеров. Я собираюсь идти вперед и открыть до, скажем, функция-0.c. И, как всегда, этот код доступны на веб-сайте Курса, так что вы можете играть вместе на домой и посмотреть на него позже. Но вот программа в это Суть, по линии 17, 22. Основная программа, где Программа всегда собирается начать. Эта программа, по-видимому, собирается распечатать ваше имя, двоеточие. Это то буду называть GetString, так же, как мы сделали с нашими волонтерами. А потом, это интересно, он собирается назвать PrintName. Оказывается, все это время, есть кажется, функция называется PrintName. Это печатает чье-то имя. Мы не должны использовать Printf от прошлых лет, есть PrintName. Но это заблуждение потому PrintName не оснащены С. Люди не сделал изобрести около 40 или 50 лет назад, Я сделал, вместо этого. И в самом деле, если я прокрутки дальше вниз, уведомления как я могу написать мой собственный функции в С. Мы в конечном счете объяснить, почему мы продолжаем говорить, пустота, в нескольких местах, но на сегодняшний день, давайте просто посмотрите на название. В строке 24, если вы хотите, чтобы создать свою собственную функцию, вы в буквальном смысле написать наименование функции. Я выбрал PrintName. В скобках, вы укажите, какие виды входов и сколько вы хочу эту функцию, чтобы взять. В этом случае, я хочу, чтобы принять 1 переменная называется, имя, и он собирается быть тип, строка, так что это чтобы некоторая последовательность символов. А потом, это program-- так же, как в пустом, Вы можете иметь пользовательский головоломки pieces-- будет иметь этот обычай поведение. Это собирается позвонить Printf проходя, привет, заполнитель, а затем он собирается подключить в любой пользователь называется. Таким образом, это пример того, что ученый-компьютерщик будет Вызов абстракция или функциональный Разложение, которые являются просто причудливые способы из saying--, если Вам нравится этот высокий уровень идея, как я хочу, функциональность, печатает чье-то имя, абсолютно вы может в буквальном смысле написать Printf, а затем пройти в аргументах, которые вы хотите, и программа будет работать, как это имеет, так как в среду. Но вы можете начать абстрагироваться от понятие печати имя. Вы можете дать ему имя, как PrintName, и это эта идея слоев от недели 0. Отныне я, и вы не должны знать, или все равно, как PrintName реализуется. Да, это использует Printf, может быть, это нет, кто знает, что использует? Какая разница? Теперь я говорю здесь, а здесь. И действительно, как наши программы получают более продвинутые и сложные, мы собираемся продолжать принимать как должное что существуют более низкие части головоломки уровень. Потому что мы писали их или кто-то другой, так что мы можем затем построить на них. Давайте взглянем на это вариант, для одной функции. Так что это одно немного больше расширенный, но, оказывается, что в библиотеке CS50, в есть только функция GetInt. Мы не думаю, что лет назад, чтобы реализовать функцию GetPositiveInt. И это немного раздражает, потому что если вы, ребята, пишете программу, где Вы хотите, чтобы получить положительный целое число от пользователя, Вы можете использовать абсолютно GetInt. И вы можете проверить с абсолютно состояние и, возможно, петля если INT больше чем 0 и кричать на пользователя если он или она не дает Вы положительное число. Но давайте строить этот Здание блокировать себя, а, пользовательских царапинам часть, если вы будете. Я собираюсь иметь программу здесь, в конечном счете, что я хочу быть в состоянии назвать GetPositiveInt, и я хочу быть возможность распечатать все, что ИНТ. Но это абстрагируется прочь сейчас. Это просто дали высокий уровень Имя, которое говорит, что он делает, что замечательно, потому что это очень интуитивным сейчас читать. А если я все равно то, что под капот, позвольте мне прокрутите вниз. И это немного пугает Во-первых, в особенности если это ваш первый Программа, но давайте взглянем. Я больше не говоря, недействительным, потому что это оказывается функции, так же, как GetString, может возвращает значение для меня. Они не просто для печати на экране, они могут на самом деле передать мне что-то еще. И если раньше PrintName, Я ничего не надо обратно. Мне нужно побочный эффект то появляется на экране, но мне не нужно человека передать мне что-нибудь. Здесь, с GetPositiveInt, как с GetInt, Я хочу, чтобы что-то быть переданы обратно. Так что я говорю нет, пустота, на линии 23, но INT, в котором говорится, эта функция что я пишу, называется GetPositiveInt собирается передать меня целое, а не ничего, не пустота. Между тем, он не собирается принимать никаких Входы, так что я, вроде, его вспять. Я не даю GetPositiveInt любой вход, я хочу, чтобы дать мне свой выход. И тогда то, что происходит сейчас? Так вот, как я могу объявить переменную. Я сделал это за пределами цикла, по причинам, мы в конечном итоге видим, но это просто дает мне 32 бит называется, п, а у меня до определения им хранить целое. И вот, что делать, пока конструкции, и это, почему это полезно. Буквально это сделать, в то время как п меньше 1. Итак, давайте посмотрим, что произойдет. Я распечатать, пожалуйста, дать мне положительный Int. Затем я получить Int, используя CS50-х функционировать и хранить в п. И потом, что строка кода, вероятно, запускается на выполнение следующий логически? Какой номер строки? Да, так 31. Вы не знаете это, пока у Вас нет сказали или рода умозаключениях, но это правда. Само сверху вниз а затем повторяет. Так что, если я набрала, скажем, в число отрицательный 1, является п меньше, чем отрицательный 1? Да. Потому что отрицательный 1 меньше, чем 1. Так что же произошло? Я собираюсь сделать это в то время как п меньше 1, так что я собираюсь вернуться к линии 28. И каждый time-- и давайте работать this-- сделать функция 1 скомпилировать его, и в настоящее время точка слэш функцию 1. Если я печатаю отрицательный 1, это будет держать на меня орать пока я не сотрудничать, потому что каждый из моих входов составляет менее 1 а если во время менее 1, Я собираюсь продолжать делать это. Если я, наконец, дать ему номер, как 50, К счастью, он говорит, спасибо за 50. Зачем? Потому что как только п не менее 1, я перестану застрять в этом цикле, и это новое ключевое слово сегодня, возвращение, в буквальном смысле делает. Так что я просто реализуется, в чувство, что эквивалентно GetString, где я возвращая к кто использует меня, некоторое значение. Это не должны быть строка, что это Int. Таким образом, простой, быстрый пример, но мы скоро увидеть некоторые более сложные версии еще. В самом деле, давайте посмотрим на цифровая одной, которая называется return.c. А это на самом деле немного проще. Так Цель этой программы в life-- давайте скомпилировать и запустить его, поэтому убедитесь, возвращение, точка слэш, return-- уведомление программа просто кубики значение 2. Это довольно глупо, трудно Код, не принимать какие-либо материалы, но демонстрирует другой функция, я написал сам. Так вот, я объявлен Переменная, называется х, типа Int, равно числу 2, совершенно произвольно. Это лишь некоторые пушистые печати. Это говорит х сейчас, например, и например, возведение в куб точка точка точка. И магия, по-видимому, в строке 21. Я звоню функцию под названием, куб, Я вручая ему лист бумаги с номером 2, написанные на ней, и то, что стоимость, математически, я хочу, чтобы выйти из него? Так же, как для проверки отсутствия ошибок? 8. Правильно? Я хочу 2 кубе назад, 2 сила 3, так 8 назад. Так где же куб реализованы? Ну, заметили, что это реализуется здесь. И, как и раньше, по логике, несмотря на то, что синтаксис, вероятно, очень новой для многих из вас, Я хочу эту функцию передать меня лист бумага с междунар на нем. Так у меня есть Int, в Название произвольно, но удобно назвать куб. Входной к нему, это п введите число, так что как я могу пройти в номер 2 на листе бумаги. А потом выясняется, С поддерживает математика, так что вы не должны х для времен, вы просто использовать звездочку для умножения. И это возвращает п раз п раз п, который является просто значение в кубе. Так куда мы идем со всем этим? Это, безусловно, беглый тур, будьте уверены, что в супер разделах и в задаче набор 1, Вы будете прошел через все это еще больше. И в проблему установить 1, мы переход из графического мире нуля к чему-то более командной строки в C. Но мы черпаем вдохновение из этого здесь игры от прошлого, в котором с помощью C и стандартная редакция р комплект вы реализуете пирамиду Марио. И в хакерской издание р комплект, если вы так решите избрать, Вы реализовать немного больше вызов пирамиду с двумя пиками. Вы также реализовать Алгоритм, жадный алгоритм. Оказывается есть некоторые интересная логика за процессом работает станции кассовый а на самом деле передачи кто еще изменение. Существует алгоритм, который довольно просто, что вы, возможно, даже схватить интуитивно, когда вы впервые прочитал it-- понимая, что то, что я всегда сделано в любое время я дал кому-то некоторые деньги back--, что позволяет всегда свести к минимуму количество бумажные купюры или металлические монеты что вы возвращая пользователю. И это, конечно, является убедительным потому что, если вы идете в CVS или еще много чего, Вы не хотите, чтобы быть переданы целая куча единиц или целая куча гроши. Вы хотите наименьшее монеты, наверное, можно. Наконец, вы также будете быть оспорены плескаться в мир воды а на самом деле получить оценку для отображения между темпами течения, как, вода в душе, только, сколько воды используется. И намек в ней, будет этот клип здесь, который мы в конечном в течение всего в 60 секунд, что рисует картину душевые головки низкого потока. [ПРОИГРЫВАНИЕ ВИДЕО] -Все в порядке. Я получил все здесь. Я получил Cyclone серии F, Гидра, Jetflow, Стокгольм Supersteam, вы называете его. -А Что вы рекомендуете? -Что Вы ищете? -Сильный человек. Мощность. -Как Silkwood. -Это Для излучения. -Это верно. -Теперь Что это? -Это Commando 450. Я не продаю что один. -Но Это то, что мы хотим. Это коммандос 450. -Нет, Поверьте мне. Это используется только в цирке. Это для слонов. -Я Ничего платить. -Что О Джерри? -Он Не мог справиться с этим. Он нежный. О да. [КОНЕЦ ПРОСМОТРА] Дэвид Дж Малан: Ладно. Вот если для CS50. Мы будем видеть Вас на следующей неделе. СПИКЕР 1: [? Скалли?], [? Ян,?] поскольку этот завершающий проект, что бы вы, ребята, придумали? СПИКЕР 2: Ну, мы дали это разнообразие мысли, и мы думаем, что лучший способ, целью которых СПИКЕР 3: Могу ли я? СПИКЕР 2: Да. Всеми средствами, на самом деле. СПИКЕР 3: Так что я думаю мы можем подвести нашу идею для OUTROS с одной word-- ничего. Дэвид Дж Малан: Ничего? СПИКЕР 3: Ничего. Дэвид Дж Малан: Что это значит? СПИКЕР 3: Outros являются ни о чем. СПИКЕР 2: Ну, я имею в виду, в философии, Я имею в виду, ничего не всегда что-то. СПИКЕР 1: Так what's-- что помещение? СПИКЕР 3: Так что это, как жизнь. ХОРОШО. Что ты делал сегодня? Дэвид Дж Малан: Я встал, было завтрак, и пришел на работу. СПИКЕР 3: Это Outro. СПИКЕР 2: Но, я имею в виду, не должен что-то случится с ним на the-- СПИКЕР 3: Нет, нет, нет, нет. Ничего не произошло. СПИКЕР 1: Так почему мы смотрим? СПИКЕР 3: Потому что что это Outro для CS50. Дэвид Дж Малан: Пока нет.