1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Валктхроугх] [Проблем Сет 3] 2 00:00:03,000 --> 00:00:05,000 [Замила Чен] [Универзитет Харвард] 3 00:00:05,000 --> 00:00:08,000 [Ово је ЦС50.] [ЦС50.ТВ] 4 00:00:08,000 --> 00:00:10,000 У реду, поздрављамо све до Валктхроугх 3. 5 00:00:10,000 --> 00:00:12,000 Псет 3 је заиста забавно један. 6 00:00:12,000 --> 00:00:14,000 То је нова на ЦС50 зове Сцрамбле, 7 00:00:14,000 --> 00:00:18,000 тако да ако сте икада играли Сцрамбле или сличан Боард Гаме Боггле 8 00:00:18,000 --> 00:00:20,000 суштини то је игра у којој имате мрежу слова, 9 00:00:20,000 --> 00:00:24,000 и у време додељено морате да пронађете што више 10 00:00:24,000 --> 00:00:28,000 2-писмо или више речи које постоје на плочи, 11 00:00:28,000 --> 00:00:32,000 па постоје одређена правила, као што можете да користите само једно слово 12 00:00:32,000 --> 00:00:37,000 у мрежу, један блок у мрежи једном, и не можете да се вратите на њу. 13 00:00:37,000 --> 00:00:42,000 Можете само да конструише слова повезујући заједно суседних слова, 14 00:00:42,000 --> 00:00:50,000 тако да ће бити врло забавно псет, па хајде да погледамо наше алаткама. 15 00:00:50,000 --> 00:00:53,000 >> Опет, апарат је још увек ажурира, тако да се уверите 16 00:00:53,000 --> 00:00:56,000 сваки пут када уђете у апарат на десно отворите прозор терминала 17 00:00:56,000 --> 00:01:02,000 и терминалима уради команду судо иум-и упдате. 18 00:01:02,000 --> 00:01:04,000 Ово је важно и ако желите да будете у стању да 19 00:01:04,000 --> 00:01:06,000  покрените решења особље, које смо дефинитивно препоручујемо. 20 00:01:06,000 --> 00:01:09,000 Понекад је добро када сте завршили свој код 21 00:01:09,000 --> 00:01:12,000 да га тестирамо против особља решење, уверите се да је све 22 00:01:12,000 --> 00:01:15,000 уђете у кадрова решење, што долази тамо, 23 00:01:15,000 --> 00:01:18,000 Иста ствар се дешава са вашим кодом. 24 00:01:18,000 --> 00:01:20,000 У реду, па се уверите да ажурирате свој уређај. 25 00:01:20,000 --> 00:01:23,000 Сада, такође, пошто имамо посла са мрежом у овом случају 26 00:01:23,000 --> 00:01:26,000 ми смо заправо ће бити делвинг 2-димензионалним низовима. 27 00:01:26,000 --> 00:01:28,000 Смо Бавили смо се са 1-димензионалним низовима, 28 00:01:28,000 --> 00:01:31,000 али сада ћемо их проширити тако да имају 29 00:01:31,000 --> 00:01:35,000 више редова, као и више колона. 30 00:01:35,000 --> 00:01:38,000 Тада ћемо дефинитивно користити функције у овој псет, 31 00:01:38,000 --> 00:01:43,000 суштини позива функцију, пошаљете неке параметре из 32 00:01:43,000 --> 00:01:46,000 и онда да се вратим на повратну вредност. 33 00:01:46,000 --> 00:01:50,000 И у сцрамбле нећемо вас да се заиста направи целу ствар од нуле, 34 00:01:50,000 --> 00:01:53,000 него, ми заправо ти дају нешто што се зове дистрибуција код, 35 00:01:53,000 --> 00:01:56,000 па код функције које смо већ написани такву излаже 36 00:01:56,000 --> 00:02:00,000 скелет од псет, као и реализује неке оштрије ствари 37 00:02:00,000 --> 00:02:04,000 да дефинитивно ћете моћи да прочитате и разумете 38 00:02:04,000 --> 00:02:10,000 али не треба да сасвим успети још. 39 00:02:10,000 --> 00:02:15,000 >> Да бисте брзо понављања током 1-димензионалним низовима. 40 00:02:15,000 --> 00:02:18,000 Низови су структуре података које имају више вредности истог типа, 41 00:02:18,000 --> 00:02:21,000 и као подсетник, ови низови нула-индексирани, 42 00:02:21,000 --> 00:02:26,000 тако да је већина од вас су вероватно упознати са низом као што је ово. 43 00:02:26,000 --> 00:02:29,000 Ако бисмо желели инт низ дужине 3, 44 00:02:29,000 --> 00:02:32,000 онда бисмо могли да покрене имајући инт вредности 45 00:02:32,000 --> 00:02:35,000 а онда квадратних заграда означава дужину од тога, 46 00:02:35,000 --> 00:02:39,000 и онда бисмо доделили вредности специфичних елемената у том низу. 47 00:02:39,000 --> 00:02:44,000 Овде имамо инт низ од првог индекса у индексу 0, 2, 48 00:02:44,000 --> 00:02:47,000 Индекс 1 је 4, индекс 2 је 6. 49 00:02:47,000 --> 00:02:52,000 Реци ми смо желели већу лепезу и да имају више вредности. 50 00:02:52,000 --> 00:02:55,000 Онда бисмо могли имати 2Д низ. 51 00:02:55,000 --> 00:02:58,000 Дакле, ово је веома сличан нашем 1-димензионални низ. 52 00:02:58,000 --> 00:03:02,000 То је индексирано 0, тако да значи да је прва колона 53 00:03:02,000 --> 00:03:04,000 је индексиран на 0. 54 00:03:04,000 --> 00:03:07,000 Следећи је на 1, а онда следећи је на 2, 55 00:03:07,000 --> 00:03:11,000 и онда имамо сличан редове, па ви видите да када смо 56 00:03:11,000 --> 00:03:15,000 објављујемо нашу низ такође, баш као и пре-ми указао на величину низа. 57 00:03:15,000 --> 00:03:18,000 Ми сличан такође указују на величину у којој је први носач 58 00:03:18,000 --> 00:03:21,000 показује колико редова имате, а друга указује 59 00:03:21,000 --> 00:03:25,000 колико колона. 60 00:03:25,000 --> 00:03:30,000 >> Добро, у овом псет ћете желети да буду у стању да 61 00:03:30,000 --> 00:03:35,000 прелазили преко 2Д низа, моћи да приступите сваки елемент 62 00:03:35,000 --> 00:03:39,000 У овом низу 2Д, тако суштински желите да достигне 63 00:03:39,000 --> 00:03:42,000 све могуће комбинације редова и колона вредности. 64 00:03:42,000 --> 00:03:47,000 Желимо да се постигне ред 0 у колони 1, 2, и 3.. 65 00:03:47,000 --> 00:03:54,000 Желимо да се постигне ред 1 у колони 0, 1 и 2. 66 00:03:54,000 --> 00:03:58,000 Морамо да имамо неку врсту структуре која нам омогућава да 67 00:03:58,000 --> 00:04:02,000 прелазили преко свих редова и свих комбинација 68 00:04:02,000 --> 00:04:08,000 колона унутар тога. 69 00:04:08,000 --> 00:04:10,000 Овде имам 2Д инт низ. 70 00:04:10,000 --> 00:04:14,000 Она има 3 реда и 3 колоне, 71 00:04:14,000 --> 00:04:19,000 па ово је брз начин да се 72 00:04:19,000 --> 00:04:22,000 наћи читав низ 2Д. 73 00:04:22,000 --> 00:04:25,000 Кажем први ред ће имати 2, 4, и 6, 74 00:04:25,000 --> 00:04:30,000 некако сличан претходном примеру у овом слајду. 75 00:04:30,000 --> 00:04:35,000 Онда ћу имати 2. ред бити 3, 6, 9, 76 00:04:35,000 --> 00:04:39,000 а онда је 3. ред је 4, 8, 12. 77 00:04:39,000 --> 00:04:43,000 Ми имамо нашу 2Д низ, 78 00:04:43,000 --> 00:04:46,000 а ми знамо да то изгледа овако. 79 00:04:46,000 --> 00:04:52,000 Имамо 2, 4, 6, 80 00:04:52,000 --> 00:04:55,000 3, 6, 9, 81 00:04:55,000 --> 00:05:02,000 4, 8, 12. 82 00:05:02,000 --> 00:05:05,000 Сада, ако додамо у индексима, 83 00:05:05,000 --> 00:05:08,000 ово би било ред 0. 84 00:05:08,000 --> 00:05:11,000 То би било ред 1. 85 00:05:11,000 --> 00:05:13,000 То би било ред 2. 86 00:05:13,000 --> 00:05:19,000 Слично имамо колону 0, 87 00:05:19,000 --> 00:05:23,000 колона 1 и 2 колона. 88 00:05:23,000 --> 00:05:25,000 Да. 89 00:05:25,000 --> 00:05:28,000 [Мушко] Који су три колоне, а који је ред? 90 00:05:28,000 --> 00:05:31,000 Колоне су ови моји, 91 00:05:31,000 --> 00:05:34,000 па колоне су ови они. 92 00:05:34,000 --> 00:05:37,000 Ово је колона 0, а ово је колона 1. 93 00:05:37,000 --> 00:05:39,000 Ово је колона 2. 94 00:05:39,000 --> 00:05:44,000 [Мушко] Колико у декларацији инт до стола [3] [3] 95 00:05:44,000 --> 00:05:50,000 Када сте проглашења 2Д низ затим први број у угластим заградама 96 00:05:50,000 --> 00:05:53,000 Биће колико редова имате, 97 00:05:53,000 --> 00:05:57,000 а онда је друга ће бити колико колона. 98 00:05:57,000 --> 00:06:01,000 >> Супер, тако да желимо неку врсту структуре, 99 00:06:01,000 --> 00:06:06,000 нека врста петље која ће нам дати сваку могућу комбинацију. 100 00:06:06,000 --> 00:06:13,000 Реци ми почети рекавши-ок, да бисте приступили било у овом реду, 101 00:06:13,000 --> 00:06:18,000 хајде да погледамо овај ред за сада. 102 00:06:18,000 --> 00:06:20,000 То су редови овде. 103 00:06:20,000 --> 00:06:23,000 Ми знамо да је наш индекс ред ће бити 0, 104 00:06:23,000 --> 00:06:27,000 али да приступите овај елемент је на 0. реда и 0. колони, 105 00:06:27,000 --> 00:06:34,000 па онда би му приступили индексом [0] [0]. 106 00:06:34,000 --> 00:06:38,000 Онда овај један, на сличан начин, и даље је на првом реду, 107 00:06:38,000 --> 00:06:43,000 али је на другој колони, па смо приступили да је [0] [1]. 108 00:06:43,000 --> 00:06:48,000 Тада последњи ће бити [0] [2]. 109 00:06:48,000 --> 00:06:52,000 Кад год смо у одређеном низу ћемо желети да 110 00:06:52,000 --> 00:07:00,000 прелазили преко свих могућих колона вредности. 111 00:07:00,000 --> 00:07:06,000 Почећемо са фор петљи 112 00:07:06,000 --> 00:07:15,000 који почиње од 0, и иде на дужину колико редова имамо. 113 00:07:15,000 --> 00:07:26,000 Ово је бициклистички кроз сваки ред. 114 00:07:26,000 --> 00:07:29,000 Онда оно што ми желимо да урадимо је да у оквиру тога, 115 00:07:29,000 --> 00:07:33,000 кад год смо у одређеном реду желимо да циклусу кроз све расположиве колона, 116 00:07:33,000 --> 00:07:36,000 па онда ћемо имати још једну петљу. 117 00:07:36,000 --> 00:07:38,000 Назовимо то ј. 118 00:07:38,000 --> 00:07:42,000 И, Ј и К су веома честе редова индексирања петље променљиве, 119 00:07:42,000 --> 00:07:48,000 тако да можете да користите ово ако желите. 120 00:07:48,000 --> 00:07:52,000 Такође, покушајте да избегнете тада ако се ове варијабле најчешће користи у петљи 121 00:07:52,000 --> 00:07:56,000 избегавајте да користите их као као променљиве имена за друге ствари у вашем коду 122 00:07:56,000 --> 00:08:04,000 Управо зато што је уобичајена конвенција за коришћење И, Ј, К унутар петље или индекса. 123 00:08:04,000 --> 00:08:11,000 Ок, онда овде имамо за петљу која пролази кроз све редове. 124 00:08:11,000 --> 00:08:14,000 Онда сваки пут да је на другој заредом 125 00:08:14,000 --> 00:08:17,000 ћемо прелазили преко свих различитих колона. 126 00:08:17,000 --> 00:08:23,000 На овај начин ми заправо можемо доћи до сваког могућег комбинацији 127 00:08:23,000 --> 00:08:27,000 од 0, 1 и 2 са 0, 1 и 2. 128 00:08:27,000 --> 00:08:29,000 То има смисла? 129 00:08:29,000 --> 00:08:32,000 На овај начин смо у могућности да приступите преко сваку вредност. 130 00:08:32,000 --> 00:08:36,000 Сада, могли смо одлучили да урадите колоне најпре као добро. 131 00:08:36,000 --> 00:08:39,000 То стварно није битно колико сте прелазили преко 132 00:08:39,000 --> 00:08:41,000 све колоне и све редове. 133 00:08:41,000 --> 00:08:44,000 >> Сада хајде да урадимо нешто са тим вредностима. 134 00:08:44,000 --> 00:08:48,000 Рецимо отисак. 135 00:08:48,000 --> 00:08:55,000 Сада идемо штампају своје бројеве 136 00:08:55,000 --> 00:09:02,000 и онда променљива на том месту је, да ће то бити вредност н табели. 137 00:09:02,000 --> 00:09:07,000 Сада специфичан ред индекс бих се, јер смо то прелазили преко наших редова, 138 00:09:07,000 --> 00:09:14,000 и онда ј да вршите итерацију кроз наше колоне. 139 00:09:14,000 --> 00:09:24,000 Сада ћемо да направимо 2Д. 140 00:09:24,000 --> 00:09:29,000 Сада када смо покренули 2Д се исписује све вредности 141 00:09:29,000 --> 00:09:32,000 у редоследу који смо горе навели, 142 00:09:32,000 --> 00:09:35,000 па видиш да иде преко свих редова први, 143 00:09:35,000 --> 00:09:38,000 тако да је у реду 0, а онда је штампа све вредности у том реду 144 00:09:38,000 --> 00:09:40,000 и онда се наставља. 145 00:09:40,000 --> 00:09:43,000 То је пример начин на који би прелазили преко 146 00:09:43,000 --> 00:09:52,000 и спроводи акције на вредности у 2Д низа. 147 00:09:52,000 --> 00:09:59,000 Одлично, сад, шта ћемо видети у дистрибутивном кода су многе функције, 148 00:09:59,000 --> 00:10:01,000 па неке од ових функција ће бити Булова функција 149 00:10:01,000 --> 00:10:03,000 где вратити Булов израз за тебе. 150 00:10:03,000 --> 00:10:07,000 >> Неки ће бити целих бројева, на пример, и тако у суштини да се 151 00:10:07,000 --> 00:10:10,000 Преглед функционише мало основи функције имају 152 00:10:10,000 --> 00:10:15,000 Повратна вредност, име, са којим користите да позовете програм, 153 00:10:15,000 --> 00:10:21,000 и онда они могу имати било који број параметара. 154 00:10:21,000 --> 00:10:25,000 У суштини када позовете функцију у наредне функције, 155 00:10:25,000 --> 00:10:27,000 суштини као ви сада кажете хоћу да изврши ову функцију, 156 00:10:27,000 --> 00:10:31,000 морате проћи у одређеним вредностима, тако да у овом случају наша функција трла 157 00:10:31,000 --> 00:10:36,000 ће морати да узме 2 целе бројеве, ау оквиру те функције онда 158 00:10:36,000 --> 00:10:40,000 то би могли да им приступите, погледајте на њих као кии. 159 00:10:40,000 --> 00:10:44,000 Сличан пример је ниже функције 160 00:10:44,000 --> 00:10:48,000 које сте можда користили у крипто програма, 161 00:10:48,000 --> 00:10:51,000 и тако у суштини те функције су већ написан за тебе, 162 00:10:51,000 --> 00:10:57,000 али у зависности од њиховог повратка типа можете да их користите у оквиру функције. 163 00:10:57,000 --> 00:11:00,000 Рецимо да имате боолеан функцију зове ФОО. 164 00:11:00,000 --> 00:11:04,000 Затим можете да користите зато што знате да ће представљати Боолеан. 165 00:11:04,000 --> 00:11:06,000 У суштини када га позовете, он ће се вратити назад Боолеан, 166 00:11:06,000 --> 00:11:11,000 тако да се може третирати као да ће то представљати Боолеан. 167 00:11:11,000 --> 00:11:13,000 У вашем стању можете једноставно рећи 168 00:11:13,000 --> 00:11:17,000 ако фоо, а онда пролазе у својим потребне параметре, 169 00:11:17,000 --> 00:11:20,000 5 и 9, на пример, 2 цели бројеви, 170 00:11:20,000 --> 00:11:22,000 онда знате да ће се то вратити истинито или лажно, 171 00:11:22,000 --> 00:11:26,000 па онда можете искористити као стањем. 172 00:11:26,000 --> 00:11:30,000 Слично би се могло рећи да је такође фоо (5, 9) == труе 173 00:11:30,000 --> 00:11:33,000 или == лажне или нешто слично, 174 00:11:33,000 --> 00:11:38,000 али то је мало непотребно јер саме функције 175 00:11:38,000 --> 00:11:41,000 Већ вредности или да тачно или нетачно. 176 00:11:41,000 --> 00:11:47,000 Ми ћемо имати то на уму када видимо неке примере у дистрибутивном коду. 177 00:11:47,000 --> 00:11:50,000 >> Добро, вратимо се јагме након имамо 2Д низове 178 00:11:50,000 --> 00:11:53,000 и разумевање функције под нашим појаса. 179 00:11:53,000 --> 00:11:59,000 У суштини сцрамбле ћеш имати мрежу слова, 180 00:11:59,000 --> 00:12:02,000 и онда ћеш да помогне спровођење програма 181 00:12:02,000 --> 00:12:06,000 при чему корисник може унос различитих писама која су видите на мрежи, 182 00:12:06,000 --> 00:12:10,000 па то такође значи да и ви цете морати да скрене одбор игру. 183 00:12:10,000 --> 00:12:13,000 Тада корисник ће бити уношења одређене речи, 184 00:12:13,000 --> 00:12:17,000 али морате да проверите да ли се те речи важе у речнику, 185 00:12:17,000 --> 00:12:23,000 или Б, без обзира да ли су они заиста постоје у одбору, може се наћи у одбору. 186 00:12:23,000 --> 00:12:28,000 Затим у дистрибутивном коду ћемо ићи преко тога у секунди. 187 00:12:28,000 --> 00:12:31,000 Видећете шта је већ направљен за вас, 188 00:12:31,000 --> 00:12:35,000 а затим у оквиру датог структури расподеле кода додали функције. 189 00:12:35,000 --> 00:12:37,000 Постоје одређене функције које су остали празни. 190 00:12:37,000 --> 00:12:40,000 Постоје одређене функције које сте управо да додате. 191 00:12:40,000 --> 00:12:43,000 Одређена функција коју ћемо да радимо са је реми, 192 00:12:43,000 --> 00:12:45,000 тако да морате да спроведе функцију драв, 193 00:12:45,000 --> 00:12:47,000 заправо цртеж све слова на табли. 194 00:12:47,000 --> 00:12:51,000 Ти ћеш морати да спроведе проналажење функцију којој морате да проверите 195 00:12:51,000 --> 00:12:55,000 да ли је стринг који је корисник уноси се важећи реч, 196 00:12:55,000 --> 00:12:59,000 па онда као што сам раније поменуо, који укључује да ли је то у речнику или не 197 00:12:59,000 --> 00:13:03,000 као и да ли је то валидан игра потез. 198 00:13:03,000 --> 00:13:06,000 Онда ћеш да спроведе Сцрамбле 199 00:13:06,000 --> 00:13:11,000 где је у игри, ако је корисник, на пример, има проблема са проналажењем било коју реч 200 00:13:11,000 --> 00:13:16,000 па ако укуцате "Сцрамбле" у линији 201 00:13:16,000 --> 00:13:19,000 онда игра одбор заправо ротира за 90 °, 202 00:13:19,000 --> 00:13:24,000 имајући иста слова али само окреће за 90 ° у смеру казаљке. 203 00:13:24,000 --> 00:13:27,000 И на крају ћемо да се баве случај и осетљивости, 204 00:13:27,000 --> 00:13:35,000 суштини, када све речи у речнику укључен у дистрибуцију кода 205 00:13:35,000 --> 00:13:38,000 Сви чувају као велико, али желимо да омогућавају кориснику, на пример, 206 00:13:38,000 --> 00:13:41,000 ако уђу у мешавини мала и велика 207 00:13:41,000 --> 00:13:45,000 или само мала слова онда ако је реч важи 208 00:13:45,000 --> 00:13:50,000 онда они треба да буду у могућности да добију поене за то, као добро. 209 00:13:50,000 --> 00:13:56,000 >> Ок, дистрибуцију кода, то би могло бити мало тешко да се кроз на први поглед. 210 00:13:56,000 --> 00:13:59,000 Можда нећете желети да прочитате све то и само да разјаснимо да 211 00:13:59,000 --> 00:14:03,000 писања свој програм, али немојте га прочитате једном, 212 00:14:03,000 --> 00:14:06,000 прочитајте га два пута, прочитао три пута, чита га изнова и изнова 213 00:14:06,000 --> 00:14:09,000 тако да имате добар осећај и да се осећају пријатно заиста 214 00:14:09,000 --> 00:14:13,000 са шифром, иако нисте написали ове функције се, 215 00:14:13,000 --> 00:14:17,000 да врста знају шта раде и можете да очекујете 216 00:14:17,000 --> 00:14:22,000 начин на који би могли да комуницирају са функцијама које ћете испунити. 217 00:14:22,000 --> 00:14:25,000 Без даљег одлагања, идемо у ствари уђу у ову дистрибуцију кода, 218 00:14:25,000 --> 00:14:32,000 а ја ћу ти помоћи ви смисла за то. 219 00:14:32,000 --> 00:14:36,000 Већ сам скинуо дистрибуцију кода. 220 00:14:36,000 --> 00:14:38,000 То можете да урадите ово. 221 00:14:38,000 --> 00:14:41,000 Има инструкције у спец где морате да направите сопствену директоријум за псет 3, 222 00:14:41,000 --> 00:14:46,000 и онда ако извршава команду која се налази у спец 223 00:14:46,000 --> 00:14:49,000 онда ћете моћи да преузмете речи фајл, 224 00:14:49,000 --> 00:14:56,000 који садржи у основи речника датотеку, ако само погледамо то брзо. 225 00:14:56,000 --> 00:15:03,000 То, у суштини садржи читаву листу речи које ће бити наш речник. 226 00:15:03,000 --> 00:15:05,000 >> Ок, кренимо на врху. 227 00:15:05,000 --> 00:15:11,000 Такође, овде ћете приметити да добро стил ове дистрибуције кода 228 00:15:11,000 --> 00:15:14,000 је у нашу корист, јер можемо да видимо коментаре 229 00:15:14,000 --> 00:15:20,000 да објасни како је код се користи. 230 00:15:20,000 --> 00:15:22,000 Ми имамо ово, укључујући и наше библиотеке. 231 00:15:22,000 --> 00:15:25,000 Приметимо да је овде # смо укључују <тиме.х>, 232 00:15:25,000 --> 00:15:29,000 и тако да библиотека нам дозвољава да пратите времена, јер 233 00:15:29,000 --> 00:15:33,000 у верати морате да унесете у суштини онолико речи као могуће 234 00:15:33,000 --> 00:15:36,000 у датом временском оквиру. 235 00:15:36,000 --> 00:15:38,000 Овде имамо неке променљиве. 236 00:15:38,000 --> 00:15:42,000 Трајање утакмице смо поставили да буде 30 секунди. 237 00:15:42,000 --> 00:15:45,000 Ми кажемо да је димензија мреже, то је квадрат грид- 238 00:15:45,000 --> 00:15:47,000 ће бити 4 к 4. 239 00:15:47,000 --> 00:15:54,000 Ми кажемо да постоје речи, број речи у речнику, 240 00:15:54,000 --> 00:16:01,000 било где само да има највише 29 слова. 241 00:16:01,000 --> 00:16:03,000 Онда овде је фајл који се зове дневник. 242 00:16:03,000 --> 00:16:07,000 У суштини ћемо се аутоматизацијом неких резултата из кода, 243 00:16:07,000 --> 00:16:11,000 па покушајте да не мења ништа са дневнику, јер ћемо се бавити са тим. 244 00:16:11,000 --> 00:16:14,000 Не морате да разумем да је ипак, 245 00:16:14,000 --> 00:16:19,000 али само покушајте да се не мења ништа са дневнику. 246 00:16:19,000 --> 00:16:25,000 Приметимо да овде ова променљива мрежа, која је 2Д низ знакова, 247 00:16:25,000 --> 00:16:27,000 је проглашен ван нашег главног функције, 248 00:16:27,000 --> 00:16:29,000 па то је оно што ми зовемо Глобална променљива. 249 00:16:29,000 --> 00:16:31,000 Зато имамо посла са игром овде, 250 00:16:31,000 --> 00:16:34,000 ако се сећате скроз назад на гребање 251 00:16:34,000 --> 00:16:36,000 када смо имали нешто као резултат, на пример, 252 00:16:36,000 --> 00:16:39,000 када смо се бавили игром, која је морала да буде доступан 253 00:16:39,000 --> 00:16:43,000 много различитих сценарија, тако да на сличан начин, имамо ову променљиву 254 00:16:43,000 --> 00:16:48,000 који треба да буду доступни много функција у нашем програму, 255 00:16:48,000 --> 00:16:52,000 па овде је мрежа 2-димензионални низ који ће чувати 256 00:16:52,000 --> 00:16:55,000 слова у журби игри. 257 00:16:55,000 --> 00:16:59,000 Касније ћемо видети касније коришћење овог, 258 00:16:59,000 --> 00:17:03,000 али онда имамо и 2Д низ боолеанс називају марака, 259 00:17:03,000 --> 00:17:07,000 па у суштини, када идемо у проверу да ли је реч 260 00:17:07,000 --> 00:17:12,000 важи или не морамо да знамо да ли смо посетили одређену блок, 261 00:17:12,000 --> 00:17:15,000 посетио извесну писмо, па онда знаци у основи ће се 262 00:17:15,000 --> 00:17:20,000 садрже било тачно или нетачно на датом индексу, 263 00:17:20,000 --> 00:17:23,000 тако да ће да нас обавестите да ли смо били тамо раније, 264 00:17:23,000 --> 00:17:26,000 да ли смо посетили то писмо током нашег одређеном контролом, 265 00:17:26,000 --> 00:17:30,000 и тако марака, као што ћете видети касније, 266 00:17:30,000 --> 00:17:41,000 ће у суштини тачно одсликавају мрежу. 267 00:17:41,000 --> 00:17:46,000 >> Овде смо одлучили да желимо наш сопствени тип података. 268 00:17:46,000 --> 00:17:48,000 Нисмо били задовољни само стринг. 269 00:17:48,000 --> 00:17:51,000 Ми смо заправо желели нешто што се зове реч, 270 00:17:51,000 --> 00:17:55,000 па овде имамо ту типедеф струцт, 271 00:17:55,000 --> 00:17:58,000 и онда у њему има Боолеан зове пронађен, 272 00:17:58,000 --> 00:18:01,000 па да ли је ова реч је пронађен или не. 273 00:18:01,000 --> 00:18:04,000 Онда има низ знакова, 274 00:18:04,000 --> 00:18:10,000 суштини стварна реч коју је. 275 00:18:10,000 --> 00:18:14,000 Сада, реч је стварна нови тип података које смо направили, 276 00:18:14,000 --> 00:18:17,000 тако да можемо да имамо низ речи, на пример, 277 00:18:17,000 --> 00:18:23,000 или можемо направити нову реч и има више инстанци њих. 278 00:18:23,000 --> 00:18:26,000 Али имамо само један речник, па зато имамо само 279 00:18:26,000 --> 00:18:29,000 струцт позвати речник насупрот типедеф струцт. 280 00:18:29,000 --> 00:18:34,000 Струцт има цео са величином речника 281 00:18:34,000 --> 00:18:37,000 као и низ речи, и опет, 282 00:18:37,000 --> 00:18:41,000 ми користимо ове глобалне променљиве речи, што је изнад дефинисане, 283 00:18:41,000 --> 00:18:46,000 да је број речи које је заправо у нашем речнику. 284 00:18:46,000 --> 00:18:49,000 Овде имамо читаву листу прототипова, функција прототипова, 285 00:18:49,000 --> 00:18:52,000 суштини говорећи, у реду, сада можете очекивати да имамо 286 00:18:52,000 --> 00:18:55,000 Све ове функције касније у програму. 287 00:18:55,000 --> 00:18:57,000 Ја ћу имати функцију воид зове јасан, 288 00:18:57,000 --> 00:19:00,000 Булова функција зове пописивање који узима у 289 00:19:00,000 --> 00:19:05,000 стринг и затим 2 целих бројева, и тако даље, тако да видите ово овде. 290 00:19:05,000 --> 00:19:09,000 Такође, лепа особина у гедит је да дуж стране овде 291 00:19:09,000 --> 00:19:14,000 ако се уверите да сте изабрали ово овде функције картицу, 292 00:19:14,000 --> 00:19:18,000 изворни код картица, онда је то заправо ће вам показати све функције 293 00:19:18,000 --> 00:19:20,000 да ли имате у свом програму. 294 00:19:20,000 --> 00:19:24,000 То ће вам показати неколико ствари које можете да користите. 295 00:19:24,000 --> 00:19:29,000 На пример, овде има да сте дефинисали нови тип података под називом реч 296 00:19:29,000 --> 00:19:33,000 и онда су неке глобалне променљиве које имате. 297 00:19:33,000 --> 00:19:37,000 Али ово функционише картица је веома корисно, јер можете да кликнете и назад 298 00:19:37,000 --> 00:19:42,000 и скочили на одређене тачке у свом програму. 299 00:19:42,000 --> 00:19:48,000 >> Добро, ми смо у главној функцији сада. 300 00:19:48,000 --> 00:19:52,000 Када корисник уђе у команду, 301 00:19:52,000 --> 00:19:55,000 суштини они могу рећи / јагме., 302 00:19:55,000 --> 00:19:59,000 или могу ући у великом броју након тога у суштини указују 303 00:19:59,000 --> 00:20:02,000 које одбор желе да играју. 304 00:20:02,000 --> 00:20:05,000 Обично кад унесете само једним аргументом командне линије 305 00:20:05,000 --> 00:20:09,000 онда само ће да вам случајно плочу, али каже за отклањање грешака сврхе 306 00:20:09,000 --> 00:20:12,000 желите да се уверите да сте управо проверите исту плочу изнова и изнова 307 00:20:12,000 --> 00:20:15,000 шта онда можете да урадите је да само да кажем ./сцрамбле1, на пример, 308 00:20:15,000 --> 00:20:19,000 и увек ће вам дати исту плочу. 309 00:20:19,000 --> 00:20:21,000 Ево то је обезбеђивање одговарајуће коришћење, 310 00:20:21,000 --> 00:20:26,000 па ако корисник унесе у више од 2 аргумената командне линије, 311 00:20:26,000 --> 00:20:29,000 онда ће их упутити како да правилно користите програм 312 00:20:29,000 --> 00:20:34,000 и онда изашли. 313 00:20:34,000 --> 00:20:38,000 Ево ако аргц је 2, што значи да ако је корисник уноси број 314 00:20:38,000 --> 00:20:42,000 специфичне речи које желе да онда користите 315 00:20:42,000 --> 00:20:47,000 суштини када је програм касније чини случајно плочу 316 00:20:47,000 --> 00:20:51,000 онда смо у суштини су јој дају семе, нешто као да приморава 317 00:20:51,000 --> 00:20:57,000 да користе одређену вредност. 318 00:20:57,000 --> 00:21:02,000 Онда овде учитати наше речи датотеку. 319 00:21:02,000 --> 00:21:06,000 У суштини, ако се не може отворити речник, ако нешто крене наопако, 320 00:21:06,000 --> 00:21:08,000 онда ће се вратити 1. 321 00:21:08,000 --> 00:21:11,000 Ми покрене мрежу. Ми ћемо размотрити ту функцију касније. 322 00:21:11,000 --> 00:21:13,000 Ми смо поставили резултат на 0. 323 00:21:13,000 --> 00:21:18,000 Рачунамо када игра ће се завршити, 324 00:21:18,000 --> 00:21:20,000 тако да је то 30 секунди, као што смо поставили. 325 00:21:20,000 --> 00:21:27,000 Онда, опет, је лог фајл, који не треба да се мењају. 326 00:21:27,000 --> 00:21:33,000 >> Ево месо програма где имамо док (истина) петље, 327 00:21:33,000 --> 00:21:36,000 па приметити да ако имате само неко вријеме (истина) петља по себи 328 00:21:36,000 --> 00:21:39,000 онда ће само наставити да извршава све што је у њеној телу, 329 00:21:39,000 --> 00:21:42,000 али као што ћете видети касније, ми заправо имамо паузу 330 00:21:42,000 --> 00:21:46,000 тако да смо заиста дозволити да-ми имамо неки начин то је заправо избијања 331 00:21:46,000 --> 00:21:50,000 функције, а не извршава заувек. 332 00:21:50,000 --> 00:21:52,000 Прво што се дешава је на екрану ће се јасно 333 00:21:52,000 --> 00:21:59,000 тако да можете да нацртате нову плочу, а онда ће имати функцију која се зове реми. 334 00:21:59,000 --> 00:22:03,000 Опет, то ће га пријавити, па у суштини сваки пут да иде кроз ову петљу 335 00:22:03,000 --> 00:22:06,000 ће пријавити резултат за вас. 336 00:22:06,000 --> 00:22:09,000 Проверите да ли треба да игра да буде крај, 337 00:22:09,000 --> 00:22:12,000 да ли си ван времена или не, а затим извештај колико времена вам је преостало 338 00:22:12,000 --> 00:22:15,000 ако игра је још увек у игри. 339 00:22:15,000 --> 00:22:19,000 Онда овде имамо одзив за реч, 340 00:22:19,000 --> 00:22:21,000 и онда имамо ГетСтринг функцију, 341 00:22:21,000 --> 00:22:26,000 тако да је то, где корисник заправо улази реч за вас. 342 00:22:26,000 --> 00:22:31,000 Тада у суштини, ако су стварно сте унели реч, ако није нула, 343 00:22:31,000 --> 00:22:38,000 онда програм ће га пријавити. 344 00:22:38,000 --> 00:22:41,000 Затим желите да проверите да ли је потребно да се верати мрежу, 345 00:22:41,000 --> 00:22:44,000 Дакле, у основи ако уђу у командном јагма, реч Сцрамбле, 346 00:22:44,000 --> 00:22:48,000 онда ће да се ротира за 90 °. 347 00:22:48,000 --> 00:22:51,000 Онда иначе ако није реч јагма 348 00:22:51,000 --> 00:22:57,000 онда шта желите да урадите је да ћете желети да потражите речи. 349 00:22:57,000 --> 00:22:59,000 Је (финд (реч) је истина Идемо на тој функцији касније.. 350 00:22:59,000 --> 00:23:02,000 А онда ћете желети да погледате горе, тако да у основи је на мрежу, 351 00:23:02,000 --> 00:23:04,000 и да ли је у речнику? 352 00:23:04,000 --> 00:23:08,000 А ако је то случај, онда ће повећати свој резултат од броја слова 353 00:23:08,000 --> 00:23:12,000 да је реч. 354 00:23:12,000 --> 00:23:16,000 То је наш главни задатак тамо. 355 00:23:16,000 --> 00:23:19,000 >> Ово овде је у суштини као шифру за бекство, 356 00:23:19,000 --> 00:23:21,000 тако да не морате да бринете о томе баш тако много, 357 00:23:21,000 --> 00:23:25,000 али у суштини кад год позовете јасно да ће јасно терминала 358 00:23:25,000 --> 00:23:32,000 и померају курсор леђа и врсту брисање год да је писано раније. 359 00:23:32,000 --> 00:23:40,000 Немојмо ићи да пузи сасвим још. 360 00:23:40,000 --> 00:23:43,000 Уместо тога, ми ћемо идите доле и видети овде функцију драв, 361 00:23:43,000 --> 00:23:45,000 који је твој ТОДО посао. 362 00:23:45,000 --> 00:23:48,000 У суштини морате да штампате мрежу у свом садашњем стању, 363 00:23:48,000 --> 00:23:52,000 тако да смо већ збринут заправо иницијализацију мреже, 364 00:23:52,000 --> 00:23:56,000 и тако да не морате да бринете о којима писма стави у мрежу 365 00:23:56,000 --> 00:24:01,000 или нешто слично, али у функцији извлачења ћеш желети да 366 00:24:01,000 --> 00:24:04,000 одштампају све што је у мрежу. 367 00:24:04,000 --> 00:24:07,000 Онда овде имамо боолеан функцију зове пронађу, 368 00:24:07,000 --> 00:24:10,000 које смо горе видели у основну функцију. 369 00:24:10,000 --> 00:24:17,000 Ако је реч је пронађен и такође је погледао горе у речнику, 370 00:24:17,000 --> 00:24:21,000 ако обе су враћена тачно, онда би се повећати резултат. 371 00:24:21,000 --> 00:24:26,000 Овде је наћи функцију, где је потребно у речи као ниске, 372 00:24:26,000 --> 00:24:32,000 и то мора да буде 2 или више знакова, 373 00:24:32,000 --> 00:24:36,000 а онда шта то ради је она тражи мрежу за ту реч. 374 00:24:36,000 --> 00:24:41,000 Овде видимо пример итератинг над сваким елементом у мрежу 375 00:24:41,000 --> 00:24:47,000 где су прелазили преко реда, а затим у оквиру тог прелазили преко колоне. 376 00:24:47,000 --> 00:24:50,000 Овде се сећате марака 2Д низ који у основи складишти било тачно или нетачно 377 00:24:50,000 --> 00:24:52,000 да ли смо били у том писму већ. 378 00:24:52,000 --> 00:24:58,000 У суштини, то ресетује све марака, јер ми само бавимо марака 379 00:24:58,000 --> 00:25:01,000 сваки пут кад смо проверу одређену реч. 380 00:25:01,000 --> 00:25:04,000 Онда овде једном смо ресетовали све трагове 381 00:25:04,000 --> 00:25:08,000 заправо тражи реч, па да траже реч 382 00:25:08,000 --> 00:25:13,000 то је где смо користили пописивања функцију, па хајде да се вратимо до пузе 383 00:25:13,000 --> 00:25:16,000 и да га погледам. 384 00:25:16,000 --> 00:25:20,000 Шта пописивања не узима је у низу зове писма 385 00:25:20,000 --> 00:25:27,000 као основи к и и, који је почетно 386 00:25:27,000 --> 00:25:33,000 где корисник је рекао реч. 387 00:25:33,000 --> 00:25:38,000 У суштини, он проверава да ли је к <0 или> димензију 388 00:25:38,000 --> 00:25:41,000 у основи то значи да је тај индекс у ствари не постоји у нашој игри, 389 00:25:41,000 --> 00:25:43,000 па онда то даје лажна. 390 00:25:43,000 --> 00:25:47,000 Ако сте већ посетили специфичан писмо 391 00:25:47,000 --> 00:26:02,000 онда ће се вратити фалсе, као и због тога што је правило у Сцрамбле 392 00:26:02,000 --> 00:26:11,000 је да када имате 393 00:26:11,000 --> 00:26:14,000 писмо овде, на пример, 394 00:26:14,000 --> 00:26:20,000 можете придружити писмо иде горе или као дијагонално ово, 395 00:26:20,000 --> 00:26:24,000 Дакле, у основи ваш следећи писмо може бити у било ком од ових суседних блокова, 396 00:26:24,000 --> 00:26:31,000 али оно што не можете да урадите, на пример, идите на ово писмо 397 00:26:31,000 --> 00:26:37,000 и врати на, тако да само једном користити свако слово. 398 00:26:37,000 --> 00:26:42,000 Онда има смисла да се овде знаци да ако смо били тамо раније, 399 00:26:42,000 --> 00:26:47,000 ако марака постављено тачно, онда то није валидан реч. 400 00:26:47,000 --> 00:26:49,000 >> Онда оно што ради је то проверава. 401 00:26:49,000 --> 00:26:53,000 Он каже да идем да проверим да ли је у овом конкретном месту 402 00:26:53,000 --> 00:26:55,000 писмо које желимо тамо. 403 00:26:55,000 --> 00:26:57,000 Ако није, враћа фалсе. 404 00:26:57,000 --> 00:27:02,000 Будући да је већ проверио ту блокаду, онда ће поставити знак 405 00:27:02,000 --> 00:27:06,000 у том одређеном тренутку, као истина. 406 00:27:06,000 --> 00:27:09,000 Сада проверава да ли смо у основи наставља 407 00:27:09,000 --> 00:27:13,000 То значи да ћемо тражити следећем писму 408 00:27:13,000 --> 00:27:18,000 у речи да корисник покушава да поднесе. 409 00:27:18,000 --> 00:27:20,000 Овде се сећате назад правила. 410 00:27:20,000 --> 00:27:24,000 Ви покушавате да провери све суседне вредности, 411 00:27:24,000 --> 00:27:28,000 оне изнад, испод, лево и десно, као и дијагонале, 412 00:27:28,000 --> 00:27:32,000 па слично када смо мислили итератинг преко 2Д низове 413 00:27:32,000 --> 00:27:35,000 где смо желели да прелазили преко сваке могуће и проверите 414 00:27:35,000 --> 00:27:41,000 свака могућа пермутација између редова индекса и колона индекси 415 00:27:41,000 --> 00:27:43,000 Овде желимо да проверите сваку могућу комбинацију, 416 00:27:43,000 --> 00:27:49,000 ако је са леве стране писма, непосредно изнад, или са десне стране. 417 00:27:49,000 --> 00:27:56,000 Овде видимо да је ова петља проверава са леве 418 00:27:56,000 --> 00:27:58,000 када сам је -1. 419 00:27:58,000 --> 00:28:04,000 Када је на 0 проверава у истој колони која је писмо у, 420 00:28:04,000 --> 00:28:08,000 па ако сам је 1, што је његова коначна вредност, онда проверава са десне стране, 421 00:28:08,000 --> 00:28:10,000 и онда то није довољно, зар не? 422 00:28:10,000 --> 00:28:13,000 Ми треба да проверите све вертикалних вредности, 423 00:28:13,000 --> 00:28:19,000 па онда овде имамо петљу да буде проверава да ли је испод иде 424 00:28:19,000 --> 00:28:22,000 на истом нивоу или изнад, па онда комбинација која 425 00:28:22,000 --> 00:28:28,000 ће приступити сваки суседно блок А. 426 00:28:28,000 --> 00:28:38,000 Међутим, она такође проверава блок овде у, 427 00:28:38,000 --> 00:28:44,000 па онда желите да се уверите да не проверите да је један. 428 00:28:44,000 --> 00:28:51,000 А сада, да се провери да ли заиста претходни речи важе или не 429 00:28:51,000 --> 00:28:56,000 онда ми желимо да урадимо исти процес за остатак речи 430 00:28:56,000 --> 00:29:00,000 Забрана оног који смо већ урадили, па онда овде је претеча функција. 431 00:29:00,000 --> 00:29:03,000 То се зове, а ми ћемо се у то касније мало, 432 00:29:03,000 --> 00:29:13,000 али је спроводи исти поступак за све наредне жице. 433 00:29:13,000 --> 00:29:16,000 Разговарали смо о нађемо функцију. 434 00:29:16,000 --> 00:29:18,000 Ми разумемо шта ради. 435 00:29:18,000 --> 00:29:23,000 То је у основи је провера да ли то реч коју је корисник дао 436 00:29:23,000 --> 00:29:27,000 заиста постоји на плочи и да ли је то цењена потез. 437 00:29:27,000 --> 00:29:29,000 Овде имамо Инитиализе функцију. 438 00:29:29,000 --> 00:29:33,000 Приметимо да је празнина, тако да неће бити повратка нам ништа, 439 00:29:33,000 --> 00:29:36,000 али то је само ће да се нешто ради за нас. 440 00:29:36,000 --> 00:29:39,000 >> Овде офф Википедији постоји фреквенција 441 00:29:39,000 --> 00:29:42,000 за свако писмо о писму на основу тога колико често 442 00:29:42,000 --> 00:29:45,000 га користити на енглеском језику. 443 00:29:45,000 --> 00:29:50,000 Видиш да е је, на пример, један од најпопуларнијих писама користе. 444 00:29:50,000 --> 00:29:52,000 Желимо да попуните мрежу. 445 00:29:52,000 --> 00:29:55,000 Шта ова функција ради је попунити мрежу са словима 446 00:29:55,000 --> 00:30:06,000 врста у односу на њихову фреквенцију у овом низу. 447 00:30:06,000 --> 00:30:11,000 Дакле, ово је овде користи овај језик 448 00:30:11,000 --> 00:30:14,000 рекавши величина фреквенција, 449 00:30:14,000 --> 00:30:16,000 То је врста само у специфичним случајевима. 450 00:30:16,000 --> 00:30:21,000 Ми смо заправо може користити величину фреквенција, тако да када заправо желе да 451 00:30:21,000 --> 00:30:26,000 наћи дужину низа вероватно неће користити величину 452 00:30:26,000 --> 00:30:29,000 већ само помоћу низа дужину. 453 00:30:29,000 --> 00:30:33,000 Можете питати своје поздрав да разговарам са вама мало више о томе, 454 00:30:33,000 --> 00:30:40,000 али само знам да је ово синтакса овде је више од посебног случаја. 455 00:30:40,000 --> 00:30:49,000 Сада, за сваки елемент у мрежу 456 00:30:49,000 --> 00:30:53,000 желимо да направимо писмо, а то ће бити псеудослучајних, 457 00:30:53,000 --> 00:30:55,000 тако случајан, али не сасвим. 458 00:30:55,000 --> 00:30:58,000 У суштини оно што ово ради је да смо поставили нови двојника 459 00:30:58,000 --> 00:31:01,000 са случајним вредност између 0 и 1. 460 00:31:01,000 --> 00:31:03,000 На основу тога ћемо мапирати да, 461 00:31:03,000 --> 00:31:08,000 тако рећи да је д подешен на 0,6, на пример. 462 00:31:08,000 --> 00:31:13,000 Онда, ако је д 60% у 463 00:31:13,000 --> 00:31:16,000 онда ћемо да погледамо све од писама и наћи 464 00:31:16,000 --> 00:31:19,000 у односу на то колико често су навикли 465 00:31:19,000 --> 00:31:21,000 Шта је 60% за 466 00:31:21,000 --> 00:31:24,000 Ово није само 60% од алфабета, већ 467 00:31:24,000 --> 00:31:28,000 заузима оволико простора, а онда је б заузима оволико, 468 00:31:28,000 --> 00:31:31,000 а затим е, на пример, ће потрајати оволико. 469 00:31:31,000 --> 00:31:35,000 На основу релативне дужине или фреквенције 470 00:31:35,000 --> 00:31:39,000 од ових писама ћемо карта која насумичну вредност 471 00:31:39,000 --> 00:31:43,000 између 0 и 1 на одређено слово. 472 00:31:43,000 --> 00:31:45,000 То је оно што овај код ради овде, 473 00:31:45,000 --> 00:31:52,000 и онда овде је к као смене, где заједно 474 00:31:52,000 --> 00:31:59,000 у писму желимо да будемо, па смо поставили знак у мрежи 475 00:31:59,000 --> 00:32:04,000 да буде + к. 476 00:32:04,000 --> 00:32:07,000 >> Приметимо да је још размишљате да похлепни 477 00:32:07,000 --> 00:32:11,000 ми смо морали да користимо округли функцију да се баве покретним зарезом непрецизности овде, 478 00:32:11,000 --> 00:32:14,000 па слично смо морали да узму у обзир да понекад 479 00:32:14,000 --> 00:32:18,000 пловци нису баш оно што ми намеравамо да буду, 480 00:32:18,000 --> 00:32:27,000 па смо желели да направимо улов за то. 481 00:32:27,000 --> 00:32:32,000 Онда идемо у фајлу И / О суштини читање и писање у фајлове, 482 00:32:32,000 --> 00:32:34,000 које ћете добити у касније, али не сасвим још, 483 00:32:34,000 --> 00:32:39,000 па у суштини то отвара речника фајл, стоји оно што је у њему, 484 00:32:39,000 --> 00:32:42,000 а затим га поставља у низу. 485 00:32:42,000 --> 00:32:46,000 Приметите да смо га поставили у струцт да смо декларисане, речник, струцт 486 00:32:46,000 --> 00:32:53,000 па речник има низ зове речи повезане са њом, 487 00:32:53,000 --> 00:33:00,000 па шта ради каже речник, речи у овом индексу 488 00:33:00,000 --> 00:33:04,000 су таква и таква вредност. 489 00:33:04,000 --> 00:33:10,000 Онда смо скоро завршили са дистрибутивном кодом. 490 00:33:10,000 --> 00:33:13,000 Ми коначно имати проналажење функцију, где имате коментаре 491 00:33:13,000 --> 00:33:18,000 упућујући вас на шта да код треба да ради. 492 00:33:18,000 --> 00:33:21,000 Лоокуп ће потражити неку реч у речнику 493 00:33:21,000 --> 00:33:24,000 и докле год те речи већ није пронађен 494 00:33:24,000 --> 00:33:29,000 онда заставе је као пронађено тако да корисник може да га користи поново 495 00:33:29,000 --> 00:33:33,000 али такође враћа истиниту размишљање назад на главну функцију поново, 496 00:33:33,000 --> 00:33:37,000 враћа труе, тако каже да је реч може се бодовати. 497 00:33:37,000 --> 00:33:39,000 >> И онда на крају имате Сцрамбле функцију, 498 00:33:39,000 --> 00:33:42,000 што је још један неважећи функција, јер је нешто 499 00:33:42,000 --> 00:33:45,000 али не враћа ништа, па шта јагме функција ће радити 500 00:33:45,000 --> 00:33:51,000 се ротира решетку 90 ° у смеру казаљке. 501 00:33:51,000 --> 00:33:55,000 Знам да можда био мало груб, али је важно да урадите. 502 00:33:55,000 --> 00:33:57,000 Гледај ме пролази кроз дистрибутивну кода, 503 00:33:57,000 --> 00:33:59,000 али добро, покушајте да прође кроз њу себе. 504 00:33:59,000 --> 00:34:04,000 Оно што сам желео да урадим је мапирати га разумети 505 00:34:04,000 --> 00:34:15,000 шта овај програм са свим овим функцијама заправо ради? 506 00:34:15,000 --> 00:34:18,000 Ако бих да прођем кроз дистрибутивну код опет, 507 00:34:18,000 --> 00:34:21,000 сад да ја некако имам осећај шта се дешава онда бих рекао 508 00:34:21,000 --> 00:34:28,000 почнемо са нашим главним функције, 509 00:34:28,000 --> 00:34:36,000 и онда мислим да је прва ствар коју она ради је она позива оптерећење, 510 00:34:36,000 --> 00:34:40,000 па главна позиви оптерећење, али оптерећење је празнина функција, 511 00:34:40,000 --> 00:34:45,000 па онда шта да урадим да указују на то да је управо стављање једног стрелицу 512 00:34:45,000 --> 00:34:48,000 указујући да се учита, јер главни зове. 513 00:34:48,000 --> 00:34:56,000 Следећа ствар је покрене. 514 00:34:56,000 --> 00:34:59,000 Главни позиви покрене, 515 00:34:59,000 --> 00:35:02,000 а затим, ако се осврнемо на нашу главну функцију 516 00:35:02,000 --> 00:35:06,000 Мислим да ту следећу ствар да ради, 517 00:35:06,000 --> 00:35:09,000 Овде постоје тона различитих ствари које главни зове, 518 00:35:09,000 --> 00:35:13,000 али сада сам само ја фокусирајући се на већини великих оне 519 00:35:13,000 --> 00:35:18,000 релевантне кода, тако да нисам укључујући да сам ја или слично. 520 00:35:18,000 --> 00:35:25,000 Онда следећа ствар да ли је то то брише, 521 00:35:25,000 --> 00:35:29,000 и онда је нерешено, 522 00:35:29,000 --> 00:35:36,000 па знам да је реми је нешто што ћемо да радимо. 523 00:35:36,000 --> 00:35:38,000 То је реми функција. 524 00:35:38,000 --> 00:35:44,000 Касније смо видели да је следећи је бит- 525 00:35:44,000 --> 00:35:57,000 па онда имамо јагму. 526 00:35:57,000 --> 00:36:02,000 А онда смо пронашли, тако да вам је још једна функција. 527 00:36:02,000 --> 00:36:07,000 Видимо да је је-ако се врати сећате да је Булова функција, 528 00:36:07,000 --> 00:36:09,000 тако да је заправо ће да се врати назад у нешто нама. 529 00:36:09,000 --> 00:36:18,000 Онда овде показују да је имамо наћи, 530 00:36:18,000 --> 00:36:29,000 и онда смо и проналажење. 531 00:36:29,000 --> 00:36:32,000 Али онда се сетим да је било је ово пописивање функција 532 00:36:32,000 --> 00:36:35,030 да не изгледа као да су позвани у главном, 533 00:36:35,030 --> 00:36:39,000 , што значи да су неке друге функције зове пузање, 534 00:36:39,000 --> 00:36:41,000 а ако тражите назад кроз дистрибутивну кода 535 00:36:41,000 --> 00:36:46,000 видиш да пронађете овде је онај који користи пузање, 536 00:36:46,000 --> 00:36:52,000 па онда наћи онда и повезује да пузи, 537 00:36:52,000 --> 00:36:55,090 што је Боолеан вредност, која се враћа нешто, 538 00:36:55,090 --> 00:36:58,000 па сам додао још једну ствар, а онда пошто је пописивање рекурзивни 539 00:36:58,000 --> 00:37:03,000 такође петљи назад на себи. 540 00:37:03,000 --> 00:37:07,000 >> Онда, ако си овде сам извући слику о томе шта је наш програм изгледа, 541 00:37:07,000 --> 00:37:10,000 па разумевање односа између појединих функција, 542 00:37:10,000 --> 00:37:14,000 и враћам се да видети редослед игре 543 00:37:14,000 --> 00:37:24,000 и логика како игра програм ће наставити. 544 00:37:24,000 --> 00:37:27,000 Прочитао смо дистрибуцију кода. 545 00:37:27,000 --> 00:37:29,000 Прва функција коју ћемо желети да спроведу, 546 00:37:29,000 --> 00:37:32,000 или једна од функција које желите да оствари цртају, 547 00:37:32,000 --> 00:37:37,000 па овде заправо имају мало слободе са овим. 548 00:37:37,000 --> 00:37:43,000 Ако погледамо особља решење- 549 00:37:43,000 --> 00:37:54,000 Идем да отворим прозор терминала, у ствари, 550 00:37:54,000 --> 00:38:05,000 псет3/сцрамбле. 551 00:38:05,000 --> 00:38:09,000 Сцратцх то. Мислим да треба да ажурирате свој уређај. 552 00:38:09,000 --> 00:38:12,000 Ако играте са особљем раствором Сцрамбле- 553 00:38:12,000 --> 00:38:14,000 упутства су у спец за то- 554 00:38:14,000 --> 00:38:20,000 онда можете да видите како они штампају игру одбора, 555 00:38:20,000 --> 00:38:23,000 али у суштини оно што они раде је да су ставили размаке између сваког знака, 556 00:38:23,000 --> 00:38:27,000 али имате мало слободу уз то, тако да ако желите да одштампате линије, на пример, 557 00:38:27,000 --> 00:38:31,000 између њих онда можете то да урадите. 558 00:38:31,000 --> 00:38:38,000 Хоћеш да мислим назад како смо прелазили преко свих елемената 2Д низу, 559 00:38:38,000 --> 00:38:41,000 а ви ћете желети да одштампате оне, проверите да ли имате петљу 560 00:38:41,000 --> 00:38:49,000 и имају своје функције штампања такве да сте штампање у правом редоследу. 561 00:38:49,000 --> 00:38:54,000 Ако желите да ваш итерациону петљу до када прелазили преко њега 562 00:38:54,000 --> 00:39:03,000 а ви користите индекси уверите се да сте штампање у правом редоследу. 563 00:39:03,000 --> 00:39:06,000 >> Суочавање са 2Д низовима у почетку може бити мало збуњујуће, 564 00:39:06,000 --> 00:39:12,000 па ево на овом слајду сам направио табелу која вам показује 565 00:39:12,000 --> 00:39:16,000 за сваку дату месту у 2Д низу шта индекси су, 566 00:39:16,000 --> 00:39:19,000 тако да ако желите да погледате назад ово за брзу проверу 567 00:39:19,000 --> 00:39:22,000 или за референце, или нешто слично онда можете користити ово. 568 00:39:22,000 --> 00:39:30,000 Колоне су у плавој боји, а редови су у црвеном. 569 00:39:30,000 --> 00:39:34,000 Тхе проналажење функција је двострук. 570 00:39:34,000 --> 00:39:37,000 Проналажење и то је Булова функција-ће нам рећи 571 00:39:37,000 --> 00:39:43,000 тачно или нетачно да ли корисник подноси реч 572 00:39:43,000 --> 00:39:46,000 може се прихватити као валидан вредност, 573 00:39:46,000 --> 00:39:51,000 и тако реч јагма важи само 574 00:39:51,000 --> 00:39:56,000 ако је пронађен у речнику и ако се то заиста налази у одбору, 575 00:39:56,000 --> 00:40:02,000 па сетите да проналажење морате да остваре ово сами, 576 00:40:02,000 --> 00:40:10,000 па желите да проверите обе ствари, 577 00:40:10,000 --> 00:40:16,000 да ли је реч заправо у речнику и да ли је то већ пронађен. 578 00:40:16,000 --> 00:40:18,940 Подсетимо назад на глобалном променљивом речнику, 579 00:40:18,940 --> 00:40:24,160 што је струцт да смо направили да у основи има инт зове величину 580 00:40:24,160 --> 00:40:27,290 повезан са њим, као и низ речи, 581 00:40:27,290 --> 00:40:32,030 где је реч је нови тип података. 582 00:40:32,030 --> 00:40:36,910 Тако да приступите, на пример, величина речника или речи арраи 583 00:40:36,910 --> 00:40:39,840 шта онда можете да урадите је да само пишем 'дицтионари.сизе' 584 00:40:39,840 --> 00:40:42,580 сличан начин на који сте управо би користили било који други променљиву. 585 00:40:42,580 --> 00:40:48,550 Дакле, ако дицтионари.сизе представља величину речника, 586 00:40:48,550 --> 00:40:51,450 Слично томе, дицтионари.вордс представља низ. 587 00:40:51,450 --> 00:40:54,690 Дакле, ако сте желели да приступите одређену реч у оквиру речника, 588 00:40:54,690 --> 00:40:59,020 онда би морао да додате индекс 589 00:40:59,020 --> 00:41:03,130 зато што би морао да каже 'дицтионари.вордс у индексу и' 590 00:41:03,130 --> 00:41:06,050 а затим урадите нешто на основу тога. 591 00:41:06,050 --> 00:41:09,950 Дакле, знајући да је речник има одређену величину у вези са њом, 592 00:41:09,950 --> 00:41:13,720 као и низ речи, да провери да ли нешто није у речнику, 593 00:41:13,720 --> 00:41:16,870 онда би морао да интерате преко речник 594 00:41:16,870 --> 00:41:20,610 да провери да ли је реч пронађена. 595 00:41:20,610 --> 00:41:25,720 >> Сада, ако помислим на предавање, када смо разговарали о различитим начинима да трагају за стварима, 596 00:41:25,720 --> 00:41:30,690 онда се сетим да је линеарно претраживање вероватно није увек најбољи начин да иде. 597 00:41:30,690 --> 00:41:36,600 Али дефинитивно је један од начина да се тражи нешто. 598 00:41:36,600 --> 00:41:39,540 Понекад ћете можда открити да спроведе свој Финд функцију са 599 00:41:39,540 --> 00:41:42,650 линеарно претраживање на први и онда се остатак ваш програм иде. 600 00:41:42,650 --> 00:41:47,480 А онда касније можете вратити и променити начин на који сте потражили преко за реч. 601 00:41:47,480 --> 00:41:52,010 Тако да се бави - у основи знајући да - знају како да приступите 602 00:41:52,010 --> 00:41:55,650 речи низ речника, која се бави посматрање 603 00:41:55,650 --> 00:41:58,190 да ли је реч заправо у речнику или не. 604 00:41:58,190 --> 00:42:06,540 Али онда ми такође треба да се позабави да ли је та реч на табли. 605 00:42:06,540 --> 00:42:08,540 И да ли је то већ пронађен. 606 00:42:08,540 --> 00:42:12,670 Тако смо већ налаз функцију, запамтите. 607 00:42:12,670 --> 00:42:18,310 То показује су, али шта је реч? 608 00:42:18,310 --> 00:42:22,330 Ово није филозофско питање, већ, погледајте типа дефиниција. 609 00:42:22,330 --> 00:42:27,250 Имамо Боолеан називом "нашао", као и низ знакова 610 00:42:27,250 --> 00:42:29,570 који представља ту реч. 611 00:42:29,570 --> 00:42:35,940 Дакле, када се вратите проналажење, ви ћете желети да проверите да ли је реч је пронађен или не. 612 00:42:35,940 --> 00:42:43,040 Сада, знајући да је Булова нашао - нашао је име од боолеан 613 00:42:43,040 --> 00:42:49,660 који је повезан са сваком речју - како онда могу да приступите ту променљиву, 614 00:42:49,660 --> 00:43:01,590 размишљам уназад на то како приступити променљиве у речнику? 615 00:43:01,590 --> 00:43:05,120 Дакле, овде смо имали речник, а онда смо рекли дот сизе, зар не? 616 00:43:05,120 --> 00:43:08,170 Слично томе, када имамо реч и, у том случају, бити опрезан јер 617 00:43:08,170 --> 00:43:13,340 Реч је само било који други тип података, баш као инт или ниска. 618 00:43:13,340 --> 00:43:19,640 Дакле, не можете само рећи 'реч', осим ако је то име тога. 619 00:43:19,640 --> 00:43:24,540 Ти ћеш имати променљиву са именом, а онда када имате то, 620 00:43:24,540 --> 00:43:29,980 кажу да се зове трла, на пример, онда можете рећи 'фоо.фоунд' 621 00:43:29,980 --> 00:43:39,560 и да ће вам вратити боолеан вредност да ли је реч је пронађен или не. 622 00:43:39,560 --> 00:43:46,960 >> Онда следећи део псет је да спроведе јагму, 623 00:43:46,960 --> 00:43:51,630 чиме год корисник улази верати - а то је већ бавио 624 00:43:51,630 --> 00:43:54,280 овде у дистрибутивном коду - ви само треба да спроведе 625 00:43:54,280 --> 00:44:03,170 Функција јагма да вас је већ наложио да ротирате одбор 90 ° у смеру казаљке. 626 00:44:03,170 --> 00:44:07,380 По спецификацијама, упутства кажу да је одбор ротира 90 ° смеру казаљке на сату 627 00:44:07,380 --> 00:44:16,180 тако да је вредност на мрежи [0] [0], затим прелази на мрежу [0] [димензија -1.] 628 00:44:16,180 --> 00:44:38,240 У овом случају, за јагма, наша димензија 4, па би онда 0-0 мапирање 0:3. 629 00:44:38,240 --> 00:44:41,210 Хајде да скрене ово да видим шта је то могло да изгледа. 630 00:44:41,210 --> 00:44:49,620 Нећу да урадим 4 к 4 решетку већ 3 к 3 један. 631 00:44:49,620 --> 00:44:52,470 Хајде да кажемо да је ово инча 2Д низ. 632 00:44:52,470 --> 00:45:02,040 Само ћу само да имају - све у реду. 633 00:45:02,040 --> 00:45:12,110 Зато кажемо да верати ово; желимо да га ротирате 90 ° казаљке на сату. 634 00:45:12,110 --> 00:45:22,320 Знамо да је, као полазну тачку, вредност на 0-0, што је у овом случају је број 0, 635 00:45:22,320 --> 00:45:28,950 ће мапирати у ред 0, онда димензију колоне -1. 636 00:45:28,950 --> 00:45:31,570 И тако, у овом случају, димензија 3. 637 00:45:31,570 --> 00:45:37,400 Дакле 0 би прешао на ред 0, колона 2. 638 00:45:37,400 --> 00:45:41,910 Дакле, имамо број 0 тамо. 639 00:45:41,910 --> 00:45:45,970 У суштини оно што ми радимо је водимо ово, 640 00:45:45,970 --> 00:45:52,840 физички окретањем па онда 2 ће ићи на овом углу, 641 00:45:52,840 --> 00:45:57,620 је 8 би онда идите на овом углу, на 6 овоме. 642 00:45:57,620 --> 00:46:07,840 А онда је остало да изгледа - 643 00:46:07,840 --> 00:46:15,180 Дакле, то је оно што решетка изгледа као када сте успешно га закључан. 644 00:46:15,180 --> 00:46:17,410 Када сте спровођењу Сцрамбле функцију, шта ћете желети да урадите 645 00:46:17,410 --> 00:46:22,520 је види, па како могу да заменим ове вредности? 646 00:46:22,520 --> 00:46:26,090 Да ли постоји нека врста шаблона или нека врста формуле за одређивање 647 00:46:26,090 --> 00:46:29,900 где посебно индекс иде? 648 00:46:29,900 --> 00:46:42,470 На пример, ја могу гледати да видим 3-4-5 овде је ред. 649 00:46:42,470 --> 00:46:44,650 Где другде да видим 3-4-5? 650 00:46:44,650 --> 00:46:49,410 Па ја видим овде. 651 00:46:49,410 --> 00:47:02,360 Слично томе, видим 6-7-8 као низу, али онда је овде колона. 652 00:47:02,360 --> 00:47:07,830 То је образац који ја видим сада, али вероватно постоји неколико других. 653 00:47:07,830 --> 00:47:11,980 На основу тога, мислим на неку врсту обрасца, нека врста начин. 654 00:47:11,980 --> 00:47:20,290 Када смо идентификовали једну, онда ћеш желети да вратите вредности у мрежу. 655 00:47:20,290 --> 00:47:25,480 Дакле, мрежа ће постати 0-0 6, 0-1 мрежа ће постати 3. 656 00:47:25,480 --> 00:47:32,990 Али запамтите да иоу'лл - на пример, ако поново далеко ово право, 657 00:47:32,990 --> 00:47:49,170 кажу да грид 0-2 постане 0 сада, онда изгубити оно 2 био тамо. 658 00:47:49,170 --> 00:47:52,380 Па мислим се, то није довољно да само распоредити одмах. 659 00:47:52,380 --> 00:47:56,420 Вероватно ћете желети да направи привремену копију нешто 660 00:47:56,420 --> 00:48:08,380 пре него што га заправо ставили у на правом месту. 661 00:48:08,380 --> 00:48:11,860 >> Последња ствар је да спроведе неосјетљивост предмета. 662 00:48:11,860 --> 00:48:19,310 Ако погледате уназад, тражи да се на лицу места у спец, где корисник улаза ниске. 663 00:48:19,310 --> 00:48:22,700 Ако се сећате уназад, мислећи назад - ох, избрисани са мапе. 664 00:48:22,700 --> 00:48:30,300 Ако помислим на мапи вашег програма, то је у оквиру главне функције, 665 00:48:30,300 --> 00:48:33,850 па погледајте где сте се баве корисник уноси ниску, 666 00:48:33,850 --> 00:48:38,260 а затим у року тамо, мислим да од алата који сте научили од вашег 667 00:48:38,260 --> 00:48:43,690 крипто псет, псет 2, а затим размишљати о начинима да ћете можда бити у стању да 668 00:48:43,690 --> 00:48:48,640 дозвољавају корисничког уноса, као мешовити случају. 669 00:48:48,640 --> 00:48:53,980 Тако су могли имати мешавину упперцасес и ловерцасес, али да и даље треба да буде валидна. 670 00:48:53,980 --> 00:48:59,770 У речнику, се сетим када смо отворили тај фајл, свака реч је сачувани као све великим словима. 671 00:48:59,770 --> 00:49:05,880 Али ми не желимо да корисник има на улаз великих слова све време. 672 00:49:05,880 --> 00:49:12,150 Може ли ико замислити начин на који бисмо могли бити у стању да омогућавају кориснику, 673 00:49:12,150 --> 00:49:18,320 иако су уноси Сва мала, на пример? Да? 674 00:49:18,320 --> 00:49:20,540 [Студентски] Могли би да горњи? 675 00:49:20,540 --> 00:49:23,470 Да, баш тако. Могли би да горњи. 676 00:49:23,470 --> 00:49:27,670 Дакле, можете да конвертујете све слова у велика, а затим 677 00:49:27,670 --> 00:49:30,950 на тај начин да будете сигурни да ће се то буде копија 678 00:49:30,950 --> 00:49:35,410 ма ког се налази у речнику, ако је то у речнику. 679 00:49:35,410 --> 00:49:40,910 Сјајно. Имамо мало времена. 680 00:49:40,910 --> 00:49:47,530 >> Дакле, неке ствари које можете наићи у овом псет је потреба да се зна 681 00:49:47,530 --> 00:49:52,400 какви су ваши променљиве су у одређеном тренутку. 682 00:49:52,400 --> 00:49:57,000 Јер у спец имамо јасну функцију да у основи 683 00:49:57,000 --> 00:50:05,500 брише све што сте нацртали на табли, брише све, а затим прерађује поврх тога, 684 00:50:05,500 --> 00:50:10,630 можда, док ви пишете псет, заиста не желим да се то догоди. 685 00:50:10,630 --> 00:50:13,810 Зато ћете желети да видите, у реду, када уђем у овој журби, на пример, 686 00:50:13,810 --> 00:50:19,720 једном сам ући у журби, шта то ради и шта је било пре, само за референцу. 687 00:50:19,720 --> 00:50:24,680 Па шта онда ћете можда желети да урадите је да се вратимо на ваш главни функцији 688 00:50:24,680 --> 00:50:31,530 и коментарише се јасно, на пример. 689 00:50:31,530 --> 00:50:34,060 Па онда када покренете програм следећи пут, 690 00:50:34,060 --> 00:50:45,210 ваш програм неће јасно и да ће уместо тога само наставите са штампањем на врху тога. 691 00:50:45,210 --> 00:50:47,210 Постоје неки други начини да дебуг као добро. 692 00:50:47,210 --> 00:50:51,500 Шта можете да урадите је да можете укључити изјаве принт Ф, мислим. 693 00:50:51,500 --> 00:50:57,460 Једна ствар коју сам видео у псетс да сам оцењивао је да су људи укључени принт ф изјаве 694 00:50:57,460 --> 00:51:02,710 да штампају променљивих на неком одређеном тренутку да пратите. 695 00:51:02,710 --> 00:51:06,820 Али само се постарајте да на крају, када завршите писање све штампања ф изјаве 696 00:51:06,820 --> 00:51:11,610 за вас да пратите ствари, да их коментаришу напоље после, 697 00:51:11,610 --> 00:51:15,530 или да их обришете када завршите. 698 00:51:15,530 --> 00:51:21,890 То је још један начин на који можете да урадите нешто, ви само могли да пишете у изјави за штампу ф 699 00:51:21,890 --> 00:51:26,260 негде да је релевантно и види, на основу онога што терминала штампа, 700 00:51:26,260 --> 00:51:28,950 шта та променљива је. 701 00:51:28,950 --> 00:51:33,320 >> Други начин да се то уради, да ћемо ићи у детаље током предавања, 702 00:51:33,320 --> 00:51:36,710 је ГДБ, што је отклањање грешака алата. 703 00:51:36,710 --> 00:51:47,270 У суштини, када га покренете, он ће отићи у свој програм и можете да га унапреди 704 00:51:47,270 --> 00:51:51,500 један корак у исто време уместо вредновања све. 705 00:51:51,500 --> 00:51:54,770 Онда можете да га разбију на мале кораке, а онда на основу путу - 706 00:51:54,770 --> 00:52:00,230 и онда успут штампани ствари и видети шта су вредности. 707 00:52:00,230 --> 00:52:07,830 И то вам помаже да схватим где грешка у коду може бити. 708 00:52:07,830 --> 00:52:12,970 Шта смо могли урадити сада је написати брз функцију, а потом 709 00:52:12,970 --> 00:52:19,780 видимо како би могли да користе ГДБ да видим шта се дешава. 710 00:52:19,780 --> 00:52:23,410 Дакле, хајде да имају маин, а онда шта имамо као параметри за главни? 711 00:52:23,410 --> 00:52:32,690 Имамо инт арг ц, и гудачки арг против 712 00:52:32,690 --> 00:52:44,900 Идем да сачувате ово у објашњења како ГДБ.з. У реду. 713 00:52:44,900 --> 00:52:48,300 Ја ћу имати повратак 0. 714 00:52:48,300 --> 00:52:59,390 Па како о хајде да имамо једноставан за петљу, хајде да имају 12. 715 00:52:59,390 --> 00:53:06,750 Идемо такође имају инт зове бројач, и 716 00:53:06,750 --> 00:53:11,910 можемо почети да на 0. Ок. 717 00:53:11,910 --> 00:53:17,760 Дакле, у свакој тачки у за петље, хајде да кажемо да желимо да повећамо бројач 718 00:53:17,760 --> 00:53:26,980 или помножите га год сам је. 719 00:53:26,980 --> 00:53:39,650 Ово је прилично кратак функција. 720 00:53:39,650 --> 00:53:46,290 Хајде да ГДБ. Ох! А онда - кланг је паметан. 721 00:53:46,290 --> 00:54:03,780 Говори ми да нисам укључују цс50.х. 722 00:54:03,780 --> 00:54:16,160 У реду. Дакле, сада желимо да - 723 00:54:16,160 --> 00:54:32,740 Заправо, жао ми је момци. Ја ћу да преименујете датотеку само зато што је мало збуњујуће. 724 00:54:32,740 --> 00:54:43,630 >> У реду. Дакле, сада оно што ми желимо да урадимо јесте, желимо да покренемо ГДБ. 725 00:54:43,630 --> 00:54:51,750 Рекао сам 'ГДБ отклањање грешака ", тако да ће у суштини бити постављен на фокусирање на овом дебаговање, 726 00:54:51,750 --> 00:54:55,540 отклањање грешака датотеке. 727 00:54:55,540 --> 00:54:57,930 Идем да ставим тачку прекида. 728 00:54:57,930 --> 00:55:01,160 У суштини, програм ће трајати до удара у одређеном Бреакпоинт. 729 00:55:01,160 --> 00:55:04,910 Ја ћу да кажем паузу у основну функцију. 730 00:55:04,910 --> 00:55:12,680 Дакле, сада ћу да покрене дебуггинг, па унутра ГДБ могу покренути код. 731 00:55:12,680 --> 00:55:17,710 То је покренут програм, и иако главни је била једна од првих ствари које смо написали, 732 00:55:17,710 --> 00:55:20,870 Такође имамо Укључи фајлове, ту се ствари дешава већ. 733 00:55:20,870 --> 00:55:25,930 Она има тачку прекида на главни. 734 00:55:25,930 --> 00:55:29,900 Рецимо 'поред', тако да можемо да наставимо даље. 735 00:55:29,900 --> 00:55:33,300 Она каже: "инт бројач = 0". 736 00:55:33,300 --> 00:55:39,310 Ја ћу рећи 'штампа контра ". 737 00:55:39,310 --> 00:55:42,980 Ово је чудно. Дакле, у суштини очекујемо бројачи буде 0, 738 00:55:42,980 --> 00:55:46,680 али ГДБ је један корак назад, тако да кад год ви кажете следеће, 739 00:55:46,680 --> 00:55:50,350 каже Инт контра = 0. То је следећа ствар која ће то извршити. 740 00:55:50,350 --> 00:55:56,160 Затим кликнете - можете рећи следећи поново, или једноставно можете рећи 'н', 741 00:55:56,160 --> 00:56:02,400 и сад ако штампате контра, контра је 0, као што смо очекивали. 742 00:56:02,400 --> 00:56:07,570 У суштини, то ствара своју сопствену врсту променљивих за њега, али шта год да је било - 743 00:56:07,570 --> 00:56:12,120 свиђа овде, то је оно што представља контра. 744 00:56:12,120 --> 00:56:15,180 Зато ћу да кликнете следећи, и ја желим да знам шта сам је. 745 00:56:15,180 --> 00:56:21,270 Ти ћеш да штампам, и је 0, као што смо очекивали. 746 00:56:21,270 --> 00:56:25,630 Нект опет, то је значи да се иде кроз петљу за поново, 747 00:56:25,630 --> 00:56:32,970 па ако сам ја штампају, на пример, видим да смо на - да сам је 1 тренутно. 748 00:56:32,970 --> 00:56:36,150 Дакле, то је начин да, ако сте поставили тачку прекида на одређеном функцијом 749 00:56:36,150 --> 00:56:39,520 и онда наставите даље следећи, а затим проверава шта и је, 750 00:56:39,520 --> 00:56:45,790 ако имате Претпостављам да можда негде нешто не дешава онако како би требало, 751 00:56:45,790 --> 00:56:51,340 а ви сумњате да је можда то је на првом индекс или индекс последњег или тако нешто, 752 00:56:51,340 --> 00:57:00,110 можете да користите ГДБ, имајте на И штампа, да би могли да провере шта те вредности. 753 00:57:00,110 --> 00:57:05,830 Дакле, у ГДБ, јер штампање и поред таквих заједничких аргументи, 754 00:57:05,830 --> 00:57:11,240 заједничке команде, баш као што сам скраћено поред н, 755 00:57:11,240 --> 00:57:22,010 Ја могу само да кажем п контра, то је још увек 0. 756 00:57:22,010 --> 00:57:25,610 Онда сам кликните поред. Желим да одштампате контра поново. 757 00:57:25,610 --> 00:57:26,790 Па, то је и даље 0. 758 00:57:26,790 --> 00:57:39,010 >> А ти си некако питају - па, ја желим да будем контра факторијел функција. 759 00:57:39,010 --> 00:57:43,930 Зашто - само у техникама дебаговање - зашто би то могло бити? 760 00:57:43,930 --> 00:57:48,160 Зашто бројач не повећава његову вредност? 761 00:57:48,160 --> 00:57:53,100 Зашто је боравио на 0? 762 00:57:53,100 --> 00:57:59,320 Па, овде имам - вратио овде кажем бројач = к и контра. 763 00:57:59,320 --> 00:58:02,180 Дакле, ако се вратим на почетак мог функције, 764 00:58:02,180 --> 00:58:09,520 Видим да када сам ја штампа, и је 0, а шта 0 к нешто? 765 00:58:09,520 --> 00:58:13,700 То је 0, зар не? Дакле, то је вероватно разлог зашто контра 766 00:58:13,700 --> 00:58:16,960 никада неће бити било који други број. 767 00:58:16,960 --> 00:58:21,920 Па ста онда ја можда желети да урадите је да се вратим у моју фуцтион, 768 00:58:21,920 --> 00:58:27,410 кажу, у реду, добро заправо, желим да га покренем на 1. 769 00:58:27,410 --> 00:58:32,150 Да ли ће то решити ствари? 770 00:58:32,150 --> 00:58:34,550 Не баш, јер је контра још 0 овде. 771 00:58:34,550 --> 00:58:42,390 Дакле, хајде да поставимо то 1. 772 00:58:42,390 --> 00:58:49,040 Ми желимо да поново нашу алатку за отклањање грешака, па хајде да отказ. 773 00:58:49,040 --> 00:58:54,000 И шта онда можемо да урадимо је да можемо ГДБ дебуггинг опет, 774 00:58:54,000 --> 00:59:05,620 стави паузу у главни, а затим поново покрените отклањање грешака, следећи, следећи, следећи. 775 00:59:05,620 --> 00:59:12,520 Хајдемо нект неколико пута, а онда ћемо штампати контра, види да - 776 00:59:12,520 --> 00:59:16,140 нисмо правилно да поново датотеку. 777 00:59:16,140 --> 00:59:19,500 Иако смо променили изворни код, онда смо стварно 778 00:59:19,500 --> 00:59:21,660 није ажурирамо нашу извршну. 779 00:59:21,660 --> 00:59:27,310 Верујем да можете направити - да. 780 00:59:27,310 --> 00:59:29,880 Унутар саме ГДБ, ви у ствари можете направити датотеку. 781 00:59:29,880 --> 00:59:31,880 Дакле, не морате да прекинете ГДБ поново. 782 00:59:31,880 --> 00:59:36,180 Можете да се вратимо на изворни фајл, саве, назад у ГДБ, можете га направити поново. 783 00:59:36,180 --> 00:59:40,850 Сјајно. Дакле, хајде да дебуггинг. 784 00:59:40,850 --> 00:59:45,900 Ми желимо да кренемо од почетка, јер имамо нову извршну. 785 00:59:45,900 --> 00:59:54,870 Можемо ићи кроз неколико пута, а затим одштампате ја, штампати бројач, настави. 786 00:59:54,870 --> 00:59:59,090 У реду. Тако сада видимо да је заправо супротно повећава своју вредност као и ми желимо да. 787 00:59:59,090 --> 01:00:03,340 >> То је само мали мало залогај величине пример како можете да користите ГДБ 788 01:00:03,340 --> 01:00:09,700 да унесете шифру, штампати одређене вредности, кликните поред наставите на следећи ред, 789 01:00:09,700 --> 01:00:12,960 и скратити га и одштампате га. 790 01:00:12,960 --> 01:00:18,690 Очигледно, код у журби је мало сложенији од тога, али шта можете да урадите 791 01:00:18,690 --> 01:00:26,980 је постављен на тачку прекида - можете поставити тачку прекида на дохват проналажење функција, тако нешто. 792 01:00:26,980 --> 01:00:29,440 Дакле, кад год се стигне до тачке када треба да изгледа нешто горе, 793 01:00:29,440 --> 01:00:37,340 онда ГДБ трајаће све до тог тренутка, а онда можете почети вредности штампања напоље. 794 01:00:37,340 --> 01:00:42,030 Као ис марака у овом тренутку лажном или је то истина? 795 01:00:42,030 --> 01:00:46,580 То је вероватно нешто што можда желите да користите. 796 01:00:46,580 --> 01:00:49,060 ГДБ, не нагласи превише о томе, 797 01:00:49,060 --> 01:00:51,270 јер ћемо ићи у детаље у предавању, 798 01:00:51,270 --> 01:00:54,570 али само сам хтео да ви знате како ћете можда моћи да га користе 799 01:00:54,570 --> 01:01:00,120 ако почињете са псет и желе да разумеју 800 01:01:00,120 --> 01:01:05,040 бољи начин него стављање принт ф изјаве и загадјује све их преко вашег кода. 801 01:01:05,040 --> 01:01:10,430 Имајући ГДБ да стварно га одштампате за вас и да сте у могућности да поставите оне тачке прекида 802 01:01:10,430 --> 01:01:12,980 тако да ваш програм може покренути до одређене тачке 803 01:01:12,980 --> 01:01:21,660 и онда вам омогућавају да заиста корак у њу и да схватим ту проблем. 804 01:01:21,660 --> 01:01:29,600 >> Тачно. Дакле, ако се осврнемо уназад на јагма смо прочитали дистрибуцију кода. 805 01:01:29,600 --> 01:01:35,670 Разговарали смо о томе на начин да прелазили преко 2Д низове, и сигурно ћу 806 01:01:35,670 --> 01:01:40,910 желећи да буде прелазили преко 2Д низ када дођете до скрећем игру мрежу. 807 01:01:40,910 --> 01:01:45,090 Разговарали смо о проналажење функција, о томе како желимо да се уверите у неколико ствари. 808 01:01:45,090 --> 01:01:48,300 Желимо да се уверите да нисмо били на речи раније. 809 01:01:48,300 --> 01:01:51,220 Такође желимо да се уверите да је то заправо у речнику. 810 01:01:51,220 --> 01:01:54,220 Онда смо причали о јагма, о томе како желимо да ротирате одбор. 811 01:01:54,220 --> 01:01:58,170 А знајући да ћете можда желети да направите копију нешто 812 01:01:58,170 --> 01:02:00,440 бити у стању да га помери. 813 01:02:00,440 --> 01:02:03,250 Најзад, разговарали смо о случају и осетљивости, о томе како желите да се уверите 814 01:02:03,250 --> 01:02:07,290 да, упркос год комбинација случају да корисник улаза, 815 01:02:07,290 --> 01:02:10,170 ако је важећа реч у речнику, 816 01:02:10,170 --> 01:02:14,400 онда ће се правилно пронађен. 817 01:02:14,400 --> 01:02:21,290 Дакле све то заједно је јагма псет, а то је проход 3. 818 01:02:21,290 --> 01:02:29,180 Хвала свима што сте дошли, и срећно са јагма. 819 01:02:29,180 --> 01:02:32,180 ЦС50.ТВ