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