>> [Музика Відтворення]
>> David J мала: Гаразд, ласкаво просимо назад в CS50.
Це початок другого тижня.
Слово з одного з наших друзі на території кампуса -
якщо ви зацікавлені, ймовірно, або зараз або в майбутньому терміну
навіть після того, як більш зручний, навчання учнів середніх шкіл трохи
щось про інформатику, зробити голову, що URL-адресу.
Ним, зокрема потрібно прямо зараз з вчителів, зокрема, якщо у вас є
були деякі впливу інформатики.
>> Тому нагадаємо, що минулого разу, ми ввели декількох типів даних в C, і
Ви, можливо, почали, щоб отримати руки брудні з цим до цих пір
У завдання, поставлене один.
І у нас був символ.
Таким чином, у кілька технічних термінів, що є символами, як ви знаєте, що на сьогоднішній день?
>> Так що це характер, але давайте Точніше тепер.
Що ми розуміємо під характером або окремих символів?
Нечислової символ -
так не обов'язково.
Виходить, що парні числа, навіть розділових знаків і букв
представлені з цими даними типу, відомого як символ.
Так що це не обов'язково в алфавітному порядку.
Так?
>> Так що це ASCII символ.
Так що, якщо ви згадаєте нульової тижня, коли у нас були наші добровольці байт
придумати і або тримати піднятими вгору руками або не все, вони представляли біт.
Але всі разом як група з восьми, вони представляли собою байта.
І ми ввели поняття ASCII в той лекції, яка просто
відповідність між цифрами та літерами.
І ASCII застосувань, як ті люди припускаються, вісім біт
для представлення символу.
>> Таким чином, відповідно, якщо вісім бітів може кожна приймати одне з двох значень -
нуль або один -
Це означає, що дві можливості для цієї людини -
нуль або один -
дві для цієї людини, дві для цього особа, дві для цього.
Таким чином, в цілому два рази в два рази два рази двічі два -
так що два восьмим в цілому.
Так що загальна кількість символів 256 Можливо, що ви можете
представляти з вісьмома бітами.
>> Тепер, ті з вас, хто говорить Азіатський мов може знати, що є більше
символів у світі, ніж просто І × і Cs і Ds.
І дійсно, ASCII не вистачає для багато мов світу.
Але про це іншим разом.
На даний момент відомо, що в C, якщо ви хочете представляти лист, шматок
пунктуації, або просто щось характер в природі, ми використовуємо символ.
І це один байт або вісім біт.
>> Як щодо десяткового?
Ну, Цілочисельне є цілим числом.
Скільки бітів, якщо ви пам'ятаєте, було ціле зазвичай?
Будь нагадати?
Так воно, як правило 32.
Це насправді залежить від комп'ютера що ви використовуєте.
Але в приладі, і у великій кількості Комп'ютери, це 32 біта або чотири
байт - вісім разів чотири.
І цілих чисел використовуються тільки для зберігання числами, або негативним,
позитивне чи нуль.
>> І якщо у вас є 32 біта, і ви тільки дбають про позитивні чисел, може
будь-який стадіон, скільки можливих цілі комп'ютера можуть становити від
нулю на до?
Тому було б у два-32, який приблизно в чотири мільярди доларів.
Таким чином, ці двійки будуть повторювані теми в галузі комп'ютерних наук.
Як ми побачимо, вони досить зручно працювати з, навіть якщо це не зовсім
Легко робити математику в голові.
>> Тому ми будемо говорити приблизно в чотири мільярди доларів.
Тепер, дуже довго -
Ви можете виду припущення.
Це довше, ніж Int.
Скільки бітів?
Так 64 біт або вісім байт.
Це просто означає, що ви можете представляти навіть великі числа, великі позитивні або
більше негативних чисел.
>> А як щодо плавати?
Ось з плаваючою точкою значення 32 біт.
Це всього лише дійсне число, то з комою.
Але якщо ви замість цього потрібно більше місця після коми, або ви хочете
представляють більше число з деякими фракції після цього, ви можете використовувати
двох людей, який становить 64 біта.
>> Але є цікавий винос тут.
Так що якщо цілі обмежені 32 бітами і навіть довгий довгих обмежені 64
біт, такого роду виникає питання, Що робити, якщо ви насправді хочете порахувати
вище, ніж 4000000000 для десяткового?
Ну, ви просто використовуєте дуже довго.
Але що, якщо ви хочете високої кількості ніж на два 64-й, плюс-мінус?
>> Так от, це величезна кількість.
Але врешті-решт, ви можете насправді піклуватися про такі цінності,
особливо якщо ви використовуєте базу даних і починаю збирати багато-багато
і багато даних і присвоєння унікального кімнати для кожної частини цих даних.
Таким чином, ми частково є проблеми.
І точно так само, з плаваючою точкою значення - поплавками або двомісних -
Якщо ви отримали тільки кінцеве число біт, скільки всього ти міг номерів
можливо, представляють?
>> Ну, це менш зрозуміло, коли ви включати десяткову крапку.
Але це, звичайно, звичайно.
Якщо у вас є кінцеве число біт, кінцевим числом людей, кінцевому
кількість лампочок, звичайно, ви можете являють собою лише кінцеве число
значення з плаваючою крапкою.
Але скільки дійсних чисел є їх у світі?
Там у нескінченність.
Так що це свого роду проблема, тому що ми не мають нескінченну кількість
пам'яті або оперативної пам'яті всередині наших комп'ютерів.
Таким чином, деякі складні речі можуть трапитися.
>> Так що давайте йти вперед і спробувати щоб виразити це тут.
Дозвольте мені йти вперед і відкривати Gedit.
Я збираюся йти вперед і зберегти файл називається "floats0.c" просто бути
відповідно до прикладу, який доступних в Інтернеті, якщо ви хотіли б.
І я збираюся йти вперед і визначити його таким чином -
Я збираюся піти далі і сказати, внутр Основний порожнеча, як ми часто робимо.
>> А потім у цій програмі, я збираюся оголошую себе поплавком, так 32-бітові
мінлива F, довільно.
А потім я збираюся зберігати в ньому Я не знаю, одну десяту, тому 0,1.
Так що я збираюся висловити, що як один ділиться на 10, що цілком
законної C.
>> А потім на другій лінії, я просто хочете роздрукувати це значення.
Тому нагадаємо, що ми можемо використовувати Е знайомі.
Ми не хочемо використовувати% я для Int.
Ми хочемо використовувати% F для поплавка.
А потім я збираюся зробити зворотну косу риску N, Закрити цитати, кома, F, крапка з комою.
>> Отже, ось моя програма.
Там вже одна помилка.
У кого-небудь, для якого ця натиснута вже хочу вказати принаймні,
одну помилку я зробив?
Так?
Так.
Я забув "# включити" в вершини, вони симптомом якої, якщо я спробую
компіляції цього буде, що компілятор буде кричати на мене,
кажучи невизначений символ або щось в цьому роді.
Він чогось не розуміє Е подобається.
>> Так що я збираюся робити "# включити », Збережіть файл.
І зараз він знаходиться в кращій формі.
Але я також збираюся вказати одну нову деталь сьогодні.
На додаток до визначення місця як власники% F% I% з, ви можете
іноді впливати на поведінку цього заповнювача.
Наприклад, у випадку з плаваючою точкою, якщо я тільки хочу
для відображення одного десяткового знака після період, я можу реально зробити 0.1f.
Отже, іншими словами, я відділяю F і знак відсотка з 0,1, як раз
Е кажучи, ви могли б мати цілий купою цифр після коми
момент для мене.
Але я тільки хочу, щоб побачити одну з них.
>> Так що я збираюся йти вперед зараз і заощаджуйте цю програму, зайдіть в мій термінал
вікна, і я збираюся йти вперед Тип і зробити поплавець 0, введіть.
Я бачу, що кілька загадкові лінії, яка почне більше сенсу, як ми
дражнити його на частини цього тижня і на наступній.
Тепер я збираюся йти вперед і запустити поплавок нулю.
І, чорт.
>> Так що є ще одна помилка тут з деяких причин.
Я впевнений, що одна десята, або одиниця, поділена на 10, чи не 0.0.
Можливо, я просто не дивився при досить цифр.
Так чому ж я не говорив, два 0,2 бачити дві знаків після коми, а не тільки один.
Дозвольте мені повернутися до моєї вікно терміналу тут і підкинути пару раз, щоб
см. мою історію.
Як переконатися, плавають нуля знову, а потім знову вгору.
І тепер увійти.
>> І тепер я впевнений, що це неправильно.
І я міг би зробити три і чотири, і я , Ймовірно, буде продовжувати бачити нулі.
То де ж помилка?
Один розділений на 10 повинно бути 0,1.
Хтось хоче прийняти удар на те, що , Фундаментальна проблема полягає?
Так?
Вони обидва цілими числами.
Ну і що?
Так що з одного ділиться на 10, це що я роблю в арифметиці.
І я отримую 0,1.
>> Так.
І ось це дійсно цим питанням.
Коли ви приймаєте ціле число в комп'ютер і ви розділите його на інше ціле число,
комп'ютера за замовчуванням буде Припустимо, що ви хочете ціле.
Проблема, хоча, звичайно, що 0,1 не є цілим числом.
Це реальне число.
І так, що комп'ютер робить на за замовчуванням це просто викидає
всі після коми.
Це не округлює вниз або вгору, як такої.
Він просто викидає все після коми.
І тепер, коли має сенс.
Тому що зараз ми чітко залишилися з нулем.
>> Але почекайте хвилину.
Я не бачу Цілочисельне нулю.
Я насправді бачимо 0,00.
Так як я можу погодити це зараз?
Якщо розділити на 10 дорівнює нулю, але я бачачи 0.00, де він отримує
перетворено назад в реальний номер?
Так.
Саме так.
>> Так що тут, в лінію п'ять, коли я насправді зберігати, що 0,1, який потім
буде скорочуватися до нуля, всередині поплавця, це практично еквівалентно
зберігати його не у вигляді цілого числа, але, справді, як поплавок.
Більше того, я потім за допомогою Е до явно надрукувати це число до двох
знаків після коми, хоча там не може насправді бути будь-який.
>> Тому такого роду смокче, чи не так?
Мабуть, ви не можете зробити математику, принаймні, на цьому рівні
точності, в комп'ютері.
Але, звичайно, є рішення.
Що простим способом виправити, може бути, ми могли б зробити, навіть просто інтуїтивно тут, щоб
вирішити цю проблему?
Так?
Поверніть цілих чисел у -
да.
Навіть якщо я не зовсім впевнений, що саме відбувається насправді тут, якщо він
принципово пов'язане з цим як буття цілі, добре, чому б мені не
роблять, що 10,0, що робить цей 1.0, збережіть файл.
Дозвольте мені повернутися вниз, щоб нижня і перекомпілювати.
Дозвольте мені тепер повторюється.
А там -
Тепер, у мене є одна десята представлена ​​у вигляді 0,10.
>> Добре.
Так що це не погано.
І я хотів би відзначити один спосіб ми могли б вирішити цю.
Дозвольте мені насправді відкат у часі , Коли у нас було це як один
десята хвилину тому.
І дозвольте мені йти вперед і збережіть цей файл як інше ім'я файлу, просто щоб
є трохи контрольно-пропускного пункту.
Так, щоб була одна версія.
А тепер дозвольте мені йти вперед і зробити ще одну версію.
Ми назвемо цю версію два нуля індексується.
>> І я збираюся зробити замість це - ви знаєте, що?
Додавання точки нуля працює в цьому випадку.
Але припустимо, що були однієї змінної.
Передбачувані 10 були змінної.
Іншими словами, припустимо, що я не міг Просто важко-коду 0,0 в кінці
цього арифметичного виразу.
Ну, я можу зробити щось в дужках називається лиття.
Я можу кинути, що ціле число 10 до плаваючого курсу, і я можу кинути, що ціле в одному
плавають, а також.
Тоді математику, яка збирається бути зроблено ефективно 1,0 поділене на 10,0,
результаті чого відбувається в F, як раніше.
Так що якщо я перекомпілювати як зробити поплавці 2, і тепер плаває 2, я отримую таке ж
відповісти, а також.
>> Так що це досить надуманий приклад, Для вирішення цієї проблеми
шляхом введення лиття.
Але в цілому, лиття буде сильна річ, особливо для
Проблема встановити два в тижневий термін, коли Ви хочете, щоб перетворити один тип даних
інший, що в кінці дня представлені таким же чином.
Зрештою, кожен , Що ми говорили про досі є
просто цілими під капотом.
Або, якщо це занадто низькому рівні для Вас, вони просто цифри
під капотом.
Навіть символів, знову ж таки, згадаймо від нульової тижня, тобто числа,
під капотом.
>> Який повинен сказати, ми можемо перетворити між різні типи номерів, якщо
вони просто біт.
Ми можемо конвертувати між номерами і букви, якщо вони просто
біт, і навпаки.
І лиття таким чином, являє собою механізм у програмуванні, яка дозволяє примусово
змінити один тип даних в іншій.
На жаль, це не так просто, як я, можливо, сподобалося.
>> Я збираюся повернутися в поплавцях 1, який був більш простим,
просто з одного 0,0 додані до кожного.
І як швидко перепідготовки, Дозвольте мені йти вперед і перекомпілювати
це, переконайтеся, поплавці 2 -
На жаль, це зробити поплавці 1.
А тепер давайте запустимо поплавців 1.
А в нижній, помітить що я дійсно отримати 0,1.
Отже, проблема вирішена.
>> Але не зараз.
Зараз я збираюся отримати трохи цікаво, і я збираюся повернутися в мою
Е заяву і Скажіть, ви знаєте, що?
Я хотів би підтвердити, що це дійсно одна десята.
І я збираюся хочете бачити це в , Скажімо, до п'яти знаків після коми.
Це не проблема.
Змінити двох до п'яти, Я перекомпілювати з макіяжем.
Я перевантажите його як поплавці 1.
Виглядає непогано.
Мої перевірки осудності може закінчитися там, але Я отримую трохи більше пригод.
Я збираюся змінити 0,5 до 0,10.
Я хочу бачити 10 цифр після десяткового знака.
>> І я збираюся йти вперед і перекомпілювати це і перезапустити плаває 1.
Я начебто жалю випробувавши цього далі, тому що моя математика не так
виправити більше, здається.
Але постійте, може бути, це просто щаслива випадковість.
Може бути, комп'ютер працює трохи дивно.
Дозвольте мені йти вперед і робити 20 знаків після коми і заспокоїти себе, що я знаю,
як зробити математику.
Я знаю, як програму.
Зробити поплавці 1, перекомпілювати і чорт забирай.
Це дійсно, дійсно отримую Недалеко від знака.
>> Так що ж тут відбувається?
Інтуїтивно, виходячи з наших припущень раніше про розміри типів даних,
, Що має відбуватися тут під капотом?
Так?
Саме так.
Якщо ви хочете, щоб це великою точністю, і це чертовски великою точністю -
20 числа після коми.
Ви не можете можливо, представляють довільне число, якщо у вас
довільне число бітів.
Але ми не робимо.
Для поплавком, у нас є тільки 32 біта.
>> Так, якщо 32 біта може бути переставляються способом - так само, як наші люди на, стадії
руки вгору або вниз - у кінцевому числі способами, є лише кінцеве число
дійсних чисел можна представити з цими бітами.
І так комп'ютер зрештою матиме для
почати скорочувати кути.
Комп'ютер може приховати ці деталі від нас небагато часу.
Але якщо ми починаємо тикати на цифри і дивиться далі і далі на
задня числа в ціле число, Потім ми починаємо бачити, що це
фактично апроксимації Ідея одна десята.
>> І так виходить, на жаль, є нескінченна кількість чисел
ми не можемо уявити саме в комп'ютер, принаймні, з кінцевою
Число бітів, кінцеве обсяг оперативної пам'яті.
Зараз, на жаль, це іноді має реальні наслідки.
Якщо люди не натішаться цього або роду приймають як належне той факт,
, Що їхній комп'ютер буде робити те, що вони кажуть це робити і не
зрозуміти ці основні Представлення деталі -
які, чесно кажучи, в деяких мовах прихована від користувача, на відміну від C -
деякі погані речі можуть трапитися.
>> І те, що я думав, що ми робимо як зробити крок назад.
А це приблизно вісім-хвилинне відео.
Це ефір кілька років тому, і це дає поглянути насправді, що може піти
так, коли ви по-достоїнству оцінять ці види деталей в самому все занадто
реальному світі.
Якби ми могли приглушити світло протягом декількох хвилин.
>> Виступаючий 1: Повернемося до інженерної
лих для сучасних чудес.
>> Комп'ютери -
Ми всі прийшли до розуміння Часто проблеми розчарування
які йдуть з ними.
Помилок, вірусів і збоїв програмного забезпечення невеликі ціни, щоб заплатити за
зручність.
Але в сфері високих технологій і високошвидкісних військових і космічних програм
додатків, найменша проблема можуть бути збільшені в катастрофу.
>> 4 червня 1996, вчені готовий запуску безпілотних ракет Ariane 5.
На його борту наукових супутників , Спрямованих на створення, як саме
Магнітне поле Землі взаємодіє з сонячними вітрами.
Ракета була побудована для європейських Космічного агентства і стартував з його
об'єкта на узбережжі Французької Гвіани.
>> JACK Ganssle: приблизно в 37 секунд у польоту, вони вперше помітили
щось йде не так.
Поворотних сопел в так, як вони дійсно не повинні.
Близько 40 секунд у польоті, чітко автомобіля потрапив у біду.
І ось, коли вони зробили рішення його знищити.
Офіцер для забезпечення безпеки, з величезне мужність, натиснув на кнопку,
вибухнула ракета, перш ніж можна стати небезпекою для громадської безпеки.
>> Виступаючий 1: Це був перший рейс з Ariane 5, і її руйнування
відбувся через помилку вбудованого в програмному забезпеченні ракети.
>> JACK Ganssle: Проблема на Ariane виявилося те, що число
, Які вимагали 64 біт висловити.
І вони хотіли, щоб перетворити в 16-бітове число.
Вони припустили, що кількість ніколи не було буде дуже великий, що більшість
ці цифри у 64-бітному числа були нулі.
Вони були неправі.
>> Виступаючий 1: нездатність одного програмного забезпечення Програма прийняти вигляд
номер, який генерується інший був в корені недостатності.
Розробка програмного забезпечення стала дуже витратна частина нової технології.
Ariane 4 ракети були дуже успішним, так що більша частина програмного забезпечення
створених для нього був також використовується в Ariane 5.
>> Філіп Койл: Основна проблема була що Ariane 5 був швидше,
прискорився швидше.
І програмне забезпечення не було доводиться за це.
>> Виступаючий 1: Руйнування ракети була величезна фінансова катастрофа,
Все через помилки програмного забезпечення хвилину.
Але це було не в перший раз дані проблеми перетворення була охоплена сучасними
ракетної техніки.
>> JACK Ganssle: У 1991 році, з початком першої війни в Перській затоці, Patriot
випробував ракету подібного роду проблема кількість переходів.
В результаті, 28 американських солдатів вбито і близько 100 поранені
коли Patriot, яка повинна була для захисту від вхідних Скад,
осічку ракетою.
>> Виступаючий 1: Коли Ірак вторгся в Кувейт і Америка розв'язала Буря в пустелі
початку 1991 року, батареї ракет Patriot були розгорнуті для захисту Саудівської Аравії
і Ізраїль від іракських Scud ракетні удари.
Patriot є американської середньої дальності поверхня-повітря система виробництва
Компанія Raytheon.
>> Т. Постол: розмір Patriot перехоплювачів себе приблизно
20 футів в довжину.
І він важить близько 2000 фунтів.
І несе в собі боєголовку близько -
Я думаю, це приблизно 150 фунтів.
І боєголовка сама фугасних який має
Фрагменти навколо нього.
Кожух боєголовки призначено діяти, як картеч.
>> Виступаючий 1: ракети здійснюються чотири за контейнер і перевозиться
на напівпричепі.
>> Філіп Койл: Patriot протиракетних Система повернеться в
не менше 20 років.
Спочатку він був розроблений в якості ракети ППО
збивати ворожі літаки.
У першої війни в Перській затоці, коли ця війна прийшли разом, армії хотів використовувати його
збивати Скад, а не літаки.
Іракські ВПС не було стільки проблема.
Але армія турбувався про Скад.
І таким чином вони спробували переїхати Patriot.
>> Виступаючий 1: Перехоплення ракету противника Подорожі в Машині було п'ять
буде досить складним завданням.
Але коли Patriot був доставлений в служби, з армії не було відомо про
Іракські модифікації, які зробили свій Скад майже неможливо потрапити.
>> Т. Постол: Що сталося є Скад, які були
У найближчі були нестабільні.
Вони були биття.
Причиною цього було іракців, в Для того щоб отримати 600 кілометрів від
300-кілометрової дальності, взяв вага з передньої боєголовку.
Вони зробили боєголовку легше.
Так що тепер намагається Patriot прийти на Скад.
І більшу частину часу, переважна Велику частину часу, було б просто
літати на Скад.
>> Виступаючий 1: Як тільки система Patriot оператори усвідомили Patriot пропустив
своєї мети, вони підірвали патріотів боєголовку, щоб уникнути можливих
жертв, якщо воно було дозволено падати на землю.
>> Т. Постол: Це було те, що більшість люди бачили, як великі вогняні кулі в небі
і не зрозумів, як перехоплює Скад боєголовок.
>> Виступаючий 1: Хоча в нічному небі Патріотів, здавалося, були успішно
знищуючи Скад, в Дахрана є не могло бути помилкою про його
продуктивність.
Там, радіолокаційна система Patriot втратили Не відслідковувати вхідні і ніколи Скад
запустив Внаслідок програмного вада.
>> Це були ізраїльтяни, які першими відкрили що чим довше система
йшов, тим більше часу розбіжність став у зв'язку з годинником
вбудованих в комп'ютер системи.
>> JACK Ganssle: за два тижні до Трагедія в Дахрані, ізраїльтяни
доведені до відома Міністерства оборони що система втрачала часу.
Приблизно через вісім годин роботи, вони помітили, що система
стає помітно менш точним.
Міністерство оборони відповів, кажу всім батарей Patriot
не виходити з системи протягом тривалого часу.
Вони ніколи не говорили, що довгий час був.
Вісім годин?
10:00?
1000 годин?
Ніхто не знав.
>> Виступаючий 1: Patriot розміщені батареї в казармах на Дахрана
і її недоліки внутрішні годинники були про більш 100 годин в ніч на
25 лютого.
>> JACK Ganssle: Це час, щоб відстежувати точність близько однієї десятої частки секунди.
Тепер, десята частка секунди є цікаве число, тому що воно не може бути
виражений в двійковому точно, що означає вона не може бути виражена саме в
будь-якого сучасного цифрового комп'ютера.
Важко повірити, але використовувати це як приклад.
Давайте числа третину.
Третина не може бути виражене в десяткового точно.
Третина 0,333 збирається на нескінченності.
Там немає способу зробити це з абсолютна точність у десятковій системі.
Це точно така ж проблема що відбувалося в патріота.
Чим довше система працювала, найгірші помилки часу став.
>> Виступаючий 1: Після 100 годин роботи, помилки в часі тільки
близько однієї третини секунди.
Але з точки зору орієнтації ракети Подорожі в Машині п'ять, це призвело до
помилки стеження більше 600 метрів.
Було б фатальною помилкою для солдати на Дахрана.
>> Т. Постол: Справа в тому, Скад запуск був виявлений рано
попередження супутників.
І вони знали, що Скад йшов в їх загальному напрямку.
Вони не знали, звідки він виходить.
>> Виступаючий 1: Тепер настав час для радарних компонентом системи Patriot
захисту Дахрана, щоб знайти і зберегти відслідковувати керованої ракети противника.
>> JACK Ganssle: радар був дуже розумним.
Було б фактично відстежувати положення Scud, а потім передбачити, де вона
, Ймовірно, буде наступного разу Радар направив імпульсний вихід.
, Який був названий діапазон воріт.
>> Т. Постол: Тоді, як тільки Patriot вирішує, пройшло достатньо часу, щоб піти
тому і перевірити наступне місце для це виявленого об'єкта, воно сходить.
Тому, коли мова повернулася до неправильного місце, він потім не бачить об'єкт.
І вона вирішить, що не було ніякої об'єкт, це була помилкова виявлення і
Краплі доріжки.
>> Виступаючий 1: вхідні Скад зникли На екрані радара, і
секунд по тому це хлопнуло в казарму.
Скад загинули 28 і був останнім звільнили під час першої війни в Перській затоці.
Трагічно, що оновлене програмне забезпечення прибутку Дахрана на наступний день.
Програмне забезпечення недолік був встановлений, закриття однієї глави в неспокійному
Історія Петріот.
>> Patriot насправді скорочення для відстеження фазованими гратами
Перехоплення мети.
>> David J мала: Гаразд, протверезним прикладом того, щоб бути впевненим.
І, на щастя, ці низькому рівні помилки не є чимось, що ми будемо
зазвичай повинні цінувати, звичайно, Чи не з деякими з наших
рання з програм.
Швидше за все, більшість помилок ви будете Зустріч буде логічно в природі,
синтаксичних в природі в результаті чого Код просто не працює правильно.
І ви знаєте, це досить швидко.
>> Але особливо, коли ми добираємося до кінці семестру, він збирається
все більше і більше можливість дійсно задуматися про дизайн
з ваших програм і основні подання
там теж даних.
Наприклад, давайте познайомимося з MySQL, який є популярним компонентом Database Engine
, Які можна використовувати з веб-сайти для зберігати дані на задній частині.
І ви будете мати, щоб почати вирішувати в кінці семестру не тільки те,
типів даних уздовж цих ліній використовувати але точно, скільки біт у використанні,
дійсно ви хочете зберігати дати як дата і час, якраз, а також
такі речі, як великий Ви хочете унікальні ідентифікатори, щоб бути, скажімо, для користувачів
в базі даних.
>> Справді, якщо деякі з вас були Facebook доводиться досить довго,
і ви знаєте, як отримати доступ У користувача ID -
яка іноді з'являється у вашій URL профілю, якщо ви не вибрали
Псевдонім для URL, або якщо ви Facebook, використовуваних Графік API,
загальнодоступних API за допомогою якого ви Facebook може попросити і для сирих даних -
Ви можете побачити, що ваші числовий ідентифікатор.
І кілька років тому, по суті Facebook довелося змінити від використання
еквівалент до цілі використанні довгих довго, тому що з плином часу, як користувачі приходять
і йдуть, і створити багато рахунків і підроблені рахунки, навіть вони дуже легко
змогли вичерпати щось на зразок 4 млрд. можливе значення, як Int.
>> Так більше на ті види питань в майбутньому, а також.
Гаразд, так, щоб було лиття.
Це була неточність.
Кілька швидких оголошень.
Так розділах формально почати майбутній Неділя, понеділок, вівторок.
Ви почуєте по електронній пошті в кінці цього тижня Що стосується вашого призначення розділам.
І ви також будете тут в цій точці як змінити свій розділ, якщо ваші
графіка в даний час змінилася або ваш Рівень комфорту в даний час змінилася.
Тим часом P-набір одного і хакерських є одним через це четверга з можливістю
продовжити цей термін на Специфікації по п'ятницю
в типовому способом.
>> Зрозумійте, що в комплекті з проблемою набір специфікацій Інструкції по
як використовувати прилад CS50, марка, а також деякі конкретні інструменти CS50
як стиль 50, який може надати вам зі зворотним зв'язком динамічно
якість вашого коду стилі, а також перевірити 50, який може надати вам
динамічної зворотного зв'язку, щоб ваші Код коректності.
Пробач, що ми все ще прасувальні з кілька петель з перевіркою 50.
Деякі з ваших однокласників, які дійсно починали близько 4 ранку в ніч на п'ятницю, коли
специфікації підійшов помітили відтоді кілька помилок, які ми працюємо
до кінця, і вибачення для тих, хто випробував надмірних розчарувань.
Несправність полягає в шахту.
Але ми будемо стежити за CS50 обговорити, що, коли буде вирішена.
>> Так що слова про собі бали.
Так що це буде через тиждень або два, перш ніж почати, щоб отримати зворотній зв'язок на домашніх завдань
тому що ви ще не мають викладання хлопець.
І навіть тоді, ми почнемо оцінювати Проблема C ставить перед нами
повернутися назад і оцінити подряпин так що ви отримуєте більше відповідного
зворотній зв'язок швидше.
Але в цілому в програмі, CS50 Проблема набори оцінювалися по довжині
після чотирьох осей -
сфери, правильність, дизайн і стиль.
>> Область буде число зазвичай від нуля до п'яти, що
захоплює скільки частина, яку Ви відкусили.
Як правило, ви хочете, щоб це було п'ять.
Ви принаймні, спробував все.
І помітили, що це множника так що робить тільки частина
Проблема набору не найкраща стратегія.
>> Тим часом, більш очевидним є Важливість правильності -
просто ваша програма з правильними щодо специфікації?
Це зважений навмисно більше мірою, ніж дві інші осі з допомогою
в три рази, тому що ми визнаємо , Які зазвичай ви збираєтеся витратити
набагато більше часу, щоб ганятися за деякі помилки, Примусьте ваш код працювати, то ви
відступів і вибравши відповідні імена змінних і
як, який на іншому кінці спектру стилю.
>> Це не означає, що стиль не важливо, і ми будемо проповідувати його більш
час як в лекціях і в секціях.
Стиль відноситься до естетики вашого коду.
Ви вибрали добре названі змінні , Які є короткими, але кілька
описові?
Чи є ваш код відступом, як ви бачили в лекцію та відповідно
в стилі 50?
>> Нарешті є проектування права там в середині.
Дизайн, тим важче одну, щоб помістити пальцем, тому що це набагато більш
суб'єктивно.
Але це, мабуть, найважливіший з трьох осей з точки зору педагогічної
вартості з часом і що це буде навчання стипендіата можливість
надати Вам якісні зворотного зв'язку.
Дійсно, в CS50, хоча у нас є ці формули та оцінки, в кінці
дня це абсолютно свідомо дуже маленькі відра - точка
від нуля до трьох і нульовий і п'ять.
Ми не намагаємося залучити дуже грубих ліній Проблема між наборами або між
студенти а зосередитися стільки, скільки ми можемо на якісні, звичайний лист
зворотного зв'язку, або типізованих або усного від Вашої товаришів навчання,
Ви дізнаєтеся досить добре.
>> Але загалом, ті ваги що різні осі матимуть.
Тим часом, також, це варто мати на увазі, що ви не повинні вважати, що
три з п'яти представляє собою 60% і Тому приблизно невдачу.
Три свідомо призначається, щоб бути роду середині шляху добре.
Якщо ви отримуєте в трійках початку семестру, це
дійсно призначено, щоб бути хорошим місце, щоб почати.
Якщо ви отримуєте двійку, ярмарках, є безумовно, деякі роботи, щоб заплатити трохи
більше уваги, щоб скористатися розділів і робочий час.
>> Якщо ви отримуєте рачки і п'ятірками, відмінно.
Але насправді, ми сподіваємося побачити траєкторії Серед студентів - дуже
індивідуально на одного студента, але починаючи семестру тут, в роду
від двох до трьох діапазону, але закінчення тут, в 4:56 діапазоні.
Це те, що ми насправді шукаємо.
І ми мати на увазі, що дельта Ви показуєте між нулем тиждень і тиждень
12, коли я роблю класах.
Це не має значення для нас зовсім так, як Ви справедливим на початку, якщо ваш
Траєкторія дійсно вгору і сильним.
>> Академічній чесності - так що дозвольте мені надів серйознішим голосом на мить.
Так що цей курс має честь посилаючи більше студентів, ніж будь-який інший
в історії, Дошка оголошень, я вірю.
У нас є начебто втратив рахунок у цьому точки як часто це відбувається.
І це не тому, що студенти в 50 носять більш нечесними, ніж їх
однокласників в інших місцях.
Але розумієте, і те, що ми дуже гарні при виявленні такого роду речі.
>> І це те перевагу, що інформатика клас, в якому ми
може і ми порівняти всі студенти Проблема встановлює попарно проти всіх
іншому, а не тільки в цьому році Але всі попередні роки.
У нас є можливість, як студенти в клас, Google і знайти код
на сайтах, як GitHub і дискусійні форуми.
Є абсолютно вирішення CS50 учасника Р-множин плаваючі навколо там.
Але якщо ви можете знайти їх, ми можемо знайти їх.
І все це дуже автоматизований і легко, і сумні для нас знайти.
>> Але я хочу підкреслити також, що академічної політики чесності курсу є
дуже має бути дуже багато протилежністю цього духу.
Дійсно, в цьому році ми перефразувати речі у навчальному плані, щоб бути цим, точка
точка точка, з більш детально у навчальному плані.
Але головною темою в ході Насправді, щоб бути розумним.
Ми визнаємо, що існує значна кількість педагогічних
значення в співпрацюють, в деякій мірі, з однокласниками, в якому ви
двох або трьох або ви вам більше є стоячи на білій дошці
дошкою, так кажуть, ваші ідеї -
виписуючи псевдокод в картинках, діаграм, що повинно бути, якщо Маріо
Ви повинні були написати його першим в псевдокоді.
Якою має бути жадібним алгоритмом -
як він повинен вести себе в Проблема зараз одна?
>> І так розумію, що поведінка що ми заохочуємо дуже
багато чого в цьому напрямку.
А в програмі, ви побачите цілу купу під кулями
розумні категорію і не розумно категорія, яка допомагає нам допомогти
Ви обернути ваш розум навколо, де ми намалювати цю лінію.
І взагалі, гідний правило тому, що якщо ви боретеся, щоб вирішити
якась помилка і вашого друга чи однокласника сидить поруч з вами, це
розумне для вас, щоб показати йому або їй код і сказати: агов, ви можете допомогти
мені зрозуміти, що відбувається тут не так?
>> Ми зазвичай не охоплюють протилежній стороні.
Це не правильну відповідь для ваших друга або однокласника тут, щоб сказати, про,
просто подивіться на мої і фігури його від цього.
Це є свого роду необгрунтованим.
Але маючи іншого, другий мозок, ще одна пара очей дивляться на
екрані або дивилися ваш код і говорите, ви впевнені, що хочете
мати петлі тут?
Або Ви впевнені, що хочете ця крапка з комою тут?
Або про, це повідомлення про помилку означає це.
Це дуже розумно і заохочується поведінку.
>> Випадках, до яких я мав на увазі раніше зводяться до того, коли студенти
пізно ввечері робить недалекоглядності рішення і по електронній пошті свій код
кому-небудь або просто кажу, тут, це в Dropbox або
Погуглити пізно ввечері.
І тому я закликаю і благаю вас, Якщо у вас є тих неминучих
моменти стресу, ви натикаючись проти терміну, у вас немає кінця
день, так як це вже в п'ятницю на що точки, електронною поштою керівники курсу або
себе безпосередньо.
Скажімо, слухай, я в своєму переломним моментом тут.
Давайте вести розмову і зрозуміти це.
Вдаючись до мережі або деяких інших, не розумна поведінка ніколи не буває
розчину і занадто багато ваших однокласники вже не тут, на
кампуса через цю недалекоглядність.
Але це дуже легко обійти цю лінію.
>> А ось маленька картинка, щоб підбадьорити Вас з Reddit, так що тепер
все буде ОК.
>> Так швидке резюме, то, , Де ми зупинилися.
Так минулого тижня, нагадаємо, що ми вводимо умовах, а не в подряпин
але в C цього часу.
І був деякий новий синтаксис, але Дійсно ніякі нові ідеї як такої.
У нас були логічні вирази, що ми могли або разом з двома вертикальними
барах або і разом з двома амперсандом, кажучи, що як ліва
і права мають бути істинними для цього виконати.
Тоді у нас були вимикачі, які ми дивилися в коротко, але я пропоную дійсно
просто різний синтаксис для досягнення такі ж цілі, якщо ви знаєте, в
заздалегідь, що ваші випадки будуть.
>> Ми дивилися на петлях.
Цикл, може бути, найбільш поширеним, або принаймні один, що люди
зазвичай досягають за інстинктивно.
Хоча це виглядає трохи загадково, ви побачите багато, багато прикладів цього
незабаром, у вас є вже в кінці минулого тижня.
У той час як петлі можуть аналогічно досягти того ж.
Але якщо ви хочете зробити якісь прирости або оновлення
значення змінної, ви повинні робити це більш, ніж вручну
цикл до дозволяє.
А тут ще робити-то час як цикл, що дозволяє нам зробити що-небудь в
Хоча б раз в той час щось інше є істиною.
І це особливо добре для програм або для ігор, де ви хочете
запропонувати користувачеві щось принаймні, один раз.
І потім, якщо він або вона не буде співпрацювати, Ви можете зробити це
знову і знову.
>> З змінними, між тим, ми були ліній коду, як це, які могли б
дві прямі.
Можна оголосити Цілочисельне називається лічильник, крапки з комою.
Або ви можете просто оголосити і визначити його, так би мовити.
Дайте йому значення в той же час.
>> І тоді, нарешті, ми говорили про функції.
І це був гарний приклад у тому сенсі, що вона ілюструє
два типи функцій.
Одним з них є GetString (), який, знову ж таки, приймає рядок від користувача.
Але GetString () є почасти цікаво, остільки, оскільки ми використовували його,
тому що ми завжди використовували його з щось на лівій стороні
Знак рівності.
Тобто, що GetString () повертає значення.
Він повертає, звичайно, рядка.
А потім на ліву сторону, ми простого збереження цього рядка всередині
змінна з ім'ям ім'я.
>> Це зовсім інше, в деякому сенсі, від Е Е, тому що, принаймні в нашому
Використання тут, нічого не повертає.
Як осторонь, вона повертає щось.
Ми просто не хвилює, що це таке.
Але в ньому є те, що називається побічний ефект.
І що ж це побічний ефект в кожному випадку ми бачили дотепер?
Що робити Е?
Він друкує щось на екран, дисплеїв текст, число або щось
на екрані.
І це тільки вважається побічним ефектом , Тому що це насправді не вручати
його назад до мене.
Це не відповідь всередині чорний ящик, який я можу після цього
досягти в і захопити.
Це просто робить це сам по собі, набагато як Колтон був підключений до цього
Чорний ящик минулого тижня, і він так чи інакше чарівним був креслення на дошці
без мене насправді бере участь.
Це було б побічний ефект.
Але якщо я фактично повинен був йти у тут і говорити, ой, ось рядки
від користувача, який би бути повертається значенням.
>> І до цих пір ми використовували тільки функції що інші люди написали.
Але ми можемо насправді ці речі самі.
Так що я збираюся йти в CS50 прилад знову.
Дозвольте мені закрити вкладку, що ми були відкриті хвилину тому.
І дозвольте мені йти вперед і створити новий файл.
І я збираюся йти вперед і називають його одним positive.c.
Тому я хочу зробити щось з позитивні числа тут.
Так що я збираюся йти вперед і робити Int -
На жаль -
# Включити.
Давайте не будемо робити, що ж помилка, як раніше.
Int основних (недійсними), що відкриває фігурною дужки, закритою фігурною дужкою.
>> А тепер я хочу зробити наступне.
Я хочу написати програму, яка наполягає на тому, що користувач дає
мені позитивне ціле число.
Так ні GetPositiveInt функції CS50 в бібліотеці.
Там тільки GetInt ().
Але це нормально, тому що у мене є конструкцій, з якими я можу накласти
трохи більше обмеження на це значення.
Я міг би зробити щось на зразок цього.
>> Так Int N -
і якщо ви набираю текст, просто розумію, Я збираюся повернутися і
змінити деякі речі в даний момент -
так Int N дорівнює GetInt ().
І, що збирається поставити Цілочисельне всередині н.
І дозвольте мені бути, більш наочний.
Дозвольте мені сказати щось на кшталт: я вимагаю, щоб Ви дасте мені позитивне ціле число.
>> Добре.
Так що просто трохи інструкцій.
А тепер те, що я можу зробити?
Ну, я вже знаю, з моєї простий умов або гілок, так само, як я
мав на нуля, я не міг сказати щось наприклад, якщо п менше або дорівнює
нулю, то я хочу зробити щось подобається, це не позитивно.
А потім я міг зробити -
Добре, але я дійсно хочу отримати, що Int.
Так що я міг піднятися тут, і я міг почасти копії цього і цього абзацу.
І потім, ОК.
Таким чином, якщо N менше або дорівнює нулю це зробити.
>> Тепер, що якщо користувач не співпрацювати?
Ну, тоді я збираюся запозичувати це тут.
І тоді я йду сюди і тут і тут.
Так що це явно не рішення, чи не так?
Тому що немає кінця цьому не видно.
Якщо я хочу зажадати, щоб користувач дає мене позитивне ціле число, я можу
насправді отримати Int.
Потім я можу перевірити, що Int.
Але тоді я хочу перевірити його ще раз і перевірити його ще раз і перевірити його ще раз.
Так, очевидно, що є кращим побудувати, використовують тут?
Гаразд, якийсь цикл.
>> Так що я збираюся позбутися майже все це.
І я хочу, щоб ця Int хоча б раз.
Так що я збираюся сказати, роблять -
і я повернуся до а через хвилину -
Тепер, що робити?
Я збираюся зробити Int N отримує GetInt ().
ОК.
Так що це досить добре.
І тепер, як часто роблять Я хочу це зробити?
>> Дозвольте мені сказати Е всередині циклу так що я можу вимагати знову і знову,
у разі потреби.
І що ж я хочу, щоб це а умова робити?
Я хочу продовжувати робити це а те, що це має місце?
Так.
N менше або дорівнює нулю.
Так уже, у нас значно прибрали цей код вгору.
Ми запозичили дуже проста конструкція - зроби той час як цикл.
Я вкрав тільки важливі лінії коду, який я почала копіювання та
вставка, яка не була мудрим.
І ось тепер я збираюся насправді вставте це тут і просто зробити це один раз.
>> І що зараз я хочу зробити на У самому кінці цієї програми?
Я просто скажу, щось просте подобається, спасибо за - і
Я зроблю% я для Int -
зворотний слеш п, кома, а потім підключіть N, крапка з комою.
>> Добре.
Отже, давайте подивимося, що відбувається зараз коли я запускаю цю програму.
Я збираюся йти вперед і дійсно роблять позитивні.
Чорт.
Кілька помилок.
Отже, дозвольте мені прокручувати вперед до першого.
Не працювати через них у зворотному напрямку.
Працювати через них зверху вниз щоб вони каскадом і тільки
одне помилятися.
Неявна декларація Функція GetInt ().
Так.
Так було не достатньо.
Я як би зробив ту ж помилку, але трохи по-іншому в цей раз.
Мені потрібно не тільки включати, але stdio.h Також cs50.h, який включає в себе
так званих декларацій отримати Інтернешнл, яка навчити приладу або вчить
З того, що GetInt () є.
>> Отже, дозвольте мені зберегти.
Я збираюся ігнорувати інші помилки тому що я збираюся сподіватися, що вони
чи інакше пов'язані з помилкою Я вже зафіксовано.
Отже, дозвольте мені йти вперед і перекомпілювати з приймати позитивні, Enter.
Чорт.
Три помилки, до цих пір.
Дозвольте мені прокрутки вгору до першого.
Невикористані змінної N.
Ми не бачили це раніше.
І це теж, трохи загадковим.
Це висновок компілятора.
І що, що виділений рядок там - positive.c: 9:13 -
говорить, він говорить на лінії дев'ять з positive.c, на 13-му характеру,
13-й колонці, ви зробили цю помилку.
>> І зокрема, це говорить Мені невикористовуваних змінних N.
Отже, давайте подивимося -
лінія дев'ять.
Я використовую N в тому сенсі, що Я даю йому значення.
Але те, що компілятор не подобається, що я не здавалося б, його використанням.
Але постійте, я використовую його.
У рядку 11, я використовую його тут.
Але якщо я перейдіть вниз подальшого на positive.c: 11 -
тому на лінії 11, 12 символів, компілятор говорить мені, використання
неоголошений ідентифікатор н.
>> Так неоголошеної означає, що я не вказано його в якості
Змінна з типом даних.
Але почекайте хвилину.
Я зробив саме те, що відповідно дев'ять.
Так що хтось дійсно плутають тут.
Це або я, або тому, що компілятор відповідно дев'ять, знову ж таки, я оголошую
Int N, і я присвоївши йому повернути значення GetInt ().
Тоді я використовую цю змінну N відповідно 11 і перевірки, якщо його значення менше
або рівним нулю.
Але це мабуть, погано і зламані чому?
Скажи це ще раз?
>> Ах, я повинен оголосити до N входу в цикл.
Але чому?
Я маю на увазі, ми просто запропонували трохи назад, що це прекрасно, щоб оголосити змінні
все на одній лінії, а потім присвоїти їм якесь значення.
Глобальна змінна - Повернемося до цієї ідеї через хвилину.
Чому ви хочете, щоб я поклав його поза циклу?
Так і є.
Саме так.
>> Так, хоча, дещо парадоксально, дозвольте мені підвести підсумок.
При оголошенні N всередині з блок DO там -
спеціально всередині ці фігурні дужки -
ця змінна N має те, що називається областю -
не пов'язаних з нашої скорингової системи в звичайно, - але є сфери, що це
обмежується тими фігурні дужки.
Іншими словами, зазвичай при оголошенні змінну всередині набору
фігурні дужки, то ця змінна існує тільки Усередині ці фігурні дужки.
Отже, що логіка одна, хоча Я оголосив N відповідно дев'ять, він
практично зникає зі сфери, зникає з пам'яті, так би мовити,
до того часу, я вдарив лінії 11.
Так як лінія 11, на жаль, за винятком тих, фігурні дужки.
>> Так що я на жаль, не можете виправити це, повертаюся до того, що я зробив це раніше.
Ви могли б спочатку зробити це.
Але те, що ти зараз не робити циклічно?
Ви, очевидно, не отримують цілочисельне циклічно.
Тому ми можемо вийти GetInt (), і ми повинні покинути GetInt () всередині
цикл, оскільки це те, що ми хочемо приставати у користувача знову і знову.
Але це досить, щоб піти до лінії, скажімо, шість.
Int N, крапка з комою.
Не давайте йому значення ще й тому, Вам не потрібно, щоб тільки поки.
>> Але тепер тут, зауважте - це було б дуже легко помилкою.
Я не хочу, щоб тінь мого попереднього Декларація N.
Я хочу використовувати N, що насправді існує.
І ось тепер у рядку 10, Доручаю п значення.
Але відповідно шість, я заявляю н.
І так я можу, або я можу не використовувати його в лінії 12 зараз?
Я можу, тому що, між якими фігурні брекетів п оголошений зараз?
Один тут, на лінії п'ять.
Щоб тут, на одній лінії 14.
Так що якщо я зараз зменшити масштаб, зберегти цей файл, перейдіть назад в і запустити приймати позитивні, це
складено цей раз.
Так що це вже прогрес.
Slash. . / Позитивним, Enter.
>> Я вимагаю, щоб ви дати мені ціле позитивне число.
Негативні 1.
Негативні 2.
Негативні 3.
Нуль.
Один.
І спасибі за один те, що зараз друкується.
>> Дозвольте мені спробувати щось ще, з цікавості.
Мені кажуть, щоб ввести ціле число.
Але що, якщо я замість цього ввести ягняти?
Так що ви зараз бачите інше запрошення -
повторіть спробу.
Але ніде в моєму коді я написала повторити спробу.
То де, мабуть, це повтор підкажіть звідки, б ви сказали?
Так, від GetInt () сама.
Так що одна з речей, персонал робить CS50 учасника для вас, принаймні в перші кілька
тижня, як ми написали деяку кількість перевірки помилок, щоб гарантувати, що якщо
ви називаєте GetInt (), ви принаймні повернутися Цілочисельне від користувача.
Ви не будете отримувати рядок.
Ви не будете отримувати символів.
Ви не будете отримувати те, зовсім інше.
Ви отримаєте Int.
>> Тепер вона не може бути позитивним.
Воно не може бути негативним.
Ми не даємо жодних гарантій, що навколо.
Але ми будемо приставати до користувача спробувати ще раз, повтору, не повторити, поки він чи вона насправді
співпрацює.
Аналогічно, якщо я роблю 1,23, , Який не є Int.
Але якщо я ввести, скажімо, 50, то дає мені значення, яке я хотів.
>> Добре.
Так не погано.
Всі питання про те, що ми тільки що зробили?
Ключ винос буття, щоб бути ясним, що не стільки цикл, який ми бачили
Перед хоча у нас є насправді не використовували його, але питання про сферу, де
змінних може бути може бути використана тільки в деяких зазначеної області.
>> Добре, дозвольте мені звернутися до пропозиції ви зробили раніше, що з
глобальної змінної.
Як осторонь, то виходить, що інший Вирішення цієї проблеми, але
зазвичай неправильні рішення або погано спроектовані рішенням є
оголосити змінну як те, що називається глобальної змінної.
Тепер я частковопорушує моє визначення обсягів, тому що є
Немає фігурні дужки на самому верху і в самому низу файлу.
Але наслідки, що є те, що в даний час в чотири лінії,
N є глобальної змінної.
І як випливає з назви, це просто доступні скрізь.
>> Подряпини насправді має ці.
Якщо ви використовували змінну, Ви можете згадати вам довелося вибирати, якщо це для
спрайт або для всіх спрайтів.
Ну, всі спрайт тільки тим ясніше спосіб сказати глобальним.
Так?
Ах, дуже хороше запитання.
>> Тому нагадаємо, що в самій першій версії мій код, коли я неправильно
декларуються і визначаються відповідно N дев'ять -
Я сказав, що вона змінну і я дав йому значення з
Оператор присвоювання -
це дало мені дві помилки.
Один той факт, що п не був використаний, і, по-друге, що в рядку 11
він просто не був оголошений.
Таким чином, перший, який я не адреса в той час.
Це не строго помилки оголосити змінної, але не використовувати його.
Але одна з речей, які ми зробили в CS50 пристрої, свідомо,
педагогічно, як ми провернули очікування компілятору зробити
Переконайтеся, що ви робите речі не тільки правильно, але насправді правильно.
>> Тому що, якщо ви оголошення змінної N, як і ніколи не використовувати його, або використовувати його
Правильно, те що воно там робить?
Це дійсно не має сенсу.
І це дуже легко з часом, якщо Ви НЕ налаштувати свій комп'ютер в
Таким чином, просто є код, який має трохи тут залишки, залишки там.
А потім місяці по тому, озираючись назад, ви, як, чому ця лінія
код є?
А якщо немає поважної причини, він не йде на користь ви або ваші колеги
вниз по дорозі доведеться спотикатися його тоді.
>> Як осторонь, де що приходить?
Ну, згадайте, що кожен раз, коли ми складаємо програми, все це речі
у пресі.
Таким чином, ми ще повернемося до цього.
Але знову ж, зробити це утиліта, яка автоматизує процес компіляції по
працює фактичний компілятора називається брязкотом.
Ця річ, ми в кінцевому підсумку побачити, має робити з налагодженням зі спеціальним
програма під назвою відладчик.
Це пов'язано з оптимізацією код - докладніше про це в майбутньому.
Std = C99 -
це просто означає, використовувати версію 1999 С. С було навколо навіть довше, ніж
, Але вони зробили деякі хороші Зміни 10 з гаком років тому.
>> І ось актуальними.
Ми говоримо, зробити все, що Раніше було б попередження
Помилка запобігання студента від компіляції.
І стіни засобів зробити це для цілу купу речей, а не
все пов'язані із змінними.
І то дозвольте мені перейти до в кінці цієї лінії.
І це теж, ми в кінцевому підсумку повернутися.
Це, очевидно, назва файл я компіляції.
Це нагадує ім'я файлу Я виводячи в якості імені
моєї працюючу програму.
Це-lcs50 просто означає використання CS50 бібліотеки, і будь-яке нулів і одиниць, що
Співробітники писав раніше і склав в цьому році, інтегрувати
їх у моїй програмі.
>> А хто-небудь знає, що це-LM?
Це математична бібліотека, яка є якраз там, навіть якщо ви
не роблю будь-яку математику.
Це просто автоматично, за умови нам зробити.
>> Ну, зробимо один приклад Тут, відкривши новий файл.
І дозвольте мені зберегти цей як string.c.
Виходить, що коли ми говоримо про дані Типи сьогодні, є ще більше
відбувається під капотом , Ніж ми бачили досі.
Отже, дозвольте мені швидко зробити швидку програму.
Увімкніть stdio.h.
І я залишу це.
І Ви знаєте, дозвольте мені не зробити ж помилки знову і знову.
Увімкніть cs50.h.
І дозвольте мені тепер іти вперед і робити тап_п (недійсними).
>> А зараз я просто хочу зробити програму , Який робить це - оголосити рядок
називається с і отримати рядок від користувача.
І дозвольте мені зробити невелике інструкції тут -
будь ласка, дайте мені рядок - таким Користувач знає, що робити.
А потім тут нижче цього, Я хочу зробити наступне -
для INT I отримує нулю.
Знову ж, програмісти зазвичай почати відлік з нуля, але ми не могли
робити щось одне, якщо ми дійсно хотіли.
Тепер я збираюся зробити я менше ніж довжина рядка з с.
Так StrLen -
S-T-R-L-E-N -
знову ж, це коротким, тому що легше ввести, навіть якщо це
загадковим.
>> , Яка є функцією ми не використовується раніше, але робить це буквально -
повертайся до мене число, яке представляє Довжина рядка
, Введений користувачем.
Якщо вони набрані в привіт, він повернеться п'ять, тому що є п'ять
букви в привіт.
Потім на кожній ітерації цей цикл, я плюс плюс.
Отже, ще раз, стандартний побудувати, навіть якщо Ви не зовсім або занадто зручно
знайомі з ним ще.
>> Але тепер на кожній ітерації цього циклу помітити, що я збираюся робити.
Я хочу, щоб йти вперед і роздрукувати одиночний символ -
% З таким зворотну косу риску N з нового рядка.
І потім, ви знаєте, що я хочу зробити?
Якими б не були слово в тому, що користувач вводить в, наприклад, привіт, Я хочу надрукувати
H-E-L-L-О, по одному символу в рядку.
Іншими словами, я хочу отримати в окремих символів у рядку,
якої до цих пір не має рядки просто була послідовність символів.
>> І виходить, що я можу зробити з, кронштейн, Я, заслони дужку, закрийте
дужки, крапка з комою.
І я дійсно повинен зробити ще одну річ.
Це у файлі з ім'ям string.h що StrLen оголошений.
Так що, якщо я хочу використовувати цю функцію, Мені потрібно, щоб повідомити компілятору,
очікувати, щоб використовувати його.
Тепер дозвольте мені піти далі і зробити Програма називається рядком.
Точки, похилій риси рядок.
>> Будь ласка, дайте мені рядок.
Я буду йти вперед і введіть його.
Здрастуй, заголовними літерами, Enter.
А тепер помічаю я надрукував одному символу за іншим.
Таким чином, новий деталь в тому, що рядок, зрештою, може бути
доступні у вигляді окремих її символів, вводячи квадратних
дужок.
І це тому, що під рядком капот дійсно послідовність
символів.
Але те, що акуратний про них в оперативній пам'яті комп'ютера -
Mac, PC, б це не було - вони буквально спина до спини до спини -
H-E-L-L-O -
на індивідуальному, суміжний байтів в пам'яті.
>> Так що якщо ви хочете отримати на восьмий таких байт, який в цьому циклі буде
Кронштейн нуля, кронштейн однієї, кронштейн два, Кронштейн три, чотири кронштейна -
яка ніколи нуля індексуватися аж до п'яти -
, Яка видаватиме H-E-L-L-O на окремому рядку.
>> Тепер, як тизер, дозвольте мені показати вам види речей ви в кінцевому підсумку бути
здатні розуміти, принаймні з деякими близькими дивитися.
З одного боку, те, що ми включені в сьогоднішній приклади, якщо ви хочете, насправді
одна з найперших джейлбрейк для iPhone.
Jailbreaking означає розтріскування телефону так що ви можете використовувати його на
різних носіїв або встановити власне програмне забезпечення.
І ви помітите, це виглядає абсолютно загадкові, швидше за все.
Але подивіться на це.
IPhone мабуть з тріщинами цикл, якщо умова, ще
стані, купа функцій ми не бачили.
>> І знову ж, ви не будете в перший погляд, ймовірно,
зрозуміти, як це працює.
Але все, що ми ніби як прийняти само собою зрозумілим у нашому сучасному житті
фактично веде до зниження навіть в деякій цих основах ми були
дивіться.
Дозвольте мені йти вперед і відкрити один інші програми, holloway.c.
Так що це теж те, що ви Не повинні дійсно знати.
Навіть ніхто зі співробітників або я міг ймовірно, зрозуміти це, дивлячись на
це, тому що це був чийсь код , Який був представлений до того, що
історично відомого як затемнений C Конкурс, в якому можна створювати програми
яка компілюється і працює, але так чертовски загадковими жодна людина не може зрозуміти, що
він не робитиме, поки вони насправді запустити його.
>> Так що дійсно, якщо ви подивитеся на це код, я бачу перемикача.
Я бачу основною.
Я бачу ці квадратні дужки маючи на увазі якийсь масив.
Хто-небудь хоче поворожити, ця програма насправді
робить, якщо я біжу Холлоуей?
Так.
ОК.
Молодці.
Таким чином, тільки співробітники і я не можу зрозуміти , Що ці речі роблять.
>> І тепер, нарешті, дозвольте мені йти вперед і відкрити одній іншій програмі.
Це одне -
знову, то ми зробити вихідний код доступні в Інтернеті - це одне просто
вид красиво дивитися.
Все, що вони зробили, це хіт пробіл зовсім небагато.
Але це реальний код.
Так що якщо ви думаєте, що це красиво, якщо ми фактично управляє цим у командному рядку
в кінці кінців ви побачите, як ми може робити такі речі.
>> Таким чином, ми залишимо вас на цій ноті і до зустрічі в середу.
>> [Музика Відтворення]
>> Доповідач 2: Наступного CS50, ТФ влаштувати бунт.
>> Виступаючий 3: Там він є.
Взяти його!
>> [Музика Відтворення]