>> Виступаючий 1: Добре.
З поверненням.
Це тиждень Два CS50, і у нас є до цих пір використовують функції, але
значною мірою взяв їх як належне.
Ми використовували Е, який має Побічний ефект друку
речі на екрані.
Ми використовували отримати-INT, отримати плавати.
>> Але що, якщо ви насправді хочете створити свої власні функції, а деякі з
Ви, можливо, вже почали зробити для Проблема Встановіть один, хоча
не є обов'язковим?
Ну, давайте йти вперед і повернутися до цього Проблема тільки запросити у користувача
їх імена і друку щось на екрані, але спробуйте для виключення деяких
спільності, що ми бачили в нашому коді досі.
Отже, що я маю на увазі наступне.
>> Я збираюся піти далі і створити Нова програма, просто зателефонуйте
це hello.c як звичайно.
Я збираюся йти вперед і дати собі включають в себе стандартні io.h на самому верху.
Я збираюся також дати собі превентивно CS50 бібліотеку так, щоб
Я не отримую кричав на компілятор.
І тепер я збираюся йти вперед і оголосити Інтернешнл, основним, недійсними.
>> А потім тут, це те, де я хочу почати аутсорсинг функціональність
деякі інші функції, що я сам збираюся написати, але це не
В даний час існують.
Наприклад, припустимо, що я хотів написати функцію, яка дозволяє мені
роздрукувати Привіт, кома, і Потім деякий ім'я користувача.
Замість того, щоб продовжувати робити Е Здравствуйте,% S, не було б непогано, якби
було просто функція називається Е не для друку, але ім'я?
>> Отже, іншими словами, я хочу, щоб мати можливість написати програму, яка робить трохи
щось на зразок цього.
По-перше, я хочу сказати Е вашої ім'я, тим самим пропонуючи користувачеві
дайте мені його або її ім'я, а потім я збирається використовувати знайомі з рядок
оголосити рядок.
Дайте мені змінну типу рядок, називаємо це з, і зберігати в тому, що
Результат виклику отримати рядок.
Але тепер в минулі тижні, я б Кілька утомливо зроблено привіт,% S / N.
>> А іншими словами, ми бачили в цьому Наприклад купу разів, і це
тривіальний приклад, тому що є тільки одна рядок коду так що це дійсно не
велика справа для продовжуйте вводити знову.
Але припустимо, що цей рядок коду насправді стають в тягар, і
це не один рядок коду, але це 10 рядків коду пару тижнів з цього моменту,
А ти просто втомився копіювання і вставки або
передруку той же код.
Не було б непогано, а не робити Е привіт,% S і т. д.,
не було б добре, якби були просто Функція називається друкованими літерами, що
приймає аргумент -
іншими словами, він приймає вхід -
а потім з комою.
Так, що функції, чи не так б добре, якщо, які існували?
Тоді б мені не доведеться турбуватися про що Е є, який% з і все
ці складності, які Не все, що цікаво.
Вони корисні.
>> Так написом назви, на жаль, не було винайшов близько 40 з гаком років тому.
Ніхто не думав, щоб написати її.
Але в цьому вся принадність наявності Мова програмування, як і в
Подряпини можна визначити користувальницькі блоки, так що У С і найбільш будь-якій мові, чи не так
визначити свою власну функціональність, може Ви можете визначити власні функції.
Тому, навіть якщо ми отримуємо за основними автоматично безкоштовно, ми можемо оголосити
наші власні функції.
>> Так що я збираюся зробити кілька номерів тут нагорі, і я збираюся оголосити моє
власні функції, яка буде виглядати трохи дивним спочатку, але ми приїдемо
повернутися до цього найближчим часом.
Я збираюся сказати, порожнечу, тим самим Вказує, що функція робить
щось, має побічний ефект, але не вертає мені щось у
так само, як отримати або десяткового отримати рядок сама по собі.
І я збираюся дати цю функцію ім'я друкованими літерами, і я збираюся
вказати, що цей хлопець збирається взяти рядок, а я буду називати, що
Рядок імені.
Я міг би назвати це все, що я хочу, але я хочу, щоб мій код був самодокументіруемимі.
Іншими словами, якщо один з вас були відкрити цей файл і прочитати його, ви можете
роду укласти з назви, що вхідного яку роль він повинен грати.
>> А тепер нижче, що, я збираюся відкрити фігурною дужкою і закритих фігурної дужки,
і так помічаю я слідував тієї ж візерунок на лініях з четвертого по сьомий, як
Я стежив за хорошу тиждень плюс Тепер, скажімо, між дев'ятьма і ліній
14, які складають основний.
Іншими словами, надрукувати ім'я Інший функцією.
Тепер, компілятор не буде знати, повертається назвати це автоматично
тому що я буквально тільки що придумав, але він буде знати ще називають основним
автоматично, а потім, звичайно, в рядок 13, я закликаю моїх власних функцій.
І тому, що я заявив, що функції на четвертому рядку перед основним,
це буде вчити компілятор те, що цитата, кінець цитати ", розшифровка підпису"
означає і те, що він повинен робити.
Так я начебто надавши йому новий користувальницький блокувати в контексті, скажімо, подряпини.
>> Так що тут, я можу поставити, що дуже часто або повторювані структури коду я тримаю
писати в класі, Е % S привіт,% S / N ", -
Що я хочу поставити тут?
S?
Так я хочу поставити ім'я в цьому контексті.
Так помітити трохи дихотомії тут.
Тому що я оголошую мою власну функцію і я кілька умовно називається
роздрукувати ім'я, а тому, що я зазначені в дужках, що це
Функція приймає один аргумент типу який є рядком - так це слово
або фраза або щось на зразок цього - і Я дзвоню, що ім'я аргументу, що
означає, єдина змінна, яка знаходиться в сфери, так би мовити, це ім'я.
>> S існує тільки між тим, що два фігурні дужки, звичайно?
Ну дійсно, як через лінію 10 14, так само, як у понеділок не може використовувати
S, але що я можу зробити, це пройти S в друк ім'я.
Надрукувати ім'я саме так відбувається, щоб дати йому псевдонім, синонім, прізвисько,
назвавши його ім'я, і ​​тепер використовувати його в цій лінії.
Так що тепер дозвольте мені зберегти це, зменшення.
>> Дозвольте мені піти далі і зробити привіт.
Виглядає добре.
Чи не випльовувати будь-які помилки. . / Привіт Enter.
Як мене звати?
Давида.
І привіт Давиду.
Так що не все, що цікаво, Але подумайте зараз.
Тепер у вас є, що ж інгредієнти як ми робили в порожньому місці, щоб
зробити наші власні функції.
>> Але є трохи Гоча.
Припустимо, що я дійсно не думав, це через і я фактично без
дійсно думав про це писав ця функція тут.
Відчувається цілком розумним.
У подряпин немає поняття знаходження у ваших сценаріях.
Ви можете підняти один тут, один тут, один тут, і він може почати
, Щоб виглядати трохи брудним, якщо ви не покладіть його акуратно, але це не так
має значення, де фізично скрипти були на екрані.
На жаль, в C - і це на відміну від мови, як Java і Python
та інші, які ви можете бути знайомі с - на жаль, в C, порядок не
має значення, тому що годинник зараз відбудеться.
>> Функція за умовчанням, що відбувається запустити, є, звичайно, основним.
Головне збирається подзвонити друку ім'я на лінії вісім, але, на жаль,
компілятор навіть не будуть знати, що друковані назву існує, поки не добереться до лінії 11,
яка, на жаль, буде занадто пізно.
Так що давайте роблять привіт.
А тепер, чорт забирай, дві помилки генерується.
Так що тепер дозвольте мені прокрутити до самого По-перше, як ми завжди повинні робити, і
помітите, що він кричить на мене, "Неявна декларація функції
надрукувати ім'я. "
>> Отже, ми розглянули це повідомлення раніше, неявна декларація функції.
Коли ми бачили таку помилку?
Коли я не включав бібліотеку.
Якщо я забув cs50.h і я хотів би отримати кричав на для отримую рядок або отримати Int.
Але в даному випадку, ця функція друку ім'я не в бібліотеці, чи не так?
Це буквально в цьому файлі, так що що насправді проблема?
>> Ну на жаль, в C, це займе у вас буквально так неймовірно, що якщо ви
хочуть функція називається друку ім'я існує, ви повинні або здійснення
, Які функціонують на самому верху код так, щоб вона була доступна для зниження
функції, але чесно кажучи, це стає неакуратно дуже швидко.
Особисто я, як покласти перший основний тому що тоді це дуже ясно, що це
Програма робить на перший погляд.
І плюс, ви можете потрапити в дивний кут випадках, коли, якщо X хоче назвати
у, але могли б назвати Y X, ви просто фізично не може насправді поклав одну
над іншим.
>> Але виявляється, в C, ми можемо вирішити це дуже просто.
Я збираюся покласти трохи простору тут, і я просто хочу, щоб
превентивно, хоча й трохи надлишково, навчу
компілятор, який існує функція називається друкованими літерами, він сприймає рядок,
і я буду називати його називають крапкою з комою.
>> Так що цей час у черзі чотири, які ми раніше не бачили, це декларація
імені функції друку, але це тільки обіцянку, що ця функція буде
в кінцевому рахунку бути визначений, в кінцевому рахунку реалізовані.
Це тепер я можу залишити в спокої, бо Зараз це визначення,
реалізації, начебто останньої милі реалізації цього
певної функції.
Так відверто, що це нерозумно, це дратує, але це шлях С, і це
тому що він приймає вас дуже буквально і, як комп'ютер прямо випливає,
того, що саме те, що ви скажете їй робити, і так, що порядок важливий.
>> Так що майте це на увазі, і знову, починають помітите повторення візерунків.
Цілком ймовірно, ви будете, якщо ви ще не Вже зараз починають стикатися з повідомленнями
як це, які на перший погляд здаються абсолютно загадковим, але якщо ви починаєте
дивитися на ці ключові слова, як "Неявна декларація", згадка про
функція в даному випадку - і, чесно кажучи, ви іноді навіть отримати трошки зелених
морква символ, який говорить вам, де Ймовірно, проблема є -
Ви можете почати працювати ваш шлях через ще не було мабуть повідомлення про помилки.
Є питання по написанню власну функцію таким чином?
>> Давайте робити те, що це трохи більш переконливим.
Замість того, щоб просто робити те, що має Побічний ефект друку, відпусти мене
вперед і зберегти новий файл, і ми називаємо це positive.c, навіть якщо це
буде трохи по-іншому в порівнянні з минулим часом.
І цього разу, я хочу повторно реалізувати Наприклад positive.C востаннє, яке
як змусити користувача, щоб дати мені позитивне ціле число.
Але я повинен був використовувати десяткового отримати востаннє.
Хіба не було б добре, якщо було Функція називається отримати Позитивний Межд
що я міг просто передати цю шматок функціональності?
Таким чином, різниця тут ми будемо реалізації отримати позитивні Інтелект, але на відміну від
друк ім'я, яке має побічний ефект - він не повернув мені щось на зразок
число або рядок -
Позитивний Міжн отримати, звичайно, збираюся повернутися, ми сподіваємося, позитивно Int.
>> Так давайте зробимо це.
Увімкніть cs50.h, включають в себе стандартні io.h.
Тап_п недійсними.
І тепер тут, я збираюся йти вперед і скажемо, Інтелект, називають його N, дорівнює
отримати позитивні Int.
І так само, як отримати десяткового вже існує тому що співробітники її написав, я збираюся
припустимо на хвилину, що отримати Позитивний Міжн існує, і тепер я збираюся
йти вперед і сказав Е, спасибо за% I / N ", N.
>> Так що тепер, якщо я компіляції цієї програми, що відбуватиметься в моєму терміналі
вікно в нижній частині екрану?
Я збираюся отримати, що, ймовірно, така ж помилка, як раніше.
Так давайте спробуємо це.
Зробити позитивним.
І знову ж, неявне оголошення функції, отримати позитивні Int.
Тому ми можемо дозволити це в декількома способами.
Я збираюся зберегти його простим і просто поклав мою заяву тут і отримати
позитивні Int.
Мені потрібна так звана підпис.
Підпис відноситься тільки до естетики
Перший рядок програми.
Отже, що потрібно отримати позитивні десяткового натомість?
>> Так Int.
Я маю на увазі в ідеалі, він повернеться щось на зразок Позитивний Міжн, але це
не існує.
Ми не бачили, що серед наших даних типи, так що ми маємо справу з
Те, що у нас дуже мало Типи даних для роботи с.
Але ми можемо повернутися Цілочисельне і просто довіряти, що вона буде позитивною.
Це буде називатися отримати позитивні Int.
>> І тепер, як про його аргументи?
Воно приймає будь-який вхід?
Чи потрібно будь-який вхід?
Тому не потрібно знати Заздалегідь нічого.
Отримати рядок не, отримати десяткового немає.
Printf робить - для цього потрібно мати деякі вхідних даних, переданих в неї - і роздрукувати ім'я
необхідні деякі матеріали, але отримати Позитивний Міжн немає.
Так що я буду явним сказали компілятору недійсними.
Порожнеча є відсутність небудь ще.
Так що нічого не означає Порожнинність відбувається всередині тих дужки, крапка з комою.
>> І тепер в нижній частині мого файлу - і знову ж таки, я просто вид анальних
Тут поставивши основною у верхній частині, який хороша практика, тому що таким чином,
в будь-який час ви або хтось інший відкриває файл,
функціональності тут же.
Ви можете зануритися в с нуля.
Так що тепер я збираюся дублювати цей, отримати Позитивний Міжн порожнеча, але я не
вдарю коми зараз.
Я збираюся відкрити фігурні дужки, і тепер мені потрібно запозичувати
деякі ідеї з понеділка.
>> Отже, як ви пам'ятаєте, ми зробили щось Подобається наступне час
щось було правдою.
І що ж мені робити?
Я зробив щось на зразок дають мене позитивне ціле число,
Трохи рядку.
Я міг би використовувати будь-які слова, які я хочу.
І тоді я використовував те, що?
Int N одно отримати Інтелект, Ніякі докази на нього.
>> І помітите різниці.
Коли ви викликаєте функцію, коли ви використовуєте функції, ви не ставите в порожнечу.
Ви робити це тільки при оголошенні функції, викладання, що компілятор
він повинен бути готовий.
Так що вам не потрібно покласти анулюванню туди самі.
>> А тепер те, що було мій стан?
Добре, п не одно позитивним, але це тільки псевдо-коду.
Так як я можу виразити це більш акуратно?
Таким чином, менше або рівне нулю.
Отже, ще раз зверніть увагу, що ви можете зробити менше або дорівнює.
Навіть якщо це два окремих символи, ви можете зробити це на
клавіатури як такої.
>> Але є ще помилка, Я облажався минулого разу також.
Я повинен оголосити -
точно.
Я повинен оголосити поза N циклу.
Так що мені потрібно поставити п до тут, і я не хочете повторно оголосити його тут
щоб я отримати нову змінну.
Я просто хочу, щоб привласнити значення тут.
>> І тепер я не зовсім закінчили.
Дозвольте мені забігати вперед і робити вигляд, я зробив.
Приймати позитивні, і тепер є нова помилку.
Управління досягає кінця непорожніх функції.
Так нове повідомлення про помилку, але якщо ви вигляд дражнити один від одного кожне зі слів, він
, Ймовірно, натякає на те, що це неправильно.
>> Управління.
Управління означає лише порядку операцій в програмі.
Комп'ютера в контролі та щось пішло не так.
Таким чином, досягає кінця непорожнє функції.
Яку функцію він, очевидно, на увазі?
Яка функція не є недійсним?
Так що позитивні Інтелект, і трохи плутанину, ну,
це ніби недійсними.
Вона має специфікацію порожнечу своїми аргументи, але його вихід буде
мати тип N.
Таким чином, слово на лівій стороні так званий тип значення.
Слово на внутрішній тут нуль або більше аргументів
що функція приймає.
>> Так що ж мені потрібно зробити?
На даний момент в моєму коді, рядок 21, де швидке миготіння зараз, я
є Позитивний Міжн всередині змінної називається N.
Як мені повернути її основним?
У буквальному сенсі.
Повернутися N коми.
>> Так само, як Колтон повернувся шматок паперу з відповіддю на мене, знижуючи
цей папірець в маленькому чорному коробку на стіл, зробити це в
Код, ви в буквальному сенсі просто написати, повернути N, і це, як ніби були Колтон
простягаючи мені щось фізичне тому.
У цьому випадку те, що відбувається, це отримати Позитивний Міжн збирається вручити тому
що імовірно позитивним ціле для кого?
Де, що значення в кінцевому підсумку?
, Який закінчується в цієї змінної, N, і Потім ми продовжимо лінію дев'ять.
>> Отже, іншими словами, в порядку операцій, ця програма починає
виконання і компілятор розуміє, Ах, ви хочете в бібліотеку?
Відпусти мене захопити все, що знаходиться всередині.
Ах, ви хочете стандартної бібліотеки IO?
Відпусти мене захопити все, що знаходиться всередині.
Що ж компілятор сказати собі , Коли вона потрапляє чотири лінії?
О, ви обіцяли реалізувати Функція називається отримати позитивні, але
ми повернемося до цього пізніше, щось в цьому напрямку.
>> Int основних порожнечу просто означає ось нутрощі моїй програмі.
Лінія семи просто фігурною дужкою.
Лінія вісім говорить на лівому, дати мені 32 біта для цілого, назвемо його п.
На правій стороні, це кажучи отримати позитивні Int.
Тепер давайте зупинимося цю історію, тому що тепер Я не тримаю переміщенні мого курсора вниз.
Мій курсор тепер йде сюди, бо тепер отримати Позитивний Міжн виконує.
Int N оголошений.
Виконайте наступні дії.
Printf дає мені позитивне ціле число.
>> Отримати Цілочисельне від користувача, зберігайте його в N, і, можливо, зробити це знову і знову.
Цей цикл означає, що цей код може виконати вгору і вниз як це знову
і знову, але коли користувач остаточно співпрацює і дає мені позитивні
Інтелект, я вдарив лінії 21, і в цей момент номер повернув, а який
я повинен виділити зараз?
Дев'ять.
Управління, так би мовити, повертається в лінію дев'ять.
Це лінія, яка зараз при владі.
>> Так от те, що відбувалося все на цей раз під капотом, але
коли ми використовували функції, такі як Е або навіть отримати рядок, що хтось інший
написав вам, контроль того, як передав геть до чужої код лінії
По лінії По лінії.
Це просто ми не могли бачити його, і ми не міг уявити її в цьому
програму, тому що це в деяких інших файлів на жорсткому диску
без відома нам.
Так що давайте компілювати і запустити це зараз.
>> Зробити позитивним.
Компіляція, це прогрес.
. / Позитивним.
Дайте мені позитивне ціле число.
Давайте бути важким.
Негативні 1.
Нуль.
Давайте дамо йому 50.
Дякуємо за 50, так і управління зараз повернулася.
Будь-які питання, то, з цього приводу?
Так?
>> [Нерозбірливість].
>> Скажи ще раз.
О, хороше запитання.
Таким чином, ви можете помітити, що тут паралель Я начебто різання кутку.
У рядку 12, я кажу, отримати Позитивний Межд повертає ціле, але до того ж
логікою, тепер зрозуміло, що в лінії шість, я кажу, що основна повертається
Інтелект, але те, що ми ніколи раніше не було ні в одній з наших програм?
У нас ніколи не було згадки про це клавіші повернення слова.
>> Ось і виходить, що в C, принаймні версія, що ми використовуємо
зроблено в 1999 році, технічно, це відбувається автоматично.
У будь-який час ви реалізуєте програму, і ви реалізувати функцію, називається основним,
що функція поверне нуль Типово, якщо ви не говорите, в іншому випадку,
і нульовий всього лише угода.
Світ тим самим повертає нуль про те, що все добре,
ефективно залишаючи нас з чотирьох мільярдів можливі речі, які могли б піти
неправильно, таким чином, що, якщо ми повернемося однієї, що може означати код, який означає, що цей
річ пішло не так.
Ми могли б повернути два, що означає, це інша річ пішло не так.
Ми могли б повернутися чотирьох мільярдів, які означає, що це інша річ пішло не так.
>> І якщо ви зараз думаєте про свій власний ПК або Mac, ви можете згадати, що
іноді ви отримуєте повідомлення про помилки, від програмного забезпечення, яке ви
використанні, а іноді він має людське зрозумілий опис, але є
Часто код або номер на екрані?
Якщо це не приходить в голову, просто стежте за це.
Це звичайно, що ці Коди на увазі.
Вони включені в Microsoft Word і інших програм, так що, якщо ви подасте
звіт про помилку з компанією, ви можете скажіть їм, ой, я отримав номер помилки 45.
А деякі програміст тому в компанії можете подивитися, що у свою
код і сказати: о, це тому що я зробив це помилка, і саме тому користувач
отримав це повідомлення.
>> Але, відверто кажучи, це просто трохи відволікає і трохи втомлює
укласти, що, принаймні, на наш Перші кілька програм, тож, ми
були опускаючи його.
Але весь цей час кожен з ваших Основними функціями таємно була ця
лінії автоматично додається для Вас компілятора, просто конвенції
заощадити ваш час.
>> [Нерозбірливість].
>> Вам не потрібно включати його в основний.
Це прекрасно.
Ви повинні включити його, якщо ви були реалізації функції, як це.
В іншому випадку функція плоского з не працюватиме.
Але в головному, в цьому немає необхідності.
Через тиждень або два, ми почнемо отримувати в цю звичку, як тільки ми хочемо почати
що означає помилок.
Дуже гарне питання.
>> Так швидко словесні перерву, щоб відзначити, що в цю п'ятницю, ми не будемо обідати
як такої, але ми будемо обідати з деякі з студентів і викладачів.
Якщо ви хочете приєднатися до нас, відчувають себе вільно ходити в cs50.net/rsvp.
6:00 вечора в цю п'ятницю.
Простір, як завжди, обмежена, але ми продовжувати робити це на майже
щотижневій основі, якщо простір закінчиться на цьому тижні.
>> Так захоплюючим, що ми зупинилися на Понеділок було те, що рядки можуть насправді
бути проіндексовані на, який просто означає, що ви може отримати з першого символу,
Другий персонаж, третій символ і так далі, тому що ви можете
ефективно думати рядком, наприклад привіт, як в даному випадку п'ять
Листи всередині коробки.
І ви можете отримати на кожній з цих коробки з тим, що ми зробили синтаксису
ввести в понеділок?
Ті квадратні дужки на клавіатурі.
Це просто означало піти в розташування нуля.
>> Ми починаємо відлік з нуля, так що кронштейн нулю означає, ч, кронштейн однієї
означає, е, і так далі.
І так весь час, коли ми були використовуючи рядки і друкувати на машинці "привіт"
і "Мир" та інші речі на екрані, це було збережено
в коробках, як це.
І зробити припущення.
Що означає кожна коробка представляють фізично всередині комп'ютера?
>> [Нерозбірливість].
>> Пробачте?
>> Персонажів.
>> Таким характером, звичайно, у випадку рядків, і характер просто
вісім бітів або один байт.
Таким чином, ви, ймовірно, принаймні смутно знайомі з тим фактом, що ваш
Комп'ютер має пам'ять.
Вона складається з двох типів пам'яті принаймні.
Одним з них є жорсткий диск, де Ви зберегли речі постійно, і це
зазвичай великі, тому ви можете їсти фільми і музики і так далі.
>> Тоді у вас є інший тип пам'яті називається RAM, R-A-M, довільний доступ
Пам'яті, і це тип пам'яті , Який використовується, коли комп'ютер
працює, але, якщо ви втратили владу або ваш акумулятор помирає, все, що зберігається
в оперативній пам'яті зникає, якщо ви втратили владу в цілому, тому що це не
стійким.
Як правило, є, в ці дні, концерт цього, два концерти, може більше.
І вгору оперативної пам'яті, що набагато набагато, набагато швидше, ніж жорсткі диски
або навіть твердотільних накопичувачів в ці дні, але це правило, дорожче, так
у вас є менше.
>> Тому сьогоднішня розмова дійсно відноситься в ОЗУ, що тип пам'яті, який
існує тільки поки є влада подається в комп'ютер.
Отже, коли ви вводите в Н-Е-Л-Л-О, Enter на клавіатури, H відбувається в одному
байт оперативної пам'яті, E збирається в інший байт оперативної пам'яті, як це
інші слова.
Так згадаємо, що ми змогли зробити останній раз було так.
Дозвольте мені йти вперед і відкривати файл , Який ми назвали string.c, і згадати
що це виглядало трохи щось на зразок цього.
Дозвольте мені насправді відкат і змініть це саме те, що це було схоже,
довжина рядка с.
>> Так що дивіться на програму тут.
Ми включаємо бібліотеку, так CS50 що ми можемо використовувати отримати рядок.
Ми включили в стандартну io.h тому ми можемо використовувати Є.
Чому ми включаємо string.h?
Це було новим у понеділок.
Таким чином, ми хотіли довжину рядка.
Ленг вул.
Люди вирішили років тому, давайте просто бути короткими.
Замість того, назвавши його "довжина рядка" назвемо її "вул Ленг", і нехай
світ зрозуміти це, і таким чином, це те, що ми отримуємо доступ до string.h с.
>> Це знайоме.
Це знайоме.
Це трохи нових.
У лінії 22 - і ми повернемося до цього, але зараз знаю -
і ви б тільки знаю, що це від того, читати документацію або якщо
Ви знали, С, вже -
отримати рядок іноді може зіпсувати.
Якщо користувач дійсно змагального або відмовляються від співпраці, і він чи вона просто
не вводьте нічого з клавіатури або Типи стільки на клавіатурі, яка
переповнює пам'ять комп'ютера, У теорії, взяти мотузку може повернутися
щось інше, ніж рядок символів.
Він може повернутися спеціальне значення, зване NULL заголовними літерами, N-U-L-L, а це
тільки так звані дозорні значення.
Це спеціальне значення, яке означає щось погане сталося в даному випадку.
Це відсутність рядка.
>> Так нуль я перевіряю для просто так, що, Коротше кажучи, вул Ленг і
інші функції, які приходять з C, якщо вони очікують рядок, але їх можна передавати
відсутність рядок, якщо ви передаєте їх нікчемними, комп'ютер або програма
буде просто потерпіти крах відразу.
Вона буде висіти.
Це буде кинути деяке повідомлення про помилку.
Можуть відбутися неприємні речі.
Так що, хоча це як і раніше нечітко -
це буде мати більше сенсу в тиждень або два - в лінії 22, це всього лише
Прикладом самостійного оборонного перевірки помилок про всяк випадок один раз з
млн. щось піде не так, по крайней Принаймні, моя програма не завалиться.
>> Так що, якщо з не одно щось погане, У мене є цикл, і це було
де у нас було, що інші нова частина синтаксису.
У мене є цикл ітерації від нуля до довжини с.
А потім от, я була роздруківка з Кронштейн я, але чому я використовую C% всіх
Раптово замість% навіть з хоча їй це рядок?
Це символ, чи не так?
S є рядком, але щось з кронштейном, з кронштейном я, де я дорівнює нулю
або один або два, це окремі символу в рядку, і тому для
що Е повинен бути поінформований, що це дійсно символ очікувати.
>> А потім згадати, що зробив це Програма насправді?
>> Роздрукував його в шпальтах.
>> Так, саме.
Це просто надрукував слово, яке я друкую в колонка, один символ в рядку.
Отже, давайте подивимося це знову.
Так що рядок.
Укладач OK. . / Рядок.
Дозвольте мені ввести Н-Е-Л-Л-О, введення і більше того, я розумію, по одному на рядок.
>> Отже, дозвольте мені зробити одне оптимізації тут.
Якщо ви думаєте про це, особливо якщо ви програмували раніше, є
можливо неефективності лінії 24.
Іншими словами, це не обов'язково кращий дизайн.
Простий, принаймні, як тільки ви пам'ятайте, що Ленг вул є, але це
робити щось потенційно німий.
Що це може бути?
>> [Нерозбірливість].
>> Саме так.
Це перевірка на довжину з кожен раз, навіть при тому,
H-E-L-L-O завжди буде в п'ять символів.
Кожен раз, коли через цей цикл п'ять не змінюється.
Я міг би збільшуючи я, але те, що це довжина с на кожен
ітерації цього циклу?
Це п'ять, це п'ять, це п'ять, а все ж я задаю це, тим не менш
питання знову і знову і знову.
Зараз, чесно кажучи, комп'ютер так чертовски швидко, ніхто не помітить
Різниця в цьому випадку, однак ці види бідних дизайнерських рішень може
почнуть рости, якщо сам компілятор не намагається виправити це для вас, які
він зазвичай не буде, по крайней мірі, в пристрої.
>> Так що я збираюся зробити це.
Я збираюся додати кому після моя перша змінна, я.
Я збираюся дати собі ще змінну, назвавши його N, просто
Конвенція для чисел, а потім я збирається призначити п значення рядка
довжина с.
А потім я збираюся змінити мій стан те, що?
Я збираюся змінити свій стан в той час як я менше N.
>> Так що тепер, скільки разів я перевірка довжини з?
Один раз, але це нормально, щоб перевірити, що я проти N знову і знову, тому що тепер ці
значення фактично не змінюється.
Зараз на даний момент, просто знаю, що в будь-який час ви викликати функцію, є трохи
над головою, не достатньо, щоб відмовити вас від дійсно ніколи не використовуючи функції, але
звичайно, коли є рядок коду подобається, що - і межі отримаєте
більш цікавим незабаром - де є можливість подумати, якщо я
введіть цей код, скільки раз він буде виконувати?
Ви почнете бачити протягом довгого часу виконання своїх програм
дійсно зміниться.
>> Справді, одним з домашніх завдань ми в зроблено в минулі роки включає в себе
реалізації, як ви пам'ятаєте з нульової тижня, перевірка орфографії, але
перевірки орфографії, яка була розроблена для підтримки словник 150000 плюс
Слова, які ми даємо вам, хлопці.
Ви повинні були б написати код, який завантажує ці слова в пам'яті, так що в
коробки, як ми бачили на екрані момент назад, а потім так швидко, як ви
може, ви повинні бути в змозі відповісти питання про форму, це слово
орфографічними помилками?
Це слово з помилкою?
>> І щось в цьому роді, що ми зроблено в минулі роки включення його до,
хоча і на відмову в факультативній основі Конкурс пологів, в результаті чого
студентів, які використовують менше пам'яті і менше час, зменшується завантаження процесора, в кінцевому підсумку
бульбашок вгору до верхньої частини трохи дошки лідера чи рейтинг, який ми ставимо на
Звичайно домашню сторінку, як ми зроблено в минулі роки.
Отже, ще раз, зовсім необов'язково, але це говорить про можливість дизайну
які попереду як тільки ми починаємо побудова поверх деяких з цих
основні будівельні блоки.
>> Отже, дозвольте мені повернутися до цієї схеми На мить і розкрити трохи
щось більше.
Зрозуміло, цей рядок, і ми взяли Перевага кілька бібліотек
стандартні io.h яка має -
>> Printf.
>> Printf, між іншим.
cs50.h, який отримують десяткового і отримати рядок і так далі, string.h, який
Ленг був вул.
Але, виявляється, є ще один.
Чесно кажучи, є багато-багато заголовків файли, які оголошувати функції
для бібліотек, але це є ctype.h насправді відбувається, щоб бути декілька
вигідно, тому що я збираюся йти вперед і реалізувати один
інші програми тут.
>> Дозвольте мені йти вперед і відкривати щось Я написав заздалегідь називають
capitalize.c, і давайте Подивіться, як це працює.
Зверніть увагу, що я використовую, в цій версії його, три знайомі файлів.
Зверніть увагу, що в рядку 18, я отримання рядка тексту.
Повідомлення у рядку 21, я, стверджуючи, що Наступний код буде
вигоду з, що введений користувачем в, і як я це роблю?
Ну, я беру -
Урок, витягнутий з останнього часу -
Я оголошую я і н і ітерації більше символів в рядку.
І тоді те, що цей блок код згідно з 24 по 27
робити з точки зору непрофесіонала?
>> Малої літери назад.
>> Саме так.
Якщо я з кронштейном - так що якщо г-й Характер с, що конкретний
символів у рядку, більше або дорівнює нижнього регістру і -
Нагадаємо, що подвійний амперсанд і означає -
і той же характер, з кронштейном I, є менше або дорівнює в нижній регістр Z,
, Що означає, що він або B або C або точка, точка, точка, або Z, що означає,
це малими літерами.
Що я хочу зробити в такому випадку?
Ну, що я можу зробити це кілька загадково, але
давай дражнити цього один від одного.
>> Я буду називати Е, друкує% C тому що я хочу, щоб передрукувати цю
символу на екрані.
Я тоді збираюся взяти з кронштейном I, I-ий символ в сек, то чому б і
я роблю це маленька хитрість, нижній регістр мінус капіталу?
І що це дасть Мені, взагалі кажучи?
>> [Нерозбірливість].
>> Саме так.
Я дійсно не пам'ятаю -
це було 65 на капітальний А. Мені не дуже пам'ятайте, що нижній регістр є,
Але незалежно від того.
Комп'ютер знає.
Так, говорячи, нижній регістр мінус капіталу, це дивно, щоб бути
віднімання один символ від іншого, але які символи під капотом?
Вони просто цифри.
Тому, що б ці цифри, нехай комп'ютер пам'ятаю
а не мені людини.
>> Так нижній регістр вирахуванням капітальних є збирається дати мені різницю.
Це, виявляється, 32, і це було б у разі малими B і B капіталу
і так далі.
Він залишається послідовною, до щастя.
Так що я по суті, говорить, візьми малої літери, що Віднімемо
стандарт відмінність, і ефективно змін з кронштейном я від
нижній регістр, щоб, звичайно, прописні, без мого дійсно того, щоб думати
о або згадати, що це були за номера ми говорили про те, коли вісім
добровольці прийшли на сцену?
Тепер Між тим, в іншій, якщо це не малої літери, як це визначено
по лінії 24, його можна просто вивести.
Я тільки хочу, щоб торкнутися символів, які були
насправді спочатку нижній регістр.
>> Отже, давайте подивимося це.
Зробити вигоду.
Упорядник, OK.
. / Вигоду.
І дозвольте мені ввести Н-Е-Л-Л-О в нижньому регістрі, Enter.
І зауважте, що він перетвориться у верхньому регістрі.
Дозволь мені зробити це знову інше слово.
Як щодо D - V-I-D з першим D капіталізуються як правило, це ім'я?
Enter.
Зверніть увагу, вона як і раніше вірна.
Це тільки перший висновок, що D незмінним через що ще побудувати.
>> Тому майте на увазі, то, Пару речей.
Один з них, якщо ви хочете перевірити два умови відразу, ви можете і їх
разом, як ми і передбачали.
Ви можете порівняти символи таким чином і ефективно лікувати як символи
цифри, але, чесно кажучи, це так чертовски загадкові Я ніколи не буду пам'ятати
Як придумав це з нуля без пояснення причин через нього протягом досить
трохи часу.
>> Хіба не було б добре, якщо хтось там написав викликана функція
нижче, ніж міг відповісти для мене істинним або помилковими, цей символ у нижньому регістрі?
Ну, на щастя, той, хто писав ctype.h зробив саме це.
Хотів би я піти тут і додайте CType для C типу, а тепер відпустив мене сюди і
переписати цей рядок наступним чином.
>> Так що якщо це називається нижче, я стверджую, з Кронштейн я, то я збираюся видалити
ці дві лінії в цілому.
Так що тепер когось ще, я сподіваюся, написав Функція називається нижче, і це
Виявляється, що вони зробили і вони оголошені його всередині ctype.h.
А тепер я збираюся залишити лінію 27 один, я збираюся залишити лінії 31
один, не помітити, як сильно я затягнув мені коду.
Це тепер чистіше.
Це менше, важко дивитися через тому що тепер функції, крім того,
так чудово назвав його просто робить те, що він говорить.
>> Так що тепер я йду, щоб врятувати цього.
Я йду, щоб зменшити масштаб.
І так само, як і в нуля, ви могли б Логічні, логічні значення істина або
помилковими, це саме те, що ефективно знизити віддачу.
Дозвольте мені перекомпілювати.
Дозвольте мені знову запустити.
А тепер давайте спробуємо це знову, H-E-L-L-О, Enter.
Це дуже добре.
І спробуйте ще раз, переконатися, що я не що-небудь зіпсуєте.
Тобто капіталізуються, а також.
>> Але цього не достатньо хороший, тому що Інша річ, яку я ніколи не збираюся
пам'ятайте, якщо я не працювати через нього дійсно ретельно, скажімо, папір
цю прокляту лінію.
Не було б непогано, якби Функція називається в верхній?
Ну виявляється, є знаходиться в ctype.h також.
Я збираюся йти вперед і тип -
краще я виведу цю лінію спини.
Натомість тут, дозвольте мені йти вперед і сказати, замінити C%
результаті виклику цієї функції верхня на I-ий символ с.
А тепер помічаю це стає трохи збалансовані.
Я повинен стежити за скільки дужках я відкриватися і закриватися.
>> Так що тепер це навіть чистіше.
Тепер ця програма стає все краще і краще розроблені, можливо, тому що це
багато, багато іншого для читання, але Адже не давайте виправимо.
Зробити вигоду.
. / Вигоду.
H-E-L-L-виводу. Давайте запустимо його знову, D-A-V-I-D. Отже, ми все ще в
досить хорошій формі.
>> Але тепер до верхнього.
Я вважаю, що є ще одна Уточнення ми могли б зробити, що б
дійсно хороший, які могли б дійсно затягнути цей код і дійсно, дайте нам п'ять
з п'яти дизайн, наприклад.
Що непогано б позбутися?
Ну, подивіться, як чертовски довго цей блок код тільки, щоб зробити щось просте.
>> Тепер, як осторонь, як ви могли бачили в цьому розділі супер минулому
вихідні, вам не потрібно строго фігурні дужки, коли у Вас тільки одна
рядок коду, хоча ми запропонували тримати їх так, що він робить багато
більш ясним, як для Scratch у П-подібною блоки, що всередині галузі.
Але хіба не було б непогано, якби в верхній, коли дано його вхід, перетворив його на
верхній регістр, якщо це не так, і що буде бути чудовими в іншому випадку, якщо
це вже верхній регістр?
Просто передайте його через і залишити його в спокої.
>> Тому, можливо, він робить це.
Я міг би спробувати і просто сподіваюся, що вона робить, але дозвольте мені
ввести ще одну річ.
Замість використання цього вбудований термінал вікна тут, нагадаємо, що
це квадратний значок чорного дає великі вікна терміналу, що я може повний
екран, якщо я хочу?
Ось і виходить, що вони начебто дивно імені, але є такі речі називаються
Людина сторінок, сторінок керівництва, людина для стислості, і я можу отримати доступ до них
людина, набравши -
Що я хочу набрати?
Людина в верхній.
>> А тепер зверніть увагу, якщо існує функціонувати всередині комп'ютера, в
цьому випадку пристрій, який як раз операційна система Linux, вона збирається
дати мені кілька загадковим набором вихід, але ви побачите, що з плином часу
вона завжди форматується в значній мірі так само ви починаєте звикати до нього.
Зверніть увагу, у верхній частині до верхньої та мабуть, ті ж самі документи
для зниження.
Хто б не написав він різав деяких кути і поклав все це на одній сторінці.
Ці речі "в цілях життя полягає в перетворенні
Лист верхній або нижній регістр.
>> Зверніть увагу, що під Synopsis, довідкову сторінку вчить мене, що у мене є файл
включити, щоб використовувати цю річ.
Це дає мені підписів для цих Функції, обидва з них, навіть
хоча ми зараз тільки піклуватися про одне.
Ось тепер описі.
Для верхньої перетворює символ C у верхній регістр, якщо можливо.
>> Ще не так повчально, але дозвольте мені Тепер дивіться під значення, що повертається, річ
який повернув.
Таким чином, значення, повернене в тому, що з перетвориться буква або С, якщо
перетворення не вдалося.
Що таке C?
>> Оригінальний характер.
>> Оригінальний характер і ми знаємо, що, знову ж, підійшовши до
синопсис, і той, хто написав це Функція просто вирішив, що вхідний
щоб на верхній і нижній просто довільно буде називатися C.
Вони могли б назвав це практично все, вони хочуть, але вони залишили його
просто, як у.
Так що я консультувався з людиною сторінці.
Ця фраза мене заспокоює, що якщо це не малої літери, це
збирається просто віддай мені з, що досконалої, яка означає, що я можу позбутися від
моє інший стан.
>> Отже, дозвольте мені повернутися до Gedit і Тепер дозвольте мені зробити це.
Я збираюся скопіювати мій Е заяві.
Я збираюся йти вперед і прямо в цикл, що з друку, і отримати
Тепер позбутися від усього цього, якщо конструкцією.
Був не погана ідея, і це було дуже багато правильно і узгоджуються з
все, що ми проповідували, але тільки не треба.
Як тільки ви розумієте, деякі бібліотеки функція існує, що хтось інший
написав, або може бути, ви писали в іншому місці файлу, ви можете використовувати його і справді
почати підтягнути коду.
>> І коли я кажу такі речі, як хороший стиль, на те, що ця людина називається
функціонувати в верхній або раніше є нижня дивно корисно, тому що
вони дуже описовий характер.
Ви не хотіли б звернути вашу функцій X і Y і Z, які мають
набагато, набагато менше сенсу.
Будь-які питання з цієї серії поліпшень?
>> Таким чином, досить сказати, один з винос ще як свої власні проблеми
Набір - може бути, проблема набору, але звичайно P встановити два і далі, навіть
коли вони праві, не обов'язково означає, що вони просто ідеально
чи все ж продуманим дизайном.
Ось інший осі почати думати про.
Так що це було рядок всередині вашого пам'яті комп'ютера, але якщо у вас є
ціла купа персонажів на кшталт H-E-L-L-O всередині оперативної пам'яті, і припустимо,
що вам у вашій програмі називаємо отримати рядок кілька разів так, що ви
зателефонуйте отримати рядок один раз, то ви зателефонуйте отримати рядок знову.
Ну, те, що збирається статися з плином часу?
>> Іншими словами, якщо у вас є лінія коду, хоча з контексту, як
Рядок з добирається -
давайте зробимо це.
Ім'я рядки одно отримати рядок.
Тому припустимо, що рядок коду призначений запитати у користувача його або її ім'я.
У наступному рядку коду хотіла запитати користувачеві для його або її школі, і
ця наступна рядок, і так далі.
Припустимо, що ми постійно запитують Користувач ще й
ще і ще рядок.
Вони збираються залишатися в пам'яті в той же час.
Один з них не збирається заміщати інші.
Школі не перекривати один одного.
Але там, де вони всі в кінцевому підсумку в пам'яті?
>> Ну, якщо ми почнемо малювати на екрані, які ми можемо використовувати цю річ
тут, як дошка, якщо це чорний прямокутник представляє мого комп'ютера
пам'яті, я збираюся почати довільно розділивши його на невеликі квадрати,
кожен з яких представляє один байт пам'яті.
Чесно кажучи, якщо у вас є гігабайт оперативної пам'яті в ці дні, у вас є мільярд байт
пам'яті у вашому комп'ютері, так мільярдів з цих квадратів.
Так що досить сказати, це насправді не в масштабі.
>> Але ми могли б зберегти малюнок всі ці ясно не в масштабі квадратів, і ця
колективно представляє моїй пам'яті комп'ютера.
Тепер ми просто зробимо точка, точка, точка.
Отже, іншими словами, коли я тепер спонукати користувачеві взяти мотузку, щоб дати мені
Рядок, що відбувається?
Якщо користувач введе в "привіт", який закінчується в H-E-L-L-виводу. Але припустимо, що
Потім користувач типів -
Насправді, я не повинен був робити привіт, бо ми просимо
їх за їхні імена.
Отже, давайте повернемося, якщо я можу зробити це.
>> Так що якщо я типу в D - V-I-D імені Моєму, але нагадати, що у другому рядку
Код був отримати рядок знову щоб отримати їхній школі.
Де це слово, яке користувач типи збирається йти далі?
Ну, може, це буде йти в H-A-R-V-A-R-D. Так що, хоча я
намалював його у вигляді двох рядків, це буде просто ціла купа байтів у вашому
оперативної пам'яті комп'ютера.
Там проблема зараз, тому що зараз, якщо я використання оперативної пам'яті в цьому дуже розумно
а як би наївно, що ви можете мабуть, не відрізнити?
Де починається одне й де закінчується один, вірно?
Вони начебто розмиття разом.
>> Ось і виходить, комп'ютер не робить цього.
Дозвольте мені насправді прокрутити назад у часі кілька символів, а замість Гарварду
збирається відразу після імені користувача, користувач отримує насправді, за
лаштунками, спеціальні символи вставляється
Комп'ютер для нього або неї.
/ 0, інакше відомої як нульовий символ дратівливо званий N-U-L, що не
N-U-L-L, але ви пишете його як / 0.
Це просто всі нулі є маркером в між перше слово, яке користувач
надрукований і другого.
>> Так що насправді зараз Гарвардського закінчується як це послідовність символів
І ще один / 0.
Отже, іншими словами, за наявності цих дозорні значення, восьми послідовних нуля
біт, тепер ви можете почати розрізняти один символ від іншого.
Так що все це час, що був "привіт" є насправді "привіт" з / 0, а
Тим часом, цілком може буде трохи більше оперативної пам'яті
всередину комп'ютера.
>> Дозвольте мені зробити ще одну річ зараз.
Виявляється, що всі ці квадрати ми малюю, вони, так,
рядка, але в більш загальному ці речі є масиви.
Масив це просто шматок пам'яті ось спина до спини, щоб спина до спини,
і як правило, використовується масив шляхом цієї площі позначення кронштейна.
Отже, ми збираємося, щоб побачити ці зовсім небагато з плином часу, але дозвольте мені йти вперед і
відкриваються, назвемо його віку.
І зверніть увагу, що ми можемо зробити з ці ж трюки, трохи
трохи більше синтаксисом.
>> Таким чином, у рядку 17 цієї програми - насправді, дозвольте мені запустити програму першим
тому ми можемо бачити, що ця річ робить.
Дозвольте мені звернути віку, щоб зробити компіляції цієї програми.
. / Століть.
Скільки чоловік у кімнаті?
Назвіть це три.
Вік першої особи?
18, 19 і 20.
А тепер дещо смішно, я просто зробили програму, яка віків тих,
трьох осіб.
>> Таким чином, є очевидна можливість для деякої забави ось арифметика.
На щастя, математика є правильним.
18 пішов в 19, 19 пішов 20 і так далі.
Але що насправді означає бути ілюстративні ось як ми зберігаємо
цих трьох людей віків.
Дозвольте мені збільшення на те, що тут відбувається.
>> Отже, спочатку, ці перші кілька рядків повинна отримувати досить добре знайомі.
Я просто за допомогою якого користувач Кількість осіб в кімнаті.
Тоді я використовую отримати десяткового і час, щоб зробити робити це знову і знову і знову.
Ми бачили, що модель і раніше, але рядок 27 є новим і насправді досить
корисними, і стане більш корисними.
Зверніть увагу, що що по-іншому в лінії 27 те, що я, здається, оголосивши
Int називається віку, але чекати.
Це не просто десяткового віків.
Там в ці квадратні дужки, всередині якого п.
>> Таким чином, кронштейн н в даному контексті НЕ Усередині Е заяву тут, але
У цій єдиній лінії 27, ця лінія сказав: Дайте й мені цілих N, кожен з яких
має тип Int.
Так що це відро, так би мовити, з, У цьому випадку, три цілих Повернутися до
спина до спини так, що я ефективно є три змінних.
В якості альтернативи, бути Ясно, це було б.
>> Якби я хотів першим студента віку, я міг би це зробити.
Якби я хотіла другого студента віком я міг би зробити це.
Якби я хотів третього студента віку, я міг би це зробити.
І не дай Бог нам потрібно кожному віку в цій кімнаті -
Я маю на увазі, це чертовски багато копій, вставте знову і знову і знову.
І плюс, як тільки я компіляції цієї програми Якщо інший студент ходить у більш ніж з
цих дверей, тепер мій номер змінних є неправильним.
>> Так що приємно про масив як тільки ви починаєте відчувати себе
копіювання і вставка, цілком імовірно, що це не найкращий підхід.
Динамічний масив потенційно.
Я не знаю заздалегідь, скільки людей збираються бути в кімнаті,
але я знаю, що потрібно п з них, а я з'ясувати, N, коли прийде час.
Цей рядок коду в даний час означає, дай мені ділянка пам'яті, який виглядає наступним
де кількість вікон на екрані повністю залежить від N, що
Користувач ввели дюйма
>> Так що тепер на решті частини цієї програми насправді дуже схоже на те, що ми
тільки що зробили з символами.
Зауважте, що я для петлі починаючи з лінії 30.
Так що відразу після я отримую масив, я ітерації від Y дорівнює нулю на до н.
Я просто цю повчальну Е повідомлення просто кажу, дайте мені віці
людина #% я, так що номер один, номер два, номер три.
І чому я це роблю?
Чесно кажучи, люди воліють рахувати від одного в той час як на комп'ютері до вчених,
нулю і вище.
Комп'ютер вчені не збираються використовувати цей вид програми, так що ми
збирається просто почати відлік в одне, як нормальні люди.
>> І зараз у рядку 33, зверніть увагу на кілька інший шматок синтаксис.
I-го віку, що у змінній типу Масив збирається отримати Int.
І тепер, нарешті, це просто арифметичні тут.
Я вирішив в окремій петлі вимагати проходить деякий час, і тепер у цьому
окремий цикл, ці рядки виконати.
>> Через рік, людина, яку я буду я років, не помітити, що це не
Я змінну.
Це зараз я% для Int.
І зверніть увагу, як перший заповнювач, я підключіть я плюс 1, так що ми розраховуємо як
нормальна людина.
І тоді для значення їх вік, для Я років, я беру віків кронштейн
Я - і навіщо я це роблю плюс один тут?
Вони тільки у віці.
Це мій дурний вибір програм.
Вони просто у віці одного року.
Я можу ввести будь-яке число, яке Я дійсно хочу там.
>> Так що насправді все ставлення до вищесказаного?
Ну, дозвольте мені насправді прокрутити назад сюди і намалювати картину
, Що чекає попереду.
Що ми будемо робити з нашим наступним Проблема буде встановити два втручаються в
Світ криптографії.
Так що це рядок символів, так що Послідовність з кількох символів, і що
це говорить?
Це не в онлайн-версії зі слайдів.
>> Тому я стверджую, що це одно це, дурна реклама протягом багатьох років
тому, що може насправді згадати одна з його походження.
Так що це приклад шифрування або криптографії.
Виходить, що, якщо ви хочете насправді відправити інформацію або поділитися
Інформація з кимось надійно, як таке повідомлення, ви можете
дертися букв.
Але, як правило, слова Не випадково яєчню.
Вони переставляються в тій чи змінений в деякому роді, так що - ой.
Це весело спойлер в наступний раз.
>> Таким чином, ви можете відобразити, що є очевидно O помітити, що Б. вибудовує
Капіталізація-мудрим.
Мабуть R стає електронною.
Мабуть F-H-E-R стає S-U-R-E. Так виявляється, є відображення, а в
цьому випадку є досить безглуздо відображення, якщо хто зрозумів це?
Це те, що називається Rot 13, поворот 13.
Це сама дурна шифрування механізми, тому що буквально щойно
додає 13 до кожного з листів, нерозумно в тому сенсі, що якщо ви просто
є трохи вільного часу на ваших руках і олівець, або ви просто думаю, що це
через у вашій голові, ви можете спробувати всіх можливих доповнень - один, два,
три, крапка, крапка, крапка, від 25 до всього обертати весь алфавіт, і
зрештою, ви зрозумієте, те, що це повідомлення.
Так що якщо ви зробили щось на зразок цього в початковій школі передачі повідомлень вашого
кращий друг, якщо ваш початковій школі Учитель просто прочитати
повідомлення і грубої змушені рішення, Ви, можливо, отримали
Відповіді на це.
>> Тепер, звичайно, в реальному світі, криптографії є ​​більш складним.
Це фрагмент тексту з Комп'ютерна система, яка має ім'я користувача та
паролів, оскільки майже всі наші роблять, і це те, що пароль може
виглядати, якщо зберігаються на жорсткому диск, але в зашифрованому вигляді.
Це не тільки обертання букви А В і В С. Це
набагато складнішою, але використовує те, що зазвичай називають секретним ключем
криптографії.
Ця картина розповідає наступну сюжет з декількома іконами.
>> На лівому, ми маємо те, ми будемо називати простий текст.
У світі криптографії, простий текст тільки вихідне повідомлення
написано англійською або французькою або будь-яку мову взагалі.
Якщо ви хочете зашифрувати його, ми передамо це наочно через замок, так що
деякі види алгоритмів, деякі функції або програми, які хтось написав
що дереться букви, сподіваюся більш складно, ніж просто додавання 13
для кожного з них.
>> Що ви отримуєте з цього процесу в середнього там називається cyphertext.
Так вид сексуального слова.
Це просто означає, що це зашифрований версія простий текст.
І тільки якщо у вас є, що ж таємниця, 13 або мінус 13, ви в змозі
розшифрувати подібне повідомлення.
>> Таким чином, у проблемі встановити два, серед речей ви будете робити, якщо в хакерської
Видання, вам доведеться писати код для зламати ці паролі, з'ясовуючи
те, що вони були і як вони були зашифроване, хоча ми і дати вам трохи
керівництва по дорозі.
У Standard Edition, введемо пару шифрів, шифрування
Механізми, одна називається Цезар, один називається Vigenere, які все ще
обертання шифри, де стає щось, B стає чимось, але
Ви повинні зробити це програмно тому що там дійсно буде таємним
ключ бере участь який зазвичай є число або ключове слово, що тільки
відправником та одержувачем цих повідомлення повинні зрозуміти.
>> Тепер, це насправді має втілень в реальному світі.
Це, наприклад, сирітка Таємні декодер Енні кільце, і ви
може насправді реалізації цих обертання шифри -
Щось стає, B стає щось - з парою коліс,
один на зовнішній стороні, один на внутрішній таке, що якщо повернути колесо або
кільця, ви можете вибудувати листи з різних букв,
отримання секретного коду.
І так як на сьогоднішній день захоплюючим, те, що я думав, що я роблю це трохи
повернення, що якщо ви дозволите телевізор 24 Грудня, ви можете дивитися
фільм до нудоти для 24 годин поспіль.
Але на сьогоднішній день, я відкрию його тут і дати нам тільки дві хвилини
педагогічно відповідних Різдвяна історія з маленькою людиною на ім'я Ральфі.
>> [ВІДТВОРЕННЯ ВІДЕО]
>> -Так буде відомо всім і кожному, що Ральф Паркер Справжнім призначений
Член сирітка Енні таємницю кола і має право на все
почесті і переваги відбуваються ній.
>> -Підпис, сирітка Енні.
Контрассигнуется, П'єр-Андре, в чорнило.
Почесті і переваги вже у віці дев'яти років.
>> [Кричить по радіо]
>> Давай, давай покінчимо з цим.
Мені не потрібні все таке інше про контрабандистів і піратів.
>> -Слухай завтра ніч для заключні пригоди чорного
піратський корабель.
Тепер прийшов час таємних Енні Повідомлення для Вас членами
таємного кола.
Пам'ятайте, діти.
Тільки члени Таємного кола Енні може розшифрувати секретне повідомлення Енні.
Пам'ятайте, що Енні залежно від вас.
Встановіть контакти до B2.
Ось повідомлення.
12, 11, 2 -
>> -Я в моєї першої зустрічі таємницею.
>> -25, 14, 11, 18, 16 -
>> -П'єр був у відмінній сьогодні голос.
Я можу сказати, що повідомлення сьогоднішнього було дійсно важливо.
>> -3, 25.
Ось повідомлення з себе Енні.
Пам'ятайте, не говори нікому.
>> -90 Секунд через, я в єдиному номері У будинку, де дев'ятирічний хлопчик
могла сидіти на самоті і декодування.
Ага, Б. Я пішов до іншого.
E. Перше слово "бути". С. Він долинав простіше.
U. 25.
Це R.
>> -Давай, Ральфі.
Я повинен йти.
>> -Я зараз спущуся, Ма.
Ось здорово.
>> -T. О. Обов'язково.
Будьте впевнені, до чого?
Що було сирітка Енні намагається сказати?
Будьте впевнені, до чого?
>> -Ральфі, Ренді повинен піти.
Не могли б ви вийти?
>> -Все в порядку, мама.
Я зараз вийду.
>> -Я все ближче до тепер.
Напруга була жахливо.
Що це було?
Доля планети може висять на волосині.
>> -Ральфі, повинен йти Ренді.
>> -Я зараз вийду на з глузду з'їхати.
>> -Майже.
Мої пальці полетіли.
Мій розум був сталевий капкан.
Кожну пору вібрації.
Це було майже ясно.
Так, так, так, так, так.
>> -Обов'язково пийте вашої Ovaltine.
Ovaltine?
Вошивої комерційної?
Син сука.
>> [КІНЕЦЬ відеовідтворення]
>> АС 1: Це CS50, і Проблема буде встановити два.
Побачимося на наступному тижні.
>> Доповідач 2: Наступного CS50, це відбувається.
>> Виступаючий 1: Так одна тема у нас немає подивився на досі є
, Що покажчиків на функції.
Тепер, покажчик на функцію тільки адресу громадських
функції, але так само, як -
Син -