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