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 >> Дејвид Џ MALAN: Во ред. 4 00:00:15,700 --> 00:00:18,832 Ова е CS50 и ова е почеток на недела 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 воведе higher-- на јазик од пониско ниво познат 11 00:00:34,450 --> 00:00:36,770 како C, нешто што е чисто текстуални. 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 Тука е тоа # Include со овие аглести загради. 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 последен пат беше наречен CS50 ИРО. 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 го printf, што е оваа функција во C, кој 45 00:02:02,940 --> 00:02:05,890 ви овозможува да се печати нешто и да го форматирате на екранот. 46 00:02:05,890 --> 00:02:07,950 Воведовме CS50 Библиотека, каде што 47 00:02:07,950 --> 00:02:11,420 има сега на get_char располагање, и get_int, и get_string, 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 И ние исто така се погледне на работите како these- bool, и знак, 51 00:02:20,640 --> 00:02:22,490 и двојно, плови, int, long_long стринг. 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 Значи во C, за разлика од нула, ние, всушност, почна да одредите каков вид на податоци 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 А особено, овој јазик C, да се потсетиме 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 ние знаеме, е само бесконечен број на 3s по децималната точка. 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 во CS50, во светот на криптографијата, уметноста на питачи 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 Всушност, пред вас се such-- некои од прва проблеми во C. И шансите се, 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 Одам да се оди напред и да се спаси ова датотека намерно наречен buggy0.c, 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 Па јас ќе одам да се оди напред и да се тип надвор, int главната (празно). 108 00:05:23,820 --> 00:05:28,130 А потоа и во внатрешноста на мојата големи загради, многу познати ( "Здраво, world-- 109 00:05:28,130 --> 00:05:30,980 обратна коса црта, n ") - и точка-запирка. 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 и тип на шминка buggy0, затоа што, повторно, името на датотеката денес е buggy0.c. 113 00:05:40,340 --> 00:05:43,660 Па јас напишете направи buggy0, Enter. 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 >> Значи првата линија на производство по пишување направи buggy0, да се потсетиме, 118 00:05:56,470 --> 00:05:59,540 е прилично опширниот излез ѕвекот е. 119 00:05:59,540 --> 00:06:02,067 Под хаубата, CS50 IDE е конфигуриран 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 Buggy0.c на линијата 3, карактер 5, постои голема, црвени грешка. 125 00:06:17,390 --> 00:06:18,380 Што е тоа? 126 00:06:18,380 --> 00:06:23,562 Имплицитно прогласување библиотека функција printf со тип int (const char *, 127 00:06:23,562 --> 00:06:26,050 ...) [-Werror]. 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 >> имплицитно прогласување библиотека функција printf. 137 00:06:47,940 --> 00:06:51,680 Па дури и ако јас не се разбирам она што имплицитно прогласување библиотека функција 138 00:06:51,680 --> 00:06:54,900 средства, проблемот сигурно се однесува на printf некако. 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 И во она што датотеката не кажеме минатата недела дека printf е цитат, 144 00:07:15,300 --> 00:07:17,080 unquote, пријавена? 145 00:07:17,080 --> 00:07:20,950 Во она што датотеката е прототип? 146 00:07:20,950 --> 00:07:24,640 >> Значи, ако се сеќавате, многу првото нешто што напишан, речиси секоја програма последните time-- 147 00:07:24,640 --> 00:07:30,790 и случајно пред некој миг започна пишување myself-- беше еден here-- 148 00:07:30,790 --> 00:07:38,630 hash-- # Include 00:07:41,860 ако сега можам да се спаси оваа датотека, јас ќе одам да се оди напред и да ја исчистите мојот екран, 150 00:07:41,860 --> 00:07:44,740 кои може да се направи од страна на пишување Јасно, или можете да се одржи контрола L, 151 00:07:44,740 --> 00:07:47,680 само да го исчистите вашиот терминал само за да се елиминираат некои средена. 152 00:07:47,680 --> 00:07:51,370 >> Одам да се оди напред и да Повторно внесете го направи buggy0, Enter. 153 00:07:51,370 --> 00:07:53,790 И Voila, јас се уште се види дека долго команда од ѕвекот, 154 00:07:53,790 --> 00:07:55,470 но нема порака за грешка тоа време. 155 00:07:55,470 --> 00:07:58,800 И навистина, ако јас ./buggy0 направи, исто како и минатиот пат, 156 00:07:58,800 --> 00:08:01,860 каде точка значи тоа директориум, коса црта само значи, 157 00:08:01,860 --> 00:08:05,040 тука доаѓа името на програмата и тоа име на програмата е buggy0, 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 дека самиот персонал CS50 е напиша наречен help50. 164 00:08:21,175 --> 00:08:24,300 И навистина, C не спецификација за на проблем во собата за тоа како да го користите овој. 165 00:08:24,300 --> 00:08:27,210 >> Но, во суштина help50 програма со која вработените CS50 е 166 00:08:27,210 --> 00:08:30,850 напиша дека ви овозможува да се кандидира команда или ја извршите програмата, 167 00:08:30,850 --> 00:08:36,169 и ако не се разбере нејзината излез, да го помине своето производство да help50, 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 слично на ТФ или CA или мене би го направил во лицето на работното време. 173 00:08:54,890 --> 00:08:58,320 >> Па гледам да help50 ако не мора да се признае проблем. 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 така што само еднаш или двапати да се направи некогаш работат help50 за одредена грешка 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 Дозволете ми да оди напред, а во друг датотека ние ќе го наречеме ова buggy1.c. 182 00:09:20,410 --> 00:09:23,110 И во оваа датотека сум ќе deliberately-- 183 00:09:23,110 --> 00:09:26,330 но се преправам дека не се разбере она што грешка што го направив. 184 00:09:26,330 --> 00:09:31,420 >> Одам да се оди напред и да прават this-- # Include, бидејќи јас сум 185 00:09:31,420 --> 00:09:33,660 научив лекцијата од пред една момент. 186 00:09:33,660 --> 00:09:36,220 Int главната (празно), како и досега. 187 00:09:36,220 --> 00:09:40,880 И тогаш тука јас ќе одам да се направи низа S - get_string. 188 00:09:40,880 --> 00:09:43,770 И се сети од последниот пат кога Ова значи дека, еј, компјутер, 189 00:09:43,770 --> 00:09:48,280 дај ми променлива, го нарекуваат S, и се од типот на таа променлива низа 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 е get_string, што е функција во CS50 библиотека 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 не е "свет", но "Здраво,% s-- која е нашата случаеви, запирка s, 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 Датотеката се нарекува buggy1.c. 205 00:10:30,400 --> 00:10:33,770 Па јас ќе одам да направите buggy1, Enter. 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 Па еве јас ја внеле шминка buggy1. 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 Мислев стринг, и мислев get_string. 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 Имам # Include, па имам пристап до printf. 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 Get_string не доаѓа со C. И особено, 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 >> Толку едноставно додава дека една линија на code-- потсетиме од последниот пат 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 може, навистина, да користите било која од функциите во него, меѓу нив get_string. 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 И јас одам да се оди напред и прегласувањето, по спасување моето досие направи buggy1. 243 00:12:20,780 --> 00:12:22,580 И Voila, тоа не работа. 244 00:12:22,580 --> 00:12:29,200 И ако го направам ./buggy1 и напишете, за На пример, Zamyla, јас сега ќе се здраво, 245 00:12:29,200 --> 00:12:32,000 Zamyla, наместо Здраво, свет. 246 00:12:32,000 --> 00:12:32,550 >> Во ред. 247 00:12:32,550 --> 00:12:35,890 Значи takeaways тука тогаш треба да, еден, се обиде да собере колку што можеш 248 00:12:35,890 --> 00:12:39,140 од пораките за грешка сам, во потрага во некои од препознатливите зборови. 249 00:12:39,140 --> 00:12:43,070 Забрана тоа, користете help50 на проблемот спецификација. 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 во CS50 библиотека да им помогне на ви на почетокот на семестарот 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 Јас ќе одам да се јавите на оваа buggy2, кои, повторно, ќе се недостатоци од 257 00:13:04,350 --> 00:13:05,650 на портата, од страна на дизајнот. 258 00:13:05,650 --> 00:13:09,980 >> И јас одам да се оди напред и направете # Include. 259 00:13:09,980 --> 00:13:12,580 А потоа јас ќе одам да направите int главната (празно). 260 00:13:12,580 --> 00:13:14,840 И тогаш јас ќе одам да се направи за телефонска линија. 261 00:13:14,840 --> 00:13:16,690 За (int i _ 0. 262 00:13:16,690 --> 00:13:18,750 i е помала или еднаква на 10. 263 00:13:18,750 --> 00:13:24,260 i ++, а потоа и во големи загради, јас ќе одам да се печати само симбол хаштаг тука 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 да iterate 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 И да се потсетиме дека за циклус, по последните week-- 271 00:13:42,787 --> 00:13:44,620 и ќе добиете повеќе запознаени со синтаксата 272 00:13:44,620 --> 00:13:47,170 со помош на него со практиката пред long-- тоа ми дава 273 00:13:47,170 --> 00:13:49,740 променлива наречена i и го поставува на 0. 274 00:13:49,740 --> 00:13:52,650 >> Овој чекор на зголемување I на секој повторување на 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 Значи сакам да iterate 10 пати, па јас имаат некој вид на многу интуитивно само 279 00:14:06,830 --> 00:14:09,070 стави 10 како мојот горниот врзани таму. 280 00:14:09,070 --> 00:14:14,310 >> А сепак, кога ќе ја извршите оваа, по тоа составувањето со шминка buggy2-- 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 Дозволете ми да оди напред сега и да ја стартувате buggy2, Enter. 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 Па, излегува дека на CS50 библиотека збор 293 00:14:52,300 --> 00:14:55,380 не само со get_string и get_int и get_float и други функции. 294 00:14:55,380 --> 00:14:59,980 Таа, исто така доаѓа со посебна функција наречен eprintf, или, printf грешка. 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 >> Така на пример, едно нешто што би можеле да направите тука со оваа функција е this-- 299 00:15:11,000 --> 00:15:20,230 eprintf, а потоа јас ќе одам да се оди напред и да каже јас сега е% i, обратна коса црта, n. 300 00:15:20,230 --> 00:15:22,330 И јас одам да го приклучиш во вредноста на i. 301 00:15:22,330 --> 00:15:25,400 И до врвот, бидејќи тоа е во CS50 библиотека, 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 Но eprintf, printf грешка, е само наменета да ми даде некои дијагностички информации. 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 Сакам да ја видам, што е вредноста на i? 312 00:15:49,260 --> 00:15:50,290 Која е вредноста на i? 313 00:15:50,290 --> 00:15:51,280 Која е вредноста на i? 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 како што мора да се направи во секое време Јас се направи промена. ./buggy2. 317 00:15:59,905 --> 00:16:02,680 318 00:16:02,680 --> 00:16:03,640 И now-- OK. 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 Името на мојата програмата овде е buggy2. 324 00:16:17,960 --> 00:16:20,432 Името на датотеката е buggy2.c. 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 Јас може да се види дека на првата итерација i е 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 Во programming-- иако не толку во Scratch-- 352 00:17:43,977 --> 00:17:45,810 но во програмирање C и на други јазици, 353 00:17:45,810 --> 00:17:47,670 како вклучите Javascript-и Python и други, тоа е 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 Значи тоа е eprintf. 358 00:17:55,160 --> 00:17:58,600 И повторно, сега што сум ги сфатиле мојата проблем, и јас ќе одам да се врати во 0 359 00:17:58,600 --> 00:18:01,470 со помалку од 10, јас ќе одам да одат и да го избришете eprintf. 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 Одам да се оди напред и да # Include. $ 50 366 00:18:22,850 --> 00:18:25,580 И јас одам да се оди напред и # Include. 367 00:18:25,580 --> 00:18:29,030 >> И јас одам да се спаси оваа датотека како buggy3.c. 368 00:18:29,030 --> 00:18:31,740 И јас одам да се оди напред и го прогласи int главната (празно). 369 00:18:31,740 --> 00:18:34,186 А потоа и во внатрешноста на таму Одам да се направи int i _ - 370 00:18:34,186 --> 00:18:36,435 Сакам да спроведе програма со get_negative_int. 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 И уште сум добил на int од корисникот, 376 00:18:47,290 --> 00:18:53,365 Јас сум само се случува да се печати% i е негативен цел број, обратна коса црта n, запирка, i. 377 00:18:53,365 --> 00:18:55,240 Со други зборови, сите јас сакаат оваа програма да се направи 378 00:18:55,240 --> 00:18:58,000 се добие негативен int од на корисникот, а потоа печати 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 get_negative_int (празно) - и ние ќе се врати на она што значи повторно таа линија 383 00:19:10,670 --> 00:19:18,790 во moment-- int n; do-- do following-- printf n е :. 384 00:19:18,790 --> 00:19:26,210 А потоа јас ќе одам да направите N - get_int, и го прават тоа додека n е поголем од 0. 385 00:19:26,210 --> 00:19:28,310 А потоа се врати n ;. 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 тука сум прогласена за функција наречена get_negative_int, 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 Не постои тип на податоци во C наречен negative_int. 395 00:19:50,040 --> 00:19:52,880 Тоа е само цел број, па затоа се случува да биде на нас да бидете сигурни 396 00:19:52,880 --> 00:19:55,340 дека вредноста која е всушност Се врати не е само int 397 00:19:55,340 --> 00:19:56,380 но исто така е негативен. 398 00:19:56,380 --> 00:20:02,150 >> On-line 12 Јас сум прогласување на променлива наречен n и правење на тип int. 399 00:20:02,150 --> 00:20:07,500 А потоа и во линија 13 до 18 Јас сум прави нешто, додека нешто не е точно. 400 00:20:07,500 --> 00:20:11,040 Јас ќе одам напред и печатење n се применува, дебелото црево, а потоа и простор, 401 00:20:11,040 --> 00:20:12,800 како потсетник за корисникот. 402 00:20:12,800 --> 00:20:16,410 >> тогаш јас сум нарекувајќи get_int и складирање на т.н. повратната вредност 403 00:20:16,410 --> 00:20:18,130 со тоа, што променлива n. 404 00:20:18,130 --> 00:20:22,600 Но јас ќе одам да го прави ова, а n е поголем од 0. 405 00:20:22,600 --> 00:20:27,960 Со други зборови, ако корисникот ми даде дава int, а тој број е поголем од 0, 406 00:20:27,960 --> 00:20:31,180 Ерго, позитивни, јас ќе одам да се само задржи reprompting на корисникот, 407 00:20:31,180 --> 00:20:37,160 задржи reprompting, ќе го натераат да соработуваат и да ми даде негативен Инт. 408 00:20:37,160 --> 00:20:41,640 >> И уште n е всушност negative-- Да претпоставиме дека корисникот конечно видови -50, 409 00:20:41,640 --> 00:20:46,710 тогаш ова додека јамка веќе не е точно бидејќи -50 не е поголем од 0. 410 00:20:46,710 --> 00:20:51,140 Значи ние се пробие на тој јамка логично и да се врати n. 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 оваа функција get_negative_int. 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 Дозволете ми да оди напред и да buggy3. 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 >> Одам да се оди напред сега и да ја стартувате buggy3. 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 >> Но, ајде да се воведе трета дебагирање техниката тука се нарекува debug50. 451 00:22:25,870 --> 00:22:27,750 Значи ова е програма дека ние сме само создаде 452 00:22:27,750 --> 00:22:30,770 оваа година се нарекува debug50 кои ќе ви овозможи 453 00:22:30,770 --> 00:22:34,130 да се користи она што се нарекува вграден графички дебагерот во CS50 ИРО. 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 По составувањето на вашиот код, кои што веќе го направи, buggy3, 461 00:22:58,479 --> 00:23:00,020 да оди напред и да ја стартувате debug50 ./buggy. 462 00:23:00,020 --> 00:23:03,460 463 00:23:03,460 --> 00:23:06,760 Толку многу како help50 има да се кандидира help50 а потоа командата, 464 00:23:06,760 --> 00:23:10,120 debug50 мора да се кандидира и debug50 тогаш името на командата. 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 На терминалот мојот прозорец Јас сум се прашани за n. 476 00:23:40,600 --> 00:23:44,560 И јас одам да се оди напред и да соработуваат ова време и во вид -1. 477 00:23:44,560 --> 00:23:48,770 И иако малку cryptically, -1 е негативен број, како што се очекуваше. 478 00:23:48,770 --> 00:23:52,020 >> И тогаш детето излезе со статус 0 GDBserver излегување. 479 00:23:52,020 --> 00:23:55,180 GDB, GNU грешки, е името на основните софтверски 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 Ако сакам да навистина debug мојата програма, Морам да кажам превентивно debug50, 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 debug50, извршување пауза од мојот код право таму кога ќе ја извршите оваа програма. 491 00:24:29,430 --> 00:24:30,260 >> Па ајде да го направите тоа. 492 00:24:30,260 --> 00:24:37,340 Дозволете ми да оди напред и да ја стартувате мојата програма повторно со debug50 ./buggy3, Enter. 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 Јас сум изјави debug50, ја извршите оваа линија код. 513 00:25:33,639 --> 00:25:34,930 Што значи оваа линија код направам? 514 00:25:34,930 --> 00:25:35,960 ме прашува за int. 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, Enter. 518 00:25:41,340 --> 00:25:42,920 И сега се забележи она што не се сменило. 519 00:25:42,920 --> 00:25:46,060 На десната рака, мојата локална променлива i 520 00:25:46,060 --> 00:25:48,200 се посочуваат како -1 сега. 521 00:25:48,200 --> 00:25:49,810 И тоа е уште од типот int. 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 И сега единствениот локален променлива е i со вредност од 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 Јас се повлече во текот на таа линија, и Voila. 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 >> Одам да ја напуштат таа точка на прекин on line 8 со црвена точка. 538 00:26:31,340 --> 00:26:32,830 Одам да повторување debug50. 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 дозволете ми да всушност одат во внатрешноста на get_negative_int и да дознаам, 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 >> Значи printf ( "n.is:") ;, така што не се случило досега. 554 00:27:13,870 --> 00:27:18,250 Па ајде да одиме напред и да кликнете да се оддалечува. 555 00:27:18,250 --> 00:27:20,326 Сега, мојот брза, навистина, изменета на ( "n е:"). 556 00:27:20,326 --> 00:27:22,450 Сега get_int, јас не одам да се мачи повлекува во, 557 00:27:22,450 --> 00:27:24,750 бидејќи таа функција беше направени од страна на CS50 во библиотеката. 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 int, но не и негативен Инт. 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 Па, n, што е N моментов? 569 00:27:49,920 --> 00:27:53,280 Јас може да се погледне на локално променливи во дебагерот. 570 00:27:53,280 --> 00:27:53,816 n е 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 И можам да кажам, а n е поголемо од или еднакво на 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 Но, готова брза тука е дека со debug 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 како да eprintf за печатење тие вредности. 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 Не постои CA наоколу. 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 Така, на пример, ако ова е мојот пример here-- 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 И тоа е библиотека функција printf. 625 00:30:12,610 --> 00:30:15,290 Declare-- ред, да изјави ме потсетува на прототипи. 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 Немав стандард io.h. 630 00:30:23,580 --> 00:30:24,530 Ти благодарам многу. 631 00:30:24,530 --> 00:30:27,330 >> Па само овој процес ќе of-- не треба да се, всушност, имаат патка. 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.C, можете да се оди преку него 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 Јас сум тоа чување на левата страна on line 8 во променлива наречена i. 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 Не ги преземат сите влезови, се врати на int, ОК. 646 00:31:08,190 --> 00:31:10,929 Изјавувам on-line 14 променлива n. 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 >> Затоа направете го следново додека n is-- да ми го вратите она фикс јас веќе направени. 650 00:31:18,480 --> 00:31:22,710 Па така додека n е поголемо од 0, печатење N е, во ред. 651 00:31:22,710 --> 00:31:25,170 И тогаш јавете се int чуваат во n. 652 00:31:25,170 --> 00:31:30,160 И потоа проверете ако n е 0, n е not-- таму е. 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 По силабусот на предметот е, проблем поставува CS50 е 670 00:32:17,680 --> 00:32:22,320 се проценува на четири основни оски, така да speak-- обемот, точноста, дизајн, 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 >> Точноста е, дали програмата за работа како што би требало да по спецификација CS50 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 >> И тогаш како style-- прилично е вашиот број? 688 00:33:08,530 --> 00:33:12,370 Ќе забележите дека јас сум прилично особено за вовлекување мојот код, 689 00:33:12,370 --> 00:33:15,300 и правејќи се дека моите променливи разумно се именувани. n, 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 >> И со текот на времето, она што ти TAS и TFS ќе го направи во текот 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 И, навистина, ако добиете резултат на било која од овие axes-- коректност, дизајн 702 00:33:45,680 --> 00:33:49,659 и стил especially-- тој број, генерално ќе биде помеѓу 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 И ако сте добивање на некои Poors, тие се можност 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 >> И сега еден збор на this-- академски искреност. 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 дека CS студенти или CS50 студенти, се помалку чесни од своите соученици. 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 и педагошка вредност во вртење на others-- јас, TFS, на договорниот орган, 779 00:37:17,300 --> 00:37:20,760 на TAS, а други во класата, за поддршка, а камоли пријатели 780 00:37:20,760 --> 00:37:23,547 и цимери кои ги проучувале CS и програмирање порано. 781 00:37:23,547 --> 00:37:25,130 И така таму е надоместок за тоа. 782 00:37:25,130 --> 00:37:28,180 А општо правило на палецот е this-- кога прашува за помош, 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 Можете да го направи во CS50 има излез за одредување тој проблем 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 >> [END репродукција] 822 00:39:58,866 --> 00:40:00,490 Дејвид Џ MALAN: Добро, ние сме назад. 823 00:40:00,490 --> 00:40:03,680 И сега ние се погледне во еден од Првиот на нашата реалниот свет домени 824 00:40:03,680 --> 00:40:08,720 во CS50, уметноста на криптографијата, уметноста на праќање и примање 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 од страна на вашиот парче менување хартија, како, од А до Б и Б на C и C до Д, 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 >> Сте биле само го прават Едноставно, многу сличен на Ralphie тука 842 00:41:03,420 --> 00:41:07,934 во познатиот филм кој игра доста реклама nauseum секоја зима. 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 >> -Listen Утре вечер за склучување авантура 856 00:41:41,660 --> 00:41:43,880 на црната пиратскиот брод. 857 00:41:43,880 --> 00:41:46,650 Сега, тоа е време за тајна порака на Annie 858 00:41:46,650 --> 00:41:49,840 за да припадници на тајната круг. 859 00:41:49,840 --> 00:41:53,570 Запомнете, деца, само членови на Тајната Круг на Annie 860 00:41:53,570 --> 00:41:56,140 може да го декодира тајна порака на Annie. 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 >> -Pierre Беше во голема глас вечерва. 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 S, тоа доаѓа полесно сега, U, 25-- 878 00:42:49,032 --> 00:42:51,733 >> -OH, Ајде, Ralphie, морам да одам! 879 00:42:51,733 --> 00:42:53,688 >> -I'll Биде во право надолу, Ма! 880 00:42:53,688 --> 00:42:54,188 Gee факир! 881 00:42:54,188 --> 00:42:58,116 882 00:42:58,116 --> 00:43:04,060 >> Т, О, да бидат сигурни дека to-- бидете сигурни на она што? 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 >> -Ralphie, Енди мора да одат, ќе ве молиме да излезе? 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 >> -Ralphie! 893 00:43:20,670 --> 00:43:23,170 Мора Енди одам! 894 00:43:23,170 --> 00:43:26,890 >> -I'll Биде во право надвор, за плачење гласно! 895 00:43:26,890 --> 00:43:32,680 >> -Almost Таму, моите прсти полета, мојот ум беше челик стапица, секоја пора вибрираше. 896 00:43:32,680 --> 00:43:37,198 Тоа беше речиси јасно, да, да, да. 897 00:43:37,198 --> 00:43:43,091 >> -Бидете Сигурни да пиете ovaltine. 898 00:43:43,091 --> 00:43:43,590 Ovaltine? 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 [END репродукција] 904 00:43:54,810 --> 00:43:57,390 Дејвид Џ MALAN: Добро, па тоа е многу долг пат 905 00:43:57,390 --> 00:44:00,660 за воведување на криптографијата, и, исто така, ovaltine. 906 00:44:00,660 --> 00:44:04,470 Всушност, од оваа стара реклама тука, зошто е ovaltine толку добар? 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 Тоа е дополнително збогатена со дополнителни витамини Б и Д, yum. 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 знам тајна key-- некои вредност, некои тајна фраза, некои тајни број, 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 И тогаш ciphertext е трка на enciphered, или енкриптирани, 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 Тие добиле ciphertext. 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 here-- стрингот. 954 00:46:27,629 --> 00:46:30,295 А низа на крајот на денот е само низа од карактери. 955 00:46:30,295 --> 00:46:33,610 >> Тоа може да биде здраво светот, или Здраво Zamyla, или whatever. 956 00:46:33,610 --> 00:46:37,050 Но, што значи тоа за да биде низа од карактери? 957 00:46:37,050 --> 00:46:41,520 Всушност, CS50 библиотека дава ни тип на податоци се нарекува стринг. 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 на меморијата на вашиот компјутер, или RAM меморија. 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 >> Но, ајде да се разгледа на низа Zamyla. 965 00:47:04,100 --> 00:47:07,480 Па само името човечкиот тука, Zamyla, 966 00:47:07,480 --> 00:47:12,030 кој е низа од знаци, Z-A-M-Y-L-A. 967 00:47:12,030 --> 00:47:16,020 И сега ајде да претпоставиме дека името Zamyla е се складира во внатрешноста на компјутер 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 Па јас сум само се случува да се подготви малку поле околу името Zamyla тука. 972 00:47:24,710 --> 00:47:31,580 И тоа е случај во C дека кога ќе имаат низа, како Zamyla-- а можеби 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 >> Сега, ова е germane за разговор во рака, бидејќи 976 00:47:42,070 --> 00:47:46,420 во криптографијата, ако сакате да го промените А до Б, и Б на C и C до D, 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 Вие треба да бидат способни да се промени на Z на нешто друго, А 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 да се каже, во C за да може да се промени и се погледне на поединечни букви. 983 00:48:03,020 --> 00:48:05,690 И ние може да го направите тоа како што следува. 984 00:48:05,690 --> 00:48:08,340 >> Дозволете ми да се упатат назад во CS50 ИРО. 985 00:48:08,340 --> 00:48:11,130 И дозволете ми да оди напред и да се создаде нова датотека 986 00:48:11,130 --> 00:48:16,134 дека јас ќе се јавам овој пат string0, како наш прв таков пример, точка C. 987 00:48:16,134 --> 00:48:18,300 И јас одам да се оди напред и го разбивам како што следи. 988 00:48:18,300 --> 00:48:22,870 >> Така вклучуваат cs50.h, и тогаш вклучуваат стандардни io.h, 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 int главната празнина, а потоа и овде сум случува да се направи жици добива се стринг. 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 цитат unquote, тоа е низа ми printf. 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 А сега дозволете ми да се кандидира string0, тип во Zamyla. 1006 00:49:09,950 --> 00:49:10,970 ОК, здраво Zamyla. 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 Наместо само печатење Zamyla е Целата име надвор со printf, 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 И јас одам да си даде променлива броење, наречен i. 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 се случува да почне пребројување на i е еднаква на 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 Така индексот ќе биде number-- 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 Имплицитно прогласување библиотека функција Стирлинг со тип како и such-- сега, 1053 00:51:35,390 --> 00:51:36,430 ова звучи познато. 1054 00:51:36,430 --> 00:51:37,440 Но, тоа не printf. 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 Но забележите овде долу малку надолу понатаму, вклучува насловот string.h, 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 меѓу оние кои се достапни за вас, наречен string.h. 1063 00:51:56,480 --> 00:52:00,930 И во таа датотека, string.h Стирлинг е декларирана. 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 >> ./string0 Zamyla и Јас сум за да притиснете Enter, 1067 00:52:12,290 --> 00:52:16,710 на која точка GetString се случува да се врати стринг, го стави во с. 1068 00:52:16,710 --> 00:52:21,890 Тогаш тоа за телефонска линија ќе iterate повеќе карактери S е едно по едно време, 1069 00:52:21,890 --> 00:52:28,420 и да ги испечатите еден на линија, бидејќи Ја имав таа обратна коса црта n на крајот. 1070 00:52:28,420 --> 00:52:34,530 Па можев да се изостави дека обратна коса црта n, а потоа само да се печати Zamyla сите 1071 00:52:34,530 --> 00:52:37,460 во иста линија, ефикасно reimplementing 1072 00:52:37,460 --> 00:52:38,999 printf, што и не е толку корисна. 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 Null е посебна вредност што ние ќе се врати во иднина недела. 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 продолжи доколку тој не е еднакво на null, каде null, повторно, 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 Така на оски CS50 за оценување код, тоа е точно сега. 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 >> Прво, principles-- она што го прави за телефонска линија да направам? 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 Ние се иницијализира i 0. 1136 00:55:52,940 --> 00:55:58,610 Ние се провери и бидете сигурни дека јас е помал од должината на s, што е Z-A-M-Y-L-A, 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 >> Ние испечатите Зи од името Zamyla е. 1140 00:56:05,580 --> 00:56:08,080 Тогаш ние прираст јас од 0 до 1. 1141 00:56:08,080 --> 00:56:11,290 Ние тогаш се провери, е 1 помалку од должината на s? 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 >> Значи ние се печати во името Zamyla е, ZA. 1145 00:56:16,880 --> 00:56:20,090 Ние подигање I од 0, 1, 2. 1146 00:56:20,090 --> 00:56:23,720 Ние тогаш се провери, е помалку од 2 должината на името Zamyla е. 1147 00:56:23,720 --> 00:56:25,380 6- така 2 е помалку од 6. 1148 00:56:25,380 --> 00:56:30,460 Да, да испечатите сега M во име Zamyla е, третиот карактер. 1149 00:56:30,460 --> 00:56:34,110 >> Клучот тука е дека на секоја повторување на приказната, јас сум проверка, 1150 00:56:34,110 --> 00:56:37,810 i е помала од должината на Zamyla? 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 >> Во C, во овој случај, ако тоа е функција која е буквално 1155 00:56:50,220 --> 00:56:53,520 броење на бројот на ликови во Zamyla во секое време 1156 00:56:53,520 --> 00:56:54,740 тоа го нарекуваме функција. 1157 00:56:54,740 --> 00:56:58,500 Секој пат кога ќе го прашуваат компјутерот да се користи Стирлинг, тоа е Гледано во Zamyla, 1158 00:56:58,500 --> 00:57:01,960 и велејќи Z-A-M-Y-L-A, 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 тоа се случува да се погледне во Zamyla повторно, велат Z-А-М-Y-L-А, 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 бара од компјутер, она што е должината на Zamyla повторно, 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 Дозволете ми да оди напред и да го стави во посебен фајл наречен string1.c, 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 дај ми променлива наречена n, чија вредност е еднаква на стринг должина на ОК. 1180 00:58:01,050 --> 00:58:09,410 И сега, ве молиме бидете мојата состојба се додека i е помал од n. 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 Која е должината на името Zamyla е? 1184 00:58:19,780 --> 00:58:20,860 И јас сум тоа ставање на n. 1185 00:58:20,860 --> 00:58:23,050 >> И јас сум уште се проверуваат состојбата во секое време. 1186 00:58:23,050 --> 00:58:24,300 E 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 должината на името Zamyla е? 1191 00:58:33,080 --> 00:58:34,320 Која е должината на името Zamyla е? 1192 00:58:34,320 --> 00:58:35,986 Која е должината на името на овој Zamyla е? 1193 00:58:35,986 --> 00:58:40,440 Јас сум буквално да заборавиме дека првиот и одговори само во овој втор променлива n. 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 што би можело да се нарече i. 1203 00:59:00,710 --> 00:59:03,500 Ако имате должина, n е супер заеднички, како и. 1204 00:59:03,500 --> 00:59:05,800 Но, јас не се коментира било кој од моите код. 1205 00:59:05,800 --> 00:59:09,200 >> Јас не сум информираше reader-- без разлика дали тоа е мојот ТФ, или техничка помош, 1206 00:59:09,200 --> 00:59:12,460 или само colleague-- што би требало што треба да се случува во оваа програма. 1207 00:59:12,460 --> 00:59:15,760 И така да се добие добар стил, она што јас би сакал да се направи 1208 00:59:15,760 --> 00:59:24,580 е this-- нешто како и да побара корисникот за влез. 1209 00:59:24,580 --> 00:59:26,670 И јас може да го преработи уште еднаш ова било кој број на начини. 1210 00:59:26,670 --> 00:59:35,630 >> Бидете сигурни дека s-- бидете сигурни стапите низа се врати стринг. 1211 00:59:35,630 --> 00:59:40,280 А потоа и во here-- и ова е можеби најважните comment-- iterate 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 >> И третата линија во приказната е, iterate во текот на карактери е една 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 уште еден коментар дека само вели печатење i-тиот карактер во с. 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 >> И, навистина, CS50 IDE ги покажува како сива, како да бидат корисни, но не го копчето 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 Дали знаете C програмирање или не, 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 iterate во текот на ликовите во ОК еден по еден, печати карактер 1240 01:00:53,009 --> 01:00:55,550 i-тиот карактер во s-- ти не дури и треба да се погледне на код 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 Значи има оваа функција, во C, и други јазици, 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 Ликовите се само апстракција на врвот на numbers-- броеви, 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 што имавме ASCII, што е само овој код 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 >> И ќе забележите, ние во суштина имаат знаци на горниот ред тука, на пример C ќе им се јавам, 1271 01:02:20,500 --> 01:02:23,400 знаци, а потоа ints на вториот ред. 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 >> Одам да се врати во CS50 ИРО. 1281 01:02:46,340 --> 01:02:50,640 Одам да се создаде датотека со име на ascii 0.c. 1282 01:02:50,640 --> 01:02:55,960 И јас одам да се оди напред и да додадете ми стандард io.h на врвот, int главната неважечки 1283 01:02:55,960 --> 01:02:57,370 на врвот на мојата функција. 1284 01:02:57,370 --> 01:03:02,700 И тогаш јас сум само се случува да се направи following-- за телефонска линија од i еднакви, 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 >> % C е i обратна коса црта n%. 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 >> Сакам да iterate од 65 па наваму за 26 букви од азбуката, 1293 01:03:29,940 --> 01:03:35,190 печатење на секој повторување дека составен еквивалент карактер е. 1294 01:03:35,190 --> 01:03:38,299 Со други зборови, сакам да iterate над 26 броеви печатење 1295 01:03:38,299 --> 01:03:41,590 она што е ASCII карактер, во писмото, и она што is-- соодветниот број 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 >> Па, излегува дека вториот треба само да биде променлива i. 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 ајде да видиме што јас се направи на ascii get-- 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 >> Значи линија five-- па јас не се многу далеку пред нарезници до. 1316 01:04:41,220 --> 01:04:42,140 Во ред е. 1317 01:04:42,140 --> 01:04:46,560 Значи линија 5 за i е еднаква 65-- гледам. 1318 01:04:46,560 --> 01:04:50,130 Па се сеќавам дека во C, за разлика од некои јазици доколку имате пред програмирање 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 Во согласност пет, јас сум започнале да го користат i. 1323 01:04:59,200 --> 01:05:01,560 Но, јас не реков C она што тип на податоци што е. 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 ./ascii0 Внесете, тоа е вид на ладно. 1328 01:05:12,660 --> 01:05:15,360 Не само што е супер брзо за да прашуваат компјутерот на ова прашање, 1329 01:05:15,360 --> 01:05:18,885 наместо да го барате на фолија, го испечати по еден на линија, A е 65, 1330 01:05:18,885 --> 01:05:24,860 Б е 66, па се down-- бидејќи јас го направи ова 26 times-- на буквите ш, 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 Сакам да одам низ z, а не само низ y. 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 Дозволете ми да оди напред и повторување на оваа компајлер, и повторување на ascii 0. 1340 01:05:52,480 --> 01:05:54,940 Излегува дека C е прилично паметни. 1341 01:05:54,940 --> 01:05:57,150 >> И printf, особено, е прилично паметни. 1342 01:05:57,150 --> 01:06:01,260 Ако само да помине јас два пати и за местата за чување, printf 1343 01:06:01,260 --> 01:06:04,510 ќе се реализира, О, добро, јас знаете ми даде еден integer-- некој број, 1344 01:06:04,510 --> 01:06:06,380 како 65 или 90, или whatever. 1345 01:06:06,380 --> 01:06:10,170 Но гледам дека ме сакаат да формат, кој број како лик. 1346 01:06:10,170 --> 01:06:16,460 И така printf може имплицитно го дадат ИНТ на знак за вас, како и. 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 Дозволете ми да оди напред и да се направи една друга верзија на this-- Ascii 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 се додека C е помал или еднаков во главниот град на З А на секој повторување 1354 01:06:41,740 --> 01:06:45,690 Сакам да прираст C, можам да сега во мојот printf линија тука 1355 01:06:45,690 --> 01:06:51,320 да речеме, проценти C е проценти i повторно, запирка В. 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 Ти си само велејќи дека, еј, компјутерски даде ме променлива наречена C од типот char. 1363 01:07:13,060 --> 01:07:16,520 се иницијализира на капиталот А и забележите единечен наводник прашање. 1364 01:07:16,520 --> 01:07:19,580 >> За ликови во C, да се потсетиме од минатата недела, се користи единечен наводник. 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 или еднаква на z. 1368 01:07:28,050 --> 01:07:32,640 И јас знам од моето ASCII табелата дека сите на овие ASCII кодови се соседни. 1369 01:07:32,640 --> 01:07:33,400 >> Нема празнини. 1370 01:07:33,400 --> 01:07:36,737 Па тоа е само од A до Z, одделени со еден број секоја од нив. 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 Можам да ги споделите printf и компјутер дознаам нешто надвор, 1378 01:07:52,680 --> 01:07:57,300 така што сега ако јас се кандидира направи Ascii1./ascii1, 1379 01:07:57,300 --> 01:08:01,520 Јас се иста работа, како и. 1380 01:08:01,520 --> 01:08:04,530 >> Бескорисни програма, though-- никој се случува да се, всушност, пишуваат софтвер 1381 01:08:04,530 --> 01:08:07,549 со цел да дознаам, она што беше број кој мапира на А или Б, или Z? 1382 01:08:07,549 --> 01:08:10,340 Ти си само ќе го Google или го погледнете на интернет, или да побараат 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, да се вратите на главниот град A-- истиот со Б 1395 01:08:43,729 --> 01:08:46,380 со малку б, големи C до малку в. 1396 01:08:46,380 --> 01:08:50,670 >> Сите овие празнини се 32 распаѓа. 1397 01:08:50,670 --> 01:08:54,450 Сега, ова се чини да ни овозможи да направи нешто како што е Microsoft Word, 1398 01:08:54,450 --> 01:08:57,729 или Google Docs функција, каде што може да изберете сè и тогаш се каже, 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.c. 1403 01:09:12,645 --> 01:09:15,770 И да одиме напред и да разбивам програма што го прави токму тоа како што следува. 1404 01:09:15,770 --> 01:09:18,460 Така вклучуваат CS50 библиотека. 1405 01:09:18,460 --> 01:09:21,430 И вклучуваат стандардни I / O. 1406 01:09:21,430 --> 01:09:22,787 >> И знам дека ова е наскоро. 1407 01:09:22,787 --> 01:09:24,870 Па јас ќе одам да го стави во таму веќе, string.h, 1408 01:09:24,870 --> 01:09:26,960 па имам пристап до работи како Стирлинг, 1409 01:09:26,960 --> 01:09:29,620 а потоа int главната празнина, како и обично. 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 Одам да iterate од i е еднаква на 0, и n до стринг должина на ОК. 1416 01:09:48,700 --> 01:09:51,899 >> И јас одам да го направите ова толку долго како i е помал од n, и јас плус плус. 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 и минатата недела во C. јас ќе одам да го кажам ова, ако i-тиот карактер во ОК 1421 01:10:05,110 --> 01:10:09,250 е поголемо од или еднаква со мали букви a, 1422 01:10:09,250 --> 01:10:13,340 and-- во Скреч што би буквално каже и, но во C да се каже симболот, 1423 01:10:13,340 --> 01:10:19,830 ampersand-- и i-тиот карактер во ОК е помала од или еднаква на мали букви z, 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 тоа е карактер во низа, i-тиот карактер во низа. 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 не е меѓу малку a и малку z, повелете 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 за нашите стрингови за да се добие во i-тиот карактер во низа. 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 Е i-тиот карактер на ОК е поголема или еднаква на? 1437 01:11:04,190 --> 01:11:08,290 Како, тоа е 97 или 98, или 99, и така натаму? 1438 01:11:08,290 --> 01:11:11,940 >> Но, тоа е, исто така, помалку од или еднакво на вредноста на мали z? 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.c, 1444 01:11:33,925 --> 01:11:36,210 и да ја стартувате профитираат 0. 1445 01:11:36,210 --> 01:11:40,300 >> Ајде да напишете нешто како Zamyla во сите мали влезе. 1446 01:11:40,300 --> 01:11:42,780 И сега имаме Zamyla во сите големи букви. 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 Со printf, вие не треба да се помине во променливи или кодот формат. 1457 01:12:06,120 --> 01:12:08,460 Вие буквално може само да се печати нешто како нова линија. 1458 01:12:08,460 --> 01:12:13,529 >> Па ајде да одиме напред и да направат профитираат 0 повторно, повторување, Zamyla. 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 Можев да say-- јас никогаш не се сеќавам она што разликата е. 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.c-- ако сум да се стави тоа во посебен фајл. 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 цитат unquote, проценти C, а потоа побарајте друга функција што 1478 01:13:04,610 --> 01:13:09,950 постои дека го аргумент, кој е лик, вака. 1479 01:13:09,950 --> 01:13:12,630 >> Излезе во C, има друг повик на функција 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 printf, така што може да го приклучиш во таму. 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 или учебник, или онлајн референца, наречен C type.h. 1486 01:13:33,020 --> 01:13:38,570 >> Значи, ако јас се додаде дека до кај мојот глава додадени фајлови, и сега повторно се собере на оваа програма, 1487 01:13:38,570 --> 01:13:43,040 capitalize2, ./capitalize2 Enter. 1488 01:13:43,040 --> 01:13:46,690 Ајде да напишете во Zamyla во сите мали, се уште работи на истиот. 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 Излезе дека повеќето Линукс компјутери, како што се користење на here-- Linux оперативниот 1494 01:14:03,960 --> 01:14:06,270 system-- имаат команда се нарекува човек, кој вели: 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 >> Сакам да се погледне до функцијата повика на горниот дел, Enter. 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 се ми кажуваше дека јас треба да се вклучат в type.h. 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 или C, оригиналниот влез, ако конверзијата не беше можно. 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 Но, ако тоа не може да за некои reason-- Можеби тоа е веќе големи букви, 1517 01:15:07,010 --> 01:15:09,550 можеби тоа е фантастичен точка или некои други punctuation-- 1518 01:15:09,550 --> 01:15:12,200 тоа е само случува да се врати на оригиналниот C, 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 се распадна во само една едноставна линија, која е this-- printf проценти 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 сега, дека се потпира на библиотека function-- 1528 01:15:49,620 --> 01:15:53,430 функција која доаѓа со C, но тоа го прави токму она што го сакате тоа да се направи. 1529 01:15:53,430 --> 01:15:55,295 И, искрено, дури и ако тоа не дојде со C, 1530 01:15:55,295 --> 01:15:58,880 може да се имплементира себе, како што видовме, со добие негативен int 1531 01:15:58,880 --> 01:16:01,700 и да добиете позитивни int минатата недела, како и. 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 Дозволете ми да оди напред и да се спаси оваа датотека како stirling.c. 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 Дозволете ми да се даде променлива наречена n од тип int која содржи број. 1551 01:16:58,900 --> 01:17:02,490 >> И дозволете ми да оди напред и да направете го следново логика. 1552 01:17:02,490 --> 01:17:15,610 Додека не на n-ти карактер во ОК не се еднакви обратна коса црта 0, повелете 1553 01:17:15,610 --> 01:17:17,930 и зголемување n. 1554 01:17:17,930 --> 01:17:23,506 А потоа печати од printf проценти i n. 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 кои доаѓаат со типичен Linux систем како CS50 IDE, 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 reference.cs50.net, која има сите оние истите man страници, 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 Значи имајте на ум, reference.cs50.net како уште еден ресурс, како и. 1572 01:18:20,070 --> 01:18:23,800 >> Но, зошто не работи стринг должина во начинот на кој се предлага пред некој миг? 1573 01:18:23,800 --> 01:18:25,160 Еве повторно име Zamyla е. 1574 01:18:25,160 --> 01:18:27,690 И тука е името Zamyla е кухо во, како што ги прават, 1575 01:18:27,690 --> 01:18:31,360 да се наслика слика на тоа да се биде, навистина, само низа од карактери. 1576 01:18:31,360 --> 01:18:34,260 Но Zamyla не постои во изолација во програмата. 1577 01:18:34,260 --> 01:18:37,420 >> Кога пишувате и да ја стартувате програмата, го користите вашиот Mac или вашиот компјутер 1578 01:18:37,420 --> 01:18:40,010 како меморија или RAM меморија, така да се каже. 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 бајти на меморија достапна во мојот Mac, 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 и да добиеме низа од човечкото како да сум го повика Zamyla, Z-А-М-Y-L-А, 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 А-Н-D-јас мора да завршат во меморија на компјутерот, како и. 1611 01:20:23,030 --> 01:20:23,850 Но како? 1612 01:20:23,850 --> 01:20:29,700 >> Па, излегува дека под капакот на моторот, што C не кога складирање низи 1613 01:20:29,700 --> 01:20:35,080 дека човечкиот видови во, или дека доаѓаат од некој друг извор, тоа е 1614 01:20:35,080 --> 01:20:39,190 опишува крајот на нив со посебен character-- обратна коса црта 1615 01:20:39,190 --> 01:20:44,750 0, што е само еден посебен начин да се каже 80 бита по ред. 1616 01:20:44,750 --> 01:20:47,950 >> Значи A-- ова е да се потсетиме број 97. 1617 01:20:47,950 --> 01:20:51,770 Па така некои модел на 8 бита децималниот претставува број 97. 1618 01:20:51,770 --> 01:20:58,070 Ова црта 0 е буквално на бројот 0, a.k.a. НУБ, N-У-L, за разлика од порано, 1619 01:20:58,070 --> 01:20:59,630 N-У-L-L, кои ние разговаравме за. 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 >> Тоа е низа на карактери A-N-D-I, плус една петтина таен карактер, 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 имаат фиксен број на бајти под hood-- 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 Ти не знаеш однапред, додека видовите на човекот во Z-A-M-Y-L-A, 1640 01:22:16,980 --> 01:22:21,400 или M-A-R-I-A, или A-N-D-I. Ти не знаеш колку пати корисникот е да се погоди 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 >> И така Ц само вид на листовите како тајна Breadcrumb под хаубата 1645 01:22:31,840 --> 01:22:32,960 на крајот на низата. 1646 01:22:32,960 --> 01:22:39,280 После складирање на Z-A-M-Y-L-A во меморијата, тоа, исто така, само го става еквивалент 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 да се сетам каде Zamyla почнува и завршува. 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, се декларирате променлива наречен n и го постави еднаква на 0. 1654 01:23:01,160 --> 01:23:08,680 >> А потоа и во алинеја 8, јас едноставно побара од прашање, додека n-ти карактер прави 1655 01:23:08,680 --> 01:23:12,120 не се еднакви ги сите 0 bits-- со други зборови, не го прави тоа 1656 01:23:12,120 --> 01:23:14,500 еднакви оваа специјална карактер, обратна коса црта 0, што 1657 01:23:14,500 --> 01:23:18,470 беше само тој посебен НУБ character-- одиме напред и само подигање n. 1658 01:23:18,470 --> 01:23:21,460 >> И да го прават тоа, и да ја задржите го прават тоа, и да го прави тоа. 1659 01:23:21,460 --> 01:23:23,430 И така, иако во минатото сме користи i, 1660 01:23:23,430 --> 01:23:25,181 тоа е совршено во ред семантички да се користи n, 1661 01:23:25,181 --> 01:23:27,430 ако сте само се обидува да смета тоа време намерно, 1662 01:23:27,430 --> 01:23:28,720 и само сакаат да го нарекуваат n. 1663 01:23:28,720 --> 01:23:34,720 Значи ова само чува поставува прашањето, е n-ти карактер на 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, ова loop-- линија 9 до 11-- запира. 1667 01:23:45,540 --> 01:23:49,640 Да се ​​пробие на додека јамка, оставајќи внатрешноста на таа променлива n 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 и да ја стартувате Стирлинг, во вид на нешто како Zamyla, што знам однапред 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 И ние сме наведени int главната неважечки. 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 мора да дојде од некој друг механизам, како стапите int, 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 >> Со други зборови, иако досега се работи само ./hello здраво 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 командната линија arguments-- работи како шминка. 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 Сите тие се т.н. командната линија arguments-- 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 instead-- првата цел број, а вториот нешто 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 >> Значи, ако јас одам во CS50 IDE тука, јас сум качил пред 1733 01:26:56,520 --> 01:27:01,840 и изјави во датотека наречена argv0.c следната дефиниција. 1734 01:27:01,840 --> 01:27:04,120 И ќе забележите дека единственото нешто што е различно досега 1735 01:27:04,120 --> 01:27:08,570 е што сум смени празнина на INT argc низа argv отворена заграда, во близина 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 И нема ли, или n, или било која друга букви. 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 Ако argc еднаква еднаква 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 >> Ако argc еднакво еднакво на 2, сакам да да речеме, printf, здраво, проценти, нова линија, 1748 01:27:42,840 --> 01:27:47,340 а потоа приклучок in-- и тука е новиот trick-- argv заградата 1, за причини 1749 01:27:47,340 --> 01:27:48,840 дека ние ќе се вратам во еден момент. 1750 01:27:48,840 --> 01:27:52,110 Друго, ако argc не еднакви 2, знаеш што? 1751 01:27:52,110 --> 01:27:57,400 Ајде само оди напред и, како и обично, печатење на Здраво светот без замена. 1752 01:27:57,400 --> 01:28:02,710 >> Како што се чини дека ако argc, која се залага за бројот на аргументи, еднакво на 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 >> Па, дозволете ми да оди напред и да го спаси оваа датотека, а потоа прават argv0, 1757 01:28:15,550 --> 01:28:18,940 а потоа ./argv0, Enter. 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 И во овој случај, единствениот збор Јас ја внеле во конзолата е ./argv0. 1767 01:28:48,540 --> 01:28:55,420 >> И така бројот на аргументи дека е се пренесува на мојата програма е само еден. 1768 01:28:55,420 --> 01:28:58,880 Со други зборови, аргументот брои, инаку позната како argc 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 Дозволете ми да кажам, argv0. 1774 01:29:09,930 --> 01:29:12,740 И тогаш, како за Марија? 1775 01:29:12,740 --> 01:29:14,990 А потоа притиснете Enter. 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 И тука, може да се каже Andi. 1783 01:29:40,540 --> 01:29:42,137 И јас може да се каже Zamyla. 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 така што argc, мојата теза смета, е 2. 1787 01:29:52,260 --> 01:29:57,240 >> Можам да видам тоа име вклучен во printf, по оваа состојба овде? 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 Argc, повторно, е само цел број, бројот на words-- arguments-- 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 Значи, нашата ./argv0 е, ефикасно, името на програмата, 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 Значи argc ќе биде 1. 1800 01:30:27,080 --> 01:30:29,750 Но, кога пишувам Стелиос, или Andi или Zamyla, или Марија, 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 Ако јас всушност се каже нешто како Zamyla Чан, 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 >> И така на овој начин, морам пристап преку argv овој нов аргумент 1808 01:30:54,080 --> 01:30:56,080 што би можеле технички наречи го сакаме. 1809 01:30:56,080 --> 01:30:58,940 Но, по конвенција, тоа е argv и argc, соодветно. 1810 01:30:58,940 --> 01:31:04,470 Argv, аргументот за векторот, е вид на синоним за програмирање 1811 01:31:04,470 --> 01:31:07,140 функција во C наречен низа. 1812 01:31:07,140 --> 01:31:14,410 >> Низа е листа на слични вредности назад, да се врати, да се врати, да се врати. 1813 01:31:14,410 --> 01:31:17,810 Со други зборови, ако некој е во право тука во RAM меморија, на следната е веднаш до него, 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 Па, стринг, како Zamyla, Z-A-M-Y-L-A, е, технички, 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 Значи низа, што се испоставува надвор, цитирам unquote стринг, 1831 01:32:15,090 --> 01:32:20,580 е само низа од chara-- char се вистински тип на податок. 1832 01:32:20,580 --> 01:32:24,560 >> И сега argv, meanwhile-- ајде да се вратиме на програмата. 1833 01:32:24,560 --> 01:32:29,582 Argv, иако можеме да видиме на зборот стринг тука, не е само по себе низа. 1834 01:32:29,582 --> 01:32:33,640 Argv, аргументот за векторот, е низа од стрингови. 1835 01:32:33,640 --> 01:32:37,620 >> Значи како што може да имаат низа на знаци, може да имаат повисоко ниво, 1836 01:32:37,620 --> 01:32:46,279 низа на strings-- така, на пример, кога го напишав пред некој миг ./argv0 1837 01:32:46,279 --> 01:33:00,150 argv0, простор Z-А-М-Y-L-А, јас тврдеше дека argv имаше две жици во it-- ./argv0, 1838 01:33:00,150 --> 01:33:03,185 и Z-A-M-Y-L-A. во Со други зборови, argc е 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 И Zamyla, пак, се уште е Исто така, постои низа на карактери. 1846 01:33:27,140 --> 01:33:31,450 >> Па на крајот на краиштата, тоа навистина изгледа вака под хауба. 1847 01:33:31,450 --> 01:33:38,800 Но, argv, од страна на природата на тоа како главна работи, ми дозволува да се заврши сето ова 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 на i-тиот карактер во низа користење на тој плоштад заградата нотација. 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 >> Дозволете ми да оди напред и да се создаде argv1.c, која е малку различен тоа време. 1861 01:34:32,420 --> 01:34:35,635 Наместо проверка за argc2, Одам да наместо да го направите тоа. 1862 01:34:35,635 --> 01:34:41,270 За int i добие 0, што е помалку од argc, јас плус плус, 1863 01:34:41,270 --> 01:34:47,920 а потоа печати од внатрешноста на ова, проценти и, нова линија, а потоа 1864 01:34:47,920 --> 01:34:50,740 argv заградата јас. 1865 01:34:50,740 --> 01:34:55,220 >> Значи со други зборови, не сум се занимаваат со индивидуални ликови во моментот. 1866 01:34:55,220 --> 01:35:00,190 Argv, како имплицирани од овие празниот плоштад протези на правото на argv името, 1867 01:35:00,190 --> 01:35:03,320 значи argv е низа од стрингови. 1868 01:35:03,320 --> 01:35:04,870 И argc е само int. 1869 01:35:04,870 --> 01:35:08,800 >> Оваа линија тука, 6, е велејќи сет i еднаков на 0. 1870 01:35:08,800 --> 01:35:11,980 Смета на целиот пат до, но не вклучувајќи ги, argc. 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 >> i-тиот стринг во argv. 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 >> И така она што е уреден во врска со оваа Програмата сега, ако јас ги собере argv1, 1879 01:35:35,390 --> 01:35:42,067 а потоа направи ./argv1, и потоа внеси во нешто како foo bar Баз, 1880 01:35:42,067 --> 01:35:45,400 кои се трите стандардно зборови дека компјутерски научник посегнува по секое време 1881 01:35:45,400 --> 01:35:51,010 тој или таа треба некои случаеви зборови, и притиснете Enter, секој од овие зборови, 1882 01:35:51,010 --> 01:35:54,980 вклучувајќи го и името на програмата, која е во argv на првата локација, 1883 01:35:54,980 --> 01:35:58,320 завршува се печатат во исто време. 1884 01:35:58,320 --> 01:36:05,290 И ако јас го промените ова, и јас велам нешто како argv1 Zamyla Чан, 1885 01:36:05,290 --> 01:36:08,800 ги добиете сите три од овие зборови, што е argv0, 1886 01:36:08,800 --> 01:36:14,400 argv1, argv2, бидејќи во овој случај argc, пребројувањето на гласовите, е 3. 1887 01:36:14,400 --> 01:36:20,020 >> Но она што е уредно е ако се разбере дека argv е само низа од стрингови, 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 Во овој пример, дозволете ми да оди напред и да се јавите на оваа argv2.c. 1893 01:36:40,100 --> 01:36:43,920 1894 01:36:43,920 --> 01:36:50,180 И во овој случај, дозволете ми да оди напред и го стори following-- за int i добие 0, 1895 01:36:50,180 --> 01:36:53,286 i е помал од argc, јас плус плус, како и порано. 1896 01:36:53,286 --> 01:36:55,910 Значи со други words-- а сега ова е добивање доволно комплицирано. 1897 01:36:55,910 --> 01:36:59,940 Тогаш јас ќе одам да се каже iterate во текот конците во argv, 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 Јас ќе одам да се каже јас сум int-- не се случува да го користите повторно, 1902 01:37:08,600 --> 01:37:12,590 затоа што не сакаат да го следат, или вид на избрише постоечките i. 1903 01:37:12,590 --> 01:37:15,780 >> Одам да се, наместо тоа, велат j, бидејќи тоа е мојот одат на променлива откако јас, 1904 01:37:15,780 --> 01:37:18,590 кога јас сум само се обидува да брои едноставни броеви. 1905 01:37:18,590 --> 01:37:28,850 За j добива 0--, а исто така, n, ќе се се строгиот должината на argv заградата јас, 1906 01:37:28,850 --> 01:37:36,030 се додека j е помалку од m, ѕ плус плус, го направите следново. 1907 01:37:36,030 --> 01:37:37,500 И тука е интересниот дел. 1908 01:37:37,500 --> 01:37:46,330 >> Печатење на карактер и нова линија, приклучување на argv заградата јас, држач j. 1909 01:37:46,330 --> 01:37:47,940 Добро, па дозволете ми да додадете некои коментари тука. 1910 01:37:47,940 --> 01:37:54,820 Iterate во текот карактери во тековната низа, 1911 01:37:54,820 --> 01:38:02,290 печатење ѕ-та лик во i-тиот стринг. 1912 01:38:02,290 --> 01:38:04,630 А сега, ајде да се разгледа што значат овие коментари. 1913 01:38:04,630 --> 01:38:06,750 >> Iterate во текот на жици во argv-- колку 1914 01:38:06,750 --> 01:38:09,300 жици се во argv, што е низа? 1915 01:38:09,300 --> 01:38:13,420 Argc многу, па јас сум процесирањето од i изнесува 0 до argc. 1916 01:38:13,420 --> 01:38:20,020 Во меѓувреме, уште колку знаци се во i-тиот низа во argv? 1917 01:38:20,020 --> 01:38:22,880 >> Па, да се добие тој одговор, Јас само да се јавите стринг должина 1918 01:38:22,880 --> 01:38:26,810 за нега на тековниот ред јас , што е и argv заградата јас. 1919 01:38:26,810 --> 01:38:30,090 И јас одам да ја запази привремено дека вредност на n, само за целите на кеширање, 1920 01:38:30,090 --> 01:38:31,590 да се сеќава на него за ефикасност. 1921 01:38:31,590 --> 01:38:36,330 И тогаш јас ќе одам да се иницијализира ѕ на 0, Продолжувам да одам толку долго како ј е помал од n, 1922 01:38:36,330 --> 01:38:38,430 и на секоја прираст повторување j. 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 посебно argv држач i ми дава i-тиот низа 1926 01:38:48,140 --> 01:38:51,690 во argv-- така што првиот збор, вториот збор, третиот збор, сеедно. 1927 01:38:51,690 --> 01:38:57,370 И тогаш ѕ нурка во подлабоко, и добива ме ѕ-та карактер на тој збор. 1928 01:38:57,370 --> 01:39:02,200 И така, всушност, може да се третираат argv како мулти-димензионален, 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 Дозволете ми да оди напред и да го прават тоа argv2-- ебам. 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 Јас треба да се вклучат во string.h оваа верзија на програмата. 1949 01:39:54,490 --> 01:40:00,050 >> Дозволете ми да оди напред и да се вклучат string.h, освен тоа, да оди напред 1950 01:40:00,050 --> 01:40:04,460 и прекомпајлирате argv2. 1951 01:40:04,460 --> 01:40:08,390 И сега, тука ќе одиме, бидете argv2, Enter. 1952 01:40:08,390 --> 01:40:10,590 И покрај тоа што е малку криптичната на прв поглед, 1953 01:40:10,590 --> 01:40:15,690 се забележи дека, навистина, она што е отпечатен е точка argv2. 1954 01:40:15,690 --> 01:40:19,970 >> Но, ако сум тип на некои зборови по брза, како argv2 Zamyla Чан, 1955 01:40:19,970 --> 01:40:22,560 Внесете, исто така, малку криптичната на прв поглед. 1956 01:40:22,560 --> 01:40:30,540 Но, ако се движите врати, ./argv2 Z-A-M-Y-L-A C-H-A-N. 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 зборот int пред главната, и покрај тоа што може да се види на интернет, 1965 01:40:53,870 --> 01:40:58,340 понекогаш погрешно во постарите верзии на C и компајлери, за кој велат дека празнина, 1966 01:40:58,340 --> 01:40:59,410 или ништо на сите. 1967 01:40:59,410 --> 01:41:01,580 Но, навистина, за верзијата на C кои ги користите, 1968 01:41:01,580 --> 01:41:06,180 C 11, или 2011 година, се реализира дека треба да се Инт. 1969 01:41:06,180 --> 01:41:09,300 И тоа треба да биде или неважечки или argc и argv тука. 1970 01:41:09,300 --> 01:41:10,790 >> Но, зошто int главната? 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 >> Дека нешто не е int, како линија 5 сугерира. 1976 01:41:23,350 --> 01:41:24,225 Но, она што int? 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 програми и функции, генерално, return-- малку counterintuitively-- 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 Всушност, на свој Mac или PC, можеби сте всушност се гледа 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 >> Во конечната програма, дозволете ми да оди напред и да се јавите на оваа exit.c, 2000 01:42:34,660 --> 01:42:38,630 и воведување на последниот од денешната теми, познат како код за грешка. 2001 01:42:38,630 --> 01:42:42,930 Дозволете ми да оди напред и вклучуваат нашите запознаени датотеки до врвот, направи int главната. 2002 01:42:42,930 --> 01:42:49,500 И овој пат, да го направиме int argc, низа argv, и со мојот загради 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 Овој пат, ако argc не 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 обратна коса црта n. 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 развикам на корисникот со printf изрека, недостасува командата, 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 >> Само ако argc е еднакво на 2 ние ќе се фаќате тука, во тој момент јас ќе одам да се каже, 2026 01:43:55,840 --> 01:44:00,410 Здраво проценти s, обратна коса црта n, argv1. 2027 01:44:00,410 --> 01:44:03,827 Со други зборови, јас сум не оди по argv 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 >> Знам дека argc е 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 Па сега дозволете ми да оди напред и да излезете, која е совршена segue да го напушти само. 2050 01:45:09,690 --> 01:45:14,401 >> Но, бидете излез, и дозволете ми да оди напред и ./exit направи, Enter. 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 >> Дозволете ми да го направи наместо ./exit, Давид, Enter. 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 >> Но, се покажа дека има посебен начин во Linux да всушност гледаат 2057 01:45:30,650 --> 01:45:34,470 со она излез код програма излезено. 2058 01:45:34,470 --> 01:45:37,184 Понекогаш во графички светот како Mac OS или Windows, 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 Но, ако сакаме да видиме што на грешка Пораката е, ние може да го направи тоа here-- 2062 01:45:44,773 --> 01:45:48,100 така ./exit, Enter, печатење недостасува командната линија аргумент. 2063 01:45:48,100 --> 01:45:54,590 >> Ако јас сега го прават echo $ ?, која е смешно криптичната потрага. 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 И јас притиснете Enter. 2068 01:46:03,410 --> 01:46:07,520 Гледам 1, бидејќи тоа е она што изјави мојата главна функција да се вратат. 2069 01:46:07,520 --> 01:46:12,310 >> Во меѓувреме, ако го направам ./exit Давид, и притиснете Enter, гледам, здраво Давид. 2070 01:46:12,310 --> 01:46:16,800 И ако сега го правам echo $ ?, гледам здраво 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 и, секако, ги зеде здраво за готово во Scratch. 2082 01:46:51,900 --> 01:46:56,040 >> тогаш ние погледна како можеме да пристапите индивидуални ликови во серијата, 2083 01:46:56,040 --> 01:47:00,310 а потоа повторно се на повисоко ниво се погледне на работите, гледајќи како well-- 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 Значи во C, ние сме само ќе да се зборува за низа. 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 int, int, што и да е ние се обидуваме да ги чувате. 2097 01:47:38,600 --> 01:47:42,540 Но, на крајот на денот, ова е она што изгледа како концептуално. 2098 01:47:42,540 --> 01:47:44,530 Ти си со земање на меморија или RAM меморија на компјутерот. 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 дека некој друг веќе сфатиле out-- дадена листа на имиња 2110 01:48:21,630 --> 01:48:24,430 и numbers-- како да ги alphabetize. 2111 01:48:24,430 --> 01:48:26,950 И сега, кога во C ние, исто така, имаат способност 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 да се воведе повторно this-- првиот од нашите структури на податоци во array-- 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 и да се изгради на врвот на тоа, во крајна линија, програми во C, 2119 01:48:53,570 --> 01:48:56,730 во Python, во JavaScript, доведување во прашање бази на податоци со SQL? 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 scrambling и декодирање информации и шифрирани 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 >> -Mover Само што пристигнале. 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 Сте биле таму со него кога тој заврши проектот на CS50? 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 >> -Тоа Е CS50. 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 >> [END репродукција]