1 00:00:00,000 --> 00:00:02,970 >> [Мусиц плаиинг] 2 00:00:02,970 --> 00:00:14,355 3 00:00:14,355 --> 00:00:15,700 >> Давид Ј Малан: У реду. 4 00:00:15,700 --> 00:00:18,832 Ово је ЦС50 и ово је почетак недеље 2. 5 00:00:18,832 --> 00:00:21,040 А ви се сећате да преко задњих пар недеља, 6 00:00:21,040 --> 00:00:24,490 смо увођења рачунара науке и, заузврат, програмирање. 7 00:00:24,490 --> 00:00:27,640 >> И почели смо причу путем Сцратцх, који графички језика 8 00:00:27,640 --> 00:00:28,990 од Медиа Лаб МИТ. 9 00:00:28,990 --> 00:00:30,780 А онда недавно, прошле недеље, да ли смо 10 00:00:30,780 --> 00:00:34,450 увести хигхер-- А језика нижег нивоа познат 11 00:00:34,450 --> 00:00:36,770 као Ц, нешто што је чисто текстуални. 12 00:00:36,770 --> 00:00:39,440 И, заиста, последњи пут смо истражио у том контексту 13 00:00:39,440 --> 00:00:40,450 велики број концепата. 14 00:00:40,450 --> 00:00:43,010 >> Ово, опозив, био је веома Први програм смо гледали. 15 00:00:43,010 --> 00:00:45,710 И овај програм, једноставно, исписује, "Хелло, ворлд." 16 00:00:45,710 --> 00:00:47,730 Али има толико наизглед магија дешава. 17 00:00:47,730 --> 00:00:51,460 Ту је ово #инцлуде са овим угластим заградама. 18 00:00:51,460 --> 00:00:52,170 Има Инт. 19 00:00:52,170 --> 00:00:53,020 Ту је (празнина). 20 00:00:53,020 --> 00:00:56,330 Има заграде, цурли протезе, полу-Црева, и још много тога. 21 00:00:56,330 --> 00:00:58,480 >> И тако, сећам се да увели смо Сцратцх 22 00:00:58,480 --> 00:01:02,110 тако да смо могли, идеално, види прошлост да синтакса, ствари које стварно не 23 00:01:02,110 --> 00:01:04,590 све је интелектуално Интересантно али рано 24 00:01:04,590 --> 00:01:07,700 је, апсолутно, мало зезнуто да ће завршити свој ум око. 25 00:01:07,700 --> 00:01:10,860 И, заиста, један од најчешћих ствари рано у класи програмирање, 26 00:01:10,860 --> 00:01:13,443 посебно за оне мање удобан, је да се фрустриран 27 00:01:13,443 --> 00:01:17,460 и лоше написаног одређеног Синтацтиц грешке, да не помињемо логичке грешке. 28 00:01:17,460 --> 00:01:19,800 Па међу нашим циљевима данас, заправо, хоће 29 00:01:19,800 --> 00:01:23,280 бити да вас опреми са неким за рјешавање проблема технике о томе како 30 00:01:23,280 --> 00:01:26,705 да боље решавају проблеме сами у облику отклањање грешака. 31 00:01:26,705 --> 00:01:29,330 А ви се сећате, такође, да је окружење које смо увели 32 00:01:29,330 --> 00:01:31,780 последњи пут звао ЦС50 САТА. 33 00:01:31,780 --> 00:01:34,850 Ово је веб-базиран софтвер који омогућава да подесите у облаку, 34 00:01:34,850 --> 00:01:38,450 да тако кажем, задржавајући све своје фајлове заједно, као што смо поново ће данас. 35 00:01:38,450 --> 00:01:41,480 И сећам се да смо ревиситед ове теме овде, 36 00:01:41,480 --> 00:01:44,480 међу њима функције и петље, и варијабле, и Боолеан изрази, 37 00:01:44,480 --> 00:01:45,110 и услови. 38 00:01:45,110 --> 00:01:49,190 И заправо још неколико који смо ми преведено из света Сцратцх 39 00:01:49,190 --> 00:01:50,800 на свету Ц. 40 00:01:50,800 --> 00:01:53,220 >> Али основни зграда блокови, да тако кажем, 41 00:01:53,220 --> 00:01:55,150 су заиста још увек исти прошле недеље. 42 00:01:55,150 --> 00:01:57,900 У ствари, стварно сам имао различит слагалице, ако хоћете. 43 00:01:57,900 --> 00:02:00,300 Уместо тога љубичаста саве блок, уместо тога 44 00:02:00,300 --> 00:02:02,940 је принтф, која је ова функција у Ц да 45 00:02:02,940 --> 00:02:05,890 омогућава вам да одштампате нешто и форматирање га на екрану. 46 00:02:05,890 --> 00:02:07,950 Увели смо ЦС50 Библиотека, ти где 47 00:02:07,950 --> 00:02:11,420 су сада На располагању гет_цхар, и гет_инт и гет_стринг, 48 00:02:11,420 --> 00:02:14,610 и неколико других функција у добро, преко којих можете добити улаз 49 00:02:14,610 --> 00:02:16,260 од корисника тастатуре. 50 00:02:16,260 --> 00:02:20,640 А такође смо узели погледамо ствари као тхесе- боол, и цхар, 51 00:02:20,640 --> 00:02:22,490 и двоструко, пловак, Инт, лонг_лонг низ. 52 00:02:22,490 --> 00:02:25,170 И ту је чак и друге врсте података у Ц 53 00:02:25,170 --> 00:02:28,560 >> Другим речима, када се изјасне променљива за чување неку вредност, 54 00:02:28,560 --> 00:02:32,600 или када имплементира функције да врати неку вредност, 55 00:02:32,600 --> 00:02:35,290 можете одредити шта тип вредности која је. 56 00:02:35,290 --> 00:02:37,310 Да ли је то низ, као да је низ знакова? 57 00:02:37,310 --> 00:02:39,490 Да ли је то број, као цео број? 58 00:02:39,490 --> 00:02:41,390 Да ли је то флоатинг поинт вредности или слично? 59 00:02:41,390 --> 00:02:46,180 Дакле, у Ц, за разлику од Сцратцх, ми заправо почео да прецизира које врсте података 60 00:02:46,180 --> 00:02:48,330 враћали смо се или коришћењем. 61 00:02:48,330 --> 00:02:51,910 >> Али, наравно, такође смо налетели неке основне границе рачунарства. 62 00:02:51,910 --> 00:02:54,100 А посебно, ово језик Ц, опозив 63 00:02:54,100 --> 00:02:57,070 да је погледамо цео број прекорачења, реалност 64 00:02:57,070 --> 00:03:00,460 да ако имате само коначна количина меморије 65 00:03:00,460 --> 00:03:04,600 или специфично, коначан број битова, можете само да рачунате тако високо. 66 00:03:04,600 --> 00:03:08,460 И тако смо гледали овај пример овде при чему бројач у авиону, 67 00:03:08,460 --> 00:03:13,510 Заправо, ако ради довољно дуго да прелије и доведе до софтвера 68 00:03:13,510 --> 00:03:15,560 стварна физички потенцијал грешка. 69 00:03:15,560 --> 00:03:18,600 >> Такође гледали флоатинг тачка непрецизност, реалност 70 00:03:18,600 --> 00:03:22,280 да само коначном броју битова, да ли је 32 или 64, 71 00:03:22,280 --> 00:03:27,330 можете само навести толико бројева после децималног зареза, након чега 72 00:03:27,330 --> 00:03:29,110 почињу да се непрецизан. 73 00:03:29,110 --> 00:03:32,360 Тако, на пример, једна трећина у свет овде, у нашем људском свету, 74 00:03:32,360 --> 00:03:35,360 знамо да је само бесконачан број од 3с након децималног зареза. 75 00:03:35,360 --> 00:03:38,820 Али рачунар не може да обавезно представљају безброј бројева 76 00:03:38,820 --> 00:03:42,590 ако само дозволити да неки коначна количина информација. 77 00:03:42,590 --> 00:03:45,900 >> Дакле, не само да смо вас опремити са већом снагом у погледу 78 00:03:45,900 --> 00:03:49,280 како можете се изразите на тастатура у смислу програмирања, 79 00:03:49,280 --> 00:03:51,430 ми такође ограничен шта заправо можете урадити. 80 00:03:51,430 --> 00:03:55,790 И заиста, бубе и грешке могу произилазе из такве врсте питања. 81 00:03:55,790 --> 00:03:59,900 И заиста, једна од тема данас ће бити теме као што су отклањање грешака 82 00:03:59,900 --> 00:04:03,699 и заправо гледа испод хаубе колико су уведене ствари прошле недеље 83 00:04:03,699 --> 00:04:05,490 заправо спроводи тако да боље 84 00:04:05,490 --> 00:04:10,530 разумети како су могућности и ограничења језика као што је Ц. 85 00:04:10,530 --> 00:04:14,770 >> И у ствари, ми ћемо ољуштити назад слојева најједноставнији структуре података, 86 00:04:14,770 --> 00:04:17,756 нешто што се зове низ, који Сцратцх се дешава да позове "листу." 87 00:04:17,756 --> 00:04:19,589 То је мало различити у том контексту. 88 00:04:19,589 --> 00:04:23,340 А онда ћемо се представити један од Први од наших проблема Домаин-Специфиц 89 00:04:23,340 --> 00:04:26,790 у ЦС50, свет криптографија, уметност кодирање 90 00:04:26,790 --> 00:04:29,650 или у аифрирање информације тако да бисте могли да шаљете тајне поруке 91 00:04:29,650 --> 00:04:34,520 и декодира тајне поруке између две особе, А и Б. 92 00:04:34,520 --> 00:04:37,490 >> Дакле, пре него што транзиције у том новом свету, 93 00:04:37,490 --> 00:04:42,059 хајде да покушамо да вас опреми са неким технике са којима можете елиминисати 94 00:04:42,059 --> 00:04:43,850 или смањити барем неки од фрустрација 95 00:04:43,850 --> 00:04:46,630 да сте вероватно срели је само током протекле недеље. 96 00:04:46,630 --> 00:04:50,830 У ствари, пред вама су неки од суцх-- свој први проблеми у Ц. и квоте су, 97 00:04:50,830 --> 00:04:54,010 ако сте попут мене, први пут покушате да унесете из програма, 98 00:04:54,010 --> 00:04:57,330 чак и ако мислите логички Програм је прилично једноставан, 99 00:04:57,330 --> 00:05:01,200 можда врло добро ударио у зид, и преводилац неће да сарађује. 100 00:05:01,200 --> 00:05:03,940 Направите или кланг не иде да стварно раде свој наредбе. 101 00:05:03,940 --> 00:05:05,450 >> И зашто би то могао бити? 102 00:05:05,450 --> 00:05:07,950 Па, хајде да погледамо, можда, једноставан програм. 103 00:05:07,950 --> 00:05:11,190 Ја идем напред и сачувајте ово фајл намерно се зове бугги0.ц, 104 00:05:11,190 --> 00:05:13,590 јер сам знао да да буде погрешна унапред. 105 00:05:13,590 --> 00:05:17,400 Али ја не могу схватити да уколико то је први или други или трећи програма 106 00:05:17,400 --> 00:05:18,830 да сам стварно што се. 107 00:05:18,830 --> 00:05:23,820 Тако да идем напред и откуцати, маин (). 108 00:05:23,820 --> 00:05:28,130 И онда унутар мојих заграда, веома познат ( "здраво, ворлд-- 109 00:05:28,130 --> 00:05:30,980 обрнуте косе црте, Н ") - и полу-дебелог црева. 110 00:05:30,980 --> 00:05:32,360 >> Спасао сам фајл. 111 00:05:32,360 --> 00:05:34,850 Сада ћу да одем доле на мом прозору терминала 112 00:05:34,850 --> 00:05:40,340 и тип Марка бугги0, јер, опет, име датотеке данас је бугги0.ц. 113 00:05:40,340 --> 00:05:43,660 Па куцам да бугги0, Ентер. 114 00:05:43,660 --> 00:05:48,200 >> И, ох, боже, сећам из последње време да нема порука о грешци је добра ствар. 115 00:05:48,200 --> 00:05:49,740 Тако да нема излаз је добра ствар. 116 00:05:49,740 --> 00:05:52,920 Али овде сам се јасно неки број грешака. 117 00:05:52,920 --> 00:05:56,470 >> Тако првој линији излаза после куцања направи бугги0, опозив, 118 00:05:56,470 --> 00:05:59,540 је цланг је прилично опширан излаз. 119 00:05:59,540 --> 00:06:02,067 Испод хаубе, ЦС50 САТА је конфигурисан 120 00:06:02,067 --> 00:06:04,150 да користе гомилу Опције са овом компајлер 121 00:06:04,150 --> 00:06:05,941 тако да немате да мислим о њима. 122 00:06:05,941 --> 00:06:08,840 И то је све што прва линија значи да почиње са цланг. 123 00:06:08,840 --> 00:06:11,720 >> Али после тога, проблеми почињу да дају свој изглед. 124 00:06:11,720 --> 00:06:17,390 Бугги0.ц он лине 3, карактер 5, постоји велика, црвена грешка. 125 00:06:17,390 --> 00:06:18,380 Шта је то? 126 00:06:18,380 --> 00:06:23,562 Имплицитно проглашавајући библиотека функцију принтф са типом инт (цхар *, 127 00:06:23,562 --> 00:06:26,050 ...) [-Веррор]. 128 00:06:26,050 --> 00:06:28,379 Мислим, да је врло брзо постаје веома волшебни. 129 00:06:28,379 --> 00:06:30,170 И наравно, у почетку поглед, не бисмо 130 00:06:30,170 --> 00:06:32,380 Очекујем да схвате целина те поруке. 131 00:06:32,380 --> 00:06:34,213 И тако једна од лекција за данас иде 132 00:06:34,213 --> 00:06:36,919 да да покушате да приметити обрасци, или сличне ствари, 133 00:06:36,919 --> 00:06:38,960 грешака можете имати наишао у прошлости. 134 00:06:38,960 --> 00:06:41,335 Дакле, да задиркују разликују само те речи које изгледају познато. 135 00:06:41,335 --> 00:06:44,290 Велики, црвени грешка је јасно симбол нечега што није у реду. 136 00:06:44,290 --> 00:06:47,940 >> имплицитно изјављујући библиотека Функција принтф. 137 00:06:47,940 --> 00:06:51,680 Дакле, чак и ако се не разумем шта имплицитно проглашавајући библиотека функцију 138 00:06:51,680 --> 00:06:54,900 средства, проблем сигурно односи се на принтф некако. 139 00:06:54,900 --> 00:06:59,130 И извор тог питања има везе са проглашавајући. 140 00:06:59,130 --> 00:07:02,440 >> Проглашавајући функција је га споменути први пут. 141 00:07:02,440 --> 00:07:06,210 И ми смо користили терминологију прошле недеље проглашења прототип функција је, 142 00:07:06,210 --> 00:07:11,860 или са једном линијом на врху лични фајл или у такозваној заглавља датотеке. 143 00:07:11,860 --> 00:07:15,300 И у оно што смо рекли фајл прошле недеље да принтф је цитат, 144 00:07:15,300 --> 00:07:17,080 под знацима навода, изјавио? 145 00:07:17,080 --> 00:07:20,950 У ком фајл је његов прототип? 146 00:07:20,950 --> 00:07:24,640 >> Дакле, ако се сећате, веома прво што сам откуцани, скоро сваки програм прошле једном-- 147 00:07:24,640 --> 00:07:30,790 и случајно је малопре почео куцање себе-- је ово један овде- 148 00:07:30,790 --> 00:07:38,630 хасх-- #инцлуде <стио-- за улаз / оутпут-- тачка Х И заиста, 149 00:07:38,630 --> 00:07:41,860 ако сам сада спасити ову слику, ја идем да иде напред и разбистрим екран, 150 00:07:41,860 --> 00:07:44,740 којима можете урадити куцањем Јасно, или можете држати Цонтрол Л, 151 00:07:44,740 --> 00:07:47,680 само да очистите свој прозор терминала само да елиминише неке неред. 152 00:07:47,680 --> 00:07:51,370 >> Ја идем напред и Ре-типа Марка бугги0, Ентер. 153 00:07:51,370 --> 00:07:53,790 И ето, ја и даље видим да дуго команда из Цланг, 154 00:07:53,790 --> 00:07:55,470 али нема порука о грешци овај пут. 155 00:07:55,470 --> 00:07:58,800 И заиста, ако то урадим ./бугги0, баш као и прошли пут, 156 00:07:58,800 --> 00:08:01,860 где тачка означава ово директоријум, Сласх само значи, 157 00:08:01,860 --> 00:08:05,040 ево име програма и да назив програма је бугги0, 158 00:08:05,040 --> 00:08:07,340 Ентер, "Хелло, ворлд." 159 00:08:07,340 --> 00:08:09,440 >> Сада, како би сте прикупити ово решење 160 00:08:09,440 --> 00:08:12,017 без обавезно препознавање што више речи 161 00:08:12,017 --> 00:08:14,350 као што сам, наравно, да учинио толико година? 162 00:08:14,350 --> 00:08:18,720 Па, реализовати по први проблем скуп, ми вас упознати са командом 163 00:08:18,720 --> 00:08:21,175 да своје запослене ЦС50 је написао под називом хелп50. 164 00:08:21,175 --> 00:08:24,300 И заиста, Ц нема спецификацију за проблем сет како се ово користи. 165 00:08:24,300 --> 00:08:27,210 >> Али хелп50 је у суштини програм који особље ЦС50 је 166 00:08:27,210 --> 00:08:30,850 написао да омогућава покретање команда или покренути програм, 167 00:08:30,850 --> 00:08:36,169 а ако не разумете свог излаз, да прође свој излаз на хелп50, 168 00:08:36,169 --> 00:08:38,890 након чега софтвер да је особље у току је написао 169 00:08:38,890 --> 00:08:42,429 ће изгледати на излазу вашег програма ред по ред, знак по знак. 170 00:08:42,429 --> 00:08:46,000 И ако, особље, препознати порука о грешци што имате, 171 00:08:46,000 --> 00:08:50,580 ми ћемо покушати да вас провоцира са неким реторичка питања, са неким саветима, 172 00:08:50,580 --> 00:08:54,890 слично као ТФ или ЦА или себе ће учинити лично у радног времена. 173 00:08:54,890 --> 00:08:58,320 >> Зато погледајте на хелп50 ако не нужно препознати проблем. 174 00:08:58,320 --> 00:09:00,790 Али се не ослањају на њега превише као штака. 175 00:09:00,790 --> 00:09:03,990 Сигурно покушати да разуме свој излаз, а затим научити од њега 176 00:09:03,990 --> 00:09:07,571 тако да те само једном или два пута до увек ради хелп50 за одређену грешку 177 00:09:07,571 --> 00:09:08,070 порука. 178 00:09:08,070 --> 00:09:10,660 Након тога, требало би да боље се опремљен 179 00:09:10,660 --> 00:09:13,180 да схватим шта је то заправо. 180 00:09:13,180 --> 00:09:14,350 >> Хајде да урадимо једну другу овде. 181 00:09:14,350 --> 00:09:20,410 Пусти ме само напред, и на други фајл ћемо назвати бугги1.ц. 182 00:09:20,410 --> 00:09:23,110 И у овом фајлу сам да делибератели-- 183 00:09:23,110 --> 00:09:26,330 али се претварати да не знам разумем шта грешка сам направио. 184 00:09:26,330 --> 00:09:31,420 >> Ја идем напред и до ово-- инцлуде, пошто имам 185 00:09:31,420 --> 00:09:33,660 научила своју лекцију од малопре. 186 00:09:33,660 --> 00:09:36,220 Маин (), као и раније. 187 00:09:36,220 --> 00:09:40,880 А онда овде ћу да до Стринг с - гет_стринг. 188 00:09:40,880 --> 00:09:43,770 И сећам из прошлог времена које ово значи, хеј, рачунар, 189 00:09:43,770 --> 00:09:48,280 дај ми променљиву, то називају с, и да тип променљиве стринг 190 00:09:48,280 --> 00:09:50,150 тако да могу похранити једну или више речи у њему. 191 00:09:50,150 --> 00:09:52,191 >> А онда са десне стране страни знака једнакости 192 00:09:52,191 --> 00:09:54,980 се гет_стринг, што је функција у ЦС50 библиотеци 193 00:09:54,980 --> 00:09:55,980 да ради управо то. 194 00:09:55,980 --> 00:09:59,740 Она добија функцију, а потом руке га са десна на лево. 195 00:09:59,740 --> 00:10:02,670 Дакле, ово знак једнакости не значи "Једнако" као што помислити из математике. 196 00:10:02,670 --> 00:10:04,750 То значи задатак с десна на лево. 197 00:10:04,750 --> 00:10:09,640 Дакле, ово значи, узмите низ од корисник и чувајте га унутар с. 198 00:10:09,640 --> 00:10:10,460 >> Сада ћемо га користити. 199 00:10:10,460 --> 00:10:13,820 Пусти ме напред сада и као мало линија, пусти ме напред и рећи "здраво" - 200 00:10:13,820 --> 00:10:19,330 не "свет", али "здраво,% успела-- који је наш чувар места, зарез с, 201 00:10:19,330 --> 00:10:22,030 што је наша променљива, а затим тачка и зарез. 202 00:10:22,030 --> 00:10:26,070 Дакле, ако нисам забрљам превише овде, ово изгледа као исправан код. 203 00:10:26,070 --> 00:10:28,090 >> И моји инстинкти сада да га саставити. 204 00:10:28,090 --> 00:10:30,400 Фајл се зове бугги1.ц. 205 00:10:30,400 --> 00:10:33,770 Зато ћу да направите бугги1, Ентер. 206 00:10:33,770 --> 00:10:36,377 И проклето-то, ако не постоји чак и више грешака него раније. 207 00:10:36,377 --> 00:10:38,210 Мислим, има више поруке о грешци да би 208 00:10:38,210 --> 00:10:40,400 Изгледа од стварних линија у овом програму. 209 00:10:40,400 --> 00:10:42,730 >> Али је понети овде, чак и ако сте преплављени 210 00:10:42,730 --> 00:10:45,040 са два или три или још четири поруке о грешци, 211 00:10:45,040 --> 00:10:48,340 фокусирају увек на врло Први од тих порука. 212 00:10:48,340 --> 00:10:52,220 Гледајући највише горњем један, сцроллинг натраг према потреби. 213 00:10:52,220 --> 00:10:53,930 Дакле, овде сам откуцао маке бугги1. 214 00:10:53,930 --> 00:10:55,700 Ево да кланг излаз као што је очекивано. 215 00:10:55,700 --> 00:10:57,290 >> И овде је први црвени грешка. 216 00:10:57,290 --> 00:11:02,370 Коришћење црно идентификатора ниска, да ли мислим стандард у? 217 00:11:02,370 --> 00:11:04,260 Тако стандард у је заправо нешто друго. 218 00:11:04,260 --> 00:11:06,240 То се односи на корисника је тастатура, у суштини. 219 00:11:06,240 --> 00:11:08,080 >> Али то није оно што сам мислио. 220 00:11:08,080 --> 00:11:11,770 Мислио сам стринг, а ја мислио гет_стринг. 221 00:11:11,770 --> 00:11:16,200 Дакле, шта је то што сам Заборавио сам да овај пут? 222 00:11:16,200 --> 00:11:20,230 Оно што недостаје овај пут? 223 00:11:20,230 --> 00:11:23,600 Имам свој #инцлуде, тако да имају приступ принтф. 224 00:11:23,600 --> 00:11:26,090 >> Али шта ја немам приступ још увек? 225 00:11:26,090 --> 00:11:29,420 Па, баш као и прошли пут, Морам да кажем компајлер 226 00:11:29,420 --> 00:11:31,691 Цланг што су ове функције. 227 00:11:31,691 --> 00:11:33,940 Гет_стринг не долази са Ц. Конкретно, ит 228 00:11:33,940 --> 00:11:38,160 не долази у хеадер филе,. 229 00:11:38,160 --> 00:11:40,770 Уместо тога долази у нешто особље је написао, 230 00:11:40,770 --> 00:11:44,176 који је другачији фајл наме али пригодно назван. 231 00:11:44,176 --> 00:11:46,990 232 00:11:46,990 --> 00:11:50,861 >> Тако једноставно додајући да једну линију од цоде-- поврат од прошлог пута 233 00:11:50,861 --> 00:11:53,610 када кланг ради, иде то лоок ат ми код врха до дна, 234 00:11:53,610 --> 00:11:54,193 с лева надесно. 235 00:11:54,193 --> 00:11:57,200 То ће приметити, Ох, хоћеш. 236 00:11:57,200 --> 00:11:59,900 Пусти ме и сматрају да, где год је на серверу, 237 00:11:59,900 --> 00:12:03,090 копирате и налепите га, у суштини, у врху вашег фајл 238 00:12:03,090 --> 00:12:06,820 тако да у овом тренутку у причи, линија 1, остатак програма 239 00:12:06,820 --> 00:12:11,651 да, заиста, користите неки од функција у њему, међу њима гет_стринг. 240 00:12:11,651 --> 00:12:13,650 Па ћу игнорисати остатак тих грешака, 241 00:12:13,650 --> 00:12:17,190 јер ја, заиста, сумњају да само први је уствари. 242 00:12:17,190 --> 00:12:20,780 И ја идем напред и реприза, након снимања мој досије да бугги1. 243 00:12:20,780 --> 00:12:22,580 И ето, то су радили. 244 00:12:22,580 --> 00:12:29,200 И ако ја ./бугги1 и укуцајте, за пример, Замила, сада ће добити здраво, 245 00:12:29,200 --> 00:12:32,000 Замила, уместо здраво, свет. 246 00:12:32,000 --> 00:12:32,550 >> У реду. 247 00:12:32,550 --> 00:12:35,890 Тако су Такеаваис овде онда су се, један, покушати да прикупите колико год можете 248 00:12:35,890 --> 00:12:39,140 од само порука о грешци, гледајући неке од препознатљивих речи. 249 00:12:39,140 --> 00:12:43,070 Забране да користите хелп50 по проблем сет спецификацију. 250 00:12:43,070 --> 00:12:46,500 Али осим тога, такође, увек изгледају у горњем грешци бар 251 00:12:46,500 --> 00:12:50,051 у почетку, да видимо шта информације уствари може донети. 252 00:12:50,051 --> 00:12:52,300 Али испоставило се да постоји још више функционалности буилт 253 00:12:52,300 --> 00:12:55,030 у ЦС50 библиотеку да помогне Ви на почетку семестра 254 00:12:55,030 --> 00:12:57,580 и рано у програмирању схватити шта није у реду. 255 00:12:57,580 --> 00:12:59,840 Дакле, хајде да урадимо још један пример. 256 00:12:59,840 --> 00:13:04,350 Ја ћу назвати бугги2, који, опет, ће да буде погрешна ван 257 00:13:04,350 --> 00:13:05,650 капије, по дизајну. 258 00:13:05,650 --> 00:13:09,980 >> И ја идем напред и до #инцлуде. 259 00:13:09,980 --> 00:13:12,580 А онда ћу да урадим маин (). 260 00:13:12,580 --> 00:13:14,840 А онда ћу да урадите за петљу. 261 00:13:14,840 --> 00:13:16,690 Фор (инт И _ 0. 262 00:13:16,690 --> 00:13:18,750 и мања од или једнака 10. 263 00:13:18,750 --> 00:13:24,260 и ++, а затим у заграда, идем да одштампате само симбол хаштагот овде 264 00:13:24,260 --> 00:13:25,920 и нова линија карактера. 265 00:13:25,920 --> 00:13:29,220 >> Дакле, моје намере са овим Програм је једноставно 266 00:13:29,220 --> 00:13:33,150 на поновити 10 пута и на сваком итерацији 267 00:13:33,150 --> 00:13:35,260 те петље сваки пут кроз циклус, 268 00:13:35,260 --> 00:13:37,660 одштампати хеша, хеш-ознаку, ознаку хеша. 269 00:13:37,660 --> 00:13:40,480 Један по ред јер ја имају нову линију тамо. 270 00:13:40,480 --> 00:13:42,787 И подсјећају да је за петља, по задњи веек-- 271 00:13:42,787 --> 00:13:44,620 и добићете више упознат са синтакси 272 00:13:44,620 --> 00:13:47,170 да се то користи у пракси пре лонг-- ово ми даје 273 00:13:47,170 --> 00:13:49,740 променљива Звао сам и поставља га на 0. 274 00:13:49,740 --> 00:13:52,650 >> Ово повећава И на свака итерација за 1. 275 00:13:52,650 --> 00:13:54,940 Па сам иде на 1 до 2 до 3. 276 00:13:54,940 --> 00:13:57,690 А онда ово стање у средњи између тачком и зарезом 277 00:13:57,690 --> 00:14:03,010 бива проверавати приликом сваке итерацији да сигуран да смо још увек у домету. 278 00:14:03,010 --> 00:14:06,830 Дакле, желим да поновити 10 пута, тако да имају неки начин врло интуитивно само 279 00:14:06,830 --> 00:14:09,070 пут 10 јер ми је горња граница. 280 00:14:09,070 --> 00:14:14,310 >> А ипак, кад сам покренути ово, након састављање га направити бугги2-- 281 00:14:14,310 --> 00:14:15,440 и то не саставити у реду. 282 00:14:15,440 --> 00:14:17,980 Тако да немам синтакса грешка овај пут. 283 00:14:17,980 --> 00:14:20,940 Пусти ме сада напред и покренути бугги2, Ентер. 284 00:14:20,940 --> 00:14:22,620 И сада идите горе. 285 00:14:22,620 --> 00:14:24,890 И пусти ме повећање величина прозора. 286 00:14:24,890 --> 00:14:33,720 >> Изгледа да сам 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. 287 00:14:33,720 --> 00:14:38,891 Тако да је 11 ознака хеша, иако Ја сам јасно ставио 10 унутар ове петље. 288 00:14:38,891 --> 00:14:42,140 Сада, неки од вас можда видети одмах шта је грешка је јер, заиста, овај 289 00:14:42,140 --> 00:14:43,720 није тешко грешка да. 290 00:14:43,720 --> 00:14:46,070 Али то је врло често је веома рано. 291 00:14:46,070 --> 00:14:49,820 >> Оно што желим да истакнем, ипак, је, како се ја ово схватим? 292 00:14:49,820 --> 00:14:52,300 Па, испоставило се да ЦС50 Библиотека долази 293 00:14:52,300 --> 00:14:55,380 са не само гет_стринг и гет_инт и гет_флоат и друге функције. 294 00:14:55,380 --> 00:14:59,980 Он такође долази са посебном функцијом зове епринтф, или, грешка принтф. 295 00:14:59,980 --> 00:15:03,270 И постоји само да би то мало лакше 296 00:15:03,270 --> 00:15:06,310 када отклањање грешака кода за само принт поруку о грешци на екрану 297 00:15:06,310 --> 00:15:07,850 и знам одакле је дошао. 298 00:15:07,850 --> 00:15:11,000 >> Тако, на пример, једна ствар могао бих до овде са ова функција је ово-- 299 00:15:11,000 --> 00:15:20,230 епринтф, а онда ћу да наставим и саи сада% сам, косих, бр. 300 00:15:20,230 --> 00:15:22,330 И ја ћу да прикључите у вредности и. 301 00:15:22,330 --> 00:15:25,400 И до врха, јер ово је у ЦС50 библиотеци, 302 00:15:25,400 --> 00:15:27,580 Ја идем напред и укључују 303 00:15:27,580 --> 00:15:29,169 тако да имају приступ овој функцији. 304 00:15:29,169 --> 00:15:31,460 Али, хајде да размотримо шта линија 9 треба да ради. 305 00:15:31,460 --> 00:15:32,670 Ја ћу избрисати ово на крају. 306 00:15:32,670 --> 00:15:34,670 Ово нема никакве везе са својим општи циљ. 307 00:15:34,670 --> 00:15:39,090 Али епринтф, грешка принтф, је само значило да ми дају неке дијагностичке информације. 308 00:15:39,090 --> 00:15:42,460 Када сам водим програм, желим да видети на екрану привремено 309 00:15:42,460 --> 00:15:44,550 као и само да би разумели шта се дешава. 310 00:15:44,550 --> 00:15:47,330 >> И, заиста, на сваки итерација овде линије 9 311 00:15:47,330 --> 00:15:49,260 Желим да видим, шта је вредност И? 312 00:15:49,260 --> 00:15:50,290 Која је вредност И? 313 00:15:50,290 --> 00:15:51,280 Која је вредност И? 314 00:15:51,280 --> 00:15:55,650 И, надамо се, ја само треба види ту поруку, такође, 10 пута. 315 00:15:55,650 --> 00:15:57,780 >> Па пусти ме само напред, рекомпајлирате мој програм, 316 00:15:57,780 --> 00:15:59,905 као што морам да урадим у сваком тренутку Правим промену. ./бугги2. 317 00:15:59,905 --> 00:16:02,680 318 00:16:02,680 --> 00:16:03,640 И сада-- реду. 319 00:16:03,640 --> 00:16:04,820 Има много више дешава. 320 00:16:04,820 --> 00:16:07,610 Па пусти ме дођите у још већи прозор. 321 00:16:07,610 --> 00:16:10,190 >> И видећете да је сваки од хасхтагс још увек штампа. 322 00:16:10,190 --> 00:16:15,270 Али између сваке од њих је сада ово дијагностички излаз форматиран на следећи начин. 323 00:16:15,270 --> 00:16:17,960 Име мог програма овде је бугги2. 324 00:16:17,960 --> 00:16:20,432 Име датотеке је бугги2.ц. 325 00:16:20,432 --> 00:16:24,080 Линија број са којег ово је штампан је линија 9. 326 00:16:24,080 --> 00:16:27,500 А онда са десне стране то је порука о грешци да сам очекивао. 327 00:16:27,500 --> 00:16:30,701 >> А шта је лепо у вези је то да сада немам да обавезно рачуна 328 00:16:30,701 --> 00:16:32,200 у глави оно што је мој програм ради. 329 00:16:32,200 --> 00:16:34,240 Видим да на Први итерација и је 0, 330 00:16:34,240 --> 00:16:39,420 затим 1, затим 2, па 3, па 4, па 5, затим 6, па 7, па 8, па 9, онда 331 00:16:39,420 --> 00:16:40,980 10. 332 00:16:40,980 --> 00:16:42,050 Па цекај мало. 333 00:16:42,050 --> 00:16:43,740 Шта се дешава овде? 334 00:16:43,740 --> 00:16:48,190 И даље Изгледа да броји као што је предвиђено до 10. 335 00:16:48,190 --> 00:16:50,550 >> Али одакле да почнем? 336 00:16:50,550 --> 00:16:53,240 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 10. 337 00:16:53,240 --> 00:16:58,040 Дакле 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- 11. прст 338 00:16:58,040 --> 00:16:59,990 указује проблема. 339 00:16:59,990 --> 00:17:02,850 Изгледа да сам избројао погрешно у мом петљи. 340 00:17:02,850 --> 00:17:06,599 Уместо да се иде 10 итерација, Поцињем на 0, 341 00:17:06,599 --> 00:17:09,550 Ја сам завршава у и преко 10. 342 00:17:09,550 --> 00:17:12,030 Али зато, као и рачунар, Поцињем бројање на 0, 343 00:17:12,030 --> 00:17:15,250 Требало би да броји до , али не преко, 10. 344 00:17:15,250 --> 00:17:18,510 >> И тако поправити, на крају сам схватио овде, је једна од две ствари. 345 00:17:18,510 --> 00:17:22,430 Могао бих веома једноставно рећи броји до мање од 10. 346 00:17:22,430 --> 00:17:27,260 Дакле 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, који је, заиста, исправно, 347 00:17:27,260 --> 00:17:28,900 иако то звучи мало погрешно. 348 00:17:28,900 --> 00:17:35,070 Или сам могао да урадим мања или једнака до 9, све док почнем на 0. 349 00:17:35,070 --> 00:17:40,056 Или, ако стварно не волим то, зар могу да рачунају се кроз 10, али се крећу од 1. 350 00:17:40,056 --> 00:17:41,680 Али опет, то једноставно није тако честа појава. 351 00:17:41,680 --> 00:17:43,977 У программинг-- додуше не толико у Сцратцх-- 352 00:17:43,977 --> 00:17:45,810 али у програмирању у Ц и други језици, 353 00:17:45,810 --> 00:17:47,670 као ЈаваСцрипт и Питхон и други, то је 354 00:17:47,670 --> 00:17:49,880 само врло уобичајена за наша дискусија о бинарни 355 00:17:49,880 --> 00:17:53,450 на само почетак пребројавања на Најмањи број можете, што је 0. 356 00:17:53,450 --> 00:17:53,950 У реду. 357 00:17:53,950 --> 00:17:55,160 Тако да је епринтф. 358 00:17:55,160 --> 00:17:58,600 И опет, сад кад сам схватио мој Проблем, а ја ћу да се вратим на 0 359 00:17:58,600 --> 00:18:01,470 кроз мање од 10, ја идем да иде у и избрисати епринтф. 360 00:18:01,470 --> 00:18:04,580 >> То не би требало да буде тамо када сам брод свој код или достави свој број 361 00:18:04,580 --> 00:18:05,800 или га покаже било коме другом. 362 00:18:05,800 --> 00:18:07,980 То је заправо само значи да се привремено користе. 363 00:18:07,980 --> 00:18:11,650 Али, сада сам фиксни ово Посебан проблем као и. 364 00:18:11,650 --> 00:18:16,780 >> Па, хајде да урадимо још један пример овде да ћу прикупити на следећи начин. 365 00:18:16,780 --> 00:18:22,850 Ја идем напред и #инцлуде. $ 50 366 00:18:22,850 --> 00:18:25,580 И ја идем напред и #инцлуде. 367 00:18:25,580 --> 00:18:29,030 >> И ја ћу спасити ову слику као бугги3.ц. 368 00:18:29,030 --> 00:18:31,740 И ја идем напред и прогласи маин (). 369 00:18:31,740 --> 00:18:34,186 И онда унутар тамо Ја ћу да урадим Инт И _ - 370 00:18:34,186 --> 00:18:36,435 Желим да спроведе програм са гет_негативе_инт. 371 00:18:36,435 --> 00:18:39,146 372 00:18:39,146 --> 00:18:40,770 Ово није функција која постоји још. 373 00:18:40,770 --> 00:18:42,870 Тако да ћемо имплементирати она у само једном тренутку. 374 00:18:42,870 --> 00:18:45,541 Али ћемо да видимо зашто то је луд у првом пролазу. 375 00:18:45,541 --> 00:18:47,290 И када сам добила инт од корисника, 376 00:18:47,290 --> 00:18:53,365 Само ћу да одштампате% и негативна цео број, косих, Н, зарез, ја. 377 00:18:53,365 --> 00:18:55,240 Другим речима, све што сам Желим овај програм да ради 378 00:18:55,240 --> 00:18:58,000 се добију негативан инт из корисник, а затим одштампати 379 00:18:58,000 --> 00:18:59,980 да таква и таква је негативна Инт. 380 00:18:59,980 --> 00:19:02,080 >> Сада треба да спроведе ову функцију. 381 00:19:02,080 --> 00:19:05,740 Па касније у мом досијеу, ја идем напред и прогласити функцију која се зове 382 00:19:05,740 --> 00:19:10,670 гет_негативе_инт (Воид) - и ми ћемо вратити на оно што та линија опет значи 383 00:19:10,670 --> 00:19:18,790 у тренутак-- инт н; Па-- До фолловинг-- принтф н :. 384 00:19:18,790 --> 00:19:26,210 А онда ћу да урадим н - гет_инт, и чинити док је н већи од 0. 385 00:19:26,210 --> 00:19:28,310 А онда ретурн н ;. 386 00:19:28,310 --> 00:19:31,730 >> Тако да је много дешава у ово али ниједан од којих нисмо 387 00:19:31,730 --> 00:19:33,710 погледај прошле недеље, барем на кратко. 388 00:19:33,710 --> 00:19:36,980 Дакле, овде лине 10 сам проглашен Функција се зове гет_негативе_инт, 389 00:19:36,980 --> 00:19:39,620 и ја сам ставио (празнина), у заграде, разлог је ово 390 00:19:39,620 --> 00:19:40,950 не узима улаз. 391 00:19:40,950 --> 00:19:42,910 Ја не пролази ништа на ту функцију. 392 00:19:42,910 --> 00:19:44,690 Само сам се нешто из ње. 393 00:19:44,690 --> 00:19:47,270 >> А шта ја се надам да вратимо цео број. 394 00:19:47,270 --> 00:19:50,040 Нема тип података у Ц зове негативе_инт. 395 00:19:50,040 --> 00:19:52,880 То је само инт, тако да ће да се на нас да се уверите 396 00:19:52,880 --> 00:19:55,340 да је вредност која је у ствари Враћени није само инт 397 00:19:55,340 --> 00:19:56,380 али је такође негативан. 398 00:19:56,380 --> 00:20:02,150 >> Он лине 12 Проглашавам променљиву под називом Н и што га типа инт. 399 00:20:02,150 --> 00:20:07,500 А онда у складу 13 до 18 сам ради нешто док нешто је истина. 400 00:20:07,500 --> 00:20:11,040 Идем напред и штампање н јест, дебелог црева, а затим размак, 401 00:20:11,040 --> 00:20:12,800 као линији за корисника. 402 00:20:12,800 --> 00:20:16,410 >> Тада сам зовем гет_инт и складиштење своју тзв повратну вредност 403 00:20:16,410 --> 00:20:18,130 У том променљиве н. 404 00:20:18,130 --> 00:20:22,600 Али ја ћу да наставим да радим Истовремено је н већи од 0. 405 00:20:22,600 --> 00:20:27,960 Другим речима, ако корисник ме ан даје инт и тај број је већи од 0, 406 00:20:27,960 --> 00:20:31,180 Ерго, позитивна, идем да само настави репромптинг корисника, 407 00:20:31,180 --> 00:20:37,160 држати репромптинг, тако што их приморава да сарађивати и дај ми негативан инт. 408 00:20:37,160 --> 00:20:41,640 >> И када је н заправо негативе-- Претпостављам корисника на крају типови -50, 409 00:20:41,640 --> 00:20:46,710 онда док петља више није истина јер -50 није већи од 0. 410 00:20:46,710 --> 00:20:51,140 Тако да изађу из које петља логично и ретурн н. 411 00:20:51,140 --> 00:20:53,520 >> Али има једна ствар коју треба да урадите. 412 00:20:53,520 --> 00:20:56,190 И ја једноставно могу да урадим ово од копирања и лепљења 413 00:20:56,190 --> 00:20:58,540 једна линија кода на врху фајла. 414 00:20:58,540 --> 00:21:01,630 Морам да предајем Цланг, или обећавају да Цланг, 415 00:21:01,630 --> 00:21:04,630 експлицитно да ћу, заиста, иди и имплементирати 416 00:21:04,630 --> 00:21:06,020 ова функција гет_негативе_инт. 417 00:21:06,020 --> 00:21:07,674 То само може бити нижи у датотеци. 418 00:21:07,674 --> 00:21:09,840 Опет, сећам се да кланг чита ствари врха до дна, 419 00:21:09,840 --> 00:21:12,330 лева на десно, тако да не могу позвати функцију ако цланг 420 00:21:12,330 --> 00:21:15,330 не зна да ће постојати. 421 00:21:15,330 --> 00:21:18,430 >> Сада, нажалост, овај програм, као што неки од вас можда приметили, 422 00:21:18,430 --> 00:21:19,590 је већ луд. 423 00:21:19,590 --> 00:21:21,400 Пусти ме напред и да бугги3. 424 00:21:21,400 --> 00:21:26,904 Она саставља, тако да је мој проблем сада није се синтаксна грешка, као грешка текстуалне, 425 00:21:26,904 --> 00:21:29,570 Заправо ће бити логичан грешка коју сам намерно сам 426 00:21:29,570 --> 00:21:32,450 је као могућност да корак кроз шта се дешава. 427 00:21:32,450 --> 00:21:35,540 >> Ја идем напред Сада и покренути бугги3. 428 00:21:35,540 --> 00:21:37,490 И ја идем напред и не сарађују. 429 00:21:37,490 --> 00:21:39,494 Ја ћу му дати број 1. 430 00:21:39,494 --> 00:21:41,410 То се није допало, па то ме опет довело. 431 00:21:41,410 --> 00:21:42,147 >> Како око 2? 432 00:21:42,147 --> 00:21:43,021 3? 433 00:21:43,021 --> 00:21:43,520 50? 434 00:21:43,520 --> 00:21:44,740 Ниједан од оних који раде. 435 00:21:44,740 --> 00:21:46,890 Како би било -50? 436 00:21:46,890 --> 00:21:48,560 А програм изгледа да ради. 437 00:21:48,560 --> 00:21:49,970 >> Да пробам још једном. 438 00:21:49,970 --> 00:21:53,400 Пусти ме да пробам -1, изгледа да ради. 439 00:21:53,400 --> 00:21:56,380 Пусти ме да пробам -2, изгледа да ради. 440 00:21:56,380 --> 00:21:59,640 Пусти ме да пробам 0. 441 00:21:59,640 --> 00:22:01,684 Ха, то је нетачно. 442 00:22:01,684 --> 00:22:03,350 Сада смо си мало педантно овде. 443 00:22:03,350 --> 00:22:07,090 Али то је, заиста, био случај да 0 није ни позитивно ни негативно. 444 00:22:07,090 --> 00:22:11,150 И тако је чињеница да је мој програм је каже да је 0 негативна цео број, 445 00:22:11,150 --> 00:22:12,820 то није технички исправна. 446 00:22:12,820 --> 00:22:15,180 >> Е сад, зашто се то ради ово? 447 00:22:15,180 --> 00:22:16,270 Па, то би могло бити јасно. 448 00:22:16,270 --> 00:22:18,110 И, заиста, програм је требало да буде прилично једноставан 449 00:22:18,110 --> 00:22:19,670 тако да морамо нешто да истражују. 450 00:22:19,670 --> 00:22:25,870 >> Али хајде да се уведе трећи отклањање грешака техника овде зове дебуг50. 451 00:22:25,870 --> 00:22:27,750 Дакле, ово је програм да смо управо створили 452 00:22:27,750 --> 00:22:30,770 ове године под називом дебуг50 који ће вам омогућити 453 00:22:30,770 --> 00:22:34,130 да користе оно што се зове уграђени графички отклањање грешака у ЦС50 ИДЕ. 454 00:22:34,130 --> 00:22:38,400 А за отклањање грешака је само програм који генерално омогућава да покренете свој програм 455 00:22:38,400 --> 00:22:44,050 али корак по корак по корак, ред по ред по ред, паузирање, боде 456 00:22:44,050 --> 00:22:47,626 око, гледајући варијабли, тако да програм не само дува поред вас 457 00:22:47,626 --> 00:22:49,750 и брзо штампање нешто или не штампају нешто. 458 00:22:49,750 --> 00:22:53,250 То вам даје могућност, у хуман спеед, за интеракцију са њом. 459 00:22:53,250 --> 00:22:55,470 >> И за то, ти једноставно урадите следеће. 460 00:22:55,470 --> 00:22:58,479 Након састављања код, који сам већ урадио, бугги3, 461 00:22:58,479 --> 00:23:00,020 само напред и ради дебуг50 ./бугги. 462 00:23:00,020 --> 00:23:03,460 463 00:23:03,460 --> 00:23:06,760 Толико као хелп50 је да покренете хелп50 а онда команда, 464 00:23:06,760 --> 00:23:10,120 дебуг50 има покренете дебуг50 и онда име команде. 465 00:23:10,120 --> 00:23:14,440 >> Сада посматрајте шта се дешава на екрану, Са десне стране посебно. 466 00:23:14,440 --> 00:23:19,400 Када сам ударио Рун, све од Изненада се десна рука плоча 467 00:23:19,400 --> 00:23:20,419 отвара на екрану. 468 00:23:20,419 --> 00:23:22,210 И има доста иде на на први поглед. 469 00:23:22,210 --> 00:23:25,110 Али нема превише много разлога за бригу још. 470 00:23:25,110 --> 00:23:28,570 >> Ово ми показује све што се дешава у мом програму 471 00:23:28,570 --> 00:23:31,130 одмах и преко њих дугмад на врху је тада 472 00:23:31,130 --> 00:23:35,910 ми омогућава да се корак по мом коду на крају корак по корак по корак. 473 00:23:35,910 --> 00:23:37,140 Али не још увек. 474 00:23:37,140 --> 00:23:38,060 Погледајте шта се дешава. 475 00:23:38,060 --> 00:23:40,600 У мом прозору терминала Ја сам се затражи за н. 476 00:23:40,600 --> 00:23:44,560 И ја идем напред и сарађивати овог пута и унесите -1. 477 00:23:44,560 --> 00:23:48,770 И мада мало загонетно, -1 је негативан цео број, као што се очекивало. 478 00:23:48,770 --> 00:23:52,020 >> А онда дете изашао са Статус 0 гдбсервер изласка. 479 00:23:52,020 --> 00:23:55,180 ГДЦ, ГНУ Дебуггер, је име софтвера основи 480 00:23:55,180 --> 00:23:56,620 који спроводи овај програм за отклањање грешака. 481 00:23:56,620 --> 00:24:00,500 Али све то заиста значи, за отклањање грешака отишао јер мој програм отказ 482 00:24:00,500 --> 00:24:01,710 и све је било добро. 483 00:24:01,710 --> 00:24:06,020 Ако желим да заиста дебуг мој програм, Морам да превентивно рећи дебуг50, 484 00:24:06,020 --> 00:24:08,920 где желим да почне степпинг кроз мој код? 485 00:24:08,920 --> 00:24:11,750 >> И можда најједноставнији начин за то је следећи. 486 00:24:11,750 --> 00:24:15,300 Ако ја ховер над олук мог уредника овде, 487 00:24:15,300 --> 00:24:19,090 тако да заиста само у бочној траци овде, лево од линије број, 488 00:24:19,090 --> 00:24:21,870 приметимо да да ако само кликните Једном, ставио сам мало црвену тачку. 489 00:24:21,870 --> 00:24:24,460 И та мала црвена тачка, као знак стоп, значи, хеј, 490 00:24:24,460 --> 00:24:29,430 дебуг50, извршење пауза од мог кода тамо кад сам покренути овај програм. 491 00:24:29,430 --> 00:24:30,260 >> Дакле, хајде да урадимо то. 492 00:24:30,260 --> 00:24:37,340 Пусти ме напред и водим програм опет са дебуг50 ./бугги3, Ентер. 493 00:24:37,340 --> 00:24:40,110 А сада, обавештење, нешто разликује се догодило. 494 00:24:40,110 --> 00:24:42,440 Ја не буде затражено али у мом прозору терминала 495 00:24:42,440 --> 00:24:45,430 за све, јер нисам добила стигли у свом програму. 496 00:24:45,430 --> 00:24:47,950 Приметити да он лине 8 који је сада истакнут, 497 00:24:47,950 --> 00:24:51,720 и ту је мало стрелица на лево изрека, ви сте овде застао. 498 00:24:51,720 --> 00:24:55,030 Ова линија кода, ред 8, још није извршена. 499 00:24:55,030 --> 00:24:58,940 >> А шта је радознао, ако погледам овде са десне стране, 500 00:24:58,940 --> 00:25:03,530 приметити да сам је локална променљива, локални у смислу 501 00:25:03,530 --> 00:25:05,450 да је у тренутној функцији. 502 00:25:05,450 --> 00:25:08,920 И његова вредност, очигледно по дефаулту, и врста повољно, је 0. 503 00:25:08,920 --> 00:25:10,260 Али нисам тип 0. 504 00:25:10,260 --> 00:25:13,410 То само случајно његов стандардна вредност у овом тренутку. 505 00:25:13,410 --> 00:25:15,490 >> Па пусти ме само напред и уради то сада. 506 00:25:15,490 --> 00:25:18,680 Пусти ме само напред и на врх овде, ја сам 507 00:25:18,680 --> 00:25:20,970 ићи напред и кликните овај први икону која 508 00:25:20,970 --> 00:25:25,360 значи корак више, што значи да не прескачете да али корак преко ове линије кода, 509 00:25:25,360 --> 00:25:27,770 извршавање га успут. 510 00:25:27,770 --> 00:25:30,710 >> А сада, приметили, мој брз је управо променио. 511 00:25:30,710 --> 00:25:31,380 Зашто је то? 512 00:25:31,380 --> 00:25:33,639 Ја сам рекао дебуг50, водим ову линију кода. 513 00:25:33,639 --> 00:25:34,930 Шта ова линија кода урадити? 514 00:25:34,930 --> 00:25:35,960 Пита ме за инт. 515 00:25:35,960 --> 00:25:36,460 ОК. 516 00:25:36,460 --> 00:25:37,400 Пусти ме да сарађују. 517 00:25:37,400 --> 00:25:41,340 Пусти ме напред сада и тип -1, Ентер. 518 00:25:41,340 --> 00:25:42,920 А сада погледајте шта се променило. 519 00:25:42,920 --> 00:25:46,060 Са десне стране, мој локални променљива и 520 00:25:46,060 --> 00:25:48,200 је означен као -1 сада. 521 00:25:48,200 --> 00:25:49,810 И то је још увек типа инт. 522 00:25:49,810 --> 00:25:53,102 >> И обавештење, такође, мој такозвани Цалл Стацк, где сам паусе? 523 00:25:53,102 --> 00:25:54,810 Причаћемо више о ово у будућности. 524 00:25:54,810 --> 00:25:58,620 Али стек позива само се односи на оно функције су тренутно у покрету. 525 00:25:58,620 --> 00:26:00,040 За сада је то само главни. 526 00:26:00,040 --> 00:26:03,590 И сада једина локална променљива је сам са вредношћу 1. 527 00:26:03,590 --> 00:26:09,840 >> И када сам коначно корак у овој линији овде, са истом иконом у горњем десном углу, 528 00:26:09,840 --> 00:26:11,410 -1 Је негативан цео број. 529 00:26:11,410 --> 00:26:13,580 Сада је Зауставимо над тим коврџаве браце. 530 00:26:13,580 --> 00:26:14,740 Пустимо то урадио свој посао. 531 00:26:14,740 --> 00:26:17,300 Ја корак преко те линије, и воила. 532 00:26:17,300 --> 00:26:20,240 >> Дакле, није све што је ужасно просветљујућа још, 533 00:26:20,240 --> 00:26:23,550 али то се пусти ме паусе и да кроз логички 534 00:26:23,550 --> 00:26:24,870 шта овај програм ради. 535 00:26:24,870 --> 00:26:26,890 Али то није био погрешан случај. 536 00:26:26,890 --> 00:26:28,510 Хајде да то поново уради на следећи начин. 537 00:26:28,510 --> 00:26:31,340 >> Ја ћу да напустим тај тачку прекида он лине 8 са црвеном тачком. 538 00:26:31,340 --> 00:26:32,830 Ја ћу поново покренути дебуг50. 539 00:26:32,830 --> 00:26:34,400 То је аутоматски паузира овде. 540 00:26:34,400 --> 00:26:37,660 Али овај пут, уместо гази преко ове линије, 541 00:26:37,660 --> 00:26:42,290 пусти ме заправо унутра од гет_негативе_инт и схватити, 542 00:26:42,290 --> 00:26:45,530 зашто се то прихвата 0 као валидан одговор? 543 00:26:45,530 --> 00:26:47,990 >> Дакле, уместо кликом прекорачити. 544 00:26:47,990 --> 00:26:50,630 Ја идем напред и кликните корак у. 545 00:26:50,630 --> 00:26:54,030 И приметио да је то линија 8 Сада је истакао сада изненада 546 00:26:54,030 --> 00:26:56,900 постаје линија 17. 547 00:26:56,900 --> 00:26:59,947 >> Сада, није да је за отклањање грешака је прескочио линије 14 и 15 и 16. 548 00:26:59,947 --> 00:27:01,780 То је само нема ништа да ти покажем тамо. 549 00:27:01,780 --> 00:27:04,050 То су само декларисање променљиве, а онда је реч До 550 00:27:04,050 --> 00:27:05,390 а затим отворен коврџава браце. 551 00:27:05,390 --> 00:27:09,227 Једини функционални линија која је сочно заиста је ово овдје, 17. 552 00:27:09,227 --> 00:27:11,060 И ту имамо застаде аутоматски. 553 00:27:11,060 --> 00:27:13,870 >> Тако принтф ( "н.ис:") ;, тако То се још није десило. 554 00:27:13,870 --> 00:27:18,250 Дакле, идемо напред и кликните Степ Овер. 555 00:27:18,250 --> 00:27:20,326 Сада ми је брз, заиста, промењено у ( "н:"). 556 00:27:20,326 --> 00:27:22,450 Сада гет_инт, ја не идем да смета улази у, 557 00:27:22,450 --> 00:27:24,750 јер је функција била маде би ЦС50 у библиотеци. 558 00:27:24,750 --> 00:27:25,750 То је вероватно у праву. 559 00:27:25,750 --> 00:27:28,440 >> Тако да идем напред и на неки начин сарађују тако што ћете га даје 560 00:27:28,440 --> 00:27:30,590 инт, али не и негативна Инт. 561 00:27:30,590 --> 00:27:32,870 Па пусти ме напред и ударио 0. 562 00:27:32,870 --> 00:27:39,460 И сада шта се дешава овде кад сам доле на линију 21? 563 00:27:39,460 --> 00:27:40,890 Нисам опет понавља. 564 00:27:40,890 --> 00:27:43,320 Мени се не чини да се заглави у тој петљи. 565 00:27:43,320 --> 00:27:45,990 Другим речима, ова жута Бар не настави около, 566 00:27:45,990 --> 00:27:47,130 и око, и око. 567 00:27:47,130 --> 00:27:48,340 >> Сада, зашто је то тако? 568 00:27:48,340 --> 00:27:49,920 Па, Н, шта је н сада? 569 00:27:49,920 --> 00:27:53,280 Ја Можете погледати на локалном варијабле у отклањање грешака. 570 00:27:53,280 --> 00:27:53,816 н је 0. 571 00:27:53,816 --> 00:27:55,190 У реду, шта је моје стање? 572 00:27:55,190 --> 00:27:58,700 >> 20-- линија 20 је, добро, 0 је већи од 0. 573 00:27:58,700 --> 00:27:59,500 То није истина. 574 00:27:59,500 --> 00:28:01,020 0 није већи од 0. 575 00:28:01,020 --> 00:28:02,820 И тако сам побегао из овога. 576 00:28:02,820 --> 00:28:06,370 >> Па зато он лине 21, ако сам заиста настави, 577 00:28:06,370 --> 00:28:10,370 Ја ћу се вратити 0, чак иако сам требао одбити 0 578 00:28:10,370 --> 00:28:12,484 као заправо не буде негативан. 579 00:28:12,484 --> 00:28:14,650 Тако да сада, не знам стварно ни брига за отклањање грешака. 580 00:28:14,650 --> 00:28:16,900 Гот то, не треба да знам шта више се дешава. 581 00:28:16,900 --> 00:28:19,233 >> Тако да идем напред и само кликните на дугме Плаи, 582 00:28:19,233 --> 00:28:20,240 и нека овај завршити. 583 00:28:20,240 --> 00:28:23,440 Сада сам схватио да мој буг је очигледно на линији 20. 584 00:28:23,440 --> 00:28:25,160 То је моја логичка грешка. 585 00:28:25,160 --> 00:28:28,100 >> И оно што желим да уради да се то промени? 586 00:28:28,100 --> 00:28:32,500 Ако је проблем у томе нисам хватање 0, то је само логичка грешка. 587 00:28:32,500 --> 00:28:35,910 И могу рећи док је н већи или једнак 0, 588 00:28:35,910 --> 00:28:38,330 држати изнова и изнова подстицања корисника. 589 00:28:38,330 --> 00:28:41,050 >> Дакле, поново, једноставно грешка, можда чак и очигледно када си ме видео 590 00:28:41,050 --> 00:28:42,410 напише само неколико минута пре. 591 00:28:42,410 --> 00:28:44,570 Али понети овде је да са дебуг 50, 592 00:28:44,570 --> 00:28:46,850 и са дебуггинг софтвер генерално, 593 00:28:46,850 --> 00:28:51,370 имате ову нову пронашао снагу на шетња кроз сопствени код, погледајте 594 00:28:51,370 --> 00:28:55,590 преко тог десном панелу шта променљиве вредности су. 595 00:28:55,590 --> 00:28:57,700 Тако да не мора нужно морају да користе нешто 596 00:28:57,700 --> 00:29:00,630 као да епринтф да одштампате те вредности. 597 00:29:00,630 --> 00:29:04,430 Заправо можете их видети визуелно на екрану. 598 00:29:04,430 --> 00:29:08,920 >> Сада, иза тога, то је напоменути да постоји још једна техника која је 599 00:29:08,920 --> 00:29:09,890 заправо Супер заједнички. 600 00:29:09,890 --> 00:29:13,120 И можда се питате зашто ово мало момак овде је седео на сцени. 601 00:29:13,120 --> 00:29:16,490 Тако да је ова техника, генерално познат као Руббер Дуцк отклањање грешака, 602 00:29:16,490 --> 00:29:18,786 који је заиста само потврда чињенице 603 00:29:18,786 --> 00:29:20,660 које често када програмери пишу кода, 604 00:29:20,660 --> 00:29:22,650 нису нужно сарадњу са другима, 605 00:29:22,650 --> 00:29:24,030 или раде у заједничком окружењу. 606 00:29:24,030 --> 00:29:25,050 >> Они су нека врста код куће. 607 00:29:25,050 --> 00:29:25,910 Можда је касно ноћу. 608 00:29:25,910 --> 00:29:28,190 Покушавају да слици неке грешке у свом коду. 609 00:29:28,190 --> 00:29:29,330 И они једноставно не видим. 610 00:29:29,330 --> 00:29:30,329 >> И нема цимера. 611 00:29:30,329 --> 00:29:31,250 Нема ТФ. 612 00:29:31,250 --> 00:29:32,680 Нема ЦА около. 613 00:29:32,680 --> 00:29:36,440 Све што они имају на својој полици је овај мали гумени Дуцки. 614 00:29:36,440 --> 00:29:39,030 >> И тако Руббер Дуцк отклањање грешака само овај позив 615 00:29:39,030 --> 00:29:42,780 да смислим нешто као блесава као ово као прави створење, 616 00:29:42,780 --> 00:29:46,940 и заправо проћи кроз кода усмено на овај неживе објекту. 617 00:29:46,940 --> 00:29:49,230 Тако, на пример, ако ово је мој пример овде- 618 00:29:49,230 --> 00:29:52,470 и сећам се да раније проблем је био то, 619 00:29:52,470 --> 00:29:58,140 ако избришем ту прву линију кода, и идем напред и поново направити луд 0, 620 00:29:58,140 --> 00:30:01,220 сећам се да сам имао ово поруке о грешци овде. 621 00:30:01,220 --> 00:30:05,997 Тако да је идеја овде, смешно мада сам осећају у овом тренутку јавно радим, 622 00:30:05,997 --> 00:30:06,580 је то грешка. 623 00:30:06,580 --> 00:30:10,910 >> У реду, тако да је мој проблем је што имам имплицитно проглашен функцију библиотека. 624 00:30:10,910 --> 00:30:12,610 И да је функција библиотека је принтф. 625 00:30:12,610 --> 00:30:15,290 Децларе-- реду, прогласити подсећа ме на прототипова. 626 00:30:15,290 --> 00:30:18,930 >> То значи да је потребно да ствари реци преводилац унапред шта 627 00:30:18,930 --> 00:30:19,980 функција изгледа. 628 00:30:19,980 --> 00:30:20,930 Сачекај минут. 629 00:30:20,930 --> 00:30:23,580 Нисам имао стандардну ио.х. 630 00:30:23,580 --> 00:30:24,530 Много вам хвала. 631 00:30:24,530 --> 00:30:27,330 >> Дакле, само овај процес од-- тебе не морају да заправо имају патку. 632 00:30:27,330 --> 00:30:29,819 Али та идеја ходања сами кроз своју шифру 633 00:30:29,819 --> 00:30:31,610 тако да ни чуо сами, тако да 634 00:30:31,610 --> 00:30:35,620 схватити пропусте у свом примедбе, генерално идеја. 635 00:30:35,620 --> 00:30:38,910 >> И, можда више логички, не тако много са тим, али више укључени 636 00:30:38,910 --> 00:30:44,220 Пример смо урадили у бугги 3.Ц, можда се кроз њих 637 00:30:44,220 --> 00:30:45,310 као што следи. 638 00:30:45,310 --> 00:30:49,190 Дакле, све у реду, гумени Дуцки, ДДБ, ако хоћете. 639 00:30:49,190 --> 00:30:52,350 Овде имамо у својој основној функцији, Зовем се негативни инт. 640 00:30:52,350 --> 00:30:54,660 >> И ја сам се повратну вредност. 641 00:30:54,660 --> 00:31:00,410 Ја то чување на левој страни он лине 8 у променљивој Звао сам. 642 00:31:00,410 --> 00:31:02,380 У реду, али чекај, како је да се ту вредност? 643 00:31:02,380 --> 00:31:04,130 Пусти ме да погледамо функцију у реду 12. 644 00:31:04,130 --> 00:31:05,760 >> У линији 12, имамо добити негативну инт. 645 00:31:05,760 --> 00:31:08,190 Не предузимати никакве улаза, не врати инт, у реду. 646 00:31:08,190 --> 00:31:10,929 Изјављујем он лине 14 променљива н. 647 00:31:10,929 --> 00:31:12,220 То ће да сачувате цео број. 648 00:31:12,220 --> 00:31:13,760 То је оно што желим. 649 00:31:13,760 --> 00:31:18,480 >> Дакле, урадите следеће а н је-- нека ми поништи оно што је фиксни сам већ направио. 650 00:31:18,480 --> 00:31:22,710 Дакле док је н веће 0, одштампати Н јест, у реду. 651 00:31:22,710 --> 00:31:25,170 А онда позвати се Инт чува у н. 652 00:31:25,170 --> 00:31:30,160 А онда проверите да ли је н 0, н нисам-- то је то. 653 00:31:30,160 --> 00:31:31,910 Дакле, опет, не треба стварни патку. 654 00:31:31,910 --> 00:31:35,650 Али само ходање кроз себе Ваш код као интелектуалне вежбе 655 00:31:35,650 --> 00:31:37,720 Често ће вам помоћи схвате шта се дешава, 656 00:31:37,720 --> 00:31:41,170 за разлику од само радимо нешто овако, гледајући у екран, 657 00:31:41,170 --> 00:31:43,720 и не говори се кроз то, што искрено није 658 00:31:43,720 --> 00:31:46,270 готово као ефикасан технике. 659 00:31:46,270 --> 00:31:48,620 Тако да имате то, А број различитих техника 660 00:31:48,620 --> 00:31:52,102 за стварно отклањање грешака кода и проналажење грешку, што је све 661 00:31:52,102 --> 00:31:54,810 треба да буде алат у својој алата тако да ниси касно ноћу, 662 00:31:54,810 --> 00:31:57,660 Посебно, ви сте у дневној хале, или у радног времена, 663 00:31:57,660 --> 00:32:00,368 лупа главу против зид, покушавајући да реши неки проблем. 664 00:32:00,368 --> 00:32:02,020 Схватити да постоје софтверски алати. 665 00:32:02,020 --> 00:32:03,720 Постоје Руббер Дуцк алат. 666 00:32:03,720 --> 00:32:09,630 И ту је цела особље подржати чекају да пружи руку. 667 00:32:09,630 --> 00:32:13,120 >> Дакле, сада, реч о проблему сетови, и на оно што смо вам у нади 668 00:32:13,120 --> 00:32:15,620 изаћи из њих, и како идемо око процену. 669 00:32:15,620 --> 00:32:17,680 По програму курса је, ЦС50 проблем сетови 670 00:32:17,680 --> 00:32:22,320 се процењују на четири основне осе, тако на спеак-- обима, исправност, дизајн, 671 00:32:22,320 --> 00:32:23,060 и стил. 672 00:32:23,060 --> 00:32:25,910 И обим само се односи на колико комада сте загризао? 673 00:32:25,910 --> 00:32:28,080 Колико проблема сте пробали? 674 00:32:28,080 --> 00:32:30,110 Који ниво напора сте манифестује? 675 00:32:30,110 --> 00:32:35,750 >> Исправност је, да ли је програм рада као то би требало да по ЦС50 спецификацији 676 00:32:35,750 --> 00:32:38,640 Када обезбедити одређене улазе или неке излаза враћа? 677 00:32:38,640 --> 00:32:41,130 Дизајн је најсубјективнија од њих. 678 00:32:41,130 --> 00:32:43,360 А то је онај који ће узети најдужи да науче 679 00:32:43,360 --> 00:32:47,220 а најдуже да предаје, у па колико се своди на, 680 00:32:47,220 --> 00:32:49,530 колико написан је твој број? 681 00:32:49,530 --> 00:32:52,920 >> То је једна ствар само штампање исправно излаза или врате праве вредности. 682 00:32:52,920 --> 00:32:55,400 Али то радиш као ефикасније могуће? 683 00:32:55,400 --> 00:32:58,210 Да ли то радите поделу и освајају, или бинарни 684 00:32:58,210 --> 00:33:01,500 претраживање као што ћемо ускоро видети да смо урадили Пре две недеље са телефонском именику? 685 00:33:01,500 --> 00:33:04,670 Да ли постоје бољи начини да се реши Проблем него што тренутно овде? 686 00:33:04,670 --> 00:33:06,380 То је прилика за бољим дизајном. 687 00:33:06,380 --> 00:33:08,530 >> А онда стиле-- како Прилично је ваш број? 688 00:33:08,530 --> 00:33:12,370 Приметићете да сам прилично Посебно о увлачењем мој код, 689 00:33:12,370 --> 00:33:15,300 и пазећи своје променљиве се разумно имену. н 690 00:33:15,300 --> 00:33:19,660 док је кратак, је добро име за број, ја за бројање цео број, 691 00:33:19,660 --> 00:33:20,727 а за низ. 692 00:33:20,727 --> 00:33:22,560 И можемо да имамо више променљива имена стил. 693 00:33:22,560 --> 00:33:25,500 Стил је колико добро ваша шифра изгледа? 694 00:33:25,500 --> 00:33:26,600 И како читљив је то? 695 00:33:26,600 --> 00:33:29,650 >> И током времена, шта је ваш тас и поздрав ће учинити у току 696 00:33:29,650 --> 00:33:31,870 вас обезбедити са тим врста квалитетне повратне информације 697 00:33:31,870 --> 00:33:34,330 тако да ти не буде боље на тим разним аспектима. 698 00:33:34,330 --> 00:33:37,510 И у погледу начина на који оцијени сваки од ових праваца, 699 00:33:37,510 --> 00:33:40,080 то је обично са врло мало кашике тако да, генерално, 700 00:33:40,080 --> 00:33:41,680 добити осећај како добро радиш. 701 00:33:41,680 --> 00:33:45,680 И, заиста, ако сте добили резултат на неки од тих акес-- исправности, дизајну 702 00:33:45,680 --> 00:33:49,659 и стил еспециалли-- тај број ће генерално бити између 1 и 5. 703 00:33:49,659 --> 00:33:52,450 И, буквално, ако се 3 је на почетку семестра, 704 00:33:52,450 --> 00:33:53,977 ово је веома добра ствар. 705 00:33:53,977 --> 00:33:55,810 То значи још увек постоји простор за побољшање, 706 00:33:55,810 --> 00:33:58,490 који би се надају у узимајући класу по први пут. 707 00:33:58,490 --> 00:34:01,820 надам се да постоји нека мало плафона на који сте тежи постизању. 708 00:34:01,820 --> 00:34:03,970 И тако се 3 о најранији комада, 709 00:34:03,970 --> 00:34:06,550 ако не нека 2 је и 4 је, је, заиста, добра ствар. 710 00:34:06,550 --> 00:34:08,880 То је добро у домету, добро у очекивањима. 711 00:34:08,880 --> 00:34:11,421 >> И ако је ваш ум јури, чекај минут, три од пет. 712 00:34:11,421 --> 00:34:12,620 То је стварно 6 од 10. 713 00:34:12,620 --> 00:34:13,560 То је 60%. 714 00:34:13,560 --> 00:34:14,830 Мој Боже, то је Ф. 715 00:34:14,830 --> 00:34:15,870 >> Није. 716 00:34:15,870 --> 00:34:17,600 Није, у ствари, да. 717 00:34:17,600 --> 00:34:22,710 Уместо тога, то је прилика да се побољша у току семестра. 718 00:34:22,710 --> 00:34:25,580 А ако се неки Поорс, то су прилика 719 00:34:25,580 --> 00:34:29,199 да искористе радног времена, сигурно секције и друге ресурсе. 720 00:34:29,199 --> 00:34:32,840 >> Најбоље је прилика, заиста, да буду поносни на колико далеко сте 721 00:34:32,840 --> 00:34:34,520 доћи током семестра. 722 00:34:34,520 --> 00:34:38,199 Дакле, да схвате, ако ништа друго, три је добро. 723 00:34:38,199 --> 00:34:40,179 И омогућава простор за раст током времена. 724 00:34:40,179 --> 00:34:43,090 >> Како те осе се пондерисана, реално си 725 00:34:43,090 --> 00:34:46,745 провести највећи део свог времена се ствари на рад, а камоли правилно. 726 00:34:46,745 --> 00:34:49,120 Па исправност тежи се вредновати највише, као и 727 00:34:49,120 --> 00:34:51,360 ово мултипликативни фактор три. 728 00:34:51,360 --> 00:34:54,659 Дизајн је такође важно, али нешто што не нужно 729 00:34:54,659 --> 00:34:58,220 провести све те сати покушава да ствари само на посао. 730 00:34:58,220 --> 00:35:00,019 >> Па то је веигхтед више лагано мало. 731 00:35:00,019 --> 00:35:01,560 А онда стил је пондерисан најмање. 732 00:35:01,560 --> 00:35:03,710 Иако то није мање важно основи, 733 00:35:03,710 --> 00:35:05,990 то је само, можда, Најлакше у праву, 734 00:35:05,990 --> 00:35:08,440 опонашајући смо примере до у предавању и делу, 735 00:35:08,440 --> 00:35:11,080 са стварима красиво увучени, и коментарисао, 736 00:35:11,080 --> 00:35:14,320 и тако даље је међу најлакши ствари које треба урадити и како треба. 737 00:35:14,320 --> 00:35:16,960 Дакле, као што су, схватити да су то тачке 738 00:35:16,960 --> 00:35:19,000 који су релативно лако схватити. 739 00:35:19,000 --> 00:35:22,360 >> А сада реч о Ово-- академски искреност. 740 00:35:22,360 --> 00:35:25,150 Дакле, по курс је Наставни план и програм, видећете 741 00:35:25,150 --> 00:35:27,630 да курс има доста Мало језика око тога. 742 00:35:27,630 --> 00:35:31,380 И наравно узима питање академски искреност сасвим озбиљно. 743 00:35:31,380 --> 00:35:33,450 >> Имамо разлику, За боље или за горе, 744 00:35:33,450 --> 00:35:36,570 да су послати сваке године више студената за дисциплински поступак 745 00:35:36,570 --> 00:35:39,670 од већине било који други Наравно, да сам свестан. 746 00:35:39,670 --> 00:35:42,580 То није нужно указује на чињеницу 747 00:35:42,580 --> 00:35:46,340 да ЦС студената, или ЦС50 студената, аре мање поштени од твојих другова. 748 00:35:46,340 --> 00:35:49,090 Али је реалност да у овом свет, електронски, само 749 00:35:49,090 --> 00:35:50,990 имају технолошки средства за откривање ово. 750 00:35:50,990 --> 00:35:53,360 >> Важно је да се нама праведност преко класе 751 00:35:53,360 --> 00:35:58,550 да радимо то препознаје, и подићи питање када видимо ствари. 752 00:35:58,550 --> 00:36:01,980 И само да наслика слику, и стварно да помогне нешто попут овог лавабоа у, 753 00:36:01,980 --> 00:36:04,600 то су бројеви студенти у протеклих 10 година 754 00:36:04,600 --> 00:36:07,610 који су били укључени у неки таква питања академске поштења, 755 00:36:07,610 --> 00:36:10,990 са неким 32 ученика од јесени 2015, који 756 00:36:10,990 --> 00:36:13,760 је рећи да ми се ствар веома озбиљно. 757 00:36:13,760 --> 00:36:18,380 И, на крају, ови бројеви компонује, недавно, око 3%, 4% или тако 758 00:36:18,380 --> 00:36:19,120 класе. 759 00:36:19,120 --> 00:36:25,220 >> Дакле, за супер већину ученика чини се да су линије су јасне. 760 00:36:25,220 --> 00:36:27,940 Али треба имати то у смета, нарочито касно 761 00:36:27,940 --> 00:36:32,080 ноћу кад се бори са неки решење проблема сет, 762 00:36:32,080 --> 00:36:34,830 да постоје механизми за добијање себе боље 763 00:36:34,830 --> 00:36:37,870 подршка него што би Мислим, чак и у то време. 764 00:36:37,870 --> 00:36:40,514 Схватити да када примимо студент поднеске, прелазимо 765 00:36:40,514 --> 00:36:43,430 упореди сваки подношење ове године против сваког подношења прошле године, 766 00:36:43,430 --> 00:36:47,590 против сваког подношења из 2007. године, и од, гледајући, као и, 767 00:36:47,590 --> 00:36:49,931 код складишта на мрежи, дискусиони форуми, градилишта. 768 00:36:49,931 --> 00:36:51,806 И ми споменути ово, стварно, све у циљу 769 00:36:51,806 --> 00:36:56,040 потпуног обелодањивања, да ако неко други може наћи на мрежи, 770 00:36:56,040 --> 00:36:57,880 свакако, можемо и ми ток. 771 00:36:57,880 --> 00:37:00,100 Али, стварно, дух курса своди 772 00:37:00,100 --> 00:37:01,650 да ове клаузуле у програму. 773 00:37:01,650 --> 00:37:03,670 То је заиста само, буди разуман. 774 00:37:03,670 --> 00:37:06,680 >> И ако смо морали да појасните са само мало више језика, 775 00:37:06,680 --> 00:37:09,770 схвате да је суштина свега рад да достави овај курс 776 00:37:09,770 --> 00:37:10,954 Мора бити свој. 777 00:37:10,954 --> 00:37:13,870 Али у то, сигурно има могућности и подстицање, 778 00:37:13,870 --> 00:37:17,300 и педагошки вредност у окретање Остали-- сам је ТФС, ЦАС, 779 00:37:17,300 --> 00:37:20,760 ТАС, и други у класи, за подршку, а камоли пријатеље 780 00:37:20,760 --> 00:37:23,547 и цимери који су проучавали ЦС и програмирање пре. 781 00:37:23,547 --> 00:37:25,130 Па постоји додатак за то. 782 00:37:25,130 --> 00:37:28,180 И опште правило је ово-- када тразите помоц, 783 00:37:28,180 --> 00:37:31,470 можете показати свој код другима, али не можете да видите њихов. 784 00:37:31,470 --> 00:37:34,880 Дакле, чак и ако сте у радног времена, или у Д сали, или негде другде 785 00:37:34,880 --> 00:37:37,450 раде на неком комаду сету, радећи заједно са пријатељем, који 786 00:37:37,450 --> 00:37:40,160 је потпуно у реду, у крај дана вашег рада 787 00:37:40,160 --> 00:37:43,034 треба на крају припадамо једно од вас односно, а не 788 00:37:43,034 --> 00:37:45,700 бити неки заједнички напор, осим за финални пројекат где 789 00:37:45,700 --> 00:37:47,410 то је дозвољено и охрабрила. 790 00:37:47,410 --> 00:37:49,830 >> Схватите да ако сте бори са нечим 791 00:37:49,830 --> 00:37:52,520 и твој пријатељ управо догађа да буде бољи у овоме онда, 792 00:37:52,520 --> 00:37:55,130 или боље на том проблему од вас, или мало даље испред од тебе, 793 00:37:55,130 --> 00:37:57,330 то је потпуно разумно да се окрену са својим пријатељем и рећи, хеј, 794 00:37:57,330 --> 00:38:00,480 да ли би гледајући у мом коду овде, ми помогао да спот који је мој проблем је? 795 00:38:00,480 --> 00:38:03,760 И, надамо се, у интерес педагошког вредности 796 00:38:03,760 --> 00:38:07,040 да пријатељ не само кажу, па уради то, већ, 797 00:38:07,040 --> 00:38:09,917 шта ти недостаје он лине 6, или тако нешто? 798 00:38:09,917 --> 00:38:12,000 Али решење није за пријатеља поред тебе 799 00:38:12,000 --> 00:38:15,617 да кажем, ох, добро, овде, пусти ме повуци ово, и покажем своју решење за вас. 800 00:38:15,617 --> 00:38:16,450 Тако да је линија. 801 00:38:16,450 --> 00:38:18,670 Покажеш своју шифру на други, али не може 802 00:38:18,670 --> 00:38:22,350 видели њихов, предмет на други ограничења у програму курса је. 803 00:38:22,350 --> 00:38:24,760 >> Дакле, треба имати на уму овом тзв кајање клаузула 804 00:38:24,760 --> 00:38:27,560 у програму току као и, да ако почини неку радњу која 805 00:38:27,560 --> 00:38:30,476 није разумно, али донесите га пажња глава курса је 806 00:38:30,476 --> 00:38:34,240 у року од 72 сата, курс може да наметне санкције локалне да 807 00:38:34,240 --> 00:38:37,380 могу укључивати незадовољавајући или неуспеха оцена за рад подноси. 808 00:38:37,380 --> 00:38:41,410 Али наравно да не прослеђује битно за даљи дисциплински поступак, 809 00:38:41,410 --> 00:38:43,010 осим у случајевима поновљених дела. 810 00:38:43,010 --> 00:38:46,632 Другим речима, ако направите неки глуп, нарочито касно ноћу, одлука 811 00:38:46,632 --> 00:38:49,340 да следећег јутра или два дана касније, пробудити и схватити, 812 00:38:49,340 --> 00:38:50,870 о чему сам размишљао? 813 00:38:50,870 --> 00:38:53,890 Ти у ЦС50 има излаз за фиксирање тај проблем 814 00:38:53,890 --> 00:38:57,170 и поседовање до њега, тако да смо ће вас на пола пута срести и носити 815 00:38:57,170 --> 00:39:01,500 са њом у питању које је и образовни и вредан за тебе, 816 00:39:01,500 --> 00:39:04,200 али ипак казнени на неки начин. 817 00:39:04,200 --> 00:39:08,590 И сада, да се повратим, ово. 818 00:39:08,590 --> 00:39:10,570 >> [ВИДЕО РЕПРОДУКЦИЈА] 819 00:39:10,570 --> 00:39:13,540 >> [Мусиц плаиинг] 820 00:39:13,540 --> 00:39:58,090 821 00:39:58,090 --> 00:39:58,866 >> [Крај репродукције] 822 00:39:58,866 --> 00:40:00,490 Давид Ј Малан: У реду, вратили смо се. 823 00:40:00,490 --> 00:40:03,680 А сада да погледамо један од Први од наших стварног света доменима 824 00:40:03,680 --> 00:40:08,720 у ЦС50, уметност криптографије, уметност слање и примање 825 00:40:08,720 --> 00:40:11,840 тајне поруке, шифриране поруке ако хоћете, 826 00:40:11,840 --> 00:40:17,060 који се може дешифровати само ако имате неки кључни састојак који је пошиљалац има 827 00:40:17,060 --> 00:40:18,030 такође. 828 00:40:18,030 --> 00:40:22,120 Тако да мотивише ово ћемо узети Поглед на овоме овде, 829 00:40:22,120 --> 00:40:26,750 што је пример тајна декодер прстен који 830 00:40:26,750 --> 00:40:34,042 могу се користити у циљу схватити шта је тајна порука у ствари. 831 00:40:34,042 --> 00:40:35,750 У ствари, назад у дан у основној школи, 832 00:40:35,750 --> 00:40:38,787 ако сте икада послали тајне поруке неки пријатељ или неко заљубио у класи, 833 00:40:38,787 --> 00:40:40,620 сте можда мислили си била паметна 834 00:40:40,620 --> 00:40:46,530 од на парчету папира промене, као, А до Б, а Б Ц и Ц до Д, 835 00:40:46,530 --> 00:40:47,590 и тако даље. 836 00:40:47,590 --> 00:40:50,300 Али сте заправо шифровање Ваша информација, чак и 837 00:40:50,300 --> 00:40:53,300 ако је мало безначајно, није било да тешко наставник да оствари, 838 00:40:53,300 --> 00:40:55,675 па, ако само промените Б са А и Ц до Б, 839 00:40:55,675 --> 00:40:57,550 ви заправо схватити шта је била порука 840 00:40:57,550 --> 00:40:59,700 али сте били у шифрирање података. 841 00:40:59,700 --> 00:41:03,420 >> Ви само су то радили једноставно, слично као Ралпхиа овде 842 00:41:03,420 --> 00:41:07,934 у чувеном филму који игра прилично Ад Наусеум сваке зиме. 843 00:41:07,934 --> 00:41:08,600 [ВИДЕО РЕПРОДУКЦИЈА] 844 00:41:08,600 --> 00:41:11,180 Буди се зна да све то Ралф Паркер је овим 845 00:41:11,180 --> 00:41:14,070 именован за члана Мали Сироче Ени Вампире Диариес 846 00:41:14,070 --> 00:41:17,700 и има право на све почасти и користи се јавља њу. 847 00:41:17,700 --> 00:41:24,340 >> -Сигнед, Литтле Орпхан Анние, контра-потписали Пиерре Андре, мастилом. 848 00:41:24,340 --> 00:41:27,160 Почасти и користи, Већ у узрасту од девет. 849 00:41:27,160 --> 00:41:30,490 850 00:41:30,490 --> 00:41:31,825 >> [Схоутинг] 851 00:41:31,825 --> 00:41:33,750 852 00:41:33,750 --> 00:41:34,250 -Хајде. 853 00:41:34,250 --> 00:41:35,210 Хајде да завршимо са тим. 854 00:41:35,210 --> 00:41:39,530 Не треба Алл Тхат Јазз о шверцерима и пиратима. 855 00:41:39,530 --> 00:41:41,660 >> Слушај сутра за завршни авантура 856 00:41:41,660 --> 00:41:43,880 црне гусарског брода. 857 00:41:43,880 --> 00:41:46,650 Сада је време за Анние тајна порука 858 00:41:46,650 --> 00:41:49,840 за вас чланови Сецрет Цирцле. 859 00:41:49,840 --> 00:41:53,570 Не заборавите, дјецо, само чланове од Сецрет Цирцле Анние 860 00:41:53,570 --> 00:41:56,140 да декодира тајну поруку Анние. 861 00:41:56,140 --> 00:42:00,340 >> Запамтите, Анние зависе од тебе. 862 00:42:00,340 --> 00:42:02,880 Поставите своје игле Б2. 863 00:42:02,880 --> 00:42:05,230 Овде је порука. 864 00:42:05,230 --> 00:42:06,090 12, 11-- 865 00:42:06,090 --> 00:42:10,250 >> -Ја Сам у, свој први тајни састанак. 866 00:42:10,250 --> 00:42:13,890 >> -14, 11, 18, 16. 867 00:42:13,890 --> 00:42:15,780 >> Пјер је у великој гласовном вечерас. 868 00:42:15,780 --> 00:42:19,000 Могао бих рећи да је вечерас да Порука је заиста важно. 869 00:42:19,000 --> 00:42:22,694 >> -3, 25, то је порука од Анние сама. 870 00:42:22,694 --> 00:42:23,860 Не заборавите, никоме не говори. 871 00:42:23,860 --> 00:42:28,760 872 00:42:28,760 --> 00:42:32,930 >> -90 Секунди касније, ја сам у једини просторија у кући у којој дечак од девет 873 00:42:32,930 --> 00:42:37,040 могао да седи у приватности и декодирањем. 874 00:42:37,040 --> 00:42:39,730 Аха, Б! 875 00:42:39,730 --> 00:42:42,360 Отишао сам до следећег, Е. 876 00:42:42,360 --> 00:42:44,520 >> Прва реч је бити. 877 00:42:44,520 --> 00:42:49,032 С то долази лакше, У., 25-- 878 00:42:49,032 --> 00:42:51,733 >> Ох, хајде, Ралпхие, морам да идем! 879 00:42:51,733 --> 00:42:53,688 >> Одмах се доле, мама! 880 00:42:53,688 --> 00:42:54,188 Бого мој! 881 00:42:54,188 --> 00:42:58,116 882 00:42:58,116 --> 00:43:04,060 >> -Т, О, будите сигурни да-- бити сигурни да шта? 883 00:43:04,060 --> 00:43:05,970 Шта је било Литтле Орпхан Ени хоћете да кажете? 884 00:43:05,970 --> 00:43:07,264 Будите сигурни да шта? 885 00:43:07,264 --> 00:43:09,634 >> -Ралпхие, Енди мора го, молим те изаћи? 886 00:43:09,634 --> 00:43:10,480 >> У реду, мама! 887 00:43:10,480 --> 00:43:12,880 Одмах напоље! 888 00:43:12,880 --> 00:43:14,550 >> -Ја Сам ближе сада се. 889 00:43:14,550 --> 00:43:16,620 Тензија је била страшна. 890 00:43:16,620 --> 00:43:17,720 Шта је то? 891 00:43:17,720 --> 00:43:20,170 Судбина планете може држати у равнотежи. 892 00:43:20,170 --> 00:43:20,670 >> -Ралпхие! 893 00:43:20,670 --> 00:43:23,170 Анди мора да иде! 894 00:43:23,170 --> 00:43:26,890 >> Одмах се ван, забога! 895 00:43:26,890 --> 00:43:32,680 >> Скоро тамо, моји прсти летели, мој ум је челична замка, сваки пора вибрира. 896 00:43:32,680 --> 00:43:37,198 Било је скоро јасно, да, да, да. 897 00:43:37,198 --> 00:43:43,091 >> Буди сигуран да пије свој Овалтине. 898 00:43:43,091 --> 00:43:43,590 Овалтине? 899 00:43:43,590 --> 00:43:48,160 900 00:43:48,160 --> 00:43:49,430 Бедан комерцијални? 901 00:43:49,430 --> 00:43:53,046 902 00:43:53,046 --> 00:43:54,227 Курвин син. 903 00:43:54,227 --> 00:43:54,810 [Крај репродукције] 904 00:43:54,810 --> 00:43:57,390 Давид Ј Малан: У реду, тако то је био веома дуг пут 905 00:43:57,390 --> 00:44:00,660 увођења криптографију, као и Овалтине. 906 00:44:00,660 --> 00:44:04,470 У ствари, из овог старог оглас овде, зашто је Овалтине тако добро? 907 00:44:04,470 --> 00:44:09,470 То је концентрисана вађење зрео јечам слад, чиста кремаста кравље млеко, 908 00:44:09,470 --> 00:44:14,360 и посебно припремљени какао, заједно са природним фосфатида и витамина. 909 00:44:14,360 --> 00:44:18,240 Даље обогаћено додатни витамини Б и Д, њам. 910 00:44:18,240 --> 00:44:21,600 И даље можете добити, по свему судећи, на Амазон, као што смо овде. 911 00:44:21,600 --> 00:44:24,810 >> Али мотивација је била да увести криптографију, посебно 912 00:44:24,810 --> 00:44:28,340 врста криптографије познат као тајне криптографије. 913 00:44:28,340 --> 00:44:34,284 И као што име сугерише, цео безбедност тајног кључа крипто система, 914 00:44:34,284 --> 00:44:36,200 ако хоћете, методологија за само кодирање 915 00:44:36,200 --> 00:44:40,960 информације између двоје људи, јесте да само пошиљалац и прималац само 916 00:44:40,960 --> 00:44:46,980 знати тајну кеи-- неку вредност, неки тајна фраза, неки тајни број, који 917 00:44:46,980 --> 00:44:50,660 омогућава им да оба Енцрипт и дешифровање података. 918 00:44:50,660 --> 00:44:53,470 И криптографија, заиста, је само ово од недеље 0. 919 00:44:53,470 --> 00:44:56,715 >> То је проблем тамо где је инпута, као стварног порука на енглеском језику 920 00:44:56,715 --> 00:44:59,340 или било ком језику који вас желите да пошаљете некоме у класи, 921 00:44:59,340 --> 00:45:00,580 или преко интернета. 922 00:45:00,580 --> 00:45:03,840 Постоји неки излаз, која се одвија да се за кодирани поруку која вас 923 00:45:03,840 --> 00:45:05,250 желите да прималац прими. 924 00:45:05,250 --> 00:45:07,405 Па чак и ако је неко у средњи га прима превише, 925 00:45:07,405 --> 00:45:09,780 да их не желе да мора бити у стању да га дешифрује, 926 00:45:09,780 --> 00:45:12,840 због унутрашњости ове црна кутија, или алгоритам, 927 00:45:12,840 --> 00:45:17,650 је неки механизам, неки корак по корак упутства, за узимање тог улаза 928 00:45:17,650 --> 00:45:20,710 и њено претварање у излаз, у надамо се на сигуран начин. 929 00:45:20,710 --> 00:45:23,640 >> И, у ствари, постоји нека вокабулар у овом свету као што следи. 930 00:45:23,640 --> 00:45:26,100 Чист текст је реч компјутерски научник би 931 00:45:26,100 --> 00:45:28,449 користе да опишу улаз порука, као на енглеском 932 00:45:28,449 --> 00:45:31,240 или било шта у ствари језику који желите да пошаљете на неки други човека. 933 00:45:31,240 --> 00:45:35,450 А онда је шифрат је јагма на шифрована, или кодиран, 934 00:45:35,450 --> 00:45:36,520 верзија истог. 935 00:45:36,520 --> 00:45:38,750 >> Али постоји један други састојак овде. 936 00:45:38,750 --> 00:45:43,200 Постоји још један улаз у тајни кључ криптографија. 937 00:45:43,200 --> 00:45:45,200 И да је сама кључ, што је, генерално, 938 00:45:45,200 --> 00:45:48,930 као што ћемо видети, број, или слово, или реч, шта год 939 00:45:48,930 --> 00:45:51,980 алгоритам је заправо очекује. 940 00:45:51,980 --> 00:45:53,870 >> И како се дешифрује податке? 941 00:45:53,870 --> 00:45:55,110 Како се то дешифровати? 942 00:45:55,110 --> 00:45:57,950 Па, само преокренути излаза и улаза. 943 00:45:57,950 --> 00:46:00,900 >> Другим речима, када неко прима ваш шифровану поруку, 944 00:46:00,900 --> 00:46:03,740 он или она једноставно мора знати да исти кључ. 945 00:46:03,740 --> 00:46:05,700 Они су добили шифрат. 946 00:46:05,700 --> 00:46:09,530 И укључивањем та два инпути у крипто система, 947 00:46:09,530 --> 00:46:14,260 алгоритам, ова црна кутија, од треба да дође оригинални отворени текст. 948 00:46:14,260 --> 00:46:17,830 И то је веома висок ниво поглед на оно што криптографија је заправо 949 00:46:17,830 --> 00:46:18,590 све о. 950 00:46:18,590 --> 00:46:20,030 >> Дакле, идемо тамо. 951 00:46:20,030 --> 00:46:22,700 Хајде да сада погледамо испод аспиратор нечега 952 00:46:22,700 --> 00:46:26,000 ми смо узимали здраво за готово за прошле недеље, а за ову сесију 953 00:46:26,000 --> 00:46:27,629 овдје-- стринг. 954 00:46:27,629 --> 00:46:30,295 Стринг на крају дана је само низ знакова. 955 00:46:30,295 --> 00:46:33,610 >> То би могло бити здраво свет, или здраво Замила, или шта год. 956 00:46:33,610 --> 00:46:37,050 Али шта то значи се низ знакова? 957 00:46:37,050 --> 00:46:41,520 У ствари, ЦС50 библиотека даје нама тип података под називом низ. 958 00:46:41,520 --> 00:46:45,140 >> Али заправо нема таква ствар као стринг у Ц. 959 00:46:45,140 --> 00:46:49,450 То је заиста само низ карактер, карактер, лик, 960 00:46:49,450 --> 00:46:52,180 карактер, назад, то бацк, на назад, то бацк, да подржи унутра 961 00:46:52,180 --> 00:46:54,650 меморије рачунара, или РАМ. 962 00:46:54,650 --> 00:46:58,940 И ми ћемо гледати дубље у то у будућност када погледамо саму меморију, 963 00:46:58,940 --> 00:47:02,030 и коришћење, и претњи које су укључене. 964 00:47:02,030 --> 00:47:04,100 >> Али хајде да размотримо низ Замила. 965 00:47:04,100 --> 00:47:07,480 Па само име људски овде, Замила, 966 00:47:07,480 --> 00:47:12,030 то је низ карактера, З-А-М-М-Л-А. 967 00:47:12,030 --> 00:47:16,020 А сада претпоставимо да Замила име се чувају унутар рачунара 968 00:47:16,020 --> 00:47:16,880 Програм. 969 00:47:16,880 --> 00:47:20,830 >> Па, то, може се закључити да би требали моћи да погледамо те знакова 970 00:47:20,830 --> 00:47:21,590 појединачно. 971 00:47:21,590 --> 00:47:24,710 Дакле, ја ћу само да скренем мало бок око назива Замила је овде. 972 00:47:24,710 --> 00:47:31,580 И што је случај у Ц када те имају ниску, као Замила-- и можда 973 00:47:31,580 --> 00:47:34,940 да низ се вратио из функција као што гет стринг, 974 00:47:34,940 --> 00:47:38,540 можете заправо манипулисати то знак по знак. 975 00:47:38,540 --> 00:47:42,070 >> Сада, ово је Германе за разговор при руци, јер 976 00:47:42,070 --> 00:47:46,420 у криптографији ако желите да промените А до Б, а Б Ц и Ц до Д, 977 00:47:46,420 --> 00:47:49,650 и тако даље, морате бити у стању да погледате појединачних карактера 978 00:47:49,650 --> 00:47:50,190 у низу. 979 00:47:50,190 --> 00:47:52,695 Морате бити у стању да промени З на нешто друго, А 980 00:47:52,695 --> 00:47:55,280 на нешто друго, М до нешто друго, и тако даље. 981 00:47:55,280 --> 00:47:58,000 Па да морамо наћи начин, програмски, тако 982 00:47:58,000 --> 00:48:03,020 да говори, у Ц да би могли да се промени и поглед на појединим словима. 983 00:48:03,020 --> 00:48:05,690 И можемо да урадимо то на следећи начин. 984 00:48:05,690 --> 00:48:08,340 >> Пусти ме да се вратимо у ЦС50 ИДЕ. 985 00:48:08,340 --> 00:48:11,130 И пусти ме само напред и створити нову датотеку 986 00:48:11,130 --> 00:48:16,134 да ћу звати овај временски стринг0, као наш први такав пример, дот ц. 987 00:48:16,134 --> 00:48:18,300 И ја идем напред и вхип га на следећи начин. 988 00:48:18,300 --> 00:48:22,870 >> Тако укључују ЦС50.х, и онда укључују стандардни ио.х, 989 00:48:22,870 --> 00:48:25,990 који сам скоро увек ћу требали користити у својим програмима, најмање 990 00:48:25,990 --> 00:48:26,780 у почетку. 991 00:48:26,780 --> 00:48:32,180 инт празнину, а онда овде сам урадити конце добија се низ. 992 00:48:32,180 --> 00:48:35,260 А онда ћу само напред и уради то. 993 00:48:35,260 --> 00:48:37,460 Желим да идем напред и, као проверу исправности, 994 00:48:37,460 --> 00:48:43,607 само реци, здраво, посто ова, полу-дебелог црева, чини низ 0. 995 00:48:43,607 --> 00:48:44,690 Ух, шта сам урадио овде? 996 00:48:44,690 --> 00:48:45,930 Ох, нисам га укључите у. 997 00:48:45,930 --> 00:48:48,120 Дакле лекција научена, да Није било намерно. 998 00:48:48,120 --> 00:48:52,480 >> Дакле грешка, више процената конверзија од аргумената података. 999 00:48:52,480 --> 00:48:54,940 И ту, у линија 7-- реду, тако да имам, 1000 00:48:54,940 --> 00:48:56,690 под знацима навода, то је мој низ у принтф. 1001 00:48:56,690 --> 00:48:58,151 Имам знак одсто. 1002 00:48:58,151 --> 00:48:59,650 Али ми недостаје други аргумент. 1003 00:48:59,650 --> 00:49:03,190 >> Ја сам недостаје зарез с, која Ја нисам имао у претходним примерима. 1004 00:49:03,190 --> 00:49:06,650 Дакле, добра прилика да се поправи још једна грешка, случајно. 1005 00:49:06,650 --> 00:49:09,950 А сада пусти ме стринг0, тип у Замила. 1006 00:49:09,950 --> 00:49:10,970 У реду, здраво Замила. 1007 00:49:10,970 --> 00:49:14,144 >> Тако смо покренути ову врсту програма неколико различитих пута за сада. 1008 00:49:14,144 --> 00:49:16,310 Али, хајде да урадимо нешто што мало другачије овај пут. 1009 00:49:16,310 --> 00:49:19,450 Уместо да само штампање Замила је цело име са принтф, 1010 00:49:19,450 --> 00:49:21,350 Хајде да то урадимо знак по знак. 1011 00:49:21,350 --> 00:49:22,700 >> Идем да користи за петљу. 1012 00:49:22,700 --> 00:49:26,160 И ја ћу да се предам променљива бројања, звала сам. 1013 00:49:26,160 --> 00:49:33,530 И ја ћу задржати итератинг, тако док и је мања од дужине с. 1014 00:49:33,530 --> 00:49:35,930 >> Испоставило се, нисмо до прошли пут, 1015 00:49:35,930 --> 00:49:39,100 да в долази са функција зове Стирлинг. 1016 00:49:39,100 --> 00:49:42,690 Назад у дану, и уопште и даље при имплементацији функције, 1017 00:49:42,690 --> 00:49:45,405 људи често бирају веома суццинцт имена која врста звука 1018 00:49:45,405 --> 00:49:48,280 као оно што желите, иако је то недостаје неколико самогласнике или слова. 1019 00:49:48,280 --> 00:49:50,660 Дакле, Стерлинг је назив функције које 1020 00:49:50,660 --> 00:49:53,880 узима аргумент између заграде да би требало да буде ниска. 1021 00:49:53,880 --> 00:49:56,910 И то само враћа цео број, дужина тог низа. 1022 00:49:56,910 --> 00:50:00,580 >> Дакле, за петљу он лине 7 иде да почне бројање на сам једнако 0. 1023 00:50:00,580 --> 00:50:02,530 То ће за повећање И на свакој итерацији 1024 00:50:02,530 --> 00:50:04,350 од 1, као што смо радили неколико пута. 1025 00:50:04,350 --> 00:50:06,780 Али да ће само учинити ово до тачке 1026 00:50:06,780 --> 00:50:09,660 кад је дужина самог стринга. 1027 00:50:09,660 --> 00:50:14,520 >> Дакле, ово је начин, на крају, итератинг кроз знакове 1028 00:50:14,520 --> 00:50:17,430 у низу и јест следи. 1029 00:50:17,430 --> 00:50:20,670 Идем да одштампате није читав низ, али посто Ц, 1030 00:50:20,670 --> 00:50:22,860 један лик следи нови ред. 1031 00:50:22,860 --> 00:50:24,880 А онда ћу само напред, и морам 1032 00:50:24,880 --> 00:50:29,080 да кажем да желим да одштампате ИТХ карактер с. 1033 00:50:29,080 --> 00:50:33,450 >> Па ако и је променљива која указује индекс низа, где 1034 00:50:33,450 --> 00:50:37,230 сте у томе, треба да буду у стању да кажу, дај ми карактер ИТХ на с. 1035 00:50:37,230 --> 00:50:40,390 И ц има начина рада ово са заградама. 1036 00:50:40,390 --> 00:50:43,679 Једноставно рећи Тхе Наме Оф Тхе ниска, што је у овом случају је ова. 1037 00:50:43,679 --> 00:50:46,970 Онда користите угластим заградама, који су обично само изнад повратак или Ентер 1038 00:50:46,970 --> 00:50:48,110 тастер на тастатури. 1039 00:50:48,110 --> 00:50:52,410 И онда сте ставили индекс карактер који желите да одштампате. 1040 00:50:52,410 --> 00:50:55,960 Тако да је индекс ће бити нумбер-- 0 или 1, или 2, или 3, или дот, 1041 00:50:55,960 --> 00:50:57,590 тачка, тачка, неки други број. 1042 00:50:57,590 --> 00:51:00,920 >> И ми би да иде у бити прави број, јер ја 1043 00:51:00,920 --> 00:51:02,360 почети да броји на 0. 1044 00:51:02,360 --> 00:51:07,020 И по дефаулту, први знак у низу је по конвенцији 0. 1045 00:51:07,020 --> 00:51:09,230 А други лик је носач 1. 1046 00:51:09,230 --> 00:51:11,120 И трећи лик је држач 2. 1047 00:51:11,120 --> 00:51:13,630 И не желим да идем сувише далеко, али нећемо јер смо 1048 00:51:13,630 --> 00:51:17,780 да сам само повећавати до ње једнака дужини стринга. 1049 00:51:17,780 --> 00:51:20,210 И у том тренутку, ово петља ће престати. 1050 00:51:20,210 --> 00:51:25,550 >> Па пусти ме напред и сачувајте ово Програм, и трчање учинити низ 0. 1051 00:51:25,550 --> 00:51:28,400 Али сам забрљао. 1052 00:51:28,400 --> 00:51:35,390 Имплицитно проглашавајући библиотека функцију Стирлинг са типом таквим и суцх-- сада, 1053 00:51:35,390 --> 00:51:36,430 ово звучи познато. 1054 00:51:36,430 --> 00:51:37,440 Али то није принтф. 1055 00:51:37,440 --> 00:51:38,540 И није се низ. 1056 00:51:38,540 --> 00:51:40,480 >> Нисам забрљам у на исти начин овај пут. 1057 00:51:40,480 --> 00:51:45,100 Али приметите овде мало доле даље, укључују хеадер стринг.х, 1058 00:51:45,100 --> 00:51:47,210 експлицитно обезбеди декларација за Стирлинг. 1059 00:51:47,210 --> 00:51:48,820 Тако да је заправо траг тамо. 1060 00:51:48,820 --> 00:51:51,670 >> И заиста се испоставило ту је још један ударац фајл 1061 00:51:51,670 --> 00:51:53,970 да ми нисмо користили у класи још, али то је 1062 00:51:53,970 --> 00:51:56,480 међу онима доступан теби, под називом стринг.х. 1063 00:51:56,480 --> 00:52:00,930 И у том фајлу, стринг.х је Стирлинг проглашен. 1064 00:52:00,930 --> 00:52:05,220 Па пусти ме само напред, саве то, да стринг 1065 00:52:05,220 --> 00:52:08,040 0-- лепо, нема поруке о грешци овај пут. 1066 00:52:08,040 --> 00:52:12,290 >> ./стринг0 Замила, и Ја сам спреман да ударим Ентер, 1067 00:52:12,290 --> 00:52:16,710 на којој тачки гетстринг ће да врати стринг, ставио у с. 1068 00:52:16,710 --> 00:52:21,890 Онда је то за петљу ће поновити преко С: ликови један по један, 1069 00:52:21,890 --> 00:52:28,420 и штампати их једну по линији, јер Имао сам ту инверзна коса црта н на крају. 1070 00:52:28,420 --> 00:52:34,530 Тако да сам могао изоставити ту косу црту Н, а онда само штампање Замила све 1071 00:52:34,530 --> 00:52:37,460 у истој линији, ефикасно реимплементинг 1072 00:52:37,460 --> 00:52:38,999 принтф, што и није тако корисно. 1073 00:52:38,999 --> 00:52:40,540 Али у овом случају, ја сам то радио. 1074 00:52:40,540 --> 00:52:43,610 Ја сам заправо штампан један карактер у исто време, један по реду, 1075 00:52:43,610 --> 00:52:45,400 тако да смо заправо видели ефекат. 1076 00:52:45,400 --> 00:52:46,900 >> Али морам напоменути једну ствар овде. 1077 00:52:46,900 --> 00:52:48,930 А ми ћемо се вратити на ово у будућем недељу дана. 1078 00:52:48,930 --> 00:52:52,650 Испоставило се да је ово код је потенцијално луд. 1079 00:52:52,650 --> 00:52:56,560 >> Испоставило се да то стане стринг и неке друге функције у животу 1080 00:52:56,560 --> 00:53:00,280 не нужно увек врати оно што очекујете. 1081 00:53:00,280 --> 00:53:03,010 Знамо из класе ласт Време у то да се 1082 00:53:03,010 --> 00:53:04,960 стринг се требало да се врати стринг. 1083 00:53:04,960 --> 00:53:09,900 Али шта ако корисник укуца такву дуга реч, или став, или есеј 1084 00:53:09,900 --> 00:53:13,010 да постоји само није довољно меморија на рачунару да стане. 1085 00:53:13,010 --> 00:53:15,410 >> Као, шта ако нешто крене погрешно испод хаубе? 1086 00:53:15,410 --> 00:53:18,400 Можда неће догодити често, али то би се могло десити једном 1087 00:53:18,400 --> 00:53:21,520 у време, веома ретко. 1088 00:53:21,520 --> 00:53:25,460 И испоставило се да то стане стринг и функционише као тим не нужно 1089 00:53:25,460 --> 00:53:26,380 Увек се врати жице. 1090 00:53:26,380 --> 00:53:30,680 Они могу вратити неку вредност грешци, неки контролна вредност тако да говори, 1091 00:53:30,680 --> 00:53:32,612 то указује да нешто није у реду. 1092 00:53:32,612 --> 00:53:35,320 И ти би знао само то од пошто је сазнао у класи сада, 1093 00:53:35,320 --> 00:53:37,700 или сте прочитали још неку документацију. 1094 00:53:37,700 --> 00:53:43,120 Испоставило се да то стане стринг може да врати вредност која се зове нула. 1095 00:53:43,120 --> 00:53:46,220 Нулл је посебна вредност која ћемо вратити у будућем недељу дана. 1096 00:53:46,220 --> 00:53:50,420 Али за сада, само знам да ако желим да буде заиста прави у напредовању 1097 00:53:50,420 --> 00:53:52,650 коришћењем гет стринг, ја не треба само назвати, 1098 00:53:52,650 --> 00:53:56,870 и слепо користи своју повратну вредност, верујући да је то низ. 1099 00:53:56,870 --> 00:53:59,420 >> Први пут сам да кажем, хеј, чекај мало, само 1100 00:53:59,420 --> 00:54:03,380 наставити ако ова није једнако нула, где нула, опет, 1101 00:54:03,380 --> 00:54:04,660 само нека посебна вредност. 1102 00:54:04,660 --> 00:54:07,770 И то је једини Посебна вредност ви треба да бринемо гет стринг. 1103 00:54:07,770 --> 00:54:10,900 Гет стринг се или иде да врати стринг или нулл. 1104 00:54:10,900 --> 00:54:17,219 >> И ово знак узвика знак једнакости можда знате од можда математике 1105 00:54:17,219 --> 00:54:20,510 да би цртате знак једнакости са линија кроз њу да укаже нису једнаки. 1106 00:54:20,510 --> 00:54:23,135 То није уопште лик можете уписати на тастатури. 1107 00:54:23,135 --> 00:54:26,480 И тако у већини програмских језика, када желиш да кажеш нису једнаки, 1108 00:54:26,480 --> 00:54:29,160 користите узвичник, иначе познат као праска. 1109 00:54:29,160 --> 00:54:33,180 Дакле, ви кажете прасак једнак, који не значи једнако, логично. 1110 00:54:33,180 --> 00:54:38,060 То је исто као да нема веће од или једнак или мањи од 1111 00:54:38,060 --> 00:54:41,270 или једнака на тастатури да ради све у једном симболу. 1112 00:54:41,270 --> 00:54:44,020 Па зато, у последњих примера, јеси отворену заграду, а затим 1113 00:54:44,020 --> 00:54:48,670 знак једнакости, како би се до већи или, рецимо, мање од. 1114 00:54:48,670 --> 00:54:49,910 >> Дакле, шта је понети овде? 1115 00:54:49,910 --> 00:54:53,880 То је једноставно начин сада од увођење ове синтаксе, ова функција, 1116 00:54:53,880 --> 00:54:57,390 итератинг над појединац ликови у низу. 1117 00:54:57,390 --> 00:55:00,260 И баш као и они квадрат заграде омогућавају да се на њих, 1118 00:55:00,260 --> 00:55:03,790 размотрити ове квадратних заграда као врста алудирајући на то основни 1119 00:55:03,790 --> 00:55:06,040 дизајн, при чему сваки карактер унутар низа 1120 00:55:06,040 --> 00:55:10,180 је врста у кутији у негдје испод аспиратор у меморији рачунара. 1121 00:55:10,180 --> 00:55:12,340 >> Али хајде да направимо варијанту овога. 1122 00:55:12,340 --> 00:55:14,880 Испоставило се да је ово Програм је у праву. 1123 00:55:14,880 --> 00:55:18,810 Дакле, по ЦС50 је оса за процену код, то је сада исправно. 1124 00:55:18,810 --> 00:55:22,959 Поготово сада када сам проверу нула, овај програм никада не треба срушити. 1125 00:55:22,959 --> 00:55:24,500 И ја само знам то из искуства. 1126 00:55:24,500 --> 00:55:28,040 Али не постоји ништа друго што заиста можемо поћи наопако овде. 1127 00:55:28,040 --> 00:55:31,860 Али то није добро дизајниран, јер вратимо на основама. 1128 00:55:31,860 --> 00:55:34,450 >> Прво, принциплес-- шта фор петљи урадити? 1129 00:55:34,450 --> 00:55:36,290 А за петљу ради три ствари. 1130 00:55:36,290 --> 00:55:39,340 То покреће неки вредност, ако га замолити да. 1131 00:55:39,340 --> 00:55:41,770 Она проверава стање. 1132 00:55:41,770 --> 00:55:45,380 А онда након сваког понављање, након сваког циклуса, 1133 00:55:45,380 --> 00:55:49,330 то повећава неки вредност, или вредности, овде. 1134 00:55:49,330 --> 00:55:50,600 >> Дакле, шта то значи? 1135 00:55:50,600 --> 00:55:52,940 Ми иницијализујемо сам до 0. 1136 00:55:52,940 --> 00:55:58,610 Ми Проверите и уверите се да је мање од дужина с, што је З-А-М-И-Л-А, 1137 00:55:58,610 --> 00:55:59,900 тако што је мање од 6. 1138 00:55:59,900 --> 00:56:02,590 И, заиста, 0, када је мање од 6. 1139 00:56:02,590 --> 00:56:05,580 >> Ми одштампати З од назива Замила је. 1140 00:56:05,580 --> 00:56:08,080 Онда смо се повећати И од 0 до 1. 1141 00:56:08,080 --> 00:56:11,290 Затим смо проверили, је 1 мање од дужине с? 1142 00:56:11,290 --> 00:56:13,270 Дужина с је 6. 1143 00:56:13,270 --> 00:56:13,950 Да, јесте. 1144 00:56:13,950 --> 00:56:16,880 >> Тако да штампате у име Замила је, ЗА. 1145 00:56:16,880 --> 00:56:20,090 Ми инцремент И од 0, до 1, до 2. 1146 00:56:20,090 --> 00:56:23,720 Затим смо проверили, је 2 мање од дужина имена Замила је. 1147 00:56:23,720 --> 00:56:25,380 6- па 2 је мање од 6. 1148 00:56:25,380 --> 00:56:30,460 Да, хајде да одштампате сада М у Замила име, трећи лик. 1149 00:56:30,460 --> 00:56:34,110 >> Овде је кључно да на сваки понављање приче, ја проверавам, 1150 00:56:34,110 --> 00:56:37,810 ис и мање од дужине Замила? 1151 00:56:37,810 --> 00:56:40,350 Али цака је у томе Стерлинг није власништво. 1152 00:56:40,350 --> 00:56:43,100 Они од вас који су програмирани пре у Јави или другим језицима 1153 00:56:43,100 --> 00:56:46,310 можда зна дужину стринг особина, само су неке само за читање вредности. 1154 00:56:46,310 --> 00:56:50,220 >> У Ц у овом случају, ако је ово функција која је буквално 1155 00:56:50,220 --> 00:56:53,520 бројање ликови у Замила сваки пут 1156 00:56:53,520 --> 00:56:54,740 зовемо ту функцију. 1157 00:56:54,740 --> 00:56:58,500 Сваки пут питате рачунар да користи Стерлинг, то је бацити поглед на Замила, 1158 00:56:58,500 --> 00:57:01,960 и говорећи З-А-М-И-Л-А, 6. 1159 00:57:01,960 --> 00:57:02,962 И враћа 6. 1160 00:57:02,962 --> 00:57:04,920 Следећи пут када зовем то унутра да за петље, 1161 00:57:04,920 --> 00:57:08,610 то ће погледати Замила опет кажу З-А-М-И-Л-А, 6. 1162 00:57:08,610 --> 00:57:10,320 И то ће да се врати 6. 1163 00:57:10,320 --> 00:57:12,980 Дакле, шта је глупо о овом дизајну? 1164 00:57:12,980 --> 00:57:17,700 >> Зашто је мој број није 5 од 5 за дизајн сада, да тако кажем? 1165 00:57:17,700 --> 00:57:20,600 Па, ја постављам питање непотребно. 1166 00:57:20,600 --> 00:57:23,030 Радим више посла него што је потребно. 1167 00:57:23,030 --> 00:57:25,370 >> Дакле, иако одговор је тачан, ја сам 1168 00:57:25,370 --> 00:57:29,560 пита рачунар, што је опет дужина Замила, 1169 00:57:29,560 --> 00:57:31,380 и опет, и опет, и опет? 1170 00:57:31,380 --> 00:57:33,980 И тај одговор је никада неће променити. 1171 00:57:33,980 --> 00:57:35,900 То је увек бити 6. 1172 00:57:35,900 --> 00:57:39,730 >> Па боље решење од овога бити овако следећа верзија. 1173 00:57:39,730 --> 00:57:43,390 Пусти ме напред и стави га у посебан фајл који се зове стринг1.ц, 1174 00:57:43,390 --> 00:57:44,990 само да би га одвојити. 1175 00:57:44,990 --> 00:57:47,260 И испоставило се да у фор петља, ви заправо могу 1176 00:57:47,260 --> 00:57:50,210 прогласити више променљивих одједном. 1177 00:57:50,210 --> 00:57:53,460 >> Па ћу да задржим и поставите га на 0. 1178 00:57:53,460 --> 00:57:56,190 Али ја такође да додати зарез, и кажу, 1179 00:57:56,190 --> 00:58:01,050 дај ми променљиву названу н, чији вредност једнака дужини строковое с. 1180 00:58:01,050 --> 00:58:09,410 А сада, молим вас да ми стање Докле год је мање од н. 1181 00:58:09,410 --> 00:58:14,140 >> Дакле, на овај начин, логика је идентични на крају дана. 1182 00:58:14,140 --> 00:58:18,280 Али ја Сјећање на вредност 6, у овом случају. 1183 00:58:18,280 --> 00:58:19,780 Шта је дужина имена Замила је? 1184 00:58:19,780 --> 00:58:20,860 И ја га ставља на н. 1185 00:58:20,860 --> 00:58:23,050 >> А ја увек проверавамо услов сваки пут. 1186 00:58:23,050 --> 00:58:24,300 Је 0 мање од 6? 1187 00:58:24,300 --> 00:58:25,600 Да ли је 1 мање од 6? 1188 00:58:25,600 --> 00:58:28,600 Да ли је 2 мање од 6, и тако даље? 1189 00:58:28,600 --> 00:58:31,914 >> Али ја не тражим рачунар опет, и опет, шта је 1190 00:58:31,914 --> 00:58:33,080 дужина имена Замила је? 1191 00:58:33,080 --> 00:58:34,320 Шта је дужина имена Замила је? 1192 00:58:34,320 --> 00:58:35,986 Шта је дужина имена ове Замила је? 1193 00:58:35,986 --> 00:58:40,440 Буквално сам на уму да прво и одговорити само у овом другом променљивом н. 1194 00:58:40,440 --> 00:58:45,280 Тако да сада не би било само исправан, али и добро осмишљен. 1195 00:58:45,280 --> 00:58:46,670 >> Сада, шта је са стилом? 1196 00:58:46,670 --> 00:58:48,866 Ја сам именовао своје променљиве добро, ја бих. 1197 00:58:48,866 --> 00:58:50,240 Они су одмах Супер сажето. 1198 00:58:50,240 --> 00:58:52,090 И то је сасвим у реду. 1199 00:58:52,090 --> 00:58:55,120 >> Ако имате само један стринг у програму, 1200 00:58:55,120 --> 00:58:56,860 могао би зову и за низ. 1201 00:58:56,860 --> 00:58:59,370 Ако имате само једну променљиву за бројање у програму, 1202 00:58:59,370 --> 00:59:00,710 Ви као би то могло назвати и. 1203 00:59:00,710 --> 00:59:03,500 Ако имате дужину, Н је супер уобичајено и. 1204 00:59:03,500 --> 00:59:05,800 Али нисам коментарисао ниједан од мог кода. 1205 00:59:05,800 --> 00:59:09,200 >> Нисам обавијестио реадер-- да ли је то мој ЕЦ, или ТА, 1206 00:59:09,200 --> 00:59:12,460 или само цоллеагуе-- оно што би требало да се дешава у овом програму. 1207 00:59:12,460 --> 00:59:15,760 И тако да се добар стил, оно што бих желео да урадим 1208 00:59:15,760 --> 00:59:24,580 је ово-- нешто као питати корисника за улаз. 1209 00:59:24,580 --> 00:59:26,670 И ја могу да реврите ово на разне начине. 1210 00:59:26,670 --> 00:59:35,630 >> Уверите се да успела-- се сигурно добију низ вратио стринг. 1211 00:59:35,630 --> 00:59:40,280 А онда у овдје-- и ово је можда најважнији цоммент-- Итерате 1212 00:59:40,280 --> 00:59:44,450 над ликовима у с један по један. 1213 00:59:44,450 --> 00:59:47,060 И ја могао користити било Избор енглеског језика 1214 00:59:47,060 --> 00:59:49,650 овде да опише сваки од ових комади кода. 1215 00:59:49,650 --> 00:59:52,740 >> Приметићете да нисам ставила коментарисати на свакој линији кода, 1216 00:59:52,740 --> 00:59:55,690 заправо само на занимљив они, оне које 1217 00:59:55,690 --> 00:59:59,460 има неко значење које сам могао желите да се Супер Цлеар некоме 1218 00:59:59,460 --> 01:00:00,460 читање мој код. 1219 01:00:00,460 --> 01:00:02,920 И зашто зовете добити ниска питати корисника за улаз? 1220 01:00:02,920 --> 01:00:05,450 Чак да једна није нужно све то описни. 1221 01:00:05,450 --> 01:00:09,340 Али помаже испричати причу, јер је друга линија у причи је, уверите се 1222 01:00:09,340 --> 01:00:10,740 добити низ вратио стринг. 1223 01:00:10,740 --> 01:00:14,260 >> И трећи ред у причи је, вршите итерацију кроз знакове у с једне 1224 01:00:14,260 --> 01:00:15,380 у време. 1225 01:00:15,380 --> 01:00:17,920 И сада само за сваки случај, Ја идем напред и додати 1226 01:00:17,920 --> 01:00:24,560 још један коментар да само каже штампа и-ти карактер у с. 1227 01:00:24,560 --> 01:00:26,520 Сада, шта сам то урадио на крају дана? 1228 01:00:26,520 --> 01:00:29,190 >> Ја сам додао неке енглески речи у виду коментара. 1229 01:00:29,190 --> 01:00:32,700 Симбол Сласх Сласх значи, хеј, компјутер ово је за човека, 1230 01:00:32,700 --> 01:00:33,820 није за тебе, рачунар. 1231 01:00:33,820 --> 01:00:35,119 Дакле, они логично игнорисали. 1232 01:00:35,119 --> 01:00:35,910 Они су само тамо. 1233 01:00:35,910 --> 01:00:39,830 >> И, заиста, ЦС50 САТА их приказује као сива, као корисни, али не кључни 1234 01:00:39,830 --> 01:00:41,000 програму. 1235 01:00:41,000 --> 01:00:42,570 Обратите пажњу шта сада може да уради. 1236 01:00:42,570 --> 01:00:44,950 Да ли знате Ц програмирање или не, ви 1237 01:00:44,950 --> 01:00:47,722 могу само стајати на све ово Програм, и ским коментаре. 1238 01:00:47,722 --> 01:00:50,180 Аск корисника за улаз, уверите се добити низ вратио ниску, 1239 01:00:50,180 --> 01:00:53,009 вршите итерацију кроз знакове у с један по један, принт карактер 1240 01:00:53,009 --> 01:00:55,550 и-ти знак у успела-- ви не чак ни да погледа код 1241 01:00:55,550 --> 01:00:57,270 да разуме шта овај програм ради. 1242 01:00:57,270 --> 01:01:00,280 И, још боље, ако се осврнемо у овом програму у недељу или две, 1243 01:01:00,280 --> 01:01:02,280 или месец, или годину дана, и ви немате 1244 01:01:02,280 --> 01:01:04,420 гледао у коду, Покушавам да се сетим, 1245 01:01:04,420 --> 01:01:06,630 шта сам покушавао да радим са овим кодом? 1246 01:01:06,630 --> 01:01:07,770 >> Ви сте сами рекли. 1247 01:01:07,770 --> 01:01:11,660 Ви сте га описали за себе, или неки колега, или ТА, или ЕЦ. 1248 01:01:11,660 --> 01:01:14,860 Па то би сада било исправан, и добар дизајн, 1249 01:01:14,860 --> 01:01:18,210 и коначно добар стил и. 1250 01:01:18,210 --> 01:01:19,990 Учини то на уму. 1251 01:01:19,990 --> 01:01:22,200 >> Дакле, постоји један други што ћу да урадим овде 1252 01:01:22,200 --> 01:01:28,240 да сада може да открије шта је тачно дешава испод хаубе. 1253 01:01:28,240 --> 01:01:30,390 Тако да је ова функција у Ц, и другим језицима, 1254 01:01:30,390 --> 01:01:33,010 под називом типецастинг да ни имплицитно 1255 01:01:33,010 --> 01:01:37,250 или експлицитно вам омогућује претворити од једне врсте података у други. 1256 01:01:37,250 --> 01:01:39,800 Ми смо се бавили тако далеко је данас са жицама. 1257 01:01:39,800 --> 01:01:41,250 >> И жице су ликови. 1258 01:01:41,250 --> 01:01:44,910 Али сећам из недеље 0, што су ликови? 1259 01:01:44,910 --> 01:01:49,334 Ликови су само апстракција на врху нумберс-- децималних бројева, 1260 01:01:49,334 --> 01:01:52,500 и децимални бројеви су заправо само апстракција на врху бинарних бројева, 1261 01:01:52,500 --> 01:01:53,720 као што је дефинисано. 1262 01:01:53,720 --> 01:01:55,540 >> Дакле, ликови су бројеви. 1263 01:01:55,540 --> 01:01:58,410 И бројеви су ликови, само у зависности од контекста. 1264 01:01:58,410 --> 01:02:01,250 И испоставило се да је унутра компјутерског програма, 1265 01:02:01,250 --> 01:02:06,830 Можете ли навести како желите да погледате на битова унутар тог програма? 1266 01:02:06,830 --> 01:02:10,400 >> Подсетимо од недеље 0 које смо имали Асции, који је управо овај код 1267 01:02:10,400 --> 01:02:11,620 мапирање писма бројевима. 1268 01:02:11,620 --> 01:02:13,660 И ми смо рекли, главни А је 65. 1269 01:02:13,660 --> 01:02:15,860 Цапитал Б је 66, и тако даље. 1270 01:02:15,860 --> 01:02:20,500 >> И обавештење, ми у суштини карактера на топ ред овде, јер би их, Ц зову, 1271 01:02:20,500 --> 01:02:23,400 карактера, и онда ИНТС на другом реду. 1272 01:02:23,400 --> 01:02:28,180 И испоставило се да можете претворити неприметно између та два, типично. 1273 01:02:28,180 --> 01:02:30,042 И ако желимо да радимо ово намерно, ми 1274 01:02:30,042 --> 01:02:31,750 можда желети да се позабаве овако нешто. 1275 01:02:31,750 --> 01:02:33,590 >> Ми би да претворити горњи случај да смањи 1276 01:02:33,590 --> 01:02:35,330 случај, и мала слова у великим словима. 1277 01:02:35,330 --> 01:02:38,000 И испоставило се да постоји заправо образац овде 1278 01:02:38,000 --> 01:02:39,900 можемо прихватити за који тренутак. 1279 01:02:39,900 --> 01:02:44,120 Али хајде да прво погледамо један Пример експлицитно ради ово. 1280 01:02:44,120 --> 01:02:46,340 >> Ја ћу се вратити у ЦС50 ИДЕ. 1281 01:02:46,340 --> 01:02:50,640 Идем да се створи фајл под називом АСЦИИ 0.ц. 1282 01:02:50,640 --> 01:02:55,960 И ја идем напред и додати мој стандардни ио.х на врху, маин празнина 1283 01:02:55,960 --> 01:02:57,370 на врху моје функције. 1284 01:02:57,370 --> 01:03:02,700 А онда ћу да урадите фолловинг-- фор петљи од и једнако, 1285 01:03:02,700 --> 01:03:04,610 рецимо, 65. 1286 01:03:04,610 --> 01:03:10,460 >> А онда сам ће бити мање од 65 плус 26 слова у алфабету. 1287 01:03:10,460 --> 01:03:12,640 Па ћу компјутер до математику за мене тамо. 1288 01:03:12,640 --> 01:03:15,100 А онда у ову петљу, шта ћу да штампају? 1289 01:03:15,100 --> 01:03:19,230 >> % Ц је% и обрнуте косе црте бр. 1290 01:03:19,230 --> 01:03:21,290 А сада желим да прикључите два вредности. 1291 01:03:21,290 --> 01:03:24,530 Ја привремено сам ставио питање означава ту да позове питање. 1292 01:03:24,530 --> 01:03:29,940 >> Желим да поновити од 65 па надаље за 26 слова абецеде, 1293 01:03:29,940 --> 01:03:35,190 штампа се на сваке итерације да лика саставни еквивалент. 1294 01:03:35,190 --> 01:03:38,299 Другим речима, желим да Посматрајте преко 26 бројева штампање 1295 01:03:38,299 --> 01:03:41,590 шта је АСЦИИ карактер, писмо, и оно што је одговарајући број је- 1296 01:03:41,590 --> 01:03:44,650 стварно само поновном графикон из тог слајда. 1297 01:03:44,650 --> 01:03:47,010 Па шта би ови упитници бити? 1298 01:03:47,010 --> 01:03:51,760 >> Па, испоставило се да је други треба само да буде променљива и. 1299 01:03:51,760 --> 01:03:53,860 Хоћу да видим то као број. 1300 01:03:53,860 --> 01:03:58,920 И средњи расправа овде, ја могу да кажем рачунар 1301 01:03:58,920 --> 01:04:03,470 за лечење те цео број И као лик, како 1302 01:04:03,470 --> 01:04:05,880 да га замени овде посто Ц. 1303 01:04:05,880 --> 01:04:07,990 >> Другим речима, ако је људски програмер, знам 1304 01:04:07,990 --> 01:04:09,865 ово су само бројеви на крају дана. 1305 01:04:09,865 --> 01:04:12,500 И знам да 65 треба мап до неког карактера. 1306 01:04:12,500 --> 01:04:15,310 Са овим експлицитног цаст, са загради, 1307 01:04:15,310 --> 01:04:18,840 назив врсте података који желите да претворити, и затвореног заграде, 1308 01:04:18,840 --> 01:04:21,200 можете рећи рачунар, хеј, рачунар, 1309 01:04:21,200 --> 01:04:24,130 претворити овај цео број у знак. 1310 01:04:24,130 --> 01:04:26,250 >> Дакле, када сам покренути ово програм након прикупљања, 1311 01:04:26,250 --> 01:04:29,740 Да видимо шта добијам-- да АСЦИИ 0. 1312 01:04:29,740 --> 01:04:33,020 Проклетство, шта сам урадио погрешно овде? 1313 01:04:33,020 --> 01:04:35,884 Коришћење црно идентификатора, У реду, не намерно, 1314 01:04:35,884 --> 01:04:37,800 али хајде да видимо да ли не могу Разлог кроз ово. 1315 01:04:37,800 --> 01:04:41,220 >> Дакле, линија фиве-- па нисам добио далеко пре него што зезнути. 1316 01:04:41,220 --> 01:04:42,140 То је у реду. 1317 01:04:42,140 --> 01:04:46,560 Дакле, једнако линија 5 за и 65-- видим. 1318 01:04:46,560 --> 01:04:50,130 Дакле, запамтите да је у Ц, за разлику од неких језици ако имате претходно програмирање 1319 01:04:50,130 --> 01:04:52,190 искуство, имате рећи рачунар, 1320 01:04:52,190 --> 01:04:55,040 за разлику од Сцратцх, шта тип променљиве је. 1321 01:04:55,040 --> 01:04:56,860 >> И заборавио сам кључну фразу овде. 1322 01:04:56,860 --> 01:04:59,200 У складу пет, ја сам почео да користим и. 1323 01:04:59,200 --> 01:05:01,560 Али нисам рекла Ц који подаци тип је. 1324 01:05:01,560 --> 01:05:04,570 Тако да идем у ту и кажу, ах, чине га цео број. 1325 01:05:04,570 --> 01:05:07,050 >> Сада ћу да наставим и компајлирате. 1326 01:05:07,050 --> 01:05:08,080 То средили. 1327 01:05:08,080 --> 01:05:12,660 ./асции0 Ентер, то је кул. 1328 01:05:12,660 --> 01:05:15,360 Не само да је супер брз за упита компјутер ово питање, 1329 01:05:15,360 --> 01:05:18,885 уместо да гледа га на слајду, то одштампан једну по линији, А је 65, 1330 01:05:18,885 --> 01:05:24,860 Б 66, скроз довн-- од И ово 26 тимес-- урадила са словима з, 1331 01:05:24,860 --> 01:05:25,630 што је 90. 1332 01:05:25,630 --> 01:05:27,790 И, у ствари, благо интелигентнији би 1333 01:05:27,790 --> 01:05:31,030 су за мене да се не ослањају на рачунару да бисте додали 26. 1334 01:05:31,030 --> 01:05:34,060 Ја могли обавити 90, тако дуго 1335 01:05:34,060 --> 01:05:37,390 као што не двапут направити исту грешку. 1336 01:05:37,390 --> 01:05:41,880 Желим да идем горе кроз З, не само горе кроз год. 1337 01:05:41,880 --> 01:05:44,000 >> Дакле, то је експлицитно гипса. 1338 01:05:44,000 --> 01:05:47,860 Испоставило се да је ово није ни потребно. 1339 01:05:47,860 --> 01:05:52,480 Пусти ме напред и поновљени ово преводилац, а реприза АСЦИИ 0. 1340 01:05:52,480 --> 01:05:54,940 Испоставило се да је Ц је паметна. 1341 01:05:54,940 --> 01:05:57,150 >> И принтф, конкретно, је паметна. 1342 01:05:57,150 --> 01:06:01,260 Ако само пролазе ан и два пута за оба држаче, принтф 1343 01:06:01,260 --> 01:06:04,510 ће схватити, Ох, добро знам те дао ми интегер-- неки број, 1344 01:06:04,510 --> 01:06:06,380 као 65 или 90, или тако нешто. 1345 01:06:06,380 --> 01:06:10,170 Али видим да хоћете да формат који број као лик. 1346 01:06:10,170 --> 01:06:16,460 И тако принтф може имплицитно цаст ИНТ на цхар за вама. 1347 01:06:16,460 --> 01:06:19,360 Тако да није проблем уопште. 1348 01:06:19,360 --> 01:06:23,100 >> Али приметите, због овог еквивалентности можемо да урадимо ово као добро. 1349 01:06:23,100 --> 01:06:26,520 Пусти ме напред и направити друга верзија ово-Асции 1.ц. 1350 01:06:26,520 --> 01:06:31,800 И уместо итератинг над цели бројеви, заиста може одувати мозак 1351 01:06:31,800 --> 01:06:33,610 од итератинг преко карактера. 1352 01:06:33,610 --> 01:06:37,660 Ако је Чар в добије слово '' А, ја Желим да идем напред и уради ово, 1353 01:06:37,660 --> 01:06:41,740 докле год Ц је мања или једнака на главном З. И на сваке итерације 1354 01:06:41,740 --> 01:06:45,690 Желим да повећате Ц, могу сада у мом принтф линији овде 1355 01:06:45,690 --> 01:06:51,320 рецимо, посто Ц је посто сам опет, зарез Ц 1356 01:06:51,320 --> 01:06:57,200 >> А сада, могу да одем у други смер, ливење карактер експлицитно 1357 01:06:57,200 --> 01:06:58,500 на цео број. 1358 01:06:58,500 --> 01:07:00,560 Дакле, опет, зашто би то урадио? 1359 01:07:00,560 --> 01:07:03,830 То је мало чудно да те некако рачунати у смислу карактера. 1360 01:07:03,830 --> 01:07:07,430 >> Али, ако разумете шта је дешава испод хаубе, 1361 01:07:07,430 --> 01:07:08,430 заиста нема магије. 1362 01:07:08,430 --> 01:07:13,060 То само кажеш, хеј, рачунарски дати ми променљива, Ц типа цхар. 1363 01:07:13,060 --> 01:07:16,520 Иницијализујемо га капитала А. А приметити апострофе материју. 1364 01:07:16,520 --> 01:07:19,580 >> За ликова у Ц, сећам из прошле недеље, користите апострофе. 1365 01:07:19,580 --> 01:07:23,720 За жице, за речи, фразе, користите наводнике. 1366 01:07:23,720 --> 01:07:27,210 У реду, компјутер, стално радимо ово, тако док карактеру мања од 1367 01:07:27,210 --> 01:07:28,050 или једнако з. 1368 01:07:28,050 --> 01:07:32,640 И ја знам из АСЦИИ табели је све од ових АСЦИИ кодова су суседни. 1369 01:07:32,640 --> 01:07:33,400 >> Нема празнине. 1370 01:07:33,400 --> 01:07:36,737 Тако да је само до З, одвојени један број сваког. 1371 01:07:36,737 --> 01:07:38,820 И онда могу повећавати цхар, ако заиста желим. 1372 01:07:38,820 --> 01:07:40,390 На крају дана, то је само број. 1373 01:07:40,390 --> 01:07:41,030 Знам ово. 1374 01:07:41,030 --> 01:07:43,670 Тако да могу само да претпостављам да додате 1 до ње. 1375 01:07:43,670 --> 01:07:46,940 >> А онда овај пут принт ц, затим интегрални еквивалент. 1376 01:07:46,940 --> 01:07:50,170 И не треба ни експлицитно цаст. 1377 01:07:50,170 --> 01:07:52,680 Могу да принтф и рачунар средис ствари, 1378 01:07:52,680 --> 01:07:57,300 тако да сада, ако трчим да Асции1./асции1, 1379 01:07:57,300 --> 01:08:01,520 Ја добити исту ствар као и. 1380 01:08:01,520 --> 01:08:04,530 >> Бескористан програма, тхоугх-- никога ће заиста писати софтвер 1381 01:08:04,530 --> 01:08:07,549 како би се открио, што је био број који мапира у А, или Б, или З? 1382 01:08:07,549 --> 01:08:10,340 Сте само да га гоогле, или погледати га на мрежи, или га потражите 1383 01:08:10,340 --> 01:08:11,650 на слајду, или слично. 1384 01:08:11,650 --> 01:08:13,520 Па где то заправо добити користан? 1385 01:08:13,520 --> 01:08:15,960 >> Па, говорећи о томе слајд, примећујете да је 1386 01:08:15,960 --> 01:08:20,890 стварни образац овде између великим словима и мала слова то није било случајно. 1387 01:08:20,890 --> 01:08:23,760 Приметите да капитал А је 65. 1388 01:08:23,760 --> 01:08:25,830 Мала слова а је 97. 1389 01:08:25,830 --> 01:08:29,649 А колико је малим словима а? 1390 01:08:29,649 --> 01:08:32,649 >> Дакле, 65 је колико корака од 97? 1391 01:08:32,649 --> 01:08:36,210 Дакле, 97 минус 65 је 32. 1392 01:08:36,210 --> 01:08:37,910 Дакле, капитал а је 65. 1393 01:08:37,910 --> 01:08:39,939 Ако се томе дода 32 на то, ти мала слова а. 1394 01:08:39,939 --> 01:08:43,729 И, еквивалентно, ако одузмете 32, се вратиш у капиталу А-- исто са Б 1395 01:08:43,729 --> 01:08:46,380 на мало б, велики Ц до малог ц. 1396 01:08:46,380 --> 01:08:50,670 >> Све ове празнине су 32 одвојено. 1397 01:08:50,670 --> 01:08:54,450 Сада, то би изгледало да нам дозволи да учини нешто попут Мицрософт Ворд, 1398 01:08:54,450 --> 01:08:57,729 или Гоогле Доцс имају, где сте Можете одабрати све и онда каже, 1399 01:08:57,729 --> 01:09:00,520 променити све у мала слова, или променити све до великим словима, 1400 01:09:00,520 --> 01:09:03,840 или променити само прву реч казне за великим словима. 1401 01:09:03,840 --> 01:09:07,390 Можемо да урадимо нешто тако себе. 1402 01:09:07,390 --> 01:09:12,645 >> Пусти ме напред и сачувајте датотеку овде се зове искористи 0.ц. 1403 01:09:12,645 --> 01:09:15,770 И идемо напред и спремим програм који ради управо то како следи. 1404 01:09:15,770 --> 01:09:18,460 Тако укључују ЦС50 библиотеку. 1405 01:09:18,460 --> 01:09:21,430 И укључују Стандардни И / О. 1406 01:09:21,430 --> 01:09:22,787 >> И знам да се ускоро. 1407 01:09:22,787 --> 01:09:24,870 Па ћу га ставити у тамо већ, стринг.х, 1408 01:09:24,870 --> 01:09:26,960 тако да имају приступ ствари као што су Стирлинг, 1409 01:09:26,960 --> 01:09:29,620 а затим инт празнину, као и обично. 1410 01:09:29,620 --> 01:09:33,420 А онда ћу да наставим и до конце добија се низ, 1411 01:09:33,420 --> 01:09:35,032 само да би добили низ од корисника. 1412 01:09:35,032 --> 01:09:36,740 А онда ћу до здрав разум чек. 1413 01:09:36,740 --> 01:09:40,510 Ако низ не једнако нула, онда је сигурно да наставимо. 1414 01:09:40,510 --> 01:09:42,000 И шта желим да урадим? 1415 01:09:42,000 --> 01:09:48,700 Ја ћу поновити од и једнако 0, и н до дужине низа с. 1416 01:09:48,700 --> 01:09:51,899 >> И ја ћу то урадити све док и је мање од Н, и ја плус плус. 1417 01:09:51,899 --> 01:09:55,060 До сада, стварно ми је само задуживања идеје од раније. 1418 01:09:55,060 --> 01:09:57,010 А сада ћу да се уведе грану. 1419 01:09:57,010 --> 01:09:59,635 >> Дакле, сетите се да Сцратцх, где имали смо те виле у путу, 1420 01:09:59,635 --> 01:10:05,110 и прошле недеље у Ц. ћу кажу да, ако карактер и-ти у с 1421 01:10:05,110 --> 01:10:09,250 већи или једнак малим словима а, 1422 01:10:09,250 --> 01:10:13,340 и-- у Сцратцх ли би буквално кажу и, али у Ц кажете Амперсанд, 1423 01:10:13,340 --> 01:10:19,830 амперсанд-- и карактер и-ти у с је мањи од или једнак малим словима з, 1424 01:10:19,830 --> 01:10:21,780 Хајде да урадимо нешто занимљиво. 1425 01:10:21,780 --> 01:10:27,020 Хајде да заправо одштампати карактер без нови ред 1426 01:10:27,020 --> 01:10:31,760 да је лик у низу, карактер и-ти у низу. 1427 01:10:31,760 --> 01:10:37,420 >> Али идемо напред и одузмите 32 од њега. 1428 01:10:37,420 --> 01:10:42,120 Иф карактер у стринг који гледамо 1429 01:10:42,120 --> 01:10:45,950 није између Литтле А и мало З, само напред 1430 01:10:45,950 --> 01:10:48,610 и само одштампати непромењена. 1431 01:10:48,610 --> 01:10:50,840 Зато смо увели ово у заграду нотација 1432 01:10:50,840 --> 01:10:53,560 наши жице да би дошли до и-ти карактер у низу. 1433 01:10:53,560 --> 01:10:57,520 >> Додао сам неке условно логике, као Сцратцх у прошлонедељном недеље један, где 1434 01:10:57,520 --> 01:10:59,880 Ја само користим мој основни разумевање шта је 1435 01:10:59,880 --> 01:11:01,130 дешава испод хаубе. 1436 01:11:01,130 --> 01:11:04,190 Да ли је лик и-ти на с већи или једнак а? 1437 01:11:04,190 --> 01:11:08,290 Као је 97, или 98, или 99, и тако даље? 1438 01:11:08,290 --> 01:11:11,940 >> Али је такође мање од или једнака у вредности од малих з? 1439 01:11:11,940 --> 01:11:16,210 И ако је тако, шта то значи линија? 1440 01:11:16,210 --> 01:11:20,250 14, то је нека врста клица целе идеје, 1441 01:11:20,250 --> 01:11:23,840 великим словима писмо Једноставно одузимање 32 од тога, 1442 01:11:23,840 --> 01:11:29,370 у овом случају, јер знам, по то графикон, како се моји бројеви представља. 1443 01:11:29,370 --> 01:11:33,925 Дакле, идемо напред и покренути ово, након састављања искористи 0.ц, 1444 01:11:33,925 --> 01:11:36,210 и покренути искористи 0. 1445 01:11:36,210 --> 01:11:40,300 >> Хајде да унесете нешто Замила у свим малим словима ући. 1446 01:11:40,300 --> 01:11:42,780 И сада имамо Замила у свим великим словима. 1447 01:11:42,780 --> 01:11:45,050 Хајде да унесете Роб у свим малим словима. 1448 01:11:45,050 --> 01:11:46,674 Хајде да пробамо Јасон у свим малим словима. 1449 01:11:46,674 --> 01:11:48,590 И држимо извлачи приморан капитализација. 1450 01:11:48,590 --> 01:11:50,960 Постоји мала буба коју сам врста није предвидео. 1451 01:11:50,960 --> 01:11:54,050 Приметити мој нови захтев за унос завршавају на истој линији као и њихова имена, 1452 01:11:54,050 --> 01:11:55,520 који осећа мало неуредан. 1453 01:11:55,520 --> 01:11:59,170 >> Тако да идем овде, и заправо на крају овог програма 1454 01:11:59,170 --> 01:12:02,110 одштампате нови ред карактера. 1455 01:12:02,110 --> 01:12:03,160 То је све. 1456 01:12:03,160 --> 01:12:06,120 Са принтф, не треба да пролазе у варијабли или код формату. 1457 01:12:06,120 --> 01:12:08,460 Буквално можете само штампати нешто као нови ред. 1458 01:12:08,460 --> 01:12:13,529 >> Дакле, идемо напред и да искористи 0 поново, поново покренути га, Замила. 1459 01:12:13,529 --> 01:12:14,820 И сада је то мало лепше. 1460 01:12:14,820 --> 01:12:17,274 Сада, мој упит је на свом новом линијом. 1461 01:12:17,274 --> 01:12:18,440 Тако да је све у реду и добро. 1462 01:12:18,440 --> 01:12:19,910 Дакле, то је добар пример. 1463 01:12:19,910 --> 01:12:22,700 Али ја ни не нужно Потребно је да хард законика 32. 1464 01:12:22,700 --> 01:12:23,350 Знаш шта? 1465 01:12:23,350 --> 01:12:26,350 Могу да говоре-- не знам никад сећате шта је разлика. 1466 01:12:26,350 --> 01:12:29,330 >> Али знам да ли сам имају мало слово, 1467 01:12:29,330 --> 01:12:34,430 Ја у суштини желимо да одузмемо од без обзира на удаљеност између мало 1468 01:12:34,430 --> 01:12:39,160 а и велика, јер ако претпостављам да сви остали слова су исте, 1469 01:12:39,160 --> 01:12:41,045 који би требало да добије посао. 1470 01:12:41,045 --> 01:12:42,670 Али, уместо да то, знаш шта? 1471 01:12:42,670 --> 01:12:44,240 Постоји још један начин још. 1472 01:12:44,240 --> 01:12:48,090 >> Ако је то искористе 1.ц-- да сам ставити да у посебан фајл. 1473 01:12:48,090 --> 01:12:51,030 Хајде да не искористи 2.Ц на следећи начин. 1474 01:12:51,030 --> 01:12:53,060 Ја ћу заиста очистити ово овде. 1475 01:12:53,060 --> 01:12:57,420 И уместо да чак и да знају или брину о тим ниском нивоу 1476 01:12:57,420 --> 01:13:01,090 Детаљи имплементације, ја сам уместо тога само да одштампате карактер, 1477 01:13:01,090 --> 01:13:04,610 под знацима навода, посто Ц и онда позвати другу функцију која 1478 01:13:04,610 --> 01:13:09,950 постоји да узима аргумент, који је лик, овако. 1479 01:13:09,950 --> 01:13:12,630 >> Испоставило се да у Ц, ту је други позив функције 1480 01:13:12,630 --> 01:13:15,550 на горњи, који као своје име предлаже се карактер 1481 01:13:15,550 --> 01:13:19,350 и чини га у горњи случај еквивалент, а затим га враћа 1482 01:13:19,350 --> 01:13:21,410 тако да принтф може га укључите у ту. 1483 01:13:21,410 --> 01:13:25,484 Па за то, ипак, потребно увести још једну датотеку. 1484 01:13:25,484 --> 01:13:28,400 Испоставило се да постоји неки други фајл да би ти знао само из класе, 1485 01:13:28,400 --> 01:13:33,020 или уџбеник, или онлине референца, под називом, Ц типе.х. 1486 01:13:33,020 --> 01:13:38,570 >> Дакле, ако додам да се међу мојим главом Бр, а сада поново саставити овај програм, 1487 01:13:38,570 --> 01:13:43,040 цапитализе2, ./цапитализе2 Ентер. 1488 01:13:43,040 --> 01:13:46,690 Хајде да унесете Замила у свим мала слова, и даље ради исто. 1489 01:13:46,690 --> 01:13:48,040 Али, знате шта? 1490 01:13:48,040 --> 01:13:55,590 Испоставило се да је у горњи има и друге функције. 1491 01:13:55,590 --> 01:13:58,410 >> И дозволите да се представим ово командује овде, некако неспретно 1492 01:13:58,410 --> 01:14:00,250 по имену, али човек за употребу. 1493 01:14:00,250 --> 01:14:03,960 Испоставило се да је већина Линук рачунара, као што се користи овдје-- Линук оперативне 1494 01:14:03,960 --> 01:14:06,270 систем-- има команду зове човек, који каже, 1495 01:14:06,270 --> 01:14:08,530 хеј, компјутер, дај ми рачунара упутство. 1496 01:14:08,530 --> 01:14:10,680 Шта желите да погледати у том приручнику? 1497 01:14:10,680 --> 01:14:13,840 >> Желим да потражите функцију позвао на горњи, Ентер. 1498 01:14:13,840 --> 01:14:16,070 И то је мало загонетан понекад прочита. 1499 01:14:16,070 --> 01:14:18,780 Али приметити да смо у Линук програмера за употребу. 1500 01:14:18,780 --> 01:14:19,530 И то је све текст. 1501 01:14:19,530 --> 01:14:21,905 И приметили да је назив функције овде. 1502 01:14:21,905 --> 01:14:25,030 Испоставило се да има рођака који се зове да смањи, који ради супротно. 1503 01:14:25,030 --> 01:14:29,710 И обавештење под синопсис, да користе ово функционишу ман страну, да тако кажем, 1504 01:14:29,710 --> 01:14:32,220 се ми говори да треба да садрже ц типе.х. 1505 01:14:32,220 --> 01:14:33,630 И знао сам да из праксе. 1506 01:14:33,630 --> 01:14:36,210 >> Овде, то ми показује два прототипови за функцију, 1507 01:14:36,210 --> 01:14:39,070 тако да ако икада желе да користе ово Знам шта узимају као улаз, 1508 01:14:39,070 --> 01:14:40,652 и шта се врате као излаз. 1509 01:14:40,652 --> 01:14:42,360 А онда ако сам прочитао опис, видим 1510 01:14:42,360 --> 01:14:44,820 детаљније шта функција ради. 1511 01:14:44,820 --> 01:14:48,100 Али што је још важније, ако Гледам под повратне вредности, 1512 01:14:48,100 --> 01:14:51,710 пише вредност вратио је да од претворити писма, 1513 01:14:51,710 --> 01:14:57,880 или Ц, оригинал улаз, ако конверзија није било могуће. 1514 01:14:57,880 --> 01:15:01,992 >> Другим речима, да горњи ће покушати да претворити писмо великим словима. 1515 01:15:01,992 --> 01:15:03,450 И ако је тако, то ће га вратити. 1516 01:15:03,450 --> 01:15:07,010 Али ако то не може за неке разлога-- можда је већ велика слова, 1517 01:15:07,010 --> 01:15:09,550 можда је знак узвика или неки други пунцтуатион-- 1518 01:15:09,550 --> 01:15:12,200 то је само да врати оригинални Ц, 1519 01:15:12,200 --> 01:15:17,340 што значи да могу да мој код Боље осмишљен како следи. 1520 01:15:17,340 --> 01:15:20,580 >> Не треба све ови Дарн линија кода. 1521 01:15:20,580 --> 01:15:22,610 Све линије сам само истакао цан 1522 01:15:22,610 --> 01:15:28,700 се срушила у само једном једноставном линија, што је ово-- принтф одсто 1523 01:15:28,700 --> 01:15:33,510 ц да горњи С носача и. 1524 01:15:33,510 --> 01:15:36,090 И ово би био Пример бољег дизајна. 1525 01:15:36,090 --> 01:15:40,040 >> Зашто имплементирати у 7 или 8 линија кода, шта год да сам био 1526 01:15:40,040 --> 01:15:44,960 избрисан, када уместо колапса све те логике и одлучивању 1527 01:15:44,960 --> 01:15:49,620 у једном реду, 13 сада, да ослања на библиотеку фунцтион-- 1528 01:15:49,620 --> 01:15:53,430 функција која долази са Ц, али да ради управо оно што желите да уради. 1529 01:15:53,430 --> 01:15:55,295 И, искрено, чак и ако није дошао са Ц, 1530 01:15:55,295 --> 01:15:58,880 можете га имплементирати сами, као смо видели, са добити негативну инт 1531 01:15:58,880 --> 01:16:01,700 и добити позитиван Инт прошле недеље као добро. 1532 01:16:01,700 --> 01:16:03,470 >> Овај код сада је много читљив. 1533 01:16:03,470 --> 01:16:06,670 И, заиста, ако се крећите се горе, погледајте колико компактнији 1534 01:16:06,670 --> 01:16:08,360 ова верзија мог програма је. 1535 01:16:08,360 --> 01:16:11,230 Сада је мало врх тежак, са свим овим подразумева. 1536 01:16:11,230 --> 01:16:14,380 Али то је у реду, јер сада стојим на раменима програмера 1537 01:16:14,380 --> 01:16:15,300 пре мене. 1538 01:16:15,300 --> 01:16:18,440 И ко год да је ко имплементиран у горњи стварно 1539 01:16:18,440 --> 01:16:21,470 Учинили сте ми услугу, слично ко год имплементиран Стерлинг стварно 1540 01:16:21,470 --> 01:16:24,790 Учинили сте ми услугу пре извесног времена. 1541 01:16:24,790 --> 01:16:26,970 Па сада имамо боље дизајн програма 1542 01:16:26,970 --> 01:16:31,680 који спроводи потпуно исту логику. 1543 01:16:31,680 --> 01:16:35,580 >> Говорећи о Стирлинг, нека ја само напред и уради то. 1544 01:16:35,580 --> 01:16:38,320 Пусти ме напред и сачувати ову слику као стирлинг.ц. 1545 01:16:38,320 --> 01:16:43,255 И испоставило се да, можемо ољуштити назад једна слој прилично једноставно сада. 1546 01:16:43,255 --> 01:16:45,630 Ја идем напред и бич још један програм у главни 1547 01:16:45,630 --> 01:16:49,759 овде да једноставно поново имплементира ниска дужине као што следи. 1548 01:16:49,759 --> 01:16:52,300 Дакле, овде је линија кода који добија ми низ од корисника. 1549 01:16:52,300 --> 01:16:53,910 Стално изнова и изнова користе ово. 1550 01:16:53,910 --> 01:16:58,900 Дозволите ми да се предам променљиву названу Н типа инт који чува број. 1551 01:16:58,900 --> 01:17:02,490 >> И пусти ме напред и урадите следеће логику. 1552 01:17:02,490 --> 01:17:15,610 Док карактер Н-ог у с ради није једнако косих 0, само напред 1553 01:17:15,610 --> 01:17:17,930 и повећавати бр. 1554 01:17:17,930 --> 01:17:23,506 А онда одштампати принтф одсто и н. 1555 01:17:23,506 --> 01:17:29,200 Ја тврдим да овај програм овде, без позивања дужину стринг, 1556 01:17:29,200 --> 01:17:31,150 схвати дужину низа. 1557 01:17:31,150 --> 01:17:34,600 >> А магија је у потпуности садржана у реду 8 1558 01:17:34,600 --> 01:17:39,830 овде са оним што изгледа као нову синтаксу, ово косих 0 у појединачним наводницима. 1559 01:17:39,830 --> 01:17:41,360 Али зашто је то тако? 1560 01:17:41,360 --> 01:17:44,100 Па, размислите шта је било дешава све ово време. 1561 01:17:44,100 --> 01:17:47,990 >> И успут Пре него што заборавим, схватити такође, да поред ман страницама 1562 01:17:47,990 --> 01:17:50,920 да долазе са типичан Линук систем као ЦС50 ИДЕ, 1563 01:17:50,920 --> 01:17:53,770 схватити да ми, службеници, имају такође 1564 01:17:53,770 --> 01:17:56,030 направио веб верзију ове исте идеје зове 1565 01:17:56,030 --> 01:17:59,940 референце.цс50.нет, која има све те истом човеку страницама, 1566 01:17:59,940 --> 01:18:02,020 све то исто документација, као и 1567 01:18:02,020 --> 01:18:05,730 мало кутија на врху који омогућава да се претворити све од прилично 1568 01:18:05,730 --> 01:18:09,025 волшебни језика у мање удобан мод, где смо, наставно особље, 1569 01:18:09,025 --> 01:18:12,150 прошли кроз и покушао да поједностави неки од језика чувања ствари 1570 01:18:12,150 --> 01:18:14,830 фокусирана на идејама, а не неке аспекте. 1571 01:18:14,830 --> 01:18:20,070 Дакле, имајте на уму, референце.цс50.нет као још један ресурс и. 1572 01:18:20,070 --> 01:18:23,800 >> Али зашто дужине низ рад у начин на који сам предложио пре неколико тренутака? 1573 01:18:23,800 --> 01:18:25,160 Ево опет име Замила је. 1574 01:18:25,160 --> 01:18:27,690 И ево Замила име уоквирено, као што сам стално раде, 1575 01:18:27,690 --> 01:18:31,360 да наслика слику на то је, заиста, само низ знакова. 1576 01:18:31,360 --> 01:18:34,260 Али Замила не постоји у изолацији у програму. 1577 01:18:34,260 --> 01:18:37,420 >> Када сте написали и покренете програм, користите ваш Мац или ПЦ рачунар 1578 01:18:37,420 --> 01:18:40,010 као меморију, или РАМ тако да говори. 1579 01:18:40,010 --> 01:18:42,620 И ти падне на памет рачунар као да има 1580 01:18:42,620 --> 01:18:44,730 много гигабајта меморије ових дана. 1581 01:18:44,730 --> 01:18:47,700 И свирка значи милијарде, тако милијарде бајтова. 1582 01:18:47,700 --> 01:18:48,910 >> Али хајде да уназад у времену. 1583 01:18:48,910 --> 01:18:51,530 И претпоставимо да користимо стварно стари рачунар који 1584 01:18:51,530 --> 01:18:55,150 има само 32 бајтова меморије. 1585 01:18:55,150 --> 01:18:59,310 Сам могао, на екрану мог компјутера, просто нацртао на следећи начин. 1586 01:18:59,310 --> 01:19:05,240 >> Могао бих само рећи да мој Рачунар има све ове меморије. 1587 01:19:05,240 --> 01:19:08,830 И ово је као штап меморије, ако ли се сећате нашу слику из последње време. 1588 01:19:08,830 --> 01:19:11,670 И ако сам само поделити ово довољно времена, 1589 01:19:11,670 --> 01:19:15,040 Ја тврдим да имам 32 бајтова меморије на екрану. 1590 01:19:15,040 --> 01:19:18,239 >> Сада, у стварности, могу само извући до сада на овом екрану овде. 1591 01:19:18,239 --> 01:19:20,280 Тако да ћу ићи напред, и само по обичају, 1592 01:19:20,280 --> 01:19:24,050 драв меморију мог рачунара као мрежа, не само као један равна линија. 1593 01:19:24,050 --> 01:19:28,190 Конкретно, сада да тврдим ово решетка, овај 8 до 4 решетка, 1594 01:19:28,190 --> 01:19:31,800 само представља свих 32 бајтова меморије на располагању у мом Мац, 1595 01:19:31,800 --> 01:19:33,030 или доступан у мом рачунару. 1596 01:19:33,030 --> 01:19:34,780 И они амбалаже на две линије, само 1597 01:19:34,780 --> 01:19:38,030 јер то одговара више на екрану. 1598 01:19:38,030 --> 01:19:40,800 Али ово је први бајт. 1599 01:19:40,800 --> 01:19:41,990 Ово је други бајт. 1600 01:19:41,990 --> 01:19:43,300 Ово је трећи бајт. 1601 01:19:43,300 --> 01:19:45,310 >> А ово је 32. бајт. 1602 01:19:45,310 --> 01:19:52,910 Или, ако мислимо као компјутер научник, ово је бите 0, 1, 2, 3, 31. 1603 01:19:52,910 --> 01:19:55,950 Дакле, имате 0 до 31, ако почнете рачунајући на 0. 1604 01:19:55,950 --> 01:19:59,830 >> Дакле, ако користимо програм да позиви се ниска, 1605 01:19:59,830 --> 01:20:05,280 и ми добили низ од човека као да се зове Замила З-А-М-М-л-А 1606 01:20:05,280 --> 01:20:09,430 како у свету функционише рачунар пратити који бајт, 1607 01:20:09,430 --> 01:20:12,230 који комад меморије, припада којој низ? 1608 01:20:12,230 --> 01:20:16,270 Другим речима, ако наставимо да упишите друго име у рачунар, 1609 01:20:16,270 --> 01:20:19,890 као што је овај Анди, зове добити низ други пут, 1610 01:20:19,890 --> 01:20:23,030 А-Н-Д-ја мора да заврши у меморија рачунара као добро. 1611 01:20:23,030 --> 01:20:23,850 Али како? 1612 01:20:23,850 --> 01:20:29,700 >> Па, испоставило се да се испод хауба, шта, Ц ради када складиштења жице 1613 01:20:29,700 --> 01:20:35,080 да су људске врсте, или да долази из неког другог извора, да ли је 1614 01:20:35,080 --> 01:20:39,190 оцртава крај њих са посебна цхарацтер-- обрнута коса црта 1615 01:20:39,190 --> 01:20:44,750 0, што је само посебан начин да кажемо 80 бита за редом. 1616 01:20:44,750 --> 01:20:47,950 >> Тако је-- Ово је број 97 опозив. 1617 01:20:47,950 --> 01:20:51,770 Дакле, неки образац 8 бита представља децимални број 97. 1618 01:20:51,770 --> 01:20:58,070 Ово косих 0 је буквално број 0, а.к.а. нул, Н-У-Л, за разлику од раније, 1619 01:20:58,070 --> 01:20:59,630 Н-У-Л-л, који смо причали. 1620 01:20:59,630 --> 01:21:05,700 Али за сада, само знам да ово косих 0 је само 80 бита за редом. 1621 01:21:05,700 --> 01:21:09,810 >> И то је само та линија у песак који ништа не говори са леве стране 1622 01:21:09,810 --> 01:21:12,610 припада једном низу, или једне врсте података. 1623 01:21:12,610 --> 01:21:15,480 И све десно припада нешто друго. 1624 01:21:15,480 --> 01:21:17,440 Анди је име, у међувремену, који само визуелно 1625 01:21:17,440 --> 01:21:21,310 деси врап на другој линији, али то је само естетски детаљ, 1626 01:21:21,310 --> 01:21:23,990 Слично је нула престаје. 1627 01:21:23,990 --> 01:21:29,290 >> То је низ А А Н-Д-и карактера, плус пети тајна карактер, 1628 01:21:29,290 --> 01:21:33,560 све 0 бита, да само разграничава крај имена Анди је као добро. 1629 01:21:33,560 --> 01:21:37,120 И ако ми зовемо добити Стринг трећи пут у рачунару да бисте добили низ као 1630 01:21:37,120 --> 01:21:44,210 Мариа М-А-Р-ја-А слично је Мариа је Име нула престаје са обрнуте косе црте 0. 1631 01:21:44,210 --> 01:21:47,170 >> Ово је фундаментално различит од како компјутер би типично 1632 01:21:47,170 --> 01:21:51,850 складиштити цео број, или пловак или други типови података и даље, јер опозива, 1633 01:21:51,850 --> 01:21:57,420 цео број је обично 32 бита, или 4 бајта, или можда чак и 64 бита, 1634 01:21:57,420 --> 01:21:59,100 или осам бајтова. 1635 01:21:59,100 --> 01:22:02,620 Али многи примитиве у рачунару у програмском језику 1636 01:22:02,620 --> 01:22:05,550 имају фиксни број бајтова испод хоод-- 1637 01:22:05,550 --> 01:22:08,100 можда 1, мозда 2, мозда 4, можда 8. 1638 01:22:08,100 --> 01:22:13,250 >> Али жице, по дизајну, имају динамичан број знакова. 1639 01:22:13,250 --> 01:22:16,980 Ви не знате унапред, док људска врста у З-А-М-И-Л-А, 1640 01:22:16,980 --> 01:22:21,400 или М-А-Р-И-А или А-Н-Д-И. Ти не знаш колико пута је корисник ће ударити 1641 01:22:21,400 --> 01:22:22,070 тастатура. 1642 01:22:22,070 --> 01:22:26,490 Према томе, не знам како многи ликови у унапред 1643 01:22:26,490 --> 01:22:27,540 ти требати. 1644 01:22:27,540 --> 01:22:31,840 >> И тако, Ц некако оставља се као тајна бреадцрумб испод хаубе 1645 01:22:31,840 --> 01:22:32,960 на крају стринга. 1646 01:22:32,960 --> 01:22:39,280 Након складиштење З-А-П-И-Л-А у меморији, такође само ставља еквивалент 1647 01:22:39,280 --> 01:22:40,210 у периоду. 1648 01:22:40,210 --> 01:22:45,060 На крају реченице, ставља 80 битова, тако 1649 01:22:45,060 --> 01:22:49,120 да се сети где Замила почиње и завршава. 1650 01:22:49,120 --> 01:22:51,490 >> Дакле, шта је веза, онда, у овом програму? 1651 01:22:51,490 --> 01:22:55,190 Овај програм овде Стирлинг, је једноставно механизам 1652 01:22:55,190 --> 01:22:57,970 за добијање низ од стране корисника, линија 6. 1653 01:22:57,970 --> 01:23:01,160 Лине 7, Изјављујем променљиву назива н и постављен је једнака 0. 1654 01:23:01,160 --> 01:23:08,680 >> А онда у реду 8, ја једноставно питао питање, док је н-ти карактер ради 1655 01:23:08,680 --> 01:23:12,120 није једнако све 0 битс-- Другим речима, не 1656 01:23:12,120 --> 01:23:14,500 једнак овај посебан карактер, косих 0, што 1657 01:23:14,500 --> 01:23:18,470 само то посебан нула цхарацтер-- само напред и само повећавати бр. 1658 01:23:18,470 --> 01:23:21,460 >> И наставите да радите, и држати то раде, и даље да радиш. 1659 01:23:21,460 --> 01:23:23,430 И тако, иако у прошлост користили смо и, 1660 01:23:23,430 --> 01:23:25,181 то је сасвим у реду семантички користити н 1661 01:23:25,181 --> 01:23:27,430 ако само покушаваш да цоунт овај пут намерно, 1662 01:23:27,430 --> 01:23:28,720 и само желим да га зову бр. 1663 01:23:28,720 --> 01:23:34,720 Тако да наставља да поставља питање, је карактер н-ти на с све 0с? 1664 01:23:34,720 --> 01:23:38,470 Ако не, погледајте у следећем изглед, изгледају на следећи, поглед на следећи, 1665 01:23:38,470 --> 01:23:39,460 погледамо следећи. 1666 01:23:39,460 --> 01:23:45,540 >> Али чим видиш косу црту 0, зауставља ово лооп-- линија 9 до 11--. 1667 01:23:45,540 --> 01:23:49,640 Ви избијају из вхиле петље, остављајући унутар тог променљивог н 1668 01:23:49,640 --> 01:23:54,530 укупно Број све од ликови у низу сте видели, 1669 01:23:54,530 --> 01:23:55,660 чиме се одштампа. 1670 01:23:55,660 --> 01:23:56,760 Дакле, хајде да пробамо ово. 1671 01:23:56,760 --> 01:23:59,500 >> Пусти ме напред и, без користите функцију Стирлинг, 1672 01:23:59,500 --> 01:24:04,240 али само користећи свој домаћи верзију овде се зове Стирлинг, пусти ме само напред 1673 01:24:04,240 --> 01:24:07,700 и низ Стирлинг, тип у нешто као Замила, који знам унапред 1674 01:24:07,700 --> 01:24:08,670 је шест знакова. 1675 01:24:08,670 --> 01:24:10,080 Да видимо да ли ради. 1676 01:24:10,080 --> 01:24:10,920 Заиста, то је шест. 1677 01:24:10,920 --> 01:24:15,257 Хајде да покушамо са Роб, три карактера, три лика као, и тако даље. 1678 01:24:15,257 --> 01:24:17,340 То је све што се дешава на испод хаубе. 1679 01:24:17,340 --> 01:24:19,548 И приметио везе, затим, са прве недеље 1680 01:24:19,548 --> 01:24:22,370 класе, где смо разговарали о нешто попут апстракције, 1681 01:24:22,370 --> 01:24:26,960 који је управо ово слојевито идеја, или сложеност, на врху основних принципа. 1682 01:24:26,960 --> 01:24:30,710 Овде, ми смо на неки начин гледа испод хаубе Стирлинг, 1683 01:24:30,710 --> 01:24:33,510 да тако кажем, да схватим, како би се спроводи? 1684 01:24:33,510 --> 01:24:35,232 >> И могли смо то поново имплементирати себе. 1685 01:24:35,232 --> 01:24:37,440 Али ми никад више иде да се поново спроведе Стирлинг. 1686 01:24:37,440 --> 01:24:39,780 Ми ћемо да користе Стирлинг како 1687 01:24:39,780 --> 01:24:42,100 да заиста мало дужине жице. 1688 01:24:42,100 --> 01:24:44,200 >> Али нема магије испод хаубе. 1689 01:24:44,200 --> 01:24:46,716 да испод ако знате је хауба, стринг 1690 01:24:46,716 --> 01:24:48,090 је само низ знакова. 1691 01:24:48,090 --> 01:24:51,090 И да низ знакова све се може нумерички упућен 1692 01:24:51,090 --> 01:24:53,330 са носачем 0, носач 1, носач 2, и ви 1693 01:24:53,330 --> 01:24:57,420 знају да на крају низа је Специјални карактер, можете схватити 1694 01:24:57,420 --> 01:25:01,710 како се то највише ништа у Програм, јер све се своди на 1695 01:25:01,710 --> 01:25:03,400 је читање и писање меморије. 1696 01:25:03,400 --> 01:25:06,130 То је, мења и гледа у меморију, или се креће ствари 1697 01:25:06,130 --> 01:25:10,940 око у меморији, штампање ствари на екрану, и тако даље. 1698 01:25:10,940 --> 01:25:14,800 >> Тако да се сада користи се новонастала разумевање онога што стрингс заправо 1699 01:25:14,800 --> 01:25:17,910 су испод хаубе, и огулити леђа још једну слој 1700 01:25:17,910 --> 01:25:20,080 да до сада имамо игнорисала у потпуности. 1701 01:25:20,080 --> 01:25:22,650 Посебно, свако доба смо имплементирали програм, 1702 01:25:22,650 --> 01:25:25,930 имали смо ову линију кода при врху проглашавајући главни. 1703 01:25:25,930 --> 01:25:27,810 И ми смо наведено инт маин празнину. 1704 01:25:27,810 --> 01:25:31,240 >> И да празнина у заградама је био све ово време говори да је главни 1705 01:25:31,240 --> 01:25:33,440 Сама не узима никакве аргументе. 1706 01:25:33,440 --> 01:25:36,210 Сваки улаз је главни је ће добити од корисника 1707 01:25:36,210 --> 01:25:39,020 мора да дође из неке друге механизам, као и гет инт 1708 01:25:39,020 --> 01:25:42,040 или да плута, или се стринг, или неке друге функције. 1709 01:25:42,040 --> 01:25:44,710 Али се испоставило да када пишете програм, 1710 01:25:44,710 --> 01:25:47,690 заправо можете одредити да овај програм ће 1711 01:25:47,690 --> 01:25:51,730 се улази из људског на самом командној линији. 1712 01:25:51,730 --> 01:25:56,310 >> Другим речима, иако смо до сада има се приказују само ./хелло здраво 1713 01:25:56,310 --> 01:26:00,312 или слични програми, све од друге програме који смо користили, 1714 01:26:00,312 --> 01:26:02,770 да ми сами нисте написали, узимали, чини се, 1715 01:26:02,770 --> 01:26:05,210 командна линија аргументс-- ствари као што су марке. 1716 01:26:05,210 --> 01:26:07,450 Ви кажете нешто направити, а затим друга реч. 1717 01:26:07,450 --> 01:26:10,950 Или јек, ви кажете Цланг, а затим други реч, име датотеке. 1718 01:26:10,950 --> 01:26:14,410 >> Или чак РМ или ЦП, као што можете да Видели или већ користе 1719 01:26:14,410 --> 01:26:15,880 да уклоне или копирати датотеке. 1720 01:26:15,880 --> 01:26:18,920 Сви они се тзв командна линија аргументс-- 1721 01:26:18,920 --> 01:26:21,130 додатне речи на терминалу линији. 1722 01:26:21,130 --> 01:26:23,260 Али до сада, сами нису имали 1723 01:26:23,260 --> 01:26:27,080 ово луксуз узимање улаз из корисник када он или она заправо ради 1724 01:26:27,080 --> 01:26:29,120 Сам програм на командној линији. 1725 01:26:29,120 --> 01:26:33,710 >> Али можемо да урадимо да ће поново изјављујући Главни иде напред, а не као што 1726 01:26:33,710 --> 01:26:36,750 воид у загради, али ова два аргумента 1727 01:26:36,750 --> 01:26:40,600 инстеад-- први цео број, а други нешто 1728 01:26:40,600 --> 01:26:44,170 ново, нешто што ћемо звати низ, нешто слично у духу 1729 01:26:44,170 --> 01:26:49,220 на оно што смо видели у Сцратцх као листу, али низ жица, као што ћемо ускоро видети. 1730 01:26:49,220 --> 01:26:51,790 Али да видимо то по На пример, пре него што 1731 01:26:51,790 --> 01:26:53,690 разликовати шта то значи. 1732 01:26:53,690 --> 01:26:56,520 >> Дакле, ако одем у ЦС50 ИДЕ овде, ја сам отишао напред 1733 01:26:56,520 --> 01:27:01,840 и прогласио у фајлу названом аргв0.ц следећи образац. 1734 01:27:01,840 --> 01:27:04,120 И приметио да је једина ствар то је другачије до сада 1735 01:27:04,120 --> 01:27:08,570 се да сам променио празнина у инт аргц, аргв низ отворен брацкет, близу 1736 01:27:08,570 --> 01:27:09,070 носач. 1737 01:27:09,070 --> 01:27:11,730 И приметио за сада, нема ништа унутар тих заграда. 1738 01:27:11,730 --> 01:27:12,620 >> Нема број. 1739 01:27:12,620 --> 01:27:15,070 И нема ја, или н, или било који други писмо. 1740 01:27:15,070 --> 01:27:17,010 Само помоћу квадратних носачи за сада, 1741 01:27:17,010 --> 01:27:19,510 из разлога ћемо доћи назад у само тренутак. 1742 01:27:19,510 --> 01:27:21,330 >> А сада оно што ћу да урадим је то. 1743 01:27:21,330 --> 01:27:26,680 Ако аргц једнако једнако 2-- и сећам се да износи једнаки 1744 01:27:26,680 --> 01:27:30,040 је оператор једнакост у односу лева и десна за једнакост. 1745 01:27:30,040 --> 01:27:31,790 То није задатак оператор, што је 1746 01:27:31,790 --> 01:27:36,510 једини знак једнакости, што значи копију од права на лево неку вредност. 1747 01:27:36,510 --> 01:27:42,840 >> Ако аргц! Једнак једнако 2, хоћу да рецимо, принтф, здраво, проценти, нова линија, 1748 01:27:42,840 --> 01:27:47,340 а затим прикључите у-- и ту је нова трицк--, аргв носач 1, из разлога 1749 01:27:47,340 --> 01:27:48,840 да ћемо се вратити за тренутак. 1750 01:27:48,840 --> 01:27:52,110 Иф аргц не једнак 2, знаш шта? 1751 01:27:52,110 --> 01:27:57,400 Хајде само напред и, као и обично, принт од здраво свет без замене. 1752 01:27:57,400 --> 01:28:02,710 >> Па се чини да ако аргц, који означава аргумент тачку, једнако 2, 1753 01:28:02,710 --> 01:28:04,740 Идем да одштампате здраво или нешто друго. 1754 01:28:04,740 --> 01:28:07,560 У супротном, по дефаулту, сам штампања здраво свет. 1755 01:28:07,560 --> 01:28:08,770 Дакле, шта то значи? 1756 01:28:08,770 --> 01:28:15,550 >> Па, пусти ме само напред и сачувати ову слику, а затим направите аргв0, 1757 01:28:15,550 --> 01:28:18,940 и онда ./аргв0, Ентер. 1758 01:28:18,940 --> 01:28:20,300 И каже здраво свет. 1759 01:28:20,300 --> 01:28:21,260 Сада, зашто је то тако? 1760 01:28:21,260 --> 01:28:24,730 >> Па, испоставило се кад год покренути програм на командној линији, 1761 01:28:24,730 --> 01:28:29,570 ви попуњавате шта ћемо обично зову аргумент вектор. 1762 01:28:29,570 --> 01:28:33,100 Другим речима, аутоматски и рачунар, оперативни систем, 1763 01:28:33,100 --> 01:28:38,340 ће се предати у вашем програму Сама листа свих речи 1764 01:28:38,340 --> 01:28:40,850 да је људски откуцан на промпт, у случају да 1765 01:28:40,850 --> 01:28:43,790 програмер желите да урадите нешто са том информацијом. 1766 01:28:43,790 --> 01:28:48,540 И у овом случају, једина реч Ја сам откуцао на линији је ./аргв0. 1767 01:28:48,540 --> 01:28:55,420 >> И тако је број аргумената које је се прослеђује свом програму је само један. 1768 01:28:55,420 --> 01:28:58,880 Другим речима, аргумент цоунт, иначе познат као аргц 1769 01:28:58,880 --> 01:29:00,970 овде као цео број, је само један. 1770 01:29:00,970 --> 01:29:03,000 Један, наравно, није исто што и два. 1771 01:29:03,000 --> 01:29:05,980 И то је оно што штампа, здраво свет. 1772 01:29:05,980 --> 01:29:08,170 >> Али дозволите ми да искористим ову негде. 1773 01:29:08,170 --> 01:29:09,930 Дозволите ми да кажем, аргв0. 1774 01:29:09,930 --> 01:29:12,740 И онда шта је са Маријом? 1775 01:29:12,740 --> 01:29:14,990 А затим притисните Ентер. 1776 01:29:14,990 --> 01:29:18,020 >> А погледајте шта магично се дешава овде. 1777 01:29:18,020 --> 01:29:22,640 Сада, уместо хелло света, имам променио понашање овог програма 1778 01:29:22,640 --> 01:29:26,310 узимајући улаз не од гет стринг или неке друге функције, 1779 01:29:26,310 --> 01:29:30,570 али од, наводно, мојом командом Сам, оно што сам првобитно унесе. 1780 01:29:30,570 --> 01:29:35,720 И ја могу опет играти ову игру мењајући га у Стелиос, на пример. 1781 01:29:35,720 --> 01:29:38,400 >> И сада видим друго име још. 1782 01:29:38,400 --> 01:29:40,540 И овде, можда рећи Анди. 1783 01:29:40,540 --> 01:29:42,137 И ја могу рећи Замила. 1784 01:29:42,137 --> 01:29:45,220 И можемо да играмо ову игру током целог дана, само укључивања у различите вредности, 1785 01:29:45,220 --> 01:29:49,550 све док сам обезбеди тачно Две речи на брз, 1786 01:29:49,550 --> 01:29:52,260 тако да аргц, мој аргумент рачуна, је 2. 1787 01:29:52,260 --> 01:29:57,240 >> Видим да име укључен у принтф, по том стању овде? 1788 01:29:57,240 --> 01:30:00,550 Дакле, чини ми се да сада имамо изражени способност 1789 01:30:00,550 --> 01:30:04,410 узимања улаз из неког другог механизма, из такозване командне линије, 1790 01:30:04,410 --> 01:30:07,000 уместо чекања док корисник ради програм, 1791 01:30:07,000 --> 01:30:10,220 и њега или њу онда питати користећи нешто попут гет низу. 1792 01:30:10,220 --> 01:30:11,230 >> Дакле, шта је ово? 1793 01:30:11,230 --> 01:30:15,010 Аргц, опет, само цео број, број вордс-- аргументс-- 1794 01:30:15,010 --> 01:30:18,540 да корисник датим у брз, у прозору терминала, 1795 01:30:18,540 --> 01:30:20,110 укључујући и име програма. 1796 01:30:20,110 --> 01:30:23,340 Дакле, наш ./аргв0 је, практично, име програма, 1797 01:30:23,340 --> 01:30:24,520 или како сам покренути програм. 1798 01:30:24,520 --> 01:30:25,810 >> То се рачуна као реч. 1799 01:30:25,810 --> 01:30:27,080 Па аргц ће бити 1. 1800 01:30:27,080 --> 01:30:29,750 Али кад пишем Стелиос, или Анди, или Замила, или Марија, 1801 01:30:29,750 --> 01:30:31,660 то значи аргумент датотека је два. 1802 01:30:31,660 --> 01:30:33,910 И сада постоје две речи прошло у. 1803 01:30:33,910 --> 01:30:36,070 >> И обавештење, можемо да наставимо ову логику. 1804 01:30:36,070 --> 01:30:39,050 Ако сам заправо рећи нешто као Замила Цхан, 1805 01:30:39,050 --> 01:30:42,200 пуно име, тако пролази три аргумента укупно, 1806 01:30:42,200 --> 01:30:47,410 Сада се поново пише дефаулт, јер, наравно, 3 није једнако 2. 1807 01:30:47,410 --> 01:30:54,080 >> Па на тај начин, имам приступ преко аргв ово нови аргумент 1808 01:30:54,080 --> 01:30:56,080 да смо могли технички позвати све што желимо. 1809 01:30:56,080 --> 01:30:58,940 Али по обичају, то је , аргв и аргц, респективно. 1810 01:30:58,940 --> 01:31:04,470 Аргв, расправа вектор, је љубазан од синоним за програмирање 1811 01:31:04,470 --> 01:31:07,140 Функција у Ц зове низ. 1812 01:31:07,140 --> 01:31:14,410 >> Низ је списак сличних вредности назад, то бацк, то бацк, на леђима. 1813 01:31:14,410 --> 01:31:17,810 Другим речима, ако је овде у РАМ-а, следећи је поред њега, 1814 01:31:17,810 --> 01:31:18,800 и одмах поред њега. 1815 01:31:18,800 --> 01:31:20,101 Нису свуда. 1816 01:31:20,101 --> 01:31:23,100 И да други сценарио, где ствари су свуда у меморији, 1817 01:31:23,100 --> 01:31:25,082 заправо може бити моћно оружје. 1818 01:31:25,082 --> 01:31:28,040 Али ћемо се вратити на то када говоримо о луксузнијих структуре података. 1819 01:31:28,040 --> 01:31:32,260 За сада, низ је само комад целовите меморије, 1820 01:31:32,260 --> 01:31:36,520 сваки од чији су елементи назад, то бацк, да подржи, да подржи, 1821 01:31:36,520 --> 01:31:38,050 и генерално исти тип. 1822 01:31:38,050 --> 01:31:42,630 >> Дакле, ако размислите, од А Пре тренутак, што је стринг? 1823 01:31:42,630 --> 01:31:50,460 Па, низ, као Замила, З-А-М-М-л-А је, технички, 1824 01:31:50,460 --> 01:31:51,400 само низ. 1825 01:31:51,400 --> 01:31:53,700 То је низ знакова. 1826 01:31:53,700 --> 01:31:59,250 >> Па ако стварно ово нацртао, као што сам урадила раније, као комад меморије, 1827 01:31:59,250 --> 01:32:04,510 испада да сваки од њих карактера заузима један бајт. 1828 01:32:04,510 --> 01:32:07,630 А онда је то посебан Сентинел карактер, косих 0, 1829 01:32:07,630 --> 01:32:12,360 или свих осам бита 0, да разграничава крај тог низа. 1830 01:32:12,360 --> 01:32:15,090 Дакле низ, испоставило од, под знацима навода стринг, 1831 01:32:15,090 --> 01:32:20,580 је само низ цхара-- цхар је стварна тип података. 1832 01:32:20,580 --> 01:32:24,560 >> А сада, аргв, меанвхиле-- Вратимо се на програму. 1833 01:32:24,560 --> 01:32:29,582 Аргв, иако видимо реч ниска овде, није сама по себи низ. 1834 01:32:29,582 --> 01:32:33,640 Аргв, расправа вектор, је низ од низова. 1835 01:32:33,640 --> 01:32:37,620 >> Дакле, као што можете имати низ карактера, можете имати виши ниво, 1836 01:32:37,620 --> 01:32:46,279 низ стрингс-- тако, на пример, кад сам куцао малочас ./аргв0 1837 01:32:46,279 --> 01:33:00,150 аргв0, простор је З-А-М-М-л-А тврди да је , аргв имао два конце у То-- ./аргв0, 1838 01:33:00,150 --> 01:33:03,185 и З-А-М-И-Л-А. у Другим речима, аргц! је 2. 1839 01:33:03,185 --> 01:33:03,980 Зашто је то? 1840 01:33:03,980 --> 01:33:08,370 >> Па, ефикасно, шта се дешава јесте да сваки од ових низова 1841 01:33:08,370 --> 01:33:13,990 је, наравно, низ знакова Као и раније, сваки од чијег карактера 1842 01:33:13,990 --> 01:33:15,670 заузима један бајт. 1843 01:33:15,670 --> 01:33:19,720 И не мешај стварни 0 у име програма са 0, 1844 01:33:19,720 --> 01:33:22,040 што значи да све 80 бита. 1845 01:33:22,040 --> 01:33:27,140 И Замила, у међувремену, још увек Такође низ знакова. 1846 01:33:27,140 --> 01:33:31,450 >> Дакле, на крају крајева, то стварно изгледа овако испод хаубе. 1847 01:33:31,450 --> 01:33:38,800 Али, аргв, по природи како главни радови, ми омогућава да заврши све ово 1848 01:33:38,800 --> 01:33:44,810 горе у, ако хоћете, а већи низ да, ако се нешто више од поједноставимо 1849 01:33:44,810 --> 01:33:48,180 како слика изгледа и не сасвим је нацртати да смањи тамо, 1850 01:33:48,180 --> 01:33:56,720 овај низ је само величине 2, први елемент који садржи низ, 1851 01:33:56,720 --> 01:33:59,230 Други елемент који садржи низ. 1852 01:33:59,230 --> 01:34:01,687 И, заузврат, ако ви мало зумира свакој 1853 01:34:01,687 --> 01:34:03,770 тих стрингс, шта види испод хаубе 1854 01:34:03,770 --> 01:34:07,190 је да сваки низ је само низ знакова. 1855 01:34:07,190 --> 01:34:11,680 >> Сада, као и код жице, били смо у могућности да добију приступ 1856 01:34:11,680 --> 01:34:15,260 карактеру и-тог у низу користећи тај квадратни конзоле запис. 1857 01:34:15,260 --> 01:34:17,320 Слично, са низовима уопште, можемо 1858 01:34:17,320 --> 01:34:22,700 користе средња заграда запис да на било који број низова у низу? 1859 01:34:22,700 --> 01:34:25,100 На пример, нека ме само напред и уради то. 1860 01:34:25,100 --> 01:34:32,420 >> Пусти ме напред и створити аргв1.ц, који је мало другачији овај пут. 1861 01:34:32,420 --> 01:34:35,635 Уместо провере за аргц2, Ја ћу уместо тога ово. 1862 01:34:35,635 --> 01:34:41,270 За Инт добијем 0, ја је мање него аргц, ја плус плус, 1863 01:34:41,270 --> 01:34:47,920 а потом одштампати унутар ове, посто ова, нова линија, а затим 1864 01:34:47,920 --> 01:34:50,740 , аргв носач ја. 1865 01:34:50,740 --> 01:34:55,220 >> Другим речима, ја не бавимо појединачни ликови у овом тренутку. 1866 01:34:55,220 --> 01:35:00,190 Аргв, као што указује овим празним квадратом се припрема за десно од имена аргв, 1867 01:35:00,190 --> 01:35:03,320 значи, аргв је низ жице. 1868 01:35:03,320 --> 01:35:04,870 И аргц је само инт. 1869 01:35:04,870 --> 01:35:08,800 >> Ова линија овде, 6, је каже Кренуо сам једнак 0. 1870 01:35:08,800 --> 01:35:11,980 Тачка скроз до, али не укључујући, аргц. 1871 01:35:11,980 --> 01:35:14,010 А онда на свакој итерацији, одштампате стринг. 1872 01:35:14,010 --> 01:35:14,800 Шта низ? 1873 01:35:14,800 --> 01:35:17,270 >> И-те низ у аргв. 1874 01:35:17,270 --> 01:35:19,530 Према томе, док пре него што сам био користеци квадратни носач 1875 01:35:19,530 --> 01:35:22,180 нотација да се на ити лик у серији, сада 1876 01:35:22,180 --> 01:35:27,240 Ја користим квадрат носач запис да се на-тог низа у низ. 1877 01:35:27,240 --> 01:35:30,310 Дакле, то је врста једног слоја горе, концептуално. 1878 01:35:30,310 --> 01:35:35,390 >> Па шта је згодно о томе Програм сада, ако сам саставити аргв1, 1879 01:35:35,390 --> 01:35:42,067 а онда ./аргв1, а затим укуцајте у нешто слично Фоо Бар баз, 1880 01:35:42,067 --> 01:35:45,400 који су три стандардне речи које а компјутерски научник посеже за било које време 1881 01:35:45,400 --> 01:35:51,010 он или она треба неке речи као чувари места, и притисните Ентер, сваки од тих речи, 1882 01:35:51,010 --> 01:35:54,980 укључујући име програма, који је аргв на првој локацији, 1883 01:35:54,980 --> 01:35:58,320 завршава се штампа један по један. 1884 01:35:58,320 --> 01:36:05,290 И ако променим ово, и ја кажем нешто као аргв1 Замила Цхан, 1885 01:36:05,290 --> 01:36:08,800 добијамо све три оних речи, што је аргв0, 1886 01:36:08,800 --> 01:36:14,400 аргв1, аргв2, јер у овом Случај аргц, гроф, је 3. 1887 01:36:14,400 --> 01:36:20,020 >> Али, оно што је лепо је ако разумете да, аргв је само низ жице, 1888 01:36:20,020 --> 01:36:24,910 и ви разумете да је низ је низ знакова, 1889 01:36:24,910 --> 01:36:29,470 можемо некако од користи ово средња заграда нотатион више пута 1890 01:36:29,470 --> 01:36:33,320 изабрати стринг, а затим изаберите карактер у низу, 1891 01:36:33,320 --> 01:36:35,730 роњење у дубље на следећи начин. 1892 01:36:35,730 --> 01:36:40,100 У овом примеру, пусти ме напред и зову аргв2.ц. 1893 01:36:40,100 --> 01:36:43,920 1894 01:36:43,920 --> 01:36:50,180 И у овом примеру, пусти ме само напред и урадити фолловинг-- за ИНТ И гет 0, 1895 01:36:50,180 --> 01:36:53,286 и је мање од аргц, и плус Плус, као и пре. 1896 01:36:53,286 --> 01:36:55,910 Дакле, у другој вордс-- и сада ово постаје довољно компликован. 1897 01:36:55,910 --> 01:36:59,940 Онда ћу рећи Посматрајте преко жице у аргв, 1898 01:36:59,940 --> 01:37:01,294 као коментар на себи. 1899 01:37:01,294 --> 01:37:03,960 А онда ћу имати угнијежђена за петље, који вам вероватно 1900 01:37:03,960 --> 01:37:06,290 учинио, или се сматра ради, у Сцратцх, где 1901 01:37:06,290 --> 01:37:08,600 Ја ћу рећи да сам инт-- неће поново користити, 1902 01:37:08,600 --> 01:37:12,590 јер не желим да сенке, или некако преко постојећег и. 1903 01:37:12,590 --> 01:37:15,780 >> Ја ћу, уместо тога, кажу ј, јер то је мој иди на променљиву после И, 1904 01:37:15,780 --> 01:37:18,590 када Ја само покушавам да рачунати једноставне бројеве. 1905 01:37:18,590 --> 01:37:28,850 За Ј добија 0-- и такође, н ће добити оштро дужину аргв носача и, 1906 01:37:28,850 --> 01:37:36,030 докле год ј мањи од м, Ј плус, плус, урадите следеће. 1907 01:37:36,030 --> 01:37:37,500 И овде је занимљив део. 1908 01:37:37,500 --> 01:37:46,330 >> Одштампати карактер и нову линију, укључивања у аргв носач И, конзола ј. 1909 01:37:46,330 --> 01:37:47,940 У реду, па да додам неке коментаре овде. 1910 01:37:47,940 --> 01:37:54,820 Посматрајте преко знакова у тренутном низу, 1911 01:37:54,820 --> 01:38:02,290 штампа ј-ти лик у и-том низу. 1912 01:38:02,290 --> 01:38:04,630 Дакле, сада, хајде да размотримо Шта значе ови коментари. 1913 01:38:04,630 --> 01:38:06,750 >> Посматрајте преко жице у аргв-- колико 1914 01:38:06,750 --> 01:38:09,300 жице су у аргв, који је низ? 1915 01:38:09,300 --> 01:38:13,420 Аргц многи, па сам итератинг од ја једнака 0 до аргц. 1916 01:38:13,420 --> 01:38:20,020 У међувремену, колико знакова у и-том низу у аргв? 1917 01:38:20,020 --> 01:38:22,880 >> Па, да се тај одговор, И јуст цалл дужину стринг 1918 01:38:22,880 --> 01:38:26,810 на И Царе струје стринг о, што је, аргв носач ја. 1919 01:38:26,810 --> 01:38:30,090 И ја ћу да привремено складишти да вредност у Н, само за потребе кеширању, 1920 01:38:30,090 --> 01:38:31,590 да га се сетите за ефикасност. 1921 01:38:31,590 --> 01:38:36,330 А онда ћу иницијализирати ј 0, Настави тако дуго док ј мање од Н, 1922 01:38:36,330 --> 01:38:38,430 и на сваком итерација прираста ј. 1923 01:38:38,430 --> 01:38:41,030 >> А онда овде, по мој коментар на линији 12, 1924 01:38:41,030 --> 01:38:43,390 одштампати карактер, затим нове линије, 1925 01:38:43,390 --> 01:38:48,140 посебно аргв носач И ми даје и-тог стринг 1926 01:38:48,140 --> 01:38:51,690 у аргв-- па је прво речи, друга реч, трећа реч, шта год. 1927 01:38:51,690 --> 01:38:57,370 И онда ј зарони у дубље, и добија ми карактер ј-ти те речи. 1928 01:38:57,370 --> 01:39:02,200 И тако, у ствари, можете лечити , аргв као мулти-димензионални, 1929 01:39:02,200 --> 01:39:06,050 као дводимензионални, низ, при чему свака реч некако изгледа 1930 01:39:06,050 --> 01:39:08,580 овако у ваш ум је око, и сваки карактер 1931 01:39:08,580 --> 01:39:10,930 је врста састоји у колона, ако то помаже. 1932 01:39:10,930 --> 01:39:13,260 >> У стварности, када задиркују ово осим у наредним недељама, 1933 01:39:13,260 --> 01:39:15,580 то ће бити мало софистициранији од тога. 1934 01:39:15,580 --> 01:39:17,800 Али ти можеш стварно мислим о томе, за сада, 1935 01:39:17,800 --> 01:39:22,110 као што је управо овај дводимензионални низ, при чему један ниво од њега 1936 01:39:22,110 --> 01:39:23,260 је све жице. 1937 01:39:23,260 --> 01:39:26,760 И ако ронити у дубље, могу добити на појединим ликовима 1938 01:39:26,760 --> 01:39:29,600 је у њима користећи ову запис овде. 1939 01:39:29,600 --> 01:39:31,620 >> Дакле, шта је нето ефекат? 1940 01:39:31,620 --> 01:39:34,970 Пусти ме напред и да аргв2-- Проклетство. 1941 01:39:34,970 --> 01:39:36,210 Направио сам грешку. 1942 01:39:36,210 --> 01:39:40,160 Имплицитно прогласити библиотека функција Стирлинг. 1943 01:39:40,160 --> 01:39:42,190 Дакле, све ово време, то је можда прикладно 1944 01:39:42,190 --> 01:39:45,130 да смо на неки начин завршетка тачно где смо почели. 1945 01:39:45,130 --> 01:39:48,160 >> Зезнуо сам, имплицитно изјављујући библиотека функција Стирлинг. 1946 01:39:48,160 --> 01:39:48,987 У реду, чекај мало. 1947 01:39:48,987 --> 01:39:51,070 Сећам се да је, посебно јер је овде. 1948 01:39:51,070 --> 01:39:54,490 Морам да укључи стринг.х у ова верзија програма. 1949 01:39:54,490 --> 01:40:00,050 >> Пусти ме напред и укључују стринг.х, осим што, само напред 1950 01:40:00,050 --> 01:40:04,460 и рецомпиле аргв2. 1951 01:40:04,460 --> 01:40:08,390 А сада, идемо, да аргв2, Ентер. 1952 01:40:08,390 --> 01:40:10,590 И мада је мало Цриптиц на први поглед, 1953 01:40:10,590 --> 01:40:15,690 приметити да, заиста, шта је одштампан је тачка аргв2. 1954 01:40:15,690 --> 01:40:19,970 >> Али ако укуцам неке речи након што је брз, као аргв2 Замила Цхан, 1955 01:40:19,970 --> 01:40:22,560 Унесите, такође мало Цриптиц на први поглед. 1956 01:40:22,560 --> 01:40:30,540 Али ако се померите назад, ./аргв2 З-А-М-И-Л-А Ц-Х-А-Н. 1957 01:40:30,540 --> 01:40:32,190 Тако смо поновио преко сваке речи. 1958 01:40:32,190 --> 01:40:37,770 И заузврат смо итератед овер сваки лик у речи. 1959 01:40:37,770 --> 01:40:40,040 >> Сада, након свега овога, схватити да постоји 1960 01:40:40,040 --> 01:40:43,120 један други детаљ смо били љубазни игнорисања све време. 1961 01:40:43,120 --> 01:40:46,180 Управо смо задиркивали, осим што улази главни може бити? 1962 01:40:46,180 --> 01:40:47,780 Шта је са излаз главни је? 1963 01:40:47,780 --> 01:40:50,540 >> Све ово време, били смо само копирање и лепљење 1964 01:40:50,540 --> 01:40:53,870 Реч Инт испред главног, мада можете видети на мрежи, 1965 01:40:53,870 --> 01:40:58,340 понекад погрешно у старијим верзијама од Ц и компајлера, да кажу празнина, 1966 01:40:58,340 --> 01:40:59,410 или ништа. 1967 01:40:59,410 --> 01:41:01,580 Али, заиста, за верзија од Ц да користимо, 1968 01:41:01,580 --> 01:41:06,180 Ц 11, или 2011, схватити да треба да буде Инт. 1969 01:41:06,180 --> 01:41:09,300 И то ни требало да буде празнина или аргц и аргв овде. 1970 01:41:09,300 --> 01:41:10,790 >> Али зашто маин? 1971 01:41:10,790 --> 01:41:12,480 Шта је то заправо враћа? 1972 01:41:12,480 --> 01:41:16,280 Па, испоставило се да све ово време, сваки пут када сам написао програм маин 1973 01:41:16,280 --> 01:41:18,440 увек враћа нешто. 1974 01:41:18,440 --> 01:41:19,960 Али то је радио тако тајно. 1975 01:41:19,960 --> 01:41:23,350 >> То нешто је Инт, као линија 5 сугерише. 1976 01:41:23,350 --> 01:41:24,225 Али шта Инт? 1977 01:41:24,225 --> 01:41:26,100 Па, ту је ово конвенција у програмирању, 1978 01:41:26,100 --> 01:41:29,790 при чему ако ништа има кренуло наопако и све је добро, 1979 01:41:29,790 --> 01:41:34,250 програми и функције генерално ретурн-- нешто цоунтеринтуитивели-- 1980 01:41:34,250 --> 01:41:35,230 0. 1981 01:41:35,230 --> 01:41:38,070 0 обично означава све је добро. 1982 01:41:38,070 --> 01:41:40,610 Дакле, иако мислиш о она као лажна у многим контекстима, 1983 01:41:40,610 --> 01:41:42,930 заправо уопште значи добру ствар 1984 01:41:42,930 --> 01:41:49,560 >> У међувремену, ако програм врати 1, или негативна 1 или 5, или негативно 42, 1985 01:41:49,560 --> 01:41:52,941 или било који не-0 вредност, да генерално означава 1986 01:41:52,941 --> 01:41:54,190 да нешто није у реду. 1987 01:41:54,190 --> 01:41:56,700 У ствари, на свом Мац или ПЦ, можда су уствари једини видели 1988 01:41:56,700 --> 01:42:01,050 порука о грешци, при чему је каже нешто или друге, грешка 1989 01:42:01,050 --> 01:42:04,940 код негативан 42, или грешка код 23, или нешто слично. 1990 01:42:04,940 --> 01:42:08,980 Тај број је обично само наговештај за програмера или компаније 1991 01:42:08,980 --> 01:42:11,174 који је софтвер, шта је пошло наопако и зашто, 1992 01:42:11,174 --> 01:42:13,590 тако да могу да гледају кроз њихова документација или код, 1993 01:42:13,590 --> 01:42:15,465 и схватити шта Грешка у ствари значи. 1994 01:42:15,465 --> 01:42:18,400 То је генерално не корисно за нас крајњим корисницима. 1995 01:42:18,400 --> 01:42:20,550 >> Али када главни враћа 0, све је добро. 1996 01:42:20,550 --> 01:42:23,770 А ако не наведете шта главни треба да се врати, 1997 01:42:23,770 --> 01:42:26,950 то ће само аутоматски ретурн 0 за тебе. 1998 01:42:26,950 --> 01:42:30,870 Али повратак нешто друго је заправо корисно. 1999 01:42:30,870 --> 01:42:34,660 >> У овом последњем програму, пусти ме само напред и зову екит.ц, 2000 01:42:34,660 --> 01:42:38,630 и увести последњи данашње тема, познати као код грешке. 2001 01:42:38,630 --> 01:42:42,930 Пусти ме напред и укључују наш познати фајлова до врха, до маин. 2002 01:42:42,930 --> 01:42:49,500 И овога пута, урадимо инт аргц, жица, аргв, и са мојим заградама 2003 01:42:49,500 --> 01:42:50,836 имплицира да је у низу. 2004 01:42:50,836 --> 01:42:52,460 А онда дозволите ми да уради проверу исправности. 2005 01:42:52,460 --> 01:42:56,640 Овај пут, ако аргц не једнак 2, онда знате шта? 2006 01:42:56,640 --> 01:42:57,520 Заборави. 2007 01:42:57,520 --> 01:43:03,170 Ја ћу рећи да, хеј, корисник, вам недостају командне линије аргумент 2008 01:43:03,170 --> 01:43:04,210 обрнута коса црта бр. 2009 01:43:04,210 --> 01:43:05,230 >> И то је то. 2010 01:43:05,230 --> 01:43:06,130 Желим да изађете. 2011 01:43:06,130 --> 01:43:11,030 Ја ћу да превентивно, и прерано стварно, повратак 2012 01:43:11,030 --> 01:43:12,810 нешто друго од броја 1. 2013 01:43:12,810 --> 01:43:15,360 Го То вредности за први грешка која се може десити је 1. 2014 01:43:15,360 --> 01:43:17,860 Ако имате неки други погрешан што би могло доћи, 2015 01:43:17,860 --> 01:43:21,390 могло би се рећи повратак 2 или да се врате 3, или можда чак и негативан 1 или негативна 2. 2016 01:43:21,390 --> 01:43:23,750 >> Ово су само излазне кодови који су, генерално, 2017 01:43:23,750 --> 01:43:27,770 само корисно за програмера, или компанија која испоручује софтвер. 2018 01:43:27,770 --> 01:43:30,500 Али је чињеница да је Не 0 је оно што је важно. 2019 01:43:30,500 --> 01:43:34,310 Дакле, ако у овом програму, желим да гарантује да овај програм само 2020 01:43:34,310 --> 01:43:38,190 ради ако ме корисник обезбеђује свађом тачки два, 2021 01:43:38,190 --> 01:43:42,880 назив програма, и неки други реч, могу применити колико следи, 2022 01:43:42,880 --> 01:43:46,110 викати на корисника са принтф изрека, недостаје линијски аргумент, 2023 01:43:46,110 --> 01:43:46,970 ретурн 1. 2024 01:43:46,970 --> 01:43:49,940 То ће само одмах отказ програм. 2025 01:43:49,940 --> 01:43:55,840 >> Само ако аргц! Једнака 2 ћемо добити доле овде, на којој тачки ћу рећи, 2026 01:43:55,840 --> 01:44:00,410 здраво посто ова, косих н аргв1. 2027 01:44:00,410 --> 01:44:03,827 Другим речима, ја сам Не иде после аргв 0, 2028 01:44:03,827 --> 01:44:05,410 који је само име програма. 2029 01:44:05,410 --> 01:44:09,450 Желим да одштампате здраво, зарез, друга реч да је човек откуца. 2030 01:44:09,450 --> 01:44:12,580 И у овом случају на линија 13, све је добро. 2031 01:44:12,580 --> 01:44:15,920 >> Знам да аргц је 2 логички из овог програма. 2032 01:44:15,920 --> 01:44:17,770 Ја идем напред и врати 0. 2033 01:44:17,770 --> 01:44:21,230 Као страну, имајте на уму да то је тачно у Огреби и. 2034 01:44:21,230 --> 01:44:24,760 >> Логично, ја то могу и обухвати ове редове 2035 01:44:24,760 --> 01:44:27,020 кода у овом другом клаузуле овде. 2036 01:44:27,020 --> 01:44:29,420 Али то је нека врста непотребно увлачењем мој код. 2037 01:44:29,420 --> 01:44:31,800 И желим да се супер јасно да без обзира на све, 2038 01:44:31,800 --> 01:44:34,670 подразумевано, здраво нешто ће се штампати, 2039 01:44:34,670 --> 01:44:36,050 све док корисник сарађује. 2040 01:44:36,050 --> 01:44:39,360 >> Зато је веома уобичајено да се користе услов, само ако, 2041 01:44:39,360 --> 01:44:41,870 ухватити неки погрешан ситуација, а онда излаз. 2042 01:44:41,870 --> 01:44:45,690 И онда, толико дуго све је добро, немају друго, 2043 01:44:45,690 --> 01:44:48,060 али само код ван ако, јер је то 2044 01:44:48,060 --> 01:44:51,060 еквивалент у овом конкретном случају, логично. 2045 01:44:51,060 --> 01:44:54,480 Па Враћам 0, да би експлицитно означавају све је добро. 2046 01:44:54,480 --> 01:44:58,480 >> Ако сам пропустио повратак 0, било би се аутоматски претпоставити за мене. 2047 01:44:58,480 --> 01:45:00,890 Али сада да се враћам један у бар овом случају, 2048 01:45:00,890 --> 01:45:04,940 Ја ћу, за сваки случај и јасноћа, ретурн 0 у овом случају. 2049 01:45:04,940 --> 01:45:09,690 Дакле, сада пусти ме напред и да излаз, који је савршен Сегуе да само оду. 2050 01:45:09,690 --> 01:45:14,401 >> Али да излаз, и пусти ме напред и до ./екит, Ентер. 2051 01:45:14,401 --> 01:45:16,900 И програм викао на мене, недостаје командне линије аргумент. 2052 01:45:16,900 --> 01:45:18,120 ОК, да сарађују. 2053 01:45:18,120 --> 01:45:23,810 >> Пусти ме уместо тога ./екит, Дејвид, Ентер. 2054 01:45:23,810 --> 01:45:25,190 И сада се каже, здраво Дејвид. 2055 01:45:25,190 --> 01:45:27,300 И не би нормално види ово. 2056 01:45:27,300 --> 01:45:30,650 >> Али испоставило се да постоји Посебан начин у Линук заправо видети 2057 01:45:30,650 --> 01:45:34,470 са оним чекера програм изашао. 2058 01:45:34,470 --> 01:45:37,184 Понекад у графичком свет као Мац ОС или Виндовс, 2059 01:45:37,184 --> 01:45:40,100 ви само видите ове бројеве када је порука о грешци се појављује на екрану 2060 01:45:40,100 --> 01:45:41,940 и програмер показује вам тај број. 2061 01:45:41,940 --> 01:45:44,773 Али, ако желимо да видимо каква је грешка Порука је, можемо то овде- 2062 01:45:44,773 --> 01:45:48,100 тако ./екит, Ентер, штампа недостаје командне линије аргумент. 2063 01:45:48,100 --> 01:45:54,590 >> Ако ја сада ецхо ?, који је смешно загонетан гледа. 2064 01:45:54,590 --> 01:45:56,590 Али $? 2065 01:45:56,590 --> 01:45:59,220 је магичан бајање да каже, хеј, рачунар, 2066 01:45:59,220 --> 01:46:01,900 реци ми шта је претходна програма чекера је. 2067 01:46:01,900 --> 01:46:03,410 И притисните Ентер. 2068 01:46:03,410 --> 01:46:07,520 Видим 1, јер то је оно што ја рекао мом основну функцију да се врати. 2069 01:46:07,520 --> 01:46:12,310 >> У међувремену, ако ја ./екит Давид, и притисните Ентер, видим, хелло Давид. 2070 01:46:12,310 --> 01:46:16,800 И ако ја сад да радим ецхо ?, видим здраво 0. 2071 01:46:16,800 --> 01:46:19,080 И то ће заправо бити драгоцене информације 2072 01:46:19,080 --> 01:46:23,420 у контексту отклањање грешака, не тако много да ви, људска би стало. 2073 01:46:23,420 --> 01:46:26,060 Али за отклањање грешака и други програми које ћемо користити овај семестар 2074 01:46:26,060 --> 01:46:29,420 Често ће изгледати тај број, иако је некако скривена 2075 01:46:29,420 --> 01:46:32,780 осим ако то траже, да утврдити да ли програм је или није 2076 01:46:32,780 --> 01:46:37,050 извршење је тачно или нетачно. 2077 01:46:37,050 --> 01:46:40,450 >> И тако то нас доводи до то, на крају дана. 2078 01:46:40,450 --> 01:46:43,917 Почели смо данас гледајући отклањање грешака, а заузврат у току 2079 01:46:43,917 --> 01:46:46,750 Сама, а затим још интересантније, технички испод хаубе 2080 01:46:46,750 --> 01:46:49,490 на шта жице су, који траје недеља смо узели здраво за готово, 2081 01:46:49,490 --> 01:46:51,900 и сигурно их је здраво за готово у Сцратцх. 2082 01:46:51,900 --> 01:46:56,040 >> Затим смо гледали како можемо да приступимо поједини ликови у низу, 2083 01:46:56,040 --> 01:47:00,310 а онда опет узео виши ниво поглед на ствари, гледајући како па-- 2084 01:47:00,310 --> 01:47:04,226 ако желимо да се на појединца елементи на листи као што је структура, 2085 01:47:04,226 --> 01:47:05,850 Не можемо то са вишеструким жице? 2086 01:47:05,850 --> 01:47:08,050 И можемо са аргументе командне линије. 2087 01:47:08,050 --> 01:47:12,800 Али ово слика овде на само кутија је демонстративни ове опште идеје 2088 01:47:12,800 --> 01:47:14,451 једног низа или листе, или вектор. 2089 01:47:14,451 --> 01:47:16,450 И у зависности од контекст, све ове речи 2090 01:47:16,450 --> 01:47:17,880 значи мало различите ствари. 2091 01:47:17,880 --> 01:47:20,060 Дакле, у Ц, ми само идемо да говори о низу. 2092 01:47:20,060 --> 01:47:23,840 Као и низ је комад меморије, од којих је свако је 2093 01:47:23,840 --> 01:47:27,720 елементи су суседни, назад, да подрже, да подржи, на леђима. 2094 01:47:27,720 --> 01:47:31,970 >> И ти елементи су, углавном, истог типа података, карактер, 2095 01:47:31,970 --> 01:47:35,966 карактер, карактер, лик, или Стринг, Стринг, Стринг, Стринг, или инт 2096 01:47:35,966 --> 01:47:38,600 Инт, Инт, шта год да је покушавамо да продавници. 2097 01:47:38,600 --> 01:47:42,540 Али на крају крајева, ово је како изгледа концептуално. 2098 01:47:42,540 --> 01:47:44,530 Узимаш своје рачунара меморија или РАМ. 2099 01:47:44,530 --> 01:47:48,590 И ти то резбарење напоље у исте величине кутије, што све 2100 01:47:48,590 --> 01:47:50,920 су се вратили, то бацк, на назад, то бацк на овај начин. 2101 01:47:50,920 --> 01:47:53,200 >> А шта је лепо у вези ова идеја, као и чињеница 2102 01:47:53,200 --> 01:47:58,580 да можемо изразити вредности на овај начин са првим наших структура података 2103 01:47:58,580 --> 01:48:02,520 у класи, значи можемо да почнемо за решавање проблема са кодом 2104 01:48:02,520 --> 01:48:04,079 да је тако интуитивно у недељи 0. 2105 01:48:04,079 --> 01:48:05,870 Ви се сећате телефон књига пример, где 2106 01:48:05,870 --> 01:48:09,110 користили смо завади па владај, или бинарна претрага, 2107 01:48:09,110 --> 01:48:13,220 да претура по целини гомила имена и бројева. 2108 01:48:13,220 --> 01:48:18,220 Али смо претпоставили, опозив, да је телефонски именик је већ поредани, 2109 01:48:18,220 --> 01:48:21,630 да је неко други већ фигуред оут-- дат списак имена 2110 01:48:21,630 --> 01:48:24,430 и нумберс-- како их азбучним. 2111 01:48:24,430 --> 01:48:26,950 И сада је у Ц ми, такође имају способност 2112 01:48:26,950 --> 01:48:30,290 да постави ствари, не физички у телефонском именику 2113 01:48:30,290 --> 01:48:34,220 али практично у рачунар је меморија, ћемо моћи следеће недеље 2114 01:48:34,220 --> 01:48:38,470 да поново уведе ово-- први наших структура података у једној арраи-- 2115 01:48:38,470 --> 01:48:43,530 али што је још важније, стварна рачунар сциенце алгоритми имплементиран 2116 01:48:43,530 --> 01:48:47,720 у коду, са којима можемо похранити подаци у структурама као што је овај, 2117 01:48:47,720 --> 01:48:50,730 и онда почну да га манипулишу, и у ствари решавају проблеме са њим, 2118 01:48:50,730 --> 01:48:53,570 и да се изгради поврх тога, на крају, програми у Ц, 2119 01:48:53,570 --> 01:48:56,730 у Питхон, у ЈаваСцрипт, упита базе података са СКЛ? 2120 01:48:56,730 --> 01:48:59,980 >> Па да видимо да сви ови различите идеје фази. 2121 01:48:59,980 --> 01:49:04,100 Али за сада, сећам се да је домен који смо данас представио 2122 01:49:04,100 --> 01:49:06,920 је ово овде, и свет криптографије. 2123 01:49:06,920 --> 01:49:11,200 И међу наредних проблема које сте сами ће решити је уметност криптографије, 2124 01:49:11,200 --> 01:49:13,630 кодирање и де-кодирање информације, и закривање 2125 01:49:13,630 --> 01:49:15,930 и дешифровање текста, и под претпоставком да на крају 2126 01:49:15,930 --> 01:49:18,970 да сада знате шта је испод хаубе 2127 01:49:18,970 --> 01:49:21,860 тако да када видите или примате порука овако, те 2128 01:49:21,860 --> 01:49:24,060 сами могу да дешифрује. 2129 01:49:24,060 --> 01:49:26,740 Све ово, и више следећи пут. 2130 01:49:26,740 --> 01:49:29,890 2131 01:49:29,890 --> 01:49:30,790 >> [ВИДЕО РЕПРОДУКЦИЈА] 2132 01:49:30,790 --> 01:49:32,970 >> -Мовер Управо стигао. 2133 01:49:32,970 --> 01:49:35,146 Идем да одем у посету његов професор високе школе. 2134 01:49:35,146 --> 01:49:37,611 Да. 2135 01:49:37,611 --> 01:49:40,080 Хи. 2136 01:49:40,080 --> 01:49:40,660 То си ти. 2137 01:49:40,660 --> 01:49:44,125 2138 01:49:44,125 --> 01:49:45,110 Чекати! 2139 01:49:45,110 --> 01:49:45,610 Давид. 2140 01:49:45,610 --> 01:49:53,936 2141 01:49:53,936 --> 01:49:56,060 Ја само покушавам да схватим шта се догодило. 2142 01:49:56,060 --> 01:49:58,130 Молим вас, било шта може помоћи. 2143 01:49:58,130 --> 01:50:05,020 2144 01:50:05,020 --> 01:50:08,354 Ви сте били његов колеџ цимер, зар не? 2145 01:50:08,354 --> 01:50:10,770 Били сте тамо са њим када је је завршио пројекат ЦС50? 2146 01:50:10,770 --> 01:50:13,770 2147 01:50:13,770 --> 01:50:15,765 >> [Мусиц плаиинг] 2148 01:50:15,765 --> 01:50:32,110 2149 01:50:32,110 --> 01:50:33,150 >> То је било ЦС50. 2150 01:50:33,150 --> 01:50:42,690 2151 01:50:42,690 --> 01:50:44,770 >> Волим ово место. 2152 01:50:44,770 --> 01:50:45,854 >> -Појести. 2153 01:50:45,854 --> 01:50:47,020 Излазимо из посла. 2154 01:50:47,020 --> 01:50:52,120 2155 01:50:52,120 --> 01:50:53,970 >> [Крај репродукције]