[Powered by Google Translate] DAVID Малан: Це CS50, і це є початком Тижня 1. Те, що ми думали, що ми робимо сьогодні, це подивитися назад на те, що багато хто з вас вже, напевно, пройшов повз деяких час і може виглядати трохи знайомі. Ця річ тут, це, звичайно, в - АУДИТОРІЯ: Наука. DAVID Малан: Наука центру. Так що це насправді одна з перших комп'ютерів Назад з 1940-х. Це був один з перших електромеханічних комп'ютерів , Яка була здатна особливо довго, самостійного обчислення, і те, що ми насправді бачимо в науковий центр тільки маленький шматочок цієї речі. Те, що ми думали, що ми робимо, то це поглянути назад на відео , Що було зроблено якийсь час назад, представляючи цю річ у світі. І ви побачите, від музики і голосу, який дійсно ті, були дуже щасливі часи. [ВІДТВОРЕННЯ ВІДЕО] -Тріумф математичних і механічних навичок це великий новий автоматичний калькулятор в Гарвардському університеті. Складні проблеми математики, пропустити через Машина в закодованому вигляді на стрічці, точно вирішена в хвилина частку часу, необхідного для людини розрахунок. Призначений для прискорення всіх форм математичних і наукових дослідження, гігантський механічний мозок буде працювати для Організації Об'єднаних Держави флоту до кінця війни. DAVID Малан: Так що ви можете не знати, що це було в це ж пристрій, що термін ми всі тепер взяти в значній мірі само собою зрозумілим було придумано, що і помилка. Таким чином, один з інженерів, що працюють в цьому комп'ютері буквально знайшов маленький метелик в машині, яка привела У деяких неправильних розрахунків. А так як історія свідчить, що метелик був записаний в цей журнал Журнал сюди, назад з 9 вересня 1940 року-то, і таким чином народився для світу термін "помилка". Таким чином, надалі ми розглянемо помилки бути ніякої помилки в програм, будь то людини чи, в даному випадку, комах. Так кілька оголошень, як ми далі. Так CS50 має традицію пропонувати обіди роду на Найбільш п'ятницях протягом семестру, де ми беремо від 30 до 40 студентів у вогонь і лід на площі для випадкових балаканина, розмова про комп'ютерних наук, говорити про майбутнє. Ми запрошуємо випускників та друзів від промисловості базікати студентів. Дійсно до кінця роблячи те, що це досить великий клас Тим більше інтимним, принаймні, один раз в той час як для підмножини студентів. Так що, якщо ви хочете приєднатися до нас в цю п'ятницю, 1:15 PM, перейдіть до CS50.net/lunch для RSVP. І ми зробимо це recurringly, так що не хвилюйтеся, якщо ви не Серед перших 30 або близько того на цьому тижні. Так писар нот. Слово на ресурси, які зараз починають бути доступні для студентів у класі. Так що ваші голови не повинні бути вниз під час лекції строчити вниз все, що я кажу, і так далі, то, що ми робимо замість цього забезпечити від професорсько-викладацького складу канонічний набір нот. Таким чином, ми маємо один з наших товаришів навчання, Ендрю Sellergren, хто сідає щотижня, огляд відео, а потім записує те, що ми думаємо, що є досить авторитетного набір заміток. А Ендрю любив, крім того, поставити елегантного виноски в внизу. Таким чином, ви будете насолоджуватися цим, ми сподіваємося, в якості довідника для весело, а також, приходять вікторини час, як можливість переглянути те, що відбулося в окремих лекцій. Так що ті, які пов'язані з лекціями сторінку. Проблема безліч 0, тим часом, виходить. І з точки зору ресурсів, доступних для вас - проходження гри. Мило провів перше в п'ятницю. Він був знятий, покласти сайті в суботу. І так розумію, якщо ви не зовсім впевнені, з чого почати, для цієї або майбутньої р-множин, завжди виявляються першими Проходження чи відео їх. Секціонування в даний час; на cs50.net/section, де ви повинні представити свої переваги, якщо у вас немає вже на сьогоднішній день. Тому що розділах розпочнеться найближчим неділю, понеділок і у вівторок. Ми робимо розділах ці три дні, щотижня семестру по більшій частині. І ми також представляємо, знову ж таки, різні треки. Так вам буде запропоновано на цій формою секціонування, якщо Ви не бачив його вже, якщо ви серед тих, хто менш зручний, більш комфортною, або десь посередині. І якщо ти ніби на паркані, як правило, десь в між те, що більшість студентів в кінцевому підсумку перевірки. Години роботи починаються сьогодні. Так подряпин досить низький ключ, хоча це цілком природно для запуску в різних помилок, або бути впевнені в тому, як реалізувати щось. Так розумію, що ми почнемо робочого дня на цьому тижні. Вони будуть в Annenberg понеділок, вівторок, середу, Четвер, з 8:00 вечора до 11:00 вечора в мозок перерви. Верхня classmen можете увійти, і якщо ви коли-небудь проблеми з отриманням у двері, тому що вони будуть пальцем, просто поговорити свій шлях У пояснюють і ви з CS50. Зазвичай від 20 до 30 з нас на персонал буде там, щоб допомогти Ви один на один. Після прибуття ідея полягає в наступному: ви приносите свій ноутбук, ви будете мати зарядний пристрій, ми будемо мати додаткові шнури харчування, особливо вздовж південної стіни, де Annenberg є багато електричних розеток. І основною точкою входу в офіс годинник Q & А йти на cs50.net/discuss і розмістити Ваше питання. І назвати це з PSET 0 або PSET 1, незалежно від тижня може статися, щоб бути. І те, що ми зробимо, це є таблиця навчання стипендіатів і асистентів, як правило, 8 чи 10 або близько того з нас, переживає, уважно стежать на дошці, і вищипування від питань дійсно так швидко, як ми можемо, посилаючись вам відповідні посади, якщо ви не знайшли тих, себе, онлайн посилання, по мірі необхідності. І потім, якщо є проблеми, так як неминуче буде, або вона просто має більше сенсу, щоб сісти один на один, працювати через проблеми з кимось. Або ви просто прийти в офіс годин дійсно нужденні, що мислення. Ви ж не хочете, щоб пройти через електронну форму, дуже хочу зустрітися з кимось. Спілкуйтеся, що для нас, і що буде відбуватися, коли ваш Питання був помічений одним із співробітників, і ми визначити, так, це має бути відправлений в одну з 20 або 30 членів команди тут, на місці, ви побачите в лівому верхньому кутку цієї мало Введіть черзі кнопки почне блимати cs50.net / обговорити. І це говорить вам, що ви зараз були запрошені, так сказати, щоб увійти в черзі. І клікнувши на цю кнопку, ваше ім'я з'явиться на Ipad, що вітання CS50, один з керівників звичайно, буде проведе біля входу в Annenberg, який потім бачимо, як показано тут, студенти, які є питання з зліва, співробітники, які знаходяться праворуч. І за допомогою клацання лівою і правою, ваш веб-браузер починає мигати, як тільки, наприклад, професор McGonnagal готовий бачити вас на столі зокрема Annenberg. Так ми і зробили деякі з цих минулого року. Ми rebooted робочий час і повторно реалізована велика частина програмного забезпечення. Так розумію, що це буде теплим на цьому тижні. Але також розумію, теж в минулі роки, як ви, напевно, чули від друзів, годинник, дійсно, від 50 до 150 студентів одночасно. І це просто не можливо для нас, щоб впоратися з цим ефективно, один на один, протягом вечора. І так, що ми дійсно збираємося спробувати зробити в цьому році заробити на той факт, що багато питань Часті і часто можна краще відповісти асинхронно. Таким чином, ви можете сортувати продумати відповідь персоналу, і ми можемо продумати свій код, без підігрівом Тиск обов'язково бореться через нього пліч-о-пліч. Таким чином, ми вважаємо, що приблизно третину або половину питань буде направлений в обличчя, і ми постараємося, щоб обривати як більше, ніж половина або більше в електронному вигляді, у робочий час. І ми будемо продовжувати використовувати Обговорити Протягом тижня, а також. І, нарешті, зрозуміти, що цей курс може бути прийнято придатний / не придатний. Так що, якщо ви перебуваєте на паркані або просто думаю, що ви дійсно Не впевнений, що це світ для вас, або це дійсно зовсім далекий тобі, розумієш, що це прекрасний спосіб отримання до деякої впевненості, з якою ступнути в класу, як це зробив я, чесно кажучи, років тому. І тоді є п'ять тижнів, щоб розібратися фігури за себе, якщо ви хочете залишитися придатний / не придатний, переключитися на лист класу, або тому подібне. І, як правило, що придатний / не придатний, я думаю, для студентів що, якщо ви покладете в тому, що 10 годин, 20 годин, якою б вона може бути на деяких проблемах, і ти б'єшся головою до стіни, і ви дійсно просто не може переслідувати щось вниз, і ви є багато інших речей, які ви повинні зробити, якщо чесно, те, що я думаю, придатний / не придатний, вона знімає гостроту в таких ситуаціях. Де ви взяли речі 90% шляху. Ви знаєте, це не зовсім досконалий. Але ви отримали багато з нього, тим не менш. Так вважають придатний / не придатний, як надання вам, що ментальна модель, можливо. Гаразд, минулого тижня ми пірнули в Scratch, і ми говорили про програмування на досить високому графічному рівні. І сьогодні ми зробити перехід до мови називається C, нижній рівень мови програмування на вершині яке багато сучасних мов в даний час побудовано, в тому числі з тих, які ми будемо використовувати ближче до кінця терміну. І синтаксично, як вони виглядають це все дуже схоже. Отже, давайте почнемо, щоб зробити цей перехід тут. Таким чином, це була програма, що минулого тижня був найпростіший з привіт світ програм. Це просто виводяться на екран світ привіт, з маленький пухирець мови виходить з кіт. Ну, якщо ми почнемо зараз, щоб перевести це на інший мову, розуміємо, що ідеї сьогодні і в середу ідентичні, але синтаксис починає змінюватися. Таким чином, у той час як минулого тижня у нас було, коли зелений прапор натискання, скажімо, привіт світ. Сьогодні ми збираємося, щоб мати Int, головне, порожнеча, Printf, повернення, з іншого синтаксис там же. Фігурні дужки, і дужки, і лапки, і ще багато чого. Але розумію, що ядро ​​Ідея тут полягає в друк, і, нарешті, той факт, що в даний час основним буде асоціюється із запуском програми. Головне збирається бути там, де зелений прапор ногами залишити речі. А тепер давайте дражнять один від одного деякими з будівельних блоків тут Перш ніж ми заглибимося в деякі конкретні приклади. Таким чином, ми назвали цю заяву минулого тижня, в якому він просто інструкція. Зробіть це, - в даному випадку, скажімо привіт світ. Ну в C, якщо ми подивимося на тільки що лінія, це, як ми збирається почати вираженні, що певна частина головоломки: Е ("привіт світ");. І тепер ми будемо дражнити один від одного ці все більше і більше з плином часу, але розумію, що є закономірність. Так що, у нас є те, що називається Printf, яка є по суті аналогічний слово сказати. Ось що він збирається робити. Printf і F в даному випадку означає "відформатувати". Так що це просто означає, що ви можете вставити різні естетичні деталі. Таким чином, кінець цитати цитати це початок того, що ми збираємося почати називати рядок. Слова, фрази, пропозиції. Рядок у мові програмування, являє собою послідовність з нуля або більше символів. Таким чином, ч-е-л-л-о, кома, і так далі в тому, кінець цитати цитати, рядки. А тепер зворотний слеш п, трохи синтаксично дивно, але ми вже визначено, що минулого тижня в тому сенсі, чи що? Це просто новий рядок. Це просто спосіб передачі на комп'ютер ви хочете еквівалент удару Enter там, але ви не хочете насправді вдарив Enter і, отже, зіпсувати всі форматування вашого фактичного програми. Зараз в дужках вкласти ці рядки, відкритою і хлопець Закрити хлопець, так і всередині, що наша рядок. Тому що це тому, що в C, і інших програм мови, такі речі як Printf приймати аргументи, або взяти параметрів. Таким чином, почати думати зараз цього фіолетового блоку сказати, як функції, як метод, як процедуру. Ви дійсно можете називати це, що ви хочете зараз, але це свого роду мініатюрна програма, яка робить лише одну По-перше, в одну лінію, не менше. Так Printf також те, що ми збираємося почати називати функції, а функції зробити щось - у цьому випадку виводить отформатированную рядок на екрані - а також функції приймають аргументи або параметри. І аргументи або параметри, спасибі, ми маємо на увазі що їх поведінка може вплинути те, що ви проходите в всередині дужок. Таким чином, в даному випадку, Printf потреби бути сказано, що друкувати, і ми просто передати в, в подвійні лапки тут, рядок, що ми насправді хочете надрукувати. І крапка з комою в самому кінці цієї лінії знаходиться всього в історична неприємність якого в кінці Найбільш рядків коду, Ви поставити крапку з комою, щоб зробити Super Clear до комп'ютера що цей рядок коду закінчується тут. Тепер це добре, тому що, як ми побачимо, як програми отримати більше Комплекс, крапка з комою буде зробити супер ясно, нас, людей, а також комп'ютер, де лінії стартового коду і кінець. Зрозумійте, що деякі мови не мають деякий ці ж деталі. І справді, в JavaScript, ви не завжди треба щось як крапка з комою. Але про це попереду. Так петлі. У нас було щось подібне до цього, дуже інтуїтивно, очевидно, зробити щось знову і знову, і знову. Як надіти шкарпетки, або привітатися, і в цьому випадку. Ну, починаючи з сьогоднішнього дня в C, ми могли б висловити цю подряпин блокувати, як час (істина), Е ("привіт світ"). Так зауважити, що ми починаємо будувати буквально на загадку шматок, ніж раніше. У нас же фіолетовий блок, але це всередині цього дужки назавжди блок, і кращий спосіб для перекладу, що З полягає в наступному. Там немає Назавжди ключове слово. Ви не можете просто ввести е-о-т-е-в-е-р в C. Таким чином, найближчим аналогом є час. Тепер, коли (істинна) здається трохи дурним, бо робить вартість істинно ніколи не зміниться? Імовірно немає. Це як сказати поки один, а з, у той час як правда. Це все те ж саме, правда це завжди буває. Таким чином, ця петля насправді викликаючи який цикл? Тільки нескінченний цикл, мають рацію. Нескінченний цикл або, як ми називали його минулого тижня, просто нескінченний цикл. Так що іноді це погано. Іноді це помилка, іноді ось чому ви отримаєте обертовий куля пляжі або пісочного годинника або тому подібне. Але в даному випадку ми свідомо, за якою Причина, хотіли надрукувати одне і те ж знову і знову і знову. Або в разі, як годинник, ви хочете зробити щось знову і знову, і знову. Так нескінченний цикл може мати сенс. І це, як в C ми могли б перевести Назавжди код. Так що тепер ця трохи більш конкретними. Ми повторюємо 10 раз наступне твердження. Таким чином, у той час як (істина) не зовсім там працювати, тому що правда, то завжди вірно. Таким чином, якщо ми замість цього подивитися на версію C, тепер синтаксис отримує ще трохи загадкове. Але, чесно кажучи, як тільки ви починаєте бачити це, все стає досить добре знайомі швидко. Отже, це те, що називається цикл. Цикл розповість комп'ютер щось робити знову і знову, і знову, поки ці речі є правдою. Тепер, що ми маємо на увазі під цим? Ну, є три частини циклу, і ми збираємося повернутися до цього питання в контексті актуальних Приклади в даний момент. Так що не хвилюйтеся, якщо він не зовсім потонути у всіх відразу. Але Int я = 0, коротше, кажучи, дати мені Змінна от цілого типу, так що дайте мені номер називається я, і ініціалізувати його в 0. Тобто мені, як алгебраїчна змінна х і ініціалізувати його в 0. Але в даному випадку ми називаємо це я. Тоді в середині, він говорить, що я менше 10. Це говорить комп'ютеру виконати наступні речі до тих пір, як я менше 10. І, очевидно, він починає менше, ніж 10, тому що вона починається з 0. Тоді, нарешті, ви, можливо, може здогадатися, що я + + засобами. Це трохи синтаксис, який просто означає, що збільшує я. Так що додайте 1 до я, знову і знову і знову. І так, як ми побачимо цю петлю, цей синтаксис, швидше, реалізує точно те ж саме, що, чесно кажучи, в подряпин було саме так Набагато простіше висловити. Повторіть 10, і ви зробили. У C, і в більшості мов програмування, ми повинні бути трохи більш повчальним для комп'ютера і насправді вказати щось начебто цього. Але ми повернемося до цього і іншим синтаксисом. Як щодо змінних? У подряпин у нас було щось подібне цих помаранчевих блоків, де я міг би оголосити змінну. Давайте умовно називаємо це лічильник. Давайте ініціалізувати його до 0, а потім Давайте вічно щось робити. У цьому випадку в подряпинам Я кажу лічильника, так кішка буде мати маленький пухирець мови, що це говорить число, яке в цій змінній. А то у нас зміна лічильника на 1. Так що все це загортається всередину замку назавжди. Таким чином, ми вже зараз є будівельні блоки в С яка перевести це. Один спосіб, яким ми могли б зробити це полягає в наступному. Дайте мені ціле число, назвемо його лічильник. Ініціалізувати його в 0 У першому рядку. У той час (правда), так що я крадіжку цієї ідеї тільки від моменту назад, йти вперед і робити наступне. Друк лічильника, а потім збільшувати лічильник, знову, і знову, і знову. Або, знову ж таки, + + просто означає, додати 1 до чогось. Але є нова частина синтаксису тут. Що стрибати, як не серед наших попередніх прикладах? Так, це% D. Таким чином, ви можете зробити висновок, що, може бути, цього робити, чесно кажучи, заснованих про те, що до подряпин блок робить. Але знову ж в C, ми просто повинні бути трохи більш конкретно коли справа доходить до вираження себе. Таким чином, Е ("% г \ п"). Ну більшість, що ми можемо викинути, як знайомі. Лапки просто означає, що це рядок, зворотний слеш п це просто новий рядок. Таким чином, єдиним новим тут є% р. І все, що є прототипом. % D буде позначати десяткове число. А% г комп'ютерних засобів, покласти десяткове число тут. Ну, який номер ви хочете, щоб покласти туди? Ну, як ви, можливо, може зробити висновок, після коми ми говоримо, Лічильник, це ім'я змінної, що ми оголосили або створив пару рядків вище. Так що це тільки шлях C про підключення змінної в Рядок динамічно. Тому що на відміну, якби я замість цього зробив щось подібне це, Е ("Лічильник"), що б це Програма замість цього, мабуть? Це буде буквально друкувати "лічильник". Який не про те, що я хочу. Мені потрібно замінити в деяких числове значення. Отже, ми бачимо, що функції, то, як Printf, може зайняти не тільки одного аргументу, як "Привіт світ". Вони можуть прийняти коми цитатою кінець цитати, а потім деякі змінні , Яка допоможе підключити до, як ми побачимо попередній рядок Через ці заповнювачі% знак. Ну що ж логічні вирази? Логічні вирази були ці цінності, істинне або помилкове. Так чи ні. 1 або 0. Включений або виключений. Таким чином, в Подряпини вони виглядають так, і зауважив, що нижній блок тут насправді разом меншого з двох блоків. Таким чином, я як би перетягнути три частини головоломки разом, щоб зробити, що більше паззл там, так що я може передати ідею, що я хочу х бути менше, ніж у і У бути менше, ніж р. І таким чином я можу перевести ці дві окремих лінії наступним чином. Верхній може бути дуже тривіально переведені на C, тільки з х <у. Може бути, з деяким дужки для хорошої заходом. І тоді в C, ви не пишете і для позначення З'єднання щось. Ви замість цього написати &&. І, як ми бачимо в кінці кінців, один амперсанд відбувається з означає щось інше. Так && просто позначає ідею і. Отже, ще раз, навіть якщо це починає виглядати досить складна, однією з цілей введення Scratch, крім просто маючи свого роду забава на рампі, де ви можете зробити щось дуже графічних і анімаційних, і Спільне і т.п., також, щоб передати ідею, що всі ідеї ми починаємо занурення в сьогодні і далі були втілені в навіть, що просте Інтерфейс з першого дня. Що про це один тут? Так умовах. Так подряпин блок зліва там виглядає трохи складніше. Але це лише деякі захоплення і пониження знайомі речі. Якщо х менше, ніж у, скажімо так. Інакше, якщо х більше у, так би мовити. В іншому випадку, ми можемо логічно припустити, що це зробив висновок, що вони повинні бути рівні. Так що сказати, що вони рівні. Зараз в C праворуч, точно такий же річчю. І зауважив, що фігурні дужки буде Особливістю C та інших мовах, що робити такого роду інкапсуляції. Так само, як якщо блок це жовта річ, яка начебто захоплення фіолетовий блок всередині нього. Точно так само ці дужки - ці фігурні дужки - повинна викликати в уяві, що само ідея охоплює один або декілька рядків коду, з відступом усередині них. Отже, на правій стороні тут, якщо х менше, ніж у, Printf ("X менше, ніж у"). Інакше, якщо х більше у, роздрукувати те ж саме. Решта друку, що вони рівні. Коротше кажучи, є досить пряме відображення або переклад мови, який ми бачили дотепер, у тому числі для деяких з більш складних функцій. Таким чином, ви не могли б використовувати це для вашого проекту, чи, можливо, не використовувати це для свого проекту на цьому тижні. Але ми ці речі називаються масиви C. У Scratch, вони називаються списками. І ми побачили їх з Fruitcraft RPG минулого тижня. Маленький синій хлопець, який ходив, піднімаючи вишні та апельсина і тому подібне. Ну в Scratch, який був реалізований з цим помаранчевим блок, який містить слова, в даному випадку, ми буквально додавши, що «помаранчеві», щоб змінна інвентарю. Таким чином, в C, цей синтаксис буде отримати трохи більше загадковими. І ми повернемося до цього на наступному тижні і більше цікаве в світі криптографії з ним. Але на дні тут, ці дві лінії, в основному переводити на те, що ми робимо в одній подряпини блокувати там. Але про це попереду. Таким чином, поставивши його разом, ось це програма, в С. Так що давайте швидко дражнять один від одного деякими з частин синтаксису тут, але тоді давайте насправді почати писати код, ознайомитися Ви з деякими з інструментів, які ми будемо використовувати, і подивитися, якщо ми може спиратися на даний час деякі з цих основних будівельних блоків з Минулого тижня, тепер синтаксично в С. Так, у верхній тут, це є, мабуть, одним із самих нудних програм, які ви могли б написати в більшості будь-якій мові програмування. Але це свого роду має особливе значення, тому що це канонічних програми, що будь-який науковець пише, коли навчання когось мову програмування - Привіт програмі світі. Таким чином, на самому верху, ми бачимо, це поняття включає # , А потім в кутові дужки, stdio.h. Ми збираємося повернутися до цього, але насправді, що це означає, що є файл в цьому світі називається стандартним I / O, STDIO точка год, і це просто текстовий файл, хтось написав років тому. І всередині цього текстового файлу цілий букет функцій або методів або процедур, що хтось інший писав, що ми є бенефіціарами, тому що ми Тепер можна використовувати код цієї людини. Функції він або вона писала. У цьому випадку, Printf не те, що я написав, це не те, що CS50 написав. Це те, що хтось написав років тому і поставити в файл stdio.h, а потім, як в сторону, поклав інша частина функції в іншому файлі. Але ми туди дістатися. Таким чином, # включити тільки наш спосіб сказати, в C, дати мені доступ до функцій, що хтось написав. І в цьому випадку мене хвилює, тому що я хочу Printf. Тепер ми отримуємо Int основних (недійсними). Так що це одна з цих речей, чесно кажучи, що в день 0, дуже багато в мене у вигляді зону тому, що це просто не цікаво інтелектуально, деякі з синтаксису. Але тепер знаю, що функції, інакше відомий як процедур або методів, як правило, виробляють деяку цінність. Вони щось робити. Вони приходять з відповіддю. Вони виробляють продукції. Так Int поруч із головним є тільки наша скорочений спосіб говорити що ця функція ця процедура, в кінцевому рахунку, відбувається повернути вам номер. І чому це так, ми будемо повертатися. Головне тільки стандартні за замовчуванням світу за замовчуванням функція, яка збирається отримати виконаний в програмі C, коли ви запустите його. Порожнеча просто означає, що ця річ, головне, не приймає Аргументи в цьому випадку. Так що я веду себе супер явним. Там немає рядків там, немає запитах. Порожнеча означає відсутність аргументів до основного. Тепер, нарешті, на щастя, останні два рядки знайомі. Усередині фігурних дужках у нас є Printf і у нас є відповідь. І повернення це свого роду шкода, що ми повинні поклав його туди, тому що в даному випадку це не робить все, що багато цікавого. Але в комп'ютерній програмі, коли функція повертає 0, це означає, що все добре. Нічого пішло не так. З іншого боку, якщо функція повертає 1, або негативний 1, або негативні 1337, або деяких випадкових чисел таке, що як правило, означає, що помилка насправді відбулося. Так що якщо ви знаходитесь на своєму Mac або ПК, якщо ви коли-небудь бачили деякі дратівливі повідомлення, так як комп'ютер вийшов з ладу або заморожені, і є загадкове повідомлення про помилку, , А потім код, як код системи 1,2,3,4, деяке число, , Що в цілому є непотрібним докладно розповісти Більшість з нас людей, але це те, що деякі функції або деякі Програма насправді повернувся, відмінне від нуля значення. І на користь цього є те, що 0 означає, що всі так і то ви, по суті є нескінченна кількість речей, які може піти не так. Саме тому вони обрали 0 для хорошої і ненульове значення для погано, як ми скоро побачимо. Так що давайте йти вперед і написати це. Так Нагадаємо, що днями я використовував свій Mac, щоб відкрити вікно терміналу, а потім я відкрив тексті програми, як TextEdit, і я почав писати код. Ну це нормально. Але ваш досвід буде по-іншому на Mac, або на комп'ютері Solaris, Linux комп'ютер, незалежно від операційної Система вам трапиться бути використання. І так в курсі, що ми замість того, щоб використовувати те, називається CS50 Appliance. Так CS50 Appliance являє собою завантажуване частина програмного забезпечення , Що дозволяє запускати операційну систему під назвою Linux, зокрема Fedora Linux, на свій власний Mac або PC. І ви зробити це, завантаживши те, що називається гіпервізор. Так що все це буде описано в проблемі набір 1. І ви будете керуватися до того, що вам необхідно скачати. Але кінцевий результат, чи є у вас Mac або PC, це ви завантаження безкоштовного програмного забезпечення. Потім скачати CS50 Appliance, і ви кажете, що безкоштовна програма - гіпервізор - Для запуску CS50 Appliance в вікно на вашому комп'ютері. І те, що це відбувається. Я зараз, зауважте, тут, здається, що буде робочий стіл навколишнього середовища. І дозвольте мені насправді зменшити цю одному вікні. Так що це тепер мій Mac, з невеликим вікном тут, так і всередині цього вікна, трапляється, абсолютно іншої операційної системи. Дійсно є це стартове меню тут, внизу, нагадує Windows, яка має цілу купу підменю, в тому числі Посилання на CS50 керівництва, Dropbox, і тому подібне. І те, що ця середу в даний час є стандартною середовищем що всі ми тепер можуть використовувати, так що незалежно від того, що ваш комп'ютер, то, що ви встановили на ній, яка версія з Mac OS або Windows, ви працюєте, всі ми тепер маємо тому ж середовищі. І ось тепер в цю середу ми можемо почати писати код. Так що я збираюся йти вперед і відкрити програму під назвою Gedit. Це зіставно з notepad.exe, або TextEdit на Mac. І це просто супер проста програма редагування тексту , Який виглядає наступним на перший погляд. Зараз на самому верху, у мене є біла палітра, внизу я Тобто це чорне вікно, яке говорить jharvard @ прилад. І це тому, що обліковий запис користувача, що ми попередньо створили для всіх називають Джона Гарварда. У нього є папка, в якій всі його файли збираються піти, і Ось, де ми можемо почати писати код. Отже, дозвольте мені йти вперед тут і збільшення небагато, і я збираюся робити # включити , Int основних (недійсними), а Потім я збираюся зробити Е ("привіт світ") , Повертається 0. Тепер це все дуже чорний і білий. Дозвольте мені йти вперед і робити одну справу вчити Gedit, що я насправді робить. Дозвольте мені перейти до Save As. Я збираюся вибрати в лівій частині тут jharvard. Отже, ще раз, навіть якщо ви ніколи не використовували Linux, перш ніж, чесно кажучи в ці дні, всі вони покладаються в основному же тип інтерфейсу - Mac OS, Windows і Linux. Тому я вибрав домашню папку jharvard тут. І я хочу зберегти цей файл як hello.c. Таким чином, на самому верху, я набрав hello.c, назвавши C програми з розширенням. с- що звичайна практика. І я вдарив Зберегти. І що тепер приємно, що я ефективно навчати Gedit, що це програма C. Зверніть увагу, що мій чорно-білий текст тепер колірне кодування, або підсвічування синтаксису, який тільки привертає мою увагу до різних смислових частин програми. У лівому верхньому куті там, як мої програми стають все більш складними, я буде мати список всіх речей, які я написав. Так ось воно що там. Отже, дозвольте мені тепер масштаб і спуститися до цього вікні терміналу. Так що це, можливо, нових для багатьох людей. Якщо ви ніколи не використовували середовище командного рядка, ви ніколи не використовувати DOS, або ви ніколи не використовували Linux, або ви ніколи не відкрили вашого Mac OS вікно терміналу, є багато речей, які ви міг зробити з GUI, наприклад, вказуючи, а натиснувши та перетягування і падіння, і тому подібне, але в цілому - звичайно, в світі комп'ютерних наук - за допомогою командного рядка, де у вас немає миші Як правило, у вас є тільки клавіатуру, насправді багато більш потужний, ніж інтерфейс, як тільки ви пристосувалися до різні команди. А ви як би звільнити себе від необхідності точку та натисніть на все. Таким чином, в Gedit ми будемо сортувати мати краще з обох світів. Ми можемо перетягувати текст, ми бачимо, що хороший і кольором. Але коли приходить час, щоб запустити нашу програму, ми будемо іноді просто використовувати це невелике вікно тут. Так що я збираюся йти вперед і зробити це. У нижній чорно-білі вікна, я піду вперед і писати брязкіт. І брязкіт це ім'я компілятора. Це програма, яка перетворює мій вихідний код в, таким чином, об'єктний код. 0 і 1, які ми бачили коротко минулого тижня. Нагадаємо, з минулого тижня, ми обіцяли, що ми збираємося перейти від щось подібне до цього - ми повинні були бути щось на зразок цього - і це, звичайно, не те, що людина збирається робити вручну. Так замість цього ми збираємося використовувати програму, і програма в цьому випадку називається Clang. І ім'я моє програму hello.c. Таким чином, з метою складання hello.c з вихідного коду в об'єктний код, або 0 і 1, цього має вистачити, щоб просто робити це та натисніть Enter. Гаразд, нічого, здається, не відбулося. Але тепер я знаю, чи з минулого тижня, що його ім'я за замовчуванням Програма, коли написана на C, це нерозумно називати a.out. Саме нецікаве назву можна придумати. Перша буква алфавіту, з те, що було виводиться, але нехай буде так. Це моя програма, і тепер точка слеш, як ми побачимо, є насправді просто свого роду функція безпеки, тому що a.out це програма, яку я написав. Він не прийшов з мого комп'ютера, це не в Program Files. Це замість папки Програми Mac ОС. Мені потрібно бути супер явний з комп'ютером, і говорити ця програма, a.out, знаходиться в поточній папці, поточного каталогу. І те, як ви уявляєте це в середу, як це є точка являє іншій папці, ви в даний момент знаходитеся І так. / Просто означає запустити a.out в поточній папці. І я виконати це за допомогою Enter, і ось, моя найперша програма. Тепер дозвольте мені зробити крок назад. Це вікно трохи малий, і розуміють, що дно ліворуч від приладу ось ще один значок. Одним з них є Chrome, які повинні бути добре знайомі, тільки веб- браузере всередину приладу. І це чорно-білий значок просто великі вікна терміналу. Так що, якщо це стає трохи дратує начебто тільки що це маленький шматочок вікна, з яким взаємодіє з програмами, ми можемо замість цього. А тепер дозвольте мені почати друкувати кілька скоро бути знайомим командам. ліва сторона Так Ls це команда для включення в перелік. Таким чином, в Mac OS або Windows, ви, як правило, двічі клацніть папку, а потім, вуаля, ви побачите всі різні файли і папок. У середовищі командного рядка, де ви можете ввести тільки команд або тексту, LS є еквівалентом. Так покажіть мені, що в цьому каталозі. Тепер є купа речей тут, це й небагато знайомі і незнайомі небагато. Але зверніть увагу, що як і Windows, і Mac OS, jharvard має робочому столі папку. Таким чином, будь-які значки, які знаходяться на моєму робочому столі трапиться бути в цій папці. Там в папці завантаження, речі, які Chrome може поставити там. Dropbox. Таким чином, прилад поставляється з вбудованою підтримкою для Dropbox так що протягом семестру, ви можете синхронізувати з вашим Dropbox рахунок, так що всі ваші програми резервного копіювання. Вони доступні на іншому комп'ютері. Якщо щось піде не так, завжди з приладом, ви можете Дуже легко відновити з Dropbox. Так що папка там для цього. Там два файли, які я зробив - hello.c і a.out. І потім направо є деякі інші папки, які ми будемо дістатися до в кінці семестру, з веб- програмування. Так що, коли я роблю. / A.out, введіть, це говорить йти В каталозі я перебуваю, поточний каталог, і запустіть програма під назвою a.out прямо там. Гаразд, так що це приємно і добре, але це не все, що переконливими, щоб написати програму під назвою допомогти a.out. Так що ми дійсно можемо зробити це трохи по-іншому. Таким чином, замість того, щоб просто працює брязкіт, hello.c, давайте додамо те, що називається аргументом командного рядка. Таким чином, аргументи командного рядка, або вимикач в даному випадку, це просто іншого слова або фрази, які ви вводите в рядку після програми, яку ви хочете запустити. Таким чином, в даному випадку, брязкіт це програма, я хочу бігти,-O засоби виходу файлі, який більше не називають a.out. Вихідний файл з ім'ям привіт, і зробити це шляхом складання Останнє слово на лінії, hello.c. Коротше кажучи, це дуже незначне покращення, в результаті чого замість того, щоб це тупо імені файлу a.out, Тепер я можу робити брязкіт-O Привіт, то hello.c, і потім натисніть Enter. Здається, ніщо не трапиться, але знову ж хотілося з 0 - коли ніщо, здається, сталося це означає, що нічого поганого сталося - Так давайте зробимо Ls зараз, введіть, та й зараз я є привіт програмі. Так що, якщо я типу привіт зараз, команда не знайдена. OK,. /. Так точно. Так що, тому що це програма, яку я написав, і він не прийшов з комп'ютер,. / привіт, Enter, значить, Зараз я займаюся привіт. Так ось воно що там. Тепер те, що ми в кінцевому підсумку отримати все більше і більше командного рядка Аргументи, які дозволяють нам зробити більше, але тільки для тих, яким це може бути стара капелюх, дозвольте мені насправді йдуть в каталог тут і просто дати вам тізер, як ще ми може йти про реалізацію привіт світ. Відпустіть мене в тут, і я збираюся відкрити його. Таким чином, на самом деле, я збираюся пояснити, що я роблю, так це корисно. Дозвольте мені назад. Так що я займаюся цим давно. Так помітити більш на право є пара каталоги, які дивним ім'ям source1m і source1w. Це просто нерозумно конвенції ми використовуємо. Джерело просто означає, що вихідним кодом, 1 означає, що це тиждень один, і м означає, що це понеділок, і ш означає, що він у середу. Так що нічого загадкового немає. Це просто скорочене позначення. Ці сині речі папки, інакше відомий як каталогами. Я хочу піти в цю папку зараз, а на звичайному комп'ютері Я міг би просто двічі клацніть на значку папки і там всі мої файли. Але в середовищі командного рядка, я зовсім не можу зробити що, таким чином, замість цього, я повинен змінити каталоги вручну. Так що якщо я Тип CD, а потім source1m, Enter, помітили, що мої рядки, справа в білому зліва, просто змінилася. І дійсно, коли вона тільки що сказала дужках, а потім маленька карлючка, символ тильди, що просто означало, що я був У домашній директорії Джон Гарвард, його My Documents, його особисті файли. Але тепер в дужках це говорить ~ / source1m. Це просто означає, що я перебуваю в папку під назвою source1m , Який в домашньому каталозі Джона Гарварда. Так що, якщо зараз я хочу перерахувати файли у цю папку, легко питання, я просто ввести Ls. І тепер я бачу всі файли, які я попередньо створений для сучасних лекція, кожен з яких, або більшість з яких, відбудеться закінчуватися на. с. Отже, дозвольте мені тепер іти вперед і виконати Gedit програми під назвою holloway.c, який написав кілька випадкових хакерів в Інтернеті, що виглядає трохи як це. І ми не збираємося пройти через це один в будь-якому докладно, але для тих, хто більш зручним, зокрема, якщо Ви хочете зробити припущення про те, що ця програма робить тут. Будьте впевнені, чи є ви більш-менш зручні, ми навіть не потрапити на такого роду речі до кінця в цьому семестрі. Це те, що приклад конкурсі затемнений C, який засоби написати найзагадковіше шукає програму ви, можливо, може перевершити інші розумні люди, які так само намагаюся писати речі і показати, що вони можуть написати більш загадкові речі, ніж ви. Так що це не приклад добре написані програми з точки зору стилю, це приклад програми, яка виграє конкурс, для людей, що намагаються бути розпливчастим і абстрактним. Таким чином, якщо ми запустимо цю річ, відпусти мене в моєму вікні терміналу, так сказати. Так ось цей чорний і білий середовищі називається вікна терміналу в цілому. Дозвольте мені йти вперед і скомпілювати його. Я не збираюся використовувати брязкіт, тому що ця програма є трохи загадково і потребує різних компілятора, одна називається GCC. Але він робить те ж саме. Він приймає вихідний код об'єктний код. І тепер, якщо я біжу a.out, що програми, яку ви тільки що бачив це робить. Так що хлопець в цьому році виграв конкурс. У всякому разі, ми не будемо в цьому напрямку, як такої. Так що давайте насправді намагаються тепер дражнять один від одного, що можна зробити з цими основними будівельними блоками, щоб все більше і більше цікаві програми. Отже, ми написали програму, ми запускаємо програму. Тепер ми дійсно можемо спростити і більше не писати Слово дзвін у командному рядку. Виявляється, як наші програми отримують більш загадковим, ми можемо, або більш складна, швидше, ми дійсно можемо виконати цю команду. Отже, дозвольте мені повернутися до моєї домашньої директорії, так би мовити, дозвольте мені видалити - ГТ видалити команду - я збираюся видалити файл з ім'ям a.out і привіт. А тепер помічаю в середовищі командного рядка, так само, як в GUI, ви отримаєте запит. Я не можу натиснути кнопку, хоча, я повинні ввести в, для Так, у для да. І тепер, якщо я друкую Ls знову, зверніть увагу, що ці зелені Програми - a.out і привіт - пішли в минуле. Остерігайтеся ГТ. Він може робити погані речі, як ви можете шляхом перетягування Заняття на ваше сміття. А тепер давайте йти вперед - і я можу це зробити - дзвін-о привіт, привіт - Я вже набридло введення цієї команди. Хоча я набрав його трохи швидше. Так що ми можемо замість цього зробити привіт. Так що не компілятор. Це просто зручна програма, яка поставляється з Linux, в цій випадку - операційна система - , Яка автоматизує процес компіляції програми. Таким чином, замість запам'ятовування дзвін-O ім'я файлу і Потім так далі, особливо якщо ці лінії стають довшими і більше, я можу просто написати зробити. І це буде виплюнути цілу купу речей, які ми в кінцевому рахунку бачити в цьому семестрі. Але зверніть увагу, тепер, якщо я типу LS, привіт повернувся в мій каталог. І дійсно, я можу запустити його. / Привіт. Так що просто автоматизує процес роботи, що було, У цьому випадку, набагато довше, більш складні команди. Так що ми збираємося почати використовувати марку, тільки тому, що багато більш зручною для користувачів. А тепер давайте зробимо більш цікаві програми ніж просто привітатися. Таким чином, у програмі ми написали досі є основні. В тому і річ, що за замовчуванням ногами все геть. Але є й інші функції, як там добре, і stdio.h це те, що ми бачили у верхній частині нашого Файл раніше, і це те, що відомо як стандартної бібліотеки. Усередині стандартній бібліотеці ціла купа функцій що хтось написав, і ми можемо почати використовувати ці Функції писати більше цікаві програми самі. Отже, дозвольте мені повернутися до приладу. Я збираюся закрити це вікно терміналу. Я збираюся закрити речей, які ми писали раніше, і просто піти в hello.c, і зверніть увагу, що тепер я можу зробити наступне. Привіт світ ще не все, що цікаво, я хотів би персоналізувати цю програму для себе. Таким чином, замість того щоб сказати світові, я збираюся йти вперед і сказати - Я міг би ввести David - але це дійсно є свого роду Принципово те ж саме. Але давайте спробуємо цю ідею заповнювача. Нагадаємо, що в C, а в Printf, у нас були ці заповнювачів, і є більше, ніж просто% р. Таким% D був, швидку перевірку осудності. Добре, десяткове число, ось і все. Десяткових цифр, ось і все. Таким% з, як ми зіткнемося, буде характер. Покладіть характер букви тут через г, або знаки пунктуації символ. Один символ,% F, хто-небудь знає з інших мов? Таким чином, значення з плаваючою точкою. Дійсне число. Так що не десяткове число - це насправді реальне число з десяткової крапки, і деякої кількості цифр ліворуч і праворуч від нього. % З, рядок. Це той, який ми збираємося бачити досить часто. Рядок, знову ж таки, це просто слово, фраза, послідовність окремих символів. І, нарешті, доктор юридичних наук? Так що це більше кута випадку. Довго, довго після коми. Так що якщо ви хочете не просто число, яке ця велика, ви хочуть більшого числа, ви будете мати, щоб вказати комп'ютер, що це певного розміру. Так що давайте змінити цей небагато. Замість того, щоб просто важко коду Девід, дозвольте мені трохи динамічно% говорять с. Так що ставте% з тут, який є прототипом для рядка. Тоді дозвольте мені зробити коми, а потім "Давид" тут. Тепер це не все, що інтелектуально цікавим, тому що все, що я зробив зараз дійсно створює більше роботи для комп'ютер. Замість того, щоб сказати комп'ютеру, робити це все відразу, я зараз кажу це зробити і вставити рядок тут в кінцевому рахунку, кома, тут є те, що рядок. Так що це не найкращий поліпшення, але це принаймні крок до більш цікаву програму. Тому що тепер, дозвольте мені йти вперед і зробити це вікно трохи більше, дозвольте мені йти вперед і бігти робити привіт. І тепер,. / A.out не працює, чому? Гаразд, зараз це називається привіт. Отже, ще раз зробити, а також з брязкотом-о, перейменований Програма буде щось більш цікаве. І вуаля: тепер він говорить привіт Давиду. Гаразд, ще дурна програма. А тепер давайте насправді повернутися сюди і ввести поняття змінної. Хіба не було б здорово, якби я міг оголосити змінну , Тип якого є рядок? І значення змінної насправді походить від користувачів самого себе. Таким чином, довільно, я збираюся подзвонити моїй змінної с, що тільки загальна угода, коли у вас є одна змінна рядком. Я збираюся зробити знак рівності, і тоді я буду називати Функція називається GetString. Так GetString не те, що вбудований в C. Це функція, яка CS50 співробітники написали, дійсно тільки для ці перші пару тижнів, щоб спростити процес отримання користувальницького введення та отримання користувальницького введення у формі рядків або чисел, і такі. Так GetString, як Printf, але, очевидно, замість того, роздрукувати це буде робити те, що говорить його назва, отримати рядок. Але використовувати GetString, ми збираємося, щоб внести зміни Тут, за цим. Таким чином, інтуїтивно, ця програма, ми сподіваємося, буде так чи інакше отримати рядок від користувача, а потім те, що він збирається робити з цього рядка, називається S? Це просто буде роздрукувати його, вірно? Ще не стимулюючі програми, тому що все це буде потрібно зробити, це підключити це значення в%, де з говорить, що треба йти. Отже, давайте принаймні, побачити це в дії. Дозвольте мені зберегти і масштабу. Зараз у моєму вікні терміналу тут, внизу, маленький шматочок одного, Дозвольте мені ще раз роблять привіт. Гаразд, і ах, чорт візьми, я отримав цілу купу помилок. Дозвольте мені прокручування вгору, і ми бачимо наш перший - так що давайте насправді зробити це в ще більші вікна, щоб ви можна побачити, як сильно я облажався - так що привіт. Добре, що це катастрофа, чи не так? Я написав три рядки коду, і це дає мені 12 помилок. Так чому ж це? Так що, на щастя, часто, коли ви бачите дуже багато помилок впливів відразу, це дійсно просто тому, що ви плутати комп'ютер тут. І залишається плутають до того часу він отримує тут. І тому він просто починає відключення, і спотикаючись, і впливів більш страшні речі, ніж насправді ставиться. Таким чином, в загальному, завжди починайте з верхньої. Так на самому верху самий екземпляр червоного, Повідомлення про помилку полягає в наступному. Використання неоголошених ідентифікатора рядки, я означає стандарт? Я цього не зробив. Я мав на увазі рядки, але це тому, що теж слово рядка що я продовжувати використовувати усно насправді не існує в C або. Це те, що ми будемо використовувати тільки протягом першого тижня або двох тут, але воно існує у файлі під назвою cs50.h. Таким чином, на даний момент, знаю, що є ця інша бібліотека, яка Співробітники писав, так що він був написаний пізніше, ніж stdio.h. Але всередині cs50.h є визначення, синонім роду, який створює це слово рядка. Так що тепер дозвольте мені повернутися до моєї вікні терміналу. Я збираюся очистити весь цей бардак по Ctrl-L. Ми просто стерти все чисте, і я збираюся піти далі і зробити Вітаю ще раз, Enter. Так що ж сталося зараз? Тепер всі ці помилки пішли. Так що я дійсно зробив? Я тільки що навчив комп'ютер, рядок існує, і це в тому, що файл з ім'ям cs50.h. Так що перестаньте скаржитися, тому що тепер ви знаєте, де знайти заяву, що функції, так би мовити. Де вона існує в світі. Так що тепер я буду йти вперед і працювати привіт. Я, здається, нескінченний цикл, нічого не відбувається. Так що мені потрібно щось типу тут, прямо. Перший рядок коду в моїй програмі було GetString. Так що буквально чекає мене, щоб отримати рядок. Так що в цьому сенсі так, це нескінченний цикл. Мабуть, в GetString за замовчуванням поведінку, яке ми написав - персонал - просто говорить, що чекати і чекати й чекати і чекати й чекати, поки користувач не дає вам рядок, набравши щось дюйма Отже, дозвольте мені йти вперед і типу D - V - I-й, Enter. І ось він, привіт Давиду. Тепер ця здається, що це просто акт? Дозвольте мені піти далі і ввести Томмі. Введіть, ладно, здається, працює. Роботи для Роба, роботи по Zamyla, працює - добре. Так що це буде працювати, швидше за все. Так воно і повинно надрукувати все, що ми насправді дати, і ми можемо бути трохи важко тут. Давайте подивимося, якщо ми робимо щось подібне привіт. Можете йти сюди, давайте подивимося, копіювати, вставляти. Я не збираюся бути в змозі вставити, що багато разів тут. Вставити в порядку, Shift + Ctrl + V. Так що ж може статися, що це погано? Добре, таким чином, сегментації. Таким чином, деякі з вас з попереднього фон буде знати, що як правило, даючи комп'ютерів багато входів, коли вони ймовірно, не означало, щоб отримати довгі імена, як це - погано речі. Дійсно, у світі веб-теж, це відбудеться зовсім небагато, яким при проектуванні веб-сайту, коли ви Проектування Facebook, ви повинні зробити довільні рішення до передні, наприклад, як довго буде чийсь Facebook ім'я користувача може бути? Або, як довго буде спочатку чиєсь ім'я може бути? Як довго буде номер телефону когось бути і тому подібне. І якщо програмісти роблять невірні припущення, програми зламати тому що ви намагаєтеся дати їм більше продукції, більше вхідного швидше, ніж вони мають пам'ять. Або оперативної пам'яті, виділеної для нього, і тому, якщо зараз я вдарив Enter, що програма насправді працює, тому що ми були в бібліотеці і ми дійсно очікували даному конкретному випадку. Але, безсумнівно, в цьому семестрі, ви будете писати принаймні один програма, яка буде говорити ці слова. Пам'ятайте про це тижнів з цього моменту, може бути, через два дні. Помилка сегментації це погано. Він буде ставитися до ваших робите щось, що комп'ютер не очікував. І в цьому випадку, ви, програміст, не очікував. Багато чого сподобалося те, що цю купу шкарпеток, існують різні кутом випадках ми могли б зіткнутися. Точно так само в програмах, якщо ви не передбачати, як довго чиєсь ім'я буде. Або що, якщо у мене є зловмисник, і його або її ім'я насправді досить короткий, але вони просто намагаються зв'язуватися зі мною? Що буде в поведінці моєї програми? Ну, в такому разі, щось може насправді збій. Так давайте зробимо це. У 90 хвилин, це жахливо довго зробити інформатику. Чому б нам не стати звичкою п'ять хвилин розбити тут, і коли ми повернемося, ми будемо занурюватися в деяких більш складні і переконливі програми? П'ять хвилин. Добре. Таким чином, один швидкий коментар. Мені сказали, що, хоча це було на екрані раніше, що вийшло з моїх вуст було cs50.net/rsvp. Це правильно. cs50.net/lunch. Отже, тепер ви можете спробувати RSVPing для цього в / обід. Але давайте зробимо це зараз. Так це було супер швидкий, супер новий для великої кількості людей. Старі капелюхи для деяких людей. Так що давайте перемотати на мить, і подивитися, як ми дісталися до це привіт світового виробництва мить назад. Отже, по-перше, є такий CS50 Appliance. Знову ж таки, частина програмного забезпечення, завдання встановити 1 розповість Вам, як завантажити його, де його скачати, то натиснути і так далі. І ось одного разу ви будете слідувати цим інструкціям, ви зможете щоб збільшити ваші вікна, і ваш Mac або PC буде виглядати мало щось на зразок цього. Чорний фон, домашньої теки на вершині, де всі Ваші файли йдуть, сміттєвий бак в лівому верхньому кутку, меню в нижній частині. Отже, ще раз, дуже схожі по духу Mac OS або Windows, навіть якщо воно відбудеться, буде Linux. Отже, що ж ми наступного разу робити? Ну, ми почали писати програми. І пам'ятаєте з минулого тижня, що все, що потрібно написати Програма являє собою простий текстовий редактор, як Блокнот або TextEdit. Чесно кажучи, ви навіть можете використовувати Microsoft Word. Але погано, врешті-решт відбудеться, тому що це дуже жорсткі рішення для написання програми, а також він буде зберегти його в неправильному форматі. Але це просто текстовий редактор, текстовий процесор, це все, що потрібно написати програму. Таким чином, в CS50 Appliance, ми можемо зробити це в один простий спосіб. Ми можемо просто натиснути на цей значок у лівому нижньому куті. І знову ж таки, проблема встановити 1 проконсультують Вас про це, і вуаля - Ви отримуєте цю чорно-білий інтерфейс, де ми можемо почати написання коду. Отже, давайте почнемо писати супер просто програму ще раз. Я збираюся йти до файлу, зберегти, і я збираюся подзвонити це, скажімо так, hello2.c. І я просто кажу, натиснувши на jharvard, поклав його У своїй домашній директорії, я дійсно не дбаю де це не йде. А потім Зберегти. І тепер я можу почати писати мою програму. І я пам'ятаю з раніше, що я повинен написати Int основних (недійсними). Збільшити на верхньому лівому кутку. А потім я хочу сказати, Printf, візьміть два. А тепер рядки, близькі цитата, закрийте дужки, крапка з комою. І тоді я йду сюди, щоб мої вікна терміналу, що це вбудований в Gedit, просто для зручності. І я збираюся піти далі і написати Привіт зробити, але не Привіт одна, hello2. Так що мій файл називається hello2.c. Мій файл тому слід назвати hello2, в даному випадку. Чорт візьми, що ж я зробив не так? Гаразд, я чітко опущені рядки, якщо згадати, що попередніх програм виглядати. Але давайте подивимося, якщо ми не можемо дражнити цього один від одного. На жаль, більшість людей, які пишуть програми, з якою ми пишемо програми не спростити все, що добре. Тому ми повинні виду знежиреного за те, що не зовсім зробити сенс тут і подивитися, якщо ми можемо з'ясувати, що трапилося. Найперша рядок там говориться неявно оголосити C бібліотечні функції Printf з типом Int. Добре, я зрозумів частиною цього. Але це, здається, натякає на те, що я використовував Printf так, якось. А який сенс це неправильно? Я просто не навчить комп'ютер, на якому він знаходиться у файлі називається stdio.h. Тепер у мене є тільки просто запам'ятати, що тепер це Printf У stdio.h, та й там буде інший функцій в тому ж файлі, що ми будемо звикати. Так що тепер дозвольте мені йти вперед і вдарив Ctrl-L просто зрозуміти, що далеко, щоб повторні hello2, і вуаля. І цю команду ще раз, більш складні, ніж ми будемо пояснювати, для сьогоднішні цілі. Але це запустити брязкіт і дзвін бере вихідний код і випльовує 0 і 1. А ті, 0 і 1 в цьому випадку називаються що? Добре, об'єктний код. І файл, який вони у ще називають, так, hello2, в даному випадку. Тому що мій текстовий файл був hello2.c, Enter. А тепер я взяти два знак оклику, знак точка, знак оклику. Гаразд, ми зараз маємо можливість отримати рядки, по-видимому. Ну, що ще ми можемо отримати від користувачів? Ну, в CS50 бібліотеки, є і інші функції, збираються спростити наше життя в ці перші кілька днів. GetChar, GetDouble, GetFloat, GetInt, GetLongLong, GetString. Ну, давайте обривати найпростіший з них в першу чергу. GetString буквально робить це. Він просто сидить там, чекаючи, коли користувач введе небудь, і як тільки я набираю щось в і натисніть Enter, це робить щось з цим значенням. Так що давайте повернемося до цього прикладу, щоб побачити саме те, що GetString робив. Дозвольте мені йти вперед і відкривати в Gedit, hello.c, і згадати це право до перерви, це те, де ми зупинилися. Отже, давайте тепер дражнять один від одного в цьому трохи докладніше. Таким чином, у рядку 6, є дві речі, відбувається в даний момент. Знак рівності відділення першої половини і другої половини. Таким чином, на лівій стороні знаку рівності, ми говорять рядки з. А потім, умови просто непрофесіонала, що рядок з робити, як ви думаєте? Це створює Що? Таким чином, це створення рядка називається с. Тепер те, що це дійсно означає? Ну, це резервування місця для рядка називається с. Це не зовсім вірно. Що це робиш? Ну комп'ютерів, як ви знаєте, у жорстких дисків, що, де Ваші файли зберігаються. Комп'ютери мають RAM, а от де програми завантажуються в той час як вони працюють. Отже, коли ви двічі клацніть значок і Microsoft Word відкриває вгору, Microsoft Word працює, так би мовити, в оперативній пам'яті, яка є Електронна частина вашого комп'ютера. Не фізичну, механічну частину, яка обертається, де Дані зазвичай зберігаються в довгостроковій перспективі. Так рядок з досить багато говорить комп'ютера, дайте мені достатньо оперативної пам'яті, щоб відповідати рядку. Тепер це трохи спрощено, тому що Наскільки велика рядок буде? Ну, ми насправді ще не знаю, так що в найближчі тижні ми насправді відступити шар, який є рядком і Ми вам скажу, що це дійсно так. String, на даний момент, це просто хороша спрощення нашого світу. Але рядок з заявляє рядок називається с, на даний момент. Оголошує рядок. Це залишає деякий простір в оперативній пам'яті для рядка користувач Про друкувати. Тепер давайте подивимося на право знак рівності. Так він говорить GetString (). І трохи розсудливості перевірити. Справа в тому, що немає нічого всередині дужок випливає, що про GetString? Він не приймає аргументів. Тобто, ви не можете впливати на його поведінку в будь-якому випадку. Кожен раз, коли ви використовуєте його, він буде отримувати рядок, ось і все. На відміну від Printf, сподіваюся, його поведінка робить змінити в будь-який час. В іншому випадку, це досить даремна функція друку, якщо він робить те ж саме. Якщо вона завжди друкує Девіда або щось довільного весь час. Так Printf має сенс мати аргумент. GetString насправді не потрібні аргументи, тому що я хотів , Щоб отримати рядок від користувача, і це користувач, який збирається на поставку динамізм, набравши в різних букв кожен раз на клавіатурі. Отже, що ж робити в кінцевому рахунку GetString? Думайте про це як ця маленька чорна коробка. І це чорний ящик не приймає ввід, але коли ви вибуху на , Вона випльовує рядок, користувач ввів дюйма А те, що там є знак рівності означає прийняти що плювати на права і зберігати його всередині Що зліва. Таким чином, знак рівності тут, насправді зовсім не означає, рівність, а технічно означає призначення. Візьмемо значення праворуч, і поклав його в змінну зліва. Так що все, що там відбувається. Зараз у рядку 7, ми викликаємо Printf. Так Printf сподіваюся, стає трохи нудно в даний час. Таким чином, друк отформатированную рядок. Що рядок? Роздрукуйте, "ч-е-л-л-о, и% ! \ П ". Гаразд, так що я хочу, щоб плагін для% S? Буквально все, що зберігається в с. Таким чином, в цьому випадку, мало перевірку осудності, скільки аргументів робить Printf взяти? Гаразд, я чув, як один. Я чув, як один раз. Два, я почув два. А як щодо трьох? Гаразд, три? Відмінно. Три варіанти відповіді, тільки один з них правильний. Таким чином, аргументи знову впливати на поведінку функції. У минулому Printf ж приймають тільки один аргумент. "Привіт світ" був єдиний аргумент. Однак, тепер, зверніть увагу, де ця кома. Це коми перебуває за межами цитати / кінець цитати, що означає, агов Printf, ось другий аргумент. Так що коми у більшості мов програмування окрема кілька аргументів. Таким чином, відповідь тут, безумовно, не один, тому що Тобто ця кома. Таким чином, мінімально, Printf мабуть приймаючи два Аргументи на цей раз. Але можливості для каверзне запитання тут є те, що про це комою? Чи означає це, що там насправді три аргументи? Це, це і це. Так що ні, тому що кома знаходиться всередині лапок, які означає, що це дійсно тільки естетичне англійської мови. Це не має нічого спільного з числом Аргументи в цій програмі. Так що це кома знаходиться за межами подвійні лапки. А потім повертати 0. А зараз давайте просто як би взяти цей на віру сьогодні, і точно знаю, що, коли функції виконуються виконання рядків коду, вони повинні зазвичай повертають деяке значення. У цьому випадку, просто тому, що основна повинні повернутися INT, що просто так на мові C працює. Таким чином, тому що нічого не пішло не так, як відчуває себе цієї програми добре, я просто жорстко у відповідь 0. Але, на відміну, і я збираюся написати це в псевдокоді Тепер, як і Йосип, коли ми робили носок Наприклад минулого тижня. Якщо щось пішло не так - це не реальний код - пішов неправильно, а потім повернутися, скажімо, 1. Решта повертається 0. Так ось де ми збираємося з цим. Це не реальний код C, просто псевдокод. Але це, як ви могли б повернутися різні можливі значення. Але зараз я просто збираюся йти вперед і повертати 0. Гаразд, будь-які питання досі на синтаксис, функціональність, і т.п.? Так, в спину. АУДИТОРІЯ: [нерозбірливо] DAVID Малан: Чи можете ви говорити голосніше? Чому це 0 програми повернення, а? АУДИТОРІЯ: [нерозбірливо] DAVID Малан: О, це тому, що я лінивий, вибачте. Немає хорошої академічної відповідь, повертається 0. Я можу врятувати вид цього, кажучи технічно C, якщо основний явно не повертає значення, то буде повернуто 0 автоматично. Що правда, я говорю не тільки прикриття. Але, я повинен був зробити це таким чином. Ні цікавий винос, ніж інші, ніж моя помилка. Так? АУДИТОРІЯ: Зазвичай, коли ви вводите в порожнечу, це означає, що ви Не повернути щось. DAVID Малан: Правильно. Якщо замість цього ви вказати перед ім'ям функції, для Наприклад тут, порожнеча, то функція нічого не повертає. І тому я хотів би просто сказати, повернення або взагалі нічого, і що буде відповідати. І ми ще повернемося до цього. І тільки FYI, одна з уловів з навчанням програмування в світі, який має сотні книг і сотні сайтів, то там ви неодмінно см. інший синтаксис в різних книгах різними людьми. Зрозумійте, ми зробимо все можливе в розділах і лекції, щоб бути послідовна. Але іноді ви побачите суперечливі синтаксису. Тому, коли ви сумніваєтеся, просто запитайте. І взагалі, ми подбаємо в лекціях і розділів Майже завжди представити його в правильному напрямку. І я кажу майже завжди, тому що випадок. Інші питання? АУДИТОРІЯ: Чи% з існуючих поза приладу? DAVID Малан: Чи% S існує поза приладу? Так. Таким% S має відношення до С. Той факт, що ми використовуємо його в Прилад принципово не має нічого спільного з особливості мови ми використовуємо. Дійсно, минулого тижня, коли ми використовували мій Mac, я написав C код на свій Mac. Я міг би використовувати% на моїй Mac, і ви можете використовувати його на Ваш Windows комп'ютер, якщо ви встановите компілятор, як Visual Studio від Microsoft. Таким% с. Все, що ми робимо всередині цього вікна сьогодні повинен робити з С. І принципово нічого спільного з операційна система в питанні. На відміну від чорно-білого вікна терміналу - при Я друкую речі, як Л.С., RM, і CD - , Що має справу з операційною системою і навігації навколо. Так. АУДИТОРІЯ: Я мав на увазі бібліотеки, CS50 бібліотеки. DAVID Малан: Отже, якщо ви маєте на увазі ключове слово рядка, що існує тільки в CS50 бібліотеці, правильно. Це не існують в C самого, та й у парі тижнів ми будемо викидати CS50 бібліотеку і почати робити речі з нуля себе, так би мовити. Інші питання? Так. АУДИТОРІЯ: [нерозбірливо] DAVID Малан: Хороше питання. Є команди чутливі до регістру? І дозвольте мені зробити відмінність тут. Таким чином, команди, як правило, те, що ми напишемо на в нижній частині вікна, у вікні терміналу. Все, що тут було б заяви або C код. Але в обох випадках, відповідь буде той же, да. Обидва цих середовищах, код C у верхній і робочої рядку командної системи в знизу, з урахуванням регістра. Так що ви повинні скористатися GetString з капіталом G, капітал С. Ви повинні написати Printf в нижньому регістрі. Необхідно ввести Ls в нижньому регістрі. Таким чином, майже в кожній ситуації у цьому семестрі, справа буде, в Дійсно, питання. Так. АУДИТОРІЯ: [нерозбірливо] DAVID Малан: Ах, так добре, що якби ми мали файлів називається hello.d. Ось і виходить, D є мовою програмування. І тому в деяких випадках, ми могли б насправді написати програму, в цей файл і він складений саме таким чином. Ми, може, і насправді, коротка відповідь, я не знаю. Так що ми збираємося зробити це. Дозвольте мені піти далі і створити новий файл. І спина тут, чесно кажучи загалом, всякий раз, коли будь-який сумнів в цьому семестрі, і у вас є пристрій або комп'ютер відкрити, йти вперед і спробувати щось. Так що я збираюся зберегти файл під назвою hello.d. Збережіть це. І я збираюся запустити зробити привіт Enter. Здавалося зробити висновок, що з більш імовірно, ніж г, в даному випадку. Інші питання. Так. АУДИТОРІЯ: [нерозбірливо] DAVID Малан: Добре, кажуть, що ще раз. АУДИТОРІЯ: [нерозбірливо] DAVID Малан: Як би ви йдете з приводу діагностики того або усунення неполадок це? Так що, швидше за все, тому, що вони на різних мовах, Швидше за все, ви отримаєте повністю різні програми виводиться. Ви отримаєте зовсім різні повідомлення про помилки. А також тільки з точки зору дизайну, це було б, можливо, бути Погано дизайнерське рішення для написання двох різних Мови з майже однаковими іменами файлів, в точно такий же каталог, використовуючи автоматичний інструмент, як зробити. Так що я можу натиснути назад і сказати: в 15 років зробити це, ніколи не робив цю помилку. Може статися. Але там просто різні, я думаю, матеріально-технічне оборону на місці. Плюс повідомлення про помилку, яке настане, що б в кінцевому підсумку виявити, в чому проблема. Але можливий випадок кутку. Гаразд, давайте введемо всього пару інших особливості тут, так що ми можемо почати будувати на більшу і більш складні програми. Отже, насамперед, математики. Таким чином, математика приклади тільки вид легкої в перший тиждень. Це не означає, що всі програми становить близько математика. Звичайно, розуміння різних функцій математика, алгебра, зокрема, вельми актуальна тут. У більш високому рівні CS класи, лінійна алгебра, Обчислення тощо. Але зрозумійте, більшість того, що ми будемо робити в цьому семестрі не знижує до математики, і, звичайно, не в арифметиці, саме по собі, але насправді просто логіки і ретельного мислення. І ось цей зв'язок, що комп'ютерна наука вже давно, особливо на рівні середньої школи, з математикою, є трохи вводить в оману. Оскільки більшість програм, які ми напишемо, дійсно, роду високому рівні і зосередитися на вирішенні проблем, які, Звичайно, можна використовувати деякі додавання, віднімання, а також різні математичні формули і т.п., але в кінці кінців, це про мислення, а не просто реалізувати те, що ви могли б зробити на як TI Калькулятор в середній школі. Таким чином, з урахуванням сказаного, давайте щось робити з цим математичні оператори, які дійсно існують, щоб ми могли поїздки за деякими з основних аспектів програмування, або в цьому випадку C. Таким чином, існує, як CS50 бібліотеки запропонували, і сьогодні ми використовуємо тільки GetString - і в одну мить мабуть, одна інша функція - але є різні типи даних в комп'ютер. Зрештою, комп'ютери знаю тільки 0 і 1. Але нагадаємо, що минулого тижня ми говорили про двійковій системі У поданні чисел, наприклад, числа 0 і 1, і 2, на всьому шляху від до 8, як і у відео Нейта. І тоді ми можемо розраховувати набагато вище, так як ми робив на сцені тут. Але якщо ви хочете, щоб представляти не тільки числа, але листи, Ми, люди, повинні виступити з деякими довільними конвенціям, згідно з яким, якщо в кінці дня всі мій комп'ютер була це здатність виражати 0 і 1, а нам краще почати стандартизацію форм 0 і 1, які представляють різні речі. Картини з 0 і 1, яке представляє листі. Моделі з 0 і 1, які представляють листі р. Моделі з 0 і 1, які представляють колір синій, або червоний, або тому подібне. Ми повинні використовувати всі ці 0 і 1, щоб виразити себе в різних контекстах, у різних способами, які не обов'язково числовий. Так що в плані подання, C має різні типи даних, і ми бачили одну з цих досі. Ми бачили, INT, і зверніть увагу на те, що на екрані не відображається Прямо зараз є рядком. Рядок не, насправді, існує в С. Знову ж таки, це Спрощення ми представимо в першому пару тижнів. Символ є індивідуальний характер. Поплавок дійсне число, з десятковою комою і цифри ліворуч і праворуч від нього. Подвійна є те, що, для тих, з задньої до фоном? Таким чином, подвійна два рази щось. Додає в два рази більше точності. Так що ж це значить? Таким чином, в кожному з цих випадків, у світі є роду стандартизовані скільки бітів використовуються для представлення Кожен з цих речей. Так що, якщо ви дивилися відео ASCII Нейта вже частина з PSET 0, або в кінці цього тижня ви будете, ви, напевно, знаєте що ASCII - характер уявлень - використовувати, скільки біт? І ви навіть пам'ятаєте з наших демо минулого тижня про те, як багато людей були на сцені. Таким чином, 7 або 8, зазвичай. Таким чином, в цілому 8, і є те, що називається в якості продовжений ASCII, який використовує всі 8 біт, замість 7. Але в цілому, ми говоримо за ступенями 2, тому в даному випадку, 8. Таким чином, символ в мові програмування, як правило, 8 біт. Так Int, як правило, 32 біт. Поплавцем, як правило, 32 біт. Подвійні, як правило, 64 біт. А що це значить? Це означає, що ви можете представляти великі числа, або, в разі дійсних чисел, ви можете мати набагато більше цифр після десяткового знака. Набагато більше точності, в такому випадку. Тепер довго довго, на жаль, їм. Так що Int яких становить 32 біта. Існує довгий яка, ні, 32 біт. І довго довго якої становить 64 біта. Однак деякі з тих, хто залежить від контексту, воно залежить який комп'ютер у вас є. Так що в цілому, ми будемо вказувати в домашню роботу або у вікторині, коли вона насправді має значення. Але справа в тому, є всі ці різні уявленнях тут. Так що давайте насправді зануритися в програмі. Замість того, щоб написати це з нуля, дозвольте мені йти вперед і відкрити з вихідного коду сьогоднішнього дня - все це є онлайн - якщо ви хочете возитися навколо в Інтернеті, або повернення на Середу з приладом на вашому комп'ютері, інструкції , Для якої буде посилання на головну сторінку курсу. Ось супер простий програми. Але у нього є дещо нове у верхній, що у нас не було раніше. Багато синіх рядків тексту. Таким чином, ці сині лінії являють коментарі. Так що це досить корисно в програмі, щоб мати змогу писати деякі коментарі до себе, і до колег або друзів, або навчання стипендіатів, такого роду описати те, що відбувається в Цей файл, але не мають нічого спільного з C самого коду. Нічого спільного з програмою функціонально, це всього лише естетику. Таким чином, ви зробити це в C є ви взагалі почати Коментарі з / *, і ви в кінцевому ваші коментарі з * /. І якщо ви дійсно анальний і хотів би звернути роду картин, Потім потрібно покласти купу зірок, потрібно зробити коробочці, як це. Але жоден з цих питань. Єдине, що має значення самого першого і саме останнє. Це те, що називається багаторядковий коментар. І це тільки людські конвенції часто роблять зірки і коробки речі, як це, якщо у вас є багато вільного часу. Таким чином, після того, як написано в деяких коментарях, як правило, приходять фактичні кишки програми. Ось наш знайомий # включити . І так само швидко, це потрібно чи не потрібно? АУДИТОРІЯ: необхідно. DAVID Малан: Так це насправді не потрібно. Так чому ж, тим не менш, це не потрібно? Таким чином, немає Printf. У самому справі. Все, що ми робимо в цій програмі є математика. Так що я можу насправді видалити це. Таким чином, ви не завжди повинні включати в себе нічого у верхній частині програми. Так давайте спростимо це небагато. А тепер зауважте, що ця програма робить. Не багато цікавого. Int х = 1. Ну, що це робиш? Ну, думаю, назад в ментальної моделі, ніж раніше. У лівій частині цього виразу, що робить? Створити простір для цілого числа. Так як багато місця? Ну, ми, виявляється, знаємо тепер, що це 32 біт. Раніше, рядок була технічно 32 біт, але більш про це в майбутньому. Але Int становить 32 біта. Таким чином, цей вираз зліва тут, Int х просто говорить, агов операційна система, дай мені 32 біт оперативної пам'яті - інакше відомий як 4 байти оперативної пам'яті - так що я можу покласти ціле число в цьому просторі. Що цілого ти хотів поставити? Ну, просто номер 1. Int у одержує 2, не одне і те ж, хоча Номер великий, з точки зору його величини. Число сама ще тільки 32 біта. Це просто зразок біт відрізняється від складають 1 проти 2. Int Z тепер каже, дайте мені ще 32 біта, назвемо його Z, і покласти Підсумовування 1 і 2 в там. Так що тепер г імовірно зберігання значення 3, , А потім повертати 0. Тепер ця програма, вона робить щось цікаве? Так що насправді не роблять нічого цікавого, в будь-якому сенсу, бо навіщо? Це робить деякі математики. Але це не повертався відповідь, мають рацію. Він повертається 0. Це не друк відповіді. Таким чином, ця програма є принципово марним, оскільки він коштує тепер. Це робить деяку роботу. Це займе деякий кількість секунд, або мікросекунд, щоб працювати, але це насправді не роблять нічого корисні для людини. Так що давайте насправді зараз відкрити math2, де тепер я насправді друк результат. Так що це теж може бути виведено з нашого попереднього прикладу. Якщо я хочу зробити кілька простих математики, Int х = 1, у = 2. г становить 1 плюс 2 зараз. Що це буде роздрукувати очевидно? Тільки 3. Так швидко санітарної перевірки. Дозвольте мені перейти в цей каталог. Так кд source1m. Дозвольте мені піти далі і ввести зробити math2. Немає повідомлень про помилки вийшов, так що дозвольте мені бігти - Чи не a.out--дайте мені працювати math2. Enter. І дійсно, він розпечатав 3. Ну, давайте подивимося на варіант цього. У math3.c, зараз у нас це приклад. Так що це свого роду цікаво. Таким чином, в цьому тут, відповідь буде отримати 1 ділиться на 10, і зверніть увагу, я сказав, що вона з плаваючою крапкою. Чому я хочу бути з плаваючою точкою? Ну, це фракції. Це збирається бути реальним числом. Так що це буде 0,1, сподіваюся - 10%, в цьому випадку. І що ж я тоді хочу, щоб роздрукувати? Ну, це відповідь. Ну, давай дражнити цим, крім першого. Таким чином, на лівій стороні заявити, плавати, називають це відповісти. З правого боку, зробити 1 ділиться на 10 і покласти, що відповісти всередині змінної. Тепер ця лінія виглядає трохи більш загадковими. Але помітити деякі знайомі риси. % Означає, що тут йде заповнювача. F означає ось значення з плаваючою точкою, тільки реальні число, то з комою. 0,2 це означає? Кожен знає, з попереднього досвіду? Два знаки після коми. Таким чином, ми не бачили цього раніше, але це всього лише спосіб здійснення трохи більше контролю над Printf і говорю, не дай мені 30 очок після коми, замість цього дати мені тільки 2. І тоді давайте йти вперед і виконати це. Так що математика 3, а тепер дозвольте мені виконати математику 3, Enter. І це не правильно. Ми, здається, зіткнувся наш перший справжній помилка. Ну, може, я просто не дивилася досить близько. Отже, дозвольте мені йти сюди, і дозвольте мені покласти 20 десяткових точка місцями. І дозвольте мені скласти цей, зробити math3, біжи. Упевнений, 1, поділеній на 10 не дорівнює 0. Так що ж відбувається? Ну гаразд, так що насправді він не має до цього відношення. Це гарна думка. Це дійсно просто збіг що ми робимо це. Але тільки, щоб довести, що це не він, я буду повернути щось випадкове. Не робіть цього вдома, тому що це просто неправильно. Але зробити math3, дозвольте мені запустити його. Таким чином, не має нічого спільного з тим, що я повертаюся, тільки робити з тим, що я друкую. Але я чув, що тут, унизу. Що? АУДИТОРІЯ: Так що ми повинні писати числа в поділ, як - DAVID Малан: Добре добре. Так що ми повинні писати числа що беруть участь в поділ тут як значення з плаваючою точкою себе. Таким чином, проблема тут у тому, як раніше: C, як і багато мовами, має різні типи даних. А ті типи даних, наприклад, ці тут. І типи даних в питання тут, коли я типу 1, а потім я Тип 10, ймовірно, які типи даних? Так що це, ймовірно, INT, чи не так? Це безумовно не плавати, бо немає десятковій точка або що-небудь подібне. Так насправді, у мене є ціле число ділиться на внутр. Так найцікавіше про математику і комп'ютера є те, що якщо ви робите поділ використанням цілих чисел - 1 ділиться на 10, да, становить 0,1. Тим не менше, коли ви ділення цілого числа на ціле число, Відповідь має бути цілим числом тільки тому, що, на даний момент. А що мається на увазі те? Ну, якщо відповідь 1 ділиться на 10 рівних 0,1, що Комп'ютер збираюся зробити, це я поняття не маю, як являють собою 0,1, тому що це значення з плаваючою точкою, а не ціле число, він збирається відрубати всі після десяткового дробу і просто показати вам, 0 на початку. А те, що це друк у вигляді плаваючою точкою значення, це просто естетична річ. Це тому, що я змусивши комп'ютер для друку цьому плаваючою крапкою. І дійсно, я сказав, що вона з плаваючою точкою, але математика відбувається тут. Тому дозвольте мені насправді виправити це в один досить простий спосіб. Чому я не просто роблю 10,0 і 1,0, хоча Технічно я міг би зійти з рук тільки робить один з них. Тепер дозвольте мені піти далі і зробити math3. Дозвольте мені йти вперед і тепер працюють math3, Enter. А тепер, про хлопчик. Тепер у нас є нова проблема взагалі. Так що краще, право, ми ближче до 0,1, але те, що, безумовно, є тут не так? Якщо ми брехали вам протягом багатьох років, вірно? 1, поділеній на 10 насправді не зовсім 0.1, так що насправді тут відбувається? Ну ви можете почасти причина через це логічно. Якщо комп'ютер має тільки кінцеве кількість оперативної пам'яті, щоб почати с, та й комп'ютер використовує тільки 32 біта для плаваючою точкою, само собою зрозуміло, що з кінцеве число біт, 32 в цьому випадку, так, ви можете являють собою багато речей. Насправді це чотири мільярди різних значень може бути представлено 32 біт, від 2 до 32, але це все ще кінцева. Так що проблема існує нескінченне число дійсних номери, мають рацію. Якщо ви дасте мені дійсне число, я завжди можу знайти вам один трохи більше, трохи менше, просто настройки номери, які після коми. Так що, якщо ви не маєте нескінченне число бітів, ви не може являти собою нескінченну Число дійсних чисел. Так що ця властива неточність в комп'ютерах, і це отримує спіткнувся весь час, навіть в найпростіших подібних програмах. Але і в дуже реальному світі проблеми. У самому справі, давайте момент, щоб просто поглянути на те, що насправді відбулося в дійсності. Ми будемо дивитися тільки перші кілька хвилин, а потім ми розмістимо посилання в Інтернеті. Але це свідчить тільки те, що може піти не так, зовсім чесно кажучи, в дуже трагічному шляху, коли ці речі не оцінені або просто ми, люди роблять помилки, коли справа доходить до ці види деталі реалізації сучасних комп'ютерів. [Відтворення відео] -Повернімося тепер до інженерної лих на сучасних чудес. Комп'ютери. Ми всі прийшли до розуміння часто розчаровує проблеми які йдуть з ними. Помилки, віруси, збої програмного забезпечення і малих ціни платити за зручність. Але в області високих технологій і високою швидкістю військової і космічної програмних додатків, найменша проблема може бути збільшена в катастрофі. 4 червня 1996, вчені готові почати безпілотного Ракета Ariane 5. Було проведення наукових супутників для встановити, як саме магнітне поле Землі взаємодіє із сонячним вітром. Ракета була побудована для Європейського космічного агентства і відірвався від свого об'єкта на узбережжі Французькій Гвіані. -Приблизно близько 37 секунд в польоті, вони спочатку помітила, що щось іде не так, що сопла були поворотні таким чином, вони дійсно не повинні. Близько 40 секунд в польоті, чітко автомобіля потрапив у біду, і ось, коли вони прийняли рішення знищити його. Офіцер діапазон безпеки з величезним кишки натискання Кнопка, підірвали ракету перш ніж він зможе стати небезпека для громадської безпеки. -Це був перший рейс з Ariane 5, а його руйнування сталися через помилки, вбудовані в Ракета програмного забезпечення. -Проблеми на Ariane, що не було поруч, що вимагає 64 бітів, щоб висловити, і вони хотіли, щоб перетворити його для 16-бітних числа. Вони припустили, що кількість ніколи не було Буде дуже великий, що більшість з цих цифр в 64-розрядні числа були 0s. Вони були неправі. -Нездатність одну програму, щоб прийняти вид номер, який генерується інший був в корені провал. Розробка програмного забезпечення стала дуже дорогою частиною нові технології. Ariane 4 ракети були дуже успішними. Так що більша частина програмного забезпечення, створеного для нього також був використаний У Ariane 5. -Основною проблемою було те, що Ariane 5 був швидше, прискорився швидше. І програмне забезпечення не доводилося для цього. -Знищення ракети був величезним фінансовим катастрофа, все через хвилині помилка програмного забезпечення. Але це був не перший раз, проблеми перетворення даних було страждають сучасні технології ракети. DAVID Малан: Ми залишимо все як є. Але це є свідченням того, наскільки застосовні навіть деякі з це найнижчий рівень деталі, які ми почали досліджувати сьогодні. Таким чином, навіть, як ви отримаєте трохи відволіктися, можливо, деякі з синтаксис і Арканест тут, розумієш, що за Термін ми будемо зосереджені тільки на те, як це можна застосувати до світи далеко за межами CS. Ми будемо бачити Вас в середу.