1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Частина 4] [менш комфортно] 2 00:00:02,000 --> 00:00:04,000 [Nate Хардісон] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Це CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Гаразд, ласкаво просимо до розділу. 5 00:00:10,000 --> 00:00:13,000 У розділі цього тижня ми збираємося зробити кілька речей. 6 00:00:13,000 --> 00:00:17,000 Ми йдемо до першого поставленого завдання резюме 2, 7 00:00:17,000 --> 00:00:20,000 яка є набором Цезаря і Віженер проблеми. 8 00:00:20,000 --> 00:00:23,000 І тоді ми будемо занурюватися в огляд Вікторина 0 9 00:00:23,000 --> 00:00:26,000 і витратити трохи часу, резюмуючи, що ми говорили про 10 00:00:26,000 --> 00:00:30,000 У кожному з лекцій досі, і ми також робимо кілька проблем 11 00:00:30,000 --> 00:00:32,000 від вікторинах попереднього року. 12 00:00:32,000 --> 00:00:36,000 Таким чином, ви, хлопці, є хороший спосіб підготуватися до цього. 13 00:00:36,000 --> 00:00:40,000 >> Для початку, я завантажив кілька хороших рішень 14 00:00:40,000 --> 00:00:45,000 за попередній набір проблем, завдань 2, в цьому просторі. 15 00:00:45,000 --> 00:00:48,000 Якщо ви, хлопці, всі потрапили на цю посилання, 16 00:00:48,000 --> 00:00:53,000 і якщо ви клацніть своє ім'я та натисніть на моєму першому перегляді 17 00:00:53,000 --> 00:00:56,000 Ви побачите caesar.c, а це саме те, що я дивлюся. 18 00:00:56,000 --> 00:01:00,000 Давайте поговоримо про це дуже швидко. 19 00:01:00,000 --> 00:01:02,000 Це всього лише приклад вирішення. 20 00:01:02,000 --> 00:01:05,000 Це не обов'язково ідеальне рішення. 21 00:01:05,000 --> 00:01:08,000 Є багато різних способів, щоб написати це, 22 00:01:08,000 --> 00:01:10,000 але є кілька речей, які я хотів би підкреслити 23 00:01:10,000 --> 00:01:13,000 що я бачив, як я сортуванню, найпоширеніші помилки, які я думаю, 24 00:01:13,000 --> 00:01:18,000 це рішення робить дуже хорошу роботу в зверненні. 25 00:01:18,000 --> 00:01:22,000 >> Перший з якоїсь заголовок коментаря у верхній частині. 26 00:01:22,000 --> 00:01:25,000 У рядках з 1 по 7 ви бачите деталі, 27 00:01:25,000 --> 00:01:28,000 що саме ця програма робить. 28 00:01:28,000 --> 00:01:32,000 Хороша стандартна практика, коли ви пишете код C 29 00:01:32,000 --> 00:01:35,000 незалежно від того, ваша програма міститься в одному файлі або 30 00:01:35,000 --> 00:01:38,000 Чи він розбитий на кілька файлів, щоб мати якийсь 31 00:01:38,000 --> 00:01:40,000 орієнтовна коментар на самому верху. 32 00:01:40,000 --> 00:01:43,000 Це теж для людей, які виходять і написати код в реальному світі. 33 00:01:43,000 --> 00:01:47,000 Це де покладуть інформацію про авторське право. 34 00:01:47,000 --> 00:01:50,000 Нижче наведені # включає в себе. 35 00:01:50,000 --> 00:01:55,000 За рядку 16 є ця # визначити, що ми повернемося в тільки трохи. 36 00:01:55,000 --> 00:01:59,000 І ось одного разу функція починається, як тільки основні старти, 37 00:01:59,000 --> 00:02:03,000 тому що ця програма була все що містяться в одній функцією 38 00:02:03,000 --> 00:02:09,000 Найперше, що відбувається, і це дуже ідіоматичні і типові програми C 39 00:02:09,000 --> 00:02:14,000 , Яка приймає в аргументи командного рядка-це те, що він одразу перевіряє 40 00:02:14,000 --> 00:02:18,000 >> за кількістю аргументів, агдс. 41 00:02:18,000 --> 00:02:24,000 Ось тут ми бачимо, що ця програма очікує 2 аргументи точно. 42 00:02:24,000 --> 00:02:27,000 Пам'ятайте є те, що перший аргумент, що це особливий 43 00:02:27,000 --> 00:02:29,000 це завжди ім'я програми, яка запускаються, 44 00:02:29,000 --> 00:02:31,000 ім'я виконуваного файлу. 45 00:02:31,000 --> 00:02:36,000 І так, що вона робить це не дозволяє користувачеві запустити програму 46 00:02:36,000 --> 00:02:42,000 з більшою або меншою кількістю аргументів. 47 00:02:42,000 --> 00:02:44,000 Тому ми хочемо, щоб перевірити це відразу тому, що 48 00:02:44,000 --> 00:02:52,000 ми не можемо фактично отримати доступ до цієї ARGV масиву прямо тут надійно 49 00:02:52,000 --> 00:02:55,000 поки ми не перевіряли, наскільки вона велика. 50 00:02:55,000 --> 00:02:58,000 >> Одна з найбільш розповсюджених помилок я бачив, був би люди відразу йдуть в 51 00:02:58,000 --> 00:03:01,000 і захоплення ARGV [1]. 52 00:03:01,000 --> 00:03:06,000 Вони захопити ключові аргументи з масиву і не до я перевірити на ньому, 53 00:03:06,000 --> 00:03:11,000 а потім вони зроблять тест на агдс, а також наступний тест, 54 00:03:11,000 --> 00:03:16,000 Чи не першим аргументом було дійсно ціле, в той же час, 55 00:03:16,000 --> 00:03:20,000 і це не працює, тому що у випадку, якщо немає аргументів, 56 00:03:20,000 --> 00:03:26,000 Ви будете захопити аргумент, що там немає або спробу захопити один, що ні. 57 00:03:26,000 --> 00:03:29,000 >> Інша велика річ, яку ви повинні були помітити, що 58 00:03:29,000 --> 00:03:32,000 Ви завжди хочете, щоб роздрукувати якийсь корисний повідомлення про помилку 59 00:03:32,000 --> 00:03:34,000 користувачеві орієнтуватися них. 60 00:03:34,000 --> 00:03:37,000 Я впевнений, що ви всі запуску програм, де раптом він виходить з ладу, 61 00:03:37,000 --> 00:03:41,000 і ви отримаєте цей смішний маленький діалог, який спливає і говорить: 62 00:03:41,000 --> 00:03:44,000 щось страшенно загадковим і, можливо, дає вам код помилки або щось в цьому роді 63 00:03:44,000 --> 00:03:47,000 що не має сенсу. 64 00:03:47,000 --> 00:03:50,000 Це де ви дійсно хочете, щоб забезпечити щось корисне 65 00:03:50,000 --> 00:03:54,000 і орієнтовані на користувача, так що, коли вони запустити його вони йдуть "О," обличчя долонею. 66 00:03:54,000 --> 00:03:58,000 "Я точно знаю, що робити. Я знаю, як це виправити". 67 00:03:58,000 --> 00:04:01,000 >> Якщо ви не друкувати повідомлення, то в підсумку ви насправді 68 00:04:01,000 --> 00:04:04,000 залишаючи користувачеві піти вивчати вихідний код 69 00:04:04,000 --> 00:04:07,000 щоб з'ясувати, що пішло не так. 70 00:04:07,000 --> 00:04:11,000 Є також кілька разів, що ви будете використовувати різні коди помилок. 71 00:04:11,000 --> 00:04:14,000 Тут ми просто використовували один говорять, що сталася помилка, 72 00:04:14,000 --> 00:04:16,000 відбулася помилка, сталася помилка. 73 00:04:16,000 --> 00:04:20,000 Більше програм, часто програм, які викликаються іншими програмами, 74 00:04:20,000 --> 00:04:25,000 повернеться якийсь спеціальний код помилки в різних сценаріях 75 00:04:25,000 --> 00:04:28,000 програмно повідомити, що ви б інакше 76 00:04:28,000 --> 00:04:32,000 просто використовувати хороший англійський повідомлення для. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Як ми працюємо вниз, ви бачите, ми витягти ключ із. 79 00:04:37,000 --> 00:04:40,000 Ми перевіряємо, щоб побачити, якщо ключ підходить. 80 00:04:40,000 --> 00:04:42,000 Ми отримали повідомлення від користувача. 81 00:04:42,000 --> 00:04:46,000 Тому ми робимо це в цьому циклі зробити в той час і це те, що ми покриємо 82 00:04:46,000 --> 00:04:50,000 В небагато, але виявляється, що якщо ввести контроль D 83 00:04:50,000 --> 00:04:54,000 коли ви одержуєте GetString рядки на термінал 84 00:04:54,000 --> 00:04:59,000 що це насправді робить це він посилає спеціальний символ 85 00:04:59,000 --> 00:05:01,000 в програмі. 86 00:05:01,000 --> 00:05:05,000 Це називається ELF або символ кінця файлу. 87 00:05:05,000 --> 00:05:08,000 І в цьому випадку, наша рядок повідомлення буде нульовим, 88 00:05:08,000 --> 00:05:14,000 так що це було не те, що ми перевіряли в завдання поставив перед собою. 89 00:05:14,000 --> 00:05:17,000 >> Але, як ми продовжимо, тепер, коли ми почали говорити про покажчики 90 00:05:17,000 --> 00:05:21,000 і динамічне виділення пам'яті в купі, 91 00:05:21,000 --> 00:05:25,000 перевірка на нуль щоразу, коли у вас є функція, яка може 92 00:05:25,000 --> 00:05:30,000 повернути нульове значення, як те, що ви хочете отримати в звичку робити. 93 00:05:30,000 --> 00:05:33,000 Це тут, перш за все для ілюстрації. 94 00:05:33,000 --> 00:05:36,000 Але коли ви бачите GetString в майбутньому, 95 00:05:36,000 --> 00:05:41,000 так від проблеми Set 4, Ви будете хотіти мати це на увазі. 96 00:05:41,000 --> 00:05:44,000 Знову ж таки, це не є проблемою для задач 3 або, так як ми не покривається ще. 97 00:05:44,000 --> 00:05:53,000 І, нарешті, ми добираємося до цієї частини, де ми перейдемо до основної цикл шифрування, 98 00:05:53,000 --> 00:05:57,000 і є кілька речей, що тут відбувається. 99 00:05:57,000 --> 00:06:02,000 По-перше, ми перебору всієї рядки повідомлення. 100 00:06:02,000 --> 00:06:07,000 Тут ми зберегли StrLen виклик у стан, 101 00:06:07,000 --> 00:06:12,000 які багато хто з вас вказали не великий шлях. 102 00:06:12,000 --> 00:06:15,000 Виявляється, в цьому випадку він також не велика, 103 00:06:15,000 --> 00:06:20,000 Частково тому, що ми, змінивши вміст самого повідомлення 104 00:06:20,000 --> 00:06:27,000 всередині циклу, так що якщо у нас є повідомлення, що це 10 символів, 105 00:06:27,000 --> 00:06:32,000 Вперше ми починаємо цикл, що для StrLen повернеться і що? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Але якщо ми потім змінити повідомлення, сказати, що ми змінити своє 5-й символ, 108 00:06:40,000 --> 00:06:46,000 і кидаємо в \ 0 символ в 5-ій позиції, 109 00:06:46,000 --> 00:06:49,000 на подальшою ітерації StrLen (повідомлення) не повернеться, що він зробив 110 00:06:49,000 --> 00:06:52,000 самий перший раз, коли ми повторний, 111 00:06:52,000 --> 00:06:56,000 але замість цього повернути 5, тому що ми кинули в тому, що нульовий термінатор, 112 00:06:56,000 --> 00:06:59,000 і довжиною струни визначається 113 00:06:59,000 --> 00:07:03,000 становищем, що \ 0. 114 00:07:03,000 --> 00:07:09,000 У цьому випадку, це відмінний спосіб піти, тому що ми змінивши її на місце. 115 00:07:09,000 --> 00:07:13,000 Але ви помітили, що це насправді дивно проста для шифрування 116 00:07:13,000 --> 00:07:16,000 якщо ви можете отримати математику правильно. 117 00:07:16,000 --> 00:07:19,000 Все, що потрібно, щоб перевірити, чи справді лист, що ви дивитеся на 118 00:07:19,000 --> 00:07:21,000 це верхній або нижній регістр. 119 00:07:21,000 --> 00:07:24,000 >> Тому ми тільки повинні перевірити, що і у нас немає для перевірки 120 00:07:24,000 --> 00:07:27,000 це альфа справа в тому, що 121 00:07:27,000 --> 00:07:30,000 Якщо символ у верхньому регістрі або, якщо це рядкова 122 00:07:30,000 --> 00:07:33,000 то це безперечно букви, 123 00:07:33,000 --> 00:07:38,000 тому що у нас немає прописних і рядкових знаків. 124 00:07:38,000 --> 00:07:41,000 Інша річ, яку ми робимо, і це трохи складно- 125 00:07:41,000 --> 00:07:45,000 це ми змінили стандартний шифр Цезаря формулою 126 00:07:45,000 --> 00:07:49,000 , Які ми дали в специфікації поставленого завдання. 127 00:07:49,000 --> 00:07:52,000 У чому різниця тут у тому, що ми вичитали 128 00:07:52,000 --> 00:07:58,000 У верхньому регістрі капіталу випадок, і тоді ми додаткового капіталу 129 00:07:58,000 --> 00:08:02,000 Резервне в кінці. 130 00:08:02,000 --> 00:08:05,000 >> Я знаю, деякі з вас зробили це в коді. 131 00:08:05,000 --> 00:08:09,000 Хто-небудь з вас зробити це в ваших уявленнях? 132 00:08:09,000 --> 00:08:13,000 Ви зробили це. Чи можете ви пояснити, що це робить, Sahb? 133 00:08:13,000 --> 00:08:18,000 Шляхом вирахування його, тому що ви зробили мод відразу після нього, 134 00:08:18,000 --> 00:08:21,000 ви повинні прийняти його, так що таким чином ви отримаєте [кашель] позиція. 135 00:08:21,000 --> 00:08:25,000 А потім, додавши його пізніше ви перейшла той, який ви хотіли. 136 00:08:25,000 --> 00:08:27,000 Так, саме так. 137 00:08:27,000 --> 00:08:32,000 Що Sahb сказав, що коли ми хочемо додати 138 00:08:32,000 --> 00:08:36,000 наше повідомлення, і наші ключові разом 139 00:08:36,000 --> 00:08:42,000 , А потім мод, який, мод, який по NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 якщо ми не будемо масштабувати наші повідомлення у відповідні 0 до 25 Діапазон перше, 141 00:08:50,000 --> 00:08:54,000 Потім ми могли б у кінцевому підсумку отримати дійсно дивний номер 142 00:08:54,000 --> 00:08:59,000 тому, що цінності, які ми дивимося на те, коли ми дивимося на повідомлення [я], 143 00:08:59,000 --> 00:09:03,000 Коли ми дивимося на го характеру наших текстових повідомлень, 144 00:09:03,000 --> 00:09:08,000 це значення десь у цьому від 65 до 122 Діапазон 145 00:09:08,000 --> 00:09:13,000 на основі ASCII значення для верхнього регістру від А до Z рядкові. 146 00:09:13,000 --> 00:09:18,000 І тому, коли ми мода це на 26 або NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 так як це був наш # визначити в правому верхньому тут, 148 00:09:23,000 --> 00:09:28,000 що збирається дати нам значення, яке в 0 до 25 діапазон, 149 00:09:28,000 --> 00:09:30,000 і нам потрібен спосіб, щоб потім масштабувати, які підтримують 150 00:09:30,000 --> 00:09:32,000 і отримати його у відповідні ASCII діапазону. 151 00:09:32,000 --> 00:09:36,000 Найпростіший спосіб зробити це, щоб просто масштабувати всі вниз 152 00:09:36,000 --> 00:09:39,000 в 0 до 25 Діапазон Почнемо з того, 153 00:09:39,000 --> 00:09:43,000 , А потім перекласти все назад в кінці. 154 00:09:43,000 --> 00:09:46,000 >> Ще одна поширена помилка, що я бачив, люди біжать в тому, що 155 00:09:46,000 --> 00:09:50,000 якщо ви насправді не зробити це прямо зараз масштабування 156 00:09:50,000 --> 00:09:53,000 і ви додаєте повідомлення і ключові разом і додати їх, скажімо, 157 00:09:53,000 --> 00:09:58,000 в символ змінної, проблема з цим 158 00:09:58,000 --> 00:10:01,000 це повідомлення, оскільки [я] є відносно велике число, щоб почати з- 159 00:10:01,000 --> 00:10:05,000 пам'ятайте, що це щонайменше 65, якщо це символ верхнього регістру- 160 00:10:05,000 --> 00:10:09,000 якщо у вас є великий ключ, скажімо, щось на зразок 100, 161 00:10:09,000 --> 00:10:13,000 і ви додаєте ці 2 разом в підписаних символ ви збираєтеся отримати переповнення. 162 00:10:13,000 --> 00:10:17,000 Ви збираєтеся отримати значення, яке перевищує 127, 163 00:10:17,000 --> 00:10:22,000 , Яка є найбільшим значення, символ може зберігати змінна. 164 00:10:22,000 --> 00:10:26,000 Знову ж таки, чому ви хочете зробити таку річ з самого початку. 165 00:10:26,000 --> 00:10:29,000 Деякі люди отримали навколо цієї справи робити, якщо ще й тестування 166 00:10:29,000 --> 00:10:33,000 щоб побачити, якщо вона буде переповнення перш ніж зробити це, 167 00:10:33,000 --> 00:10:36,000 але таким чином отримує від усього цього. 168 00:10:36,000 --> 00:10:40,000 І тоді в цьому рішенні ми виводимо весь рядок в самому кінці. 169 00:10:40,000 --> 00:10:45,000 Інші люди роздрукувати символ за один раз. Обидва є дивовижними. 170 00:10:45,000 --> 00:10:51,000 На даний момент, ви, хлопці, є які-небудь питання, жодних коментарів з цього приводу? 171 00:10:51,000 --> 00:10:56,000 Що вам подобається, що вам не подобається? 172 00:10:56,000 --> 00:10:58,000 >> У мене було питання. 173 00:10:58,000 --> 00:11:01,000 Може бути, я пропустив його під час вашого пояснення, але як ця програма 174 00:11:01,000 --> 00:11:07,000 пропустити простору для підключення ключа до довжини тексту? 175 00:11:07,000 --> 00:11:10,000 Це всього лише шифр Цезаря. >> Ех, шкода, що так. 176 00:11:10,000 --> 00:11:13,000 Так, ми бачимо, що. 177 00:11:13,000 --> 00:11:16,000 В шифр Цезаря ми обійшли, тому що 178 00:11:16,000 --> 00:11:18,000 Ми тільки перевернув символів. 179 00:11:18,000 --> 00:11:27,000 Ми тільки повернути їх, якщо вони були верхньому або нижньому регістрі. 180 00:11:27,000 --> 00:11:32,000 Ви, хлопці, відчував себе досить добре з цього приводу? 181 00:11:32,000 --> 00:11:34,000 Ви можете скопіювати цей будинок, бери, 182 00:11:34,000 --> 00:11:37,000 порівняти його з тим, що ви, хлопці написали. 183 00:11:37,000 --> 00:11:42,000 Безумовно не соромтеся, надсилайте запитання на цю тему теж. 184 00:11:42,000 --> 00:11:46,000 І знову ж, розумію, що мета тут з вашою проблемою встановлює 185 00:11:46,000 --> 00:11:50,000 Не щоб ви, хлопці, щоб написати ідеальний код для безлічі проблем. 186 00:11:50,000 --> 00:11:57,000 Це досвід. Так. 187 00:11:57,000 --> 00:12:01,000 >> Повернутися до робити під час циклу, якщо він дорівнює нулю, 188 00:12:01,000 --> 00:12:06,000 так нульового просто нічого не значить, вони просто натисніть Enter? 189 00:12:06,000 --> 00:12:12,000 Null це спеціальне значення вказівника, 190 00:12:12,000 --> 00:12:17,000 і ми використовуємо нуль, коли ми хочемо сказати, 191 00:12:17,000 --> 00:12:23,000 у нас є покажчик змінної, яка вказує на немає. 192 00:12:23,000 --> 00:12:28,000 І зазвичай це означає, що ця змінна, ця змінна повідомлення 193 00:12:28,000 --> 00:12:35,000 порожньо, і тут, тому що ми використовуємо CS50 особливий тип рядка, 194 00:12:35,000 --> 00:12:37,000 що CS50 тип рядки? 195 00:12:37,000 --> 00:12:42,000 Чи бачили ви, що це таке, коли Девід відкинув капюшон в лекції? 196 00:12:42,000 --> 00:12:44,000 Це фанки-це покажчик, вірно? 197 00:12:44,000 --> 00:12:48,000 Добре, да. >> Це символ *. 198 00:12:48,000 --> 00:12:52,000 І так насправді ми могли б замінити цю 199 00:12:52,000 --> 00:12:56,000 прямо тут з символів повідомлень *, 200 00:12:56,000 --> 00:13:04,000 і так GetString функція, якщо вона не успішно отримати рядок від користувача, 201 00:13:04,000 --> 00:13:08,000 він не може розібрати рядок, і в одному випадку, в якому він не може розібрати рядок 202 00:13:08,000 --> 00:13:11,000 , Якщо користувач вводить символ кінця файлу, контрольна D, 203 00:13:11,000 --> 00:13:17,000 який не те, що ви зазвичай робите, але якщо це відбудеться, 204 00:13:17,000 --> 00:13:20,000 то функція поверне це значення, як спосіб сказати 205 00:13:20,000 --> 00:13:23,000 "Ей, я не отримати рядок". 206 00:13:23,000 --> 00:13:27,000 Що станеться, якщо ми не ставимо повідомлення = NULL, 207 00:13:27,000 --> 00:13:30,000 яких є те, що ми не робили ще? 208 00:13:30,000 --> 00:13:32,000 Чому б це було тут проблема? 209 00:13:32,000 --> 00:13:38,000 Тому що я знаю, що ми трохи поговорили в лекції про витоки пам'яті. 210 00:13:38,000 --> 00:13:42,000 Так, давайте зробимо це, і давайте подивимося, що станеться. 211 00:13:42,000 --> 00:13:44,000 >> Питання Василя Блаженного було те, що станеться, якщо ми насправді не 212 00:13:44,000 --> 00:13:48,000 це повідомлення = NULL тест? 213 00:13:48,000 --> 00:13:51,000 Давайте прокрутки вгору до вершини. 214 00:13:51,000 --> 00:13:53,000 Ви, хлопці, можете прокоментувати це. 215 00:13:53,000 --> 00:13:55,000 Насправді, я врятую його в перегляді. 216 00:13:55,000 --> 00:13:58,000 Це буде 3-тя редакція. 217 00:13:58,000 --> 00:14:02,000 Що ви повинні зробити, щоб запустити цю програму, вам доведеться натиснути цю значок із зображенням шестерні тут, 218 00:14:02,000 --> 00:14:04,000 і ви будете мати, щоб додати аргументи до нього. 219 00:14:04,000 --> 00:14:10,000 Ви повинні дати йому головний аргумент, так як ми хочемо передати в аргументі командного рядка. 220 00:14:10,000 --> 00:14:13,000 Тут я збираюся дати йому номер 3. Мені подобається 3. 221 00:14:13,000 --> 00:14:19,000 Тепер масштабування назад, запустивши програму. 222 00:14:19,000 --> 00:14:24,000 Це працює, компіляція, будівництво. 223 00:14:24,000 --> 00:14:27,000 Тут ми йдемо. Він очікує запиту. 224 00:14:27,000 --> 00:14:33,000 Якщо я ввожу щось подібне привіт-де пройшло? 225 00:14:33,000 --> 00:14:38,000 О, моя програма займає надто багато часу для запуску. Я був jawing занадто довго. 226 00:14:38,000 --> 00:14:40,000 Ось він іде. 227 00:14:40,000 --> 00:14:43,000 Зараз я набираю в привіт. 228 00:14:43,000 --> 00:14:46,000 Ми бачимо, що він шифрує належним чином. 229 00:14:46,000 --> 00:14:52,000 Тепер, що станеться, якщо ми робимо швидку GetString повернути NULL? 230 00:14:52,000 --> 00:14:57,000 Пам'ятаєте, я казав, що ми зробили це, натиснувши управління D в той же час. 231 00:14:57,000 --> 00:14:59,000 Я прокручування вгору тут. Ми будемо запускати його знову. 232 00:14:59,000 --> 00:15:01,000 Будівництво. Там він йде. 233 00:15:01,000 --> 00:15:04,000 Тепер, коли я вдарив управління D 234 00:15:04,000 --> 00:15:12,000 Я отримав цей рядок, яка говорить opt/sandbox50/bin/run.sh, помилки сегментації. 235 00:15:12,000 --> 00:15:15,000 Хіба ви, хлопці, бачили, що раніше? 236 00:15:15,000 --> 00:15:17,000 >> [Студент] Чому немає->> Вибачте? 237 00:15:17,000 --> 00:15:20,000 [Студент] Чому немає дампа пам'яті в цьому випадку? 238 00:15:20,000 --> 00:15:26,000 Дамп це-питання чому немає дампа тут? 239 00:15:26,000 --> 00:15:29,000 Питання в тому, що там може бути, але дамп являє собою файл 240 00:15:29,000 --> 00:15:31,000 , Який отримує зберігається на жорсткому диску. 241 00:15:31,000 --> 00:15:34,000 У цьому випадку ми відключили дампи 242 00:15:34,000 --> 00:15:37,000 на бігу сервер, так що ми не були люди сегментам розломів 243 00:15:37,000 --> 00:15:40,000 і створення тонн дампи пам'яті. 244 00:15:40,000 --> 00:15:46,000 Але ви можете отримати. 245 00:15:46,000 --> 00:15:48,000 Основні звалища така штука, що часто можна відключити, 246 00:15:48,000 --> 00:15:52,000 і іноді ви робите. 247 00:15:52,000 --> 00:15:55,000 Сегментація вина, щоб відповісти на ваше запитання, Василь, 248 00:15:55,000 --> 00:16:00,000 говорить, що ми спробували отримати доступ до покажчика 249 00:16:00,000 --> 00:16:05,000 , Які не були встановлені, щоб вказати на що-небудь. 250 00:16:05,000 --> 00:16:09,000 Пам'ятайте, Бінки у відео, коли Бінки намагається 251 00:16:09,000 --> 00:16:12,000 перейти до покажчика, який не вказуючи на що-небудь? 252 00:16:12,000 --> 00:16:16,000 У цьому випадку я думаю, технічно покажчик вказує на щось. 253 00:16:16,000 --> 00:16:20,000 Це вказує на нульовий, який є технічно 0, 254 00:16:20,000 --> 00:16:25,000 але, що називається в сегменті, який не доступний 255 00:16:25,000 --> 00:16:28,000 за вашою програмою, так що ви отримаєте помилку сегментації 256 00:16:28,000 --> 00:16:31,000 тому що ви не доступу до пам'яті, який в діючий сегмент 257 00:16:31,000 --> 00:16:38,000 як сегмент купі або стеку сегмент або сегмент даних. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Будь-які питання про Цезаря? 260 00:16:48,000 --> 00:16:51,000 >> Давайте рухатися далі. Давайте подивимося на перегляд 2 дуже швидко. 261 00:16:51,000 --> 00:17:00,000 Ось Віженер. 262 00:17:00,000 --> 00:17:04,000 Тут, в Віженер 263 00:17:04,000 --> 00:17:06,000 Ми пройдемо через це досить швидко, тому що, знову ж таки, 264 00:17:06,000 --> 00:17:10,000 Віженер і Цезаря дуже схожі. 265 00:17:10,000 --> 00:17:12,000 Заголовок коментаря раніше, 266 00:17:12,000 --> 00:17:17,000 # Визначити це перш уникнути використання цих магічних чисел. 267 00:17:17,000 --> 00:17:21,000 Приємно те, що ми хочемо, щоб перейти до 268 00:17:21,000 --> 00:17:23,000 різних алфавіту або щось на зразок цього. 269 00:17:23,000 --> 00:17:26,000 Замість того, щоб йти вручну змінювати всі 26 в коді 270 00:17:26,000 --> 00:17:30,000 ми могли б змінити це 27 чи кинути його вниз 271 00:17:30,000 --> 00:17:34,000 якби ми використовували різні алфавіти, різні мови. 272 00:17:34,000 --> 00:17:38,000 Знову ж таки, у нас є ця перевірка кількість аргументів, 273 00:17:38,000 --> 00:17:42,000 і дійсно можна майже прийняти це як шаблон. 274 00:17:42,000 --> 00:17:46,000 Практично кожен програмі ви повинні написати- 275 00:17:46,000 --> 00:17:50,000 якщо він приймає аргументи командного рядка-деяка послідовність ліній 276 00:17:50,000 --> 00:17:55,000 , Який читається як це на самому початку. 277 00:17:55,000 --> 00:17:59,000 Це одне з перших випробувань розсудливість ви хочете зробити. 278 00:17:59,000 --> 00:18:03,000 >> Ось те, що ми робили, було ми переконалися, що 279 00:18:03,000 --> 00:18:06,000 Ключове слово дійсно було, і це була друга перевірка, що ми і зробили. 280 00:18:06,000 --> 00:18:11,000 Зверніть увагу ще раз, що ми відокремилися від цього ARGC і 2. 281 00:18:11,000 --> 00:18:14,000 Зверніть увагу, що в цьому випадку одна річ, яку ми повинні були зробити, було, замість 282 00:18:14,000 --> 00:18:18,000 використання, щоб я, ми хотіли перевірити весь рядок, 283 00:18:18,000 --> 00:18:21,000 і для того, щоб робити, що ви насправді потрібно йти по одному символу 284 00:18:21,000 --> 00:18:23,000 за рядком. 285 00:18:23,000 --> 00:18:29,000 Там немає хороший спосіб називати щось на ній 286 00:18:29,000 --> 00:18:31,000 тому що навіть, наприклад, щоб я поверне 0 287 00:18:31,000 --> 00:18:37,000 якщо він не може розібрати ціле, так що навіть не працює. 288 00:18:37,000 --> 00:18:42,000 Знову ж таки, гарне повідомлення про те, користувачеві саме те, що сталося. 289 00:18:42,000 --> 00:18:45,000 Тоді тут, знову ж таки, ми також обробляємо випадок, коли 290 00:18:45,000 --> 00:18:50,000 Користувач вводить в елемент керування D випадковий характер. 291 00:18:50,000 --> 00:18:54,000 >> І тоді Шарлотта було питання раніше про те, як нам вдасться пропустити простору 292 00:18:54,000 --> 00:18:57,000 У нашому рядок тут. 293 00:18:57,000 --> 00:19:00,000 Це було почасти схоже на те, що ми зробили з Myspace програми 294 00:19:00,000 --> 00:19:04,000 що ми зробили в розділі, і те, як це працює 295 00:19:04,000 --> 00:19:08,000 те, що ми відстежували кількість листів, які ми бачили. 296 00:19:08,000 --> 00:19:13,000 Коли ми йшли через рядок повідомлення, як ми йшли по одному символу, 297 00:19:13,000 --> 00:19:16,000 Ми відстежували індекс як частину нашого циклу, і тоді ми також відстежували 298 00:19:16,000 --> 00:19:21,000 кількість букв, так що без спеціальних символів, без цифр, без пробілів 299 00:19:21,000 --> 00:19:27,000 що ми бачили в окремій змінній. 300 00:19:27,000 --> 00:19:33,000 А потім це рішення змінює ключ 301 00:19:33,000 --> 00:19:41,000 щоб отримати фактичний ключ ціле, і він робить це на льоту, 302 00:19:41,000 --> 00:19:47,000 Право, перш ніж він потім іде для шифрування фактичний характер повідомлення. 303 00:19:47,000 --> 00:19:50,000 Є деякі рішення, які були абсолютно відмінними також 304 00:19:50,000 --> 00:19:58,000 що б змінити вверх при перевірці дії ключа. 305 00:19:58,000 --> 00:20:01,000 На додаток до переконавшись, що характер і ключове слово 306 00:20:01,000 --> 00:20:05,000 був літери Виявилося також, що в ціле 307 00:20:05,000 --> 00:20:13,000 В 0 до 25 діапазон потім пропустити того, щоб зробити це пізніше в цьому циклі. 308 00:20:13,000 --> 00:20:18,000 Знову ж таки, ви бачите тут, це дійсно точно такий же код 309 00:20:18,000 --> 00:20:22,000 які ми використовували в Цезарь в цій точці. 310 00:20:22,000 --> 00:20:25,000 Ти робиш одне й те ж, так що реальний трюк є з'ясування того, 311 00:20:25,000 --> 00:20:30,000 як включити ключове слово в ціле. 312 00:20:30,000 --> 00:20:35,000 >> Одна річ, яку ми зробили тут, що кілька щільних 313 00:20:35,000 --> 00:20:39,000 це ми повторили цю фразу, я думаю, ви могли б назвати його, 314 00:20:39,000 --> 00:20:45,000 3 окремих рази на 58 ліній, 59 і 61. 315 00:20:45,000 --> 00:20:52,000 Може хто-небудь пояснити, що саме ця фраза робить? 316 00:20:52,000 --> 00:20:55,000 Це доступі характер, як ви сказали. 317 00:20:55,000 --> 00:20:59,000 Так, це [нерозбірливо] символів в ключових слів, 318 00:20:59,000 --> 00:21:04,000 і тому це число букв бачив, тому що ви тільки рухаючись уздовж 319 00:21:04,000 --> 00:21:06,000 Ключове слово раз ви бачили лист, 320 00:21:06,000 --> 00:21:10,000 так що це буде ефективно пропустити просторів тощо. 321 00:21:10,000 --> 00:21:12,000 Так, саме так. 322 00:21:12,000 --> 00:21:16,000 А потім, як тільки ви бачили ключове слово порожнім ви просто мода, щоб ви повернутися навколо. 323 00:21:16,000 --> 00:21:18,000 Саме так. Це ідеальне пояснення. 324 00:21:18,000 --> 00:21:23,000 Що Кевін сказав, що ми хочемо, щоб індекс в ключове слово. 325 00:21:23,000 --> 00:21:28,000 Ми хочемо, щоб num_letters_seen характер, якщо хочете, 326 00:21:28,000 --> 00:21:32,000 Але якщо num_letters_seen перевищує довжину ключового слова, 327 00:21:32,000 --> 00:21:37,000 Так ми повернемося у відповідному діапазоні ми використовуємо мод оператора 328 00:21:37,000 --> 00:21:40,000 ефективно обернути навколо. 329 00:21:40,000 --> 00:21:43,000 Наприклад, як в короткостроковій, наше ключове слово бекон, 330 00:21:43,000 --> 00:21:46,000 і це 5 букв. 331 00:21:46,000 --> 00:21:50,000 Але ми бачили 6 букв в нашій текстом в цій точці 332 00:21:50,000 --> 00:21:52,000 і зашифровані 6. 333 00:21:52,000 --> 00:21:57,000 Ми в кінцевому підсумку доступ до num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 , Що на 6, мод довжина ключового слова, 5, 335 00:22:00,000 --> 00:22:04,000 і таким чином ми отримаємо 1, і так, що ми будемо робити це ми будемо 336 00:22:04,000 --> 00:22:14,000 доступ до першого в характері нашого ключового слова в цій точці. 337 00:22:14,000 --> 00:22:21,000 >> Гаразд, будь-які питання по Віженер 338 00:22:21,000 --> 00:22:26,000 перш ніж рухатися далі? 339 00:22:26,000 --> 00:22:31,000 Ви, хлопці, відчував себе досить добре з цього приводу? 340 00:22:31,000 --> 00:22:35,000 Круто, велике. 341 00:22:35,000 --> 00:22:38,000 Я хочу, щоб переконатися, що ви, хлопці отримують шанс побачити код 342 00:22:38,000 --> 00:22:48,000 що ми думаємо, виглядає добре, і є шанс дізнатися від нього. 343 00:22:48,000 --> 00:22:53,000 Це буде останньою ми будемо використовувати прогалини в даний час, 344 00:22:53,000 --> 00:22:59,000 і ми збираємося переходити зараз, і я збираюся піти в cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 так що ми можемо зробити трохи огляду вікторини. 346 00:23:06,000 --> 00:23:10,000 Кращий спосіб Я думаю, що почати робити тест огляд 347 00:23:10,000 --> 00:23:15,000 повинен прийти до цієї лекції сторінці, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 і під кожним із заголовків тиждень, так що якщо я дивлюся тут на Тижні 0, 349 00:23:20,000 --> 00:23:27,000 Я бачу, що у нас є список питань, які ми обговорювали на тиждень 0. 350 00:23:27,000 --> 00:23:31,000 >> Якщо будь-яка з цих тем здається незнайомій для вас 351 00:23:31,000 --> 00:23:34,000 ви безумовно хочете, щоб повернутися і прочесати лекції і, можливо, 352 00:23:34,000 --> 00:23:39,000 навіть побіжно лекції, дивитися їх знову, якщо ви хочете 353 00:23:39,000 --> 00:23:44,000 щоб відчувати себе за те, що відбувається з кожним з цих тем. 354 00:23:44,000 --> 00:23:49,000 Скажу додатково в цьому році один з прохолодних ресурси у нас є 355 00:23:49,000 --> 00:23:55,000 Саме ці шорти, які ми створили, і якщо ви подивитеся на Тижні 0, 356 00:23:55,000 --> 00:24:00,000 у нас немає всіх темах, але у нас є досить багато з них, 357 00:24:00,000 --> 00:24:03,000 деякі з них складніше, тому спостерігати ці шорти знову 358 00:24:03,000 --> 00:24:08,000 це хороший спосіб, щоб ви до швидкості. 359 00:24:08,000 --> 00:24:15,000 Зокрема, я збираюся поставити в роз'єм для 3 на дні, так як я зробив ті. 360 00:24:15,000 --> 00:24:20,000 Але якщо ви боретеся з двійкової, біти, шестигранні, в такому ж роді, 361 00:24:20,000 --> 00:24:22,000 двійкових є прекрасним місцем для початку. 362 00:24:22,000 --> 00:24:25,000 ASCII ще один, це добре, щоб переглянути теж. 363 00:24:25,000 --> 00:24:31,000 Ви навіть можете слідкувати за мною в 1,5 рази швидкість, якщо я буду занадто повільним для вас. 364 00:24:31,000 --> 00:24:35,000 Так як це відгук, не соромтеся робити це. 365 00:24:35,000 --> 00:24:40,000 >> Просто, щоб почати дуже швидко, ми збираємося пройти через пару таких вікторини проблеми 366 00:24:40,000 --> 00:24:44,000 просто швидко відтоку через них. 367 00:24:44,000 --> 00:24:50,000 Наприклад, давайте подивимося на проблеми 16, що у мене прямо тут на дошці. 368 00:24:50,000 --> 00:24:54,000 У нас це наступний розрахунок в двійковій, 369 00:24:54,000 --> 00:24:56,000 і ми хочемо показати яку роботу. 370 00:24:56,000 --> 00:24:59,000 Гаразд, я збираюся дати цьому постріл. 371 00:24:59,000 --> 00:25:01,000 Ви, хлопці, повинні слідувати разом з папером, 372 00:25:01,000 --> 00:25:04,000 і ми будемо робити це дуже швидко. 373 00:25:04,000 --> 00:25:06,000 Ми хочемо, щоб виконати наступні розрахунки в двійковій системі. 374 00:25:06,000 --> 00:25:16,000 У мене 00110010. 375 00:25:16,000 --> 00:25:27,000 І я збираюся додати до нього 00110010. 376 00:25:27,000 --> 00:25:30,000 Для геніїв математики слідуючи вздовж будинку, 377 00:25:30,000 --> 00:25:35,000 Це фактично множенням на 2. 378 00:25:35,000 --> 00:25:37,000 Давайте почнемо. 379 00:25:37,000 --> 00:25:39,000 Ми збираємося слідувати тій же алгоритм того, що ми робимо 380 00:25:39,000 --> 00:25:43,000 коли ми додаємо десяткових чисел. 381 00:25:43,000 --> 00:25:46,000 Дійсно Єдина різниця в тому, що ми петля назад навколо 382 00:25:46,000 --> 00:25:51,000 коли у нас буде 1 + 1, а не тільки ми отримаємо до 10. 383 00:25:51,000 --> 00:25:53,000 >> Якщо ми почнемо з правого боку, дуже швидко, що перша цифра? 384 00:25:53,000 --> 00:25:55,000 [Студент] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Великий, друга цифра? 386 00:25:58,000 --> 00:26:00,000 [Студент] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Це 1? 1 + 1 є? 388 00:26:02,000 --> 00:26:04,000 [Студент] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Точно, так в чому ж цифру, що я пишу прямо під 2 одиниці складаються? 390 00:26:08,000 --> 00:26:11,000 [Студент] 1, 0 або 0, а потім провести 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 і нести 1, точно. 392 00:26:15,000 --> 00:26:18,000 Далі один вгору, Василь, ви вгору. 393 00:26:18,000 --> 00:26:20,000 Який третій? >> [Василь] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, досконалим. Кевін? 395 00:26:23,000 --> 00:26:27,000 [Кевін] 0. >> [Nate H.] 0, Шарлотта? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H.] Так, і що мені робити? 397 00:26:30,000 --> 00:26:32,000 [Студент] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] І що мені робити? І тоді я несу 1. 399 00:26:34,000 --> 00:26:36,000 Perfect, Sahb? >> [Sahb] Тепер у вас є 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] І я роблю щось тут? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Тоді для наступного у вас є 1, тому що ви переноситься на 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Великий, так що тут ми можемо закінчити це. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Студент] Лі 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, як ви сказали, 10, або 1, 0, а. 407 00:27:01,000 --> 00:27:07,000 10 є неправильним, тому що мені 10 означає число 10, 408 00:27:07,000 --> 00:27:12,000 і це примха, як ми, представляючи його, коли ми пишемо це. 409 00:27:12,000 --> 00:27:20,000 Уявімо число 2, 1, 0, а число 10 трохи відрізняється. 410 00:27:20,000 --> 00:27:23,000 >> Що почасти добре про бінарних те, що є насправді не так багато 411 00:27:23,000 --> 00:27:25,000 випадках потрібно вчитися. 412 00:27:25,000 --> 00:27:30,000 Там в 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 = 0, а потім виконати 1, 414 00:27:34,000 --> 00:27:37,000 а потім ви можете побачити тут, на третьому стовпці праворуч 415 00:27:37,000 --> 00:27:40,000 у нас було це 1, 1, 1. 416 00:27:40,000 --> 00:27:43,000 А 1 + 1 + 1 1, 417 00:27:43,000 --> 00:27:45,000 і ви несете іншу 1. 418 00:27:45,000 --> 00:27:48,000 Коли ви робите двійковій Крім того, досить проста. 419 00:27:48,000 --> 00:27:51,000 Я зроблю ще пару цих розсудливість перевірити себе 420 00:27:51,000 --> 00:27:54,000 перш ніж ви йдете, тому що це 421 00:27:54,000 --> 00:28:00,000 ймовірно, те, що ми бачимо на вікторину. 422 00:28:00,000 --> 00:28:03,000 Тепер давайте зробимо це наступного також. 423 00:28:03,000 --> 00:28:06,000 Давайте зробимо проблеми 17. 424 00:28:06,000 --> 00:28:12,000 Ми збираємося перетворити наступним двійкового числа в десяткове. 425 00:28:12,000 --> 00:28:28,000 У мене 10100111001. 426 00:28:28,000 --> 00:28:33,000 Пам'ятаєте, в двійковому відео, яке я зробив 427 00:28:33,000 --> 00:28:36,000 Я йшов через пару прикладів, і я показав, як 428 00:28:36,000 --> 00:28:41,000 все працює, коли ви робите це в десятковій системі. 429 00:28:41,000 --> 00:28:45,000 Коли ви працюєте в десяткове подання Я думаю, що ми 430 00:28:45,000 --> 00:28:48,000 На даний момент в нашому житті так побіжно говорить на це, що 431 00:28:48,000 --> 00:28:53,000 це досить легко замазати механіку того, як вона дійсно працює. 432 00:28:53,000 --> 00:28:59,000 >> Але щоб зробити швидке резюме, якщо у мене є номер 137 433 00:28:59,000 --> 00:29:06,000 В дійсності це означає і знову ж таки, це в десяткове подання- 434 00:29:06,000 --> 00:29:19,000 число 137 у десятковій означає, що у мене є 1 х 100 + 3 х 10 + 7 х 1. 435 00:29:19,000 --> 00:29:22,000 Це все перебування на екрані. 436 00:29:22,000 --> 00:29:29,000 І потім, якщо ви подивитеся на ці цифри прямо тут, 437 00:29:29,000 --> 00:29:34,000 100, 10 і 1, ви бачите, що вони насправді всі повноваження 10. 438 00:29:34,000 --> 00:29:43,000 У мене є 10 ², 10 ¹, і від 10 до нуля. 439 00:29:43,000 --> 00:29:48,000 У нас подібного роду речі в двійковій, 440 00:29:48,000 --> 00:29:55,000 винятком того, що наша база, як ми його називаємо, становить 2 замість 10. 441 00:29:55,000 --> 00:29:58,000 Ці 10s, що я написав тут на дні, 442 00:29:58,000 --> 00:30:02,000 це 10 ², 10 ¹, 10 до нуля, 10, наша база, 443 00:30:02,000 --> 00:30:08,000 і показник, 0, 1, або 2, 444 00:30:08,000 --> 00:30:14,000 випливає з положення цифри в номері, що ми пишемо. 445 00:30:14,000 --> 00:30:21,000 1, якщо ми подивимося на це, це 1, у 2-й позиції. 446 00:30:21,000 --> 00:30:27,000 3 в 1-й позиції, а 7 знаходиться в 0-й позиції. 447 00:30:27,000 --> 00:30:35,000 Ось як ми отримаємо різні показники нижче для нашої бази. 448 00:30:35,000 --> 00:30:40,000 >> Після всього цього МИ-насправді, ви знаєте, що? 449 00:30:40,000 --> 00:30:43,000 Ми зробимо все, де ж мій скасувати кнопку йти? 450 00:30:43,000 --> 00:30:45,000 Там він йде. 451 00:30:45,000 --> 00:30:47,000 Я люблю цю річ скасувати. 452 00:30:47,000 --> 00:30:51,000 Після цього я думаю, для мене принаймні 453 00:30:51,000 --> 00:30:54,000 Найпростіший спосіб почати перетворення двійкового числа 454 00:30:54,000 --> 00:30:57,000 або шістнадцяткове число, де база знаходиться в 16 455 00:30:57,000 --> 00:31:02,000 , А не 10 або 2, щоб йти вперед і пишемо 456 00:31:02,000 --> 00:31:09,000 баз і індексів для всіх чисел в моїй двійкового числа у верхній частині. 457 00:31:09,000 --> 00:31:14,000 Якщо ми почнемо зліва направо знову, 458 00:31:14,000 --> 00:31:17,000 яка є своєрідною парадоксально, 459 00:31:17,000 --> 00:31:23,000 Я зміню Back To Black тут, у нас є 2 до 0-я позиція, 460 00:31:23,000 --> 00:31:27,000 а то у нас 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 а потім від 2 до 3, від 2 до 4, 2 до 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9 і 10. 463 00:31:39,000 --> 00:31:41,000 Ці цифри я виписав всі показники. 464 00:31:41,000 --> 00:31:48,000 Я лише написав баз тут в перші 3 тільки для простору. 465 00:31:48,000 --> 00:31:50,000 >> На даний момент я збираюся йти вперед і насправді я збираюся стерти 466 00:31:50,000 --> 00:31:53,000 речі, які ми зробили в десятковій, якщо це нормально. 467 00:31:53,000 --> 00:31:57,000 Ви все зрозумів. 468 00:31:57,000 --> 00:32:05,000 Ті з вас, дивитися онлайн Я впевнена, що зможе перемотати мене, якщо хочете. 469 00:32:05,000 --> 00:32:07,000 Перемикання назад на перо. 470 00:32:07,000 --> 00:32:12,000 Отже, що ми можемо зробити, якщо ви, хлопці, не повністю до швидкості на свої сили 2, 471 00:32:12,000 --> 00:32:15,000 це абсолютно здорово. 472 00:32:15,000 --> 00:32:18,000 Це буває. Я розумію. 473 00:32:18,000 --> 00:32:23,000 Я колись на співбесіду, де мені сказали, що я повинен знати всі ступені числа 2 474 00:32:23,000 --> 00:32:26,000 вгору через 2 до 30. 475 00:32:26,000 --> 00:32:29,000 Це була не робота в мене є. 476 00:32:29,000 --> 00:32:32,000 У будь-якому випадку, ви, хлопці, можете йти вперед і робити математику тут, 477 00:32:32,000 --> 00:32:35,000 але з бінарними це дійсно не має сенсу, 478 00:32:35,000 --> 00:32:38,000 і також не має сенсу з десяткової або шестнадцатеричной або, 479 00:32:38,000 --> 00:32:43,000 робити математику, де у вас є нулі. 480 00:32:43,000 --> 00:32:49,000 Ви можете бачити, у мене 0 тут, сюди 0, 0 тут, 0 тут, 0 тут, 0 тут. 481 00:32:49,000 --> 00:32:52,000 Чому це могло б ніякого сенсу робити фактичні математики 482 00:32:52,000 --> 00:32:56,000 Для розрахунку відповідної потужності 2 на цю посаду? 483 00:32:56,000 --> 00:32:59,000 Саме так, як сказала Шарлотта, це буде 0. 484 00:32:59,000 --> 00:33:05,000 Міг би також зекономити час, якщо обчислення ступеня числа 2 не є вашою сильною стороною. 485 00:33:05,000 --> 00:33:10,000 У цьому випадку нам потрібно тільки обчислити його для 2 до 0, що-? 486 00:33:10,000 --> 00:33:12,000 [Студент] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 до 3, який є-? 488 00:33:14,000 --> 00:33:16,000 [Студент] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 Від 2 до 4? 490 00:33:18,000 --> 00:33:21,000 [Студент] 2. Мені дуже шкода, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 до 4, 16, точно. 492 00:33:26,000 --> 00:33:28,000 Від 2 до 5, Кевін? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, від 2 до 8? 494 00:33:32,000 --> 00:33:38,000 [Студент] 32 х 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 І від 2 до 10? 497 00:33:43,000 --> 00:33:45,000 [Студент] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Так, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Після того як ми отримали ці цифри ми можемо підвести їх все. 500 00:33:57,000 --> 00:34:01,000 І це, де це дійсно важливо зробити кілька речей. 501 00:34:01,000 --> 00:34:07,000 Один з них йдуть повільно і перевірити вашу роботу. 502 00:34:07,000 --> 00:34:10,000 Ви можете сказати, що є 1 в кінці цього числа, 503 00:34:10,000 --> 00:34:15,000 так що я обов'язково повинні отримати непарне число, як мій результат, 504 00:34:15,000 --> 00:34:18,000 тому що всі інші збираються бути парними номерами 505 00:34:18,000 --> 00:34:21,000 враховуючи, що це двійкове число. 506 00:34:21,000 --> 00:34:24,000 Інша річ, яку потрібно зробити, це якщо ви дістатися до цієї точки на випробувальному 507 00:34:24,000 --> 00:34:27,000 і ви написали її так далеко 508 00:34:27,000 --> 00:34:30,000 і ви працюєте поза часом 509 00:34:30,000 --> 00:34:33,000 подивіться на кількість очок, що ця проблема стоїть. 510 00:34:33,000 --> 00:34:40,000 Ця проблема, як ви можете бачити, якщо я сальто назад з моїм ноутбуком дійсно швидко- 511 00:34:40,000 --> 00:34:44,000 ця проблема стоїть 2 очки, так що це не з того 512 00:34:44,000 --> 00:34:47,000 Ви повинні йти через, якщо ви дійсно мало часу. 513 00:34:47,000 --> 00:34:52,000 Але ми будемо повернутися до iPad, і ми будемо пройти через це дуже швидко. 514 00:34:52,000 --> 00:34:54,000 >> Мені подобається робити невеликі числа спочатку 515 00:34:54,000 --> 00:34:56,000 тому що я вважаю, що простіше. 516 00:34:56,000 --> 00:35:00,000 Мені подобається 32 і 8, тому що вони йдуть разом досить легко, і ми отримуємо 50. 517 00:35:00,000 --> 00:35:03,000 16 і 1 отримує 17. 518 00:35:03,000 --> 00:35:05,000 Там ми отримаємо 57, 519 00:35:05,000 --> 00:35:14,000 і тоді ми зможемо зробити все інше з цього, так що ми можемо зробити, 57, 156. 520 00:35:14,000 --> 00:35:16,000 Підемо. 521 00:35:16,000 --> 00:35:19,000 Людина, добре, давайте подивимося. 522 00:35:19,000 --> 00:35:27,000 У нас було 57, 256 і 1024. 523 00:35:27,000 --> 00:35:31,000 На даний момент, я б просто пройти. 524 00:35:31,000 --> 00:35:35,000 Я поняття не маю. Я чітко потрібно читати на цьому. 525 00:35:35,000 --> 00:35:40,000 7, 6, 4, Ви отримуєте 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Тоді ми отримаємо 3, а потім ми отримуємо 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Пасхальне яйце, ніхто? 530 00:35:55,000 --> 00:35:59,000 Ніхто визнати цей номер? 531 00:35:59,000 --> 00:36:02,000 Кріс визнається числа. Що це значить, Кріс? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, так що якщо ви подивитеся на це, схоже, Літ. 534 00:36:11,000 --> 00:36:15,000 Хакер речі. Слідкуйте за такого роду речі по середньострокового або тест, а. 535 00:36:15,000 --> 00:36:19,000 Якщо ви бачите такі речі, і ви ставите питанням "А" 536 00:36:19,000 --> 00:36:22,000 , Що може насправді щось означають. 537 00:36:22,000 --> 00:36:24,000 Я не знаю. Девід любить покласти його дюйма 538 00:36:24,000 --> 00:36:26,000 Це хороший спосіб перевірити його осудність. 539 00:36:26,000 --> 00:36:30,000 Як добре, я бачу, що відбувається. 540 00:36:30,000 --> 00:36:34,000 >> Ось тиждень 1 0/Week речі. 541 00:36:34,000 --> 00:36:39,000 Якщо повернутися до наших ноутбуком зараз, 542 00:36:39,000 --> 00:36:46,000 зменшити масштаб, і пару інших речей. 543 00:36:46,000 --> 00:36:50,000 Там в ASCII, які ми робили багато з проблемою набору. 544 00:36:50,000 --> 00:36:55,000 Це поняття капіталу A. Що це насправді? 545 00:36:55,000 --> 00:36:57,000 Знаючи це десяткове число. 546 00:36:57,000 --> 00:37:00,000 65 є те, що він відображається в таблиці ASCII, 547 00:37:00,000 --> 00:37:03,000 і ось тому, як комп'ютер пише він, 548 00:37:03,000 --> 00:37:06,000 і це, як ми вже сходить з фактичної записи 549 00:37:06,000 --> 00:37:09,000 характер капіталу і характер нижнього регістра 550 00:37:09,000 --> 00:37:14,000 У деяких з цих рішень і проблема набору, що ви робили. 551 00:37:14,000 --> 00:37:16,000 Кілька інших речей. 552 00:37:16,000 --> 00:37:25,000 У нас є заяви, логічні вирази, умови, цикли, змінні і потоків. 553 00:37:25,000 --> 00:37:29,000 >> Ті, все, здається, має сенс по більшій частині? 554 00:37:29,000 --> 00:37:35,000 Деякі з цієї термінології трохи наляканим в рази. 555 00:37:35,000 --> 00:37:46,000 Мені подобається думати, заяви, як здебільшого те, що закінчується крапкою з комою. 556 00:37:46,000 --> 00:37:51,000 Такі заяви, як х = 7, яка встановлює змінну 557 00:37:51,000 --> 00:37:54,000 Імовірно називається х = 7. 558 00:37:54,000 --> 00:38:01,000 Імовірно х також тип, який може зберегти номер 7, 559 00:38:01,000 --> 00:38:05,000 так що Int або, можливо, теркою або коротка або символ, 560 00:38:05,000 --> 00:38:07,000 щось на зразок цього. 561 00:38:07,000 --> 00:38:12,000 Логічний вираз використовує ці подвійні одно 562 00:38:12,000 --> 00:38:17,000 і вибуху дорівнює або не дорівнює, менше, більше, ніж, 563 00:38:17,000 --> 00:38:22,000 менше або дорівнюють, все в такому ж роді. 564 00:38:22,000 --> 00:38:28,000 Умови тобто, якщо інше звітності. 565 00:38:28,000 --> 00:38:32,000 Я пам'ятаю, що ви не можете мати інше без відповідних якщо. 566 00:38:32,000 --> 00:38:37,000 Крім того, ви не можете мати ще, якщо без відповідних якщо. 567 00:38:37,000 --> 00:38:40,000 Петлі, нагадаємо 3 види петель ми були в вас молотком 568 00:38:40,000 --> 00:38:43,000 за останні пару секцій та проблеми безлічі. 569 00:38:43,000 --> 00:38:46,000 Використання ж час, коли ви отримуєте користувальницького введення, 570 00:38:46,000 --> 00:38:51,000 використання в той час як петлі, поки певний умова істинно, 571 00:38:51,000 --> 00:38:56,000 , А потім за допомогою цих циклів, якщо вам потрібно 572 00:38:56,000 --> 00:39:01,000 знати, які ітерації циклу ви зараз знаходитеся, як я думаю про це. 573 00:39:01,000 --> 00:39:07,000 Або якщо ви робите для кожного символу в рядку я хочу щось зробити, 574 00:39:07,000 --> 00:39:15,000 Для кожного елемента в масиві я хочу щось зробити, щоб цього елемента. 575 00:39:15,000 --> 00:39:18,000 >> Теми та події. 576 00:39:18,000 --> 00:39:21,000 Ці які ми не так явно в C, 577 00:39:21,000 --> 00:39:23,000 але пам'ятайте, це з нуля. 578 00:39:23,000 --> 00:39:26,000 Це поняття, що мають різні сценарії. 579 00:39:26,000 --> 00:39:32,000 Це теж це поняття трансляції події. 580 00:39:32,000 --> 00:39:37,000 Деякі люди не використовували мовлення в своїх проектах на початковому етапі, 581 00:39:37,000 --> 00:39:40,000 який повністю прохолодно, 582 00:39:40,000 --> 00:39:46,000 але ці 2 різні способи обробки цього більше проблем, паралелізм, 583 00:39:46,000 --> 00:39:49,000 який є, як ви отримуєте програм для виконання 584 00:39:49,000 --> 00:39:54,000 або, здавалося б виконати в той же час? 585 00:39:54,000 --> 00:39:59,000 Різні завдання, що виконуються в той час як інші завдання також працює. 586 00:39:59,000 --> 00:40:01,000 Це, як ваша операційна система, здається, працює. 587 00:40:01,000 --> 00:40:04,000 Ось чому, хоча, наприклад, 588 00:40:04,000 --> 00:40:10,000 У мене є мій браузер працює, я також можете включити Spotify і грати пісні. 589 00:40:10,000 --> 00:40:14,000 Це більше, концептуальні речі, щоб зрозуміти. 590 00:40:14,000 --> 00:40:17,000 Я хотів би поглянути на теми, коротко 591 00:40:17,000 --> 00:40:21,000 Якщо ви хочете дізнатися більше про це. 592 00:40:21,000 --> 00:40:26,000 >> Давайте подивимося, я вважаю, що можна було б 593 00:40:26,000 --> 00:40:31,000 Проблема про це в одному з них. 594 00:40:31,000 --> 00:40:35,000 Знову ж таки, я думаю, що теми і події, не те, що ми розглянемо в C 595 00:40:35,000 --> 00:40:41,000 тільки тому, що це значно важче, ніж в Scratch. 596 00:40:41,000 --> 00:40:44,000 Ви не повинні турбуватися про неї, але, безумовно, розуміють концепції, 597 00:40:44,000 --> 00:40:47,000 зрозуміти, що відбувається. 598 00:40:47,000 --> 00:40:52,000 Перш ніж рухатися далі, будь-які питання на тиждень 0 матеріалів? 599 00:40:52,000 --> 00:40:55,000 Кожен відчував себе досить добре? 600 00:40:55,000 --> 00:41:03,000 Розуміння змінних і що таке змінна? 601 00:41:03,000 --> 00:41:08,000 >> Рухаємося далі. Тиждень 1. 602 00:41:08,000 --> 00:41:12,000 Кілька речей тут, які не були особливо покриті 603 00:41:12,000 --> 00:41:21,000 У вікторині відгук обов'язково, а також більш концептуальні речі, щоб думати. 604 00:41:21,000 --> 00:41:30,000 По-перше, це поняття про те, що вихідний код, компілятори і об'єктний код є. 605 00:41:30,000 --> 00:41:32,000 Хто-небудь? Василя. 606 00:41:32,000 --> 00:41:37,000 Є об'єктно-код я маю на увазі вихідного коду є те, що ви поклали в брязкіт, 607 00:41:37,000 --> 00:41:42,000 і об'єктний код є те, що дзвоном ставить так, що ваш комп'ютер може прочитати програму. 608 00:41:42,000 --> 00:41:44,000 Саме так. 609 00:41:44,000 --> 00:41:47,000 Вихідний код код C, що ви насправді надрукувати. 610 00:41:47,000 --> 00:41:50,000 Код об'єкту є те, що ви виходите з брязкіт. 611 00:41:50,000 --> 00:41:54,000 Це 0 та 1, що в двійковому форматі. 612 00:41:54,000 --> 00:41:59,000 Тоді що ж відбувається, коли у вас є кілька об'єктних файлів, 613 00:41:59,000 --> 00:42:04,000 сказати, що ви збираєте проект або програма, яка використовує декілька файлів вихідного коду, 614 00:42:04,000 --> 00:42:09,000 які за угодою надається. із розширенням файлу. 615 00:42:09,000 --> 00:42:13,000 Ось чому у нас є caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Якщо ви пишете Java програми ви даєте їм розширення. Java. 617 00:42:18,000 --> 00:42:24,000 Python програми мають розширення. Ру часто. 618 00:42:24,000 --> 00:42:26,000 >> Якщо у вас є декілька. С файлами, ви їх компіляції. 619 00:42:26,000 --> 00:42:29,000 Clang випльовує все це двійковий сміття. 620 00:42:29,000 --> 00:42:33,000 Потім, тому що ви тільки хочете 1 програма 621 00:42:33,000 --> 00:42:37,000 у вас є компонувальник посиланню всі ці об'єктні файли разом 622 00:42:37,000 --> 00:42:40,000 в 1 виконуваний файл. 623 00:42:40,000 --> 00:42:45,000 Це також те, що відбувається, коли ви використовуєте CS50 бібліотеці, наприклад. 624 00:42:45,000 --> 00:42:50,000 Бібліотека CS50 є і те. Ч. файл заголовка 625 00:42:50,000 --> 00:42:53,000 що ви читаєте, що # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 І тоді це також спеціальний файл бібліотеки двійкових 627 00:42:58,000 --> 00:43:02,000 , Який було складено це 0 і 1, 628 00:43:02,000 --> 00:43:08,000 і що-л прапор, тому, якщо ми повернемося до наших просторів і ми дивимося дуже швидко 629 00:43:08,000 --> 00:43:11,000 на те, що тут відбувається, коли ми дивимося на нашу команду брязкіт, 630 00:43:11,000 --> 00:43:15,000 те, що ми отримали, це наш вихідний код файлу прямо тут. 631 00:43:15,000 --> 00:43:18,000 Це купа прапорів компілятора. 632 00:43:18,000 --> 00:43:22,000 І тоді в самому кінці, ці-л прапори посилання в 633 00:43:22,000 --> 00:43:30,000 фактичні двійкові файли на ці 2 бібліотеки, CS50 бібліотеки, а потім математичну бібліотеку. 634 00:43:30,000 --> 00:43:35,000 >> Розуміння кожного типу файлів мети " 635 00:43:35,000 --> 00:43:38,000 В процесі компіляції є те, що ви хочете, щоб мати можливість 636 00:43:38,000 --> 00:43:43,000 дати хоча б детальний огляд. 637 00:43:43,000 --> 00:43:46,000 Вихідний код приходить дюйма Код об'єкта виходить. 638 00:43:46,000 --> 00:43:53,000 Файли Код об'єкта зв'язати разом, і ви отримаєте гарний, виконуваний файл. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Це також, де ви можете отримати помилки в декількох точках 641 00:43:58,000 --> 00:44:00,000 В процесі компіляції. 642 00:44:00,000 --> 00:44:04,000 Це коли, наприклад, якщо ви візьмете цю зв'язок прапор, 643 00:44:04,000 --> 00:44:10,000 CS50 прапор, і ви опустіть його в просторі або коли ви працюєте ваш код, 644 00:44:10,000 --> 00:44:13,000 це де ви отримаєте помилку в стадії компонування, 645 00:44:13,000 --> 00:44:18,000 і компонувальник буде сказати: "Ей, ви називається функцією GetString 646 00:44:18,000 --> 00:44:20,000 , Який в CS50 бібліотеки ». 647 00:44:20,000 --> 00:44:25,000 "Ви сказали мені, що в CS50 бібліотека, і я не можу знайти код для нього." 648 00:44:25,000 --> 00:44:28,000 Ось де ви повинні зв'язати його, і це окрема 649 00:44:28,000 --> 00:44:33,000 від помилки компілятора, тому що компілятор дивиться на синтаксис і такого роду речі. 650 00:44:33,000 --> 00:44:38,000 Це добре, щоб знати, що відбувається, коли. 651 00:44:38,000 --> 00:44:42,000 >> Інші речі, щоб знати. 652 00:44:42,000 --> 00:44:49,000 Я б сказав, ви безумовно хочете, щоб поглянути на короткому на приведення зроблено Йорданії 653 00:44:49,000 --> 00:44:55,000 щоб зрозуміти, що цілими знаходиться під капотом, 654 00:44:55,000 --> 00:44:58,000 які символи знаходяться під капотом. 655 00:44:58,000 --> 00:45:02,000 Коли ми говоримо про ASCII, і ми насправді дивимося на таблицю ASCII, 656 00:45:02,000 --> 00:45:07,000 що це робить дає нам під капотом погляд 657 00:45:07,000 --> 00:45:13,000 на те, як комп'ютер насправді являє капіталу та цифри 7 658 00:45:13,000 --> 00:45:17,000 і кома і знак питання. 659 00:45:17,000 --> 00:45:20,000 Комп'ютер також має спеціальні способи представлення 660 00:45:20,000 --> 00:45:23,000 число 7, як число. 661 00:45:23,000 --> 00:45:27,000 Це має особливе спосіб представлення числа 7 як число з плаваючою точкою, 662 00:45:27,000 --> 00:45:29,000 і тих, хто дуже різні. 663 00:45:29,000 --> 00:45:32,000 Приведення те, як ви кажете комп'ютер "Гей, я хочу вам конвертувати 664 00:45:32,000 --> 00:45:37,000 від одного представлення до іншого поданням ". 665 00:45:37,000 --> 00:45:40,000 Чому б нам не подивитися на це. 666 00:45:40,000 --> 00:45:44,000 >> Я хотів би також поглянути на коротких по бібліотеках і короткий на компілятори. 667 00:45:44,000 --> 00:45:47,000 Ці розмови про процес компіляції, 668 00:45:47,000 --> 00:45:53,000 що бібліотека, і перейти на деякі з цих питань, які ви могли б запитав. 669 00:45:53,000 --> 00:45:55,000 Питання по тиждень 1 матеріал? 670 00:45:55,000 --> 00:46:03,000 Чи є теми тут, що в зневіру ви хочете, щоб покрити? 671 00:46:03,000 --> 00:46:07,000 Я намагаюся, щоб продути більшість з них раніше тим, щоб ми могли дістатися до 672 00:46:07,000 --> 00:46:13,000 покажчиків і зробити трохи рекурсії. 673 00:46:13,000 --> 00:46:15,000 Думки? 674 00:46:15,000 --> 00:46:19,000 Все, що для покриття? 675 00:46:19,000 --> 00:46:21,000 Час для деяких шоколад може бути? 676 00:46:21,000 --> 00:46:23,000 Ви, хлопці, працюєте через нього. 677 00:46:23,000 --> 00:46:26,000 Я буду тримати потягуючи каву. 678 00:46:26,000 --> 00:46:31,000 2-й тиждень. 679 00:46:31,000 --> 00:46:34,000 Гарне слово, хороший виклик. 680 00:46:34,000 --> 00:46:38,000 У 2-й тиждень, ми говорили трохи більше про функції. 681 00:46:38,000 --> 00:46:43,000 >> У перші кілька комплектів проблеми ми дійсно не писати ніяких функцій на всіх 682 00:46:43,000 --> 00:46:45,000 крім якому функція? 683 00:46:45,000 --> 00:46:47,000 [Студент] Main. >> Головне, точно. 684 00:46:47,000 --> 00:46:51,000 І так ми бачили різні костюми, що основною носить. 685 00:46:51,000 --> 00:46:54,000 Там в одній, в якій він не приймає аргументів, 686 00:46:54,000 --> 00:46:58,000 і ми просто скажемо, порожнечу в круглих дужках, 687 00:46:58,000 --> 00:47:01,000 і тоді є інший, де ми хочемо приймати аргументи командного рядка, 688 00:47:01,000 --> 00:47:08,000 і, як ми бачили, що там у вас є Int ARGC і ARGV масив рядків 689 00:47:08,000 --> 00:47:13,000 або тепер, коли ми насправді піддається рядки, щоб бути символ *, що 690 00:47:13,000 --> 00:47:20,000 ми збираємося, щоб почати писати його як символ * ARGV, а потім дужки. 691 00:47:20,000 --> 00:47:22,000 У задачі Set 3, ви, хлопці, бачили купу функцій, 692 00:47:22,000 --> 00:47:27,000 і ви реалізували купу функцій, малювати, дивитися вгору, сутичка. 693 00:47:27,000 --> 00:47:31,000 Прототипи були написані там для вас. 694 00:47:31,000 --> 00:47:33,000 >> Те, що я хотів розповісти про тут з функціями дуже швидко 695 00:47:33,000 --> 00:47:38,000 є те, що існує 3 частин до них всякий раз, коли ви пишете функцію. 696 00:47:38,000 --> 00:47:43,000 Ви повинні вказати тип значення, що повертається функції. 697 00:47:43,000 --> 00:47:46,000 Ви повинні вказати ім'я функції, а потім ви повинні вказати 698 00:47:46,000 --> 00:47:51,000 Список аргументів або списку параметрів. 699 00:47:51,000 --> 00:47:57,000 Наприклад, якщо б я написати функцію, щоб підвести підсумки купу цілих чисел 700 00:47:57,000 --> 00:48:03,000 , А потім повернутися до мене суму, що було б мого повернення типу 701 00:48:03,000 --> 00:48:06,000 якби я хотів, щоб підвести цілих чисел, а потім повернути суму? 702 00:48:06,000 --> 00:48:12,000 Тоді ім'я функції. 703 00:48:12,000 --> 00:48:27,000 Якщо я піду вперед і написати в зелений, ця частина повертається типу. 704 00:48:27,000 --> 00:48:34,000 Ця частина назви. 705 00:48:34,000 --> 00:48:40,000 А потім в дужках 706 00:48:40,000 --> 00:48:46,000 Тут я даю аргументи, 707 00:48:46,000 --> 00:48:56,000 Часто скорочено аргументи, які іноді називаються параметрами для параметрів. 708 00:48:56,000 --> 00:49:00,000 І якщо у вас є, ви просто вказуєте один. 709 00:49:00,000 --> 00:49:06,000 Якщо у вас кілька ви розділите кожен з комою. 710 00:49:06,000 --> 00:49:13,000 І для кожного аргументу, ви даєте йому 2 речі, які, Кевін? 711 00:49:13,000 --> 00:49:18,000 [Кевін] Ви повинні дати типу, а потім ім'я. 712 00:49:18,000 --> 00:49:21,000 І то ім'я, і ​​ім'я це ім'я, яке ви збираєтеся використовувати 713 00:49:21,000 --> 00:49:25,000 посилатися на цей аргумент в межах суми функцій, 714 00:49:25,000 --> 00:49:27,000 в межах функції, які ви в даний час написання. 715 00:49:27,000 --> 00:49:32,000 >> Ви не повинні, наприклад, якщо я збираюся підбивати підсумки, 716 00:49:32,000 --> 00:49:41,000 скажімо, масив цілих чисел-Ми робимо Int масиву, 717 00:49:41,000 --> 00:49:46,000 і я дам собі деякі фігурні дужки там- 718 00:49:46,000 --> 00:49:51,000 Потім, коли я передати масив в сумі функцій 719 00:49:51,000 --> 00:49:55,000 Я передаю його в першу позицію списку аргументів. 720 00:49:55,000 --> 00:49:59,000 Але масив, який я проходжу в не повинна мати назву обр. 721 00:49:59,000 --> 00:50:07,000 Обр буде, як я посилатися на цей аргумент в тілі функції. 722 00:50:07,000 --> 00:50:10,000 Інша справа, що ми повинні взяти до уваги, 723 00:50:10,000 --> 00:50:14,000 і це трохи відрізняється від функції, але я думаю, це важливий момент, 724 00:50:14,000 --> 00:50:20,000 є те, що в C, коли я пишу цю функцію, як 725 00:50:20,000 --> 00:50:29,000 Звідки я знаю, скільки елементів у цьому масиві? 726 00:50:29,000 --> 00:50:31,000 Це свого роду питання з підступом. 727 00:50:31,000 --> 00:50:35,000 Ми говорили про це трохи в розділі минулого тижня. 728 00:50:35,000 --> 00:50:40,000 Як мені дізнатися кількість елементів всередині масиву в C? 729 00:50:40,000 --> 00:50:44,000 Чи є спосіб? 730 00:50:44,000 --> 00:50:49,000 >> Виявляється, що немає ніякого способу дізнатися. 731 00:50:49,000 --> 00:50:52,000 Ви повинні передати його окремо. 732 00:50:52,000 --> 00:50:55,000 Існує трюк, який ви можете зробити 733 00:50:55,000 --> 00:51:00,000 якщо ви знаходитеся в тій же функцією, в якій масив був оголошений, 734 00:51:00,000 --> 00:51:04,000 і ви працюєте зі стеком масиву. 735 00:51:04,000 --> 00:51:06,000 Але це працює, тільки якщо ви знаходитеся в тій же функції. 736 00:51:06,000 --> 00:51:09,000 Після того як ви передати масив в іншу функцію або якщо ви оголосили масив 737 00:51:09,000 --> 00:51:12,000 а ви ставите цей масив у купі, ви використовували Танос 738 00:51:12,000 --> 00:51:15,000  і в такому ж роді, то всі ставки вимкнені. 739 00:51:15,000 --> 00:51:18,000 Тоді вам насправді потрібно обійти 740 00:51:18,000 --> 00:51:21,000 спеціальний аргумент або інший параметр 741 00:51:21,000 --> 00:51:23,000 кажу вам, як великий масив. 742 00:51:23,000 --> 00:51:28,000 У цьому випадку, я хотів би використовувати кому-Пробачте, це буде від екрану тут- 743 00:51:28,000 --> 00:51:32,000 і я б перейти в інший аргумент 744 00:51:32,000 --> 00:51:40,000  і називати його Int довжина по довжині. 745 00:51:40,000 --> 00:51:44,000 >> Одна річ, яка може прийти на тест 746 00:51:44,000 --> 00:51:49,000 просить вас написати чи здійснювати певну функцію називають щось. 747 00:51:49,000 --> 00:51:54,000 Якщо ми не дамо вам прототип, так що це все справа тут, 748 00:51:54,000 --> 00:51:58,000 весь цей бардак називається оголошення функції або прототип функції, 749 00:51:58,000 --> 00:52:01,000 це одна з перших речей, які ви хочете, щоб прибити, якщо вона не дано 750 00:52:01,000 --> 00:52:03,000 Вам відразу на вікторину. 751 00:52:03,000 --> 00:52:06,000 Інший трюк я дізнався, що 752 00:52:06,000 --> 00:52:11,000 сказати, що ми дійсно дають вам прототип функції, і ми говоримо: "Гей, ти повинен писати". 753 00:52:11,000 --> 00:52:16,000 Усередині фігурних дужках, що у вас на тест 754 00:52:16,000 --> 00:52:20,000 Якщо ви помітите, що є возвращаемого типу, і ви помітите, що тип возвращаемого 755 00:52:20,000 --> 00:52:25,000 це щось інше, ніж порожнеча, яка означає, що функція не повертає нічого, 756 00:52:25,000 --> 00:52:28,000 те, що ви безумовно хочете зробити, це написати 757 00:52:28,000 --> 00:52:33,000 свого роду повернення заяви в самому кінці функції. 758 00:52:33,000 --> 00:52:40,000 Повернення, і в цьому випадку, ми будемо ставити порожню, тому що ми хочемо, щоб заповнити порожні. 759 00:52:40,000 --> 00:52:44,000 Але це отримує вас думати в правильному напрямку, про те, як я буду підходити до цієї проблеми? 760 00:52:44,000 --> 00:52:49,000 І це нагадує вам, що ви будете мати, щоб повернути значення 761 00:52:49,000 --> 00:52:51,000 зухвалій функції. 762 00:52:51,000 --> 00:52:54,000 >> Так. >> [Студент] Чи стиль застосовується, коли ми пишемо код на вікторину? 763 00:52:54,000 --> 00:52:58,000 Такі, як відступ і в такому ж роді? >> [Студент] Так. 764 00:52:58,000 --> 00:53:00,000 Ні, не так багато. 765 00:53:00,000 --> 00:53:09,000 Я думаю, що багато-це те, що ми будемо уточнити на вікторину в день, 766 00:53:09,000 --> 00:53:15,000 але, як правило турбуючись про # включає в себе і в такому ж роді, це вид ззовні. 767 00:53:15,000 --> 00:53:17,000 [Студент] Вам потрібно коментувати свої рукописні код? 768 00:53:17,000 --> 00:53:19,000 Вам потрібно коментувати свої рукописні код? 769 00:53:19,000 --> 00:53:24,000 Коментуючи це завжди добре, якщо ви турбуєтеся про часткову кредитної 770 00:53:24,000 --> 00:53:29,000 або ви хочете повідомити про свій намір грейдер. 771 00:53:29,000 --> 00:53:33,000 Але я, знову ж таки, буде уточнити на вікторину себе і в той день, вікторини, 772 00:53:33,000 --> 00:53:39,000 Але я не вірю, що ви будете зобов'язані писати коментарі, немає. 773 00:53:39,000 --> 00:53:42,000 Як правило, немає, але це безумовно та річ, де 774 00:53:42,000 --> 00:53:45,000 Ви можете повідомити ваші наміри, як "Гей, це куди я йду з ним". 775 00:53:45,000 --> 00:53:49,000 І іноді це може допомогти з частковим кредиту. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Василя. 778 00:53:53,000 --> 00:53:56,000 [Василь] У чому різниця між оголошенні, скажімо, внутр мову 779 00:53:56,000 --> 00:54:03,000 в аргументах або параметрах у порівнянні з оголошенням змінної всередині функції? 780 00:54:03,000 --> 00:54:05,000 Wow, кава пішов у дихальне горло. 781 00:54:05,000 --> 00:54:07,000 [Василь] Як яке речей, які ми хочемо помістити в аргументах. 782 00:54:07,000 --> 00:54:09,000 Так, це велике питання. 783 00:54:09,000 --> 00:54:11,000 Як ви вибираєте те, що речі, які ви хочете помістити в міркуваннях 784 00:54:11,000 --> 00:54:17,000 проти того, що речі, які ви повинні робити всередині функції? 785 00:54:17,000 --> 00:54:24,000 У цьому випадку ми включили обидва цих якості аргументів 786 00:54:24,000 --> 00:54:29,000 тому що вони те, що той, хто збирається використовувати функцію суми 787 00:54:29,000 --> 00:54:32,000 Необхідно вказати ці речі. 788 00:54:32,000 --> 00:54:35,000 >> Сума функція, про яку ми говорили, не має можливості дізнатися, 789 00:54:35,000 --> 00:54:40,000 наскільки великий масив вона отримує від свого абонента або той, хто використовує суму функцію. 790 00:54:40,000 --> 00:54:44,000 Він не має можливості дізнатися, як великий, що масив. 791 00:54:44,000 --> 00:54:48,000 Тому ми пройти в цьому довжина прямо тут в якості аргументу 792 00:54:48,000 --> 00:54:51,000 тому, що це те, що ми в основному говорять викликає функції, 793 00:54:51,000 --> 00:54:55,000 хто збирається використовувати функцію суми, "Гей, ви не тільки повинні дати нам масив 794 00:54:55,000 --> 00:54:59,000 цілих чисел, ви також повинні сказати нам, як великий масив, який Ви дали нам ". 795 00:54:59,000 --> 00:55:03,000 [Василь] Ті, обидва будуть аргументи командного рядка? 796 00:55:03,000 --> 00:55:06,000 Ні, це фактичні аргументи, які ви передаєте в функцію. 797 00:55:06,000 --> 00:55:10,000 >> Дозвольте мені зробити нову сторінку тут. 798 00:55:10,000 --> 00:55:13,000 [Василь] Як ім'я буде проходити- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Якщо у мене є Int основних (недійсними), 800 00:55:24,000 --> 00:55:27,000 і я збираюся поставити в моєму поверненні 0 вниз тут на дні, 801 00:55:27,000 --> 00:55:31,000 і сказати, що я хочу, щоб викликати функцію суми. 802 00:55:31,000 --> 00:55:42,000 Я хочу сказати, Int х = SUM (); 803 00:55:42,000 --> 00:55:46,000 Щоб використовувати функцію суми я повинен пройти як в масиві, що я хочу, щоб підвести підсумок 804 00:55:46,000 --> 00:55:51,000 і довжина масиву, так що це, де 805 00:55:51,000 --> 00:55:54,000 припускаючи, що я був масив цілих чисел, 806 00:55:54,000 --> 00:56:12,000 сказати, що я Int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 вид використання, який порубав синтаксис там же, 808 00:56:16,000 --> 00:56:21,000 те, що я хотів би зробити це в сумі я хотів би перейти в 809 00:56:21,000 --> 00:56:27,000 як numbaz і № 3 810 00:56:27,000 --> 00:56:30,000 розповісти суму функцію "Добре, ось масив, який я хочу, щоб ви підвести". 811 00:56:30,000 --> 00:56:34,000 "Ось його розміру." 812 00:56:34,000 --> 00:56:39,000 Чи має це сенс? Я відповів на ваше запитання? 813 00:56:39,000 --> 00:56:42,000 >> Багато в чому це відбувається паралельна, що ми робимо з основними 814 00:56:42,000 --> 00:56:44,000 коли у нас є аргументи командного рядка. 815 00:56:44,000 --> 00:56:47,000 Така програма, як шифр Цезаря, наприклад, що необхідно 816 00:56:47,000 --> 00:56:53,000 аргументи командного рядка не зміг би нічого зробити. 817 00:56:53,000 --> 00:56:57,000 Не знаю, як для шифрування, якщо Ви не сказати йому, що ключ до використання 818 00:56:57,000 --> 00:57:03,000 або якщо ви не сказали йому, що рядок, яку ви хотіли зашифрувати. 819 00:57:03,000 --> 00:57:08,000 Підказка для введення, це де у нас є 2 різних механізмів 820 00:57:08,000 --> 00:57:14,000 для прийняття вході в від користувача, для прийняття інформації від користувача. 821 00:57:14,000 --> 00:57:19,000 Для задач 1 ми бачили, це GetInt, GetString, GetFloat шляху 822 00:57:19,000 --> 00:57:26,000 наведення для введення, і це називається використанням стандартного вхідного потоку. 823 00:57:26,000 --> 00:57:28,000 Це трохи відрізняється. 824 00:57:28,000 --> 00:57:31,000 Це те, що ви можете зробити за один раз, на відміну від 825 00:57:31,000 --> 00:57:35,000 коли ви запускаєте програму, при запуску програма працює. 826 00:57:35,000 --> 00:57:41,000 Аргументи командного рядка усіх зазначених при запуску програми, запущеної. 827 00:57:41,000 --> 00:57:47,000 Ми змішування двох з них. 828 00:57:47,000 --> 00:57:52,000 Коли ми використовуємо аргументи функції, це так само, як аргументи командного рядка до основного. 829 00:57:52,000 --> 00:57:56,000 Це при виклику функції ви повинні сказати йому, 830 00:57:56,000 --> 00:58:05,000 що саме йому потрібно для того, щоб виконувати свої завдання. 831 00:58:05,000 --> 00:58:08,000 Ще одна хороша річ, щоб дивитися на, і я дам вам подивитися на це у вільний час, 832 00:58:08,000 --> 00:58:11,000 і вона була покрита у вікторині, було це поняття за рамки 833 00:58:11,000 --> 00:58:15,000 і локальних змінних в порівнянні з глобальними змінними. 834 00:58:15,000 --> 00:58:18,000 У звернути увагу на це. 835 00:58:18,000 --> 00:58:23,000 >> Тепер, коли ми стаємо на цю інші речі, 836 00:58:23,000 --> 00:58:27,000 3 тижні ми почали говорити про пошуку і сортування. 837 00:58:27,000 --> 00:58:32,000 Пошук і сортування, принаймні, CS50, 838 00:58:32,000 --> 00:58:39,000 дуже введенням в деякі з найбільш теоретична частина комп'ютерної науки. 839 00:58:39,000 --> 00:58:42,000 Проблема пошуку, завдання сортування 840 00:58:42,000 --> 00:58:46,000 великий, канонічної проблеми. 841 00:58:46,000 --> 00:58:52,000 Як ви знаходите певного числа в масиві мільярдів чисел? 842 00:58:52,000 --> 00:58:55,000 Як знайти конкретне ім'я в телефонній книзі 843 00:58:55,000 --> 00:58:59,000 , Яка зберігається на вашому ноутбуці? 844 00:58:59,000 --> 00:59:04,000 І тому ми введемо це поняття асимптотичного часу роботи 845 00:59:04,000 --> 00:59:11,000 дійсно кількісно, ​​як довго, як важко ці проблеми є, 846 00:59:11,000 --> 00:59:14,000 Як довго вони приймають рішення. 847 00:59:14,000 --> 00:59:20,000 В, я вважаю, 2011 вікторині є проблема, що я думаю достоїнств 848 00:59:20,000 --> 00:59:27,000 покриття дуже швидко, що це, проблема 12. 849 00:59:27,000 --> 00:59:32,000 О ні, це Omega. 850 00:59:32,000 --> 00:59:41,000 >> Тут ми говоримо про максимально можливу час виконання 851 00:59:41,000 --> 00:59:46,000 для конкретного алгоритму, а потім мінімально можливий час виконання. 852 00:59:46,000 --> 00:59:52,000 Це Omega і O в дійсності є лише ярлики. 853 00:59:52,000 --> 00:59:55,000 Вони позначень клавіш для говорячи 854 00:59:55,000 --> 00:59:59,000 як швидко в кращому випадку буде наш алгоритм виконання, 855 00:59:59,000 --> 01:00:06,000 і як повільно в гіршому випадку буде наш алгоритм бігти? 856 01:00:06,000 --> 01:00:10,000 Давайте зробимо декілька з них, і вони були також покриті 857 01:00:10,000 --> 01:00:13,000 в короткостроковій про асимптотичних позначень, які я дуже рекомендую. 858 01:00:13,000 --> 01:00:17,000 Джексон зробив дуже хорошу роботу. 859 01:00:17,000 --> 01:00:23,000 З бінарний пошук, ми говоримо про бінарного пошуку як алгоритм, 860 01:00:23,000 --> 01:00:28,000 і ми зазвичай говоримо про це з точки зору його великий O. 861 01:00:28,000 --> 01:00:30,000 Що таке Big O? 862 01:00:30,000 --> 01:00:34,000 Що таке мінімально можливий час виконання двійкового пошуку? 863 01:00:34,000 --> 01:00:36,000 [Студент] N ²? 864 01:00:36,000 --> 01:00:41,000 Закрити, я думаю, схоже на те. 865 01:00:41,000 --> 01:00:43,000 Це набагато швидше, ніж це. 866 01:00:43,000 --> 01:00:45,000 [Студент] Двійкові? >> Да, бінарний пошук. 867 01:00:45,000 --> 01:00:47,000 [Студент] Це журнал с. 868 01:00:47,000 --> 01:00:49,000 Вхід п, так що ж увійти п маєте на увазі? 869 01:00:49,000 --> 01:00:51,000 Це половини цього кожній ітерації. 870 01:00:51,000 --> 01:00:56,000 Точно, так і в мінімально можливий випадок, 871 01:00:56,000 --> 01:01:00,000 говорять, що якщо у вас є відсортований масив 872 01:01:00,000 --> 01:01:08,000 мільйон цілих чисел і номер, який ви шукаєте 873 01:01:08,000 --> 01:01:14,000 це або перший елемент масиву або самий останній елемент масиву. 874 01:01:14,000 --> 01:01:18,000 Пам'ятайте, що алгоритм двійкового пошуку роботи, дивлячись на середній елемент, 875 01:01:18,000 --> 01:01:21,000 бачачи якщо це матч, який ви шукаєте. 876 01:01:21,000 --> 01:01:23,000 Якщо це так, то великий, ви його знайшли. 877 01:01:23,000 --> 01:01:27,000 >> У кращому випадку, як швидко робить виконання двійкового пошуку? 878 01:01:27,000 --> 01:01:29,000 [Студенти] 1. 879 01:01:29,000 --> 01:01:32,000 1, це постійне час, велика O 1. Так. 880 01:01:32,000 --> 01:01:36,000 [Студент] У мене є питання. Коли ви говорите увійти п, ви маєте на увазі по відношенню до основи 2, правильно? 881 01:01:36,000 --> 01:01:40,000 Так, так от інша річ. 882 01:01:40,000 --> 01:01:44,000 Ми говоримо, § п, і я думаю, коли я навчався в середній школі 883 01:01:44,000 --> 01:01:48,000 Я завжди вважав, що журнал був основою 10. 884 01:01:48,000 --> 01:01:57,000 Так, так так, увійти підставі 2 зазвичай це те, що ми використовуємо. 885 01:01:57,000 --> 01:02:02,000 Знову ж таки, повертаючись до бінарний пошук, якщо ви шукаєте або 886 01:02:02,000 --> 01:02:05,000 елемента в самому кінці або елемент на самому початку, 887 01:02:05,000 --> 01:02:08,000 тому що ви починаєте в середині, і тоді ви скидаєте 888 01:02:08,000 --> 01:02:13,000 Залежно від того, половина не відповідають критеріям, що ви шукаєте, 889 01:02:13,000 --> 01:02:15,000 і ви переходите до наступного половини і наступну половину і наступна половина. 890 01:02:15,000 --> 01:02:19,000 Якщо я шукаю найбільший елемент в мільйон цілих чисел 891 01:02:19,000 --> 01:02:25,000 Я збираюся вдвічі скоротити його на самий журналу 1 мільйона разів 892 01:02:25,000 --> 01:02:28,000 перш ніж я, нарешті, протестувати і побачити, що елемент я шукаю 893 01:02:28,000 --> 01:02:33,000 знаходиться у великій чи у вищій індекс масиву, 894 01:02:33,000 --> 01:02:38,000 і що буде журнал п, увійти в 1 млн. разів. 895 01:02:38,000 --> 01:02:40,000 >> Bubble роду. 896 01:02:40,000 --> 01:02:43,000 Хлопці, ви пам'ятаєте алгоритм бульбашкового сортування? 897 01:02:43,000 --> 01:02:47,000 Кевін, ви можете дати мені швидке повторення того, що сталося в алгоритм сортування міхур? 898 01:02:47,000 --> 01:02:50,000 [Кевін] В основному це проходить через все, що в списку. 899 01:02:50,000 --> 01:02:52,000 Він дивиться на перших двох. 900 01:02:52,000 --> 01:02:55,000 Якщо перший більше, ніж другий його свопи них. 901 01:02:55,000 --> 01:02:58,000 Потім він порівнює другої і третьої, те ж саме, свопи, 902 01:02:58,000 --> 01:03:00,000 Третій і четвертий, на всьому шляху вниз. 903 01:03:00,000 --> 01:03:03,000 Великі номери будуть слідувати до кінця. 904 01:03:03,000 --> 01:03:07,000 І після однак багато петлі ви зробили. 905 01:03:07,000 --> 01:03:11,000 Точно, так що Кевін сказав, що ми будемо спостерігати великі числа 906 01:03:11,000 --> 01:03:15,000 Пузир до кінця масиву. 907 01:03:15,000 --> 01:03:19,000 Наприклад, ви заперечуєте йти з нами через цю Наприклад, якщо це наш масив? 908 01:03:19,000 --> 01:03:21,000 [Кевін] Ви будете приймати 2 і 3. 909 01:03:21,000 --> 01:03:23,000 3 більше, ніж 2, так що ви поміняти їх місцями. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Право, таким чином, ми переставляємо їх, і таким чином ми отримуємо 2, 3, 6, 4 і 9. 911 01:03:29,000 --> 01:03:31,000 [Кевін] Тоді ви порівняєте 3 і 6. 912 01:03:31,000 --> 01:03:33,000 3 менше, ніж 6, так що ви залишите їх, 913 01:03:33,000 --> 01:03:37,000 і 6 і 4, потрібно поміняти їх місцями тому що 4 менше, ніж 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Право, так що я отримую 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Кевін] і 9 більше, ніж 6, так що ви залишите його. 916 01:03:46,000 --> 01:03:48,000 І ви повернулися б через це знову. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Чи можу я зробити у цей момент? >> [Кевін] Немає 918 01:03:50,000 --> 01:03:52,000 І чому я не робив в цей момент? 919 01:03:52,000 --> 01:03:54,000 Тому що він схожий на мого масив відсортований. Я дивлюся на це. 920 01:03:54,000 --> 01:03:57,000 [Кевін] пройти через це знову і переконайтеся, що немає більше свопи 921 01:03:57,000 --> 01:04:00,000 перш ніж ви зможете повністю зупинити. 922 01:04:00,000 --> 01:04:04,000 Саме, тому потрібно продовжувати йти до кінця і переконайтеся, що немає свопів 923 01:04:04,000 --> 01:04:06,000 що ви можете зробити в цій точці. 924 01:04:06,000 --> 01:04:08,000 Це було дійсно просто пощастило, як ви сказали, що ми закінчили 925 01:04:08,000 --> 01:04:12,000 тільки того, щоб зробити 1 прохід, і ми сортуються. 926 01:04:12,000 --> 01:04:16,000 Але для цього, в загальному випадку, ми насправді повинні робити це знову і знову. 927 01:04:16,000 --> 01:04:20,000 І справді, це був приклад кращому випадку, 928 01:04:20,000 --> 01:04:24,000 як ми бачили в проблемі. 929 01:04:24,000 --> 01:04:28,000 Ми бачили, що найкраще справу N. 930 01:04:28,000 --> 01:04:32,000 Ми пішли через масив 1 раз. 931 01:04:32,000 --> 01:04:35,000 Що це найгірший можливий випадок для цього алгоритму? 932 01:04:35,000 --> 01:04:37,000 [Кевін] N ². 933 01:04:37,000 --> 01:04:41,000 І що це схоже? Що б масив схоже, що б узяти п ² час? 934 01:04:41,000 --> 01:04:43,000 [Кевін] [нерозбірливо] відсортований. 935 01:04:43,000 --> 01:04:51,000 Саме, тому, якщо у мене була маса 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 Спочатку 9 буде міхур на всьому шляху вгору. 937 01:04:54,000 --> 01:04:59,000 Після 1 ітерації ми б 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Тоді 7 буде пузиритися, 6, 5, 2, 7, 9, і так далі, і так далі. 939 01:05:07,000 --> 01:05:13,000 >> Ми повинні пройти через весь масив п раз, 940 01:05:13,000 --> 01:05:16,000 і ви можете отримати трохи більш точним, ніж це 941 01:05:16,000 --> 01:05:23,000 тому що як тільки ми переїхали в 9 все, аж до останньої в його можливому положенні 942 01:05:23,000 --> 01:05:26,000 Ми знаємо, що ми ніколи не повинні порівнюватися з цим елементом знову. 943 01:05:26,000 --> 01:05:29,000 Як тільки ми починаємо пузириться 7 до 944 01:05:29,000 --> 01:05:35,000 Ми знаємо, що ми можемо зупинити лише 7 є правом до 9 945 01:05:35,000 --> 01:05:37,000 оскільки ми вже в порівнянні з 9 до неї. 946 01:05:37,000 --> 01:05:46,000 Якщо ви робите це в розумний спосіб це не по-справжньому, я думаю, що багато часу. 947 01:05:46,000 --> 01:05:49,000 Ви не збираєтеся, щоб порівняти всі можливі [нерозбірливо] комбінаціях 948 01:05:49,000 --> 01:05:55,000 кожен раз, коли ви проходите через кожну ітерацію. 949 01:05:55,000 --> 01:05:59,000 Але все ж, коли ми говоримо про це верхня межа ми говоримо, що 950 01:05:59,000 --> 01:06:04,000 Ви дивитеся на п ² порівняння весь шлях до кінця. 951 01:06:04,000 --> 01:06:12,000 >> Давайте повернемося, і так як ми починаємо отримувати трохи менше за часом 952 01:06:12,000 --> 01:06:15,000 Я б сказав, ви повинні обов'язково пройти решті частини цієї таблиці, 953 01:06:15,000 --> 01:06:17,000 заповнити все це. 954 01:06:17,000 --> 01:06:20,000 Подумайте про приклади. Подумайте про конкретні приклади. 955 01:06:20,000 --> 01:06:22,000 Це дійсно зручно й корисно зробити. 956 01:06:22,000 --> 01:06:25,000 Намалюйте його. 957 01:06:25,000 --> 01:06:28,000 Це свого роду таблицю, як ви йдете через в області комп'ютерних наук 958 01:06:28,000 --> 01:06:32,000 Ви повинні дійсно почати знаємо, що ці напам'ять. 959 01:06:32,000 --> 01:06:34,000 Ці види питань, які ви отримаєте в інтерв'ю. 960 01:06:34,000 --> 01:06:36,000 Це різні речі, які добре б знати, 961 01:06:36,000 --> 01:06:41,000 і думати про тих крайніх випадках, дійсно, з'ясовуючи, як подумати про 962 01:06:41,000 --> 01:06:45,000 знаючи, що для бульбашкового сортування в самий невідповідний масиву 963 01:06:45,000 --> 01:06:52,000 сортувати тим, що це той, який у зворотному порядку. 964 01:06:52,000 --> 01:06:58,000 >> Покажчики. Давайте трохи поговоримо про покажчики. 965 01:06:58,000 --> 01:07:03,000 В останні кілька хвилин тут ми маємо 966 01:07:03,000 --> 01:07:11,000 Я знаю, це те, що поряд з файлового введення / виводу, що є відносно новим. 967 01:07:11,000 --> 01:07:19,000 Коли ми говоримо про покажчиків з цієї причини ми хочемо говорити про покажчики 968 01:07:19,000 --> 01:07:24,000 Тому що, один, коли ми працюємо в C 969 01:07:24,000 --> 01:07:33,000 ми дійсно на досить низькому рівні в порівнянні з більшістю сучасних мов програмування. 970 01:07:33,000 --> 01:07:38,000 Ми насправді здатний маніпулювати перемінними в пам'яті, 971 01:07:38,000 --> 01:07:43,000 з'ясувати, де вони фактично знаходяться в межах нашої пам'яті. 972 01:07:43,000 --> 01:07:46,000 Після того як ви пішли на взяття операційна система класів, які ви побачите, 973 01:07:46,000 --> 01:07:48,000 , Що це, знову ж, свого роду абстракцією. 974 01:07:48,000 --> 01:07:50,000 Це не насправді. 975 01:07:50,000 --> 01:07:52,000 У нас є віртуальна пам'ять, що приховує ці деталі від нас. 976 01:07:52,000 --> 01:07:58,000 >> Але зараз можна припустити, що якщо у вас є програма, 977 01:07:58,000 --> 01:08:02,000 Наприклад, коли ви почати показ шифр Цезаря програму 978 01:08:02,000 --> 01:08:06,000 Я переключитися назад на мій IPad дійсно швидко- 979 01:08:06,000 --> 01:08:12,000 , Що на самому початку вашої програми, якщо у вас, скажімо, 980 01:08:12,000 --> 01:08:15,000 4 гігабайтами оперативної пам'яті на вашому ноутбуці, 981 01:08:15,000 --> 01:08:21,000 Ви отримаєте відкладіть цей шматок, і ми називаємо це RAM. 982 01:08:21,000 --> 01:08:25,000 І він починається в місце, де ми збираємося називати 0, 983 01:08:25,000 --> 01:08:30,000 і закінчується в місці, яке ми будемо називати 4 гігабайт. 984 01:08:30,000 --> 01:08:37,000 Я дійсно не можу писати. Людина, який зламав. 985 01:08:37,000 --> 01:08:40,000 Коли ваша програма виконує 986 01:08:40,000 --> 01:08:44,000 Операційна система вирізує оперативної пам'яті, 987 01:08:44,000 --> 01:08:51,000 і він визначає різні сегменти для різних частин програми для житла 988 01:08:51,000 --> 01:08:58,000 Тут, внизу цієї області є своєрідною нічийною землі. 989 01:08:58,000 --> 01:09:02,000 Коли ви йдете трохи далі тут 990 01:09:02,000 --> 01:09:05,000 у вас є насправді місце, де 991 01:09:05,000 --> 01:09:09,000 Код для життя програми. 992 01:09:09,000 --> 01:09:13,000 Це фактично двійковий код, виконуваний файл, що насправді завантажується в пам'ять 993 01:09:13,000 --> 01:09:17,000 коли ви запустите програму, і вона живе в сегменті коду. 994 01:09:17,000 --> 01:09:22,000 І, як ваша програма виконується процесором дивиться на цей сегмент коду 995 01:09:22,000 --> 01:09:24,000 щоб з'ясувати, що є така інструкція? 996 01:09:24,000 --> 01:09:27,000 Яка наступна рядок коду мені потрібно виконати? 997 01:09:27,000 --> 01:09:31,000 >> Там також сегмент даних, і це, де ці константи рядків 998 01:09:31,000 --> 01:09:34,000 отримати зберігається, що ви використовуєте. 999 01:09:34,000 --> 01:09:42,000 А потім далі вгору там це місце називається купою. 1000 01:09:42,000 --> 01:09:46,000 Ми доступу до пам'яті там за допомогою Танос, 1001 01:09:46,000 --> 01:09:49,000 , А потім на самому верху вашої програми 1002 01:09:49,000 --> 01:09:52,000 є стек, 1003 01:09:52,000 --> 01:09:57,000 а от де ми грали протягом більшої частини початку. 1004 01:09:57,000 --> 01:09:59,000 Це не в масштабі або нічого. 1005 01:09:59,000 --> 01:10:03,000 Багато це дуже залежить від машини, 1006 01:10:03,000 --> 01:10:10,000 залежить від операційної системи, але це відносно, як всі отримують розбитий вгору. 1007 01:10:10,000 --> 01:10:17,000 Коли ви запустите програму, і ви оголосите змінну х 1008 01:10:17,000 --> 01:10:27,000 Я збираюся зробити ще одну коробку вниз, і це буде оперативної пам'яті. 1009 01:10:27,000 --> 01:10:29,000 І я збираюся подивитися. 1010 01:10:29,000 --> 01:10:34,000 Ми будемо малювати зубчасті лінії, щоб вказати, це всього лише невелика частина оперативної пам'яті 1011 01:10:34,000 --> 01:10:38,000 і не всі про нього, як ми малюємо на самому верху. 1012 01:10:38,000 --> 01:10:43,000 >> Якщо я заявляю, ціла змінна називається х, 1013 01:10:43,000 --> 01:10:49,000 те, що я насправді отримати відображення 1014 01:10:49,000 --> 01:10:54,000 , Які зберігаються в таблиці символів моєї програми 1015 01:10:54,000 --> 01:11:00,000 , Який з'єднує ім'я х в цю область пам'яті, яку я намалювала 1016 01:11:00,000 --> 01:11:03,000 прямо тут, між вертикальними смугами. 1017 01:11:03,000 --> 01:11:08,000 Якщо у мене є рядок коду, в моїй програмі, яка говорить х = 7 1018 01:11:08,000 --> 01:11:15,000 Процесор знає "О, добре, я знаю, що х життя в цьому місці в пам'яті." 1019 01:11:15,000 --> 01:11:25,000 "Я збираюся піти далі і написати 7 існує". 1020 01:11:25,000 --> 01:11:28,000 Як він знає, що розташування це в пам'яті? 1021 01:11:28,000 --> 01:11:30,000 Добре, що все це робиться під час компіляції. 1022 01:11:30,000 --> 01:11:34,000 Компілятор піклується про розподіл де кожна із змінних збираєтеся піти 1023 01:11:34,000 --> 01:11:40,000 і створення спеціальних відображення або, швидше, поєднання точок 1024 01:11:40,000 --> 01:11:43,000 між символом і куди він іде, ім'я змінної 1025 01:11:43,000 --> 01:11:46,000 і де він буде жити в пам'яті. 1026 01:11:46,000 --> 01:11:50,000 Але виявляється, що ми дійсно можемо отримати до нього доступ в наших програмах. 1027 01:11:50,000 --> 01:11:55,000 Це стає важливим, коли ми починаємо говорити про деяких структур даних, 1028 01:11:55,000 --> 01:11:58,000 яка є концепція, що ми збираємося ввести пізніше. 1029 01:11:58,000 --> 01:12:09,000 >> Але зараз, як ви можете знати, що я можу створити покажчик на це місце, х. 1030 01:12:09,000 --> 01:12:12,000 Наприклад, я можу створити змінну-покажчик. 1031 01:12:12,000 --> 01:12:16,000 Коли ми створюємо покажчик змінної ми використовуємо позначення зірки. 1032 01:12:16,000 --> 01:12:21,000 У цьому випадку, це говорить, що я збираюся створити покажчик на Int. 1033 01:12:21,000 --> 01:12:24,000 Це типу як і будь-який інший. 1034 01:12:24,000 --> 01:12:27,000 Ми даємо йому змінної, як у, 1035 01:12:27,000 --> 01:12:32,000 , А потім покласти його рівним адресу, за адресою. 1036 01:12:32,000 --> 01:12:38,000 У цьому випадку, ми можемо встановити у указують на х 1037 01:12:38,000 --> 01:12:43,000 приймаючи адресою х, які ми робимо з цим амперсанд, 1038 01:12:43,000 --> 01:12:55,000 , А потім покласти у указують на це. 1039 01:12:55,000 --> 01:12:59,000 Те, що це по суті робить це, якщо ми подивимося на нашу RAM 1040 01:12:59,000 --> 01:13:02,000 це створює окрему змінну. 1041 01:13:02,000 --> 01:13:04,000 Це буде називати його у, 1042 01:13:04,000 --> 01:13:06,000 і коли цей рядок коду виконується 1043 01:13:06,000 --> 01:13:13,000 це насправді збирається створити невеликий покажчик, який ми зазвичай використовують, як стріла, 1044 01:13:13,000 --> 01:13:15,000 і він встановлює у указують на х. 1045 01:13:15,000 --> 01:13:17,000 Так. 1046 01:13:17,000 --> 01:13:19,000 [Студент] Якщо х це вже покажчик, ви б просто зробити 1047 01:13:19,000 --> 01:13:22,000 Int * у = х, замість того, амперсанд? 1048 01:13:22,000 --> 01:13:24,000 Так. 1049 01:13:24,000 --> 01:13:27,000 Якщо х це вже покажчик, то ви можете встановити 2 покажчиків дорівнюють один одному, 1050 01:13:27,000 --> 01:13:30,000 У цьому випадку у не буде вказувати на х, 1051 01:13:30,000 --> 01:13:34,000 але це буде вказувати на будь х вказує. 1052 01:13:34,000 --> 01:13:37,000 На жаль, ми поза часом. 1053 01:13:37,000 --> 01:13:44,000 >> Що я можу сказати на даний момент, ми можемо поговорити про це в автономному режимі, 1054 01:13:44,000 --> 01:13:49,000 Але я б сказав, почати працювати через цю проблему, № 14. 1055 01:13:49,000 --> 01:13:53,000 Ви можете побачити там вже трохи заповнений для вас тут. 1056 01:13:53,000 --> 01:13:57,000 Ви можете бачити, що, коли ми заявляємо, 2 покажчиків, Int * х * й в, 1057 01:13:57,000 --> 01:14:01,000 і зауважимо, що вказує * Поруч із змінною було те, що було зроблено в минулому році. 1058 01:14:01,000 --> 01:14:05,000 Виявляється, що це схоже на те, що ми робимо в цьому році. 1059 01:14:05,000 --> 01:14:11,000 Це не має значення, де ви пишете *, коли ви оголошенні покажчика. 1060 01:14:11,000 --> 01:14:17,000 Але ми написали * поряд із типом 1061 01:14:17,000 --> 01:14:24,000 тому що це робить його дуже ясно, що ви оголошенні змінної-покажчика. 1062 01:14:24,000 --> 01:14:27,000 Ви можете бачити, що оголошення 2 покажчика дає нам 2 коробки. 1063 01:14:27,000 --> 01:14:31,000 Ось коли ми встановлюємо х одно Танос 1064 01:14:31,000 --> 01:14:34,000 що це говорить у скасуванні пам'яті в купі. 1065 01:14:34,000 --> 01:14:41,000 Цей маленький ящик прямо тут, це коло, знаходиться в купу. 1066 01:14:41,000 --> 01:14:43,000 X вказує на це. 1067 01:14:43,000 --> 01:14:46,000 Зауважимо, що у ще не вказуючи ні до чого. 1068 01:14:46,000 --> 01:14:50,000 Щоб отримати пам'ять для зберігання числа 42 в х 1069 01:14:50,000 --> 01:14:55,000 ми будемо використовувати те, що позначення? 1070 01:14:55,000 --> 01:14:59,000 [Студент] * х = 42. 1071 01:14:59,000 --> 01:15:01,000 Точно, * х = 42. 1072 01:15:01,000 --> 01:15:06,000 Це означає, слідуйте за стрілкою і кинути 42 в там. 1073 01:15:06,000 --> 01:15:09,000 Тут, де ми встановлюємо у і х ми у вказуючи на х. 1074 01:15:09,000 --> 01:15:13,000 Знову ж таки, це просто подобається те, що Кевін сказав, де ми встановлюємо у одно х. 1075 01:15:13,000 --> 01:15:15,000 Y не вказує на х. 1076 01:15:15,000 --> 01:15:19,000 Швидше, це вказує на те, що X вказує на, а також. 1077 01:15:19,000 --> 01:15:24,000 >> І, нарешті, в останньому вікні є 2 можливих речей, які ми могли б зробити. 1078 01:15:24,000 --> 01:15:28,000 Один з них ми могли б сказати * х = 13. 1079 01:15:28,000 --> 01:15:33,000 Інша справа, ми могли б сказати, Алекс, ви знаєте, що ми могли б зробити тут? 1080 01:15:33,000 --> 01:15:37,000 Можна сказати, * х = 13 або- 1081 01:15:37,000 --> 01:15:41,000 [Студент] Можна сказати, що Int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Якщо це були зараховані до Int змінна, яку ми могли б зробити це. 1083 01:15:45,000 --> 01:15:49,000 Ми могли б також сказати, у * = 13, тому що вони обидва вказують на те ж місце, 1084 01:15:49,000 --> 01:15:51,000 , Щоб ми могли використовувати або змінну туди добратися. 1085 01:15:51,000 --> 01:15:56,000 Так. >> [Студент] Що би це виглядало, якщо ми просто скажемо Int х 13? 1086 01:15:56,000 --> 01:16:00,000 Це було б оголосити нову змінну х, яка не буде працювати. 1087 01:16:00,000 --> 01:16:04,000 Ми повинні були б зіткнення, тому що ми оголосили х, щоб бути дороговказом тут. 1088 01:16:04,000 --> 01:16:10,000 [Студент] Якщо ми просто повинні були це заява сама по собі те, що це буде виглядати з точки зору кола? 1089 01:16:10,000 --> 01:16:14,000 Якби ми мали х = 13, то ми повинні були б коробку, і замість того, щоб стрілка 1090 01:16:14,000 --> 01:16:16,000 виходячи з вікна ми зробити це, як тільки 13. 1091 01:16:16,000 --> 01:16:19,000 [Студент] в поле. Добре. 1092 01:16:19,000 --> 01:16:24,000 >> Спасибі за увагу і удачі на Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]