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 DAVID J. 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 изкуството на кодиране на информация, , в който можете виж по-горе тук 13 00:00:36,570 --> 00:00:41,480 е картина на Радио Orphan Ани тайна декодер пръстен от недалечното минало. 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 И чрез завъртане на един от тези, можете да по същество се подредят писма като A 17 00:00:54,740 --> 00:00:59,520 чрез Z с други букви като B чрез А. С други думи, 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 буквите, при което, ако искаш да кажеш да се каже, "A", вие вместо да каже "Б" 22 00:01:15,370 --> 00:01:17,280 искате да кажете, "B" вас, вместо да каже "C" - 23 00:01:17,280 --> 00:01:20,240 или нещо по-умно от че-- и след това, в крайна сметка, 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 Ралфи PARKER: "Било то известно на всички в резюме 30 00:01:37,210 --> 00:01:41,000 че Ралф Паркър се назначава член на Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Circle и е право на всички почести и ползи, настъпили към нея. " 32 00:01:44,860 --> 00:01:47,410 >> Ралфи PARKER (разказва): Подписано Little Orphan Annie. 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 Honors и ползи, Вече на възраст от девет. 36 00:01:55,494 --> 00:01:57,402 >> [За възпроизвеждане на музика] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO бърборене] 38 00:02:00,470 --> 00:02:01,470 Ралфи PARKER: Хайде. 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 RADIO Говорител: Слушайте утре нощувка за заключителната приключението 42 00:02:08,820 --> 00:02:11,060 на Черно Pirate кораб. 43 00:02:11,060 --> 00:02:14,740 Сега е време за Ани Secret съобщение за вас членове 44 00:02:14,740 --> 00:02:17,110 на Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Не забравяйте деца, само членовете на Secret Circle Ани 46 00:02:20,700 --> 00:02:23,270 може да декодира тайното съобщение на Ани. 47 00:02:23,270 --> 00:02:27,270 >> Не забравяйте, че Ани е в зависимост от вас. 48 00:02:27,270 --> 00:02:30,060 Задайте вашите игли за B-2. 49 00:02:30,060 --> 00:02:34,004 Ето message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ралфи PARKER (разказва): I съм в първата си тайна среща. 51 00:02:36,503 --> 00:02:40,041 RADIO Говорител: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ралфи PARKER (разказва): О, Pierre е в силен глас тази вечер. 53 00:02:42,790 --> 00:02:46,110 Мога да кажа, че тази вечер послание е наистина важно. 54 00:02:46,110 --> 00:02:47,930 >> RADIO Говорител: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Това е съобщение от себе си Ани. 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 Ралфи PARKER (разказва): Деветдесет секунди по-късно, аз съм 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 Ah. 62 00:03:04,990 --> 00:03:05,680 "Б." 63 00:03:05,680 --> 00:03:06,524 >> [Подсмихва] 64 00:03:06,524 --> 00:03:08,684 >> Ралфи PARKER (разказва): Отидох към следващата. 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 "Ф." 70 00:03:15,259 --> 00:03:16,225 >> [Подсмихва] 71 00:03:16,225 --> 00:03:18,157 >> Ранди PARKER: О, хайде, Ралфи. 72 00:03:18,157 --> 00:03:19,606 Трябва да тръгвам! 73 00:03:19,606 --> 00:03:21,538 >> Ралфи PARKER: Ще бъде право надолу, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee факир. 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 Какво беше Little Orphan Annie опитваш да кажеш? Какво е "със сигурност ще бъде"? 78 00:03:33,981 --> 00:03:35,522 Майка: Ралфи, Ранди е да тръгваме. 79 00:03:35,522 --> 00:03:36,735 Ще ви моля да излезе? 80 00:03:36,735 --> 00:03:38,190 >> Ралфи PARKER: Добре, мамо! 81 00:03:38,190 --> 00:03:39,787 Аз идвам! 82 00:03:39,787 --> 00:03:41,995 Ралфи PARKER (разказва): Бях все по-близо сега. 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 >> Майка: Ралфи, Ранди Трябва да тръгваме! 87 00:03:50,518 --> 00:03:53,635 >> Ралфи PARKER: Аз ще бъда навън, за да плаче на глас! 88 00:03:53,635 --> 00:03:55,343 Ралфи PARKER (Разказва): Почти там! 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 >> Ралфи PARKER: "Бъдете сигурни, да се пие си 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 >> Ралфи PARKER: Кучи син. 103 00:04:21,724 --> 00:04:23,460 >> [Сайта] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Така че след това е поглед към това, което криптографията 105 00:04:27,070 --> 00:04:29,880 може да бъде за това-- на пие от недалечното минало. 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 Проблем в Set 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-- просто в реалния света-- 125 00:05:17,970 --> 00:05:19,790 може да бъде доста произволна дължина. 126 00:05:19,790 --> 00:05:21,055 Pretty кратко, доста дълго. 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 >> Отивам да декларират низ наречен S. 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 Отивам да правя аз е по-малко отколкото-- добре Име 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 И сега вътре от тях къдрава скоби Отивам да направя ФОРМАТ, 160 00:06:53,190 --> 00:06:55,460 и аз искам да отпечатате една характер на време. 161 00:06:55,460 --> 00:06:58,227 Така че аз ще използвам% в за може би за първи път. 162 00:06:58,227 --> 00:07:00,560 И след това искам да отпечатате всяко характер по своя собствена линия. 163 00:07:00,560 --> 00:07:02,550 Така че аз отивам да се сложи малко наклонена черта н там. 164 00:07:02,550 --> 00:07:03,640 Close цитат. 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 характер на S. 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 че на клавиатурата US са обикновено над вашият ключ замяна. 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 Libraries чух. 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 >> АУДИТОРИЯ: Трябва Standard I / O [недоловим] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Отлично. 186 00:08:02,663 --> 00:08:06,060 Така че аз трябва Standard I / O. За какво цел искам стандарт I / O? 187 00:08:06,060 --> 00:08:06,670 За ФОРМАТ. 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-М-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 и напишете пълното име на Дейвън. 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 Ние не са отпечатани Дейвън е пълно име правилно. 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 DAVID J. 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 или в Гугъл това и разберете. 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 ще се върнем доста Arcane документация. 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 Така че аз отивам да се върнем сега към Gedit. 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 >> Отивам, за да изчистите екрана с Control L Ако сте били чудех. 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 Много прилича на вътр може само брои толкова високо, на теория, 279 00:12:03,050 --> 00:12:06,600 можете да се тъпча само толкова много герои в RAM на вашия компютър или Random 280 00:12:06,600 --> 00:12:07,920 Access Memory. 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 Freeze, виси, рестартиране, независимо. 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-U-L-аз-- ние в крайна сметка ще видим какво наистина 297 00:12:59,700 --> 00:13:01,790 means-- това означава само нещо лошо се е случило. 298 00:13:01,790 --> 00:13:05,560 Сега, това означава, че много прилича на Scratch, Мога да проверя състояние тук, в 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 чакай малко, не е S определено равна на тази специална стойност, 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 >> Тази линия на код е, разбира се, казвайки инициализира някои променлива аз до 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 >> DAVID J. 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 Вие сте виждали и в Запознай в комплекта P. 339 00:14:52,500 --> 00:14:53,880 >> Но каква е тази поговорка? 340 00:14:53,880 --> 00:14:58,352 Направете следното контура, така Докато аз е по-малко от това, което? 341 00:14:58,352 --> 00:14:59,810 АУДИТОРИЯ: Дължината на низа. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: The дължина на низа. 343 00:15:01,518 --> 00:15:04,300 Така че това се превежда доста чисто на английски в този смисъл. 344 00:15:04,300 --> 00:15:08,810 Сега проблемът е, че всеки път, когато превъртите през този цикъл на теория, 345 00:15:08,810 --> 00:15:10,000 Питам този въпрос. 346 00:15:10,000 --> 00:15:12,250 Е, че по-малко от дължината на низа S? 347 00:15:12,250 --> 00:15:14,500 Е, че по-малко от дължината на низа S? 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 No. 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 а втората променлива аз ще произволно, но условно, го наричат ​​п. 363 00:15:53,330 --> 00:15:55,940 Присвояване на п равно на низ дължина ите. 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 DAVID J. Malan: Добър въпрос. 376 00:16:27,010 --> 00:16:30,690 Така че, защо ние поставяме ++ в края на и вместо на началото на I? 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 защото няма нищо друго, около това нарастване На. 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 въпреки че това е вид на секси търсите, можете също така да правя аз + = 1, 392 00:17:14,650 --> 00:17:18,880 което е по-грозна версия на една и съща идея за Postfix нарастване На. 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 >> DAVID J. 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 >> Публика: Трябва ли да се каже, вътр н? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Можете да направите Не трябва да се каже, вътр п. 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 DAVID J. 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 Но, разбира се, че е променлива, така че аз просто го изразя с аз. 418 00:18:21,610 --> 00:18:23,900 >> Key, обаче, е да осъзнаем, особено ако не сте 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 Може би за хакер издание на P зададете една. 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 The American Standard кодекс за обмен на информация. 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 >> Така че A чрез M тук, дот дот DOT, линии с, изземване, 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 Светът реши няколко години Преди това малко по-, малки букви A, 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 Така че аз ще отида да Gedit отново. 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 >> АУДИТОРИЯ: A контур. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: A контур. 466 00:20:26,630 --> 00:20:28,463 И колко пъти е че няма да превъртите? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 АУДИТОРИЯ: [вмъкване VOICES] шест пъти. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: Не е шест пъти. 470 00:20:34,830 --> 00:20:35,840 АУДИТОРИЯ: 26 пъти. 471 00:20:35,840 --> 00:20:36,560 DAVID J. 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 Аз съм един вид на предвиждане този капитал A е 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 % В е просто контейнер за Чар. 489 00:21:15,510 --> 00:21:19,010 % И е контейнер за вътр. 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, който е с малки букви. 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 >> От вътр на Чар. 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-- така че в се инициализира с капитал A. 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 Защото под капак на знак, разбира се, 528 00:23:24,090 --> 00:23:26,170 е просто номер 0-255. 529 00:23:26,170 --> 00:23:28,540 >> Така че със сигурност може да го постави вътре на вътр. 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 >> OK. 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 Така е и с а-та и б-та и C е в капитализацията 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 наречени S. 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 И просто проверка, че аз е по-малко от п. 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 >> DAVID J. 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 >> АУДИТОРИЯ: Ами-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Така че, ако думата е-- ако низ е Zamyla, които starts-- 568 00:25:09,500 --> 00:25:12,380 АУДИТОРИЯ: --you се справят с героите separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. 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 характер и по-голяма от или равна на малки букви? 576 00:25:33,984 --> 00:25:36,400 И какво означава това, ето, с двойни амперсанди? 577 00:25:36,400 --> 00:25:36,800 ПУБЛИКАТА (заедно): А. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: И. 579 00:25:37,210 --> 00:25:38,418 Това е просто еквивалент на това. 580 00:25:38,418 --> 00:25:42,310 И не е ключова дума в C, трябва да се употреба, дразнещо, амперсанд амперсанд. 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 DAVID J. 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 малко загадъчно, но в крайна сметка доста прямо. 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 >> DAVID J. 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 >> DAVID J. Malan: Little C от големия C? 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 DAVID J. 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 A главна буква. 649 00:28:57,770 --> 00:28:58,620 A главна буква. 650 00:28:58,620 --> 00:29:02,330 >> Така че, ако премине в малки букви A, надявам се, по дефиниция на на горния, 651 00:29:02,330 --> 00:29:05,600 това ще върне главна A. В противен случай, 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 >> Сега всеки, който пише тези неща, 10s от преди години, знаеш ли какво? 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 използва цели числа, вместо символа от съображения за проверка за грешки. 670 00:29:59,070 --> 00:30:01,260 Но ние може би ще дойда върнем към това в бъдеще. 671 00:30:01,260 --> 00:30:05,910 >> Но забележете, тук, в горната част на новопокръстените буквата C в главни, ако е възможно. 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 Или С, ако превръщането не е възможно, 677 00:30:18,690 --> 00:30:20,250 където С е оригиналния входен. 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 или С, оригиналното писмо, ако превръщането не е възможно. 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 DAVID J. 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 >> DAVID J. 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 преминаване в S скоба аз, и печат навън, с контейнер% С, 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 DAVID J. 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 DAVID J. Malan: Възможно ли е Аз правя правя, докато цикъл? 711 00:31:47,270 --> 00:31:50,020 АУДИТОРИЯ: --you искате да се уверите че всъщност [недоловим]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Възможно ли е използвате правя, докато? 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 DAVID J. 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 Ако те не ми даде низ I искате, аз ще се откажа, аз се отказвам. 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 Standard 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, Дейвин, 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 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 Добре. 774 00:34:18,259 --> 00:34:19,388 Alex, хайде нагоре. 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 >> ALEX: Приятно ми да се запознаем. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. 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-A-M-Y-L-A. 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-А-В-Е. Ти си наистина като до сърцето памет с произволен достъп. 798 00:35:27,560 --> 00:35:29,631 Което е рисунка всичко напълно произволно. 799 00:35:29,631 --> 00:35:30,130 OK. 800 00:35:30,130 --> 00:35:31,104 >> [СМЯХ] 801 00:35:31,104 --> 00:35:32,520 ALEX: За съжаление моят почерк е лошо. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: Не, това е ОК. 803 00:35:33,770 --> 00:35:40,480 А какво ще кажеш за Роб, R-O-B. OK. 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 >> ALEX: Току-що го направих в реда, в който ми каза. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: И това е вярно. 820 00:36:15,650 --> 00:36:20,100 Но това, което урежда къде сте скрили Име на Белинда и името на Гейб? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Нищо? 822 00:36:20,764 --> 00:36:22,930 DAVID J. 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-М-Y-L-A-B-E-L-I-N-D-A-G-A-В- 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 да представлява какво Alex само направих тук, на екрана. 841 00:37:17,560 --> 00:37:20,937 И сега, Алекс, ние можем да Ви предложим син или оранжев слон от Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Ще взема един син слон. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: A сини слонове. 844 00:37:23,120 --> 00:37:25,580 Така че един голям кръг от аплодисменти, ако можехме, за Alex тук. 845 00:37:25,580 --> 00:37:26,100 >> [APPLAUSE] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Благодаря ви. 847 00:37:26,766 --> 00:37:28,820 DAVID J. 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 предложи, където можем да запишем буква б във връзка с тази мрежа? 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 DAVID J. 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 Така че, хората, просто предлага, добре, хит на клавиша, по същество. 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 Но ако след Belinda I написали в името на Гейб, 915 00:40:22,817 --> 00:40:25,650 той няма да свърши тук, в паметта, и ако аз напечатани в името Дейвън е, 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 И тогава вътре от тук, искам първо да има вътр нарича възраст. 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 ще се смажат, или презаписване възрастта на предишния човек. 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 DAVID J. 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 Бях по същество копиране и поставяне код и просто променяте 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 >> Бих могъл да използвам, последно Време е да получите положителен вътр. 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 >> Така че, ако искате да получите, не едно ПНА, не две цели числа, а цял куп от цели числа. 997 00:44:09,320 --> 00:44:13,800 Конкретно 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 >> За разлика от това, когато бяхме с помощта на S скоба аз преди малко, е, низ, 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 Ако новата съм първи ще разпечатате каква е възрастта на човек номер аз. 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 в който ние може да съхранява едно цяло число, едно цяло число, с вътр. 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 И след това тук, аз отново обхождане над масива казва една година от сега, 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 >> Точно както мога индекс в низ, S, значи и аз мога индекс в един масив от векове, 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 One, през цялото това време, когато пишете собствени програми, 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 напомня на Ралфи е оспори по-рано на картографията. 1047 00:46:42,360 --> 00:46:43,970 Изкуството на кодиране на информация. 1048 00:46:43,970 --> 00:46:46,660 Това в действителност е много напомня на това, което е направил Ралфи. 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 в шифър текст, който е нещо кодирано. 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 И тези пароли имат всички са криптирани или хеширан, 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 >> [VIDEO PLAYBACK] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Можете Fiend, какво става? 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 Doctor 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 -Пет. 1130 00:49:45,521 --> 00:49:46,430 -Пет. 1131 00:49:46,430 --> 00:49:47,930 -Пет. 1132 00:49:47,930 --> 00:49:53,480 Значи комбинацията е един, две, три, четири, пет. 1133 00:49:53,480 --> 00:49:56,140 Това е най-тъпото комбинацията Аз някога чуете в моя живот. 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 >> [REMOTE CLICKS] 1137 00:50:01,340 --> 00:50:02,450 >> Какво си направил? 1138 00:50:02,450 --> 00:50:03,800 >> -I Изключен стената. 1139 00:50:03,800 --> 00:50:05,010 >> Не, не сте, можете Изключен целия филм. 1140 00:50:05,010 --> 00:50:06,220 >> -I Сигурно натиснал грешен бутон. 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 Сега можем да вземем всеки последен дъх свеж въздух от планета Друидия. 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 [DOOR ЗАКРИВАНЕ SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Clink НА ВРАТИ удря КАСКА] 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 DAVID J. Malan: Това е за CS50, ние ще се видим следващата седмица. 1169 00:50:46,700 --> 00:50:49,883 Разказвач: И сега, Deep Мисли, по Дейвън Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Дейвън Farnham: кодиране в C е така че много по-трудно, отколкото Scratch. 1172 00:50:55,860 --> 00:50:57,320 ФОРМАТ, Scratch е лъжа. 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