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