1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] David J. Малан: Все правильно, це CS50, і це 2 00:00:11,630 --> 00:00:14,790 початку тижня дві. 3 00:00:14,790 --> 00:00:16,300 Спасибі. 4 00:00:16,300 --> 00:00:19,000 Давайте почнемо ось з телефонного дзвінка. 5 00:00:19,000 --> 00:00:30,005 Я збираюся набрати 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Це CS50. 7 00:00:31,230 --> 00:00:33,930 Для Shuttle Boy, натисніть 1. 8 00:00:33,930 --> 00:00:36,660 Щоб почати спочатку, натисніть кнопку 9. 9 00:00:36,660 --> 00:00:38,180 David J. Малан: Так він сказав на Shuttle Boy, натисніть 1. 10 00:00:38,180 --> 00:00:41,560 Таким чином, ми збираємося натисніть 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Яке ваше походження? 12 00:00:43,230 --> 00:00:45,340 Для чотирьох, натисніть 1. 13 00:00:45,340 --> 00:00:47,080 Mather, натисніть 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, натисніть 3. 15 00:00:49,240 --> 00:00:51,280 Ламонт, натисніть кнопку 4. 16 00:00:51,280 --> 00:00:53,210 Сувеніри зал, прес 5. 17 00:00:53,210 --> 00:00:55,660 Щоб почати спочатку, натисніть 0. 18 00:00:55,660 --> 00:00:59,590 David J. Малан: Ми будемо натисніть 1 для чотирьох. 19 00:00:59,590 --> 00:01:03,610 CS50: Наступний шаттл йде в цю саму хвилину в PM 1:10 і 20 00:01:03,610 --> 00:01:09,820 Потім в 1:20 вечора, 1:30, 1:40 вечора. 21 00:01:09,820 --> 00:01:12,030 Це CS50. 22 00:01:12,030 --> 00:01:15,570 >> David J. Малан: Так що це голос CS50 в. 23 00:01:15,570 --> 00:01:18,030 І це приклад виду остаточного проектів, 24 00:01:18,030 --> 00:01:19,500 Наприклад, ви можете відкусити до 25 00:01:19,500 --> 00:01:20,600 До кінця семестру. 26 00:01:20,600 --> 00:01:23,840 Наприклад, що shuttleboy.cs50.net існує - 27 00:01:23,840 --> 00:01:28,200 насправді проект, який я вперше написав після того, CS51 28 00:01:28,200 --> 00:01:29,740 тому, коли я був студентом. 29 00:01:29,740 --> 00:01:32,250 І натхнення тут було тоді, все, що вони мали, було 30 00:01:32,250 --> 00:01:34,320 друковані автобус розклад, і не було 31 00:01:34,320 --> 00:01:35,970 Поняття шукає речі в Інтернеті. 32 00:01:35,970 --> 00:01:38,730 А так я начебто голуба в один уїк-енд, налив через 33 00:01:38,730 --> 00:01:41,460 друкованої графіку, і переніс його в комп'ютерній програмі. 34 00:01:41,460 --> 00:01:43,790 У той час, комп'ютерна програма трапилося бути написано 35 00:01:43,790 --> 00:01:47,110 в C. І ви насправді втік, ввівши Shuttle Хлопчик на 36 00:01:47,110 --> 00:01:48,600 блимати підкажуть, як ми робили досі. 37 00:01:48,600 --> 00:01:50,450 Але за ці роки, вона перетворилася на мить 38 00:01:50,450 --> 00:01:51,390 повідомленнями бот. 39 00:01:51,390 --> 00:01:53,970 Вона перетворилася останнім часом в цьому веб-сайті, в 40 00:01:53,970 --> 00:01:57,720 SMS-інструменту, а також в цей голос-інструмент. 41 00:01:57,720 --> 00:02:00,170 І це натякнути на види речей, які ви можете 42 00:02:00,170 --> 00:02:02,380 зробити для себе до кінця семестру. 43 00:02:02,380 --> 00:02:05,490 >> Наприклад, там, версія СМС Shuttle Boy відбувається 44 00:02:05,490 --> 00:02:06,510 працювати як слід. 45 00:02:06,510 --> 00:02:10,880 Якщо, на ваш мобільний телефон, відправити текстове повідомлення на 41411 і 46 00:02:10,880 --> 00:02:14,300 потім відправити спеціальну sboy символ, для Shuttle Boy, 47 00:02:14,300 --> 00:02:18,350 слід А і В, де А і B походження є 48 00:02:18,350 --> 00:02:19,070 пункт призначення - 49 00:02:19,070 --> 00:02:21,030 Наприклад, Boylston космічної Quad - 50 00:02:21,030 --> 00:02:23,330 те, що ви повинні повернутися протягом декількох секунд текст 51 00:02:23,330 --> 00:02:25,820 Повідомлення від Shuttle Boy кажу вам точно, коли 52 00:02:25,820 --> 00:02:28,990 Наступні кілька шаттли, з цієї точки збираюся, що 53 00:02:28,990 --> 00:02:29,640 точці В. 54 00:02:29,640 --> 00:02:32,510 І це більш загальний приклад того, що відомо як 55 00:02:32,510 --> 00:02:33,920 використанням API. 56 00:02:33,920 --> 00:02:36,930 >> Так, наприклад, це тут просто shuttleboy.cs50.net, 57 00:02:36,930 --> 00:02:39,300 фактичний веб-втілення цього. 58 00:02:39,300 --> 00:02:42,480 Але дані, які підкреслюють цю та інші програми, які CS50 59 00:02:42,480 --> 00:02:45,560 розроблені всі піддані всім тут у вигляді 60 00:02:45,560 --> 00:02:49,340 з API-інтерфейси, інтерфейси прикладного програмування. 61 00:02:49,340 --> 00:02:52,220 І це тільки химерний спосіб сказати, що люди, як ми на 62 00:02:52,220 --> 00:02:56,010 Інтернет та інші провели деякий час на створення 63 00:02:56,010 --> 00:02:59,970 Програмне забезпечення, яке можна використовувати для того, щоб отримати дані від нас і 64 00:02:59,970 --> 00:03:02,510 потім побудувати програми поверх 65 00:03:02,510 --> 00:03:03,840 цього набору даних. 66 00:03:03,840 --> 00:03:06,610 Так, наприклад, цей API Shuttle Boy сторінці тут, які 67 00:03:06,610 --> 00:03:09,390 виявляється в CS50 керівництва, по суті документів 68 00:03:09,390 --> 00:03:13,080 як ви можете йти про з'ясування CS50 сервери для зберігання даних. 69 00:03:13,080 --> 00:03:16,240 Наприклад, якщо ви знайомі з CSV файлами, кома 70 00:03:16,240 --> 00:03:18,940 значення, розділені, це просто як би швидко і брудно 71 00:03:18,940 --> 00:03:20,310 Excel-подібні файли. 72 00:03:20,310 --> 00:03:23,110 Таким чином, ви можете попросити Shuttle Boy для всіх даних на всіх 73 00:03:23,110 --> 00:03:25,090 будинків і їх GPS координати, і ви отримаєте 74 00:03:25,090 --> 00:03:27,300 тому, по суті, електронними таблицями так, що 75 00:03:27,300 --> 00:03:30,820 Ви можете читати в програму власних, а потім 76 00:03:30,820 --> 00:03:33,250 отримання результатів, як Shuttle Хлопчик сам 77 00:03:33,250 --> 00:03:34,160 , Трапляється, роблять. 78 00:03:34,160 --> 00:03:37,030 Для тих, хто більш знайомі, більш сучасні уявлення даних 79 00:03:37,030 --> 00:03:39,420 включають JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Щось прийде до вас на 81 00:03:40,620 --> 00:03:41,720 До кінця семестру. 82 00:03:41,720 --> 00:03:45,440 >> Але знову ж, це всього лише одна з кількох власних API, CS50 в. 83 00:03:45,440 --> 00:03:48,320 І захоплююча річ зараз, у ці дні, Facebook і 84 00:03:48,320 --> 00:03:51,110 Twitter і Google, і майже кожен з популярного веб-сайту 85 00:03:51,110 --> 00:03:54,130 там є якась API, який означає, що якщо ви читаєте 86 00:03:54,130 --> 00:03:56,620 Документація на їх сайті, ви підпишіться на 87 00:03:56,620 --> 00:03:59,980 облікового запису, ви можете почати писати програми на вершині 88 00:03:59,980 --> 00:04:03,680 всі інструменти і дані, які надає компанія існує. 89 00:04:03,680 --> 00:04:06,210 І ось один з наших хлопців викладання пару років тому 90 00:04:06,210 --> 00:04:07,620 написав версію Mac про це. 91 00:04:07,620 --> 00:04:10,990 Таким чином, по посиланню під назвою Mac тут, в лівому верхньому куті, ви можете насправді 92 00:04:10,990 --> 00:04:13,940 скачати віджети Mac OS, яка працює на власній Mac, щоб зробити 93 00:04:13,940 --> 00:04:15,040 такі ж речі. 94 00:04:15,040 --> 00:04:17,970 Так що це все про будівництво у верхній частині набору даних, як ці. 95 00:04:17,970 --> 00:04:21,839 Але про це в кінці семестру. 96 00:04:21,839 --> 00:04:25,780 >> Так давайте поринемо в реальному швидко помилка, просто щоб отримати вид 97 00:04:25,780 --> 00:04:27,990 речі розігрівається сьогодні, і згадати про деякі 98 00:04:27,990 --> 00:04:29,660 речі, які ми подивилися на минулому тижні. 99 00:04:29,660 --> 00:04:32,840 Зокрема, дозвольте мені йти вперед і виривати, скажімо, 100 00:04:32,840 --> 00:04:34,080 цей приклад тут. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, це доступно на веб-сайті Звичайно, якщо ви хочете 102 00:04:37,500 --> 00:04:40,250 хотілося, щоб завантажити його і тикати навколо себе. 103 00:04:40,250 --> 00:04:43,520 Але давайте збільшити тут, на цьому досить коротку програму, а просто 104 00:04:43,520 --> 00:04:46,550 Супер-швидке повторення деяких з основних будівельних блоків, які 105 00:04:46,550 --> 00:04:48,880 ми дійсно збираємося просто почати приймати як належне. 106 00:04:48,880 --> 00:04:51,860 >> Таким чином, сині речі, в рядках з 1 по 9, всього лише 107 00:04:51,860 --> 00:04:53,670 софтбол питання. 108 00:04:53,670 --> 00:04:54,590 Так що це просто коментар. 109 00:04:54,590 --> 00:04:56,230 Вони не мають ніякого функціонального сенсу. 110 00:04:56,230 --> 00:04:58,460 Але вони коментар в тому сенсі, що вони зазначається, що 111 00:04:58,460 --> 00:05:02,010 Я, людина, зробив собі так, що в лекції і після 112 00:05:02,010 --> 00:05:04,340 лекції, я можу фактично пам'ятати, що ця програма 113 00:05:04,340 --> 00:05:07,120 не обходиться без того, щоб прочитати його рядок за рядком і 114 00:05:07,120 --> 00:05:08,990 відтворення історії, на мій погляд. 115 00:05:08,990 --> 00:05:11,000 Більш того, якщо я вручаю цю програму, щоб хтось інший, як 116 00:05:11,000 --> 00:05:14,420 Вас, це набагато ясніше для вас, тому що коментарі, як це, 117 00:05:14,420 --> 00:05:16,680 те, що програма насправді роблять, або, принаймні те, що 118 00:05:16,680 --> 00:05:18,210 Програми повинні робити. 119 00:05:18,210 --> 00:05:20,760 Чи ні, це правильно, це зовсім інша справа. 120 00:05:20,760 --> 00:05:25,040 Тепер, С, багаторядкові коментарі, згадаємо, що на лінії 121 00:05:25,040 --> 00:05:27,880 один тут є магічним символом, / *. 122 00:05:27,880 --> 00:05:30,380 Це означає, що ось іде початок коментаря. 123 00:05:30,380 --> 00:05:34,560 І ніщо інше не має значення, поки ви не дійдете до кінця термінатор, 124 00:05:34,560 --> 00:05:36,700 який * /, навпаки. 125 00:05:36,700 --> 00:05:39,120 Тому той факт, що у мене є 80-дивні зірки тут з 126 00:05:39,120 --> 00:05:41,550 Зліва направо насправді просто естетична деталь. 127 00:05:41,550 --> 00:05:43,370 Він не має функціональне значення. 128 00:05:43,370 --> 00:05:44,490 >> Тепер, як про лінії 11? 129 00:05:44,490 --> 00:05:46,940 Що це робити з точки зору непрофесіонала? 130 00:05:51,560 --> 00:05:52,540 Що це? 131 00:05:52,540 --> 00:05:54,280 АУДИТОРІЯ: Включає в себе стандартний. 132 00:05:54,280 --> 00:05:54,740 David J. Малан: Добре, добре. 133 00:05:54,740 --> 00:05:57,500 Таким чином, вона включає в себе бібліотеку stdio.h. 134 00:05:57,500 --> 00:05:58,230 Так що ж це значить? 135 00:05:58,230 --> 00:06:01,570 Ну, всередині цього файлу, stdio.h, які цілий букет 136 00:06:01,570 --> 00:06:03,320 Функція декларації - 137 00:06:03,320 --> 00:06:05,290 тобто код, який написав хтось інший. 138 00:06:05,290 --> 00:06:08,160 І прекрасний приклад функції, яка оголошена в 139 00:06:08,160 --> 00:06:10,250 stdio.h це - 140 00:06:10,250 --> 00:06:11,980 яка коханий зараз? 141 00:06:11,980 --> 00:06:14,300 Так Printf, одним з найбільш поширених з них використовувати, звичайно, 142 00:06:14,300 --> 00:06:15,840 на ранній стадії, з цієї бібліотеки є. 143 00:06:15,840 --> 00:06:19,290 Якщо я виключаю, що рядки коду, Clang буде кричати 144 00:06:19,290 --> 00:06:22,550 у мене щось про використання неоголошених символ. 145 00:06:22,550 --> 00:06:24,930 Щось неоголошеної, напевно, ключове слово, тому що 146 00:06:24,930 --> 00:06:27,770 Ми не повідомив компілятору, що виглядає Printf 147 00:06:27,770 --> 00:06:29,230 подобається, якщо ми включимо цю лінію. 148 00:06:29,230 --> 00:06:31,830 І ще на Землю, насправді, те, що ця лінія кажу, 149 00:06:31,830 --> 00:06:34,890 відкрити цей файл, stdio.h, де він знаходиться на сервері 150 00:06:34,890 --> 00:06:38,200 жорсткий диск або жорсткий диск приладу, і скопіювати його 151 00:06:38,200 --> 00:06:40,240 тут же в моєму файлі, без мого 152 00:06:40,240 --> 00:06:41,730 того, щоб зробити це вручну. 153 00:06:41,730 --> 00:06:44,420 >> Тепер, коли ми приступимо тут до основної, незабаром ми розпочнемо 154 00:06:44,420 --> 00:06:46,900 дражнять один від одного, що Int і те, що порожнеча. 155 00:06:46,900 --> 00:06:48,430 Але зараз, давайте подивимося на три лінії 156 00:06:48,430 --> 00:06:50,350 в межах від 15 до 17. 157 00:06:50,350 --> 00:06:52,250 Такий ось я стверджую, як баггі. 158 00:06:52,250 --> 00:06:54,900 Лінія 7 в своєму коментарі говорить: "Повинна друку 10 159 00:06:54,900 --> 00:06:59,410 зірочками, але не ". Чому це не друк, насправді, 160 00:06:59,410 --> 00:07:01,097 10 таких зірок? 161 00:07:01,097 --> 00:07:02,347 АУДИТОРІЯ: [нерозбірливо]. 162 00:07:05,210 --> 00:07:05,800 David J. Малан: Абсолютно вірно. 163 00:07:05,800 --> 00:07:08,720 Таким чином, помітили, що ми починаємо вважати від 0. 164 00:07:08,720 --> 00:07:10,780 І це насправді конвенції в галузі програмування і 165 00:07:10,780 --> 00:07:13,230 комп'ютерні науки в цілому, починаючи розраховувати 166 00:07:13,230 --> 00:07:14,610 від 0 замість 1. 167 00:07:14,610 --> 00:07:16,690 І це дійсно просто випливає з того факту, що для 168 00:07:16,690 --> 00:07:18,940 Наприклад, коли у нас було вісім чоловік на сцені, коли 169 00:07:18,940 --> 00:07:20,680 ніхто не піднімав свої руки, вони були 170 00:07:20,680 --> 00:07:22,340 Всі ефективного нулі. 171 00:07:22,340 --> 00:07:24,260 А так це просто вид комп'ютера конвенції, з тим, 172 00:07:24,260 --> 00:07:26,030 Таким чином, щоб почати відлік з 0. 173 00:07:26,030 --> 00:07:29,130 Якщо це найменше число можна представити у двійковому вигляді. 174 00:07:29,130 --> 00:07:32,270 >> Так от ми почали ініціалізації я до 0. 175 00:07:32,270 --> 00:07:34,230 Ми встановили я дорівнює 0. 176 00:07:34,230 --> 00:07:37,780 Але потім я зробив цю помилку тут, кажучи, що я менше або 177 00:07:37,780 --> 00:07:38,820 дорівнює 10. 178 00:07:38,820 --> 00:07:41,700 Але якщо ви думаєте, що за допомогою, якщо у мене починаються з 0, а потім я йду 179 00:07:41,700 --> 00:07:46,410 до 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, на самом деле я збираюся 180 00:07:46,410 --> 00:07:49,980 роздрукуйте 11 зірок на екран, тому що я виросла 181 00:07:49,980 --> 00:07:52,410 до і дорівнює 10. 182 00:07:52,410 --> 00:07:55,090 Так легко виправити, от тоді це що? 183 00:07:55,090 --> 00:07:56,070 АУДИТОРІЯ: [нерозбірливо]. 184 00:07:56,070 --> 00:07:57,350 David J. Малан: просто змініть його менше. 185 00:07:57,350 --> 00:07:59,700 Якщо ви дійсно хочете, ви можете зробити це. 186 00:07:59,700 --> 00:08:01,370 Але в цілому, це осудливо. 187 00:08:01,370 --> 00:08:04,020 І так починаємо рахувати від 0 лише то ви повинні 188 00:08:04,020 --> 00:08:05,510 Зазвичай звикнути. 189 00:08:05,510 --> 00:08:07,810 Тепер, що вся ця конструкція сама по собі? 190 00:08:07,810 --> 00:08:10,640 Ця лінія 15 demarks циклу. 191 00:08:10,640 --> 00:08:12,510 Так, не є функцією. 192 00:08:12,510 --> 00:08:13,640 Це просто заява. 193 00:08:13,640 --> 00:08:16,180 Це циклічної конструкцією, як ми бачили в Scratch. 194 00:08:16,180 --> 00:08:17,600 І вона складається з трьох частин. 195 00:08:17,600 --> 00:08:19,740 Зверніть увагу, що це перша частина, щоб 196 00:08:19,740 --> 00:08:21,350 Зліва від крапки з комою. 197 00:08:21,350 --> 00:08:24,200 Там в середній частині між двома точками з комою. 198 00:08:24,200 --> 00:08:26,250 А тут ще права частина праворуч 199 00:08:26,250 --> 00:08:27,640 друга коми. 200 00:08:27,640 --> 00:08:31,822 Тепер, перша з цих що робить? 201 00:08:31,822 --> 00:08:33,679 АУДИТОРІЯ: [нерозбірливо]. 202 00:08:33,679 --> 00:08:34,270 David J. Малан: Back туди? 203 00:08:34,270 --> 00:08:34,816 Так? 204 00:08:34,816 --> 00:08:35,980 АУДИТОРІЯ: ініціалізація. 205 00:08:35,980 --> 00:08:36,850 >> David J. Малан: ініціалізація. 206 00:08:36,850 --> 00:08:37,840 Так що ж це значить? 207 00:08:37,840 --> 00:08:40,690 Ми оголосили змінну я. 208 00:08:40,690 --> 00:08:43,840 Це типу INT, тому що я вказав Int я. 209 00:08:43,840 --> 00:08:46,470 І я ініціалізації я зі значенням 0. 210 00:08:46,470 --> 00:08:47,730 Так що ж це насправді говорив? 211 00:08:47,730 --> 00:08:50,680 Це фактично говорить на комп'ютер Гей, дай мені достатньо 212 00:08:50,680 --> 00:08:53,660 пам'яті, достатній об'єм оперативної пам'яті, щоб відповідати ряду, а потім покласти 213 00:08:53,660 --> 00:08:56,130 номер 0 в тому, що шматок пам'яті. 214 00:08:56,130 --> 00:08:59,100 І як в сторону, наскільки велика Int зазвичай, принаймні всередині 215 00:08:59,100 --> 00:09:00,280 з приладу? 216 00:09:00,280 --> 00:09:01,000 АУДИТОРІЯ: 32 біт. 217 00:09:01,000 --> 00:09:01,670 David J. Малан: 32 біт. 218 00:09:01,670 --> 00:09:04,890 Значить, мені 32 біт, інакше відомий як 4 байти, 219 00:09:04,890 --> 00:09:07,250 і помістити значення 0 в ньому, що досить легко, тому що 220 00:09:07,250 --> 00:09:09,110 Це просто означає, встановити всі біти в 0. 221 00:09:09,110 --> 00:09:11,690 >> Так от, друга частина тут є стан. 222 00:09:11,690 --> 00:09:14,590 І стан, як випливає з назви, є те, що перевірено 223 00:09:14,590 --> 00:09:18,100 знову і знову, і знову, чи буде це правда чи брехня. 224 00:09:18,100 --> 00:09:21,410 Так що це просто кажу, виконайте такі рядки коду - 225 00:09:21,410 --> 00:09:23,950 а саме рядок 16, тому що це єдиний відступом 226 00:09:23,950 --> 00:09:24,820 внизу - 227 00:09:24,820 --> 00:09:26,980 Поки я менше 10. 228 00:09:26,980 --> 00:09:30,520 І після кожної ітерації цього циклу, зробіть 229 00:09:30,520 --> 00:09:33,840 прирощення, яке в даному випадку я + +. 230 00:09:33,840 --> 00:09:35,580 Тепер, вона не повинна бути я + +. 231 00:09:35,580 --> 00:09:37,610 Це може бути я -. 232 00:09:37,610 --> 00:09:39,860 Але якщо б я зробив це, то, що поведінка збирається 233 00:09:39,860 --> 00:09:41,370 щоб бути ця програма? 234 00:09:41,370 --> 00:09:42,290 АУДИТОРІЯ: Це буде нескінченний цикл. 235 00:09:42,290 --> 00:09:44,060 David J. Малан: Це буде свого роду нескінченний цикл, 236 00:09:44,060 --> 00:09:47,720 якщо нам пощастить після негативного 2 млрд чи близько того. 237 00:09:47,720 --> 00:09:51,320 Може бути, все буде обернути навколо, просто за своєю природою кінцевої 238 00:09:51,320 --> 00:09:53,930 число бітів, які ми виділили для внутр. 239 00:09:53,930 --> 00:09:56,270 Але це, звичайно, збираюся повторювати набагато більше, ніж 10 і 240 00:09:56,270 --> 00:09:58,630 звичайно, більш ніж в 11 разів тут. 241 00:09:58,630 --> 00:10:02,240 >> А тепер, як і в бік, розумієш, що я + +, і я - 242 00:10:02,240 --> 00:10:04,420 насправді просто синтаксичний цукор. 243 00:10:04,420 --> 00:10:07,210 Це просто скорочений запис для того, що трохи більше 244 00:10:07,210 --> 00:10:08,720 явно записати наступним чином: 245 00:10:08,720 --> 00:10:11,200 I = I + 1. 246 00:10:11,200 --> 00:10:13,460 Тобто ідентичні я + +. 247 00:10:13,460 --> 00:10:15,860 Це просто якась виглядає гарніше сказати, що я + +. 248 00:10:15,860 --> 00:10:17,490 Це більш лаконічним, більш читабельним. 249 00:10:17,490 --> 00:10:19,030 І тому більшість людей роблять це замість цього. 250 00:10:19,030 --> 00:10:21,840 Але це ідентичних функціонально 251 00:10:21,840 --> 00:10:22,900 те, що ми тільки що бачили. 252 00:10:22,900 --> 00:10:27,770 Коротше кажучи, швидких рішень тут просто сказати, я ітерація 253 00:10:27,770 --> 00:10:30,690 від 0 до менш ніж 10. 254 00:10:30,690 --> 00:10:32,700 І тоді ми дійсно отримаємо 10 зірок. 255 00:10:32,700 --> 00:10:33,430 >> Так давайте спробуємо це. 256 00:10:33,430 --> 00:10:35,310 Дозвольте мені відкрити термінал в нижній частині. 257 00:10:35,310 --> 00:10:37,420 Дозвольте мені перейти до каталогу, що це дюйма 258 00:10:37,420 --> 00:10:40,030 І я збираюся зібрати його вручну за допомогою Clang на даний момент. 259 00:10:40,030 --> 00:10:44,880 І я збираюся зібрати це як buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 А тепер buggy1, чому немає такого файлу або каталогу 261 00:10:50,280 --> 00:10:52,026 buggy1 називається? 262 00:10:52,026 --> 00:10:53,850 АУДИТОРІЯ: [нерозбірливо]. 263 00:10:53,850 --> 00:10:54,240 David J. Малан: Так. 264 00:10:54,240 --> 00:10:55,420 Так що це насправді називається a.out. 265 00:10:55,420 --> 00:10:57,480 Так Нагадаємо якщо ви просто запустіть Clang, де Clang є 266 00:10:57,480 --> 00:11:00,420 компілятор, а не вказати ім'я, яке ви хочете 267 00:11:00,420 --> 00:11:03,550 дати вашої програми, це буде за замовчуванням a.out. 268 00:11:03,550 --> 00:11:05,030 Так адже якщо я Ls - 269 00:11:05,030 --> 00:11:05,510 упс. 270 00:11:05,510 --> 00:11:07,680 І я didn't - чорно-білий питання деякі з 271 00:11:07,680 --> 00:11:08,840 Ви стикалися була виправлена. 272 00:11:08,840 --> 00:11:10,670 Але дозвольте мені зробити це. 273 00:11:10,670 --> 00:11:14,570 Там у нас є a.out на лівій стороні. 274 00:11:14,570 --> 00:11:17,360 Тому ми повинні працювати a.out замість buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Отже, дозвольте мені йти вперед і робити це. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Enter. 277 00:11:22,840 --> 00:11:26,160 І я, мабуть, не робити? 278 00:11:26,160 --> 00:11:26,620 АУДИТОРІЯ: Зберегти. 279 00:11:26,620 --> 00:11:27,390 David J. Малан: Врятуйте мою файл. 280 00:11:27,390 --> 00:11:31,520 Так що легко вирішується, натиснувши Control S, або збирається 281 00:11:31,520 --> 00:11:33,450 Файл, Зберегти як і в більшості програм. 282 00:11:33,450 --> 00:11:36,360 Відпусти мене сюди, очистити екран, запустіть його знову. 283 00:11:36,360 --> 00:11:37,960 І є ще помилка. 284 00:11:37,960 --> 00:11:41,618 Так що ж відбувається - 285 00:11:41,618 --> 00:11:42,980 АУДИТОРІЯ: Ви не компілювати. 286 00:11:42,980 --> 00:11:44,040 David J. Малан: А, добре. 287 00:11:44,040 --> 00:11:45,010 Я не компіляції. 288 00:11:45,010 --> 00:11:47,250 Як ідіот, я дивлюся на код, щоб подивитися, що трапилося. 289 00:11:47,250 --> 00:11:51,275 Таким чином, брязкіт buggy1.c, тепер a.out. 290 00:11:51,275 --> 00:11:52,640 І уф, збережені. 291 00:11:52,640 --> 00:11:55,090 >> Так це виглядає трохи потворно, тому що немає нової лінії 292 00:11:55,090 --> 00:11:55,970 в якому місці програми. 293 00:11:55,970 --> 00:11:57,390 Але знову ж, це тільки естетична деталь. 294 00:11:57,390 --> 00:11:59,430 І принаймні, якщо вважати ті, ми повинні 295 00:11:59,430 --> 00:12:01,160 тепер бачимо 10 таких зірок. 296 00:12:01,160 --> 00:12:03,260 Ну, що ця друга розминка, наприклад? 297 00:12:03,260 --> 00:12:07,750 Таким чином, в buggy2, я стверджую, що ця версія теж буде друкувати 298 00:12:07,750 --> 00:12:10,110 10 зірок, по одному на рядок. 299 00:12:10,110 --> 00:12:12,340 Тому цього разу, у мене є символ нового рядка, просто щоб переконатися, 300 00:12:12,340 --> 00:12:13,520 речі трохи красивішим. 301 00:12:13,520 --> 00:12:15,410 Але замість того, що я отримую це. 302 00:12:15,410 --> 00:12:19,590 Отже, дозвольте мені зробити брязкіт buggy2.c, Enter. 303 00:12:19,590 --> 00:12:21,790 Тепер він знову закликав a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Я бачу тільки одну нову лінію, тільки сама остання нова лінія, яка 306 00:12:26,900 --> 00:12:29,370 переміщує моє запрошення на наступний рядок. 307 00:12:29,370 --> 00:12:32,660 І все ж ясно я печаткою *, то нова лінія, 308 00:12:32,660 --> 00:12:33,990 *, Те новий рядок. 309 00:12:33,990 --> 00:12:35,490 Але те, що помилка тут? 310 00:12:35,490 --> 00:12:35,974 Так? 311 00:12:35,974 --> 00:12:37,224 АУДИТОРІЯ: [нерозбірливо]. 312 00:12:39,850 --> 00:12:40,470 >> David J. Малан: Абсолютно вірно. 313 00:12:40,470 --> 00:12:44,110 Таким чином, на відміну від деяких мов, як Python, де відступи 314 00:12:44,110 --> 00:12:46,030 насправді має функціональне значення, в 315 00:12:46,030 --> 00:12:47,150 мову, як C - 316 00:12:47,150 --> 00:12:49,140 Як ми побачимо, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 відступ насправді просто для користі людей. 318 00:12:51,940 --> 00:12:55,690 Тому той факт, що я червоний рядок 16 і 17 відмінно виглядає, 319 00:12:55,690 --> 00:12:57,530 але він не має функціональне значення тут. 320 00:12:57,530 --> 00:13:00,700 Якщо я хочу обидві лінії для виконання як частина для 321 00:13:00,700 --> 00:13:05,140 петля, то я повинен вкласти їх у фігурні дужки, роблячи це. 322 00:13:05,140 --> 00:13:08,540 Ви можете тільки скоротити цей кут і опустити фігурні дужки, якщо 323 00:13:08,540 --> 00:13:10,036 в чому справа? 324 00:13:10,036 --> 00:13:10,410 АУДИТОРІЯ: Тільки один рядок. 325 00:13:10,410 --> 00:13:11,130 David J. Малан: Тільки один рядок. 326 00:13:11,130 --> 00:13:15,280 Ось тільки вигляд гарний вид синтаксису докладно, щоб 327 00:13:15,280 --> 00:13:17,900 Ви не витрачаєте час на написання три лінії, дві з яких є 328 00:13:17,900 --> 00:13:20,040 фігурні дужки, лише б написати жодного рядка коду. 329 00:13:20,040 --> 00:13:21,650 Але якщо у вас дві або більше ліній, ми 330 00:13:21,650 --> 00:13:22,860 дійсно потрібно це зробити. 331 00:13:22,860 --> 00:13:24,210 >> Так що тепер дозвольте мені зберегти це. 332 00:13:24,210 --> 00:13:27,140 Дозвольте мені йти вперед і повторно запустити Clang. 333 00:13:27,140 --> 00:13:31,375 Тоді дозвольте мені повторно a.out, і тепер я отримую їх по одному на рядок. 334 00:13:31,375 --> 00:13:33,670 Тепер, a.out знову це свого роду німий ім'я для програми. 335 00:13:33,670 --> 00:13:37,500 Як я можу сказати Clang насправді дати мені ім'я файлу 336 00:13:37,500 --> 00:13:39,820 , Що більш зручно, як buggy2 себе? 337 00:13:43,200 --> 00:13:44,466 Ще трохи ясніше? 338 00:13:44,466 --> 00:13:45,220 АУДИТОРІЯ: [нерозбірливо]. 339 00:13:45,220 --> 00:13:47,810 David J. Малан: ОК, так що я можу насправді взяти дуже 340 00:13:47,810 --> 00:13:51,000 зручний ярлик і просто написати зробити buggy2. 341 00:13:51,000 --> 00:13:53,840 Я не уточнюють. C в цьому випадку, і натисніть Enter. 342 00:13:53,840 --> 00:13:58,530 І те, що робить робить, він компілює buggy2.c для мене 343 00:13:58,530 --> 00:14:00,260 Clang просять це зробити. 344 00:14:00,260 --> 00:14:05,100 Зокрема, він називає Clang, він працює Clang використанні набагато більше, 345 00:14:05,100 --> 00:14:08,540 Аргументи командного рядка або перемикачі, ніж я насправді потрібно. 346 00:14:08,540 --> 00:14:11,270 У свій час ми повернемося до того, що всі ці різні 347 00:14:11,270 --> 00:14:13,810 загадкові вираження через дефіс означає. 348 00:14:13,810 --> 00:14:16,910 Але зараз, ось тільки що врятував мене від праці 349 00:14:16,910 --> 00:14:19,600 того, щоб пам'ятати і того, щоб вводити всі ці 350 00:14:19,600 --> 00:14:21,150 різні дефіс виразів. 351 00:14:21,150 --> 00:14:23,240 І верх в кінцевому підсумку і є 352 00:14:23,240 --> 00:14:25,900 що тепер у мене є buggy2. 353 00:14:25,900 --> 00:14:27,480 Якщо я хочу зробити це вручну, хоча, я 354 00:14:27,480 --> 00:14:28,775 може замість цього - 355 00:14:28,775 --> 00:14:34,110 брязкіт-про buggy2, а потім buggy2.c. 356 00:14:34,110 --> 00:14:37,980 І це буде так само дати мені файл з ім'ям buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Коротше кажучи, Clang це компілятор. 358 00:14:39,710 --> 00:14:43,080 Зробити це просто зручний інструмент, який ми будемо використовувати більш 359 00:14:43,080 --> 00:14:44,420 і більше, тому що вона тільки починає 360 00:14:44,420 --> 00:14:47,330 спростити речі для нас. 361 00:14:47,330 --> 00:14:49,430 І ми повертаємо 0, нарешті. 362 00:14:49,430 --> 00:14:51,890 На даний момент, тільки тому, що, але ми почнемо дражнять, що частина 363 00:14:51,890 --> 00:14:52,930 Сьогодні і в середу. 364 00:14:52,930 --> 00:14:55,560 Будь-які питання по будь-якій з цього? 365 00:14:55,560 --> 00:14:56,450 Так? 366 00:14:56,450 --> 00:14:58,234 АУДИТОРІЯ: [нерозбірливо] 367 00:14:58,234 --> 00:15:00,020 Ls в лапках там? 368 00:15:00,020 --> 00:15:01,710 David J. Малан: OK. 369 00:15:01,710 --> 00:15:05,880 Коли я набрав Ls в лапки, що було мені робити деякі магії 370 00:15:05,880 --> 00:15:07,160 за лаштунками, щоб виправити помилку. 371 00:15:07,160 --> 00:15:09,370 Я забув, як ми говорили багато хто з вас на 372 00:15:09,370 --> 00:15:11,600 дошки обговорень робити - 373 00:15:11,600 --> 00:15:17,220 Ми зробимо це зараз - Суду ням-у оновлення appliance50. 374 00:15:17,220 --> 00:15:19,790 Ой, що це пишеться справа. 375 00:15:19,790 --> 00:15:23,240 Таким чином, прилад, як операційна система. 376 00:15:23,240 --> 00:15:25,650 Це працює ця операційна система під назвою Fedora. 377 00:15:25,650 --> 00:15:27,450 А тепер через мою повільне підключення до Інтернету, у мене 378 00:15:27,450 --> 00:15:28,260 дійсно обливали його. 379 00:15:28,260 --> 00:15:31,620 Так працює Суду оновлення ням, як ми говоримо вам, щоб зробити в 380 00:15:31,620 --> 00:15:34,080 Проблема набору, по суті, як працює автоматичне оновлення 381 00:15:34,080 --> 00:15:35,420 У Mac OS або Windows. 382 00:15:35,420 --> 00:15:37,280 І причина для виконання цього на самому початку 383 00:15:37,280 --> 00:15:39,640 Проблема набору тому що, коли ми створили прилад, я 384 00:15:39,640 --> 00:15:42,480 переплуталися, і я випадково зробив всі Ваші програми виглядають 385 00:15:42,480 --> 00:15:45,210 чорне на чорному екрані, який є, чому ви не бачите їх 386 00:15:45,210 --> 00:15:45,860 за замовчуванням. 387 00:15:45,860 --> 00:15:48,020 Але остання версія приладу фіксує це. 388 00:15:48,020 --> 00:15:50,500 І я полагоджу, що під час перерви, коли я в Інтернет 389 00:15:50,500 --> 00:15:51,280 підключення. 390 00:15:51,280 --> 00:15:54,630 >> Таким чином, котирування просто приховує свою помилку, дуже обережно, 391 00:15:54,630 --> 00:15:55,730 по-видимому. 392 00:15:55,730 --> 00:15:56,980 Інші питання? 393 00:15:59,750 --> 00:16:00,668 Так? 394 00:16:00,668 --> 00:16:02,012 АУДИТОРІЯ: Де зробити взялося? 395 00:16:02,012 --> 00:16:03,810 [Нерозбірливо] 396 00:16:03,810 --> 00:16:04,280 David J. Малан: Хороше питання. 397 00:16:04,280 --> 00:16:05,460 Де зробити взялося? 398 00:16:05,460 --> 00:16:09,390 Це Linux програма, яка існує вже багато років, задовго 399 00:16:09,390 --> 00:16:10,570 Перед CS50. 400 00:16:10,570 --> 00:16:12,930 І він приходить з операційної системи, як Fedora. 401 00:16:12,930 --> 00:16:14,830 Він не приходить з CS50 бібліотеки. 402 00:16:14,830 --> 00:16:17,560 Насправді, єдине, що від CS50 бібліотеки 403 00:16:17,560 --> 00:16:20,470 до цих пір, що ми бачили, є GetString, GetInt, всі 404 00:16:20,470 --> 00:16:25,550 Отримати ці функції, і слово рядка, і деякі 405 00:16:25,550 --> 00:16:26,575 ступеня, слово BOOL. 406 00:16:26,575 --> 00:16:29,180 Але ми будемо дражнити, що, крім, коли ми зануримося в CS50 407 00:16:29,180 --> 00:16:30,580 сам прилад. 408 00:16:30,580 --> 00:16:32,820 >> Так що, так, ще одне питання. 409 00:16:32,820 --> 00:16:36,636 АУДИТОРІЯ: Коли ви сказали зробити, а потім баггі, яким чином 410 00:16:36,636 --> 00:16:39,980 комп'ютер знаю [нерозбірливо]? 411 00:16:39,980 --> 00:16:40,520 David J. Малан: Хороше питання. 412 00:16:40,520 --> 00:16:43,830 Отже, коли ви просто запустіть зробити buggy1 або зробити buggy2, як 413 00:16:43,830 --> 00:16:45,220 робить знаєте? 414 00:16:45,220 --> 00:16:49,900 Таким чином, за замовчуванням, якщо ви введете зробити buggy1, зробити вигляд для 415 00:16:49,900 --> 00:16:52,330 Файл називається buggy1.c. 416 00:16:52,330 --> 00:16:55,570 І тоді вона виконує відповідні команди Clang, 417 00:16:55,570 --> 00:17:00,380 тим самим перекриваючи файл за замовчуванням, вихідний файл з ім'ям a.out. 418 00:17:00,380 --> 00:17:03,670 У самому справі, якщо ми подивимося на те, що зробити, що - 419 00:17:03,670 --> 00:17:04,839 Давайте вийти з цього. 420 00:17:04,839 --> 00:17:09,530 Якщо ми подивимося на те, що робить насправді роблять, роблять buggy2, 421 00:17:09,530 --> 00:17:10,470 він вже в курсі. 422 00:17:10,470 --> 00:17:13,020 Отже, дозвольте мені видалити RM команди, 423 00:17:13,020 --> 00:17:14,319 програми я написав раніше. 424 00:17:14,319 --> 00:17:17,319 Введення Y-E-S, щоб підтвердити, що я хочу, щоб видалити його. 425 00:17:17,319 --> 00:17:20,480 Якщо я зараз робимо, зверніть увагу, що в цій дуже довгої лінії, 426 00:17:20,480 --> 00:17:22,980 Тобто це остання річ тут,-про buggy2. 427 00:17:22,980 --> 00:17:26,959 Всі роблять це робить, до речі, що аргумент, так би мовити, 428 00:17:26,959 --> 00:17:29,665 Clang, так що я не доведеться вводити його собі. 429 00:17:29,665 --> 00:17:32,660 >> Гаразд, пару швидких адміністративних 430 00:17:32,660 --> 00:17:33,470 оголошеннях. 431 00:17:33,470 --> 00:17:36,940 Таким чином, для розділів, які офіційно почалися майбутній 432 00:17:36,940 --> 00:17:38,970 Неділя, ви завжди хочете принести, якщо 433 00:17:38,970 --> 00:17:40,120 у вас є, ноутбук. 434 00:17:40,120 --> 00:17:42,570 Якщо у вас немає ноутбука, не дотягнутися до мене 435 00:17:42,570 --> 00:17:43,580 падіння мені листа. 436 00:17:43,580 --> 00:17:44,810 І ми будемо з'ясувати робочого процесу. 437 00:17:44,810 --> 00:17:47,100 Що взагалі ви знайдете в розділі є те, що вони є частиною 438 00:17:47,100 --> 00:17:48,770 концептуальних, частина практичний. 439 00:17:48,770 --> 00:17:52,190 Ми спеціально використати частину питань, частина з 440 00:17:52,190 --> 00:17:54,110 Проблема тижня набору, щоб пройти через деякі з 441 00:17:54,110 --> 00:17:55,820 концептуального матеріалу лекції. 442 00:17:55,820 --> 00:17:57,480 І це все, що в поточному наборі проблеми. 443 00:17:57,480 --> 00:18:00,010 І ми також зануритися в деяких практичних діях, іноді 444 00:18:00,010 --> 00:18:02,190 які повинні будуть бути представлені, іноді 445 00:18:02,190 --> 00:18:02,830 яка не буде. 446 00:18:02,830 --> 00:18:04,630 Наприклад, це перша тиждень, вони призначені як 447 00:18:04,630 --> 00:18:05,780 розминку вправи. 448 00:18:05,780 --> 00:18:07,800 І ви побачите, що ці проблеми дійсно так. 449 00:18:07,800 --> 00:18:10,220 Вони призначені, щоб бути досить маленьким, але не обов'язково 450 00:18:10,220 --> 00:18:13,100 тривіальних програм, щоб написати, що не обов'язково 451 00:18:13,100 --> 00:18:16,230 захоплюючих і самі по собі, але хороші можливості для 452 00:18:16,230 --> 00:18:19,620 практикуватися з синтаксисом, з новими функціями, в комфорті 453 00:18:19,620 --> 00:18:21,900 розділ, де у вас є кілька своїх однокласників представити у вигляді 454 00:18:21,900 --> 00:18:22,870 а також ваші TF. 455 00:18:22,870 --> 00:18:26,210 >> І що ми будемо робити протягом довгого часу, це використовувати інструмент під назвою CS50 простору, 456 00:18:26,210 --> 00:18:28,940 якої замість простого використання CS50 Appliance, ви 457 00:18:28,940 --> 00:18:32,450 Замість переходу на веб-сторінку в браузері, де ви зможете 458 00:18:32,450 --> 00:18:35,610 писати код, у вікні браузера при розділі. 459 00:18:35,610 --> 00:18:38,240 І потім, якщо ви виберете, ваш хлопець навчання можна показати, 460 00:18:38,240 --> 00:18:40,980 те, що це ви друкуєте на екрані у Вашому браузері 461 00:18:40,980 --> 00:18:43,930 вікна на фронті класу, будь то анонімно або 462 00:18:43,930 --> 00:18:47,250 публічно, так, щоб він або вона може пройти через с 463 00:18:47,250 --> 00:18:50,080 однокласниками, що ти зробив добре, що ви не дуже добре. 464 00:18:50,080 --> 00:18:52,750 І ще, будьте впевнені, все це може бути красиво видається. 465 00:18:52,750 --> 00:18:54,410 Але це буде хороша можливість для набагато більш 466 00:18:54,410 --> 00:18:56,810 інтерактивності, ніж щось подібне лекції дозволяє. 467 00:18:56,810 --> 00:18:58,910 >> У той же час, ми будемо мати ці речі називають супер 468 00:18:58,910 --> 00:19:01,610 розділам, які не є обов'язковими, але відкриті для всіх в 469 00:19:01,610 --> 00:19:04,030 клас, так що ви можете зробити це в сукупності для більш 470 00:19:04,030 --> 00:19:05,190 Проблема встановити один. 471 00:19:05,190 --> 00:19:06,010 Ось графік. 472 00:19:06,010 --> 00:19:08,870 Це також розміщена на домашній сторінці cs50.net. 473 00:19:08,870 --> 00:19:10,850 Зверніть увагу, що там буде хакера конкретних 474 00:19:10,850 --> 00:19:12,430 завтрашній день. 475 00:19:12,430 --> 00:19:15,460 І ми будемо знімати до сьогоднішнього дня і одну завтра, і опублікувати ці 476 00:19:15,460 --> 00:19:16,720 Інтернет протягом 24 годин. 477 00:19:16,720 --> 00:19:19,370 Так що, якщо ви не можете зробити будь-який з цих часів, аби не хвилюватися. 478 00:19:19,370 --> 00:19:22,720 І знову, розклад на форумі в cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> З точки зору секціонування себе, ви повинні були отримати 480 00:19:25,350 --> 00:19:28,520 по електронній пошті з інструкціями по перейдіть на головну сторінку курсу, щоб знайти 481 00:19:28,520 --> 00:19:29,610 Ваші розділі. 482 00:19:29,610 --> 00:19:32,890 Якщо життя змінилося, і ви повинні змінити свій розділ, 483 00:19:32,890 --> 00:19:33,560 не проблема. 484 00:19:33,560 --> 00:19:37,900 Поверніться в той же URL, cs50.net/section, єдине, 485 00:19:37,900 --> 00:19:40,090 і ви будете заповнити подібну форму, так що ви можете 486 00:19:40,090 --> 00:19:41,260 Потім дайте нам ваші уподобання. 487 00:19:41,260 --> 00:19:43,360 І ми будемо слідувати до до кінця тижня про те, що ми можемо 488 00:19:43,360 --> 00:19:44,240 розмістити. 489 00:19:44,240 --> 00:19:49,530 Минулого тижня, нагадаємо, що ми запропонували використовувати Обговорити CS50, 490 00:19:49,530 --> 00:19:51,370 обговорення курсу інструменту, в лекції. 491 00:19:51,370 --> 00:19:53,680 Так що ми були на 40 запитань, які були задані і 492 00:19:53,680 --> 00:19:54,720 відповів під час лекції. 493 00:19:54,720 --> 00:19:56,280 Так що, здавалося, працювало добре, тому ми продовжуватимемо 494 00:19:56,280 --> 00:19:57,180 намагається це зробити. 495 00:19:57,180 --> 00:19:59,600 Якщо під час лекції, ви не просто відчувати себе комфортно підвищення 496 00:19:59,600 --> 00:20:00,780 Вашу руку, не проблема. 497 00:20:00,780 --> 00:20:04,640 До cs50.net/discuss, розміщувати там, і один з наших навчання 498 00:20:04,640 --> 00:20:07,270 стипендіати будуть або відповісти на нього в електронному вигляді або підвищити їх 499 00:20:07,270 --> 00:20:10,620 руки від вашого імені анонімно, щоб запитати, в залежності 500 00:20:10,620 --> 00:20:12,470 від характеру питання. 501 00:20:12,470 --> 00:20:15,000 І з точки зору зворотного зв'язку, як правило, psets буде 502 00:20:15,000 --> 00:20:16,760 повернуті протягом тижня. 503 00:20:16,760 --> 00:20:19,080 Тому що це займає деякий час для секцій для досягнення 504 00:20:19,080 --> 00:20:22,430 рівновазі, перші PSET, 0 і 1, буде трохи 505 00:20:22,430 --> 00:20:24,130 відкладено, оскільки речі заспокоїтися. 506 00:20:24,130 --> 00:20:27,130 Але слідкуйте за оновленнями, що в найближчі тижні. 507 00:20:27,130 --> 00:20:29,750 >> Гаразд, так що дозвольте мені поставити на мій серйозний 508 00:20:29,750 --> 00:20:31,040 Голос на мить. 509 00:20:31,040 --> 00:20:32,690 Так що це насправді цікавий клімат, щоб бути 510 00:20:32,690 --> 00:20:35,210 мають цю дискусію, що з усіма іншими речами 511 00:20:35,210 --> 00:20:37,310 відбувається на території кампусу, що відносяться до них. 512 00:20:37,310 --> 00:20:40,220 Але CS50, безумовно, були свої історії даного 513 00:20:40,220 --> 00:20:43,360 теми, в тій мірі, кожен рік, це, звичайно, для багатьох 514 00:20:43,360 --> 00:20:46,910 років, Ad-плати приблизно на 3% в класі. 515 00:20:46,910 --> 00:20:51,620 Це самий останній рік, 2011, CS50 Ad-сіли 35 студентів. 516 00:20:51,620 --> 00:20:54,120 Це не так, я думаю, через відсутність ясності. 517 00:20:54,120 --> 00:20:56,760 Зрозумійте, що в програмі курсу, є сторінки 518 00:20:56,760 --> 00:20:59,020 заяву, що пояснює, де лінії. 519 00:20:59,020 --> 00:21:01,350 У тій же заяві повторюється на кожному з 520 00:21:01,350 --> 00:21:03,070 Проблема задає на першій сторінці. 521 00:21:03,070 --> 00:21:05,760 >> Тому я говорю про це сьогодні на самом деле просто зробити 522 00:21:05,760 --> 00:21:07,030 Люди пам'ятати про це. 523 00:21:07,030 --> 00:21:08,080 І ми спробували різні речі. 524 00:21:08,080 --> 00:21:10,630 І те, що я думав, що ми робимо сьогодні просто скористатися моментом, щоб 525 00:21:10,630 --> 00:21:13,830 реально поглянути на деякі з минулих справ, які придумали. 526 00:21:13,830 --> 00:21:16,160 Замість того, щоб тримати їх як брудні маленькі секрети, насправді 527 00:21:16,160 --> 00:21:19,170 Відзначимо, що студенти зробили і як ми виявили 528 00:21:19,170 --> 00:21:21,630 він і справді, що всеохоплююча мотивації для 529 00:21:21,630 --> 00:21:23,950 навіть ця розмова. 530 00:21:23,950 --> 00:21:27,060 Таким чином, з урахуванням сказаного, лінії по суті це - 531 00:21:27,060 --> 00:21:29,200 Згідно з програмою, ви вітається, рекомендується, щоб 532 00:21:29,200 --> 00:21:30,210 поговорити з однокласниками. 533 00:21:30,210 --> 00:21:31,910 Ось і весь сенс наявності цих спільних 534 00:21:31,910 --> 00:21:34,470 Прийомні години в Annenberg і заохочення людей до 535 00:21:34,470 --> 00:21:35,755 Остаточний проект для спільної роботи. 536 00:21:35,755 --> 00:21:38,590 Але лінія, коли приходить час, щоб дійсно написати 537 00:21:38,590 --> 00:21:39,790 ваше остаточне рішення. 538 00:21:39,790 --> 00:21:42,590 Говорячи англійською, абсолютно нормально, виступаючи в псевдо-код, 539 00:21:42,590 --> 00:21:43,400 абсолютно нормально. 540 00:21:43,400 --> 00:21:46,340 Відправка вашого однокласника PSET, дозволяючи їм виглядати більш 541 00:21:46,340 --> 00:21:48,610 Екран, як руки продовжують друкувати, 542 00:21:48,610 --> 00:21:50,110 на лінії, а також. 543 00:21:50,110 --> 00:21:52,250 Ви подивіться на програму для конкретної лінії. 544 00:21:52,250 --> 00:21:55,850 >> Але тільки, щоб намалювати картину того, як це, на жаль, 545 00:21:55,850 --> 00:21:58,370 реальність, розуміють, що є сайти, які там 546 00:21:58,370 --> 00:22:01,490 мають рішення цього класу і багато інших класів. 547 00:22:01,490 --> 00:22:04,940 Справа в тому, що ви або близько 3% з вас знають, що це таке 548 00:22:04,940 --> 00:22:07,240 означає, що ми знаємо, що це існує. 549 00:22:07,240 --> 00:22:09,340 Справа в тому, що є сайти, як ця, де ви 550 00:22:09,340 --> 00:22:11,540 може платити комусь, щоб насправді зробити ваш безлічі проблем - це було 551 00:22:11,540 --> 00:22:13,450 реальний випадок, який придумав в минулому році. 552 00:22:13,450 --> 00:22:15,790 Це веб-сайт під odesk.com. 553 00:22:15,790 --> 00:22:20,090 І Тіму було ім'я людини, хто був на оголошення 554 00:22:20,090 --> 00:22:24,580 по цьому сайту і запитав когось, щоб зробити його PSET 7 в 555 00:22:24,580 --> 00:22:25,570 даному конкретному випадку. 556 00:22:25,570 --> 00:22:28,350 Ну, odesk.com дуже Google-можливості, і ми теж 557 00:22:28,350 --> 00:22:30,310 дуже добре на пошук в Google. 558 00:22:30,310 --> 00:22:32,360 Тут теж є сайти - і це одна досить 559 00:22:32,360 --> 00:22:34,234 звірячий, чесно кажучи. 560 00:22:34,234 --> 00:22:38,050 [Сміх] 561 00:22:38,050 --> 00:22:39,610 David J. Малан: Найсмішніше про цей сайт, якщо 562 00:22:39,610 --> 00:22:41,970 Ви читали про сторінку, вони говорять про свої корпоративні 563 00:22:41,970 --> 00:22:44,390 культура і як обслуговування клієнтів є їх номер один 564 00:22:44,390 --> 00:22:46,190 пріоритет, щоб переконатися, що ваші завдання отримаєте 565 00:22:46,190 --> 00:22:47,890 Виявилося вчасно. 566 00:22:47,890 --> 00:22:50,580 >> Але з усією серйозністю, знову ж таки, той факт, що ці сайти 567 00:22:50,580 --> 00:22:52,910 існує, розумієте, ми теж обізнані про 568 00:22:52,910 --> 00:22:53,730 ці види сайтів. 569 00:22:53,730 --> 00:22:55,890 І щоб дати вам відчуття того, що це в цілому утворює 570 00:22:55,890 --> 00:22:58,570 бере, ми взагалі не мають великої скандалів, де люди 571 00:22:58,570 --> 00:23:01,080 співпрацюють в будь масовий, а швидше 572 00:23:01,080 --> 00:23:04,540 саме ці нічні хвилини слабкості, коли у вас так 573 00:23:04,540 --> 00:23:07,550 багато належить зробити, це 4:00 ранку, ви вичерпані, і ви 574 00:23:07,550 --> 00:23:09,770 думати про себе, ну, дозвольте мені глянути на моє 575 00:23:09,770 --> 00:23:11,770 сусіда або код мого друга або тому подібне. 576 00:23:11,770 --> 00:23:14,800 І прояви цього, на жаль включати Студентська 577 00:23:14,800 --> 00:23:17,640 Поданні щось подібне до цього й уявлення студентських B 578 00:23:17,640 --> 00:23:20,370 щось на зразок цього, що, безумовно, в комп'ютері 579 00:23:20,370 --> 00:23:23,830 наука класу, дивно легко для комп'ютерних вчених 580 00:23:23,830 --> 00:23:25,690 виявити за допомогою програмного забезпечення. 581 00:23:25,690 --> 00:23:28,410 Це ще одна спільна парадигма, де ви роду 582 00:23:28,410 --> 00:23:31,010 працював поруч з кимось, може бути, кажуть у 583 00:23:31,010 --> 00:23:32,360 Англійська, просто відмінно, псевдокод. 584 00:23:32,360 --> 00:23:35,080 Але потім приходить час, щоб дійсно уявити, і psets 585 00:23:35,080 --> 00:23:37,910 просто отримати обмінялися по електронній пошті або Dropbox або тому подібне. 586 00:23:37,910 --> 00:23:41,120 Але в спробі зробити його менш очевидно, що це 587 00:23:41,120 --> 00:23:44,830 що сталося, то це те, що представлено. 588 00:23:44,830 --> 00:23:47,880 Це теж не спрацював до добре написані шматки 589 00:23:47,880 --> 00:23:50,360 програмне забезпечення, як ми є насправді виявлення 590 00:23:50,360 --> 00:23:51,280 такі речі. 591 00:23:51,280 --> 00:23:53,760 І справді, що ми робимо, це запустити програмне забезпечення, яке порівнює всі 592 00:23:53,760 --> 00:23:55,540 У цьому році в уявленнях проти всіх минулому році 593 00:23:55,540 --> 00:23:57,380 уявлень, проти всього, ми знайшли на 594 00:23:57,380 --> 00:24:00,060 Інтернет, проти кожної роботи сайту там. 595 00:24:00,060 --> 00:24:01,710 Це все дуже автоматизовано. 596 00:24:01,710 --> 00:24:05,665 І так ми робимо це дійсно велика справедливості по відношенню до 97%, які 597 00:24:05,665 --> 00:24:07,760 дійсно працюють їх дуп в цій та в інших 598 00:24:07,760 --> 00:24:11,530 Класи і покласти у всіх цих зусиль, так що робота 599 00:24:11,530 --> 00:24:13,030 в кінцевому рахунку вони представляють, є їх власними. 600 00:24:13,030 --> 00:24:14,220 І я можу піти на цілу вічність. 601 00:24:14,220 --> 00:24:16,030 >> Це всього лише кілька випадків у минулому році. 602 00:24:16,030 --> 00:24:19,350 Кілька студентів представили ці файли однаково для PSET 2, 603 00:24:19,350 --> 00:24:22,460 PSET 3, PSET 4, PSET 5, PSET 6, PSET 9. 604 00:24:22,460 --> 00:24:26,360 У цьому випадку, це був тест 0 і в минулому році, коли два 605 00:24:26,360 --> 00:24:29,570 Студенти представили однаково це пропозиція серед багатьох 606 00:24:29,570 --> 00:24:32,210 інші ", запит типу -" точка, точка, точка. 607 00:24:32,210 --> 00:24:34,530 Таким чином, навіть у класі з 600 чи ми виявити цю 608 00:24:34,530 --> 00:24:36,310 на представлених вікторини. 609 00:24:36,310 --> 00:24:39,080 Коротше кажучи, це - чесно кажучи, я дуже не хочу мати таку 610 00:24:39,080 --> 00:24:41,300 розмова - але це дійсно цілеспрямовані зусилля 611 00:24:41,300 --> 00:24:43,540 У цьому році, щоб спробувати знизити цю цифру. 612 00:24:43,540 --> 00:24:45,650 Тому що навіть якщо ми говоримо такі речі кожен 613 00:24:45,650 --> 00:24:48,100 рік, я думаю, що реальність в тому, зупинився на ньому протягом декількох 614 00:24:48,100 --> 00:24:50,800 Ще секунд ніж зазвичай, і насправді просто вказуючи 615 00:24:50,800 --> 00:24:53,600 що те, що може здатися, що ль, не така велика проблема, принаймні, 616 00:24:53,600 --> 00:24:56,390 згадую цей момент, як в справедливості по відношенню до 617 00:24:56,390 --> 00:25:00,100 себе і своїх однокласників тут. 618 00:25:00,100 --> 00:25:02,480 Так що якщо ви коли-небудь у вас виникли запитання про те, де лінія 619 00:25:02,480 --> 00:25:04,290 це, будь ласка, просто вийти на мене особисто. 620 00:25:04,290 --> 00:25:07,190 Але відповідь завжди, повністю підкреслили в 621 00:25:07,190 --> 00:25:09,090 останню хвилину, грошові кошти в кінці дня. 622 00:25:09,090 --> 00:25:11,080 Або, якщо це справа не маючи ніякого кінця днів, 623 00:25:11,080 --> 00:25:12,900 чесно кажучи, напишіть мені особисто. 624 00:25:12,900 --> 00:25:14,110 Ми що-небудь придумаємо. 625 00:25:14,110 --> 00:25:17,480 Будь ласка, не ставте свій час тут, в Гарварді в небезпеці. 626 00:25:17,480 --> 00:25:18,570 >> Тепер, я думав, що ми повинні підняти настрій, тому я 627 00:25:18,570 --> 00:25:20,264 включити це як наступний слайд. 628 00:25:20,264 --> 00:25:22,770 [Сміх] 629 00:25:22,770 --> 00:25:23,630 David J. Малан: Цей сайт був великим. 630 00:25:23,630 --> 00:25:24,820 Я насправді стало трохи відволікся. 631 00:25:24,820 --> 00:25:26,330 Там в це. 632 00:25:26,330 --> 00:25:29,590 А потім цей був дивовижним. 633 00:25:29,590 --> 00:25:35,190 Гаразд, думаю, що Кошеня пізно ввечері, коли робити 634 00:25:35,190 --> 00:25:36,040 ці рішення. 635 00:25:36,040 --> 00:25:40,110 Гаразд, повернутися до більш приємним і менш серйозні речі, як 636 00:25:40,110 --> 00:25:40,780 умовах. 637 00:25:40,780 --> 00:25:43,900 >> Добре, таким чином, ми коротко говорили про це. 638 00:25:43,900 --> 00:25:46,080 Це те, що, напевно, добре знайомі з 639 00:25:46,080 --> 00:25:47,260 Світ Scratch. 640 00:25:47,260 --> 00:25:49,860 І в світі Scratch, у нас є ця потреба іноді 641 00:25:49,860 --> 00:25:51,110 піти зробити розвилки. 642 00:25:51,110 --> 00:25:54,840 Або зробити те або це, або це інша річ тут. 643 00:25:54,840 --> 00:25:58,990 І коли ми хочемо це зробити, ми можемо використовувати в C зараз, це, якщо 644 00:25:58,990 --> 00:26:00,860 ще побудувати. 645 00:26:00,860 --> 00:26:06,420 А то ось у нас є логічні вирази. 646 00:26:06,420 --> 00:26:09,260 Наприклад, логічні вирази тут, ми можемо або 647 00:26:09,260 --> 00:26:12,260 їх разом, в тому сенсі, що у нас є ця умова або 648 00:26:12,260 --> 00:26:13,200 це умова. 649 00:26:13,200 --> 00:26:15,100 Ми можемо і їх разом, в тому сенсі, що ми хочемо 650 00:26:15,100 --> 00:26:17,710 перевірити цей стан і ця умова. 651 00:26:17,710 --> 00:26:22,440 І тут у нас є перемикач заяву зараз, що це не так 652 00:26:22,440 --> 00:26:26,040 синтаксично схожі на ті види умов, але 653 00:26:26,040 --> 00:26:30,160 дозволяє нам робити еквівалент, якщо, інакше, якщо, інакше, якщо ще 654 00:26:30,160 --> 00:26:34,990 якщо тощо просто перераховуючи їх індивідуальної 655 00:26:34,990 --> 00:26:36,670 від випадку до випадку. 656 00:26:36,670 --> 00:26:38,370 Таким чином, ми побачили тих, хто минулого разу. 657 00:26:38,370 --> 00:26:40,430 І тоді ми почали торкаючись речей, як петлі. 658 00:26:40,430 --> 00:26:42,070 Ми бачили одну з цих мить назад. 659 00:26:42,070 --> 00:26:44,180 Але є ці інші циклічні конструкції. 660 00:26:44,180 --> 00:26:46,370 >> Наприклад, це тут. 661 00:26:46,370 --> 00:26:50,140 Так що поки (умова), зробити цю річ знову і знову. 662 00:26:50,140 --> 00:26:53,070 Таким чином, принципово, що, здається, різних між цим 663 00:26:53,070 --> 00:26:55,760 цикл, і це в той час як петля тут? 664 00:27:00,810 --> 00:27:05,045 Цей цикл, і це в той час як петля. 665 00:27:05,045 --> 00:27:07,840 Так? 666 00:27:07,840 --> 00:27:08,800 Що це? 667 00:27:08,800 --> 00:27:10,050 АУДИТОРІЯ: [нерозбірливо]. 668 00:27:14,632 --> 00:27:15,120 David J. Малан: Добре. 669 00:27:15,120 --> 00:27:17,130 Таким чином, у той час як у циклі умова, там чітко 670 00:27:17,130 --> 00:27:17,940 більше синтаксису. 671 00:27:17,940 --> 00:27:20,560 Там ця ініціалізації, там це оновлення. 672 00:27:20,560 --> 00:27:23,820 У той час як цикл, там просто це умова. 673 00:27:23,820 --> 00:27:26,630 Тому здається, що це трохи урізаний в порівнянні з для 674 00:27:26,630 --> 00:27:28,770 цикл, який означає, що якщо ми хочемо мати змінні, і ми хочемо 675 00:27:28,770 --> 00:27:30,800 мати прирощення, ми насправді потрібно 676 00:27:30,800 --> 00:27:32,500 цього зробити самі. 677 00:27:32,500 --> 00:27:34,420 >> Отже, дозвольте мені йти вперед і відкривати Gedit. 678 00:27:34,420 --> 00:27:36,320 Дозвольте мені перейти на прилад. 679 00:27:36,320 --> 00:27:38,110 І давайте просто зробити швидкий маленький приклад, що 680 00:27:38,110 --> 00:27:40,550 відрізняє одне з них від іншого. 681 00:27:40,550 --> 00:27:42,490 А в глибині моєї свідомості тут, я повинен сказати одну річ. 682 00:27:42,490 --> 00:27:44,120 Я спеціально згадав ім'я Тіма. 683 00:27:44,120 --> 00:27:47,740 Тім був насправді хтось, що студент намагався знайти, щоб зробити 684 00:27:47,740 --> 00:27:48,680 домашнє завдання для них. 685 00:27:48,680 --> 00:27:51,280 У нас не було Тіму в даному розділі. 686 00:27:51,280 --> 00:27:53,690 Так розумію, щоб мені не розкрито студентом, це був не студент. 687 00:27:53,690 --> 00:27:55,720 Це був випадковою людиною в інтернеті робити речі 688 00:27:55,720 --> 00:27:57,180 за дорученням у минулому році. 689 00:27:57,180 --> 00:27:58,670 Таким чином, ми бачимо, що, теж. 690 00:27:58,670 --> 00:28:00,630 Тому в даному випадку тут, дозвольте мені йти вперед і 691 00:28:00,630 --> 00:28:02,810 відкриває новий файл. 692 00:28:02,810 --> 00:28:04,800 File, New. 693 00:28:04,800 --> 00:28:06,050 Це дає мені вкладці тут. 694 00:28:06,050 --> 00:28:09,940 Дозвольте мені йти вперед і зберегти його як loop.c. 695 00:28:09,940 --> 00:28:11,810 Дозвольте мені піти і натисніть кнопку Зберегти. 696 00:28:11,810 --> 00:28:15,340 А потім сюди, давайте йти вперед і почати писати 697 00:28:15,340 --> 00:28:16,605 # Включити . 698 00:28:19,116 --> 00:28:20,520 Дозвольте мені змінити масштаб зображення 699 00:28:20,520 --> 00:28:23,410 Тепер ми будемо робити Int основних (недійсними). 700 00:28:23,410 --> 00:28:30,020 Тепер дозвольте мені йти вперед і робити для (INT = 0; I < 701 00:28:30,020 --> 00:28:33,480 ой, 10; я + +). 702 00:28:33,480 --> 00:28:36,620 А зараз я збираюся йти вперед і не друкувати зірки, що я 703 00:28:36,620 --> 00:28:37,890 робили раніше. 704 00:28:37,890 --> 00:28:39,390 І тоді в кінці цій програмі, ми просто збираємося 705 00:28:39,390 --> 00:28:41,130 Друк на новий рядок, просто так, що мої рядки 706 00:28:41,130 --> 00:28:42,470 не виглядає брудним. 707 00:28:42,470 --> 00:28:45,170 повертати 0. 708 00:28:45,170 --> 00:28:47,610 Здавалося синтаксично правильні? 709 00:28:47,610 --> 00:28:48,040 До цих пір. 710 00:28:48,040 --> 00:28:48,560 Отже, давайте подивимося. 711 00:28:48,560 --> 00:28:51,290 >> Отже, дозвольте мені масштаб, перейдіть в моєму вікні терміналу. 712 00:28:51,290 --> 00:28:54,570 І дозвольте мені йти вперед і запустити цикл, тому що я назвав цю 713 00:28:54,570 --> 00:28:55,690 річ loop.c. 714 00:28:55,690 --> 00:28:56,780 Так що зробіть петлю. 715 00:28:56,780 --> 00:28:57,840 Здається, для компіляції OK. 716 00:28:57,840 --> 00:29:00,210 Дозвольте мені запустити цикл, і тепер Enter. 717 00:29:00,210 --> 00:29:01,820 І це, здається, надрукований 10 зірок. 718 00:29:01,820 --> 00:29:03,780 Так що давайте просто перетворити це в той час як цикл і подивитися, що 719 00:29:03,780 --> 00:29:05,220 види питань, які ми спіткнутися. 720 00:29:05,220 --> 00:29:11,290 Таким чином, замість цього, відпусти мене сюди і сказав, поки я є 721 00:29:11,290 --> 00:29:12,760 менше ніж 10 - 722 00:29:12,760 --> 00:29:14,910 Дозвольте мені позбавитися від циклу. 723 00:29:14,910 --> 00:29:17,170 Отже, у нас є кілька проблем вже. 724 00:29:17,170 --> 00:29:21,110 Таким чином, умови ті ж, але я явно не вистачає 725 00:29:21,110 --> 00:29:21,680 ініціалізації. 726 00:29:21,680 --> 00:29:23,840 Мені не вистачає прирощення. 727 00:29:23,840 --> 00:29:28,020 Так що ж компілятор ймовірно, скажи мені, коли я намагаюся 728 00:29:28,020 --> 00:29:29,170 скомпілювати цю програму? 729 00:29:29,170 --> 00:29:29,666 Так? 730 00:29:29,666 --> 00:29:31,154 АУДИТОРІЯ: [нерозбірливо]. 731 00:29:31,154 --> 00:29:31,650 >> David J. Малан: Добре. 732 00:29:31,650 --> 00:29:34,180 Таким чином, він збирається сказати щось на зразок неоголошеної - в цьому 733 00:29:34,180 --> 00:29:35,280 випадку, змінна я. 734 00:29:35,280 --> 00:29:37,980 І дійсно, використання неоголошений ідентифікатор я. 735 00:29:37,980 --> 00:29:40,960 І це на відміну від мов, таких як PHP і 736 00:29:40,960 --> 00:29:43,120 Python і Ruby, з якої деякі з вас можуть бути знайомі, 737 00:29:43,120 --> 00:29:44,820 де ви можете просто якась початку використання змінних 738 00:29:44,820 --> 00:29:47,420 волею-неволею, а не доведеться турбуватися про оголошення їх 739 00:29:47,420 --> 00:29:48,560 явному завжди. 740 00:29:48,560 --> 00:29:51,770 У C і в мовах, як Java і C + +, ви повинні бути 741 00:29:51,770 --> 00:29:53,020 Супер явним. 742 00:29:53,020 --> 00:29:55,760 І якщо ви хочете змінної я, ви повинні сказати мені, 743 00:29:55,760 --> 00:29:57,360 які змінні він. 744 00:29:57,360 --> 00:29:59,360 Таким чином, ми будемо мати, щоб виправити це таким чином. 745 00:29:59,360 --> 00:30:05,510 Я збираюся піти вгору тут і введіть Int я, отже, 746 00:30:05,510 --> 00:30:07,860 Я оголосив змінну я. 747 00:30:07,860 --> 00:30:09,180 Тепер, я пропустив один крок. 748 00:30:09,180 --> 00:30:11,340 Я, очевидно, не ініціалізувалися, але давайте подивимося, що в 749 00:30:11,340 --> 00:30:13,650 мірою робить Clang припинити скаржитися. 750 00:30:13,650 --> 00:30:15,770 Отже, дозвольте мені переробити цю програму. 751 00:30:15,770 --> 00:30:16,770 >> Гаразд, зараз це просто скаржитися 752 00:30:16,770 --> 00:30:17,870 з іншої причини. 753 00:30:17,870 --> 00:30:21,130 "Змінна 'я' не ініціалізований при використанні тут". Ладно, 754 00:30:21,130 --> 00:30:22,340 це досить явно. 755 00:30:22,340 --> 00:30:25,510 Initialized просто означає, поклавши її рівної цінності. 756 00:30:25,510 --> 00:30:30,820 І ми не зробили цього, тому дозвольте мені спробувати дорівнює 0. 757 00:30:30,820 --> 00:30:35,030 Тепер давайте спробуємо це знову і знову запустити Clang. 758 00:30:35,030 --> 00:30:36,140 Укладач цього часу. 759 00:30:36,140 --> 00:30:37,210 І я збираюся запустити його. 760 00:30:37,210 --> 00:30:43,120 Але великий старий нескінченний цикл, тому що я зробив 761 00:30:43,120 --> 00:30:45,530 ініціалізації, я зробив стан, але я ніколи не робив 762 00:30:45,530 --> 00:30:47,030 будь приріст. 763 00:30:47,030 --> 00:30:48,780 Так як же я можу зробити прирощення? 764 00:30:48,780 --> 00:30:51,170 Ну, в той час як цикл, він відчуває, як я буду мати 765 00:30:51,170 --> 00:30:54,180 зробити це всередині циклу, тому що так само, як перший 766 00:30:54,180 --> 00:30:56,570 тиждень прикладів роблять циклічних конструкцій, як з 767 00:30:56,570 --> 00:30:59,040 шкарпетках і з власним рахунку, ми повинні були зробити 768 00:30:59,040 --> 00:31:01,550 щось в самому кінці, хотілося повернутися до наступного рядка. 769 00:31:01,550 --> 00:31:05,040 Що робити, якщо я йду вперед і роблю це я + + тут? 770 00:31:05,040 --> 00:31:06,030 Давайте навіть не компіляції цього. 771 00:31:06,030 --> 00:31:06,890 Злови мене вже. 772 00:31:06,890 --> 00:31:09,704 Що тут не так? 773 00:31:09,704 --> 00:31:10,690 АУДИТОРІЯ: [нерозбірливо]. 774 00:31:10,690 --> 00:31:11,770 >> David J. Малан: Так що це безумовно не Int. 775 00:31:11,770 --> 00:31:13,080 Це я. 776 00:31:13,080 --> 00:31:15,110 І фігурні дужки, як і колись, 777 00:31:15,110 --> 00:31:16,800 відступ не достатньо. 778 00:31:16,800 --> 00:31:18,410 Так що тепер я цю конструкцію. 779 00:31:18,410 --> 00:31:21,780 Так що, хоча я менше 10, роздрукувати зірки, 780 00:31:21,780 --> 00:31:23,220 Потім збільшуємо я. 781 00:31:23,220 --> 00:31:25,680 І те, як час циклу робіт є те, що, як тільки ви натиснете 782 00:31:25,680 --> 00:31:29,630 Наприкінці циклу, який в даному випадку виглядає як лінія 10, 783 00:31:29,630 --> 00:31:32,880 він збирається повернутися в рядку 6, в який момент 784 00:31:32,880 --> 00:31:34,400 Умова буде ще раз перевірено. 785 00:31:34,400 --> 00:31:37,500 І якщо я все ще менше 10, ми зробимо лінії 8 і 786 00:31:37,500 --> 00:31:41,250 то 9, то ми вдаримо 10, і поверніться до 6, знову і 787 00:31:41,250 --> 00:31:45,580 знову і знову, і знову, поки я менше 10. 788 00:31:45,580 --> 00:31:47,860 Так що давайте повторно запустити зробити тут. 789 00:31:47,860 --> 00:31:48,940 >> Гаразд, ми зібрали все гаразд. 790 00:31:48,940 --> 00:31:50,300 Дозвольте мені повтор циклу. 791 00:31:50,300 --> 00:31:52,620 І тепер він насправді, здається, працює. 792 00:31:52,620 --> 00:31:55,100 Таким чином, плюси і мінуси тут? 793 00:31:55,100 --> 00:31:58,910 Ну, до цих пір там насправді не все ООП - 794 00:31:58,910 --> 00:31:59,420 так мило. 795 00:31:59,420 --> 00:32:01,870 Гаразд, що було - Ах, це був нещасний випадок. 796 00:32:01,870 --> 00:32:05,200 Гаразд, давайте повернемося до цикл. 797 00:32:05,200 --> 00:32:07,530 Таким чином, для петлі гарні, тому що вони дуже чітко. 798 00:32:07,530 --> 00:32:09,720 І хоча вони трохи незграбним, щоб написати, що це 799 00:32:09,720 --> 00:32:11,500 дуже потужний, і це дозволяє зробити 800 00:32:11,500 --> 00:32:12,980 кілька речей відразу. 801 00:32:12,980 --> 00:32:16,240 У той час як петлі, здається, не мають величезну суму вартості всього 802 00:32:16,240 --> 00:32:18,500 Поки, тому що вона відчуває, що ми просто повинні робити більше роботи. 803 00:32:18,500 --> 00:32:20,670 Ми повинні поставити ініціалізації тут, 804 00:32:20,670 --> 00:32:23,480 оновлювати сюди, і ми повинні пам'ятати, щоб робити все це. 805 00:32:23,480 --> 00:32:26,260 Таким чином, ми побачимо в часі, в той час як насправді петлі надають 806 00:32:26,260 --> 00:32:29,380 себе просто різні контексти, різних даних 807 00:32:29,380 --> 00:32:33,900 структур, як списки і хеш-таблиці, то, що ми доберемося до 808 00:32:33,900 --> 00:32:34,970 середині семестру. 809 00:32:34,970 --> 00:32:37,900 Але зараз, знаю, що є цей третій тип, відомий як DO- 810 00:32:37,900 --> 00:32:38,480 час циклу. 811 00:32:38,480 --> 00:32:39,540 І ми бачили це ненадовго. 812 00:32:39,540 --> 00:32:41,830 І це може бути дуже корисним з PSET 1. 813 00:32:41,830 --> 00:32:45,570 Кожен раз, коли ви хочете щось зробити, а потім перевірити, якщо 814 00:32:45,570 --> 00:32:48,940 Користувач співпрацювали, і якщо вони цього не зробили, зробити це знову, робити- 815 00:32:48,940 --> 00:32:51,460 час циклу піддається такій логіці. 816 00:32:51,460 --> 00:32:55,640 Тому що, як замовлення згори вниз тут припускає, 817 00:32:55,640 --> 00:32:57,750 зробити буквально означає це зробити. 818 00:32:57,750 --> 00:32:59,830 І робити це знову і знову, що це може бути? 819 00:32:59,830 --> 00:33:03,000 Може бути, це означає виклик GetInt або GetString, а потім 820 00:33:03,000 --> 00:33:05,830 перевіривши значення GetInt або GetString, а потім кричати 821 00:33:05,830 --> 00:33:08,260 на користувачів, якщо вони не співпрацювали, попросивши їх 822 00:33:08,260 --> 00:33:10,100 знову і знову, і знову. 823 00:33:10,100 --> 00:33:11,730 Якщо ви хочете зробити щось один раз, 824 00:33:11,730 --> 00:33:13,210 Потім перевірити деякі умови. 825 00:33:13,210 --> 00:33:14,110 >> Так давайте спробуємо це. 826 00:33:14,110 --> 00:33:17,130 Дозвольте мені насправді змінити цю ситуацію на DO-циклу. 827 00:33:17,130 --> 00:33:18,830 І я збираюся піти далі і зробити наступне. 828 00:33:18,830 --> 00:33:21,830 Таким чином, виконайте такі дії. 829 00:33:21,830 --> 00:33:26,870 Давайте зробимо Int я = GetInt (), але давайте спочатку повідомити користувачеві 830 00:33:26,870 --> 00:33:27,410 що робити. 831 00:33:27,410 --> 00:33:29,050 Так мало чим відрізняється цей раз. 832 00:33:29,050 --> 00:33:31,270 "Дайте мені Int". 833 00:33:31,270 --> 00:33:32,910 Так що я буду використовувати Printf для цього. 834 00:33:32,910 --> 00:33:35,740 А тепер я піду сюди, і я збираюся це зробити 835 00:33:35,740 --> 00:33:41,520 в той час як я є, скажімо, більше - 836 00:33:41,520 --> 00:33:47,540 Давайте подивимося, у мене є, скажімо так, менш ніж 0, або я це 837 00:33:47,540 --> 00:33:48,730 більше 10. 838 00:33:48,730 --> 00:33:51,810 Іншими словами, я хочу число від 1 до 9, всього 839 00:33:51,810 --> 00:33:52,720 довільно. 840 00:33:52,720 --> 00:33:55,290 Так що я за допомогою комбінованого логічне вираження для 841 00:33:55,290 --> 00:33:59,930 переконатися, що я менше 0 або більше 10, в якій 842 00:33:59,930 --> 00:34:02,530 випадку я буду робити цього циклу тут знову. 843 00:34:02,530 --> 00:34:04,400 Отже, ще раз, зробити це - 844 00:34:04,400 --> 00:34:08,480 а я менше 0 або я більше 10. 845 00:34:08,480 --> 00:34:11,440 >> А тепер давайте йти вперед і зробити це один раз ми зробили це. 846 00:34:11,440 --> 00:34:13,270 Давайте просто зробити швидку перевірку осудності. 847 00:34:13,270 --> 00:34:18,929 Е ("Спасибі, я це% D", I). 848 00:34:18,929 --> 00:34:21,350 Так що це проста програма запитує у користувача Int, 849 00:34:21,350 --> 00:34:24,000 робить впевнений, що це в деякому діапазоні від 1 до 9 включно, 850 00:34:24,000 --> 00:34:26,280 , А потім дякує користувачів, нагадуючи їм, що вони просто 851 00:34:26,280 --> 00:34:27,940 набрали, так само, як невеликий перевірки осудності. 852 00:34:27,940 --> 00:34:30,659 Але давайте подивимося, якщо це працює, як передбачалося. 853 00:34:30,659 --> 00:34:34,533 Відпусти мене головою вниз тут і повторно запустити зробити петлю. 854 00:34:34,533 --> 00:34:35,350 Хм. 855 00:34:35,350 --> 00:34:38,600 "Використання неоголошений ідентифікатор" я "". Це дивно. 856 00:34:38,600 --> 00:34:41,509 Я думав, ми вирішили, що. 857 00:34:45,489 --> 00:34:47,560 Те ж симптом, але інший код. 858 00:34:47,560 --> 00:34:47,899 Так? 859 00:34:47,899 --> 00:34:50,191 АУДИТОРІЯ: [нерозбірливо] в два, ми повинні 860 00:34:50,191 --> 00:34:52,639 [Нерозбірливо]. 861 00:34:52,639 --> 00:34:53,260 >> David J. Малан: Абсолютно вірно. 862 00:34:53,260 --> 00:34:55,989 Так що це насправді приводить нас до теми відомі як сфера. 863 00:34:55,989 --> 00:34:59,350 Виявляється, C, знову ж, це дійсно бере вас в буквальному сенсі. 864 00:34:59,350 --> 00:35:02,970 І якщо ви робите щось на зразок цього, де ви оголошуєте Int 865 00:35:02,970 --> 00:35:06,120 , А потім присвоїти йому якесь значення, але ви, що всередині 866 00:35:06,120 --> 00:35:09,840 пара фігурних дужок, що C робить це припускає, що ви 867 00:35:09,840 --> 00:35:14,800 Тільки хочу, щоб ці 32 біта відомого як я існувати в 868 00:35:14,800 --> 00:35:18,200 контексті цих фігурних дужок, у рамках лінії 869 00:35:18,200 --> 00:35:22,420 З 6 по 9. Так що я оголошений, і йому присвоюється 870 00:35:22,420 --> 00:35:26,530 Значення в рядку 8, але як тільки ви отримуєте за межами 871 00:35:26,530 --> 00:35:30,270 рядок 9 нижче фігурною дужкою, я вже не в 872 00:35:30,270 --> 00:35:31,910 сфери, так би мовити. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Це вже не в правильному контексті. 874 00:35:35,030 --> 00:35:37,940 Так що тепер немає я, так що це як би у нас не було навіть 875 00:35:37,940 --> 00:35:38,770 заявив на всіх. 876 00:35:38,770 --> 00:35:41,520 >> Так що виправлення то щось подібне до цього, якщо 877 00:35:41,520 --> 00:35:44,300 Причина в тому, що я оголошений у фігурні дужки, які 878 00:35:44,300 --> 00:35:45,120 мабуть погано? 879 00:35:45,120 --> 00:35:45,410 Тут? 880 00:35:45,410 --> 00:35:46,820 АУДИТОРІЯ: [нерозбірливо]. 881 00:35:46,820 --> 00:35:47,150 David J. Малан: Так. 882 00:35:47,150 --> 00:35:48,710 Отже, ми можемо ініціалізувати її межами. 883 00:35:48,710 --> 00:35:53,530 Отже, дозвольте мені йти вперед і видалити оголошення частин якої 884 00:35:53,530 --> 00:35:55,820 Я вказати тип, і дозвольте мені зробити це тут. 885 00:35:55,820 --> 00:36:00,220 Таким чином, у рядку 5, тепер він говорить: "Дайте мені Int." Назвіть це я. 886 00:36:00,220 --> 00:36:03,400 Зверніть увагу, в рядку 9, я не хочу цього робити, тому що я 887 00:36:03,400 --> 00:36:04,830 вже є 32 біт. 888 00:36:04,830 --> 00:36:06,140 Я не хочу попросити комп'ютер 889 00:36:06,140 --> 00:36:07,630 різними 32 біт. 890 00:36:07,630 --> 00:36:09,850 Я хочу використовувати ті ж 32 біт. 891 00:36:09,850 --> 00:36:13,190 І зараз, тому що я оголошений в рядку 5, вона як і раніше законно 892 00:36:13,190 --> 00:36:16,550 використовувати його в рядку 11 і рядку 12. 893 00:36:16,550 --> 00:36:19,310 >> Отже, дозвольте мені спробувати перекомпілювати і подивимося, 894 00:36:19,310 --> 00:36:20,490 якщо Clang припиняє кричати. 895 00:36:20,490 --> 00:36:22,380 зробити петлю. 896 00:36:22,380 --> 00:36:25,470 Так що тепер це "неявне оголошення функції 897 00:36:25,470 --> 00:36:29,880 "GetInt" неприпустимий у C99. "Що це таке? 898 00:36:29,880 --> 00:36:30,400 Так? 899 00:36:30,400 --> 00:36:32,330 АУДИТОРІЯ: [нерозбірливо]. 900 00:36:32,330 --> 00:36:32,690 David J. Малан: Так. 901 00:36:32,690 --> 00:36:35,520 Так що тепер я насправді використання GetInt, це не те, 902 00:36:35,520 --> 00:36:38,190 що просто приходить з C. Це відбувається від CS50. 903 00:36:38,190 --> 00:36:39,890 Так що ми повинні це тут. 904 00:36:39,890 --> 00:36:41,450 І дозвольте мені повернутися в рядок вниз 905 00:36:41,450 --> 00:36:43,500 Тут і повторно запустити зробити. 906 00:36:43,500 --> 00:36:44,160 Гаразд, в кінці кінців. 907 00:36:44,160 --> 00:36:46,270 Тепер ми вирішили, що й інші помилки. 908 00:36:46,270 --> 00:36:48,930 Дозвольте мені тепер запустити цикл і подивитися, що відбувається. 909 00:36:48,930 --> 00:36:51,740 "Дайте мені Int." Я дам йому 11. 910 00:36:51,740 --> 00:36:53,100 Я дам йому -1. 911 00:36:53,100 --> 00:36:54,470 Я дам йому Foo. 912 00:36:54,470 --> 00:36:56,080 Я дам йому 5. 913 00:36:56,080 --> 00:36:57,450 І тепер це дійсно працює. 914 00:36:57,450 --> 00:36:59,410 Але рядку змінився по причині тут. 915 00:36:59,410 --> 00:37:02,800 Чому він сказав повторити один з цих разів, але дайте мені 916 00:37:02,800 --> 00:37:03,920 Int інші три рази? 917 00:37:03,920 --> 00:37:05,500 Чому це поведінка відрізняється? 918 00:37:05,500 --> 00:37:06,980 АУДИТОРІЯ: Кинув в нього рядок. 919 00:37:06,980 --> 00:37:07,830 David J. Малан: Пробачте? 920 00:37:07,830 --> 00:37:08,570 Залу: Ви дали йому рядок. 921 00:37:08,570 --> 00:37:08,990 David J. Малан: Так. 922 00:37:08,990 --> 00:37:11,450 Таким чином, ми дали йому рядок в цій третьої спроби, 923 00:37:11,450 --> 00:37:12,490 коли я набрав Foo. 924 00:37:12,490 --> 00:37:13,200 Foo є рядком. 925 00:37:13,200 --> 00:37:14,340 Очевидно, що це не Int. 926 00:37:14,340 --> 00:37:17,500 І те, як CS50 реалізований GetInt тому, що ми 927 00:37:17,500 --> 00:37:20,330 не перевіряти, якщо щось не менше 0 або більше 10 928 00:37:20,330 --> 00:37:22,260 для вас, тому що, як ми знаємо заздалегідь, який вид 929 00:37:22,260 --> 00:37:23,130 Int ви хочете? 930 00:37:23,130 --> 00:37:25,880 Але ми можемо мінімально перевірити тебе, не користувач принаймні, 931 00:37:25,880 --> 00:37:26,730 Введіть число? 932 00:37:26,730 --> 00:37:30,500 А якщо вони цього не зробили, ми кричати на користувачів, набравши "повторити" на 933 00:37:30,500 --> 00:37:31,440 екран. 934 00:37:31,440 --> 00:37:34,210 >> Так що тепер у нас є програма, яка циклів. Добре. 935 00:37:34,210 --> 00:37:37,070 Тепер, який з них є свого роду краще побудувати? 936 00:37:37,070 --> 00:37:39,060 Так ось де все стає трохи брудним, 937 00:37:39,060 --> 00:37:42,360 Те, що ви повинні пам'ятати, щоб оголосити змінну тут 938 00:37:42,360 --> 00:37:44,630 якщо ви хочете використовувати його всередині деяких 939 00:37:44,630 --> 00:37:46,460 фігурні дужки і за її межами. 940 00:37:46,460 --> 00:37:48,490 Але навіть якщо це виглядає трохи загадковий на перший 941 00:37:48,490 --> 00:37:50,750 погляд, просто ще раз, пам'ятайте, проста логіка. 942 00:37:50,750 --> 00:37:54,630 Для того, щоб використовувати все, що в C, чи є це функція або 943 00:37:54,630 --> 00:37:57,680 це змінна, ви повинні включити його, якщо це функція 944 00:37:57,680 --> 00:37:59,770 У деяких бібліотек, або вам потрібно оголосити. 945 00:37:59,770 --> 00:38:02,405 Але тепер ви повинні бути дуже пам'ятаючи про те, що 946 00:38:02,405 --> 00:38:04,940 Ви оголосивши його в потрібному обсязі. 947 00:38:04,940 --> 00:38:08,150 Ви не поставивши його занадто сильно всередині дужок. 948 00:38:08,150 --> 00:38:09,410 >> Тому дозвольте мені насправді відкат. 949 00:38:09,410 --> 00:38:12,660 Якщо ми повернемося до нашого наприклад, від раніше, і я йду 950 00:38:12,660 --> 00:38:19,245 Повернутися до для Int, Int = 0; I <10; + + я, і я 951 00:38:19,245 --> 00:38:26,370 зробити Printf зірок, як це, і потім закрийте хлопець, і тепер 952 00:38:26,370 --> 00:38:30,410 Printf я зараз - 953 00:38:30,410 --> 00:38:33,500 відповідно до тієї ж логікою, що станеться, коли я намагаюся 954 00:38:33,500 --> 00:38:35,500 скомпілювати цю програму? 955 00:38:35,500 --> 00:38:36,790 АУДИТОРІЯ: Невірний ідентифікатор. 956 00:38:36,790 --> 00:38:38,560 David J. Малан: Так що це ще один невірний ідентифікатор, 957 00:38:38,560 --> 00:38:39,470 неоголошений ідентифікатор. 958 00:38:39,470 --> 00:38:41,810 Тепер, причина трохи інша. 959 00:38:41,810 --> 00:38:44,370 Там, очевидно не фігурні дужки тут, але те ж саме 960 00:38:44,370 --> 00:38:46,790 Ідея та ж історія сфера належить. 961 00:38:46,790 --> 00:38:50,340 Якщо ви оголосили змінну, як я всередині 962 00:38:50,340 --> 00:38:53,960 цикл, навіть якщо ви не написаний фігурні 963 00:38:53,960 --> 00:38:56,980 дужки, думати про них подумки все ще знаходиться там, в яких 964 00:38:56,980 --> 00:39:00,310 випадку, якщо я дійсно тільки всередині циклу. 965 00:39:00,310 --> 00:39:03,080 Це не дійсні, як тільки ви отримаєте на наступному рядку, яка в 966 00:39:03,080 --> 00:39:05,090 цьому випадку в даний час 10. 967 00:39:05,090 --> 00:39:09,060 Таким чином, всього за кілька запитань сфери тощо. 968 00:39:09,060 --> 00:39:12,620 Гаразд, є питання? 969 00:39:12,620 --> 00:39:15,310 >> Гаразд, це начебто тривіальна невелику програму, 970 00:39:15,310 --> 00:39:17,450 друк тільки трохи зірок. 971 00:39:17,450 --> 00:39:20,400 Але давайте подивимося, якщо ви пам'ятаєте цю пісню тут. 972 00:39:20,400 --> 00:39:22,530 Це неймовірно дратує пісню діти співатимуть на 973 00:39:22,530 --> 00:39:23,550 Шкільний автобус тощо. 974 00:39:23,550 --> 00:39:25,990 Але те, що добре про нього, що він має цю циклічність, 975 00:39:25,990 --> 00:39:27,910 якому це "99 пляшок пива на стіні, 976 00:39:27,910 --> 00:39:28,520 99 пляшок пива. 977 00:39:28,520 --> 00:39:31,030 Візьміть одну вниз, передати його навколо, 98 пляшок пива на 978 00:39:31,030 --> 00:39:34,330 стіни ". І тоді пісня повторюється 97, то 96, то 979 00:39:34,330 --> 00:39:38,040 95, потім 94, все, аж до 0, якщо ви дійсно отримали, що 980 00:39:38,040 --> 00:39:38,920 далеко на автобусі. 981 00:39:38,920 --> 00:39:41,960 Так що це гарна програма для сортування зі знаряддя, тому що моя 982 00:39:41,960 --> 00:39:43,650 Бог, якщо можна просто реалізувати це за допомогою декількох 983 00:39:43,650 --> 00:39:46,660 рядків коду, ви могли б виплюнути всю лірику до цієї 984 00:39:46,660 --> 00:39:48,240 Пісня досить швидко. 985 00:39:48,240 --> 00:39:50,420 Але на цьому шляху, ми можемо почати зараз дражнять один від одного деякими 986 00:39:50,420 --> 00:39:52,460 з цих основних конструкцій циклів, а тепер і 987 00:39:52,460 --> 00:39:55,830 Введемо функції, що ми пишемо самі, повертати значення 988 00:39:55,830 --> 00:39:57,020 що ми обійти. 989 00:39:57,020 --> 00:39:58,910 Але, по-перше, чому б нам не піти далі і прийняти наші п'ять хвилин 990 00:39:58,910 --> 00:39:59,320 розбити тут? 991 00:39:59,320 --> 00:40:01,480 А коли ми повернемося, ми будемо співати цю пісню. 992 00:40:05,680 --> 00:40:08,760 >> Добре, таким чином, ми повернулися. 993 00:40:08,760 --> 00:40:11,850 І коли я кажу, що ми тепер буде співати цю пісню, я маю на увазі 994 00:40:11,850 --> 00:40:13,250 програмно, а не в усній формі. 995 00:40:13,250 --> 00:40:19,370 Таким чином, тут ми маємо beer1.c, який є одним здійснення цього 996 00:40:19,370 --> 00:40:20,580 конкретної пісні. 997 00:40:20,580 --> 00:40:23,110 І щоб було ясно, для тих, хто незнайомий з тим, що 998 00:40:23,110 --> 00:40:24,460 ця річ виглядає, дозвольте мені йти вперед 999 00:40:24,460 --> 00:40:27,070 і зробити beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Тепер дозвольте мені виконати beer1, і що ми побачимо - скільки пляшок 1001 00:40:30,400 --> 00:40:31,140 пиво буде? 1002 00:40:31,140 --> 00:40:33,240 Я буду вводити в 99, як співається в пісні. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 І тепер, якщо ми прокрутки - 1005 00:40:35,650 --> 00:40:38,280 упс - якщо ми прокручуємо через все це, ми побачимо, що 1006 00:40:38,280 --> 00:40:41,350 це дійсно співати всю пісню. 1007 00:40:44,050 --> 00:40:44,540 Зачекайте хвилину. 1008 00:40:44,540 --> 00:40:46,240 Мій прокрутки трохи переплуталися. 1009 00:40:46,240 --> 00:40:47,940 Давайте використаємо великі вікна. 1010 00:40:47,940 --> 00:40:53,500 Так beer1, 99, там ми йдемо. 1011 00:40:53,500 --> 00:40:56,420 Так що тут у нас є ціла пісня, заспівана набагато швидше, 1012 00:40:56,420 --> 00:40:58,450 комп'ютер, ніж це могло б бути нами. 1013 00:40:58,450 --> 00:41:00,340 Так зауважити, однак, циклічність тут. 1014 00:41:00,340 --> 00:41:03,380 Це говорить 99, а потім 99, потім "взяти одну з них, передати його 1015 00:41:03,380 --> 00:41:04,740 навколо ", то 98. 1016 00:41:04,740 --> 00:41:06,640 І тепер вона повторюється знову і знову. 1017 00:41:06,640 --> 00:41:08,840 >> Так що насправді це прекрасна можливість для якоїсь 1018 00:41:08,840 --> 00:41:10,400 Побудуємо цикл. 1019 00:41:10,400 --> 00:41:12,950 Зверніть увагу, що я трохи різка кута тут. 1020 00:41:12,950 --> 00:41:15,960 Зверніть увагу, що я говорю "98 пляшок пива на стіні, 1021 00:41:15,960 --> 00:41:19,010 97 пляшок пива на стіні ", і це було просто так 1022 00:41:19,010 --> 00:41:21,640 що, коли ми дістатися до однієї пляшки пива, у мене немає 1023 00:41:21,640 --> 00:41:23,300 турбуватися про граматику англійської мови. 1024 00:41:23,300 --> 00:41:25,790 Але ми також можемо виправити це з трохи, якщо 1025 00:41:25,790 --> 00:41:26,910 Умова, можливо. 1026 00:41:26,910 --> 00:41:30,110 Якщо це число особливих, йти вперед і сказати: "Пляшка", 1027 00:41:30,110 --> 00:41:31,840 в іншому випадку, якщо це множина, скажімо, "пляшки". 1028 00:41:31,840 --> 00:41:34,150 Але зараз я повністю різання цьому кутку. 1029 00:41:34,150 --> 00:41:35,520 Отже, давайте подивимося, що ми маємо тут. 1030 00:41:35,520 --> 00:41:37,150 Таким чином, у нас є деякі коментарі у верхній частині. 1031 00:41:37,150 --> 00:41:39,450 Я в тому числі ці дві бібліотеки, а 1032 00:41:39,450 --> 00:41:41,140 Ми часто були. 1033 00:41:41,140 --> 00:41:43,610 А тепер дозвольте мені прокрутіть вниз до першого 1034 00:41:43,610 --> 00:41:44,990 фактичні рядки коду. 1035 00:41:44,990 --> 00:41:47,020 Рядок 17 стартує основний. 1036 00:41:47,020 --> 00:41:50,610 Line 21 і 20 має, скільки пляшок пива буде? 1037 00:41:50,610 --> 00:41:52,060 І тоді я називаю GetInt. 1038 00:41:52,060 --> 00:41:53,800 І тепер у мене є трохи розсудливості перевірки. 1039 00:41:53,800 --> 00:41:57,030 >> Таким чином, це угода, за якою ми будемо починати з прийняття 1040 00:41:57,030 --> 00:41:59,620 більш ретельно перевірити введені користувачем дані. 1041 00:41:59,620 --> 00:42:01,710 Іноді ви просто не хочете, щоб спонукати їх знову 1042 00:42:01,710 --> 00:42:02,630 і знову і знову. 1043 00:42:02,630 --> 00:42:05,620 Якщо користувач гвинти і не співпрацює, добре. 1044 00:42:05,620 --> 00:42:07,430 Вийти і просто не мати з ними справу. 1045 00:42:07,430 --> 00:42:08,990 І ось що я тут роблю. 1046 00:42:08,990 --> 00:42:12,520 Якщо п менше 1, то я просто буду кричати на користувача, 1047 00:42:12,520 --> 00:42:14,330 "Вибачте, що не має сенсу". А потім я збираюся 1048 00:42:14,330 --> 00:42:16,650 довільно повертає 1. 1049 00:42:16,650 --> 00:42:18,550 Таким чином, знову ж таки, це всього лише умовність, щоб звикнути. 1050 00:42:18,550 --> 00:42:19,850 На даний момент, прийняти його на віру. 1051 00:42:19,850 --> 00:42:22,700 Але до цих пір, ми завжди поверталися 0, так як 1052 00:42:22,700 --> 00:42:25,204 Ми вже говорили повертається 0 означає що? 1053 00:42:25,204 --> 00:42:26,000 АУДИТОРІЯ: Успіх. 1054 00:42:26,000 --> 00:42:27,320 David J. Малан: успіх, ось і все. 1055 00:42:27,320 --> 00:42:29,740 Так що тепер ми, нарешті, починаємо думати про 1056 00:42:29,740 --> 00:42:31,330 без успіхів - 1057 00:42:31,330 --> 00:42:33,760 Іншими словами, кут випадки, помилки умовах - 1058 00:42:33,760 --> 00:42:37,520 Тепер у мене є нескінченний запас, або принаймні чотири мільярди 1059 00:42:37,520 --> 00:42:39,790 можливих речей, які можуть піти не так в моїй програми. 1060 00:42:39,790 --> 00:42:42,300 І я можу почати присвоєння їм індивідуальних номерів. 1061 00:42:42,300 --> 00:42:44,340 Зараз, як правило, досить просто повернутися 1062 00:42:44,340 --> 00:42:45,730 щось інше, ніж 0. 1063 00:42:45,730 --> 00:42:48,040 Отже, ми збираємося, щоб просто повернути 1 на даний момент. 1064 00:42:48,040 --> 00:42:51,440 Але причина для повернення 1, що, як тільки ви повернетеся 1065 00:42:51,440 --> 00:42:55,110 1, вгадайте, що відбувається з іншою частиною програми? 1066 00:42:55,110 --> 00:42:55,720 Він зупиняється. 1067 00:42:55,720 --> 00:42:56,560 Ось і все. 1068 00:42:56,560 --> 00:42:59,150 Таким чином, той факт, що я повертаюся 1 є ефективним 1069 00:42:59,150 --> 00:43:02,950 коротке замикання виконання цієї програми таким чином, щоб 1070 00:43:02,950 --> 00:43:06,780 нічого нижче лінії 27 буде продовжувати виконання. 1071 00:43:06,780 --> 00:43:09,210 Як тільки основна повертається, що це таке. 1072 00:43:09,210 --> 00:43:13,160 >> Гаразд, якщо користувач робить співпрацювати і ми досягнемо лінії 30 1073 00:43:13,160 --> 00:43:15,680 тому що вони ввели в законну номер, ось мій 1074 00:43:15,680 --> 00:43:16,990 здійснення цієї пісні. 1075 00:43:16,990 --> 00:43:19,050 Так я вперше роздрукувати символ нового рядка, тільки для 1076 00:43:19,050 --> 00:43:19,880 естетику. 1077 00:43:19,880 --> 00:43:21,500 Тепер у мене є цикл. 1078 00:43:21,500 --> 00:43:22,930 І зверніть увагу, що я роблю речі трохи 1079 00:43:22,930 --> 00:43:23,880 в іншому напрямку. 1080 00:43:23,880 --> 00:43:26,210 Я не повинен робити менше, я не повинен робити + +. 1081 00:43:26,210 --> 00:43:30,660 Я можу сказати замість ініціалізації змінної я, встановіть його рівним 1082 00:43:30,660 --> 00:43:35,080 п, число користувачів набрали, виконайте такі дії, щоб 1083 00:43:35,080 --> 00:43:39,590 Поки я більше 0, то я - 1084 00:43:39,590 --> 00:43:42,070 як тільки ви закінчили одну ітерацію цього циклу. 1085 00:43:42,070 --> 00:43:44,310 Таким чином, ми можемо розраховувати вниз за допомогою циклу, а також. 1086 00:43:44,310 --> 00:43:47,520 Тепер, це в значній мірі тижня один матеріал тепер, з Printf. 1087 00:43:47,520 --> 00:43:51,770 Таким друку "% D пляшок пива на стіні". Друк "% D 1088 00:43:51,770 --> 00:43:54,990 пляшок пива. "" Візьміть одну вниз, передавати його ". для друку 1089 00:43:54,990 --> 00:43:58,880 "% D пляшок пива на стіні". Так що це ще% D, але 1090 00:43:58,880 --> 00:44:02,770 зауважити, що аргумент Printf змінюється. 1091 00:44:02,770 --> 00:44:05,840 Після коми, у мене є я, тому що я хочу сказати 99. 1092 00:44:05,840 --> 00:44:08,590 Після цього коми, в мене є я, тому що я хочу сказати 99. 1093 00:44:08,590 --> 00:44:14,030 Після цього коми, в мене є я - 1, тому що я хочу сказати, 98 в 1094 00:44:14,030 --> 00:44:16,260 це перша ітерація, і так далі. 1095 00:44:16,260 --> 00:44:18,520 І тепер тут, я просто дурні маленькі зауваження. 1096 00:44:18,520 --> 00:44:22,270 І тоді лінія 42, я повертати 0 у відповідності з угодою, показуючи, що 1097 00:44:22,270 --> 00:44:23,650 все в порядку. 1098 00:44:23,650 --> 00:44:24,490 >> Так що, якщо я goofed? 1099 00:44:24,490 --> 00:44:26,350 Що може поширена помилка тут може бути? 1100 00:44:26,350 --> 00:44:29,200 Ну, а якщо я випадково сказав добре, я хочу, щоб підрахувати 1101 00:44:29,200 --> 00:44:31,640 до 0, я хочу, 0 пляшок пива на стіні? 1102 00:44:31,640 --> 00:44:34,620 Тому я кажу, я більше або дорівнює 0. 1103 00:44:34,620 --> 00:44:38,920 Що це буде ознакою того, що я тепер бачу, якщо я перекомпілювати 1104 00:44:38,920 --> 00:44:41,173 beer1 і запустити його? 1105 00:44:41,173 --> 00:44:42,120 АУДИТОРІЯ: Негативно. 1106 00:44:42,120 --> 00:44:43,590 David J. Малан: Так, це підемо негативним. 1107 00:44:43,590 --> 00:44:45,950 Це не зовсім по одній помилку, неймовірно 1108 00:44:45,950 --> 00:44:47,270 Поширеною помилкою зробити. 1109 00:44:47,270 --> 00:44:48,960 Давайте насправді повернутися у вікно терміналу і зробити це 1110 00:44:48,960 --> 00:44:50,620 Тут, таким чином, ми можемо побачити в більшому часу. 1111 00:44:50,620 --> 00:44:53,280 Введіть, 99 пляшок пива. 1112 00:44:53,280 --> 00:44:56,580 Близько, але ми пішли трохи занадто далеко. 1113 00:44:56,580 --> 00:45:00,500 Ми співали пісні занадто далеко, так, що ми зараз потрапили в 1114 00:45:00,500 --> 00:45:01,510 негативне число. 1115 00:45:01,510 --> 00:45:03,680 Так що не зовсім працює. 1116 00:45:03,680 --> 00:45:06,450 >> Гаразд, так що ми можемо легко виправити, що, повертаючись до 1117 00:45:06,450 --> 00:45:07,650 як це було раніше. 1118 00:45:07,650 --> 00:45:10,360 Але те, що деякі можливості зараз 1119 00:45:10,360 --> 00:45:11,190 поліпшення? 1120 00:45:11,190 --> 00:45:17,200 Добре, дозвольте мені відкрити beer2.c та прокрутіть униз, тут і прийняти 1121 00:45:17,200 --> 00:45:19,310 подивіться на цю версію. 1122 00:45:19,310 --> 00:45:21,370 Що перше, що впадає в очі вам, як різні 1123 00:45:21,370 --> 00:45:23,715 У цій версії тут? 1124 00:45:23,715 --> 00:45:24,190 АУДИТОРІЯ: [нерозбірливо]. 1125 00:45:24,190 --> 00:45:26,510 David J. Малан: Так, так не я, тому що прийшло в голову, 1126 00:45:26,510 --> 00:45:29,350 Мені знаєте що, я питаю у користувача п, і тоді я 1127 00:45:29,350 --> 00:45:33,580 вважаючи в рівній п, а потім я міняю я, але я ніколи не 1128 00:45:33,580 --> 00:45:34,590 торкаючись п раз. 1129 00:45:34,590 --> 00:45:37,390 Так якого біса була точка Ви виділення ще 32 1130 00:45:37,390 --> 00:45:45,210 бітів називається просто мені так, що я можу мати різні змінні? 1131 00:45:45,210 --> 00:45:47,960 Таким чином, в даному випадку, я, звичайно, визнати, що непотрібне 1132 00:45:47,960 --> 00:45:49,190 Особливістю конструкції. 1133 00:45:49,190 --> 00:45:52,730 І я зараз збираюся сказати в той час як п більше, ніж 0, перейдіть 1134 00:45:52,730 --> 00:45:56,180 вперед і роздрукувати ту ж пісню, проходячи п до Printf як 1135 00:45:56,180 --> 00:46:00,210 Другий аргумент, і п - 1 в якості другого аргументу тут. 1136 00:46:00,210 --> 00:46:02,930 І тоді на кожній ітерації цього циклу, йти вперед і тільки 1137 00:46:02,930 --> 00:46:05,080 зменшення п собі. 1138 00:46:05,080 --> 00:46:06,960 Тепер, функціонально, ця програма 1139 00:46:06,960 --> 00:46:08,010 буде однаковим. 1140 00:46:08,010 --> 00:46:10,730 Якщо я друкую в 99, п починається на 99. 1141 00:46:10,730 --> 00:46:12,890 Я зниження, зменшення, зниження, зменшення. 1142 00:46:12,890 --> 00:46:15,875 Я збираюся пройти весь шлях до "Одна пляшка пива 1143 00:46:15,875 --> 00:46:16,740 стіни, одна пляшка пива. 1144 00:46:16,740 --> 00:46:18,020 Візьміть одну вниз, передавати його. 1145 00:46:18,020 --> 00:46:21,480 0 пляшок пива на стіні ". Кінця, тому що я і зробив 1146 00:46:21,480 --> 00:46:23,200 отримаємо умову правильної. 1147 00:46:23,200 --> 00:46:24,280 Це більше 0. 1148 00:46:24,280 --> 00:46:26,220 Я не робіть цю помилку. 1149 00:46:26,220 --> 00:46:28,470 >> Так що ж краще, версія однієї або другий варіант? 1150 00:46:31,380 --> 00:46:33,480 Я чув купу ремство на двох. 1151 00:46:33,480 --> 00:46:34,730 Чому два? 1152 00:46:37,210 --> 00:46:38,225 Що це? 1153 00:46:38,225 --> 00:46:39,215 АУДИТОРІЯ: [нерозбірливо]. 1154 00:46:39,215 --> 00:46:40,070 David J. Малан: О, все в порядку. 1155 00:46:40,070 --> 00:46:42,870 Таким чином, він не буде опускатися нижче 0, але пам'ятайте, у першій версії, 1156 00:46:42,870 --> 00:46:45,870 Оригінальний правильна версія не опускалася нижче 0 або. 1157 00:46:45,870 --> 00:46:48,340 Тому пам'ятайте, що це правильна версія. 1158 00:46:48,340 --> 00:46:51,630 Так давайте хоча б порівняємо два правильних версій. 1159 00:46:51,630 --> 00:46:53,300 Що аргумент на користь версії 1160 00:46:53,300 --> 00:46:55,146 два з яких, ммм, краще? 1161 00:46:55,146 --> 00:46:55,642 Так? 1162 00:46:55,642 --> 00:46:57,630 АУДИТОРІЯ: Він використовує менше простору. 1163 00:46:57,630 --> 00:46:59,530 David J. Малан: Так, це займає менше місця, вірно? 1164 00:46:59,530 --> 00:47:02,900 У той час як версія, яка використовується 32 біт для п, а потім ще 1165 00:47:02,900 --> 00:47:07,680 32 біта для мене. 1166 00:47:07,680 --> 00:47:10,060 Версія друга використовує тільки 32 біта для п, так що 1167 00:47:10,060 --> 00:47:11,700 здається, це плюс. 1168 00:47:11,700 --> 00:47:12,950 Інші думки? 1169 00:47:18,070 --> 00:47:21,520 Хто-небудь хоче сперечатися на користь одного? 1170 00:47:21,520 --> 00:47:22,070 Так? 1171 00:47:22,070 --> 00:47:25,240 АУДИТОРІЯ: Ви повинні використовувати додаткові рядки коду при п -. 1172 00:47:25,240 --> 00:47:26,090 >> David J. Малан: Добре, звичайно. 1173 00:47:26,090 --> 00:47:26,960 Так що це справедливо. 1174 00:47:26,960 --> 00:47:29,040 Так що це просто, принаймні для мене - 1175 00:47:29,040 --> 00:47:31,940 Я маю на увазі, це насправді відчуває себе трохи брудніше, тим, що 1176 00:47:31,940 --> 00:47:35,120 Я не можу сортувати інкапсулювати всі мої логіки в одному 1177 00:47:35,120 --> 00:47:38,030 красиві лінії, петлі для, так як цикл може. 1178 00:47:38,030 --> 00:47:40,240 Ось, я як би повинні лавірувати на цьому п - 1179 00:47:40,240 --> 00:47:41,120 В кінці циклу, тому що 1180 00:47:41,120 --> 00:47:42,550 це логічно необхідно. 1181 00:47:42,550 --> 00:47:45,190 Але це начебто треться мене неправильно, просто тому, що 1182 00:47:45,190 --> 00:47:48,260 Здається, окрема від логіки тут, хоча, 1183 00:47:48,260 --> 00:47:49,430 знову ж таки, це необхідно. 1184 00:47:49,430 --> 00:47:50,990 Інші думки? 1185 00:47:50,990 --> 00:47:51,490 Так? 1186 00:47:51,490 --> 00:47:52,740 АУДИТОРІЯ: [нерозбірливо]. 1187 00:47:57,990 --> 00:47:58,350 >> David J. Малан: Так. 1188 00:47:58,350 --> 00:48:00,730 Так що, якщо ви замість цього, в кінці пісні, хотів 1189 00:48:00,730 --> 00:48:02,950 роздрукувати ще раз назву пісні? 1190 00:48:02,950 --> 00:48:05,660 Як "Спасибі за гру 99 пляшок пива", або щось 1191 00:48:05,660 --> 00:48:06,690 нерозумно, як це? 1192 00:48:06,690 --> 00:48:09,750 Але справа в тому, що ви хотіли доступ до вихідного значення. 1193 00:48:09,750 --> 00:48:13,180 Той факт, що ви мутував або змінився п на кожному 1194 00:48:13,180 --> 00:48:16,330 ітерації і, отже, знищити своє первинне значення 1195 00:48:16,330 --> 00:48:18,650 означає, що ви просто не можете зробити це в кінці. 1196 00:48:18,650 --> 00:48:20,660 Тепер, мабуть, ми, очевидно, не хочуть робити 1197 00:48:20,660 --> 00:48:21,450 , Що в цій програмі. 1198 00:48:21,450 --> 00:48:22,350 Так кого це хвилює? 1199 00:48:22,350 --> 00:48:23,630 Але це дуже правильний момент. 1200 00:48:23,630 --> 00:48:25,520 І, чесно кажучи, там дійсно ніхто не 1201 00:48:25,520 --> 00:48:26,630 Право відповіді тут. 1202 00:48:26,630 --> 00:48:28,740 Вони обидва однаково правильні. 1203 00:48:28,740 --> 00:48:30,210 Я міг переконатися в будь-якому випадку. 1204 00:48:30,210 --> 00:48:33,310 Я скажу, що, загалом, це хороший принцип, якщо Ви 1205 00:48:33,310 --> 00:48:36,030 запитав у користувача деяку цінність, і ви зберігається у змінній 1206 00:48:36,030 --> 00:48:38,730 як і я, тільки вид в принципі, це, напевно, хороший 1207 00:48:38,730 --> 00:48:40,160 зберегти, що навколо. 1208 00:48:40,160 --> 00:48:43,400 І будь-які дані, які ви хочете мутувати знову і знову, тільки 1209 00:48:43,400 --> 00:48:46,030 дати собі копію цієї змінної, просто так, що ви 1210 00:48:46,030 --> 00:48:47,830 мати доступ до оригіналу. 1211 00:48:47,830 --> 00:48:51,040 Ви витрачаєте ще 32 біта, але насправді це 1212 00:48:51,040 --> 00:48:53,490 Комп'ютер, як, двома гігабайтами оперативної пам'яті в ці дні, 1213 00:48:53,490 --> 00:48:55,310 і ми суперечка з приводу 32 біт? 1214 00:48:55,310 --> 00:48:56,320 Дійсно не таке вже велике діло. 1215 00:48:56,320 --> 00:48:58,550 І навіть на цьому пристрої тут, з половини концерту або 1216 00:48:58,550 --> 00:49:01,700 гігабайтом оперативної пам'яті, 32 біт і 64 біт, 1217 00:49:01,700 --> 00:49:02,920 Не таке вже велика справа. 1218 00:49:02,920 --> 00:49:05,890 Звичайно, сьогодні, це буде шлях вражені розміром 1219 00:49:05,890 --> 00:49:08,400 самої програми, яка буде кілька сотень 1220 00:49:08,400 --> 00:49:10,890 кілобайт, якби не кілька мегабайт, в ці дні. 1221 00:49:10,890 --> 00:49:13,550 >> Таким чином, розумна заклопотаність, ні одна правильна відповідь. 1222 00:49:13,550 --> 00:49:15,490 Але принаймні ті думки, які повинні почати 1223 00:49:15,490 --> 00:49:16,790 пройти через ваш розум? 1224 00:49:16,790 --> 00:49:19,600 Тому що в PSET 0, хоча ми дійсно тільки очікується 1225 00:49:19,600 --> 00:49:22,340 Правильність або, принаймні знімає з різними помилками, що 1226 00:49:22,340 --> 00:49:25,440 Ви, можливо, стикалися, як ми просуваємося вперед, дизайн 1227 00:49:25,440 --> 00:49:27,910 буде ще один ключовий аспект, обидва написання коду 1228 00:49:27,910 --> 00:49:29,770 а також наші оцінки коду. 1229 00:49:29,770 --> 00:49:32,310 І так по крайней мере дати думав щось подібне до цього. 1230 00:49:32,310 --> 00:49:35,590 І тільки тому, що щось працює не означає, що це добре, 1231 00:49:35,590 --> 00:49:37,130 не означає, що це добре розроблений. 1232 00:49:37,130 --> 00:49:38,820 І це одна з речей, навчання стажерів і 1233 00:49:38,820 --> 00:49:41,990 Проблема набору допоможе нам дражнити частина з плином часу. 1234 00:49:41,990 --> 00:49:45,020 >> Ну, що, скажімо, ця версія тут? 1235 00:49:45,020 --> 00:49:49,090 Дозвольте мені зробити що-небудь сексуальне тут в даний момент. 1236 00:49:49,090 --> 00:49:50,740 Перш за все дозвольте мені позбавитися від цього. 1237 00:49:50,740 --> 00:49:54,120 А тепер давайте виправимо цю граматичну питання. 1238 00:49:54,120 --> 00:49:58,780 Таким чином, у цій версії, я хочу, щоб виправити граматику, так що, 1239 00:49:58,780 --> 00:50:02,460 , А не просто сказати дужках з, як "пляшка" 1240 00:50:02,460 --> 00:50:03,360 або "пляшки", - 1241 00:50:03,360 --> 00:50:04,900 Я не хочу, щоб скоротити цей кут - 1242 00:50:04,900 --> 00:50:08,350 Я також хочу, щоб динамічно роздрукувати слово "пляшки" 1243 00:50:08,350 --> 00:50:12,820 або "пляшку", тим самим використовуючи ці заповнювачі% сьогоднішніх. 1244 00:50:12,820 --> 00:50:16,550 Так що мені потрібно умовно перевірити, що це значення я. 1245 00:50:16,550 --> 00:50:19,590 І якщо це 1, я хочу сказати "пляшка", і якщо це нічого, 1246 00:50:19,590 --> 00:50:23,115 ще, я хочу сказати "пляшки". Так давайте спробуємо це зробити. 1247 00:50:23,115 --> 00:50:31,340 Так що, якщо я == 1, то дозвольте мені піти далі і оголосити - 1248 00:50:31,340 --> 00:50:34,080 Мені потрібна рядок, тому дозвольте мені зробити рядок s1, тому що це 1249 00:50:34,080 --> 00:50:36,070 Перший рядок мене хвилює прямо зараз. 1250 00:50:36,070 --> 00:50:40,980 Я збираюся сказати: "Пляшка". І потім, давайте подивимося, струнний 1251 00:50:40,980 --> 00:50:43,110 s2 - і я поясню, куди я йду в даний момент - 1252 00:50:43,110 --> 00:50:47,650 "Пляшки". Так Нагадаємо, що в цій пісні, ми повинні бути в змозі 1253 00:50:47,650 --> 00:50:50,580 друкувати речі, два різних слова потенційно. 1254 00:50:50,580 --> 00:50:53,590 Таким чином, якщо ми оглянемося назад тут, помітили, що коли ми доберемося до 1255 00:50:53,590 --> 00:50:56,440 цей приклад тут ", дві пляшки пива на стіні, 1256 00:50:56,440 --> 00:50:59,490 дві пляшки пива, візьміть одну вниз, передавати його ", я хочу 1257 00:50:59,490 --> 00:51:02,380 ця четверта лінія тепер кажуть, "одна пляшка пива на 1258 00:51:02,380 --> 00:51:04,900 стіна ". Таким чином, я повинен вирішити, я хочу сказати" пляшки "або 1259 00:51:04,900 --> 00:51:07,780 "Пляшки"? Так що я збираюся як завгодно говорити, все в порядку, 1260 00:51:07,780 --> 00:51:10,530 Я збираюся зараз оголосити змінну s1, рядок 1261 00:51:10,530 --> 00:51:13,830 одне, що збирається отримати підключені тут, а також тут, 1262 00:51:13,830 --> 00:51:16,070 тому що ці слова завжди однакові, тільки тому, що 1263 00:51:16,070 --> 00:51:17,290 характер пісні. 1264 00:51:17,290 --> 00:51:20,100 І я буду називати s2 всі слова я хочу 1265 00:51:20,100 --> 00:51:21,560 в кінці кінців з'явиться тут. 1266 00:51:21,560 --> 00:51:25,530 Зараз, буквально, в 99 випадках з 100, то це буде 1267 00:51:25,530 --> 00:51:28,820 в обох цих випадках, так як 3 множина, 2, 1268 00:51:28,820 --> 00:51:30,200 множині, 4, множина. 1269 00:51:30,200 --> 00:51:34,640 Але в цьому кутку випадок, коли ми доберемося до 2, а потім 1, або 1270 00:51:34,640 --> 00:51:37,250 навіть 1 і 0, мені потрібна ця логіка. 1271 00:51:37,250 --> 00:51:41,020 Так що я повинен провести якийсь час в моєму коді отримання цього права. 1272 00:51:41,020 --> 00:51:47,530 Так що, якщо я це зроблю, якщо я == 1, то безліч S1 одно "пляшка" 1273 00:51:47,530 --> 00:51:52,010 і s2 рівні "пляшки", тому що це буде протягом 1 1274 00:51:52,010 --> 00:51:56,340 пляшки, і це буде для 0 пляшки. 1275 00:51:56,340 --> 00:51:58,250 І це тут, що це уявляєте? 1276 00:51:58,250 --> 00:51:59,780 Просто щоб бути ясно. 1277 00:51:59,780 --> 00:52:00,620 Це просто коментар. 1278 00:52:00,620 --> 00:52:03,730 Тому той факт, що ви можете мати однорядкові коментарі означає, що ви 1279 00:52:03,730 --> 00:52:06,110 Коментувати можуть коді, як це, але іншого загального 1280 00:52:06,110 --> 00:52:09,050 парадигми, теж є те, що якщо у вас є супер-короткі фрази, 1281 00:52:09,050 --> 00:52:11,410 Ви хочете поставити себе, і це просто більш зручним для читання, щоб покласти 1282 00:52:11,410 --> 00:52:13,270 це право в кінці рядка коду, ви можете 1283 00:52:13,270 --> 00:52:15,230 Абсолютно зробити щось на зразок цього. 1284 00:52:15,230 --> 00:52:20,150 >> Так що тепер, якщо я зроблю це? Інакше, якщо я не дорівнює 1. 1285 00:52:20,150 --> 00:52:21,620 Так вибуху дорівнює - 1286 00:52:21,620 --> 00:52:23,150 Знак оклику відомий як "вибух". 1287 00:52:23,150 --> 00:52:25,080 Таким чином, вибух = 1. 1288 00:52:25,080 --> 00:52:28,530 Так що, якщо я не дорівнює 1, що я замість того, хочете зробити? 1289 00:52:28,530 --> 00:52:31,700 Ну, перше слово, яке я хочу бути що? 1290 00:52:34,620 --> 00:52:40,030 Таким чином, рядок 1 повинна бути "пляшки" для множинного пляшки, 1291 00:52:40,030 --> 00:52:42,440 і тоді це буде множина "пляшки", а також, на даний момент. 1292 00:52:42,440 --> 00:52:43,800 І ми побачимо, якщо це насправді змушує нас 1293 00:52:43,800 --> 00:52:44,870 куди ми хочемо йти. 1294 00:52:44,870 --> 00:52:47,680 Так що тепер, якщо я прокрутіть вниз тут, помітили, що я підключенням 1295 00:52:47,680 --> 00:52:50,170 Не тільки я, але s1. 1296 00:52:50,170 --> 00:52:51,860 Я підключенням я і s1. 1297 00:52:51,860 --> 00:52:54,440 А потім сюди, я мінус 1, який так само, як 1298 00:52:54,440 --> 00:52:55,920 раніше, але s2. 1299 00:52:55,920 --> 00:52:58,730 Іншими словами, я хочу, щоб англійське слово, щоб змінити основі 1300 00:52:58,730 --> 00:52:59,930 На цій логіки. 1301 00:52:59,930 --> 00:53:03,310 Тепер, вже є деякі проблеми в цьому коді. 1302 00:53:03,310 --> 00:53:08,460 Що розбите вже з воріт тут? 1303 00:53:08,460 --> 00:53:10,796 Так? 1304 00:53:10,796 --> 00:53:13,210 АУДИТОРІЯ: [нерозбірливо]. 1305 00:53:13,210 --> 00:53:13,800 >> David J. Малан: Абсолютно вірно. 1306 00:53:13,800 --> 00:53:16,030 Так що я вже порушив урок з області видимості. 1307 00:53:16,030 --> 00:53:19,610 Таким чином, я заявив S1 та S2, але я зробив це всередині 1308 00:53:19,610 --> 00:53:22,980 фігурні дужки, що означає, що так, цей код буде працювати до 1309 00:53:22,980 --> 00:53:27,430 до лінії 42, але як тільки я потрапив лінії 43, думаю, що немає 1310 00:53:27,430 --> 00:53:28,900 більше не існує? 1311 00:53:28,900 --> 00:53:32,600 Ну, думаю, що це більше не за масштабом - ні S1 та S2. 1312 00:53:32,600 --> 00:53:33,780 Тому ми повинні це виправити. 1313 00:53:33,780 --> 00:53:36,180 Отже, дозвольте мені видалити декларацій. 1314 00:53:36,180 --> 00:53:39,320 І я залишу імена змінних і видалення цього тут 1315 00:53:39,320 --> 00:53:40,120 і видаліть це тут. 1316 00:53:40,120 --> 00:53:43,557 І в якому напрямку я повинен дійсно оголосити ці речі? 1317 00:53:43,557 --> 00:53:44,960 АУДИТОРІЯ: [нерозбірливо]. 1318 00:53:44,960 --> 00:53:45,410 David J. Малан: Так, так, ймовірно, 1319 00:53:45,410 --> 00:53:46,850 прямо тут, 33-іш. 1320 00:53:46,850 --> 00:53:50,670 Таким чином, рядки s1 і рядки s2. 1321 00:53:50,670 --> 00:53:51,950 І виявляється, я можу це зробити. 1322 00:53:51,950 --> 00:53:54,260 Якщо ви оголошення двох змінних такого ж типу, 1323 00:53:54,260 --> 00:53:57,420 ви можете просто використовувати кому і зробити це в С. Все 1324 00:53:57,420 --> 00:53:58,970 Право, так що тепер у мене є дві змінні - 1325 00:53:58,970 --> 00:53:59,860 S1 та S2. 1326 00:53:59,860 --> 00:54:02,000 Я присвоєння їм значень в цих 1327 00:54:02,000 --> 00:54:04,210 Умови тут, або тут. 1328 00:54:04,210 --> 00:54:06,690 І тоді я використовую їх вниз. 1329 00:54:06,690 --> 00:54:10,960 Як вона тепер працюватиме? 1330 00:54:10,960 --> 00:54:12,740 >> Ну, це ще небагато глючить, але давайте хоча б побачити 1331 00:54:12,740 --> 00:54:13,730 як далеко ми отримали. 1332 00:54:13,730 --> 00:54:16,500 Отже, дозвольте мені піти далі і зробити beer3. 1333 00:54:16,500 --> 00:54:17,695 Це beer3? 1334 00:54:17,695 --> 00:54:19,410 Так, це beer3. 1335 00:54:19,410 --> 00:54:21,510 А тепер дозвольте мені йти вперед і працювати beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Ми, ймовірно, може пропустити більшість з них. 1338 00:54:25,840 --> 00:54:29,100 І сюди, подивись на це. 1339 00:54:29,100 --> 00:54:31,110 "Одна пляшка пива на стіні, одна пляшка пива, прийняти 1340 00:54:31,110 --> 00:54:34,306 один вниз, передавати його, 0 пляшок пива на стіні ". 1341 00:54:34,306 --> 00:54:37,570 Але я звертаю вашу увагу лише половина рішення. 1342 00:54:37,570 --> 00:54:39,620 Вид облажався тут. 1343 00:54:39,620 --> 00:54:43,030 Так що, схоже, що кут випадки виникають, коли я одно, що 1344 00:54:43,030 --> 00:54:44,030 два значення? 1345 00:54:44,030 --> 00:54:45,020 АУДИТОРІЯ: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 David J. Малан: 2 і 1. 1347 00:54:46,190 --> 00:54:48,180 Це не 1, а не 1. 1348 00:54:48,180 --> 00:54:51,890 Це дійсно просто ці останні дві строфи цієї пісні. 1349 00:54:51,890 --> 00:54:53,890 Отже, що я замість цього хочете зробити? 1350 00:54:53,890 --> 00:54:58,890 Так що я, здається, піймав випадок, коли, якщо р == 1, 1351 00:54:58,890 --> 00:55:02,240 то перше слово "пляшка", а друге слово 1352 00:55:02,240 --> 00:55:07,230 є "пляшки". Але тут, я хочу змінити це, щоб бути == 2. 1353 00:55:07,230 --> 00:55:08,570 І якщо це так, то, що я хочу 1354 00:55:08,570 --> 00:55:09,620 Перше слово бути? 1355 00:55:09,620 --> 00:55:10,430 АУДИТОРІЯ: "Пляшки". 1356 00:55:10,430 --> 00:55:12,890 David J. Малан: "Пляшки", так і для двох пляшок. 1357 00:55:12,890 --> 00:55:14,690 І тоді це слово тут має бути - 1358 00:55:14,690 --> 00:55:15,340 АУДИТОРІЯ: "Пляшка". 1359 00:55:15,340 --> 00:55:17,316 David J. Малан: "Пляшка", особлива. 1360 00:55:20,430 --> 00:55:25,160 >> Гаразд, давайте масштаб, повернутися сюди, повторні зробити, 1361 00:55:25,160 --> 00:55:28,590 повторні beer3, Тип 99 разів. 1362 00:55:28,590 --> 00:55:30,710 Гаразд, "Помилка сегментації (ядро скидали)". 1363 00:55:30,710 --> 00:55:32,780 Що я зробив не так? 1364 00:55:36,050 --> 00:55:38,722 АУДИТОРІЯ: Ви не мають значення [нерозбірливо]. 1365 00:55:38,722 --> 00:55:40,480 David J. Малан: Ах, відмінна точка. 1366 00:55:40,480 --> 00:55:43,310 Гаразд, так що тут не так? 1367 00:55:43,310 --> 00:55:45,450 Таким чином, сегментація вина, і ми фактично побачимо 1368 00:55:45,450 --> 00:55:49,020 це досить багато разів у майбутньому, свідомо. 1369 00:55:49,020 --> 00:55:51,030 Але зараз, що це насправді означає? 1370 00:55:51,030 --> 00:55:53,620 Сегментація вина майже завжди означає, що у вас є 1371 00:55:53,620 --> 00:55:56,760 якось намагався отримати доступ до пам'яті, оперативної пам'яті в комп'ютері, 1372 00:55:56,760 --> 00:56:00,600 що у вас немає, що ви, власне, не просив 1373 00:56:00,600 --> 00:56:02,050 операційна система для. 1374 00:56:02,050 --> 00:56:04,440 Таким чином, в цьому випадку, зверніть увагу, що я зробив, що 1375 00:56:04,440 --> 00:56:05,870 недоліки в моїй логіці. 1376 00:56:05,870 --> 00:56:09,500 Я призначений S1 та S2 значення, якщо я дорівнює 1. 1377 00:56:09,500 --> 00:56:11,590 Я також зробив, що якщо я рівна 2. 1378 00:56:11,590 --> 00:56:13,710 Але я не зробив це в нескінченне число інших 1379 00:56:13,710 --> 00:56:14,690 Можливості - 1380 00:56:14,690 --> 00:56:17,940 Зокрема, 3 або 4 або точка, точка, точка, 99. 1381 00:56:17,940 --> 00:56:20,100 Так що виправити це може бути просто давайте 1382 00:56:20,100 --> 00:56:22,190 є інший стан. 1383 00:56:22,190 --> 00:56:26,780 І відпустив мене сюди і сказав s1 одно - 1384 00:56:26,780 --> 00:56:28,180 якою вона має бути тут? 1385 00:56:28,180 --> 00:56:28,750 АУДИТОРІЯ: [нерозбірливо]. 1386 00:56:28,750 --> 00:56:30,460 >> David J. Малан: "Пляшки", тому що в загальному випадку, 1387 00:56:30,460 --> 00:56:32,020 це просто те ж саме. 1388 00:56:32,020 --> 00:56:35,580 Так дорівнює цитата, кінець цитати ", пляшки". Так що для множинного 1389 00:56:35,580 --> 00:56:41,010 пляшки, а потім тут, на множину пляшок. 1390 00:56:41,010 --> 00:56:44,580 Отже, тепер дозвольте мені повернутися до моєї вікно терміналу, 1391 00:56:44,580 --> 00:56:47,200 перекомпиляция, знову запустити його. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Ось так. 1394 00:56:49,150 --> 00:56:50,610 І давайте зробимо швидку перевірку осудності. 1395 00:56:50,610 --> 00:56:52,400 Технічно, ми хотіли б, щоб прочитати всі з них, щоб переконатися, що 1396 00:56:52,400 --> 00:56:53,370 вони мають рацію, але давайте подивимося на 1397 00:56:53,370 --> 00:56:54,640 найменш відомих злочинців. 1398 00:56:54,640 --> 00:56:57,370 3 пляшки, 2 пляшки, 2 пляшки, 1 1399 00:56:57,370 --> 00:57:00,380 Пляшка, 1 пляшка, 0 пляшки. 1400 00:57:00,380 --> 00:57:03,080 Ми, здається, принаймні, встановив його на даний момент. 1401 00:57:03,080 --> 00:57:06,010 Але заковика в тому, що те, що Бог жахливий безлад, це 1402 00:57:06,010 --> 00:57:07,470 просто вирішити нерозумно 1403 00:57:07,470 --> 00:57:09,540 один символ граматичних деталей. 1404 00:57:09,540 --> 00:57:11,150 Так що частково причиною того, що я вирізав цей куточок 1405 00:57:11,150 --> 00:57:14,090 Раніше, тому що вона просто повністю дратує необхідність 1406 00:57:14,090 --> 00:57:15,020 написати стільки коду. 1407 00:57:15,020 --> 00:57:17,530 Але виявляється, що є трохи більш елегантним способами 1408 00:57:17,530 --> 00:57:20,110 виражають одне і те ж. 1409 00:57:20,110 --> 00:57:22,040 І ми можемо зробити це таким чином. 1410 00:57:22,040 --> 00:57:23,890 >> Дозвольте мені залишити це на екрані на мить і 1411 00:57:23,890 --> 00:57:27,320 ввести щось, відоме як потрійний оператор. 1412 00:57:27,320 --> 00:57:29,600 Це свого роду один рядок, що просто хотів зробити нашу 1413 00:57:29,600 --> 00:57:31,880 Живе трохи сексуальніше, як і обіцяв. 1414 00:57:31,880 --> 00:57:33,130 І я збираюся зробити це таким чином. 1415 00:57:33,130 --> 00:57:35,810 Дайте мені рядка називається s1, і дозвольте мені 1416 00:57:35,810 --> 00:57:37,200 призначити його таким чином. 1417 00:57:37,200 --> 00:57:39,900 (Я == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Пляшка", інакше "пляшки". String s2 отримує (я == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Пляшка", інакше "пляшки". 1420 00:57:52,670 --> 00:57:57,050 Отже, що ж тоді різниця? 1421 00:57:57,050 --> 00:57:59,370 Ці два рядки коду, я вважаю, може 1422 00:57:59,370 --> 00:58:02,200 замінити весь цей бардак. 1423 00:58:02,200 --> 00:58:04,280 Так я називаю це безлад, тільки тому, що вона як би треться мене 1424 00:58:04,280 --> 00:58:05,940 неправильним чином, що він так багато рядків коду. 1425 00:58:05,940 --> 00:58:06,650 Чи не неправильно. 1426 00:58:06,650 --> 00:58:07,700 Це не поганий дизайн. 1427 00:58:07,700 --> 00:58:10,140 Мовляв, це абсолютно правильний і прекрасно. 1428 00:58:10,140 --> 00:58:12,970 Але кодування стає стомлюючим, якщо у вас є, щоб виразити себе так, 1429 00:58:12,970 --> 00:58:15,530 Чорт спеціально знову і знову, і знову з простим 1430 00:58:15,530 --> 00:58:16,620 Сценарій, як це. 1431 00:58:16,620 --> 00:58:19,470 Так що C має деякі ярлики, як це. 1432 00:58:19,470 --> 00:58:24,270 Так що це по суті говорить оголосити рядок називається S1 і 1433 00:58:24,270 --> 00:58:32,610 призначити його або це значення чи це значення, якщо р == - 1434 00:58:32,610 --> 00:58:35,290 Вибачте, я повинен сказати, що це більш чітко. 1435 00:58:35,290 --> 00:58:41,680 Оголошення змінної s1, присвоїти йому це значення, якщо це правда. 1436 00:58:41,680 --> 00:58:44,280 В іншому випадку, присвоїти йому це значення. 1437 00:58:44,280 --> 00:58:47,220 Отже, іншими словами, це свого роду одна лінія способом 1438 00:58:47,220 --> 00:58:51,490 кажуть, якщо інше робити поступки по шляху. 1439 00:58:51,490 --> 00:58:55,540 Так що, якщо я дорівнює 1, а потім піти далі і називають це "пляшки". І 1440 00:58:55,540 --> 00:58:59,830 то це інше, називають його "пляшки". Між тим, s2, 1441 00:58:59,830 --> 00:59:04,060 Друге слово, що ми повинні визначити, якщо я дорівнює 2, ми будемо 1442 00:59:04,060 --> 00:59:08,350 встановіть перемикач S2 в "пляшці". В іншому випадку, встановіть його в "пляшки". І те, що 1443 00:59:08,350 --> 00:59:11,460 це означає, що тепер я можу пройти через це і видалити всі 1444 00:59:11,460 --> 00:59:12,860 ці рядки коду. 1445 00:59:12,860 --> 00:59:17,220 І коли я кажу, трохи смішно, що це зараз 1446 00:59:17,220 --> 00:59:20,060 сексуальніше, це сексуальніше в свого роду стилістичні сенсі. 1447 00:59:20,060 --> 00:59:22,660 Той факт, що функціонально цей код насправді відбувається в 1448 00:59:22,660 --> 00:59:24,610 зробити точно таку ж річ. 1449 00:59:24,610 --> 00:59:26,890 І хоча це може виглядати трохи загадкові на перший 1450 00:59:26,890 --> 00:59:29,250 погляд, тому що ми не бачили цю конструкцію раніше, я б 1451 00:59:29,250 --> 00:59:31,850 стверджують, що це в кінцевому рахунку буде набагато більше 1452 00:59:31,850 --> 00:59:34,820 читання і набагато простіше для людей, щоб ми начебто 1453 00:59:34,820 --> 00:59:36,830 зрозуміти, тому що тепер ви можете просто прочитати 1454 00:59:36,830 --> 00:59:38,830 Код всі на одній лінії. 1455 00:59:38,830 --> 00:59:41,550 Він як і раніше близькі по духу, якщо там, де це 1456 00:59:41,550 --> 00:59:44,920 стан і тоді, це те, що всередині, якщо і це 1457 00:59:44,920 --> 00:59:46,480 це те, що знаходиться всередині іншого. 1458 00:59:46,480 --> 00:59:49,450 Але ми можемо зробити це, тільки набагато більш елегантно. 1459 00:59:49,450 --> 00:59:52,650 >> І якщо я тепер повернутися до моїх термінал, видаливши всі 1460 00:59:52,650 --> 00:59:55,530 з цих ліній і замінили їх лише ті два, 1461 00:59:55,530 --> 01:00:00,150 перекомпіляції, повторні пляшки пива з 99 Зверніть увагу, що моя 1462 01:00:00,150 --> 01:00:03,350 граматики є, по суті, як і раніше вірні. 1463 01:00:03,350 --> 01:00:06,160 Отже, ще раз, щось почати. 1464 01:00:06,160 --> 01:00:08,840 2 пляшки пива, 1 пляшку пива. 1465 01:00:08,840 --> 01:00:09,370 Виглядає права. 1466 01:00:09,370 --> 01:00:10,100 Так. 1467 01:00:10,100 --> 01:00:13,900 Так що у нас є набагато більш ємкі рішення. 1468 01:00:13,900 --> 01:00:16,020 Так що це теж, як ви отримаєте більш комфортно з C, не 1469 01:00:16,020 --> 01:00:18,630 обов'язково з першого PSET або навіть секунди, але 1470 01:00:18,630 --> 01:00:21,170 розумію, що ці конструкції може дозволити нам робити речі, коли-небудь 1471 01:00:21,170 --> 01:00:22,810 більш елегантно. 1472 01:00:22,810 --> 01:00:25,200 Тепер давайте зробимо ще одну річ тут. 1473 01:00:25,200 --> 01:00:31,460 Дозвольте мені йти вперед і відкривати return1.c. 1474 01:00:31,460 --> 01:00:34,340 Тепер давайте почнемо вирішити ще одну проблему таким чином, що 1475 01:00:34,340 --> 01:00:37,140 дозволяє написати більш складний код. 1476 01:00:37,140 --> 01:00:39,960 >> Отже, ось проста маленька програма, мета якої в житті 1477 01:00:39,960 --> 01:00:41,870 це для збільшення значення. 1478 01:00:41,870 --> 01:00:43,100 А насправді, давайте зробимо крок назад. 1479 01:00:43,100 --> 01:00:44,400 Дозвольте мені зробити це вручну. 1480 01:00:44,400 --> 01:00:52,200 Дозвольте мені зробити включати і Int основних (недійсними). 1481 01:00:52,200 --> 01:00:53,450 І дозвольте мені називати це increment.c. 1482 01:00:57,150 --> 01:00:58,570 І те, що я хочу робити? 1483 01:00:58,570 --> 01:01:02,240 Я збираюся йти вперед і сказати щось на кшталт - 1484 01:01:02,240 --> 01:01:04,280 ми будемо називати числа ж - 1485 01:01:04,280 --> 01:01:04,980 Int х. 1486 01:01:04,980 --> 01:01:13,670 Так Int х одержує 2; Printf х% й, нова лінія, х. 1487 01:01:13,670 --> 01:01:16,780 Так що я друкую швидко, але начебто знайомі речі зараз. 1488 01:01:16,780 --> 01:01:18,830 Тоді я буду робити X + +. 1489 01:01:18,830 --> 01:01:21,710 Тоді я йду до друку в тому ж пропозицію ще раз. 1490 01:01:21,710 --> 01:01:24,550 А потім я збираюся повертати 0 тільки для виходу з програми. 1491 01:01:24,550 --> 01:01:25,960 Гаразд, так це програми, які 1492 01:01:25,960 --> 01:01:26,960 прирощення числа. 1493 01:01:26,960 --> 01:01:29,830 Це перший вихід для ініціалізації щось 2, а потім це 1494 01:01:29,830 --> 01:01:33,470 збирається збільшувати його та роздрукувати його знову. 1495 01:01:33,470 --> 01:01:36,930 >> Так що давайте працювати приріст, неймовірно простий програми. 1496 01:01:36,930 --> 01:01:40,940 Але припустимо тепер, що я хочу куб значення, так що 1497 01:01:40,940 --> 01:01:42,490 щось кілька довільно. 1498 01:01:42,490 --> 01:01:45,140 І я насправді хочу робити х одержує куб її. 1499 01:01:45,140 --> 01:01:47,570 Так що я міг би використовувати те, що називається функцією військовополонених, але я не 1500 01:01:47,570 --> 01:01:48,650 дійсно знаю, де це поки. 1501 01:01:48,650 --> 01:01:50,580 Так що я збираюся зробити це старомодним способом. 1502 01:01:50,580 --> 01:01:54,550 х разів у цьому рівних х разів х разів х. 1503 01:01:54,550 --> 01:01:56,880 Так що я кубатури значення, помноживши її на себе знову 1504 01:01:56,880 --> 01:02:00,440 і знову і знову, так що ми отримуємо владу 1505 01:02:00,440 --> 01:02:02,050 3-в цьому випадку. 1506 01:02:02,050 --> 01:02:06,000 Так що тепер числа я повинен роздрукувати і повинно бути, як ми побачимо 1507 01:02:06,000 --> 01:02:08,450 тут - зробити крок, так що це насправді не зовсім збільшити 1508 01:02:08,450 --> 01:02:10,260 більше, але ми залишимо тільки назва - 1509 01:02:10,260 --> 01:02:11,590 2, а потім 8. 1510 01:02:11,590 --> 01:02:17,670 Тепер у нас є зачатки можливість для уточнення 1511 01:02:17,670 --> 01:02:21,570 Тут, в якій ця річ вимірювання кубатури множення числа 1512 01:02:21,570 --> 01:02:24,680 сама по собі сама по собі сама по собі відчуває, як це може бути просто 1513 01:02:24,680 --> 01:02:27,920 Корисно мати як функція, так само, як хтось вирішив, 1514 01:02:27,920 --> 01:02:30,430 років тому - Ви знаєте, на зразок корисно, якщо один з нас сідає 1515 01:02:30,430 --> 01:02:33,120 і пише Printf, так що інший світ може його використовувати, 1516 01:02:33,120 --> 01:02:36,160 Чому б нам не сісти і написати функцію, називається кубом 1517 01:02:36,160 --> 01:02:39,250 , Що робить це вимірювання кубатури для нас, тому ми не повинні вручну 1518 01:02:39,250 --> 01:02:41,500 здійснення поняття кубатури значення тут? 1519 01:02:41,500 --> 01:02:44,040 >> Таким чином, простий приклад, але давайте йти вперед і використовувати це в якості 1520 01:02:44,040 --> 01:02:46,280 можливість написати свою функцію. 1521 01:02:46,280 --> 01:02:49,110 Таким чином, до цих пір ми використовували тільки основні, і ми використовували інші 1522 01:02:49,110 --> 01:02:51,780 Народний функції, але ми ще не написали наш власний. 1523 01:02:51,780 --> 01:02:52,650 Таким чином, тут ми йдемо. 1524 01:02:52,650 --> 01:02:56,330 Я збираюся піти далі і написати функцію, називається кубом. 1525 01:02:56,330 --> 01:02:58,490 І я буду мати це займе вхід. 1526 01:02:58,490 --> 01:03:02,070 Таким чином, її вхід буде ціле число. 1527 01:03:02,070 --> 01:03:03,570 І те, що він збирається робити? 1528 01:03:03,570 --> 01:03:08,500 Це збирається оголосити Int вихід = вхід рази вхід 1529 01:03:08,500 --> 01:03:09,880 раз вхід. 1530 01:03:09,880 --> 01:03:12,190 А потім він збирається повернутися, що вихід. 1531 01:03:12,190 --> 01:03:14,500 І тоді я повинен бути конкретним зараз. 1532 01:03:14,500 --> 01:03:16,820 Ця функція буде повертати Int. 1533 01:03:16,820 --> 01:03:19,130 Так от те, як Ви б написати свої власні функції. 1534 01:03:19,130 --> 01:03:20,850 Спочатку вирішите, що ім'я 1535 01:03:20,850 --> 01:03:21,720 Функція буде. 1536 01:03:21,720 --> 01:03:23,964 І взагалі, щось пояснювальній добре, так що я 1537 01:03:23,964 --> 01:03:25,060 називають його куб. 1538 01:03:25,060 --> 01:03:27,180 Потім ви повинні вказати, що він збирається повернутися, що 1539 01:03:27,180 --> 01:03:28,240 його вихід буде. 1540 01:03:28,240 --> 01:03:29,595 І ми не так вже багато варіантів поки немає. 1541 01:03:29,595 --> 01:03:32,260 Int, Char, дробовий, логічний, рядок. 1542 01:03:32,260 --> 01:03:34,260 А зараз я збираюся дотримуватися Int, тому що я хочу, 1543 01:03:34,260 --> 01:03:35,880 для повернення цілого числа. 1544 01:03:35,880 --> 01:03:38,770 Тоді ви повинні вказати, що його входів, якщо такі є. 1545 01:03:38,770 --> 01:03:41,570 І якщо куб приймає аргумент, бере щось між 1546 01:03:41,570 --> 01:03:44,970 дужки, ви повинні дати аргумент, що ім'я, щоб 1547 01:03:44,970 --> 01:03:47,860 Ви можете назвати це те, як ви реалізуєте або записи 1548 01:03:47,860 --> 01:03:50,550 цю функцію, і ви повинні дати йому типом, який в цьому 1549 01:03:50,550 --> 01:03:51,810 випадку буде Int. 1550 01:03:51,810 --> 01:03:54,690 Коротше кажучи, куба це функція, яка приймає ціле 1551 01:03:54,690 --> 01:03:57,560 якості вхідних даних і повертає ціле число в якості висновку. 1552 01:03:57,560 --> 01:03:59,240 >> Так що ж робити з цим входом? 1553 01:03:59,240 --> 01:04:03,710 Ну, а в рядку 14, я оголошую змінну вихідні, і я 1554 01:04:03,710 --> 01:04:07,410 присвоїти йому значення, вхід разів вхідні раз вхід. 1555 01:04:07,410 --> 01:04:11,490 А потім я повернуся вихід. 1556 01:04:11,490 --> 01:04:14,890 Так як я можу використовувати це тоді? 1557 01:04:14,890 --> 01:04:19,210 Що я можу змінити ці наголосив символів в рядку 1558 01:04:19,210 --> 01:04:21,006 7 повинні бути, як ви думаєте? 1559 01:04:21,006 --> 01:04:21,800 АУДИТОРІЯ: [нерозбірливо]. 1560 01:04:21,800 --> 01:04:25,570 David J. Малан: Так, так кубі х. 1561 01:04:25,570 --> 01:04:28,290 Так що х є змінною, яка означає, що вона має деяке значення. 1562 01:04:28,290 --> 01:04:30,190 На щастя, це тип цілого числа. 1563 01:04:30,190 --> 01:04:34,280 І тому х INT, це означає, що я можу передати його в куб. 1564 01:04:34,280 --> 01:04:39,500 І хоча я перевизначення значення х із значенням 1565 01:04:39,500 --> 01:04:42,780 куба х, як це було у випадку до цих пір, в будь-який час 1566 01:04:42,780 --> 01:04:46,150 мають знак рівності і рядки коду, матеріал на право 1567 01:04:46,150 --> 01:04:49,090 запускається на виконання, а потім отримує призначення в 1568 01:04:49,090 --> 01:04:50,150 Значення зліва. 1569 01:04:50,150 --> 01:04:52,950 Таким чином, порядок операцій так, як ми хотіли б сподіватися. 1570 01:04:52,950 --> 01:04:56,620 Так це працює? 1571 01:04:56,620 --> 01:04:58,410 Ну, відпусти мене сюди. 1572 01:04:58,410 --> 01:04:59,970 Дозвольте мені відкрити моє вікно терміналу. 1573 01:04:59,970 --> 01:05:03,610 Дозволь мені зробити крок, Enter. 1574 01:05:03,610 --> 01:05:07,140 "Неявне оголошення" куб "функція не працює в 1575 01:05:07,140 --> 01:05:13,700 C99. «Як осторонь, C99 відноситься до мови C, як це було 1576 01:05:13,700 --> 01:05:16,790 визначений в 1999 році, яке було оновлення на версію з 1577 01:05:16,790 --> 01:05:19,360 1989 року, який є оновленням в порівнянні з початковою. 1578 01:05:19,360 --> 01:05:21,740 Так що все це значить. 1579 01:05:21,740 --> 01:05:24,250 >> Так що ж це значить, що "неявне оголошення 1580 01:05:24,250 --> 01:05:26,790 "Куб" функція не працює? "Це прямо тут. 1581 01:05:26,790 --> 01:05:28,430 Це прямо там, у рядку 12. 1582 01:05:28,430 --> 01:05:30,460 АУДИТОРІЯ: [нерозбірливо]. 1583 01:05:30,460 --> 01:05:30,730 David J. Малан: Що це? 1584 01:05:30,730 --> 01:05:32,470 АУДИТОРІЯ: Це не раніше. 1585 01:05:32,470 --> 01:05:33,540 David J. Малан: Це не раніше. 1586 01:05:33,540 --> 01:05:34,740 Так ось у чому справа. 1587 01:05:34,740 --> 01:05:38,190 З видом дурний, або компіляторів є свого роду дурним. 1588 01:05:38,190 --> 01:05:41,060 Вони дійсно тільки те, що ви говорите їм зробити. 1589 01:05:41,060 --> 01:05:44,770 А вони, зокрема, тільки читати ваш код зверху вниз, 1590 01:05:44,770 --> 01:05:45,620 зліва направо. 1591 01:05:45,620 --> 01:05:49,140 Так що, якщо компілятор, Clang, читає ваш код, лінія 1, 1592 01:05:49,140 --> 01:05:50,120 з'ясовує, як це зробити. 1593 01:05:50,120 --> 01:05:50,940 Ах, ось іде основний. 1594 01:05:50,940 --> 01:05:53,000 Добре, дозвольте мені піти далі і оголосити змінну х. 1595 01:05:53,000 --> 01:05:54,160 Дозвольте мені надрукувати що-небудь. 1596 01:05:54,160 --> 01:05:55,890 Лінія 7, що ж таке куб? 1597 01:05:55,890 --> 01:05:58,230 Це не оголошена в stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Він не приходить з С. Я поняття не маю, що робити. 1599 01:06:00,950 --> 01:06:03,960 І так Clang просто зупиняється і виходить з повідомленням про помилку. 1600 01:06:03,960 --> 01:06:05,850 Таким чином ми можемо виправити це в кілька способів. 1601 01:06:05,850 --> 01:06:10,530 Ми можемо навчити Clang, що куб є просто переміщення яких 1602 01:06:10,530 --> 01:06:11,820 декларація. 1603 01:06:11,820 --> 01:06:14,640 Так що я вирізав і вставив її поверх основного. 1604 01:06:14,640 --> 01:06:17,770 Тепер розумію, що тільки тому, що головне, вже не перший, це 1605 01:06:17,770 --> 01:06:19,150 як і раніше виконується за замовчуванням. 1606 01:06:19,150 --> 01:06:20,060 Головні є основною. 1607 01:06:20,060 --> 01:06:21,022 Це ім'я за замовчуванням функція. 1608 01:06:21,022 --> 01:06:22,930 Не має значення, де він знаходиться в файлі. 1609 01:06:22,930 --> 01:06:26,910 Але принаймні тепер Clang бачив куба, перш ніж використовувати його. 1610 01:06:26,910 --> 01:06:28,500 Отже, давайте подивимося, якщо Clang є щасливим зараз. 1611 01:06:28,500 --> 01:06:31,410 Зробіть крок, вона компіляції цього часу. 1612 01:06:31,410 --> 01:06:33,060 >> Дозвольте мені виконати приріст. 1613 01:06:33,060 --> 01:06:34,810 І справді, здається, працює. 1614 01:06:34,810 --> 01:06:36,810 Тепер ви можете придумати сценарії, де в кінцевому підсумку 1615 01:06:36,810 --> 01:06:38,650 це не можливо поставити будь-якої функції 1616 01:06:38,650 --> 01:06:39,740 вище всіх інших функцій. 1617 01:06:39,740 --> 01:06:42,140 Ви застрягли в цьому нескінченному циклі в дійсності, 1618 01:06:42,140 --> 01:06:43,480 де цей хлопець хоче бути тут, але це 1619 01:06:43,480 --> 01:06:44,390 хлопець повинен бути там. 1620 01:06:44,390 --> 01:06:45,830 Так що не завжди працює. 1621 01:06:45,830 --> 01:06:49,020 Так що, на щастя, C має більш елегантне рішення. 1622 01:06:49,020 --> 01:06:50,790 Я збираюся поставити це туди, де вона була, просто тому, що 1623 01:06:50,790 --> 01:06:53,390 воліють, як в принципі, що головне завжди бути 1624 01:06:53,390 --> 01:06:55,550 у верхній частині, тому що це просто приємно бачити, що ця програма 1625 01:06:55,550 --> 01:06:56,920 робить за замовчуванням. 1626 01:06:56,920 --> 01:06:58,950 І те, що я збираюся зробити тут це оголосити, що називається 1627 01:06:58,950 --> 01:07:00,250 прототип. 1628 01:07:00,250 --> 01:07:05,730 Я збираюся повторно заявляю про свій кубі функції, буквально 1629 01:07:05,730 --> 01:07:07,180 копіювання і вставки. 1630 01:07:07,180 --> 01:07:08,290 Насправді, це не в буквальному сенсі. 1631 01:07:08,290 --> 01:07:13,060 Таким чином, буквально копіюючи і вставляючи лінії 15 1632 01:07:13,060 --> 01:07:15,160 до вище лінії 6. 1633 01:07:15,160 --> 01:07:17,010 Це не має значення, якої лінії це закінчується на. 1634 01:07:17,010 --> 01:07:18,380 Це трапляється, у рядку 4. 1635 01:07:18,380 --> 01:07:19,950 Але це мають бути, перш ніж основна. 1636 01:07:19,950 --> 01:07:21,150 Але помітите різницю. 1637 01:07:21,150 --> 01:07:24,100 4 лінія закінчується крапкою з комою, що означає, гей, 1638 01:07:24,100 --> 01:07:27,510 Clang, повірте мені на слово, що існує функція 1639 01:07:27,510 --> 01:07:31,350 називається кубом, який приймає і повертає Int Int. 1640 01:07:31,350 --> 01:07:33,020 Але я не скажу тобі, що це таке. 1641 01:07:33,020 --> 01:07:35,180 Просто знаю, що я обіцяю розповісти вам в кінці кінців. 1642 01:07:35,180 --> 01:07:38,490 І дійсно, зараз це нормально, що це внизу. 1643 01:07:38,490 --> 01:07:41,275 >> Так що це, як правило, краще, тому що тоді у верхній частині 1644 01:07:41,275 --> 01:07:44,240 Ваш файл, ви можете просто відбарабанив, швидкого вогню, одним рядком 1645 01:07:44,240 --> 01:07:46,470 кожна, що імена ваші функції, які їхні 1646 01:07:46,470 --> 01:07:49,120 Входи, що їх виходи. 1647 01:07:49,120 --> 01:07:52,210 А якщо бути більш ясним, як правило, означає введення аргументів або 1648 01:07:52,210 --> 01:07:54,110 Параметр, синонімами. 1649 01:07:54,110 --> 01:07:56,890 Вихідний означає повернення вартості, що робить це 1650 01:07:56,890 --> 01:07:58,700 руки до мене спиною. 1651 01:07:58,700 --> 01:08:03,420 Тому в даному випадку тут, куб був оголошений у верхній частині, але 1652 01:08:03,420 --> 01:08:06,940 визначено, інакше відомий як реалізовані, в нижній частині. 1653 01:08:06,940 --> 01:08:09,620 Отже, тепер давайте повернемося сюди і знову запустити цей. 1654 01:08:09,620 --> 01:08:13,430 Так що тепер дозвольте мені йти вперед і повторно запустити зробити, повторно запустити приріст. 1655 01:08:13,430 --> 01:08:16,500 І тепер, здається, працює просто відмінно. 1656 01:08:16,500 --> 01:08:19,450 Отже, тепер ми можемо йти вперед і враховувати щось подібне 1657 01:08:19,450 --> 01:08:23,720 Пиво приклад у цій четвертій версії. 1658 01:08:23,720 --> 01:08:25,590 Отже, дозвольте мені прокрутити вниз тут. 1659 01:08:25,590 --> 01:08:28,149 І зауважив, що я як би прийняв цей урок близько до серця тільки зараз. 1660 01:08:28,149 --> 01:08:31,140 Той факт, що я співав той же строфі знову і 1661 01:08:31,140 --> 01:08:34,130 знову і знову, в тому ж рядку хору в пісні, відчував себе 1662 01:08:34,130 --> 01:08:36,439 Наприклад, чому не я чинника, що з в функцію? 1663 01:08:36,439 --> 01:08:38,470 І дійсно, це має бути одним із мотивів. 1664 01:08:38,470 --> 01:08:40,960 Крім того, що хтось ще у світі може знадобитися 1665 01:08:40,960 --> 01:08:42,390 використовувати куб функцію - 1666 01:08:42,390 --> 01:08:44,560 це хороший привід, щоб розкласти щось і написати 1667 01:08:44,560 --> 01:08:45,720 власні функції - 1668 01:08:45,720 --> 01:08:48,720 якщо є шматок коду у вашій програмі, яка просто робить 1669 01:08:48,720 --> 01:08:51,370 концептуальному сенсі, що ви начебто хочете, щоб дати йому 1670 01:08:51,370 --> 01:08:53,740 ім'я - як в даному випадку, хору - 1671 01:08:53,740 --> 01:08:57,380 Ви можете так само написати, що в якості окремої функції. 1672 01:08:57,380 --> 01:08:59,560 Ви не повинні написати все, в основному, якщо він тільки 1673 01:08:59,560 --> 01:09:02,609 почуває себе чистою, щоб відокремити його і дати йому ім'я. 1674 01:09:02,609 --> 01:09:05,529 >> Тому в даному випадку тут, помітили, що в мене є коментар на вершині 1675 01:09:05,529 --> 01:09:06,859 це функція, яка просто співає про 1676 01:09:06,859 --> 01:09:08,630 зазначено кількість пляшок. 1677 01:09:08,630 --> 01:09:10,609 Зауважте, що тут мені не потрібно називати ці 1678 01:09:10,609 --> 01:09:12,520 речі вхід і вихід. 1679 01:09:12,520 --> 01:09:16,090 У самому справі, на цей раз я просто зателефонував мій вклад б за пляшку. 1680 01:09:16,090 --> 01:09:19,960 І зверніть увагу, тут, порожнеча пропонує те, що? 1681 01:09:19,960 --> 01:09:21,309 Це хор - 1682 01:09:21,309 --> 01:09:22,660 АУДИТОРІЯ: Не повернути його. 1683 01:09:22,660 --> 01:09:23,870 David J. Малан: не повертає значення. 1684 01:09:23,870 --> 01:09:26,800 І справді, функції не повинні повертати значення. 1685 01:09:26,800 --> 01:09:28,060 Вони просто можуть щось зробити. 1686 01:09:28,060 --> 01:09:30,270 Вони можуть мати так звані побічні ефекти, які в цьому 1687 01:09:30,270 --> 01:09:33,109 випадку це просто ціла купа друку на екрані. 1688 01:09:33,109 --> 01:09:36,580 Так зауважити, що цей код тут, я буквально тільки що вкрали у 1689 01:09:36,580 --> 01:09:37,680 в попередньому прикладі. 1690 01:09:37,680 --> 01:09:39,930 Різниця лише в тому, замість використання я, як моя 1691 01:09:39,930 --> 01:09:42,890 змінних, я зараз, використовуючи б, як мій змінної. 1692 01:09:42,890 --> 01:09:45,880 Так що я б сюди, я б сюди, я б 1693 01:09:45,880 --> 01:09:47,109 мінус 1 тут. 1694 01:09:47,109 --> 01:09:49,279 Але код точно так само. 1695 01:09:49,279 --> 01:09:52,529 Але тільки, щоб показати вам, як ми можемо використовувати це, відпусти мене 1696 01:09:52,529 --> 01:09:56,780 вперед і фактично змінити це буде цикл. 1697 01:09:56,780 --> 01:10:03,850 для (INT я = п;> п, I -). 1698 01:10:03,850 --> 01:10:06,230 >> Так що я вкрав, що з нашого попереднього прикладу. 1699 01:10:06,230 --> 01:10:08,970 Раніше він знаходиться в рядку 37, що я б почав 1700 01:10:08,970 --> 01:10:10,640 співати цю пісню дратує. 1701 01:10:10,640 --> 01:10:15,810 Але замість цього, я просто хочу, щоб тепер називають хором я. 1702 01:10:15,810 --> 01:10:16,870 Готово. 1703 01:10:16,870 --> 01:10:20,260 Так що тепер у кожній ітерації цього циклу, я називаю це іншим 1704 01:10:20,260 --> 01:10:22,220 Функція, хор, який мені довелося писати. 1705 01:10:22,220 --> 01:10:24,110 Вона не була написана кимось ще рік тому. 1706 01:10:24,110 --> 01:10:27,930 Але хор, тим часом, використовує Printf для друку 1707 01:10:27,930 --> 01:10:29,840 з цих чотирьох ліній. 1708 01:10:29,840 --> 01:10:32,720 Але те, що я дзвоню хор знову і знову 1709 01:10:32,720 --> 01:10:35,900 петля означає, що я збираюся отримати, в самому кінці, 1710 01:10:35,900 --> 01:10:39,310 точно таку ж пісню, як у мене до цих пір. 1711 01:10:39,310 --> 01:10:42,130 Коротше кажучи, тепер, якщо я оглядаюся на свій код, навіть якщо 1712 01:10:42,130 --> 01:10:44,240 функціонально це рівносильно, зверніть увагу, що це 1713 01:10:44,240 --> 01:10:46,020 починають отримувати ще більше читаються. 1714 01:10:46,020 --> 01:10:48,410 Я точно не знаю, як GetInt 1715 01:10:48,410 --> 01:10:49,250 реалізований. 1716 01:10:49,250 --> 01:10:52,050 Чесно кажучи, я не знаю, як хор реалізований. 1717 01:10:52,050 --> 01:10:52,970 Але це не має значення для мене. 1718 01:10:52,970 --> 01:10:55,620 Мене не хвилює, тому що тепер я можу сортувати, як людина, читати 1719 01:10:55,620 --> 01:10:57,050 це від верху до низу. 1720 01:10:57,050 --> 01:10:59,950 І тому, що функції називаються по тому, що вони 1721 01:10:59,950 --> 01:11:02,910 робити, мій код більш читабельним. 1722 01:11:02,910 --> 01:11:05,190 А так як наші програми отримати набагато більш складною - 1723 01:11:05,190 --> 01:11:07,220 До кінця семестру, ви будете писати сотні рядків 1724 01:11:07,220 --> 01:11:10,970 коду в мовах, як PHP і JavaScript і т.п. - 1725 01:11:10,970 --> 01:11:13,550 Ви побачите, що це набагато простіше, ніж стежити за 1726 01:11:13,550 --> 01:11:14,080 що ви зробили. 1727 01:11:14,080 --> 01:11:15,810 І коли ви починаєте співпрацю з друзями або 1728 01:11:15,810 --> 01:11:19,010 партнерам чи колегам, ви будете мати можливість писати набагато більше 1729 01:11:19,010 --> 01:11:22,910 масивних програм, починаючи здійснювати ці основні 1730 01:11:22,910 --> 01:11:23,990 будівельні блоки. 1731 01:11:23,990 --> 01:11:25,550 >> Таким чином, з урахуванням сказаного, чому ми не називаємо це день? 1732 01:11:25,550 --> 01:11:27,190 І ми будемо бачити вас в середу. 1733 01:11:27,190 --> 01:11:33,611 [Оплески]