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