[МУЗИКА ГРАЄ] David J. Малан: Добре. Це CS50, і це це початок другого тижня. Так давайте почнемо сьогодні з помилкою. Помилка, звичайно, є помилка в програмі, і ви отримаєте дуже знайомі з цією концепцією якщо ви ніколи не програмували раніше. pset0 і тепер pset1. Але давайте розглянемо те трохи простий на перший. Ця програма тут, що I кинули разом в заздалегідь, і я стверджую, що це має надрукувати 10 зірки на екрані, використовуючи Printf, але це, мабуть глючить в деякому роді. Враховуючи, що специфікація, він повинен надрукувати 10 зірок, але це не так, мабуть, те, що Ви претендувати є помилка? Да? Так що це не зовсім по однієї помилки, і що ви маєте на увазі? Добре. Відмінно. Так ми визначили почати нульове значення для I, і ми вказали н значення 10, але ми використовували менше або дорівнює. І причиною того, що це два персонажі і не тільки один символ, як в математиці книги, є те, що у вас немає спосіб вираження один символ еквівалентні. Значить, менше, але якщо ви починаєте відлік з нуля, але ви розраховувати всю дорогу до кінця і дорівнює 10, Ви, звичайно, збирається розраховувати 11 речей в цілому. І так ви збираєтеся друкувати 11 зірок. Так що може бути виправити це? Да? Так що просто відрегулювати менше або дорівнює просто бути менше, і є, я стверджую ,, можливо, інше рішення, занадто. Що може ще ви робите? Да? Так що почніть прирівнювання її до 1, і залишити менше або дорівнює. І, чесно кажучи, я б стверджувати, що для типової людини, це, ймовірно, більш простим. Почніть відлік з 1 і прикинь через 10. По суті робити те, що ви маєте на увазі. Але реальність така, в програмування, як ми бачили, комп'ютерники і програмісти , Як правило, починають відлік з нуля. І так це нормально, як тільки Ви звикаєте до нього. Ваш стан буде взагалі щось на зразок менше. Так просто логічним Помилка, що ми могли зараз виправити і в кінцевому рахунку перекомпілювати це і отримати тільки 10. Ну, як про цю помилку тут? Тут, знову ж таки, я стверджую, що у мене є Метою друку 10 stars-- по одному в рядку на цей раз, але це не так. Перш, ніж ми пропонуємо те, що виправлення, те, що робить це друкувати візуально, якби я був скласти і запустити цю програму ви думаєте? Да? Зірка. Так що всі зірки на ж лінія, що я чув, а потім символ нового рядка. Так давайте спробуємо це. Так що глючить-1, введіть, і я бачу команду брязкіт що ми говорили минулого разу. ./buggy-1, і справді я бачу всі 10 зірок на тому ж рядку, хоча я претендувати в моїй специфікації просто коментар на вершині код, який я мав намір зробити один пров лінія. Але це виглядає правильно. Тепер рядок 15, схоже, я друк зірку, а потім лінія 16 це виглядає як я друк Символ нового рядка, і вони обидва з відступом так Я всередині циклу ясно. Так що не я повинен робити зірку, новий лінія, зірка, нова лінія, зірка, нова лінія? Да? Так, на відміну від мови як Python, якщо ви знайомі, відступ НЕ значення до комп'ютера. Це має значення тільки до людини. Так у той час як тут, я винайшов ліній 15 і 16-- що виглядає красиво, але комп'ютер не піклується. Комп'ютер піклується про фактично не маючи фігурні дужки навколо цих рядків коду. Так що це clear-- як і в Scratch-- що цих двох рядків коду повинні бути виконані. Як один з тих жовтого подряпин головоломки шт знову і знову і знову. Так що тепер, якщо я повторно запустити цей program-- ./buggy-2-- Хм. У мене є помилка зараз. Що я забув зробити? Так, так що я не скомпілювати його. Так що глючить-2. Немає такого файлу, тому що я не зробив компілювати другу версію. Так що тепер цікаво неоголошена переменная-- не 2. Ми робимо 1. Зробити баггі-1-- ./buggy-1-- і зараз кожен з них знаходиться на тій же лінії. Тепер є виняток це, як передбачалося позов шахті що вам потрібні ці фігурні дужки. Коли це насправді OK-- якщо ви маєте помітив в розділі або textbooks-- опустити фігурні дужки? Да? Точно. Коли є тільки один рядок коду, яка вам хочу бути пов'язаний з цикл, як в нашому першому прикладі. Це абсолютно законно опустити фігурні дужки просто як свого роду зручності від компілятора до вас. Да? Хороше питання. Чи буде це вважатися помилка стиль? Ми б promote-- як в CS50 керівництво по стилю, URL, для яких знаходиться в pset1-- що завжди використовувати фігурні дужки. Звичайно, якщо ви новачок в програмуванні. Реальність така, що ми не збирається заборонити вам робити ці зручності. Але якщо ви тільки знайомитеся в курс справи, абсолютно просто завжди використовувати фігурні підтяжки поки ви не отримаєте повісити його. Хороше питання. Добре. Так що то була помилка. Принаймні, в той досить простий. І все ж ви можете думати, досить зародковому стані, чи не так? Це свого роду першого тижня дивитися мовою як, побачити ваші помилки в ньому. Але реальність це насправді представник деякі досить лякаючих проблем які можуть виникнути в реальному світі. Таким чином, деякі з вас можуть пригадати якщо ви будете слідувати технічні новини, або, може бути, навіть зловив вітру цього в лютому з цього минулого року, що Apple, було зробив трохи помилкою в обох прошивкою, операційна система їх телефони, а також Mac OS, операційна система на їх настільних ПК і ноутбуків. І ви бачили такі заголовки, як це. І після цього, Apple пообіцяв виправити цю помилку, і дуже швидко зробив це виправити в прошивкою, але потім в кінцевому підсумку встановили його в Mac OS а. Тепер жоден з цих заголовків поодинці дійсно виявити те, що основна проблема була, але помилка була в кінцевому рахунку, зводиться до помилка в SSL, Secure Sockets Layer. І коротше кажучи, Це програмне забезпечення що наші браузери та інші Програмне забезпечення, що використовується для чого? Якби я сказав, що SSL є участь, всякий раз, коли вам відвідати URL, який починається з HTTPS, що тоді може SSL бути пов'язано? Шифрування. Таким чином, ми будемо говорити про це в найближчі дні. Шифрування, мистецтво дертися інформацію. Але Коротше, Apple деякий час тому зробив помилку в їх реалізації SSL, в програмне забезпечення, яке в кінцевому рахунку, реалізує URL-адреси, як HTTPS або макс з'єднання і там. Результат, який є те, що ваш з'єднання може потенційно бути перехоплені. І ваші з'єднання були не обов'язково шифруються якщо ви були деякі поганий хлопець в між Ви і веб-сайт призначення, які знав, як скористатися цим. Тепер Apple, в кінцевому рахунку, розміщені Виправлення цієї нарешті, і опис їх виправлення було це. Безпечного транспорту не вдалося перевірити Справжність зв'язку. Питання було розглянуто відновлення пропущених кроків перевірки. Так що це дуже рука хвилясті пояснення для просто говорю, що ми облажались. Існує буквально один рядок коду, який був баггі в їх реалізації SSL, і якщо ви йдете в Інтернеті і пошук для цього Ви можете насправді знайти Оригінальний вихідний код. Наприклад, це знімок екрана тільки частина досить великий файл, але це функція, мабуть називається SSL перевірити знак сервера обміну ключами. І це займає купу Аргументи і входи. І ми не збираємося зосередитися занадто багато на дрібницях там, але якщо вам зосередитися на коді всередині цього TOPMOST function-- давайте збільшити на що. Ви, можливо, вже підозрюю, що помилка може бути, навіть якщо ви поняття не маєте, в кінцевому рахунку те, що ви дивитеся на. Там начебто аномалії тут, що, що? Так, я не дуже люблю Погляд з двох Гото не вдається. Чесно кажучи, я дійсно не знаю, що перейти збій кошти, але з двома з них спиною до спини. Це тільки почасти треться мене інтелектуально неправильний шлях, і справді, якщо ми збільшити на тільки тих ліній, це C. Так багато коду від Apple сама написана на C, і це, мабуть дійсно equivalent-- не до такої симпатичної відступу версія, але якщо ви визнаєте той факт, що немає ніяких фігурні дужки, що Apple, дійсно написав був код, який виглядає як це. Так що я зменшили масштаб, і я просто фіксованою відступ в тому сенсі, що якщо немає ніяких фігурні дужки, що друга перейти невдачу ось в жовтий збирається виконати ні на що. Це не пов'язано з якщо стан над ним. Таким чином, навіть знову, якщо ви не зовсім зрозуміти, що це могло б робити, знаю, що кожен з них conditions-- кожної з цих ліній є дуже важливим кроком В процесі перевірки якщо ваші дані насправді зашифровані. Так пропуск одного з них кроки, не найкраща ідея. Але так як у нас це Другий перейти невдачу в жовтий, і тому що як тільки ми роду естетично перемістити його вліво, де його логічно знаходиться в даний момент, то, що це значить для лінії коду нижче цієї другої Гото невдачу б ви думали? Це завжди буде пропущений. Так GOTOS, як правило, з несхваленням з причин, ми не будемо дійсно входять в, та й взагалі в CS50 ми не схильні вчити це твердження Гото, але ви можете думати про Гото зазнають невдачі, оскільки сенс ходу стрибка в деякій іншій частині коду. Іншими словами перестрибувати це останній рядок взагалі, і тому результат цієї дурної просто помилка, яка була просто результатом Можливо хто скопіювати і вставити один теж багато разів було те, що весь безпека IOS і Mac OS був вразливий для перехоплення поганих хлопців протягом досить довгого часу. Поки Apple, нарешті, не зафіксував це. Тепер, якщо деякі з вас насправді працює старі версії прошивкою або Mac OS, Ви можете піти в gotofail.com які це сайт, який хто налаштований в значній мірі визначають програмно якщо ваш комп'ютер як і раніше уразливі. І, чесно кажучи, якщо це так, це, ймовірно, хороша ідея оновити свій телефон або ваш Mac в цій точці. Але там, тільки свідченням, наскільки оцінка цих низькому рівні докладніше і досить прості ідеї може дійсно перевести в рішення і проблеми, які affected-- в цьому case-- мільйони людей. Тепер кілька слів про адміністрації. Розділ розпочнеться найближчим неділю. Ви отримаєте лист по вихідні про розділ, в якому пункті процес резекції почнеться, якщо у Вас є зрозумів, тепер у вас є деякі нові конфлікти. Так що це відбувається щороку, і ми розмістяться в найближчі дні. Офіс hours-- зробити тримати очей за цим графіком тут. Змінює трохи на цьому тижні, зокрема, час початку і розташування, так що зверніться що перш ніж відправитися в робочий час будь-який з наступних чотирьох ночей. А тепер слово за оцінкою, особливо, як ви зануритися в проблеми встановлює один і за його межами. Так відповідно до специфікації, вони, як правило, осі, вздовж яких ми оцінюємо свою роботу. Сфера ставиться до того, що міру ваша код інвентар вимагається особливості по нашій специфікації. Іншими словами, скільки набір шматок ти відкусити. Ти зробив третина з нього, половина, 100% від нього. Навіть якщо це не правильно, скільки ви намагалися? Так що відображає рівень зусиль та кількості , До якого ви відкусили Задачі множини. Correctness-- цьому, щоб Наскільки, ваш код Відповідно до нашої технічні характеристики і ніяких помилок. Так це правильно працювати? Якщо ми даємо йому деякі матеріали, робить це дати нам результат, який ми очікуємо? Design-- зараз це перший з зокрема якісні, або ті, які вимагають людських суджень. І дійсно, саме тому у нас є штат так багато навчальних товаришів і, звичайно помічники. Якою мірою ваша код, написаний добре? І знову це дуже якісна оцінка що будемо працювати з вами на двоскерованого в найближчі тижні. Так що, коли ви не тільки числові показники, а й Письмове бали, або ввели зворотного зв'язку, або письмові відгуки в англійських слів. Це те, що ми будемо використовувати, щоб везти вас до фактично писати кращий код. І в лекції та секції, ми постараємося вказати out-- так часто, як ми can-- те, що робить програму не тільки правильно і функціонально добре, але і добре розроблена. Найбільш ефективним він може бути або навіть найкрасивіша це може бути. Що приводить нас до стилю. Стиль, в кінцевому рахунку є естетичне судження. Ви вибрали гарне імена для ваших змінних? Ви відступом код правильно? Чи означає це виглядати добре, і тому, це просто для іншої людини читати ваш відповідна його правильності. Тепер взагалі за навчальний план, ми забити ці речі на п'ятибальною шкалою. І дозвольте мені забивати додому точка що в три дійсно добре. Дуже швидко зробити людей почати робити арифметику. Коли вони отримують три з п'ять від правильності деякий PSET і вони думають, блін, я збираюся 60% який по суті є D ​​або E. Це не те, як ми думаю з цих чисел. Три дійсно добре, і що ми звичайно очікують на початку терміна в тому, що якщо ви отримуєте купа three's--, можливо, пару ярмарків, пару fours-- або пара двійок, пару fours-- що це гарне місце, щоб почати. І до тих пір, як ми бачимо, вгору траєкторія з плином часу, Ви знаходитесь в особливо хорошому місці. Формула ми використовуємо для вага речі по суті це за навчальної програми, який просто означає, що ми надають більшого значення коректності. Тому що це дуже часто коректність що займає найбільше часу. Повірте мені зараз. Ви find-- принаймні, в одному pset-- що вам провести 90% свого часу працює на 10% від цієї проблеми. І все начебто працює для одного або двох помилок, за винятком, і тих, є помилки, які тримати вас до пізньої ночі. Це ті, що роду уникнути вам. Але після сну на ньому, або відвідувати прийомні години або ставити запитання онлайн, є коли ви отримуєте на цьому 100% гол, і саме тому ми вага Правильність найбільш. Дизайн трохи менше, і стиль трохи менше. Але майте на mind-- стилі мабуть, найпростіший з них відкусити відповідно до керівництва по стилю. І тепер, більш серйозним зверніть увагу на академічній чесності. CS50 має невдале розрізнення будучи найбільшим виробником Ради Ad випадки майже щороку історично. Це не тому, що студенти обманюють в CS50 більше, ніж будь-який інший клас, а тому, що за характером роботи, той факт, що це електронний, той факт, що ми дивимося на це, і той факт, ми комп'ютерники, Я можу сказати, що ми, на жаль, дуже хороша у виявленні його. Так що ж це означає в реальному вираженні? Так це, відповідно до навчальної, Філософія Курсу дійсно зводяться до розумних. Існує ця лінія між робити свою роботу на свій розсуд і отримати трохи розумно допомогу від одного, і відверто робити цю роботу за свій друг, або відправивши йому або їй ваш код так що він або вона може просто прийняти або взяти його право. І, що перетинає лінію що ми звертається в класі. Дивитися, навчальний план в кінцевому рахунку, для ліній що ми звертаємо як розумно і необгрунтованим поведінкою, але насправді це фурункул до сутності з ваша робота необхідності бути своїм власним в кінці. Тепер із цим сказав, є евристичний. Тому що, як ви, можливо, imagine-- від робочого дня і візуальні і відео ми в показано таким чином far-- CS50 дійсно призначається, щоб бути як спільний і як кооператив і як соціальний наскільки це можливо. , Як групова, як це строгий. Але з цим сказав, евристичний, як ви побачите в навчальній програмі, є те, що, коли ви відчуваєте деякі проблеми. У вас є помилка в коді, що вам не може вирішити, що це розумно для вас показати код комусь ще. Друг навіть в класі, друг сидить поруч з вами в робочий час, або член персоналу. Але вони не можуть показати свій код до вас. Іншими словами, відповісти на ваш question-- Мені потрібно help-- НЕ ах, ось мій код. Погляньте на це і вивести з нього те, що ви будете. Тепер, звичайно, є спосіб явно до гри це система, в якій я покажу вам, мій код до того, питання. Ви покажіть мені мою код до того, питання. Але побачити навчальний план знову тонкі деталі, де ця лінія. Просто зараз намалювати картину і поділитися максимально прозоро де ми знаходимося в в останні роки, це число випадків Дошка оголошень що CS50 була більш останні сім років. З 14 випадках це остання осінь. З точки зору студентів, що беруть участь, це було 20 деякі дивні студенти це минулої осені. Був пік 33 студенти кілька років тому. Багато хто з них, на жаль, більше не тут, на території кампуса. Студенти, які беруть участь у відсотках від Клас історично в діапазоні від 0% до 5,3%, що є тільки сказати це щорічно проблемою. І в цьому напрямку, то, що ми хочемо зробити, це передати один що ми dd-- просто FYI-- порівняти на справедливість тим студентам, які є наступні лінії відповідно. Ми робимо порівняти всі ток Доводи проти всіх останніх місій за останні багато років. Ми теж знаю, як Google навколо і знайти репозиторії коду онлайн, дискусійні форуми онлайн, робота сайтів в мережі. Якщо студент може знайти його, ми можемо, звичайно, знайти його так само, як ми з жалем зробити. Так що ви побачите в навчальній програмі хоча це положення жаль. Я можу, звичайно, оцінити, і ми все має Співробітники зробивши хід, як це, чи це саме по собі один з плином часу, звичайно, знаєте, що це таке, коли життя стає на шляху, коли у вас є деякі пізно вночі deadline-- не тільки в цьому класі, але another-- коли ви повністю вичерпані, підкреслив, є надмірна кількість інших речей, щоб зробити. Ви будете робити в певний момент в життя, звичайно, погано, можливо, пізно ніч рішення. Так відповідно до навчальної, Тобто цей пункт, такі, що якщо протягом 72 годин з моменту деякі бідні рішення, ви є власником до нього і вийти на мене і один з керівників Курсу і у нас буде розмова. Ми будемо звертатися з речами внутрішньо в надії з нього стає більше Момент вчення або життєвий урок, і не те, що з особливо радикальні наслідки як ви можете побачити на цих графіках тут. Так що це дуже серйозний сигнал. Зупинимося лише небагато секунд, щоб зняти напругу. [МУЗИКА ГРАЄ] David J. Малан: Гаразд, так як в тому, що для Segue? Для сьогоднішніх первинних темам. Перший з яких є абстракцією. Ще одна з яких буде подання даних, які відверто є дійсно сухий спосіб сказати, як ми можемо йти про вирішення проблем і думати про вирішення проблеми? Таким чином, ви бачили в порожньому, і у тебе бачив, можливо, вже в pset1 з C що ви не тільки можете використовувати функції, як Printf, що інші люди в мимо років писав для вас. Ви також можете написати свої власні функції. І хоча ви не могли б зробив це в C, і, чесно кажучи, в pset1 Ви дійсно не потрібно писати свій власну функцію, тому що в problem-- хоча, можливо, складної на перший glance-- ви побачите в кінцевому підсумку може бути вирішена за не все, що багато рядки коду. Але з цим сказав, з точки зору писати свою власну функцію, зрозуміти, що C дійсно дає Ви така можливість. Я збираюся піти в сучасному вихідному коді, який доступний вже на сайті, і я збираюся йти вперед і відкритою до програми під назвою функція 0.C, і в нульовій функції ми побачимо кілька речей. У перших рядках 18 через 23 моя основна функція. І тепер, коли ми починаємо читати Код, який ми не пишемо на льоту, але замість цього я написав заздалегідь або що ви в задачі встановити може отримати мають було написано заздалегідь. Хороший спосіб почати читати код чуже це подивитися на головній функції. З'ясувати, де цей запис Справа в тому, щоб запустити програму, і дотримуйтесь його логічно звідти. Так що ця програма мабуть друкує Ваше ім'я двокрапка. Потім ми використовуємо GetString з бібліотеки CS50 щоб отримати рядок, або слово або фразу від користувача на клавіатурі. А тут ще цей річ здесь-- PrintName. Тепер PrintName НЕ функція, яка поставляється з C. Це не в стандартному io.h. Це не в CS50.h. Це, швидше, в тому ж файлі. Зверніть увагу, якщо я прокрутите вниз а bit-- лінії 25 в 27-- це просто досить спосіб коментуючи ваш код за допомогою зірок і косі риси. Це мульти-лінія коментувати, і це тільки мій опис в синяві що робить ця функція. Тому що в лінії 28 до 31, Я написав супер просту функцію чиє ім'я є PrintName. Це займає, скільки Аргументи б ви сказали? Так один argument--, бо є один Аргумент перераховані всередині дужок. Тип, який є рядком. Який повинен сказати PrintName Це виглядає приблизно так чорний ящик або функція, яка приймає як вхід рядок. І ім'я цього рядка зручно буде ім'я. Чи не S, що не N, але ім'я. Отже, що ж PrintName робити? Це хороший простий. Так само, як одного рядка коду для Е, але, мабуть, його друкує "Hello," так і так. Де так і так походить від аргументу. Тепер це не величезна інновація тут. Дійсно, я взяв програму, яка може були написані з одного рядка коду , Поставивши це тут, і змінили його на то який включає в себе деякі шість чи сім або близько того рядків коду весь шлях сюди. Але це відпрацювання принцип, відомий як абстракції. Вид инкапсуляции всередині новий функція, яка має ім'я, і ​​краще ще, що назва буквально каже, що він робить. Я маю на увазі printf-- це не описує його. Якщо я хочу створити паззл, або, якщо I хочу створити функцію який друкує чиєсь ім'я, краса робить це є те, що я можу насправді дати, що функції ім'я , Який описує те, що він робить. Тепер вона займає в вході, що Я умовно назвати ім'я, але це теж чудово описовий замість того, щоб трохи більше спільний як С. і недійсними, на даний момент, просто означає, що цю функцію втрачає вручити мені нічого. Це не те, GetString що буквально вручає мені рядок як ми робили з папірця зі своїми однокласниками минулого тижня, а він просто має побічний ефект. Він друкує то на екран. Так зрештою, якщо я дійсно роблять функція-0, ./function-0, ми побачимо, що він просить мого імені. Я типу Давида, і це типи з мого імені. Якщо я зроблю це знову з Робом, він збирається сказати "Привіт, Боб". Так проста ідея, але, можливо, екстраполювати це психічно що, як ваші програми отримати трохи складніше, і ви хочете написати шматок Код і виклик, який code-- Invoke що code-- деякими описовий назвати як PrintName, C робить собі нам цю можливість. Ось ще один простий приклад. Наприклад, якщо я відкриваю подати з сьогоднішнього дня називається return.c, помітити, що я зробив тут. Велика частина цієї головної функції Е. Я спочатку довільно ініціалізації змінна з ім'ям х до числа 2. Я потім роздрукувати "х тепер % Я "проходження в значенні х. Так що я просто говорю, що це таке. Тепер я просто сміливо стверджуючи з Printf. Шукаю кубатури, що значення х, і я робить це шляхом виклику функції називається куб проходження в х як аргумент, а потім зберегти вихід У самій змінної, х. Так що я видаливши значення х. Я перевизначення значення х з будь результатом виклику ця функція куб. А потім я просто роздрукувати деякі пухнастий матеріал тут кажуть, що я зробив. Так що ж тоді є куб? Зверніть увагу, що в корені тут по-іншому. Я дав функцію назву, як і раніше. Я вказав ім'я аргументу. На цей раз вона називається п замість імені, але я міг називати його інакше я хочу. Але це не так. Ця річ зліва. Раніше це було те, що ключове слово? Хлопчики. Тепер це очевидно, внутр. Так що, мабуть, забрати? У той час як недійсними означає свого роду ніщо, і це було так. PrintName не повернувся нічого. Це щось зробив, але це не передати мене то, що я міг би поставити на Ліва частина знака рівності як я зробив тут, на лінії 22. Так що, якщо я говорю, в на лінії 30, що це таке, ймовірно, маючи на увазі про те, що куб робить для мене? Да? Це повертає ціле. Так він передає мені, для Примірник, папірець , На якій він написав відповідь. 2 кубі, або 3 в кубі, або 4 cubed-- все, що я пройшов в, і як я це реалізувати? Ну, просто п раз п раз п як я міг куб значення. Отже, ще раз, супер просто ідея, але демонстративне Тепер, як ми можемо писати функції що насправді було нас цінності, які могли б представляти інтерес. Давайте подивимося на останній приклад тут називається функція одна. У цьому прикладі, він починає щоб отримати більш переконливими. Таким чином, у функції одного, це program-- сповіщення в кінцевому рахунку, викликає функцію називають GetPositiveInt. GetPositiveInt НЕ функції в бібліотеці CS50, але ми вирішили, що хотіли б, щоб існувати. Так що, якщо ми прокрутите вниз пізніше в файлі, зверніть увагу, як я пішов про реалізацію отримати позитивний Int, і я кажуть, що це більш переконливим бо це гідний кількість рядків коду. Це не просто нерозумно маленька іграшка програми. Це насправді отримав обробку помилок і робити щось більш корисне. Так що, якщо ви не бачили проходження ігри відео, що ми, вбудовані в pset1, знаю, що це є одним з видів петля в C, близький по духу з видами речей нуля може зробити. І робити говорить цього. Роздрукуйте це. Тоді вперед і отримати n-- отримати Int і зберегти його в п, і продовжувати робити це знову і знову, і знову, поки п менше одного. Так н збирається бути менше одного тільки якщо людина не співпрацює. Якщо він чи вона друкує в 0 або -1 або -50, цей цикл буде тримати виконання знову і знову. І в кінцевому рахунку помітити, я просто повернути значення. Так що тепер у нас є функція що було б добре якщо CS50 б реалізувати в CS50.h і CS50.c для вас, але тут ми можемо зараз реалізувати це самі. Але два зауваження за деякими ключовими деталей. Одно-- чому я заявляю Int н, ви думаєте, на лінії 29 а не просто робити це тут, який більше відповідає те, що ми зробили минулого тижня? Да? Гарна думка. Так що, якщо б ми мали поставити його тут, це як ніби ми тримати оголосивши його знову і знову. Це само по собі є НЕ проблематично, по суті, тому що нам потрібно тільки Значення один раз і потім ми збираємося отримати новий в будь-якому випадку. Але хороша думка. Да? Закрити. Так, тому що я заявив н на Лінія 29 поза циклом, вона була доступна протягом це ціла функція. Не інші функції, тому що н раніше всередині цих кучерявих підтяжки тут. Так подав що впевнений. Точно. Так що це навіть більш важливо. Якщо ми замість заявив н прямо тут, на лінії 32, це проблематично, тому що припущення де ще мені потрібно отримати до нього доступ? На лінії 34, і Просте правило є що ви можете використовувати тільки змінна всередині з найостанніших фігурні дужки , В якому ви оголосили його. На жаль, лінія 34 одна лінія занадто пізно, бо я вже закрита фігурна дужка на лінії 33 що відповідає фігурна дужка в рядку 30. І таким чином, це спосіб сказати, що ця змінна Int є областю дії, так сказати, щоб тільки всередині з тих фігурні дужки. Це просто не існує поза ними. Так дійсно, якщо я зроблю це так, дозвольте мені зберегти код як це is-- неправильно написано. Дозвольте мені йти вперед і роблять Функція-1, і notice-- помилки. Використання неоголошений ідентифікатор п на лінії 35, який знаходиться прямо тут. І якщо ми прокрутки вгору Далі, ще один. Використання неоголошена Ідентифікатор н на лінії 34. Так компілятор, Clang, буде помітити, що його просто не існує, навіть якщо ясно, що вона є візуально. Таким чином, просте виправлення оголосивши його там. Тепер дозвольте мені перейти до верхньої частини файлу. Що впадає в вас, як будучи трохи відрізняється від того, що ми дивилися на тому тижні? Мало того, що у мене є ім'я, не тільки У мене є деякі гострі включає в себе до кращих, У мене є те, що я перебуваю називаючи прототип. Тепер, виглядає жахливо схоже на те, ми тільки що бачили кілька хвилин тому на лінії 27. Так що давайте вивести з іншої Повідомлення про помилку, чому я зробив це. Дозвольте мені йти вперед і видалити ці рядки є. І тому ми нічого не знаємо про прототип. Remake цей файл. Зробіть функцію один. А тепер, блін, чотири помилки. Давайте прокрутки до першого. Неявне оголошення функції отримати позитивний Int є недійсним в C99. C99 просто означає, що 1999 версія мови C, який є те, що ми дійсно за допомогою. Так що ж це означає? Ну C-- і більш конкретно C compilers-- досить тупі програми. Вони тільки знають, що у Вас є сказав їм, і це фактично тематична з минулого тижня. Проблема в тому, що якщо я йду про реалізацію ім'я тут, і я викликати функцію названу GetPositiveInt тут на лінії 20, що функція технічно не існувати, поки компілятор не бачить лінію 27. На жаль, компілятор робити речі зверху, вниз, вліво, вправо, так, бо не бачив Реалізація GetPositiveInt, але він бачить ви намагаєтеся використовувати його тут, це просто буде bail-- кричати на Ви з помилкою message-- можливо загадковими, а не насправді компіляції файлу. Таким чином, так званий прототип до тут, за загальним визнанням зайвим. Буквально, я спустився сюди, і я скопіював і вставили це, і я поклав його тут. Пустота б більш правильним, тому ми буквально скопіювати і вставити його на цей раз. Я буквально скопіював і вставив його. Дійсно як як хлібної м'якушки. Трохи підказка компілятору. Я не знаю, що це робить поки немає, але я обіцяв вам , Що в кінцевому підсумку буде існувати. І ось чому це line-- в лінія 16-- закінчується крапкою з комою. Це є надлишковим по дизайну. Да? Якщо ви не пов'язати свою бібліотеку щоб the-- о, гарне питання. Sharp включає файлів заголовка включень. Потрібно be-- повинні майже завжди бути на самому верху файлу для similar-- для точно так же причина, так. Тому що в стандарт io.h буквально лінія як це, але зі словом Printf і з опціями і повертається типу. І так, роблячи різке включати до тут, що ви буквально робить буде скопіювати і вставити вміст кого-небудь ще написав нагорі. Таким чином cluing код і Справа в тому, що ці функції існують. Да? Абсолютно. Так дуже розумний і правильний рішенням було б, знаєте що? Я не знаю, що Прототип, але я знаю, якщо я розумію, що C є просто німий і переосмислює зверху вниз. Ну давайте дамо його, що він хоче. Давайте вирізати цей код, вставте його кращих, і тепер натиснути головний внизу. Це теж дозволить вирішити проблему. Але ви могли б дуже легко придумати сценарій, в якому потрібно викликати B, і, можливо, B передзвонює A. Це те, що називається рекурсія, і ми повернемося до цього. І це може або не може бути хорошим річ, але ви можете визначено зламати це рішення. І більш того, я б стверджують, стилістично, особливо коли ваші програми стати так довго і так довго, це просто супер зручно покласти головною у верхній бо це річ найбільш програмісти збираються дбати о. І так це трохи чистіше, можливо, зробити це так, як Я спочатку зробив це з прототипом навіть хоча це виглядає трохи зайвим, на перший погляд. Да? На жаль, ви можете сказати, що це голосніше? При перемиканні місцеположення впровадження та прототип? Так що це хороше запитання. Якщо ви повторно заявити про це вниз тут, давайте подивимося, що станеться. Так що, якщо я придушив це тут, ви говорите. Ой, вибачте. Голосніше? Навіть голосніше. О, хороше запитання. Чи буде це стати недійсними функцію? Ви знаєте, після всіх цих років, я ніколи не поставити прототип згодом. Так давайте зробимо зробити функцію-1 після виконання цього. [Бурмочучи] David J. Малан: Ой, зачекайте. Ми все ще повинні поставити всі верх. Так давайте зробимо це тут, якщо я розуміючи Ваші питання правильно. Я ставлю все, в тому числі вище головним прототипом, але я ставлю прототип Нижче здійснення. Так що, якщо я зробити один, я отримую назад error-- невикористаний мінлива н. О, є. Спасибо. Давайте подивимося, що ми позбутися цього. Це інша помилка, так що давайте ігнорувати це. Давайте дійсно швидко переробити це. Отже, аргумент чи не дані використовується рядок формату n-- о, це тому, що Я змінив до них тут. Гаразд, ми знаємо, що відповідь збирається to-- все гаразд, тут ми йдемо. Ах, спасибі за позитив. Гаразд, я виправлю цей код after-- ігнорувати цю конкретну помилку так як це was-- це працює і є відповідь. Отже не перезаписує то, що ви тільки що зробили. Я підозрюю, компілятор написана таким чином що ігнорує свій прототип Тому що тіло, так сказати, з функція вже були реалізовані вище. Я б насправді проконсультуватися Керівництво компілятора зрозуміти, чи є інші Мається на увазі, але на перший погляд просто намагається і експериментувати, там, здається, немає ніякого впливу. Хороше питання. Так що давайте йти вперед зараз, рухаючись від побічних ефектів, які є функціями, які роблять те, що візуально на екрані з Printf, але не повертає значення. І функції, які мають повернення цінності, як ми тільки що бачили деякі з. Ми вже бачили це поняття сфери, і ми побачимо це знову і знову. Але зараз, знову ж таки, використовувати емпіричне правило що змінна може бути використана тільки всередині самої недавно відкрив і закриті фігурні дужки, як ми бачили в цьому конкретному прикладі. І як ви зазначили, існує ability-- Ви могли б вирішити деякі з цих проблем поставивши змінну глобально на самому початку файлу. Але майже в усіх випадках ми б незадоволений, що, і справді навіть не йдуть в цьому рішенні для тепер. Так що на даний винос в тому, що змінні мають це поняття сфери. Але тепер давайте подивимося на інший сухий спосіб насправді шукає на деякі досить цікаво Деталі реалізації. Як ми могли б представляти інформацію. І ми вже дивилися на це в перший тиждень класі. Дивлячись на бінарних файлів, і нагадуючи собі про десяткової. Але пам'ятаєте з минулого тижня, що C має різні типи даних і грона більше, але найбільш корисні з них зараз може бути це. Символ, або символ, який відбувається щоб бути один байт або вісім бітів загальної. І це означає, що розмір з напівкоксу тільки один байт. Байт вісім бітів, таким чином, це означає, що ми можемо уявити, як багато символів. Скільки листів або Символи на клавіатурі якщо у нас є один байт або вісім біт. Згадайте нульовою тижня. Якщо у вас є вісім біт, скільки всього значення може ви уявляєте з патерни нулів і одиниць? Одно-- більше. Так 256 за все, якщо вас почати відлік з нуля. Так що якщо у вас є вісім bits-- так що якщо ми були наші бінарні цибулини тут знову, ми могли б перетворити ці лампочки на і вимикається в будь-якому з 256 унікальних структур. Тепер це трохи проблематично. Не так багато для англійської та романські мови, але, звичайно, коли ви уявити, для Наприклад, азіатські мови, які мають набагато більше символів, ніж як 26 букви алфавіту. Ми насправді, можливо, буде потрібно більш ніж одним байтом. І на щастя, в В останні роки має суспільство прийняті інші стандарти, які використовують більше одного байта на одній зарядці. Але на поточний момент в С, за замовчуванням тільки один байт або вісім бітів. Ціле, тим часом, чотири байт, інакше відомий як 32 біт. А це значить, що як можна більшу число можна представити за междунар мабуть ,? З мільярд. Так що це чотири мільярди плюс-мінус. 2 в 32-я влади, якщо ми не беремо на себе негативні числа і просто використовувати всі позитивні цифри, це чотири мільярди плюс-мінус можливості. Поплавок, тим часом, це інший тип типу даних в C. Це ще цілий ряд, але це реальне число. Щось з комою. І виходить, що C також використовує чотири байти для представлення значень з плаваючою точкою. На жаль, скільки з плаваючою значення точки є у світі? Скільки речові числа є? Там в нескінченне число, і в цьому відношенні є нескінченне число цілих чисел. Так що ми вже начебто копати собі яму тут. Причому, мабуть, в computers-- на найменш програми, написані на C на them-- можуть розраховувати тільки вище, ніж чотири мільярди плюс-мінус, і плаваючою комою може тільки мабуть, є кінцеве кількість точністю. Тільки так багато цифр після їх коми. Тому що, звичайно, якщо у вас є тільки 32 біта, Я не знаю, як ми збираємося йти про становлять реальну numbers-- ймовірно з різними типами малюнків. Але є, звичайно, кінцеве число таких шаблонів, так і тут, це проблематично. Тепер ми можемо злегка уникнути цієї проблеми. Якщо ви не використовуєте поплавок, ви можете використовувати подвійний в С, що дає вам вісім байт, що є спосіб більше можливих структур нулів і ті. Але це все ще конечна, яка збирається щоб бути проблематичним, якщо ви пишете програмне забезпечення для графіки або для фантазії математичні формули. Таким чином, ви, можливо, насправді хочуть підраховувати більше, ніж це. Довгий long-- тупо named-- Також восьми байт, або 64 бітів, і це вдвічі більше, ніж в Int, і це протягом довгого цілого значення. Fun fact-- якщо Int чотири байти, як довго це довго в C зазвичай? Також чотири байти, але довго довго вісім байт, і це з історичних причин. Але винос зараз просто, що дані є бути представленим в computer--, це фізичний пристрій з електрикою, це взагалі за кермом ці нулі і ones-- з кінцевими обсягами точністю. Так в чому проблема то? Ну є проблема целочисленного переповнення. Не тільки в С, але в комп'ютери в цілому. Наприклад, якщо в цьому це байт стоїть bit-- так що якщо це вісім bit-- все з яких є номер один. Який це номер представляє якщо припустити, це все позитивні значення в двійковому? 255, і це не 256, тому що нульовий найнижче число. Так 255 є найвищим Один з них, але проблема , Припускають, що хочу збільшити цю змінну, що використовує всього вісім біт якщо я хочу, щоб збільшити його. Ну, як тільки я додати один для всіх цих одиниць, Ви, можливо, може собі уявити visually-- просто як несучи його, використовуючи decimals-- то відбувається текти зліва. І справді, якби я додати номер один з цим, то, що відбувається в двійковому є те, що воно переповнює до нуля. Так що якщо ви тільки use-- не в Int, але один байт розраховувати цілі в програмі, по default--, як тільки ви отримаєте 250, 251, 252, 253, 254, 255-- 0 приходить після 255, що, ймовірно, не те, що користувач збирається чекати. Тепер той же час в плаваючою комою світ, у вас також є аналогічна проблема. Не стільки з найбільшою number-- хоча це ще питання. Але з кількістю точністю що ви можете представляти. Отже, давайте поглянемо на цей приклад тут також від сьогоднішньої джерела code-- плавати-0.c. І зауважте, це супер проста програма, яка слід, мабуть, роздрукувати, яке значення? Що ви парі, що це збирається друкувати хоча є трохи нового синтаксису тут? Так, ми сподіваємося 0.1. Таким чином, еквівалентна однієї десятої тому що я роблю 1, поділеній на 10. Я впевнений, зберігати відповідь у змінній називається е. Ця змінна має тип поплавка, який це ключове слово, я просто запропонував існувало. Ми не бачили це раніше, але це ніби витончений спосіб в Printf щоб визначити, як багато цифр ви хочете побачити після коми. Так це позначення просто означає, що ось заповнювачем. Це для плаваючою крапкою Значення, і о, до речі, показати його з десяткової точки з один номер після коми. Так ось число значущих цифр, так сказати, що ви, можливо, захочете. Отже, дозвольте мені йти вперед і робити зробити поплавок-0, ./float-0, і, мабуть, 1 ділиться на 10 0.0. Тепер, чому це? Ну знову ж таки, комп'ютер приймає мені буквально, і я написав 1 і я написав 10, і зробити припущення, що є передбачається тип даних для цих двох значення? Int, це технічно то трохи інше. Це, як правило, довго, але це в кінцевому рахунку, інтегральне значення. Чи не значення з плаваючою точкою. Що означає, що якщо цей є Int і це Int, Проблема в тому, що комп'ютер не володіють здатністю навіть зберігати цю десяткову точку. Так що, коли ви робите 1 ділиться на 10 з використанням цілих чисел для чисельнику і знаменник, відповідь має бути 0,1. Але computer-- тому ті integers-- не знаю, що робити з 0,1. Так що ж це явно робиш? Це просто викинути, і що я бачу в кінцевому рахунку, 0.0 тільки тому, що я наполягав на тому, Е показати мені одну десяткову точку. Але проблема в тому, що якщо вам розділити ціле на ціле число, Ви get-- по визначенню з C-- ціле. І він не збирається робити щось хороше і зручно як навколо нього до найближчий вгору або вниз. Це відбувається усічення все після коми. Так що просто інтуїтивно, що, ймовірно, виправити? Що простим способом виправити тут? Да? Точно. Чому б нам просто не розглядати їх як ефективно з плаваючою комою перетворюючи їх у поплавками або парному розряді. І тепер, якщо я дійсно роблять поплавці-0, або якщо я компілює поплавки-1, який ідентичний що тільки що було запропоновано. І тепер я роблю поплавки-0, зараз я отримаю свій 0,1. Тепер це дивно. Але тепер я збираюся зробити то трохи інше. Мені цікаво подивитися, що насправді відбувається під капотом, і я збираюся надрукувати це до 28 знаків після коми. Я хочу, щоб дійсно побачити 0.1000-- infinite-- [Нерозбірливо] 27 нулів після цього 0,1. Ну подивимося, якщо це те, що я дійсно отримати. Зробити плаває-0 і той же файл. ./floats-0. Давайте збільшити на драматичній відповідь. Весь цей час, ви думали 1 ділиться на 10 10%, або 0,1. Це не так. Принаймні, наскільки це комп'ютер турбується. Тепер why-- Добре, це повне брехня 1 ділиться на 10 становить 0,1. Але why--, що це не винос сьогодні. Так чому ж комп'ютер думаю, на відміну від усіх нас в кімнаті, що 1 ділиться на 10 є насправді, що з глузду значення? Що комп'ютер робить, мабуть? Що це? Це не переповнити, як такої. Переповнення зазвичай, коли Ви обернути навколо значення. Саме це питання неточності на значення з плаваючою комою де у вас є тільки 32 або, може бути, навіть 64 біт. Але якщо є нескінченне кількість реальних numbers-- номери з знаків після коми і цифри thereafter-- напевно Ви не можете уявити всі з них. Таким чином, комп'ютер дав нам ближче матч до значення він може представляти за допомогою, що багато бітів до значення я насправді хочете, який є 0,1. На жаль, якщо ви почати робити математику, або ви почати з участю цих видів плаваючою значення точки у важливому programs-- фінансового програмного забезпечення, військовий software-- нічого де сприйняття ймовірно, досить важливо. І ви починаєте додавати номера, як це, і початок працює, що програмне забезпечення з дійсно великими входами або для великої кількості годин або великим днів або більшою кількістю років, ці крихітні помилки безумовно, може скласти з плином часу. Тепер, як в сторону, якщо ви коли-небудь бачив Супермен 3 або офісний простір і ви, можливо, пам'ятаєте як ці хлопці вкрали багато грошей зі свого комп'ютера за допомогою значення з плаваючою точкою і складання мало залишки, ми сподіваємося, що фільм тепер має більше сенсу. Це те, що вони були натякаючи на в цьому фільмі. Той факт, що більшість компанії не виглядатиме після певної кількості десяткових знаків, але ті фракції центів. Таким чином, ви починаєте їх складання, ви починаєте робити багато грошей на ваш банківський рахунок. Так ось Офісні приміщення пояснив. Тепер, на жаль, за Офісні приміщення, є деякі законно тривогу і значні впливи з цих видів що лежать в основі проектні рішення, Справді, і однією з причин ми використовуємо C протягом так що у вас дійсно є цю землю до розуміння того, як працюють комп'ютери, як програмне забезпечення працює, і не приймати як належне. І справді, на жаль, навіть з що фундаментальне розуміння, ми, люди роблять помилки. І те, що я думав, я б поділитися є це вісім хвилин відео тут прийнято з епізоду Сучасні Чудеса, яка освітня шоу про те, як все це працює що малює дві картини про те, коли неправильне використання і розуміння з плаваючою комою призвело до деяких істотним Сумні підсумки. Давайте поглянемо. [Відеовідтворення] Тепер -Ми повернутися в "Інжиніринг Лиха "на сучасних чудес. Комп'ютери. Ми всі прийшли до розуміння часто проблеми розчарування, що отримав з them-- багів, вірусів, і Програмне забезпечення glitches-- для невеликих цін платити за зручності. Але в області високих технологій і високої швидкості військові та космічні програмні додатки, найменша проблема буде бути збільшені в катастрофі. 4 червня 1996, вчені готові запустити безпілотний ракета Аріан 5. На його борту науково Супутники призначені встановити, як саме Взаємодіє магнітного поля Землі з сонячними вітрами. Ракета була побудована для Європейське космічне агентство, і стартував з його об'єкті на узбережжі Французької Гвіани. -на Близько 37 секунд в політ, вони вперше помітив щось піде не так. Це форсунки були поворотним таким чином, вони дійсно не повинні. Навколо 40 секунд в польоті, чітко автомобіль потрапив в біду, і ось, коли вони зробили рішення його знищити. Офіцер безпеки діапазон, з величезні кишки, натиснув на кнопку і підірвали ракету, перш ніж він міг стати загрозою для громадської безпеки. -Це Був дівоча Подорож з Ariane 5, і її руйнування взяв місце через нестачу вбудований в програмне забезпечення ракети. Досліджено проблеми на Ariane було те, що був номер, який потрібно 64 біта, щоб виразити, і вони хотіли, щоб перетворити це до 16-розрядного числа. Вони вважали, що числа ніколи не буде дуже великою. Що більшість з цих цифр в 64-розрядне число були нулі. Вони були неправі. Досліджено нездатність одного програма, щоб прийняти вид числа, породжена інший був в корені провалу. Розробка програмного забезпечення стала дуже витратна частина нової технології. Ariane 4 ракети були був дуже успішним. Так що більша частина програмного забезпечення, створеного для він був також використаний в Ariane 5. Досліджено основна проблема було те, що Ariane 5. Був faster-- прискорюється швидше, і програмне забезпечення не доводилося, що. Досліджено знищення ракети була величезна фінансова катастрофа. Всі за помилки хвилин програмного забезпечення. Але це був не перший Час проблеми перетворення даних мучило сучасні технології ракети. -В 1991 з самого початку з першої війни в Затоці, ракета Patriot випробував подібний вид проблеми перетворення число. І в результаті 28 people-- 28 Американські soldiers-- були вбиті, і близько ста отримали поранення. Коли Patriot, який повинен був для захисту від вхідних Скадів, не вдалося звільнити ракету. -Коли Ірак вторгся в Кувейт, і Америку запущений Буря в пустелі на початку 1991 року, Patriot ракетні батареї були розгорнуті захистити Саудівську Аравію та Ізраїль від ракетних атак Іраку Скад. Патріот є середньої дальності США земля-повітря системи виробництва компанії Raytheon. -Розмір Патріоті перехоплювач в тому: це завдовжки близько приблизно 20 футів, і важить близько 2000 фунтів. І це несе боєголовку о, Я думаю, що це приблизно 150 фунтів. І сама бойова частина фугасних, які має фрагменти навколо нього. Так кожух боєголовки розроблені, щоб діяти як картеччю. Досліджено ракети здійснюється чотири за контейнер, і транспортуються напівпричепа. Досліджено Patriot протиракетна система сходить принаймні, 20 років. Спочатку він був розроблений як зенітно-ракетного щоб збивати ворожі літаки. В першої війни в Перській затоці коли, що війна на, Армія хотіла використати його для збивати Скада, а не літаки. ВПС Іраку був й не так проблеми, але армія хвилювався про Скадів. І таким чином вони намагалися оновити Patriot. -Intercepting Ворога Ракета подорожі в Маха 5 збирався бути досить складною. Але коли Patriot був доставлений в експлуатацію, Армія не було відомо про Іракський модифікація, яка зробив їх бокоплави майже неможливо нього. Що трапилося є Скада, що приїжджали в були нестабільні. Вони були хиткими. Причина цього була в Iraqis-- для того, щоб отримати 600 кілометрів з з 300-кілометрової дальності missile-- взяв вагу з передньої боєголовки, і зробив боєголовка легше. Так що тепер Patriot намагається прийти на Скад, і більшу частину time-- переважна більшість time-- було б просто літати на Скад. -Після Системних операторів Patriot зрозумів Patriot мимо воріт, вони підірвали боєголовку Патріотичного щоб уникнути можливих жертв, якщо він дозволили впасти на землю. -Це Було те, що бачив більшість людей як великі вогняні кулі в небі, і зрозуміли, як перехоплює з Скад боєголовок. -Хоча В нічному небі, патріотів здавалося, успішно знищивши Скад, в Дахране не може бути немає помилка про його виконанні. Там радіолокаційна система Патріотичного втратили слід вхідного Скад і ніколи не запущений в зв'язку до програмного вада. Це було ізраїльтян, які вперше виявлений що чим довше система була на, тим більше час розбіжності стали. У зв'язку з годинником вбудованого в комп'ютері системи. -Близько За два тижні до Трагедія в Дахране, ізраїльтяни повідомили Міністерство оборони що система втрачала час. Через 8:00 бігу, вони помітили, що система стає помітно менш точним. Міністерство оборони відповів, розповідати все батарейки Patriot щоб не залишити систем протягом довгого часу. Вони ніколи не говорили, що довгий час було. 8:00, 10:00, в тисячу годин. Ніхто не знав. -аккумуляторную Батарею Patriot розміщені в казармах в Дахране і його недоліки внутрішнього Годинники були протягом більш 100 годин в ніч на 25 лютого. -It Відстежувати час з точністю близько однієї десятої частки секунди. Тепер десяту секунди цікавий номер тому що вона не може бути виражена в довічним точно, що означає, що вона не може бути виражена точно в будь-якому сучасному цифровому комп'ютері. Важко повірити, але використовувати це як приклад. Візьмемо число третину. Третина не може бути виражається в десяткової точно. Третина є 0,333 відбувається для нескінченності. Там немає способу зробити це з абсолютна точність у десяткової. Це саме те, проблеми що трапилося в Patriot. Чим довше система запрацювала, гірше помилка часу став. -Після 100 годин роботи, Помилка в часі було тільки близько однієї третини секунди. Але з точки зору адресності Ракета подорожі в 5М, це призвело до відстеження Помилка більш 600 метрів. Було б фатальною помилкою для солдатів на Дахране. Що трапилося в запуск Скад було виявлені супутниками раннього попередження, і вони знали, Скад йшов в їх загальному напрямку. Вони не знали, де він йшов. Тепер настав час, щоб радара компонент системи Patriot захищаючи Dhahran, щоб знайти і зберегти трек наближається ракети противника. Досліджено радар був дуже розумний. Було б насправді відстеження Положення Скад а потім передбачити, де він, ймовірно, буде в наступний раз радар послав імпульс з. Це називається ворота діапазон. -Тоді Раз Патріоті вирішує достатньо часу має пройшов, щоб повернутися і перевірити на наступний Розташування для цього виявленого об'єкта вона сходить. Тому, коли мова повернулася до неправильних місце, тоді не бачить об'єкт. І він вважає, що не було жодного об'єкта. Це було помилкове виявлення і він падає доріжку. Досліджено вхідний Скад зник з екрану радара, і кілька секунд потому, його врізався в казарми. Скад убитий 28. Було останній звільнений під час першої війни в Перській затоці. На жаль, оновлення програмного забезпечення прибутку на світанку наступного дня. Програмне забезпечення недолік був був фіксований, закриття одна глава в проблемних Історія ракети Patriot. [END відеовідтворення] David J. Малан: Ось саме для CS50. Ми будемо бачити Вас в середу. [МУЗИКА ГРАЄ]