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