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