[МУЗИКА] DAVID J. Малан: Добре. Це CS50 і це є початком 2-му тижні. І ви пам'ятаєте, що більш останні пару тижнів, ми представили комп'ютер наука і, в свою чергу, програмування. І ми почали розповідь шляхом Подряпина, що графічна мова з медіа-лабораторії Массачусетського технологічного інституту. А потім зовсім недавно, Минулого тижня, ми зробили ввести higher-- A мова нижчого рівня відомі як С, то, що це чисто текстуально. І, дійсно, останній раз, коли ми вивчити в цьому контексті ряд понять. Це, нагадаємо, був дуже Перша програма ми розглянули. І ця програма, досить просто, друкує "Привіт, світ." Але є так багато удаваній магії відбувається. Там ця #include з цих кутових дужках. Там в інт. Там в (анулюються). Там в круглі дужки, фігурні дужки, крапка з комою, і багато іншого. Так, нагадаємо, що ми ввели Подряпину так що ми могли б, в ідеалі, побачити минуле що синтаксис, матеріал, який справді не все, що інтелектуально цікаво, але на ранніх стадіях це, безумовно, трохи складніше щоб обернути ваш розум навколо. І справді, одне з найпоширеніших речі на ранньому етапі в класі програмування, особливо для тих, хто менше зручно, щоб зламатися, і підставляли деякими синтаксичними помилки, не кажучи вже про логічних помилок. І тому серед наших цілей сьогодні, насправді, буде буде оснащувати вас з деякими методи вирішення проблем для того, як щоб краще вирішувати проблеми самі у вигляді налагодження. І ви пам'ятаєте, теж, що среда, ми ввели останній раз був названий CS50 IDE. Це веб-програмне забезпечення, дозволяє програмувати в хмарі, так би мовити, зберігаючи при цьому всі ваші файли разом, як ми знову будемо сьогодні. І нагадаємо, що ми переглянути ці теми тут, серед них функцій, а також петлі, і змінні і логічні вираження, і умови. І насправді дещо більше, що ми в перекладі з нуля світу до світу C. Але основна будівля блоки, так би мовити, дійсно були всі ті ж минулого тижня. Насправді, ми дійсно тільки мали різні шматок головоломки, якщо ви будете. Замість того, що фіолетовий зберегти блок, ми замість того, щоб був PRINTF, який ця функція в С, дозволяє надрукувати що-небудь і відформатувати його на екрані. Ми ввели CS50 Бібліотека, де ви є зараз у вашому розпорядженні get_char, і get_int і get_string, і кілька інших функцій, як ну, за допомогою якого ви можете отримати введення від власної клавіатури користувача. І ми також взяли погляд на речі як these- BOOL і напівкоксу, і подвійні, з плаваючою точкою, INT, long_long рядок. І є навіть інші типи даних в C. Іншими словами, коли ви оголошуєте змінна для зберігання деякого значення, або при реалізації функції яка повертає деяке значення, Ви можете вказати, що тип значення, яке. Це рядок, подібно послідовність символів? Це число, як ціле число? Чи є це з плаваючою точкою значення, чи щось таке? Таким чином, в C, на відміну від нуля, ми насправді почав вказувати, який тип даних ми поверталися або використання. Але, звичайно, ми також зіткнулися з деякі фундаментальні межі обчислень. І зокрема, ця мова C, нагадаємо що ми дивилися на Целочисленное переповнення, реальність що якщо у вас є тільки кінцеве кількість пам'яті або, зокрема, кінцеве число бітів, ви можете розраховувати тільки так високо. І таким чином, ми дивилися на цей приклад тут в результаті чого лічильник в літаку ,, насправді, якщо працює досить довго буде переповнення і результат в програмному забезпеченні фактичний фізичний потенціал помилки. Ми також розглянули плаваючою точка неточностей, реальність що тільки з кінцевим числом бітів, будь то 32 чи 64, ви можете вказати тільки так багато чисел після десяткового дробу, після чого ви починають отримувати неточним. Так, наприклад, одна третина в світ тут, в нашому людському світі, ми знаємо, це просто нескінченне число 3 сек після десяткового дробу. Але комп'ютер не обов'язково являють собою нескінченне число цифр якщо ви тільки дайте йому деякі кінцеве кількість інформації. Так що ми не тільки озброїти вас з більшою силою в плані як Ви могли б виразити себе в клавіатура з точки зору програмування, ми також обмежені, що ви можете реально зробити. І справді, помилки і помилки можуть виникають з цих видів питань. І дійсно, серед тем сьогодні будуть такі теми, як налагодження і насправді, дивлячись під капотом на те, як були введені речі минулого тижня насправді реалізовані так що вам краще зрозуміти, як можливостей та обмеження мови як C. І справді, ми відігніть шари з найпростіших структури даних, то, що називається масив, який Подряпина трапляється називати "список." це трохи відрізняється в цьому контексті. І тоді ми будемо також ввести одне з перший з наших проблем предметно-орієнтованих в CS50, світ криптографія, мистецтво дертися або в шифруванні інформації, так що ви можете відправляти секретні повідомлення і декодувати секретні повідомлення між двома особами, А і В. Тому, перш ніж ми переходу до цього нового світу, давайте спробуємо забезпечити вас з деякими методи, з якими ви можете усунути або зменшити принаймні, деякі розчарувань що ви, ймовірно, стикалися Тільки за минулий тиждень. Насправді, попереду вас such-- деякі з ваші перші проблеми в С і фори, якщо ви схожі на мене, в перший раз ви намагаєтеся надрукувати програму, навіть якщо ви думаєте, логічно Програма досить проста, ви можете дуже добре врізався в стіну, і компілятор не збирається співпрацювати. Роблять або Clang не збирається насправді зробити ваші ставки. І чому це може бути? Що ж, давайте подивимося на, може бути, проста програма. Я збираюся йти вперед і зберегти це в файл навмисно називають buggy0.c, тому що я знаю його бути зіпсований заздалегідь. Але я не міг зрозуміти, що якщо це перший або другий або третій програми що я насправді робить сам. Так що я збираюся йти вперед і закарбувати, Int основний (вакуум). І тоді всередині моїх фігурні дужки, дуже знайомий ( "привіт, world-- зворотної косої межі, п ") - і крапка з комою. Я зберіг файл. Тепер я збираюся піти вниз до мого вікні терміналу і тип роблять buggy0, тому що, знову ж таки, ім'я файлу сьогодні buggy0.c. Так що я типу зробити buggy0, Enter. І, о, господи, пам'ятаєте з останнього часу що без будь-яких повідомлень про помилки це хороша річ. Так що висновок не є хорошою річчю. Але тут я ясно деяку кількість помилок. Таким чином, в першому рядку виведення після введення роблять buggy0, нагадаємо, досить докладний висновок дзвоном в. Під капотом, CS50 IDE налаштований використовувати цілу купу Варіанти з цим компілятором так що у вас немає думати про них. І це все, що перша лінія означає, що починається з Clang. Але після цього, проблеми почати робити їх зовнішній вигляд. Buggy0.c на лінії 3, характер 5, є велика, червона помилка. Що це? Побічно оголошуючи функції бібліотеки PRINTF з типом Int (сопзЬ сЬаг *, ...) [-Werror]. Я маю на увазі, це дуже швидко стає дуже аркан. І, звичайно ж, в першу чергу погляд, ми не будемо очікують, що ви розумієте повнота цього повідомлення. І ось один з уроків на сьогоднішній день відбувається щоб спробувати помітити візерунки, або подібні речі, до помилок ви можете мати зіткнулися в минулому. Так що давайте дражнити тільки одна від одної ті слова, які виглядають знайомими. Великий, червоний помилка явно символом чогось помилитися. беззастережне визнання Бібліотека функцій Printf. Так що навіть якщо я не зовсім розумію, що неявно оголошуючи функції бібліотеки Значить, проблема, звичайно, відноситься до PRINTF якимось чином. І джерело цього питання має справу з оголосивши його. Оголошення функції є згадки про нього в перший раз. І ми використовували термінологію минулого тижня того, щоб оголосити прототип функції у, або з однією лінією у верхній частині вашого власний файл або в так званому файлі заголовка. І в якому файлі зробив ми говоримо минулого тижня, що Printf цитата, Unquote, заявив? В якому файлі знаходиться його прототип? Так що, якщо ви пам'ятаєте, найперше, що я типізованих, майже кожна програма в минулому time-- і випадково хвилину назад почалася набравши myself-- був один here-- hash-- #include