>> [Грає музика]
>> СПІКЕР 1: Це CS50 і це початок другого тижня.
Отже, давайте пірнати прямо в щось що глючить, так сказати.
Так, за ось CS50 IDE а у мене під'їхав заздалегідь це чертовски screen--
це.
Спойлер попередження.
Добре.
Я витягнув цей екран тут, який має дуже просту програму.
Якщо ми прокрутіть униз, більшість це просто коментарі,
але тут, в лінії 13 через 17 у нас є програма.
>> Це синтаксично невірно, що означає, що якщо Я скомпілювати його, він буде скомпілювати і запустити,
але він помилковий.
Ця програма претендує в коментарях нагорі, що вона повинна надрукувати 10 зірок,
але це не так.
І на основі вашого досвіду, або скоро буде досвід роботи з C,
Ви можете розрізнити логічно чому це, насправді, глючить?
Так?
АУДИТОРІЯ: Це йде від нуля до 10.
Це 11 ітерацій.
СПІКЕР 1: Так.
Таким чином, це походить від нуля через і дорівнює 10,
що, звичайно, 11 ітерацій.
Так, він збирається друк, дійсно, 11 зірок.
Так, Конвенція інформатика в більшості мов програмування
це, дійсно, просто почати відлік з нуля,
але підрахувати, але не через Значення, яке ви насправді хвилює.
>> Тепер, це одна річ, яка Приймає трохи звикнути
і навіть до подряпин, призначені, як це для не програміст або невідповідності комп'ютера
Вчені і для дітей в основному, розрахована на
Ви починаєте підрахунку голосів в цілому на одному.
І це нормально.
Ви можете абсолютно почати відлік в одному, якщо це більш зручно.
І розраховувати до і через 10, але ви зрозумієте, зокрема, на цьому тижні
і за що просто так багато речей в програмуванні
Припустимо, що 0 є першим значний, з якою ви вважаєте,
що ви збираєтеся знайти простіше тільки, щоб отримати в цієї звички пуску
від нуля і рахувати до значення Ви дбаєте про прямо зараз з
отримати йти.
>> Так, що зафіксовано, що.
Ми змінили менше або дорівнює трохи менше.
Давайте поглянемо на Другий приклад тут.
>> Так, ця програма занадто стверджує у своєму коментарі нагорі, що він повинен роздрукувати
десять зірок, але це не так.
Що помилка тут?
>> Так, что-- і вибачте, давайте бути ясно.
10 зірок.
Один за лінію, але це не так.
Так, справді, дозвольте мені йти вперед і компіляції цей, тому що це трохи менше,
очистити на основі цього опису.
Дозвольте мені піти в наш каталог джерела.
Зробити КОЛЯСКИ одна точка слеш, баггі один.
ОК, я бачу, 11 зірок, які ще проблематично,
але вони також все в одному рядку.
Що проблема тут?
Так.
АУДИТОРІЯ: [нерозбірливо].
СПІКЕР 1: Так.
Так що це тонкість, яку ви можете Нагадаємо, мені робить коротка згадка про.
Навіть якщо все виглядає красива, і це красиво з відступом,
і це частково виглядає як до подряпин У цій лінії 16 і 17,
Дійсно, з відступом під цим цикл.
Це несуттєво.
Комп'ютер не знати або бачити прогалини.
Білий простір тільки для нас, людей, стилістично.
Комп'ютер не знає, коли у вас є Фігурні дужки, які б, справді,
виправити цю проблему.
>> Таким чином, якщо ми насправді пішов і явно покласти в цих фігурних дужках
що б виправити цю проблему, робить ясно компілятора
що я насправді хочу, щоб виконати два рядки коду знову,
і знову, і знову.
Але те, що фундаментальне пояснення?
Вірно?
Ми не повинні строго Фігурні дужки весь час,
хоча це, ймовірно, краще практика, щоб потрапити в цю звичку в будь-якому випадку
навіть якщо він додає дві символи в коді. чому?
>> АУДИТОРІЯ: [нерозбірливо]?
СПІКЕР 1: Так, так що це інше рішення в цілому.
Вірно?
Особливо, якщо на перший погляд вам не дійсно цінувати те, що відбувається.
Ну, звичайно, ми могли б просто робити дві речі одночасно
і просто уникнути проблеми в цілому.
І це прекрасно, але тепер, для сьогоднішніх цілей, те, що
це пояснення помилка?
Чому всі ці зірки на одній лінії?
Так?
>> АУДИТОРІЯ: Здається, що якщо у вас є один рядок коду,
Ви можете зробити це без них.
СПІКЕР 1: Точно.
Це просто людська умовність.
Люди розуміють, що це трохи дратує або утомливо
щоб поставити фігурні дужки все частину часу, якщо все, що ви хочете зробити
це виконати один рядок коду.
Так, люди вирішили деякі час назад, що це нормально.
Якщо ви хочете, щоб покласти всі ваші петлі тільки на цій одній лінії, як це,
це нормально з одного Крапка з комою в кінці.
Але ви можете зробити тільки один такий Лінія без фігурних дужок.
>> Таким чином, коли керівництво CS50 стиль а вкаже на,
ви побачите, що, як правило це хороша звичка
щоб потрапити в це, поки ви не цілком комфортно збивається
від цих видів конвенцій і робити свою справу.
Поки ви себе послідовним.
І ми будемо говорити більше про стиль трохи пізніше сьогодні.
>> Отже, дозвольте мені відкрити одну іншу програму.
Звичайно, ми повинні виправити, що 10, а також.
Дозвольте мені йти вперед і написати справжній швидко програма, яку я буду називати,
скажімо, петля точка С. Таким чином, цикл точка С І в петлі точка C Я збираюся мати,
включають в себе стандартні I / O точка Н INT основний порожнечу.
А тепер давайте просто робити, насправді, цикл.
Так, 4 INT I отримує нуль.
Я менше, ніж, скажімо, 50 років.
Я плюс, плюс.
А потім тут давайте йти вперед і не друкувати F.
А потім я хочу, щоб надрукувати I і нова лінія, крапка з комою.
>> І це повинно надрукувати всі число від нуля до 50?
Деякі глава киває.
Через кілька NOS.
Що помилка вже?
Що легко помилка, яку я зробив?
Так.
>> АУДИТОРІЯ: [нерозбірливо].
СПІКЕР 1: Так.
Тому, навіть якщо це виглядає як це те, що я маю намір,
Нагадаємо, що я також просто ASCII символів.
>> Так що, якщо я говорю, друк "І."
Це в буквальному сенсі збирається друкувати I. Таким чином, якщо я
хочете підключити як заповнювач Я насправді значення потрібно зробити це
а потім підключіть-в Значення I динамічно.
В іншому випадку я просто хочу, щоб отримати 50 I на екрані.
>> Отже, дозвольте мені йти вперед і зробити цей цикл, запустити його,
і, дійсно, у нас є всі аж по 49.
І якщо я прокрутки назад у часі я бачу нуль, на самому початку.
>> Ну, що, якщо я начебто зіпсувати?
Що робити, якщо я це зробити?
Просто тому, що я не думав.
Що ця програма.
Після того, як знову компіляції і запуску, збирається робити логічно?
>> АУДИТОРІЯ: Нічого.
>> СПІКЕР 1: Нічого.
Чому так?
>> АУДИТОРІЯ: Я призначений для нуля.
Таким чином, умова помилкова.
СПІКЕР 1: Так, саме так.
Весь код є правильним, синтаксично.
Це буде компілювати, це код буде працювати, але це не
збираюся зробити що-небудь корисне бо я ініціалізувати я до нуля.
Потім ми перевіряємо, є я більше 50?
Очевидно, що ні, це не так.
Таким чином, цикл ніколи не виконується взагалі.
>> Що, якщо ми щось зробити трохи більше нерозважливо?
Так, що, якщо ми робимо, як я міжнар отримує нуль.
А тепер дозвольте мені використовувати час цикл, який був ще однією умовою.
І в той час я кажу, а я більше або дорівнює нулю, а потім тут я
йти вперед і зберегти файл, щоб цикл.
І я збираюся запустити його.
Що я буду бачити це раз з час циклу?
Так.
>> АУДИТОРІЯ: нескінченний цикл?
>> СПІКЕР 1: нескінченний цикл?
Так, і чому?
АУДИТОРІЯ: Тому що це завжди дорівнює нулю.
СПІКЕР 1: Так.
Таким чином, я инициализируется рівним нулю.
Звичайно, я завжди більше ніж або дорівнює 0 в якості результату.
Отже, я просто хочу, щоб побачити це нескінченно.
І тепер, це придумати, як тільки або двічі голів курсу.
Що відбувається, коли ви є нескінченний цикл?
>> АУДИТОРІЯ: Управління С.
СПІКЕР 1: Так.
Так управління З зрештою відповідати.
На жаль, ми роздрукувати мільйони і мільйони нулів вже
і тому комп'ютер має вид отримав попереду мене.
Так, він збирається ігнорувати мені для трохи.
Але якщо ви просто натисніть CONTROL C небагато раз на вашому Mac або PC клавіатури,
в кінцевому підсумку він повинен, дійсно, припинити.
А якщо ні, ми покажемо вам деякі методи доти, коли вам
може насправді насильно вбити програм, так само, як в Windows, і Mac OS,
якщо це буде необхідно.
Але давайте спробуємо щось ще.
Давайте насправді збільшити I. Є це як і раніше буде нескінченним?
Дозвольте мені запустити цей.
І тепер ви можете вид бачити, що відбувається.
Це, також, є нескінченний цикл.
Але це трохи каверзне питання.
Чи є це в друк номера назавжди?
>> АУДИТОРІЯ: Немає
СПІКЕР 1: Ні
Чому?
Я чув, деякі NOS тут.
Someone-- Так.
АУДИТОРІЯ: Ви не вистачає біт дійсно буде тримати.
СПІКЕР 1: Добре.
Так що я не досить біт, щоб продовжувати йти.
Отже, що станеться?
Це просто збирається зупинятися?
>> АУДИТОРІЯ: У якийсь момент вона буде закрита the--
СПІКЕР 1: Це буде закрита петля вниз, але чому?
Що станеться на самий кінець його кордонів?
Так?
АУДИТОРІЯ: Це буде цикл Повернутися до негативних чисел.
СПІКЕР 1: негативних чисел або якщо ми просто лікування позитивна,
нулю, принаймні.
Так що, так, абсолютно.
Нагадаємо, що ми бачили востаннє, що якщо ви збільшити ваші біти занадто багато разів,
і ви там перший план переповнення ємність ІНТ
або щось типу даних, ви збирається, щоб обернути навколо, напевно,
два негативних чисел.
Або, якщо ви вказати, що діапазон повинен бути тільки позитивним,
які ви можете зробити, але ми не бачили, що ще,
Ви могли б у кінцевому підсумку, принаймні ще на нулі.
Хоча, насправді, так.
У цьому випадку негативного число, і в цьому випадку
цикл буде припинити тому що я не, насправді,
більше або дорівнює нулю, якщо він негативний.
>> Так, на жаль, як довго б ми повинні чекати?
Зараз ми до те, що 2 млн іш?
Ми, як 2 млрд, ми збираємося, доведеться чекати
поки ми не можемо реально побачити цей симптом.
Але ми бачимо його трохи швидше, maybe-- давайте подивимося, якщо ми можемо перервати.
Давай.
Навіть меню з'являються повільно.
Добре.
Таким чином, ми повернемося до того, що незабаром.
Це гарна time-- забирай, цуценята.
>> Це гарний час для деяких оголошень.
Так що, якщо ви могли б брати участь у YHack,
який є подією є Спонсором наших друзів у Єльському університеті.
І, дійсно, деякі з Курсу ТФ в Єльському університеті беруть участь в цьому.
YHack є міжнародною рубати-а-марафон організовано та проведено
в Єльському університеті, в результаті чого разом 1500 однодумців хакерів і творчих всіх
по всьому світу.
Якщо це становить інтерес, поглянути тут.
Якщо це занадто коротко на екраном, погляньте на сьогоднішніх слайдів
для URL для yhack.org.
Так, також кілька швидких оголошень.
Так, офіційно ділянки почнуть наступного тижня тут і Нью-Гейвен.
Майте на увазі, ви будете отримувати E-mail по тому цей уїк-енд, швидше за все ,.
Це займає багато часу, для CS50 до розділу,
враховуючи всі люди в клас і все в русі.
І все вчення стипендіатів розкладу і ще зміцнюючи,
але стежте за електронною поштою і в разі необхідності бути, ви можете повторно розділ там після.
>> Study.cs50.net.
Таким чином, навіть якщо ви є постійним учасник на ділянках, розуміють, що майже всі
ресурсів ми використовуємо в розділах є загальнодоступними на CS50
Дослідження за цією адресою тут.
Так що, якщо ви коли-небудь хотіли б знову відгук Матеріал з розділу, або читати вперед,
або ви не можете зробити це деякі тижня розуміти, що приклади слайди,
і проблеми, і визначення, і найбільше там також.
>> Годинники відновити сьогодні, і завтра, і в середу,
і в четвер, перевірте Курсу веб-сайт для графіка.
>> А також, в даний час приступає сьогодні CS50 Обговорити.
Так що, якщо і коли у вас є питання один з одним або для співробітників Курсу,
і, як правило, працює на якоїсь проблеми набору,
зрозуміти, що ви не обов'язково повинні звернутися до людини наступному вами.
Якщо немає жодного, ви можете дотягнутися до нас і однокласниками
онлайн за допомогою CS50 Обговорити.
Таким чином, це обговорення дошка для курсу,
і розумію, що це це, мабуть, кращий
місце, щоб почати, коли у вас є питання, коли в неробочий час
зокрема.
>> Ланчі почне на цьому тижні теж.
У Вогонь і лід [Нерозбірливо] в Нью-Хейвені.
Погляньте на курс-х сайт для того, щоб RSVP.
Перший прийшов, перший обслужений за це.
Якщо ви не отримаєте на цьому тижні ми зробимо ці самі щоп'ятниці
протягом терміну.
>> ОК, а тепер кілька слів про класифікації.
Особливо, коли ми вступаємо проблеми на один, який на цьому тижні,
і проблема встановити два і після цього.
Як ми можемо йти про оцінці безлічі Р та оцінки їх якості?
Таким чином, це чотири осі, які ми використовуємо в CS50, і вони ці чотири тут.
>> Сфера, яка захоплює на числовій Основою тільки, скільки з Р безлічі
ти порушенні.
Це приблизно відповідає зусилля, і це наш спосіб захоплення
ви спробуйте половину Р встановити всі Р набору.
Це легкий, щоб отримати ідеальний бали за, якщо ви, дійсно,
спробуйте кожен аспект P набору.
Так, що майте це на увазі.
>> Правильність саме це.
Чи має ваш код працювати, як специфікації і як вирішення зразок штабів
припустити, що ваш код повинні, по суті, працюють.
Перевірте 50, якщо ви ще не зустріли його Тим не менш, в Р встановлюється одне уточнення
і, як правило не дають вам так / ні відповідей
щодо того, що ваш код є правильним.
Принаймні, настільки, наскільки ми збираємося оцінити його на основі випробувань
що ми біжимо в цій програмі.
>> Дизайн є набагато більш суб'єктивно.
Це, як добре написано ваш код.
І це те, що Ви отримаєте краще з плином часу,
і це те, що ми будемо забезпечити більш якісну зворотний зв'язок по.
І дизайн я міг значить незабаром ви
може бути в якійсь спокуса P встановити щось зробити loopingly,
але є можливо зо три, чи чотири, чи створити п'ять вкладених циклів передні або вкладені в той час як
петлі.
Що взагалі повинно почати, щоб ви с'ежіваться
і в цілому буде вважається поганою дизайн.
І ви почнете бачити в класі і з класу хороших способів робити речі,
погані способи робити речі, які може бути все правильно, але не
обов'язково добре розроблена.
Як писати есе.
Ви могли б бути в змозі поставити слова на сторінка, граматично правильно,
але есе або Теза, що вони в це просто
повністю некогерентного або непереконливим.
І так, що може бути в аналоговий написано світ поганий чи хороший дизайн.
>> І стиль, також, досить суб'єктивно.
Але принаймні ми очікуємо консистенції.
Це, як досить ваш код.
Речі красиво з відступом?
Чи є ваші змінні також називаються / Всі Чи Ваші дужок і фігурні дужки
вирівнюється так, як вони повинні бути?
У нас є керівництво CS50 стиль як Поставлена ​​задача буде вказувати вам на.
Ті більш комфортно в Ласкаво просимо в бродячих від
так довго, як ви самостійно послідовним.
І це теж урок ми зміцнити в розділі.
Так що, якщо все це було трохи швидко, розуміють, Р набір та секції
буде йти в більш докладно найближчим часом.
>> Але в цілому у нас є дуже мало відра для CS50.
Результати, як правило, в масштабі від одного до трьох, або одного до п'яти.
Ми literally--, і я не можу сказати, це достатньо протягом першого тижня.
Три добре.
Таким чином, хоча, так, три з п`ять нормально, математично,
може бути 60 відсотків або як D мінус.
Три, насправді, добре.
І справді, ми очікуємо, більшість студентів у класі
щоб почати термін навколо двійок, трійок і четвірок, і.
Напевно, не так багато п'ятірок.
Не надто багато з них.
Але в цілому, щоб почати в що солодке пляма на кривій
таким чином, що з плином часу, там насправді місце для,
і можливості для верхньої прогресії.
Тому, будь ласка, не прирівнюють три з 60%.
Це набагато більш абстрактне, ніж це.
Формула, з якою ми обчислити сортів зважується наступним чином.
Правильність стоїть найбільш.
Дизайн варто трохи менше.
Стиль варто трохи менше.
І це, як правило захоплює кількість часу
що йде в отриманні кожного з цих осей разів.
Стиль дуже легко, повинні бути супер швидко,
але це легко звичка щоб отримати ліниві.
Правильність може зайняти Ви більшу частину часу.
Переслідуючи деякі помилки може прийняти, що додаткова година або більше,
і так, забивши в кінцевому рахунку, захоплює це.
І так, тепер більш серйозно слово.
Так CS50 має відмінність, на краще
або ще гірше, в тому може бути, краще познайомитися
з питаннями академічної чесність, ніж більшості інших, звичайно.
І справді, це, наскільки мені відомо, що ми відправляємо більше студентів, на жаль,
в дисциплінарних цілях щороку в результаті. Так,
в інтересах повного розкриття інформації, давайте коротко говорити
про те, що відбувається в CS50, і те, що вам може зробити, і що ви можете мати на увазі.
>> Отже, ось з 2007 року, коли Я успадкував курс,
це число випадків Дошка оголошень.
Дошка оголошень є дисциплінарна Гарварда орган, тепер честь Адвокат,
в яких випадках, коли згадуються Студенти зробити щось, що, звичайно-х
Навчальна програма вважає необґрунтованим.
Там немає реальної картини тут, я б сказав.
Це коливається над років, але в цілому
це кількість випадки, які згадуються.
Кількість студентів які беруть участь?
Це теж змінюється.
Як правило, в минулому році за Наприклад, 29 студентів Гарварду
були Оголошення сіли, так сказати.
29 з них нинішніх студентів, Двоє з них раніше студентів,
хто співпрацюють в якійсь несприятливий чином.
І тоді в термінах Відсоток, це, як правило, близько 3%
класу, який, на жаль, робить ці види рішень.
>> Так, минулого року він склав 3,5% з тіла студента CS50 в
що було оголошення сіли, так сказати.
>> Отже, що ж все це означає?
А що ми, власне, робити?
>> Таким чином, для повного розкриття, ми абсолютно, як комп'ютерні вчених,
є програмні засоби в нашому розпорядженні і це дуже легко для нас, справедливості заради,
однокласники, що одного, що не є перетину цих ліній, щоб перетнути порівняння
кожен уявлення в цьому році проти кожен уявлення протягом останніх восьми років.
Програмне забезпечення робить це.
І в кінцевому рахунку це людські очі, які вирішують
або не належать деякі значення для подальшого судового розгляду,
але програмне забезпечення, безумовно, допомагає.
І це, чесно кажучи, чому, що я думаю, у нас є такі великі цифри в CS50.
Це не тому, що CS50 студенти або CS студенти більш
як правило, менш чесними ніж будь-які інші студенти,
це просто у нас є інструменти і методи
з якою зробити цей перший прохід.
>> Але ми робимо стежити на всі ці речі
а також, знову ж, в інтересах визнаючи роботу, яка будучи покласти
в с супер більшості класу.
І політика Курсу на академічній чесності,
хоча це купа пунктів довго з купою патронів
які, ми сподіваємося, цілком читаним, це дійсно зводяться до розумним.
І найкращий правило, що ми пропонуємо до в програмі
це, сутність всіх робіт, які вам
представити цей курс повинен бути свій власний.
І справді, майже всі з тих, у випадках, зазначених для прийняття дисциплінарних заходів
це тому, що якийсь студент пізно ніч, як правило, виявилося свою код
більш прямо однокласника, який потім прийняв його
в повному обсязі або значно їх.
>> Але насправді, це нормально.
І дійсно, в офісі годин, папірці
Ви були передані, якщо ви прийшли в офіс годин минулого тижня стимулює стільки ж.
Ви абсолютно вітається і заохочується
щоб обговорити проблемні набори з однокласниками.
Щоб допомогти один одному, коли каменем.
Але взагалі правило повинне бути цим ", коли ви просите про допомогу,
Ви можете показати свій код, щоб інші, але ви не можете подивитися їх ».
Так, іншими словами, якщо я бореться з якоюсь набір P
а я сиджу там в Їдальня, або в бібліотеці,
або в класі намагаючись знайти несправність,
Я можу, звичайно показати мій код на моєму екрані
щоб людина, що сидить поруч для мене, звичайно, персонал,
але також однокласник.
Але якщо рішення, що мій однокласник пропонує це, ох,
тут просто погляньте на те, що Я зробив, що перетинає лінію.
>> І я наважився б сказати, що це, як правило розумна річ для більшості людей
дуже легко визначити лінію.
І так, подивитися навчальний план для більш докладно.
А тепер один з найбільш спірні аспекти
з CS50 програмою, що я думав, буде говорити на закінчення тут
це так званий пункт жаль.
Отже, ось все гаразд друку.
Але в цілому ми бачили за останні 8 років плюс
що, дійсно, майже всі CS50-х випадки академічної нечесності
було результатом тільки бідні прийняття рішень пізно вночі.
Результатом стресу, результат відсутності їжі, недолік сну,
занадто багато комплектів P, занадто багато терміни, занадто багато зобов'язань.
Стрес створення в 2:00, 3:00 М., 4:00 ранку, з термін за горами.
Більшість студентів в цих випадках тільки що зробили погані рішення
що вони, можливо, дуже добре жалкувати На наступний ранок, якщо не хвилин,
але до минулого року не було випускний клапан, що ці студенти могли
насправді відкрити насправді-адреса Проблема голова на без страху бути
завантаження з коледжу в цілому.
>> І, дійсно, ми ввели це жаль пункт торік,
в якому говориться, що якщо протягом 72 годин, три дні,
перетину деякої лінії наказано в програмі
ви прийшли вперед, щоб один з Курсу керівники, і ми повинні поговорити про неї.
Там як і раніше бути деякі результат, попри те, що це
Повідомлялося, навпаки.
Існує ще деякі результати, які це дієві ходом,
як правило, обнулення р набір або приймаючи деякі інші дії,
але ми, справді, впоратися з цим самі і не
см його вище були результати може бути набагато серйознішими.
І, дійсно, поділитися, що сталося в минулому році, за вісім років, і в даний час
дев'ять років, викладання цього курсу і після возитися з різними ручками,
перетворюючи різні циферблати над минулим кілька років на академічній чесності,
і, бачачи, за даними немає видимих Вплив, навіть у промовах, як це,
це було руки вниз найкраще, що ми ввели педагогічно
у вісім років разом ці лінії в CS50.
>> 19 студентів вийшли вперед за цією статтею у минулому році.
Ми не вжили жодних заходів для сім з цих студентів,
визначення того, що вони надмірно хвилювався.
Вони були не, насправді, перетнув лінію, але це
був хороший чат, щоб тим не менш.
Ми обнуляється 11 очок які були представлені.
І в одному випадку ми попросили студент, щоб зробити проблему установки.
Але більш переконливим, чесно кажучи, з цих 19 чатів,
який був набагато більше, ніж я Очікується, що кожен з них
10 хвилин до може бути, годинна, також приніс
щоб запалити ряд питань, що стосуються сімейні питання, питання друг,
проблеми психічного здоров'я що ми тоді займалися,
З студента благословення, житель декан, або друзів, або будь-яке інше число
допоміжних ресурсів.
Так що це було, безумовно, одна з кращих видів використання нашого часу
і один з кращих втручань.
>> Не з тим, що він не мав вхід на швидкості виявлення
академічної нечесності в цілому.
І я насмілюся сказати ,, це підмножина студентів торік
був демографічний, що ми раніше ніколи не визначені до
і ніколи не пов'язаний з раніше.
І так, це були чудові історії успіху
навіть якщо вони були доведені до світла менш ніж оптимальних умовах.
Так, майте це на увазі як ви зробите, можливо,
деякі бідні рішення самостійно пізно ввечері,
що існує доти, вдаватися як студент в цій ситуації
володіти і вийти вперед, так що ми можемо є такий чаті і боротьби з ним
таким чином, що це освітній, а потім ми можемо залишити це позаду нас на наступний день.
>> Так що без подальших церемоній, прийняти краю від цієї бесіди,
причина цуценята ВГОРУ просто, щоб зламати лід на мить.
І, на жаль, вони всі сплять, але те, що мало статися тут
був кожен повинен був в трепет і вид відпочинку
після цього дуже важкої розмови.
Але, мабуть, я поклав цуценята спати.
Але якщо ви йдете в CS50-х сайт слеш цуценята,
ви можете дивитися їх протягом усього дня.
Зокрема, може бути, 2:00, або 3:00, або 4:00 ранку ночами
щоб побачити невелике полегшення стресу є.
Так що це слеш цуценят.
Добре.
Хіба це не весело?
ДОБРЕ.
Отже, повернемося до деяких комп'ютері наука, якщо можна.
>> Так, нагадаємо, що минулого разу ми почали шукаю не тільки на основний, який
був функція за замовчуванням, то при зелений прапор натиснув еквівалентні,
але ми також почали стисло писати деякі з наших власних функцій.
І не досі жодна з цих функцій були особливо великими або м'ясисті.
Ви отримаєте в ті більше Функції, ймовірно, Р встановити 2, Р набір 3,
безумовно, Р набір 4 і вперед.
Зараз більшість ваших програм, якщо не всі з них, звичайно, для P
набір 1 може бути зроблено повністю в основний.
Якщо ваша програма тільки п`ять ліній, 10 ліній,
довго навіть 20 рядків, прекрасно Розумно писати
все в основний і не більше чим ускладнюють код, але те, що ми робимо сьогодні
і далі намагається також ввести деякі хороші методи проектування
так що, як ваш код стає більш складною і, як проблеми
Ви хочете, щоб вирішити отримати складніше і більш цікавим вас є, начебто,
інструменти в панелі інструментів, з якою , Для розробки рішень в них.
>> Отже, давайте поглянемо назад на ця програма від мого останній тиждень, що
був нульовий функції точка С і зауважити, що, просто кажучи,
це виглядає з двома Функції, основний і ім'я друк.
І згадуючи або, можливо, зворотний інжиніринг сьогодні,
те, що було мотивації для впровадження функція в рядку 28 називається,
Назва печатка?
Або те, що це було прикладом у Умови принципом або винос,
якщо ви б.
Деякі шуми.
Що?
>> Та так Функціональна декомпозиція це свого роду фантазії спосіб сказати,
розкласти вашу програму на складові частини
а потім використовувати ті частини зібрати ціле.
Так, що теж тільки частково з рот вже
але це, мабуть, навіть Кращим прикладом чогось
просто називається абстракцією.
Вірно?
Абстракція буде один з повторюваних тим в CS50
а також комп'ютерні науки в більш загальному, так як це
техніка, з якою ви можете вирішити проблеми більш ефективно, тому що ви
можете написати вирішення більш інтуїтивно і таким чином, що ваги
і зрозуміло, іншими людьми.
Що я маю на увазі, що?
>> Так, можливо, це набагато більш читабельним подивитися на програми, як це,
супер короткі, хоча він є.
Коли ви бачите в рядку 22, що є функція називається, ім'я друк.
Одна Це ім'я говорить, що він робить.
Ця функція, мабуть займає вхід між її круглих дужках,
і, мабуть, щось робить, імовірно виводить ім'я.
І так, хоча ми може мати зовсім
зробив те, що ми зробили тиждень тому, який був просто взяти цей фактичний рядок коду,
позбутися цього, і отримати позбутися цього всі разом,
ми начебто абстрагуються поняття друку ім'я.
Я не хвилює, якщо ви використовуєте друку розморожування.
Мене не хвилює, якщо у вас є відсотків S і зворотний слеш Н. Вони
неймовірно таємні відомості.
Те, що я дбаю про якість програміст друку ім'я.
І так, що кращий спосіб зробити це ніж шляхом виклику функції, ім'я печатка?
І так, що було одним з мотивів для цього щось на зразок цього.
Створення код більш читабельним, більш багаторазові, а також самостійно описовий характер.
Тепер, давайте поглянемо в іншому прикладі,
який був функції один, який ми мали тут.
>> Так, цього разу, мабуть, навіть більше, переконливим, оскільки, в цьому випадку,
Я не хочу, щоб просто отримати Int.
Я хочу, щоб отримати позитивний Int.
І виходить, щоб отримати позитивний Int ви повинні зробити купу біганиною.
Вірно?
Це не просто одна лінія подзвонити, як ім'я печатка була,
які, за загальним визнанням менш переконливими.
>> Щоб отримати позитивний Int, logically-- дозвольте мені прокручувати вниз, щоб приховати це.
Що ви повинні зробити?
Як і всі інструментів, які ми Тобто на даний момент є
речі, як друк DEF від стандартних Бібліотека, а також з бібліотеки CS50
у нас є Отримати Int, Float і отримати, Отримати Довгий, довгий, отримати рядок,
але тільки один, Герман, прямо зараз Отримати Int.
Таким чином, якщо тільки у вас є інструмент в ящику для інструментів, це отримати Int,
як ми можемо йти про реалізацію його, щоб отримати позитивний Int?
>> АУДИТОРІЯ: Створіть журнал і перевірити на вхідний, що вони дали
був позитивним чи ні.
>> СПІКЕР 1: Ідеальний.
Точно.
Іншим інструментом ми маємо в нашому інструментів від тижня або два назад
це тільки різновидів циклів.
І так, так, якщо ми використовуємо час цикл, або зробити в той час циклу, або передня
цикл ми могли б піти з будь-яким з тих, в тій чи іншій формі.
Ми можемо реалізувати поняття Get позитивне INT тільки за допомогою Get Int,
а потім просто тримати називаючи його знову і тримати приставати користувача
поки він чи вона насправді дає нам те, що ми хочемо.
>> І ось тепер, це абстракція процесу
отримання позитивного Int у функції під назвою
Отримати Позитивний Int трохи більше переконливим, оскільки дивитися на це.
Це як 10 плюс рядків коду, що
беруть участь в отриманні позитивного Int, і я дійсно не хвилює, як ви це робите.
Все, що я все одно це ти можете зробити це, і тому я маю
приховані всі ці деталі за Функція називається Отримати Позитивний INT, що
дійсно, має цю робити, поки петлі.
>> І побачити минулого тижня синтаксису є, але це тільки заявляє N,
і виводить Інструкція для користувача.
Він закликає Отримати Int, а потім він перевіряє ця умова знову і знову,
і не знову, поки користувач взаємодіє.
>> Так що тепер, декілька перевірок на адекватність.
Для тих, хто, можливо, знайомі з якоюсь програмування,
чому N заявив, чому я створюю N поза зробити в той час цикл?
Чому це на лінії 29, а не на 33, як, наприклад.
>> АУДИТОРІЯ: Тому що, коли ви оголосити його поза, це свого роду
з більш, ніж більше scope--
>> СПІКЕР 1: Добре.
>> АУДИТОРІЯ: --І якщо ви оголосите це всередині циклу, [нерозбірливо]
тому що він не знає про це.
СПІКЕР 1: Точно.
Якщо я можу simplify-- це питання з області видимості.
І сфера належить до контексту в якої змінна існує або може використовуватися.
І приємно правило тут є те, що як правило, при оголошенні або зареєструватися
змінна Ви можете тільки використовувати його всередині з найближчих охоплює фігурні дужки.
Отже, що ж це означає?
Якщо я, замість того, щоб, скасувати це і йти з те, що відчуває себе трохи простіше.
Вірно?
>> Рядок 32 виглядає просто чистіше мене зараз.
Я роблю і те й інше один раз і потім присвоєння
права рука до лівої руки.
Проблема в даний час базується на що визначення обсягу
в тому, що N може бути використаний в лінії 31 і 32 всередині цього циклу,
але де за цим визначенням він не може бути використаний?
Відповідно що?
Так.
>> АУДИТОРІЯ: 35.
>> СПІКЕР 1: 35.
Безумовно не 35.
А також де ще?
АУДИТОРІЯ: 34.
СПІКЕР 1: Навіть 34 проблематичним, тому що це
поза фігурних дужках.
І так насправді, давайте подивимося, що відбувається.
Вірно?
Це може здатися трохи інтуїтивно або не можуть,
але давайте подивимося, що компілятор повинен сказати, коли
ми йдемо в папку вихідного сьогодні.
Зробіть одну функцію.
Боже мій.
Ну, я, нарешті, закінчив що, до речі.
Добре.
І те, що проблема тут?
Дуже таємницею дивитися.
Але ось те, що я typed-- зробити одну функцію.
Ось те, що робить індукованої який насправді
за допомогою компілятора брязкіт з деякими з цих прапорів
що ми побачимо знову незабаром.
І знову, завжди виглядають на першої помилки,
тому що це, можливо, тільки каскадний безглуздо вплив на інших лініях.
>> Так що ж це означає, що проблема у функції 1.C.
Саме на лінії 32.
І це в стовпці, або характеру, 13.
Тому, коли ваш текстовий редактор, який може допомогти вам визначити, де проблема.
Так що, якщо я прокручування вгору, що лінія 32?
Це дійсно цей що вже виділені
Право here-- використовувався змінна п.
Але це не використовувався.
Я використовую його.
Але компілятора плутати, бо вона існує тільки всередині цієї рамки.
І тому я не можу використовувати його тут.
Я не можу використовувати його тут.
І компілятор, отже, навіть не хвилює, що я намагаюся.
Це, здається, не буде використовуватися в межах своєї фактичної області.
>> Таким чином, ми можемо розширити сферу роблячи саме те, що ми почали with-- Int N.
І хоча це не виглядати елегантно, мабуть,
і ми беремо додаткову рядок тут, зараз він знаходиться в рамках скрізь.
Отже, давайте спробуємо ще раз.
Так що функцію одного.
Ніцца.
І тепер, якщо я, якщо я запускаю функцію Один з них, давайте його негативне 10,
негативне 1, 0, 1, і це дійсно працює.
>> Так що ще одне рішення тут.
Знаєш, що?
Що робити, якщо я дійсно борюся з цим?
Я не знаю, де п передбачається йти.
Знаєш, що?
Я просто хочу, щоб покласти його все спосіб вгорі мого файлу тут.
Що б це зробити, як ви думаєте?
Так?
>> АУДИТОРІЯ: [нерозбірливо].
СПІКЕР 1: Так.
Так що я зробив це глобальна, так сказати.
Якщо у вас є змінна, що це за межами всі ваші функції, які дозволено,
і код слід компілювати і п тепер буде доступна не тільки в Get
позитивне INT, але і в main-- які трохи тривожно, бо є
вже в п Основна, так ще на що в просто moment--
але це буде вважатися поганий дизайн.
Добре.
Якщо ви змушені вдаватися до щось на зразок, ну, я буду
просто покласти його тут, тому що код здається компілювати
як правило, не краща практика.
Швидше ви хочете вибрати найвужчий можливий масштаб
для змінних, який означатиме, відбувається з нашої початкової конструкції, яка
прямо тут.
>> Тепер, як в сторону, якщо ти є тут тотожне імені змінної,
спосіб впорається з this-- хоча це не буде відбуватися занадто often--
є те, що це як і раніше прекрасно тут.
Але це визначення відповідно п 22 буде тінь глобальний один.
Так що це один буде працювати в Основний і глобальний
насправді застосовується, коли ви знаходитесь в отримати позитивний INT Але про це
іншим разом, але тільки для тих, кому цікаво.
>> Коротше кажучи, ми фіксуємо це тут.
Тепер давайте дражнити один від одного два інші частини перш ніж ми розглянемо в одній останньому рядку коду
у цій програмі.
Отримати позитивний Int.
На лівій стороні його слово є слово INT.
Що це означає ви думаєте?
Дотепер ми в основному бачили недійсними.
Так?
>> АУДИТОРІЯ: Це тип змінна, ви питаєте.
>> СПІКЕР 1: Так, це тип, дозвольте мені не сказати, змінна, але тип значення
що я прошу повернутися до.
І справді, що це Інтуїтивно зрозумілий тут, з надією.
Вірно?
Якщо ви хочете отримати позитивне INT, що це ви
хочу function-- як наш добровольці з останнього тижня
передати вам назад шматок паперу з міжнар на ньому?
І так ми вказали, що так званий тип повертається цією функцією
це отримати позитивний Int.
Якщо ми не хочемо, щоб його нічого повертати, ви говорите, недійсними.
Якщо ви хочете, щоб повернутися рядок, ви говорите рядок.
Якщо ви хочете, щоб повернутися поплавок, ви говорите, поплавок.
Але тільки той, який застосовується тут логічно, тому що я використовую GET Int,
хоча я обмежуючи його позитивні значення, є повернути Int.
>> Так, навпаки, що це означає що є порожнеча в дужках?
Що дужки як правило, визначають?
Так?
>> АУДИТОРІЯ: Це означає, що функція-х насправді не отримати його.
>> СПІКЕР 1: Це означає, що функція-х насправді не отримати те, що?
>> АУДИТОРІЯ: вхід.
>> СПІКЕР 1: вхід, взагалі.
Так дійсно, якщо дужка Тут ви вказуєте недійсними,
це просто означає, я не хочу ніякої вхід.
Я розберуся з проблемою сам.
І справді, ви не повинні розповісти отримати позитивний INT-небудь.
Ви просто говорите, отримати позитивний Int, і що Функція буде йти і робити свою справу.
>> Але там було небагато трюк У мене грав тут весь цей час
щоб переконатися, що цей код компілюється.
Зверніть увагу, що int-- отримати позитивний INT void-- на лінії 27.
Але з якоїсь причини, здавалося б, дивний це також тут, на лінії 16.
І тільки для хорошої заходом Я повторю це так абсолютно ідентичні.
І я сказав прототип з трохи один рядок коментар.
Що станеться, якщо я видалю, що і Тепер запустіть зробити функція 1, введіть.
Упс.
Почекай хвилинку.
Де мій вкладка?
А?
У режимі очікування.
Зробити функцію 1.
Там ми йдемо.
ДОБРЕ.
Якби не врятувало його належним чином.
Так, я думаю, що це трохи помилка тут, де я не
бачачи ім'я вкладки в даний час.
Так що тут відбувається?
Неявне оголошення функції отримати позитивний Int є недійсним в C99.
Так оману знову.
Так що це свідчить про?
Ну, виходить, що З досить безглуздо.
Ну, це програмування мову, або, скоріше, компілятор.
Це знає тільки те, що у вас є вчив його, і це тільки
знатиме, щось якщо ви вчили раніше.
Іншими словами, в Основний на даний момент, я
намагається викликати функцію називається отримати позитивний Int.
Але компілятор буде зауважити, що отримати позитивну Int
не існує доти, лінії 26.
І так, що компілятор робить це просто Помилки, як тільки він потрапляє в лінію 17,
кажучи неявне оголошення з отримувати позитивну Int, який
це просто химерний спосіб сказати, я не знаю, що отримати позитивне INT ще.
>> Інші мови, такі як Java і Python і Рубі може дивитися вперед.
З цього не робить.
І так як ми фіксуємо це один з двох способів.
Або один, якщо проблема в тому, що отримати позитивне INT не бачив,
Ну, дозвольте мені просто перемістити його на вершину.
Це було виправити цю проблему.
Але в цілому, це вважається краще техніка
щоб поставити основну функцію по крайней топ, так що людської читання коду
знає, що робить програма, бо головний не похована все
спосіб внизу або в середині.
Це на самому верху.
Так що не відчуваю ідеальним.
І ви можете насправді отримати в ситуації, коли
Якщо виклики однієї функції інший, що викликає іншу,
чи не ви можете отримати на питання де ні може піти вище іншої, логічно.
Це просто не можливо.
>> І так як на роботу навколо цього просто взяти
підпис функції, що в speak-- перша лінія, де це declared--
і просто скопіювати, вставити його на зверху, а не з кучерявими braces--
просто крапкою з комою.
Це як маленький натяк що це в майбутньому.
І справді, все це час, коли ми бачили речі, як стандартний io.h
і cs50.h, аналогічно, в ті точка ч файли є інші прототипи.
І ми побачимо, що незабаром.
>> Коротше кажучи, якщо у вас є програма у файлі з безліччю функцій
Крім основного, ви майже завжди хочуть оголосити їх
тільки шляхом їхній перший лінія, крапки з комою,
на самому початку файлу.
Це було багато за один раз.
Які-небудь питання?
Добре.
>> Отже, давайте рухатися далі, то щось на зразок кашлю.
Ох.
Як фітинга.
Добре.
Кашель.
Так от з здійснення програми
ми зробили інший день в Подряпин, що дуже просто тільки
говорить кашель, кашель, кашель.
Добре.
І хтось сказав кілька днів тому, що є
спосіб очищення цей код вже.
Все в порядку?
Як тільки ви копіюєте і вставки, ймовірно, поганий дизайн.
Принаймні, як тільки ми отримаємо чотири або п'ять або 20 кашляє, він відчуває себе поганою практикою.
Ми просто тримати копію, вставку.
Що очевидне рішення очищенням цю програму вгору?
>> АУДИТОРІЯ: Петля.
>> СПІКЕР 1: Так.
Так що використовуйте петлю.
І ми можемо використовувати для циклу, в той час як цикл, будь-яку кількість підходів.
І справді, ось що ми робимо у версії одного тут.
Я замість переписати його у версії один з cough.c
бути просто кашель протягом петлі.
Гаразд, але є можливість тепер роду початку
на це трохи більше як дизайн урок, який ми вчили хвилину тому,
що this-- припустити, що я хотів створити функцію, звану кашель,
давайте розглянемо на мить те, що він буде виглядати.
Так що, якщо я хочу що- кашляти, я просто потрібно
використовувати печатку п усередині функції.
І дійсно я.
І справді, все це Час, в будь-який час ви
друк щось екран, програміст
назвали б, що побічний ефект.
Це не я передачі тому хтось значення.
Це мені приймати якісь дії що може бути візуально очевидно.
Але ця функція кашель, він повертає нічого на основі його першої лінії?
Ні, тому що тип значення є недійсним, що просто означає,
це не вручати мені нічого натомість.
Це може бути щось робити візуально, але це не вручати мені
резервне папірець як минулого тижня.
>> Чи потрібно будь-який вхід?
Немає.
І так це порожнеча тут.
Так що це теж свого роду надмірно інженерних цю проблему.
Вірно?
Я зробив програму більш комплекс, кілька рядків коду,
Я не зробив це будь більш функціональним, але це
буде сходинкою, можливо, для більш широкої
Контекст більш складний код.
Але те, що про це?
Що я done-- просто глянувши на це, не дивлячись на коментар
на самому верху file-- Що Я принципово зробити тут з моїм кашлем
Реалізація, відрізняється?
Так, в спині?
>> АУДИТОРІЯ: Зробіть так, ви можете є персонаж вимкнути.
СПІКЕР 1: Так.
Таким чином, це відчуває себе частково добре.
Вірно?
Це як додавання до вашого функцію програма або ваша функція, в цьому випадку.
Він як і раніше нічого не повертає.
Це може мати візуальний побічний ефект, бо це дзвонить друку п.
Але тепер я параметризованим функція, яка
означає, що я вказано прийняті вхід типу Int і називають його п,
але я міг би назвати його що-небудь я хочу.
Насправді, це може бути просто раз буде ще більш явним.
І тоді я міг би змінити це тут.
Але справа в тому, що це, як я створити функцію, яка приймає введення.
І якщо пригадати, перегортати через, можливо, в одному онлайн
з наскрізні, то Четвертий і останній приклад кашель,
Ви помітите, тут я узагальнив мій код further-- роду абстрактну
це далі.
Як кашлю та чхання, обидва о, як сказати щось робить або
свого роду звуку.
Зберегти б відповідні подряпин блок.
І так, що я зробив в цій версії, які ми можемо просто погляд на,
є кашель, як кажуть, [кашляє], кашель, а тим часом, чхання
як кажуть, [Achoo].
І тому я узагальнив реалізація тих
зараз реалізації це загальна функція,
кажуть, що цікаво для сьогоднішніх цілей
тільки тому, що він як і раніше не має повертається типу.
Але скільки входів вона є?
АУДИТОРІЯ: Два.
СПІКЕР 1: Два.
І тому, якщо ви хочете, щоб прийняти в двох аргументів,
просто розділіть їх комою.
І якщо ви хочете, щоб потім виклику цієї функції,
Зверніть увагу, що тільки зателефонувати скажімо, цитата, кінець цитати,
для першого аргументу, загальна п, для другого аргументу.
Отже, ще раз, ми просто повинні тепер будівельні блоки, так що ми дійсно можемо
здійснити деякі з наших власних функцій.
Добре.
Будь-які питання по їх?
>> Так що тепер давайте відігніть шар, якщо так.
І мета, в кінцевому рахунку це наступного тижня проблема набір
буде на cryptogrophy-- мистецтво дертися інформацію.
І, зокрема, інформація буде у вас зашифрувати або розшифрувати
буде текст.
І так, що начебто запрошення питання сьогодні як добре,
що відбувається під капотом з текстом за ASCII від нульової тижня,
і як ми можемо насправді почати маніпулювати?
Так ось ім'я Zamyla в.
І в тексті, які можуть бути введені в, як функції Get струн.
І починаючи з цього моменту, коли ви бачите рядок, як this-- Z-A-M-Y-L-A--
почати думати про нього, як ніби кожен з тих персонажів у коробці його
самостійно.
І справді, через тиждень або близько того це Час, кожен з цих коробок
представлятиме дуже конкретно блок memory-- укус пам'яті.
Таким чином, кожен з цих листів, У кінцевому рахунку, буде представляти 8 біт.
І ми дійсно побачити, що відбувається на під капотом в моєму комп'ютері.
>> Але для мало просто подивитися на Zamyla
через цю лінзу, причому кожен з ці листи в його власній коробці.
І досить добре в C ми можемо доступу до кожного з цих ящиків безпосередньо.
Так що якщо ви хочете одержати перший Лист її ім'я, супер просто на C.
Якщо ви хочете, щоб отримати останній Лист, супер просто, як добре
з шматком нового синтаксису.
>> Так що я збираюся йти вперед в CS50 IDE і відкрити рядок нульової точки C.
І в цьому прикладі тут є пара нових речей відбувається.
Отже, спочатку в рядку 19, ми бачили це before-- отримати рядок.
Так як для швидкої перевірки осудності, якщо хтось може запропонувати до словесно
Пояснення непрофесіонала з те, що відбувається у рядку 19.
Як тільки перевести це на Англійська, що сусід не CS50
могли б зрозуміти.
Так.
>> АУДИТОРІЯ: Є користувальницький вхід А рядок і зберігати його в змінній с.
СПІКЕР 1: Добре.
Користувач ввів рядок і зберігати його в змінній с.
Це чудово.
Так що на правій руці сторона, ми називаємо Get рядок.
Це повертає значення що не отримав призначений
від правого боку до лівої рукой- сторона у змінній під назвою S Те
призначений для зберігання рядка.
Точно.
>> Так що тепер лінії 22, за коментар у рядку 21,
Очевидно, друкує цей рядок один символ в рядку.
Але як?
Отже, перш за все, ми ініціалізіруем я 0.
А потім, як нам дістатися до кінець імені Zamyla в?
Ну, врешті Ім'я Zamyla, я міг
вручну ввести останнього символу її ім'я так чи інакше, або число його.
Вірно?
Якщо ми повернемося here-- Z-А-М-L-- У-Л-A--, щоб я міг ввести.
Що індекс Останній лист Zamyla в?
Якщо це 0-- говорити як programmer-- 0, 1, 2, 3, 4, 5,
Я heard-- насправді так, останню літеру за назвою Zamyla є шостим,
але якщо рахувати з 0, це буде номер 5.
Так що майте це на увазі.
>> Виявляється, є функція в С називається STRLEN, і назад в день
і донині все ще, багато програмістів
вибрати синхронізувати імена для своїх Функції, які звучать як слова
вони намагаються сказати.
Так StrLen є довжина рядка.
І так, що б довжина рядка S повернутися, коли Zamyla є входом?
>> АУДИТОРІЯ: П'ять.
>> СПІКЕР 1: Z-А-М-У-Л. Шість.
Вірно?
Що довжина імені Zamyla в?
Вірно?
І тільки в реальності, шість букв.
Вірно?
І так що ж це означає для нашого циклу?
Ми збираємося, щоб перейти від 0 до шести, який
збирається дати нам п'ять ітерацій.
Що ми робимо на кожній ітерації?
Ну, відсотків С, хтось здогадалися інший день,
означає заповнювач для чого?
>> АУДИТОРІЯ: Чар.
СПІКЕР 1: Просто символ.
Таким чином, один character-- НЕ декілька символів, як рядок.
А потім ось нова лінія що у нас є роздруківки.
А потім ось новий синтаксис.
Якщо ви хочете, щоб роздрукувати я-й символ в рядку S, так би мовити,
Ви можете просто сказати, що найменування рядка S,
а потім відкрийте квадратна дужка, і потім закрив квадратну дужку, з I
середина.
І це частково добре, що це вид виглядає як квадрат
так само, як квадрати, в яких Zamyla-х існують символи на цьому зображенні немає.
>> Так що, якщо я насправді запустити цю Тепер, давайте подивимося, що відбувається.
Зробити рядок 0 точка слеш рядок 0, і тоді я
збирається ввести ім'я Zamyla в.
Там немає швидке, тому що я не використовувати печатку п, але це нормально.
Я просто знаю, що робити.
І справді, він друкує Ім'я Zamyla, в одній на рядку.
>> Тепер давайте трохи безрозсудним.
Припустимо, що я не знав, про StrLen і я вважав ,,
Все в порядку, ніхто не збирається мати назвати більше, ніж, як 50 символів.
Давайте йти вперед і перекомпілювати це і запустіть його, а потім введіть у Zamyla
знову.
Логічно, що є Програма намагатиметься надрукувати?
Z-А-М-У-Л-А, то, як 45 невідомі байт пам'яті.
І справді, ми повернемося до цієї ідеї пам'яті.
Але тільки логічно, якщо Ім'я Zamyla є так довго,
відповідно із зображенням тут, що ми говоримо,
це тримати друк, друк тримати, тримати друк, друк тримати, тримати друк,
весь шлях до 50 символу, які хто знає, що станеться.
Отже, давайте насправді глянути.
Давайте ввести Zamyla.
Цікаво.
Нам пощастило.
Просто ціла купа прогалин.
Ох.
Там один персонаж в стилі фанк.
Це виглядає ніби як дивне запитання помітити там, але є ім'я Zamyla в.
Давайте дійсно безрозсудним.
Як щодо того, роздрукувати 500 блоки в невідомість?
Давайте йти вперед і зробити це а потім повторно запустити.
І давайте повний екран це, тому що ми повинні бачити більше простору.
Zamyla.
Знову пощастило.
>> Чи можемо ми отримати більш безрозсудним?
Давайте більш безрозсудним.
50000 символів.
Це, звичайно, не найкраща ідея.
Добре.
Зробити рядок 0.
Це буде наш останній демо.
Zamyla.
Тьху.
ДОБРЕ.
Так моя пам'ять дійсно порожній прямо зараз, яка насправді свого роду зручно.
Те, що я намагаюся отримати всі права, метою яких.
А тепер я просто хочу, щоб отримати безрозсудним.
500000.
Make-- давайте повноекранному його.
Enter.
Zamyla.
Там ми йдемо.
Я поняття не маю, що це є, але це звучить погано.
Добре.
І справді, найближчим часом, якщо ви серед небагатьох щасливчиків в робочий час
і в задачі встановити один, вам цілком може зіткнутися з цим.
Сегментація вина насправді мають чітко певний сенс.
Це означає, якась помилка відносяться до сегменту пам'яті.
І з точки зору непрофесіонала, це означає, ми торкнулися
memory-- ми використовували оперативну пам'ять в моєму комп'ютері що я не повинен був доступ.
І ось що і потужний і теж небезпечно
о С, що ви дійсно є необмежений доступ
в обсязі пам'яті вашої програми або байт або ОЗУ, більш конкретно.
>> Тому, навіть якщо ім'я Zamyla в має довжину всього шість символів,
Я все ще можу піти куди-небудь в пам'яті я хочу.
І, як в сторону, якщо у Вас є коли-небудь читав деякі статті
протягом багатьох років про деякі сервер або якась програма
на злом або зламаний, це скористалися чимось
називається переповнення буфера експлойт, який ми будемо насправді
поговорити протягом декількох тижнів, це як правило, з посиланням на те обманюючи
комп'ютер буде добре в за межі пам'яті
що вона повинна мати, і знайти щось соковиті
що memory-- пароль, мабуть, спосіб
обходу деякий серійний номер перевірити, чи просто взагалі в змозі
щоб обдурити комп'ютер виконує код, який не був призначений.
Але давайте повернемося до Реальність на секунду
де ця програма була реалізований з STRLEN,
і ввести одне тут.
Що нового у цих трьох верхніх рядках?
>> Так рядок точка ч.
Виявляється є ця бібліотека називається Рядок точка Н, або Строка Бібліотека,
якого файл заголовка, так би мовити, це рядок точка год, що дає мені
Доступ до цієї функції STRLEN.
Якщо я опускаю, що компілятор збирається кричати на мене в якійсь формі.
Але ви знаєте, що?
Тепер давайте дійсно нюансів.
У лінії 22, щось на зразок з inefficient-- погано розроблені,
arguably-- про цього рядка коду.
Згадайте, як для циклу реалізуються
і які кроки повториться і знову і again-- ініціалізації,
стан, код, який запускається на виконання, то прирощення
або зміна, той стан, потім код, то зміна, то
стан, потім код, то зміна, і так далі.
Так що може бути трохи занепокоєння або погано зроблено тут?
Так, у синьому.
АУДИТОРІЯ: STRLEN є називається багато, багато разів.
СПІКЕР 1: Так.
Так називається StrLen багато разів, але те, що
Довжина імені Zamyla років Вперше цикл виконується?
>> АУДИТОРІЯ: Шість.
>> СПІКЕР 1: Шість.
Ну, те, що довжина її імені вдруге код виконується?
>> АУДИТОРІЯ: Шість.
>> СПІКЕР 1: Добре.
Він як і раніше шість.
Вірно?
Ім'я Zarla має не змінилося, навіть якщо я шукаю
тільки на частину букв в її імені.
І тому той факт, що я ефективно Ставлячи це питання, що
довжина Zamyla, що довжина з Zamyla, що довжина Zamyla,
шість окремих рази, або сьомій навіть, просто нерозумно,
бо це незмінна, що відповіддю.
І так, що я міг насправді зробити this-- в рядку одного
У мене є трохи поліпшену версію тут.
There-- whoops-- рядок дві я є незначно кращий варіант, в якому
Я this--, а не просто ініціалізації I 0, я також з комою
оголосити змінну з ім'ям другого N-- я не повинен сказати Int знову.
Я не повинен, насправді.
Але я кажу, п.
І тоді я ініціалізувати н до StrLen п, так що тепер
скільки разів STRLEN отримати виконаний в загальній складності?
Тільки один раз.
І так це те, що ми маємо на увазі раніше про кращий дизайн.
Насправді, як тільки ваш код правильний, йти вперед і думати через,
я, використовуючи як мало пам'яті або кілька секунд
або мілісекунди часу комп'ютера як можна реалізувати деякі проблеми?
І я збираюся прокрутки і лише згадати
що є це згадка нуль в цій версії,
але ми повернемося до того, що незабаром.
Тому що зараз, давайте поглянемо на, де це відбувається, щоб привести нас.
Таким чином, одна, виходить, що тепер у нас є можливість
подивитися на окремі символи, ми можемо використовувати щось
від тижня 0, що було дуже заплутаними, а зразок нецікаво в той час.
Але зараз, і особливо, коли ми отримати в криптографії на тиждень,
це буде дуже потужним.
Виявляється, що з деякими Інтс і плаває Data types--
і символи і рядки і другий things-- деякі з них
може бути дуже легко перетворюється в інше.
>> Наприклад, коли ми говорили про ASCII деякий час ago-- ось
заголовні букви А через М, крапка, крапка,
dot-- ми сказали, що є відображення між цими літерами і цифрами.
І справді, це справедливо для малих літер, а також.
Рядкові а є 97, а є столицею 65.
І є ряд в ASCII, який знаходиться всього це відображення
Система для всіх тих інших листах.
Отже, що ж це означає?
Ну, я збираюся йти вперед і відкрити до реального швидко щось під назвою
ASCII 0, більшість з яких є коментарів.
І знову в Інтернеті ви завжди можете погляд через коментарі.
>> І погляньте, що це буде робити.
Так він отримав головну функцію.
Я жорстко число тільки для зараз, тому що я знаю, що я роблю.
Я знаю, що я хочу бачити тут.
І я ініціалізації I 65.
І я розраховую на через 26 Всього літери.
І що я буду роздрукувати один рядок, в той час
якщо ви можете інтерпретувати це виділений лінію?
Що друкується?
Так.
>> АУДИТОРІЯ: Ви збираєтеся роздрукувати лист,
відповідає карті Лист значення і ціле значення?
СПІКЕР 1: Точно.
Я збираюся надрукувати лист відповідне цілого значень, що
і навпаки, таким чином.
Ну це, хтось сказав раніше, це просто заповнювач для гольця.
Він як і раніше є.
Це, звичайно, є заповнювачем Для того int-- НЕ нова лінія.
А тепер зверніть увагу, мій перший значення, Я підключення для цього заповнювача
не тільки І. я кажу, в дужках, символ я,
які в дужках символ є говорить компілятор, лікування I
а не як те, що вона є, що число.
Лікувати його в якості фактичного характеру.
У той час як друге значення я підключити in-- я-- повинні бути просто число.
>> Так що, якщо я скомпілювати цей program-- так що це зробити ASCII 0,
точка слеш ASCII 0-- Я просто Ця маленька діаграма, яка
показує мені все можливе відображення без того, щоб думати його
через або з'ясувати це самостійно.
І я також роздруківки, помічати малі літери,
бо через кілька рядків, я друкувати цю відображення
як добре, що це просто сказати, що як тільки ви розумієте
що відбувається під капот, ви можете
автоматично конвертувати туди і назад.
І справді, якщо кожен з вас коли-небудь робив це в початковій школі
або чув про когось міфічно приймаючи до відома
і передачі його в його або її подруга в класі,
але ви платні Листи, як стає B,
і Б стає C, або щось складніше, ніж, що, мовляв,
як би ви йти про реалізації, що в дитинстві?
Ну, ви просто знаєте, вид А стає B, B стає C,
але математично, що було, що дитина робить?
Що ви додаючи до кожної букви?
Ефективно, 1.
>> Тому, коли ви зміните А в пункт Б, це ніби як міняється від 65 до 66,
який математично означає просто додайте 1.
І тому, якщо ви були реалізувати що мало спосіб обману
для вчителя в коді, ви може робити те, що тільки
додавши одну букву разом.
Тому, перш ніж довго, ми побачите, як ми
може скористатися тим, що насправді дійсно боротьба і розшифровувати
Інформація.
У той же час, відомо, що ми почали ввести пару інших бібліотек
here-- рядок один сьогодні.
І дуже корисний сайт сподіваюся, ви знайдете
називається reference.cs50.net, що викладацький склад поставили разом,
так що якщо ви хочете, щоб подивитися, як STRLEN робіт,
Ви можете почати друкувати ім'я функції,
натисніть STRLEN там, а потім менш комфортно пояснення
з'являтиметься.
Або, якщо ви хочете, щоб посадова особа Linux на основі пояснення,
ви можете натиснути більш зручні у правому верхньому кутку, і це
представить ту ж інформацію, але в більш складних умовах.
Це корисно ресурс насправді знаю, що все робить.
>> Наступного разу ми збираємося поглянути на Ovaltine
і більше, і представити себе у світі криптографії.
До цього, ми побачимо, Ви в кінці цього тижня.
А тепер, Колтон Огден.
Побачимося в середу.
>> [Грає музика]
>> СПІКЕР 1: Що [Біп] ти робиш?
>> СПІКЕР 1: Я їв свій десерт?
Як ви їсте його?
З вашими руками?
>> [Грає музика]