1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J Malan: All Добре, така че това е CS50. 3 00:00:13,060 --> 00:00:15,040 И това е ясно в петък. 4 00:00:15,040 --> 00:00:16,850 И това е краят на една седмица. 5 00:00:16,850 --> 00:00:21,020 Така че може би си спомняте, че бяхме стигнали, Последния път, с Катерачът неразположен. 6 00:00:21,020 --> 00:00:25,020 Чрез което да изложи тази лъжа, че не Независимо какво сте били научени расте 7 00:00:25,020 --> 00:00:31,610 до 1 разделена на 10, не е в Всъщност, 0.1 или 0.100 или 0,10000. 8 00:00:31,610 --> 00:00:35,270 В действителност, ако ние събиране на тази програма, както направихме вчера, с, 9 00:00:35,270 --> 00:00:39,770 направи неточност и след това направя точка, наклонена черта, неточност, 10 00:00:39,770 --> 00:00:43,600 ние научихме, че това е това, което е 1 делено на 10 в действителност. 11 00:00:43,600 --> 00:00:46,140 Така че това всъщност не е точно така. 12 00:00:46,140 --> 00:00:49,014 Но това прави намек за някаква фундаментално ограничение на компютри. 13 00:00:49,014 --> 00:00:50,930 И наистина, сред неща, които ние ще направим 14 00:00:50,930 --> 00:00:55,130 днес е да разгледаме защо това има случило, какво отражение има това, 15 00:00:55,130 --> 00:00:58,430 как човечеството е успяла да се разбере това в някои много 16 00:00:58,430 --> 00:01:00,410 сериозна situations-- резултатът от кои 17 00:01:00,410 --> 00:01:03,141 е доста трагично и expensive-- и 18 00:01:03,141 --> 00:01:04,849 да разгледаме как можем всъщност може да защити 19 00:01:04,849 --> 00:01:06,530 срещу тези видове ограничения. 20 00:01:06,530 --> 00:01:10,940 Така интуитивно, може би, Затова е 1 делено на 10, 21 00:01:10,940 --> 00:01:15,480 според моя компютър тук, а не само 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Да. 23 00:01:15,980 --> 00:01:16,530 Какво мислиш? 24 00:01:16,530 --> 00:01:17,860 >> АУДИТОРИЯ ДЪРЖАВА: The корен е по-различно? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J Malan: The какво е? 26 00:01:18,550 --> 00:01:19,730 О, корен е по-различно? 27 00:01:19,730 --> 00:01:20,720 Така че не е съвсем. 28 00:01:20,720 --> 00:01:23,200 Това е всъщност по- от основно значение за хардуера. 29 00:01:23,200 --> 00:01:23,980 Други мисли? 30 00:01:23,980 --> 00:01:24,584 Да. 31 00:01:24,584 --> 00:01:26,750 АУДИТОРИЯ ДЪРЖАВА: Те представляват номера по различен начин? 32 00:01:26,750 --> 00:01:27,880 DAVID J Malan: Така they-- Right. 33 00:01:27,880 --> 00:01:29,338 Те представляват номера по различен начин. 34 00:01:29,338 --> 00:01:30,700 Неточно, както изглежда. 35 00:01:30,700 --> 00:01:33,190 Така че is-- Е, различно от това, което? 36 00:01:33,190 --> 00:01:34,490 Или от кого? 37 00:01:34,490 --> 00:01:35,050 От нас? 38 00:01:35,050 --> 00:01:35,966 АУДИТОРИЯ ДЪРЖАВА: Да. 39 00:01:35,966 --> 00:01:38,930 Те не използват десетичната система, за да [недоловим]. 40 00:01:38,930 --> 00:01:39,680 DAVID J Malan: OK. 41 00:01:39,680 --> 00:01:41,560 Така че в известен смисъл, те не го правят използвате десетичната система. 42 00:01:41,560 --> 00:01:43,720 Под предния капак, всичко е, наистина, двоичен, 43 00:01:43,720 --> 00:01:45,510 и това е, отнасящ се, в действителност. 44 00:01:45,510 --> 00:01:48,135 Но това е още по-проста обяснение от това. 45 00:01:48,135 --> 00:01:48,635 Да. 46 00:01:48,635 --> 00:01:49,970 >> АУДИТОРИЯ ДЪРЖАВА: Те само има толкова много бита. 47 00:01:49,970 --> 00:01:52,370 Те могат само да съхрани до известна степен, като с десетичните. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J Malan: Да. 49 00:01:52,780 --> 00:01:54,420 Това е това, което наистина се в нея. 50 00:01:54,420 --> 00:01:57,180 Оказва се, че компютрите обикновено, винаги само ще 51 00:01:57,180 --> 00:01:59,690 използвате ограничен обем информация да представлява нещо. 52 00:01:59,690 --> 00:01:59,870 Нали така? 53 00:01:59,870 --> 00:02:02,110 В края на краищата, ние имаме само една фиксирана размер на дисково пространство. 54 00:02:02,110 --> 00:02:04,210 Ние имаме само една фиксирана сума на RAM, или компютърна памет. 55 00:02:04,210 --> 00:02:06,251 И ако имате само един фиксирана сума за нещо, 56 00:02:06,251 --> 00:02:09,611 със сигурност няма да може действително брои до до безкрайност или всеки номер, който желаете. 57 00:02:09,611 --> 00:02:11,610 Вие, вид, трябва да избирате какъв диапазон 58 00:02:11,610 --> 00:02:13,220 на стойности ти започваш да се подкрепят. 59 00:02:13,220 --> 00:02:18,100 >> И така, например, една или две седмици Преди, когато говорихме за ASCII, 60 00:02:18,100 --> 00:02:21,610 и ние говорихме около 8 бита, или един байт, така да се каже, 61 00:02:21,610 --> 00:02:26,360 най-голям брой можехме означават с 8 бита е какво? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 И ние можем да представляват 256 общо стойности но не и ако ние прекарваме една от тях 64 00:02:31,850 --> 00:02:34,190 на 0-- Добре, но ако ние прекарат един от тях на 0, 65 00:02:34,190 --> 00:02:36,830 След това най-голям брой е, разбира се, 255. 66 00:02:36,830 --> 00:02:39,410 >> Така се оказва, че това е случай също в този контекст. 67 00:02:39,410 --> 00:02:42,350 Ние започнахме да говорим, за последен път, за плаваща запетая числа, които 68 00:02:42,350 --> 00:02:44,640 са различни от числа, в че те имат десетична запетая 69 00:02:44,640 --> 00:02:47,056 и, надявам се, някои цифри след това, но те са твърде. 70 00:02:47,056 --> 00:02:51,730 Компютър е само обикновено става да използват 32 бита, може би 64 бита 71 00:02:51,730 --> 00:02:53,497 да представлява стойност с плаваща запетая. 72 00:02:53,497 --> 00:02:56,080 Така че, въпреки че сме израснали изучаването на математиката и знаейки 73 00:02:56,080 --> 00:02:58,750 че можете да имате абсолютно безкраен брой числа 74 00:02:58,750 --> 00:03:01,650 след десетичната запетая, а не ако имате ограничен памет. 75 00:03:01,650 --> 00:03:03,930 Вие, вид, трябва да се закръглят, или избирате кои 76 00:03:03,930 --> 00:03:05,346 номера ти започваш да представляват. 77 00:03:05,346 --> 00:03:08,710 И така можеш да се сетиш, в известен смисъл, като това е най-близо на компютъра 78 00:03:08,710 --> 00:03:14,050 сближаване на стойността 1/10, че той може да получи, само с 32-те бита. 79 00:03:14,050 --> 00:03:15,300 И това не е само 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Така например, ако променя това да 1/3, което ние мислим, е още по-лесно. 81 00:03:19,820 --> 00:03:21,300 Така че един разделен на три. 82 00:03:21,300 --> 00:03:22,355 Позволете ми да запишете файла. 83 00:03:22,355 --> 00:03:24,680 Нека да вървим напред и да го компилирате. 84 00:03:24,680 --> 00:03:25,820 И нека да я пуснете отново. 85 00:03:25,820 --> 00:03:30,000 Тук също, както изглежда, не е 1/3 0.3 и след това безкраен брой 3 на 86 00:03:30,000 --> 00:03:30,770 след това. 87 00:03:30,770 --> 00:03:32,540 Можете да получите този неточност в края. 88 00:03:32,540 --> 00:03:35,544 Така че ние, хората са правилни, и това, което научихте е, всъщност, нали, 89 00:03:35,544 --> 00:03:37,460 но ние удрях срещу някои ограничения. 90 00:03:37,460 --> 00:03:39,420 >> И аз така си помислих щяхме да правим днес, е да започне 91 00:03:39,420 --> 00:03:42,190 като погледнете в, честно казано, на трагични последици от това 92 00:03:42,190 --> 00:03:45,490 Понякога, когато човечеството не съвсем приложат 93 00:03:45,490 --> 00:03:48,460 за тази реалност и тези ограничения. 94 00:03:48,460 --> 00:03:52,360 И ние ще видим поредица от винетки от History Channel, който взема 95 00:03:52,360 --> 00:03:53,950 разгледаме как нещата да се обърка. 96 00:03:53,950 --> 00:03:56,340 Това е дълъг около 8 минути, и ние ще се върнем след това 97 00:03:56,340 --> 00:03:59,439 и да разгледаме най-точно какво друго може да се обърка. 98 00:03:59,439 --> 00:04:00,605 Ако можехме да затъмни lights-- 99 00:04:00,605 --> 00:04:02,350 >> [Възпроизвеждане на видео] 100 00:04:02,350 --> 00:04:06,310 >> -Computers, Ние всички идват да приеме най-често разочароващ проблемите, които 101 00:04:06,310 --> 00:04:07,750 отида с тях. 102 00:04:07,750 --> 00:04:11,370 Bugs, вируси и софтуер бъговете са малки цени 103 00:04:11,370 --> 00:04:13,230 да плащат за удобство. 104 00:04:13,230 --> 00:04:17,519 Но в хай-тек и високоскоростен военни и космически програмни приложения, 105 00:04:17,519 --> 00:04:22,130 най-малкия проблем може да Да се ​​величае в бедствие. 106 00:04:22,130 --> 00:04:27,750 На 4 юни 1996 г., изготвени учени да пусне безпилотен Ariane 5 ракета. 107 00:04:27,750 --> 00:04:29,890 Той е превозвал научна спътници проектирани 108 00:04:29,890 --> 00:04:33,030 за да се установи как точно Магнитното поле на Земята взаимодейства 109 00:04:33,030 --> 00:04:35,600 със слънчеви ветрове. 110 00:04:35,600 --> 00:04:37,930 Ракетата е била построена за Европейската космическа агенция 111 00:04:37,930 --> 00:04:41,620 и излетя от неговото съоръжение на брега на Френска Гвиана. 112 00:04:41,620 --> 00:04:44,924 >> -И Около 30 секунди от началото полета, те за първи път 113 00:04:44,924 --> 00:04:46,340 Забелязах, че нещо не е наред. 114 00:04:46,340 --> 00:04:49,280 Това дюзите се въртяха по начин, те наистина не трябва. 115 00:04:49,280 --> 00:04:53,042 Около 40 секунди след началото на полета, ясно на превозното средство е в беда, 116 00:04:53,042 --> 00:04:55,250 и това е, когато те направиха решението да го унищожи. 117 00:04:55,250 --> 00:04:58,970 A Range Officer безопасност с огромни кураж натисна бутона, 118 00:04:58,970 --> 00:05:03,940 взриви ракетата, преди той би могъл се превърне в опасност за обществената безопасност. 119 00:05:03,940 --> 00:05:06,600 >> -Това Беше девойката плаване на Ариана 5, 120 00:05:06,600 --> 00:05:09,270 и разрушаването му отне поставите заради дефект 121 00:05:09,270 --> 00:05:10,992 вградена в софтуера на ракетата. 122 00:05:10,992 --> 00:05:12,700 -В Проблем относно Ariane е, че има 123 00:05:12,700 --> 00:05:15,370 е номер, който изисква 64 бита, за да изразят, 124 00:05:15,370 --> 00:05:18,150 и той искаше да конвертирате то до 16 битово число. 125 00:05:18,150 --> 00:05:21,160 Те Предполага се, че броят никога не щеше да бъде много голям, 126 00:05:21,160 --> 00:05:25,020 че повечето от тези цифри в Броят на малко 64 са 0 на. 127 00:05:25,020 --> 00:05:26,310 Те сгрешиха. 128 00:05:26,310 --> 00:05:28,680 >> -В Неспособността на една софтуерна програма, за да приемете 129 00:05:28,680 --> 00:05:32,820 вида на номер, генериран от друг е в основата на провала. 130 00:05:32,820 --> 00:05:37,190 Разработка на софтуер се е превърнала в много скъпо част от нова технология. 131 00:05:37,190 --> 00:05:40,760 Ариана 4 Ракетата е била много успешно, така че голяма част от софтуера 132 00:05:40,760 --> 00:05:43,990 създаден е също използвана на Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -В Основния проблем е, че Ариана 5 е по-бързо, по-бързо се ускори. 134 00:05:49,750 --> 00:05:53,000 И софтуерът не е имал отчита, че. 135 00:05:53,000 --> 00:05:56,330 >> -В Унищожаване на ракетата е огромна финансова катастрофа, 136 00:05:56,330 --> 00:05:59,670 всичко се дължи на грешка на минута софтуер. 137 00:05:59,670 --> 00:06:01,990 Но това не е първият, времеви проблеми за преобразуване на данни 138 00:06:01,990 --> 00:06:05,310 бе измъчван модерна ракета технология. 139 00:06:05,310 --> 00:06:08,300 >> -В 1991 г., с началото на войната в Персийския залив Първо, 140 00:06:08,300 --> 00:06:10,650 ракетата Patriot преживява подобен вид 141 00:06:10,650 --> 00:06:12,650 на проблем номер реализация. 142 00:06:12,650 --> 00:06:15,620 В резултат на това 28 души, 28 американски войници 143 00:06:15,620 --> 00:06:18,440 бяха убити и около 100 ранени, 144 00:06:18,440 --> 00:06:21,900 когато Patriot, който трябваше за защита срещу входящите ракети Скъд, 145 00:06:21,900 --> 00:06:24,630 не успя да изстреля ракета. 146 00:06:24,630 --> 00:06:29,440 >> -Когато Ирак нападна Кувейт и Америка стартира Пустинна буря в началото на 1991 г. 147 00:06:29,440 --> 00:06:33,800 Бяха разположени ракетни батареи Пейтриът за защита на Саудитска Арабия и Израел 148 00:06:33,800 --> 00:06:37,000 от иракски ракети Скъд атаки. 149 00:06:37,000 --> 00:06:40,610 Патриотът е US, среден обсег земя-въздух система 150 00:06:40,610 --> 00:06:43,010 произведен от компанията Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -В Размер на прехващача Patriot, себе си, е на път, дълъг около 20 фут. 152 00:06:49,080 --> 00:06:51,250 И тя тежи около 2000 паунда. 153 00:06:51,250 --> 00:06:55,195 И носи бойна глава на about-- Мисля, че е приблизително 150 паунда. 154 00:06:55,195 --> 00:06:59,500 И бойната глава, себе си, е високо експлозивни, 155 00:06:59,500 --> 00:07:02,570 което има фрагменти около него. 156 00:07:02,570 --> 00:07:06,890 Корпусът на бойна част е проектирана да действа като едри сачми. 157 00:07:06,890 --> 00:07:09,130 >> -В Ракети са извършва, 4 на контейнера, 158 00:07:09,130 --> 00:07:12,080 и са транспортирани с полуремарке. 159 00:07:12,080 --> 00:07:19,100 >> -В Patriot анти система за противоракетна датира най-малко 20 години. 160 00:07:19,100 --> 00:07:22,320 Той първоначално е бил проектиран като противоракетната отбрана на въздуха 161 00:07:22,320 --> 00:07:24,180 да свалят вражески самолети. 162 00:07:24,180 --> 00:07:27,860 По време на войната в Персийския залив Първото, когато тази война се появи, 163 00:07:27,860 --> 00:07:32,745 Армията иска да го използва, за да свалят Скъд не, самолети. 164 00:07:32,745 --> 00:07:36,150 Иракското сили не беше толкова голям проблем, 165 00:07:36,150 --> 00:07:39,110 но армията е притеснен за Скъд. 166 00:07:39,110 --> 00:07:42,340 И така, те се опитаха да ъпгрейд на Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Враг противоракетна движи Мах пет 168 00:07:44,760 --> 00:07:47,250 щеше да бъде достатъчно голямо предизвикателство. 169 00:07:47,250 --> 00:07:50,000 Но когато Patriot бил откаран в експлоатация, 170 00:07:50,000 --> 00:07:54,030 Армията не е бил наясно с едно Иракският модификация, която прави 171 00:07:54,030 --> 00:07:56,840 техните Скъд почти невъзможно да се удари. 172 00:07:56,840 --> 00:08:01,020 >> -Какво Се е случило, е, че на Скъд идваха, бяха нестабилни, 173 00:08:01,020 --> 00:08:02,310 те се клати. 174 00:08:02,310 --> 00:08:05,140 Причината за това, беше иракчаните, с цел 175 00:08:05,140 --> 00:08:09,450 за да получите 600 км от на 300 км обсег, 176 00:08:09,450 --> 00:08:12,930 взе тегло от предната бойна глава и направи бойна запалка. 177 00:08:12,930 --> 00:08:17,710 Така че сега, на Патриотичния опитва да излезе в плавно движение, и в повечето случаи, 178 00:08:17,710 --> 00:08:21,700 преобладаващото мнозинство от време, той просто ще лети от Скъд. 179 00:08:21,700 --> 00:08:25,700 >> -След Като операторите на системи Пейтриът осъзнал Patriot пропусна целта си, 180 00:08:25,700 --> 00:08:29,790 те взриви бойна глава на Патриотичния, избягване на евентуални жертви, ако 181 00:08:29,790 --> 00:08:32,380 се оставя да падне на земята. 182 00:08:32,380 --> 00:08:36,340 >> -Това Беше това, което видяха повечето хора, тези големи огнени топки в небето, 183 00:08:36,340 --> 00:08:41,289 колкото и неразбрани прихваща от Скъд бойни глави. 184 00:08:41,289 --> 00:08:43,590 Въпреки че през нощта небе, появили Patriots 185 00:08:43,590 --> 00:08:47,020 да бъде успешно унищожаване на ракети Скъд, в Dhahran, 186 00:08:47,020 --> 00:08:49,730 не може да има грешка за неговото изпълнение. 187 00:08:49,730 --> 00:08:53,990 Там, радарна система на Патриотичния изгубили следите на входящо Скъд, 188 00:08:53,990 --> 00:08:56,650 и никога не стартира, поради софтуерен недостатък. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Беше израелците, които първи са открили че вече системата е било включено, 191 00:09:04,100 --> 00:09:07,510 по-голямата несъответствието време става поради часовник вграден 192 00:09:07,510 --> 00:09:09,490 в компютъра на системата. 193 00:09:09,490 --> 00:09:12,670 >> -За 2 седмици преди трагедията в Dhahran, 194 00:09:12,670 --> 00:09:15,010 израелците докладвани Министерството на отбраната, 195 00:09:15,010 --> 00:09:17,940 че системата е започнала да губи време, че след около 8 часа в режим на движение, 196 00:09:17,940 --> 00:09:21,410 те забелязали, че системата е стане забележимо по-малко точни. 197 00:09:21,410 --> 00:09:25,290 Министерството на отбраната отговори, като казвам всички батериите Пейтриът 198 00:09:25,290 --> 00:09:28,070 да не напускат системите за дълго време. 199 00:09:28,070 --> 00:09:29,960 Те никога не каза какъв беше дълго време. 200 00:09:29,960 --> 00:09:30,460 8 часа? 201 00:09:30,460 --> 00:09:30,960 10 часа? 202 00:09:30,960 --> 00:09:31,870 1000 часа? 203 00:09:31,870 --> 00:09:33,734 Никой не знаеше. 204 00:09:33,734 --> 00:09:35,650 -В Patriot батерията разположени в казармите 205 00:09:35,650 --> 00:09:40,410 в Dhahran, и неговата погрешна вътрешния часовник, е бил на повече от 100 часа 206 00:09:40,410 --> 00:09:43,041 в нощта на 25 февруари. 207 00:09:43,041 --> 00:09:47,416 >> -Това Карането време с точност от около 1/10 от секундата. 208 00:09:47,416 --> 00:09:49,290 Сега 1/10 от секундата е интересен номер 209 00:09:49,290 --> 00:09:52,700 защото тя не може да бъде изразена в двоичен, точно. 210 00:09:52,700 --> 00:09:54,820 Което означава, че не може да се изрази, точно, 211 00:09:54,820 --> 00:09:57,420 във всеки модерен цифров компютър. 212 00:09:57,420 --> 00:10:01,460 Трудно е да се повярва, но използвате това като пример. 213 00:10:01,460 --> 00:10:03,520 Нека да броят, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 не може да се изрази в десетичен, точно. 215 00:10:07,110 --> 00:10:11,490 1/3 е 0.333 случва за безкрайност. 216 00:10:11,490 --> 00:10:15,486 Няма начин да се направи това, с абсолютна точност, в десетична. 217 00:10:15,486 --> 00:10:18,360 Това е точно същия вид проблем, който се случи в Patriot. 218 00:10:18,360 --> 00:10:22,510 Колкото по-дълго системата изтича г. -лошо грешката време стана. 219 00:10:22,510 --> 00:10:28,420 >> -След 100 часа работа, грешката във времето е само около 1/3 от секундата. 220 00:10:28,420 --> 00:10:31,830 Но от гледна точка на насочване на противоракетна движи Мах 5, 221 00:10:31,830 --> 00:10:35,890 тя се превърна в проследяването грешка при прилагане на повече от 600 метра. 222 00:10:35,890 --> 00:10:38,970 Би било фатална грешка за войниците в Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -Какво Се е случило, е стартирането Скъд беше открива чрез ранно предупреждение сателити, 224 00:10:45,035 --> 00:10:48,930 и те Появилият че Скъд беше идва в тяхната обща посока. 225 00:10:48,930 --> 00:10:51,170 Те не знаеха къде идва. 226 00:10:51,170 --> 00:10:53,990 >> -Това Беше сега до радара компонент на системата Patriot, 227 00:10:53,990 --> 00:10:58,520 защитавайки Dhahran, за да намерите и запази следите на входящо вражески ракети. 228 00:10:58,520 --> 00:10:59,690 >> -В Радара беше много умен. 229 00:10:59,690 --> 00:11:01,710 Това всъщност ще проследи позицията на Скъд 230 00:11:01,710 --> 00:11:04,040 и след това, когато се предскаже тя вероятно ще бъде, 231 00:11:04,040 --> 00:11:06,140 следващия път, на радар изпрати импулс вън. 232 00:11:06,140 --> 00:11:07,660 Това се нарича портата диапазон. 233 00:11:07,660 --> 00:11:11,870 >> -Then, След като Patriot реши има достатъчно време 234 00:11:11,870 --> 00:11:16,280 преминал да се върна и да се провери на следващия място за това открива обект, 235 00:11:16,280 --> 00:11:17,280 той се връща. 236 00:11:17,280 --> 00:11:21,690 Така че, когато той се върна в грешното място, то тогава не вижда обект 237 00:11:21,690 --> 00:11:25,230 и тя реши, че не е имало обект, той е фалшив откриване, 238 00:11:25,230 --> 00:11:26,650 и капки пистата. 239 00:11:26,650 --> 00:11:29,690 Входящият Скъд изчезна от екрана на радара, 240 00:11:29,690 --> 00:11:32,670 и секунди по-късно, тя блъсна в казармата. 241 00:11:32,670 --> 00:11:38,100 The Скъд убити 28 и беше последният един изстрел по време на Първата война в Залива. 242 00:11:38,100 --> 00:11:43,460 Трагично е, актуализирания софтуер пристигна в Dhahran на следващия ден. 243 00:11:43,460 --> 00:11:46,150 Недостатък на софтуера трябваше бил фиксиран, затваряне 244 00:11:46,150 --> 00:11:48,940 една глава в разтревожените История на ракетата Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [END PLAYBACK] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J Malan: Така че ние ще разгледаме най- някои подобни ограничения в малко. 247 00:11:54,340 --> 00:11:58,470 Но първо, нека преход към няколко FYI е. 248 00:11:58,470 --> 00:12:01,575 Така one-- този уикенд, има ще бъде супер секции, 249 00:12:01,575 --> 00:12:04,200 които са предназначени да изместят редовните секции, които 250 00:12:04,200 --> 00:12:05,460 ще стартира седмица по този начин. 251 00:12:05,460 --> 00:12:08,204 Обърнете внимание на уебсайта на CS50 е за повече информация за тях. 252 00:12:08,204 --> 00:12:11,120 Те също така ще бъде заснет и поточно живея за хората които не могат да присъстват. 253 00:12:11,120 --> 00:12:12,980 Проблем определи 1 е на уебсайт разбира вече, 254 00:12:12,980 --> 00:12:15,105 а ние ще се погледнете в че в съвсем малко. 255 00:12:15,105 --> 00:12:18,350 И работно време също ще вземат поставите този понеделник до четвъртък. 256 00:12:18,350 --> 00:12:20,960 >> Така че това е най-каноническа програма ще погледна за последен път. 257 00:12:20,960 --> 00:12:23,590 Това е като най-простите програма можете да пишете в C, 258 00:12:23,590 --> 00:12:25,250 и дори, че е малко на една смела претенция. 259 00:12:25,250 --> 00:12:25,750 Нали така? 260 00:12:25,750 --> 00:12:28,070 Защото има много привидната сложност на това. 261 00:12:28,070 --> 00:12:30,445 Така че нека да хвърлим един бърз поглед към това, което някои от тези елементи 262 00:12:30,445 --> 00:12:33,080 са били и след това се опитайте да се осигури умствено модел за това как 263 00:12:33,080 --> 00:12:35,710 те простият на програми работи, а след това ние ще започнем 264 00:12:35,710 --> 00:12:38,050 гледане на нещата все по-сложна. 265 00:12:38,050 --> 00:12:41,280 Така че тази линия тук, подчерта сега, в жълто, какво да кажем, за последен път, 266 00:12:41,280 --> 00:12:43,200 че това прави за нас? 267 00:12:43,200 --> 00:12:45,220 Каква е целта тя служи? 268 00:12:45,220 --> 00:12:46,984 Всеки от по-назад? 269 00:12:46,984 --> 00:12:47,483 Да. 270 00:12:47,483 --> 00:12:48,649 >> АУДИТОРИЯ ДЪРЖАВА: [недоловим] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J Malan: Добро. 273 00:12:51,704 --> 00:12:53,537 Така че това дава достъп до команди, или нека 274 00:12:53,537 --> 00:12:56,750 ги наричат ​​функции, че някой друг е написал, че са декларирани, 275 00:12:56,750 --> 00:12:58,350 така да се каже, по някакъв друг файл. 276 00:12:58,350 --> 00:13:02,370 Така че ние ще видим какво точно .h файл е срещу файл .c, в крайна сметка. 277 00:13:02,370 --> 00:13:04,710 Но за сега, просто знам, че ФОРМАТ, например, 278 00:13:04,710 --> 00:13:08,370 е между функциите, които са били декларирани в друг файл, някъде 279 00:13:08,370 --> 00:13:12,930 останало на твърдия диск на облака, че ни позволява да получите достъп ФОРМАТ и да го използвате 280 00:13:12,930 --> 00:13:15,240 без да се налага да се преосмисли че колелото си. 281 00:13:15,240 --> 00:13:16,930 Междувременно главната. 282 00:13:16,930 --> 00:13:19,690 Каква беше аналог на главната, миналата седмица? 283 00:13:19,690 --> 00:13:20,190 Да. 284 00:13:20,190 --> 00:13:21,460 >> АУДИТОРИЯ ДЪРЖАВА: Green флаг е кликнал. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J Malan: Да. 286 00:13:21,740 --> 00:13:23,490 Scratch е, когато зелен флаг щракнали. 287 00:13:23,490 --> 00:13:25,560 Това е като парче пъзел че започва неща, на разстояние. 288 00:13:25,560 --> 00:13:28,306 И така, по същия начин, направил света реши преди няколко години, че в C, 289 00:13:28,306 --> 00:13:30,930 и куп други езици, ако искате да се напише програма, 290 00:13:30,930 --> 00:13:33,410 първата си функция е да се нарича, главната. 291 00:13:33,410 --> 00:13:34,641 И тя трябва да изглежда по този начин. 292 00:13:34,641 --> 00:13:36,640 Но ние ще се върнем, друг път, на това, което, вътр, 293 00:13:36,640 --> 00:13:38,690 и, за невалидни, да кажа в този контекст. 294 00:13:38,690 --> 00:13:42,860 За сега, фигурните скоби са вид на подобно пъзел парче форма на Scratch 295 00:13:42,860 --> 00:13:45,080 че някои капсулира брой редове. 296 00:13:45,080 --> 00:13:47,070 И сред по линиите тук, е този тук. 297 00:13:47,070 --> 00:13:51,610 ФОРМАТ е функция, чиято цел в живота е да отпечатате форматиран низ. 298 00:13:51,610 --> 00:13:55,010 И от форматиран, аз ви кажа можете да включите в заместващи стойности, 299 00:13:55,010 --> 00:13:58,360 и можете да посочите колко десетични точки, колко числа, за да отпечатате 300 00:13:58,360 --> 00:14:00,040 след десетичната запетая и други подобни. 301 00:14:00,040 --> 00:14:05,040 И ФОРМАТ, разбира се, има една или повече аргументи и параметри, 302 00:14:05,040 --> 00:14:06,770 иначе известно, по-просто, като суровини. 303 00:14:06,770 --> 00:14:09,230 >> Така ФОРМАТ, като много от функции, отнема входове. 304 00:14:09,230 --> 00:14:12,730 И тези суровини се прегърнаха от двете скоби тук. 305 00:14:12,730 --> 00:14:15,180 А вътре от тях е един вход. 306 00:14:15,180 --> 00:14:18,600 Това е низ, както сме го нарича, който е само поредица от символи, 307 00:14:18,600 --> 00:14:22,310 като една дума, или фраза, или цяло есе дори, между двойни кавички. 308 00:14:22,310 --> 00:14:25,712 И това е, което се случва, за да повлияе на поведението на ФОРМАТ, защото, разбира се, 309 00:14:25,712 --> 00:14:27,170 това е просто един генеричен функция за печат. 310 00:14:27,170 --> 00:14:29,600 Това няма да се знае какво за печат, освен ако не го кажа. 311 00:14:29,600 --> 00:14:31,000 И след това, някои дреболии. 312 00:14:31,000 --> 00:14:34,056 Какво да кажем този странен последователност от символи е? 313 00:14:34,056 --> 00:14:34,556 Да. 314 00:14:34,556 --> 00:14:35,410 >> АУДИТОРИЯ ДЪРЖАВА: New линия. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J Malan: New линия. 316 00:14:35,990 --> 00:14:39,340 Така се оказва, че не може просто да се удари, въведете, когато пишете на програмата. 317 00:14:39,340 --> 00:14:42,590 Като цяло, компилаторът ще се получи, малко объркан за това какво искаш да кажеш. 318 00:14:42,590 --> 00:14:45,340 Напротив, трябва да имате буквално казват, дай ми нов ред тук. 319 00:14:45,340 --> 00:14:49,506 И така, / п е това, което ние обикновено обадете бягство характер. 320 00:14:49,506 --> 00:14:50,870 Така че п, за нов ред. 321 00:14:50,870 --> 00:14:53,810 И компилаторът знае че когато го вижда / п, 322 00:14:53,810 --> 00:14:57,420 тя трябва действително индуцира компютъра, в крайна сметка, или ФОРМАТ, в този случай, 323 00:14:57,420 --> 00:15:00,260 да разпечатате действително ново линия, като топката се удари, влиза, 324 00:15:00,260 --> 00:15:01,480 на клавиатурата. 325 00:15:01,480 --> 00:15:05,620 И на последно място, това, което направихме ние казваме тази част от синтаксиса е за? 326 00:15:05,620 --> 00:15:06,591 Какво представлява тя? 327 00:15:06,591 --> 00:15:07,090 Да. 328 00:15:07,090 --> 00:15:07,490 >> АУДИТОРИЯ ДЪРЖАВА: [недоловим] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J Malan: Това е просто на края на линията. 330 00:15:08,660 --> 00:15:09,909 Това е краят на изявлението. 331 00:15:09,909 --> 00:15:11,890 И осъзнавам, че не го правим сложете ги навсякъде. 332 00:15:11,890 --> 00:15:13,900 Ние със сигурност не ги изхвърляйте в краищата на всяка линия. 333 00:15:13,900 --> 00:15:16,680 Например, има нито относно първа линия, има никой на линията 334 00:15:16,680 --> 00:15:18,680 с, основна, има нито един след фигурните скоби, 335 00:15:18,680 --> 00:15:21,740 но вие ще започнете да виждате и да получите запознат с, където тя се нарича за. 336 00:15:21,740 --> 00:15:26,014 И това е почти винаги след функция обадите или изявление, някои действия 337 00:15:26,014 --> 00:15:27,180 че вие ​​всъщност приемате. 338 00:15:27,180 --> 00:15:29,520 >> И знам сега, особено ако сред тези, по-малко удобни, 339 00:15:29,520 --> 00:15:32,540 това са видовете глупави неща че ще свърши случайно чука 340 00:15:32,540 --> 00:15:33,873 главата си в стената над. 341 00:15:33,873 --> 00:15:36,107 Защото ще бъде логически уверени в някакъв проблем 342 00:15:36,107 --> 00:15:38,440 сте решени за проблем сет и проклетото нещо просто 343 00:15:38,440 --> 00:15:40,187 няма да се компилира или дори тичам. 344 00:15:40,187 --> 00:15:43,270 И така често, в началото на деня, то се случва да да бъде, защото сте пропуснали скоби, 345 00:15:43,270 --> 00:15:44,455 или сте пропуснали точка и запетая. 346 00:15:44,455 --> 00:15:46,547 И така просто да се забравя на неща от този род, 347 00:15:46,547 --> 00:15:49,380 и се опитайте да не се разочароват от тях, защото много бързо прави това 348 00:15:49,380 --> 00:15:50,640 стане стара шапка. 349 00:15:50,640 --> 00:15:53,910 Но това е много лесно да се получи разочарован в началото на деня, като резултат. 350 00:15:53,910 --> 00:15:57,020 >> Така че сега, нека да разгледаме как тази линия е всъщност работи 351 00:15:57,020 --> 00:15:59,170 и след това погледнете малко по- по-сложно един. 352 00:15:59,170 --> 00:16:02,017 Така че ние имаме тук, на способността да се направи на този екран. 353 00:16:02,017 --> 00:16:04,100 И нека да предположим, че това е екрана на компютъра ми, 354 00:16:04,100 --> 00:16:08,589 но аз съм писмено, здравей програмата, и аз не са приложили, ФОРМАТ. 355 00:16:08,589 --> 00:16:10,130 Някой друг е изпълнила, ФОРМАТ. 356 00:16:10,130 --> 00:16:12,420 Кой би искал да претендират, че са изпълнени, ФОРМАТ? 357 00:16:12,420 --> 00:16:12,920 Ако ние може? 358 00:16:12,920 --> 00:16:13,830 Добре, какво е вашето име? 359 00:16:13,830 --> 00:16:14,155 >> STUDENT 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J Malan: Copal, хайде нагоре. 361 00:16:15,529 --> 00:16:16,430 Хайде нагоре. 362 00:16:16,430 --> 00:16:17,070 Всичко е наред. 363 00:16:17,070 --> 00:16:22,260 Така че ние имаме, тук, някои табелки с имена, тъй като ние ще направим малка игра на този. 364 00:16:22,260 --> 00:16:26,270 И ние ще ти се обадя, ФОРМАТ. 365 00:16:26,270 --> 00:16:30,170 А ако искате да дойда тук, това, което съм просто прави на екрана, 366 00:16:30,170 --> 00:16:32,340 това е доста просто, там съм аз, това. 367 00:16:32,340 --> 00:16:35,550 >> Добре, така че, здравей името ми е, ФОРМАТ, ако искате да се сложи това на. 368 00:16:35,550 --> 00:16:35,740 Всичко е наред. 369 00:16:35,740 --> 00:16:37,360 И ако можете да отидете стойка от екрана на компютъра 370 00:16:37,360 --> 00:16:39,730 като че ли са функцията, която дойде с тази компютърна система. 371 00:16:39,730 --> 00:16:42,063 И вашата цел в живота е действително да отпечатате нещо. 372 00:16:42,063 --> 00:16:44,560 Но много прилича на програмата ние Просто трябваше на екрана, тук, 373 00:16:44,560 --> 00:16:47,060 ние ще трябва да всъщност ви даде някакъв принос. 374 00:16:47,060 --> 00:16:51,810 >> И така, ако моят принос, тук, е Очевидно, това, което се предава на ФОРМАТ, 375 00:16:51,810 --> 00:16:53,730 нека вид тя се подиграват по този начин. 376 00:16:53,730 --> 00:16:58,720 Отивам да буквално пише по парче хартия, "Здравей, свят" 377 00:16:58,720 --> 00:17:03,020 наклонена черта N. И да е ясно, какво Току-що се построява въз основа на това парче хартия, 378 00:17:03,020 --> 00:17:04,020 изглежда по този начин. 379 00:17:04,020 --> 00:17:08,730 Така че, когато стартирате тази програма, и това жълто ред код бива изпълнен, 380 00:17:08,730 --> 00:17:12,970 това е като че ли, програмата здравей, съм подаде някакъв вход на разстояние до функция 381 00:17:12,970 --> 00:17:13,970 че някой друг е написал. 382 00:17:13,970 --> 00:17:16,595 >> И ако, с пръст, в действителност може, с пръст, 383 00:17:16,595 --> 00:17:21,520 изготвят на екрана, независимо това е като сте били предадени, 384 00:17:21,520 --> 00:17:27,465 ефекта, в крайна сметка, е виж точно това, на екрана. 385 00:17:27,465 --> 00:17:29,140 И Little случай корнер тук. 386 00:17:29,140 --> 00:17:31,540 И добре, ние не трябва да видите на, новата линия, в този момент. 387 00:17:31,540 --> 00:17:33,900 Би било неправилно за вас изрично да се привлече нов ред. 388 00:17:33,900 --> 00:17:36,810 Но ако ние продължавахме написването думи на екран, те ще се окажете под това. 389 00:17:36,810 --> 00:17:39,560 >> Така че много ви благодаря, но се придържаме тук само за един миг. 390 00:17:39,560 --> 00:17:42,860 В момента се нуждаем един друг доброволец, ако можехме, 391 00:17:42,860 --> 00:17:46,830 че ще трябва да играе ролята of-- Това е само хора в оркестъра 392 00:17:46,830 --> 00:17:47,355 точно сега. 393 00:17:47,355 --> 00:17:47,980 Как about-- OK. 394 00:17:47,980 --> 00:17:48,480 Точно тук. 395 00:17:48,480 --> 00:17:49,180 Хайде нагоре. 396 00:17:49,180 --> 00:17:49,955 Как се казваш? 397 00:17:49,955 --> 00:17:50,922 >> STUDENT 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J Malan: Съжаляваме? 399 00:17:51,796 --> 00:17:52,990 STUDENT 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J Malan: Итън, хайде нагоре. 401 00:17:55,320 --> 00:17:55,820 Не? 402 00:17:55,820 --> 00:17:58,390 Знаете, че аз се обърка, дори след като го каза два пъти? 403 00:17:58,390 --> 00:17:58,890 Хайде нагоре. 404 00:17:58,890 --> 00:18:00,030 Трудно е да се чуе тук. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 ДОБРЕ. 407 00:18:05,740 --> 00:18:07,190 И аз съжалявам, какво е вашето име? 408 00:18:07,190 --> 00:18:07,680 >> STUDENT 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J Malan: Ivay. ?] ДОБРЕ. 410 00:18:08,790 --> 00:18:10,430 За сега, ако не ум, вие сте GetString. 411 00:18:10,430 --> 00:18:11,013 >> STUDENT 2: OK. 412 00:18:11,013 --> 00:18:11,797 Готино. 413 00:18:11,797 --> 00:18:14,630 DAVID J Malan: Така че, ако искате да стоя тук само за миг, 414 00:18:14,630 --> 00:18:17,100 нека да разгледаме малко по- по-сложна програма, че 415 00:18:17,100 --> 00:18:18,670 Сега има три реда код. 416 00:18:18,670 --> 00:18:24,080 Така че ние имаме един, името си, използвайки ФОРМАТ; две, призив към GetString, 417 00:18:24,080 --> 00:18:28,060 последвано от една задача към променлива, наречена, низ ите, или наречена ите; 418 00:18:28,060 --> 00:18:31,260 и след това друг разговор да, ФОРМАТ, но този път с два входа. 419 00:18:31,260 --> 00:18:33,646 >> Така че ние вече сме направили състояние Вашето име, или по-скоро, ние сме 420 00:18:33,646 --> 00:18:34,770 вече свършили ФОРМАТ повикване. 421 00:18:34,770 --> 00:18:38,960 Така че аз отивам да пиша, държавните вашето име. 422 00:18:38,960 --> 00:18:42,089 И така, това, което аз отивам да мине, ФОРМАТ, в един момент, 423 00:18:42,089 --> 00:18:43,005 е съвсем просто, това. 424 00:18:43,005 --> 00:18:47,760 Така че, ако искате да отидете напред и да направи това на екрана, това е вашият принос сега. 425 00:18:47,760 --> 00:18:48,260 Всичко е наред. 426 00:18:48,260 --> 00:18:51,160 И забравяме, стринг, сега ние имаме нашата собствена ред код тук. 427 00:18:51,160 --> 00:18:54,470 Така че в, GetString, ние се нуждаем действително да се обадя, GetString. 428 00:18:54,470 --> 00:18:57,920 Така че вашата цел в живота е да си върви навън в оркестъра, ако можех, 429 00:18:57,920 --> 00:18:58,980 и да получите името на някого. 430 00:18:58,980 --> 00:19:00,860 Но нека да ви дам нещо, за да го поставите. 431 00:19:00,860 --> 00:19:02,908 Ако искате да отидете напред и да получите низ, 432 00:19:02,908 --> 00:19:05,241 получите нечие име на това лист хартия, ако могат. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Всичко е наред. 435 00:19:13,530 --> 00:19:15,250 И ние ще видим, в един момент, чието име ние получаваме. 436 00:19:15,250 --> 00:19:17,630 В същото време, това, което аз отивам да има готови, е празен лист 437 00:19:17,630 --> 00:19:21,340 от хартия, в който, аз отивам за съхранение на каквото и да стойност 438 00:19:21,340 --> 00:19:25,752 е, че GetString се връща към мен, Аз, като низ променлива, наречена, с. 439 00:19:25,752 --> 00:19:26,252 Всичко е наред. 440 00:19:26,252 --> 00:19:27,293 Така че това, което имаш тук? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Всичко е наред. 443 00:19:28,450 --> 00:19:30,910 Така че ние имаме името Nik тук. 444 00:19:30,910 --> 00:19:33,750 Така че това е, което буквално е бил върнат 445 00:19:33,750 --> 00:19:35,810 за мен, така да се каже, от GetString. 446 00:19:35,810 --> 00:19:38,720 >> Аз, сега, отивам да изпълни лявата ръка 447 00:19:38,720 --> 00:19:43,440 на този израз, когато аз просто копирате, за днешните цели, Nik. 448 00:19:43,440 --> 00:19:46,470 Така че сега, аз имам една променлива нарича, е, съхраняване име Nik му. 449 00:19:46,470 --> 00:19:49,520 Аз вече предадена на ФОРМАТ, предишен аргумент. 450 00:19:49,520 --> 00:19:52,800 Но в нашия третата и последна линия на код, аз всъщност трябва да ръката ФОРМАТ 451 00:19:52,800 --> 00:19:58,500 нещо малко different-- "Здравей,% ите", наклонена черта п. 452 00:19:58,500 --> 00:20:01,510 >> И така, на последния ред Отивам да send-- последното нещо, което съм 453 00:20:01,510 --> 00:20:03,060 Ще напиша сега, е това. 454 00:20:03,060 --> 00:20:06,310 Така двете линии на код, или а последната линия на код, 455 00:20:06,310 --> 00:20:10,690 покани за двама inputs-- един това, и две, това. 456 00:20:10,690 --> 00:20:13,330 Така че, ако нашата ФОРМАТ функция сега може да вземе това като вход, 457 00:20:13,330 --> 00:20:16,000 нека да изчистите екрана за вас. 458 00:20:16,000 --> 00:20:17,250 Всъщност не, можете да отидете напред. 459 00:20:17,250 --> 00:20:19,333 Ще го оставим, тъй като това е на една и съща програма. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Ние трябва да видим, здравей, Nik. 462 00:20:27,380 --> 00:20:27,880 Всичко е наред. 463 00:20:27,880 --> 00:20:29,670 Така че това е доста малко обръчите, за да скочи през, просто 464 00:20:29,670 --> 00:20:31,620 да пише, да посочвате Име и, здравей, Nik. 465 00:20:31,620 --> 00:20:37,210 Но тази проста идея за пропускане на съобщения, на входа и на изхода къса получаване, 466 00:20:37,210 --> 00:20:40,430 е точно модела ние ще имаме за дори най-сложните функции. 467 00:20:40,430 --> 00:20:41,804 Така че ви благодаря толкова много за вас двамата. 468 00:20:41,804 --> 00:20:43,730 Имаме прекрасна стреса топка тук за вас. 469 00:20:43,730 --> 00:20:48,890 И ви благодаря за нашия GetString и ФОРМАТ доброволци, така. 470 00:20:48,890 --> 00:20:49,551 Благодаря. 471 00:20:49,551 --> 00:20:50,050 Всичко е наред. 472 00:20:50,050 --> 00:20:50,966 Благодаря на двама ви. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Така че ние сме били говорим за до този момент, най-вече за струни. 475 00:21:00,430 --> 00:21:06,550 И се оказва, че всъщност може да C разбере няколко различни типове данни. 476 00:21:06,550 --> 00:21:08,860 Всъщност, нека да Разгледайте тези тук. 477 00:21:08,860 --> 00:21:12,490 Така C, и много езици, разбира нещата, наречени символа. 478 00:21:12,490 --> 00:21:16,852 A Чар е обикновено един байт, или осем бита. 479 00:21:16,852 --> 00:21:19,810 И тя представлява един символ, като буквата А, или в столицата 480 00:21:19,810 --> 00:21:21,990 буква А, или малката буква A, или удивителен знак, 481 00:21:21,990 --> 00:21:25,440 или който и да е характер, че да можете да пишете на клавиатурата, а понякога дори и повече. 482 00:21:25,440 --> 00:21:26,795 Ние също така се случи, за да видите поплавъци. 483 00:21:26,795 --> 00:21:31,160 A плувка е, общо взето, по- 32-битова стойност, или четири байта 484 00:21:31,160 --> 00:21:33,660 защото отново, един байт е осем бита. 485 00:21:33,660 --> 00:21:36,675 >> Така поплавък е стойност с плаваща запетая, нещо с десетична запетая. 486 00:21:36,675 --> 00:21:38,550 И наистина, това е, което филма говорех 487 00:21:38,550 --> 00:21:42,240 за това, кога те говори за плаващи точка стойности, някои фиксиран брой битове 488 00:21:42,240 --> 00:21:43,940 се използва за представяне на реално число. 489 00:21:43,940 --> 00:21:45,740 Но има и неща, наречени двойки. 490 00:21:45,740 --> 00:21:47,860 Те съществуват в Java, ако сте взели АРС, 491 00:21:47,860 --> 00:21:51,540 и двойна, тъй като името щастие подсказва, е два пъти по-голям, колкото плувка. 492 00:21:51,540 --> 00:21:54,540 Тя все още е реално число, тя просто има повече битове 493 00:21:54,540 --> 00:21:58,390 с които да бъдат все по-точни, или за съхраняване на още по-големи числа. 494 00:21:58,390 --> 00:21:58,890 инт е лесно. 495 00:21:58,890 --> 00:22:00,181 Ние говорихме за това последно време. 496 00:22:00,181 --> 00:22:01,160 Това е просто число. 497 00:22:01,160 --> 00:22:03,980 И това е обикновено 32 бита, или четири байта. 498 00:22:03,980 --> 00:22:07,850 >> И така, ако имате, да видим сега, 32 bits-- и ние направихме това през седмица 0, 499 00:22:07,850 --> 00:22:10,820 все така briefly-- ако имате 32 бита, което е най-големият 500 00:22:10,820 --> 00:22:13,580 номера, който може да представлява като цяло число? 501 00:22:13,580 --> 00:22:16,080 Или дайте? 502 00:22:16,080 --> 00:22:18,380 Това е като 4 милиарда, и това е само ако сме 503 00:22:18,380 --> 00:22:20,690 представляващи само положителни числа. 504 00:22:20,690 --> 00:22:23,930 Ако имаш 32 бита, а вие искате да представляват отрицателните числа, както и, 505 00:22:23,930 --> 00:22:27,100 обхвата си е по същество отрицателно 2 милиарда до положителна 2 млрд. 506 00:22:27,100 --> 00:22:29,250 Но като цяло, ние ще започнем при 0 отидете до 4 милиарда. 507 00:22:29,250 --> 00:22:32,400 >> Не е нужно да се знае точно, но можем да видим това, в действителност, ако просто 508 00:22:32,400 --> 00:22:36,400 отворят малко калкулатор, тук. 509 00:22:36,400 --> 00:22:41,070 Мога да направя 2 на 32, и това е как точно голям, 510 00:22:41,070 --> 00:22:43,190 колко стойности можете представляват, с 32 бита. 511 00:22:43,190 --> 00:22:44,442 И това е грубо 4 милиарда. 512 00:22:44,442 --> 00:22:46,900 Така че ние ще продължаваме да виждаме, че редица в няколко различни места. 513 00:22:46,900 --> 00:22:48,890 Но ако имате нужда от по-дълго номера от тази, 514 00:22:48,890 --> 00:22:51,670 Оказва се, че има нещо, наречено дълго дълго. 515 00:22:51,670 --> 00:22:54,005 И дълго време е общо 64 бита, които 516 00:22:54,005 --> 00:22:56,380 означава, че е един порядък дори по-голям от инт. 517 00:22:56,380 --> 00:22:59,510 >> Така че аз дори не може да се произнесе най-големите номер, който може да представлява, 518 00:22:59,510 --> 00:23:01,340 но това е значително по-голяма. 519 00:23:01,340 --> 00:23:05,190 Сега като настрана, исторически, ако пад е 32 бита, 520 00:23:05,190 --> 00:23:12,780 и дълго време е 64 бита, как голяма е дълъг, не дълго време? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Човек би си помислил, че е по-дълъг от една инт но може би по-малко, отколкото дълго дълго дълго, 523 00:23:20,330 --> 00:23:21,400 но всъщност зависи. 524 00:23:21,400 --> 00:23:23,400 >> И така се оказва, една на отчаянието също, 525 00:23:23,400 --> 00:23:26,830 с написването код на някои системи, е, че не всички от тези типове данни 526 00:23:26,830 --> 00:23:28,440 има предварително определени стойности. 527 00:23:28,440 --> 00:23:29,771 Понякога е толкова много бита. 528 00:23:29,771 --> 00:23:31,020 Понякога това е, че много бита. 529 00:23:31,020 --> 00:23:32,750 Така че всъщност трябва да се знае, Понякога, какъв хардуер 530 00:23:32,750 --> 00:23:34,083 сте с вашия софтуер на. 531 00:23:34,083 --> 00:23:36,960 За щастие, други езици и други типове данни, които сега съществуват, 532 00:23:36,960 --> 00:23:38,400 ви позволи да бъдем по-точни. 533 00:23:38,400 --> 00:23:41,220 Е, видяхме низ, и видяхме булев, също, 534 00:23:41,220 --> 00:23:43,960 но се оказва, тези, които идват само с CS50 библиотеката. 535 00:23:43,960 --> 00:23:46,240 Така че тези, които не са построени в В. Тези вместо 536 00:23:46,240 --> 00:23:49,340 дойде в този файл, наречен CS50.h, че в крайна сметка ние ще 537 00:23:49,340 --> 00:23:51,831 отстранете пластовете. 538 00:23:51,831 --> 00:23:53,830 Но за сега, те са просто допълнителни типове данни. 539 00:23:53,830 --> 00:23:57,060 A булев е вярно или невярно, и низ е последователност от символи, 540 00:23:57,060 --> 00:23:57,970 като една дума. 541 00:23:57,970 --> 00:24:01,690 Сега ФОРМАТ, които сме виждали, има контейнери,% и е един. 542 00:24:01,690 --> 00:24:05,430 И вие може да бъде в състояние, до момента, заключим от тези и други примери, как 543 00:24:05,430 --> 00:24:07,720 бихте могли да имат запазено място за различни типове данни. 544 00:24:07,720 --> 00:24:11,150 Например, да вземе предполагам, ако Исках да разпечатате един единствен знак, използвайки 545 00:24:11,150 --> 00:24:15,270 ФОРМАТ, на контейнера е вероятно% гр. 546 00:24:15,270 --> 00:24:19,650 А ако искате да отпечатате на число със запазено място,% I на. 547 00:24:19,650 --> 00:24:25,150 % LLD е дълъг дълъг десетична стойност, но дълго, дълго, така че картите за това. 548 00:24:25,150 --> 00:24:28,640 И тогава% е за плаващи Точка на стойност или за двойна, 549 00:24:28,640 --> 00:24:31,270 така че понякога те използват повторно в различни контексти. 550 00:24:31,270 --> 00:24:33,350 Така че ние ще видим и да използвате някои от тези, които с течение на времето. 551 00:24:33,350 --> 00:24:36,420 И ФОРМАТ и на други функции също екраниращи последователности за подпомагане на другите, 552 00:24:36,420 --> 00:24:38,080 и понякога, те са необходими. 553 00:24:38,080 --> 00:24:39,770 Така че наклонена черта п е на нов ред. 554 00:24:39,770 --> 00:24:42,886 Обратно наклонена черта тона, има ли някой искате да вземе хладно оръжие? 555 00:24:42,886 --> 00:24:43,760 АУДИТОРИЯ ДЪРЖАВА: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J Malan: Tab. 557 00:24:44,551 --> 00:24:46,810 Така че, ако наистина искате да разпечатате раздел, не 558 00:24:46,810 --> 00:24:49,940 фиксиран брой места, но действително символ за табулация, не удари си, 559 00:24:49,940 --> 00:24:53,490 таб, клавиш от клавиатурата, като цяло, вие всъщност правите наклонена черта тон. 560 00:24:53,490 --> 00:24:57,750 Обратно наклонена черта двойни кавички, Затова би някога съм искал това? 561 00:24:57,750 --> 00:24:58,250 Нали така? 562 00:24:58,250 --> 00:25:00,417 Защо не мога да просто да напишете двойни кавички на моята клавиатура? 563 00:25:00,417 --> 00:25:02,124 АУДИТОРИЯ ДЪРЖАВА: Защото, в противен случай, това е 564 00:25:02,124 --> 00:25:04,830 ще мисля, че е до края от искал печат вашия [? текст. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J Malan: Точно така. 566 00:25:05,420 --> 00:25:07,211 Не забравяйте, че с нашата ФОРМАТ примери, когато ние 567 00:25:07,211 --> 00:25:10,075 Минавахме да ФОРМАТ на входа, в ляво на този вход низ 568 00:25:10,075 --> 00:25:12,950 и относно правото на този вход пролетта, разбира се, е двойно цитат. 569 00:25:12,950 --> 00:25:16,270 Ако вашият собствен вход е с двойно цитат в средата на който, 570 00:25:16,270 --> 00:25:18,920 компютърът може потенциално се объркате, че да, 571 00:25:18,920 --> 00:25:20,760 прави това двойни кавички принадлежат в средата? 572 00:25:20,760 --> 00:25:22,150 Има ли принадлежат с левия? 573 00:25:22,150 --> 00:25:23,566 Има ли принадлежат с най-подходящия? 574 00:25:23,566 --> 00:25:26,780 И така, ако искате да го направите супер ясно, нали обратно наклонена черта двойни кавички, 575 00:25:26,780 --> 00:25:30,480 така че това е избягал, така да се каже, и това не е смесил за нещо друго. 576 00:25:30,480 --> 00:25:34,400 А има и няколко други тук, наклонена черта г, единични кавички, 0, 577 00:25:34,400 --> 00:25:36,510 за да видим с течение на времето, както добре. 578 00:25:36,510 --> 00:25:37,760 И сега, какво да кажем за функции? 579 00:25:37,760 --> 00:25:41,630 >> Така че действия, които можем да предприемем този момент на този език, C, както и, които сме виждали, 580 00:25:41,630 --> 00:25:44,320 ФОРМАТ, разбира се, и всичко на другите на екрана, 581 00:25:44,320 --> 00:25:47,140 тук, че ние ще използваме за курса на първите няколко седмици, само 582 00:25:47,140 --> 00:25:48,485 дойде, когато библиотеката CS50. 583 00:25:48,485 --> 00:25:51,850 И те правят много по-лесно, по- C, за да се получи в действителност приноса на потребителите. 584 00:25:51,850 --> 00:25:54,200 Оказва се, че в C, и честно казано в рамките на няколко езика, 585 00:25:54,200 --> 00:25:57,450 това е истинска болка в областта на шията, за да се направи нещо по-просто, като своевременно на потребителя 586 00:25:57,450 --> 00:26:01,310 за клавиатура, за неговото въвеждане. 587 00:26:01,310 --> 00:26:03,240 И така, тези функции го правят по-лесно. 588 00:26:03,240 --> 00:26:05,472 >> И той също има грешка проверка на целия, 589 00:26:05,472 --> 00:26:07,180 така че, когато припомни в сряда, ние 590 00:26:07,180 --> 00:26:09,740 Видях, опитайте отново, предупреждението, когато не е оказал съдействие, 591 00:26:09,740 --> 00:26:11,700 и аз напечатани една дума, вместо номер? 592 00:26:11,700 --> 00:26:15,402 Ние сме направили най-тежката работа ранно за да се уверите, потребителят сътрудничи. 593 00:26:15,402 --> 00:26:17,860 Но това са само за обучение колела, че ще в крайна сметка, 594 00:26:17,860 --> 00:26:19,640 и бързо да се съблече. 595 00:26:19,640 --> 00:26:22,630 >> Така че да обобщим, тогава, нека хвърлим един бърз поглед, 596 00:26:22,630 --> 00:26:26,620 много като направихме с Scratch, най- някои канонични структури в В. 597 00:26:26,620 --> 00:26:28,580 Това има за цел да, сортиране на, да вихрушка турне, 598 00:26:28,580 --> 00:26:30,990 Просто така, че имате препратка и че сте виждали неща на първо време. 599 00:26:30,990 --> 00:26:34,100 Но тогава ние ще разгледаме реалното кодиране използвате някои от тези градивни елементи. 600 00:26:34,100 --> 00:26:36,710 Толкова много, като в Scratch, когато бяхме изявления обичат, 601 00:26:36,710 --> 00:26:41,570 казват или, чакай, в C, ние нямаме функции, както и, като ФОРМАТ. 602 00:26:41,570 --> 00:26:45,350 >> Ако искаме да изразим състояние в C, това е подобно, по дух, 603 00:26:45,350 --> 00:26:47,840 към този пъзел парче, че изглеждаше така в Scratch. 604 00:26:47,840 --> 00:26:49,850 Но вместо това, ние буквално просто напишете това, ако. 605 00:26:49,850 --> 00:26:51,830 И тогава, в скоби, ще се постави условие, 606 00:26:51,830 --> 00:26:54,807 когато това условие е това, което ние ще обадя, отново, булев израз. 607 00:26:54,807 --> 00:26:56,390 И отново, това е нещо като Псевдокод. 608 00:26:56,390 --> 00:26:58,830 И, всъщност, // е коментар. 609 00:26:58,830 --> 00:27:00,550 Това е само на английски думи за себе си. 610 00:27:00,550 --> 00:27:03,000 Но това е генералът структура на, ако състояние. 611 00:27:03,000 --> 00:27:05,220 Но ще видим бетон примери в един момент. 612 00:27:05,220 --> 00:27:07,960 >> Ако искате да имате двупосочно разклонение на пътя, 613 00:27:07,960 --> 00:27:11,740 много като направихме с нашия доброволец на Сряда, можете да имате, иначе ако. 614 00:27:11,740 --> 00:27:16,020 И ако искате да имате една трета и крайното състояние или ситуация подразбиране 615 00:27:16,020 --> 00:27:19,006 можете да имате само един друг блок, има. 616 00:27:19,006 --> 00:27:21,880 И по същия начин, с булеви изрази, можете, и, като ги заедно. 617 00:27:21,880 --> 00:27:24,296 И видяхме в сряда, че това не е единичен амперсанд, 618 00:27:24,296 --> 00:27:28,220 това е две, от съображения за по-ниско ниво, че ние накрая ще видим и играе с тях. 619 00:27:28,220 --> 00:27:30,410 Или-ING неща заедно е 2 вертикални ленти. 620 00:27:30,410 --> 00:27:32,240 На клавиатурата на САЩ, това като цяло е ключов 621 00:27:32,240 --> 00:27:35,730 с клавиша Shift-горе Въведете вашия ключ или Назад ключ. 622 00:27:35,730 --> 00:27:38,620 >> Тогава там е, че тези неща ще използваме може би веднъж или два пъти. 623 00:27:38,620 --> 00:27:42,570 Те са функционално еквивалентни какво можете да правите с това, ако, иначе, ако, 624 00:27:42,570 --> 00:27:44,950 иначе, ако друго, конструиране, но те се наричат ​​превключвател. 625 00:27:44,950 --> 00:27:48,020 Те изглеждат много по-различно, но ние ще виж в някои от дистрибуторската ни код, 626 00:27:48,020 --> 00:27:51,890 за бъдещ проблем набор, най-вероятно, че понякога е просто по-хубава 627 00:27:51,890 --> 00:27:54,060 начин за изразяване цяло куп условия, 628 00:27:54,060 --> 00:27:57,590 без да се налага много фигурни скоби и много скоби и отстъп. 629 00:27:57,590 --> 00:28:01,910 Но те ни дават не повече мощност, отколкото ние вече имаме. 630 00:28:01,910 --> 00:28:02,550 И сега контури. 631 00:28:02,550 --> 00:28:05,020 И този път, ние ще разгледаме при малко по-бавно. 632 00:28:05,020 --> 00:28:08,470 Но след това, ние ще започнем да ги използват, особено за тези, които вече познато. 633 00:28:08,470 --> 00:28:13,830 Това е каноничен начин, ако невероятно тайнствена начин, за да напишете една линия в C. 634 00:28:13,830 --> 00:28:15,896 >> Сега една линия в Scratch е доста ясен. 635 00:28:15,896 --> 00:28:17,020 Вие имате, завинаги, да го блокира. 636 00:28:17,020 --> 00:28:19,760 Вие имате, повторете, блок с просто номер, който трябва да въведете инча 637 00:28:19,760 --> 00:28:22,220 И с, за линия, можете да приложат и двете от тези идеи, 638 00:28:22,220 --> 00:28:23,595 но това е малко по-технически. 639 00:28:23,595 --> 00:28:25,994 Но честно казано, това е също сравнително проста. 640 00:28:25,994 --> 00:28:28,160 След като знаете реда на операции, вие буквално 641 00:28:28,160 --> 00:28:30,910 просто ще включете стойности и кажи на компютъра какво да прави. 642 00:28:30,910 --> 00:28:32,800 Така че ето един пример. 643 00:28:32,800 --> 00:28:38,040 Това е една линия, че доста просто, се брои от един номер нагоре 644 00:28:38,040 --> 00:28:40,187 чрез друг. 645 00:28:40,187 --> 00:28:42,020 И само от фланга в това, дори и ако имате 646 00:28:42,020 --> 00:28:44,660 Без предварителни опит с този език, какъв номер 647 00:28:44,660 --> 00:28:46,920 пък най-вероятно да започне броенето при? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 И аз съм се познае, че е така, защото вие се види, че има пад и аз, 650 00:28:50,240 --> 00:28:51,073 което е променлива. 651 00:28:51,073 --> 00:28:52,390 Той е инициализира с 0. 652 00:28:52,390 --> 00:28:55,670 >> И след това по-късно, тя изглежда като ние сме минаваща ФОРМАТ стойност. 653 00:28:55,670 --> 00:28:58,000 И, всъщност, аз направих малко правописна грешка тук. 654 00:28:58,000 --> 00:28:59,850 Но това е лесно поправими. 655 00:28:59,850 --> 00:29:02,390 Нека добавя в, аз тук. 656 00:29:02,390 --> 00:29:06,150 Сега имаме ФОРМАТ същество преминал тази стойност контейнер. 657 00:29:06,150 --> 00:29:08,299 И какво ще се брои през нея? 658 00:29:08,299 --> 00:29:08,840 АУДИТОРИЯ: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J Malan: 49. 662 00:29:10,910 --> 00:29:13,340 Така 50, на пръв поглед, изглежда правилно. 663 00:29:13,340 --> 00:29:16,990 Но това, оказва се, ще бъде нашето състояние да пазим проверка. 664 00:29:16,990 --> 00:29:21,740 И ние ще се спре веднъж аз вече не е по-малко от 50. 665 00:29:21,740 --> 00:29:24,920 Така че този цикъл, обратно, трябва да изпълнява, доколкото аз е по-малко от 50. 666 00:29:24,920 --> 00:29:28,891 Но веднага след като тя става 50, или 51, или по-лошо, той трябва да спре автоматично. 667 00:29:28,891 --> 00:29:29,390 Всичко е наред. 668 00:29:29,390 --> 00:29:31,200 >> И така, какво всъщност се случва тук? 669 00:29:31,200 --> 00:29:33,160 Така че това е от порядъка на операции за една линия. 670 00:29:33,160 --> 00:29:35,440 One, имате така наречените инициализация. 671 00:29:35,440 --> 00:29:38,264 Това жълто подчерта парче на код се изпълнява от една страна, 672 00:29:38,264 --> 00:29:40,930 и тя има смисъл, че, за Сряда, най-вероятно да си представите. 673 00:29:40,930 --> 00:29:45,500 Той създава променлива, наречена аз и го магазини в тази променлива стойността 0. 674 00:29:45,500 --> 00:29:47,560 Така че аз е 0 в този момент в историята. 675 00:29:47,560 --> 00:29:49,680 >> Следващото нещо, което случва в този конструкт, 676 00:29:49,680 --> 00:29:51,540 е, че състоянието получава проверява. 677 00:29:51,540 --> 00:29:54,325 Така че аз се провери веднага, е аз по-малко от 50? 678 00:29:54,325 --> 00:29:57,700 И разбира се, отговорът за сега е, разбира се, да. 679 00:29:57,700 --> 00:30:00,710 Да, защото аз е 0, и това е със сигурност по-малко от 50. 680 00:30:00,710 --> 00:30:03,866 След това, което се случва, е, че това ред код бива екзекутиран. 681 00:30:03,866 --> 00:30:06,740 И всъщност, ако има множествена реда код в тези фигурни скоби, 682 00:30:06,740 --> 00:30:09,020 всички те се изпълнява една след друга. 683 00:30:09,020 --> 00:30:11,450 >> И в ефекта тук, е Очевидно, за да разпечатате 684 00:30:11,450 --> 00:30:15,365 на брой и, която ще се е 0, и след 1, 2 и след това. 685 00:30:15,365 --> 00:30:15,865 Но защо? 686 00:30:15,865 --> 00:30:17,410 Защо това се увеличава? 687 00:30:17,410 --> 00:30:20,680 Е, четвъртото, което се случва, е, че този синтаксис 688 00:30:20,680 --> 00:30:22,610 получава изпълнен, след запетаята. 689 00:30:22,610 --> 00:30:27,506 аз ++ е краткият начин да се каже; вземе стойността на I, и се добавя 1 към него; 690 00:30:27,506 --> 00:30:30,380 и след това следващия път, добавете 1 до нея; и следващия път, 691 00:30:30,380 --> 00:30:31,330 се добавя 1 към него. 692 00:30:31,330 --> 00:30:33,640 >> Така че, ако ние продължаваме да става, какво ще се случи 693 00:30:33,640 --> 00:30:35,890 Следващата е аз няма да инициализира аз все пак. 694 00:30:35,890 --> 00:30:38,290 Ако аз продължавах инициализиране аз до 0, този пример 695 00:30:38,290 --> 00:30:41,110 никога няма да свърши, защото аз ще се залепи при 0. 696 00:30:41,110 --> 00:30:43,870 Но какво ще се случи, е че условието ще бъдат проверени, 697 00:30:43,870 --> 00:30:54,280 линията на код ще се изпълни, на Аз ще се увеличава, 698 00:30:54,280 --> 00:30:56,970 състояние, ще бъдат проверени, код ще се изпълни. 699 00:30:56,970 --> 00:30:59,790 И го държат колоездене отново, и отново и отново, 700 00:30:59,790 --> 00:31:03,340 докато аз ++ индуцира стойност 50. 701 00:31:03,340 --> 00:31:05,870 >> Условието след това казва, 50 е по-малко от 50? 702 00:31:05,870 --> 00:31:09,360 Отговорът, разбира се, не е, и така че целият код спира изпълняващата. 703 00:31:09,360 --> 00:31:13,020 И ако имате повече код на екрана по-долу, това е, което се случва след това. 704 00:31:13,020 --> 00:31:17,530 Тя изскача от тези фигурни скоби и продължава да отпечатате повече след това. 705 00:31:17,530 --> 00:31:20,470 >> Така на шега сега, от Фокстрот, че вие може би ще разберем сега. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Той винаги е смешно. 708 00:31:31,560 --> 00:31:34,110 Това е като хихиканията вид прецеждам, 709 00:31:34,110 --> 00:31:38,370 и след това разбираш, че не трябва да да се смееш на хумор като този. 710 00:31:38,370 --> 00:31:41,160 Но има някои храна за вкъщи тук, педагогически, също. 711 00:31:41,160 --> 00:31:43,577 Така се оказва, че аз съм липсва парче синтаксис, 712 00:31:43,577 --> 00:31:45,410 или Фокстрот за изчезнали парче синтаксис тук. 713 00:31:45,410 --> 00:31:48,076 Какво липсва, че сме имали във всеки друг пример, до този момент? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Върни се, е там, така че това е нещо друго, 716 00:31:53,390 --> 00:31:54,440 че ще се върнем да не след дълго. 717 00:31:54,440 --> 00:31:55,398 Какво липсва, все пак? 718 00:31:55,398 --> 00:31:55,908 Да. 719 00:31:55,908 --> 00:31:58,150 >> АУДИТОРИЯ ДЪРЖАВА: The инициализация на [недоловим]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J Malan: OK. 721 00:31:58,470 --> 00:31:58,980 Така че, да. 722 00:31:58,980 --> 00:32:03,210 Така че всъщност, това is-- Е, и брой се инициализира 723 00:32:03,210 --> 00:32:05,470 до по-горе, или по-скоро, обявена до горе. 724 00:32:05,470 --> 00:32:06,960 Така че това е още един начин да го направите. 725 00:32:06,960 --> 00:32:08,685 Но не и в един ред, че е валидно все пак. 726 00:32:08,685 --> 00:32:09,310 Какво ще кажете за тук? 727 00:32:09,310 --> 00:32:10,196 >> АУДИТОРИЯ ДЪРЖАВА: Това е най-къдравите скоби? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J Malan: Да. 729 00:32:10,640 --> 00:32:12,080 Така фигурните скоби са изчезнали. 730 00:32:12,080 --> 00:32:15,495 Но този код, искам да кажа, да им кредити, всъщност, синтактично валидна. 731 00:32:15,495 --> 00:32:17,610 Оказва се, че не правим нуждаят фигурните скоби 732 00:32:17,610 --> 00:32:21,691 ако имате само един ред код, който искате да се изпълни в рамките на цикъла. 733 00:32:21,691 --> 00:32:24,190 Сега ние винаги, в клас и по- всички от нашия код, 734 00:32:24,190 --> 00:32:26,730 включва фигурните скоби така или иначе, просто заради яснотата е. 735 00:32:26,730 --> 00:32:29,010 Но осъзнавам, че в учебниците и онлайн примери, 736 00:32:29,010 --> 00:32:31,300 вие може много добре да видите къдрава скоби изчезнали някъде. 737 00:32:31,300 --> 00:32:34,850 И това е ОК, ако това, което са разчленена и предназначени 738 00:32:34,850 --> 00:32:38,650 е само на един ред код, а не няколко реда код, потенциално. 739 00:32:38,650 --> 00:32:39,150 Всичко е наред. 740 00:32:39,150 --> 00:32:44,500 Така че, свързани с издаването на неточност, е въпрос от преливане, 741 00:32:44,500 --> 00:32:48,560 в смисъл, че подобно, се цели числа имат ограничения за тях 742 00:32:48,560 --> 00:32:49,970 точно като стойности с плаваща запетая? 743 00:32:49,970 --> 00:32:53,120 В света плаваща точка ценности, ние може да бъде толкова точни, само, 744 00:32:53,120 --> 00:32:55,710 след което понякога лоши неща могат да се случат, 745 00:32:55,710 --> 00:32:57,760 и нашите програми могат да бъдат бъги и грешка. 746 00:32:57,760 --> 00:33:00,050 Сега дори и с цели числа, можете да се сблъскате с проблеми. 747 00:33:00,050 --> 00:33:03,820 Сега цяло число не разполага с десетична точка или номера след него. 748 00:33:03,820 --> 00:33:07,130 Това е просто естествено число, обикновено. 749 00:33:07,130 --> 00:33:09,430 Така че това, което може да се обърка с едно цяло число? 750 00:33:09,430 --> 00:33:12,210 Ако аз съм с едно цяло число, за да брои, какво би могло да се обърка? 751 00:33:12,210 --> 00:33:13,230 Изглежда много по-просто. 752 00:33:13,230 --> 00:33:13,873 Да. 753 00:33:13,873 --> 00:33:16,240 >> АУДИТОРИЯ ДЪРЖАВА: Ако номер получава [недоловим] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J Malan: Да. 755 00:33:17,073 --> 00:33:20,820 Какво ако броим толкова високо, че сте Не мога да изразя, че наистина голям номер. 756 00:33:20,820 --> 00:33:21,320 Нали така? 757 00:33:21,320 --> 00:33:23,910 В един момент, ти започваш да надвишава границите 758 00:33:23,910 --> 00:33:27,077 на 32-битова стойност, или 64-битова стойност. 759 00:33:27,077 --> 00:33:29,410 Сега отново, аз не съм сигурен как се произнася с 64-битова стойност, 760 00:33:29,410 --> 00:33:32,230 но знам, че с 32-битово цяло число, най-голямата стойност, която може да бъде, 761 00:33:32,230 --> 00:33:35,490 ако това е само положително ценности, е приблизително 4 милиарда. 762 00:33:35,490 --> 00:33:39,000 Така че, ако се опитам да брои до 5 милиарда, нещо ще се случи. 763 00:33:39,000 --> 00:33:41,050 Но нека да видим какво, всъщност, може да се случи. 764 00:33:41,050 --> 00:33:44,570 В света на цяло число преливник, където можете, в известен смисъл, 765 00:33:44,570 --> 00:33:48,270 преливане на капацитета на число, това, което може да се случи? 766 00:33:48,270 --> 00:33:51,190 >> Така че тук е двоично число, това е като завръщане към 0. 767 00:33:51,190 --> 00:33:54,630 Всичко е 1, а заместителите там, са степени на 2, 768 00:33:54,630 --> 00:33:55,980 така че това е двоичен. 769 00:33:55,980 --> 00:33:59,416 Така че това са 8, 1 бита на екрана. 770 00:33:59,416 --> 00:34:01,290 И ако си спомняте, или можете бързо да направите по математика, 771 00:34:01,290 --> 00:34:06,074 каква стойност се представлява тук с тези осем 1 бита? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 И дори ако не са съвсем сигурни на математиката, можете да го направите навън. 774 00:34:09,260 --> 00:34:10,550 Или просто можете да вид на разума през него, 775 00:34:10,550 --> 00:34:12,633 чакай малко, ако съм представляващи 8 битова стойност, 776 00:34:12,633 --> 00:34:17,750 и аз имам 256 възможни стойности, но първият от които е 0, 777 00:34:17,750 --> 00:34:19,909 Просто знам, че Най-големият ще е 255, 778 00:34:19,909 --> 00:34:21,510 и това е, което може да е тази. 779 00:34:21,510 --> 00:34:26,060 >> Така че предполагам, аз се опитвам да добавите 1 до тази стойност. 780 00:34:26,060 --> 00:34:28,750 Какво бихте направили в клас училище при добавяне на 1, и го 781 00:34:28,750 --> 00:34:31,139 наистина не се побере, защото Вие трябва да направи резултата 1? 782 00:34:31,139 --> 00:34:34,380 Какъв е този номер става да стане, когато добавите 1? 783 00:34:34,380 --> 00:34:37,030 Това ще стане 0. 784 00:34:37,030 --> 00:34:37,530 Нали така? 785 00:34:37,530 --> 00:34:41,139 Защото, ако имаше повече bits-- и аз ще се опита да, вид, го напишете here-- 786 00:34:41,139 --> 00:34:44,710 ако имахме повече битове, което ние могли да направите тук е да добавите 1, 787 00:34:44,710 --> 00:34:47,370 и тогава ние ще се получи това. 788 00:34:47,370 --> 00:34:48,739 Опа. 789 00:34:48,739 --> 00:34:52,250 Бихме имат 1 бит чак тук. 790 00:34:52,250 --> 00:34:55,530 >> Но ако това е изчерпаем стойност, това е само 8 бита, 791 00:34:55,530 --> 00:34:57,480 и това е предварително определен от компютъра, 792 00:34:57,480 --> 00:34:59,370 които 1 е ефективно не съществува. 793 00:34:59,370 --> 00:35:00,980 Тя просто вид пада от скала. 794 00:35:00,980 --> 00:35:05,480 И така, ако добавите 1-255, това, което стойност искаш да изглежда да получите? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 И така номера случайно, и може би неволно, 797 00:35:09,700 --> 00:35:12,040 в крайна сметка се увиват около подобно. 798 00:35:12,040 --> 00:35:14,079 Така че това, което може да бъде влиянието на това? 799 00:35:14,079 --> 00:35:15,620 Е, има няколко различни неща. 800 00:35:15,620 --> 00:35:18,751 Така че една, тя не се окажете търсите като 0, неволно, 801 00:35:18,751 --> 00:35:20,750 но можете да видите вид, дори и в реалния свят, 802 00:35:20,750 --> 00:35:23,416 за добро или за лошо, проявления на тази идея за ограничение. 803 00:35:23,416 --> 00:35:26,630 Например, всеки от вас, които които някога съм играл Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 Някой се случи да знаете максималния брой монети 805 00:35:28,880 --> 00:35:32,032 можете да събирате в Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Направете предположение въз основа на днешните водещи въпроси. 807 00:35:35,640 --> 00:35:39,140 Това е по-голям от 256 или 255. 808 00:35:39,140 --> 00:35:40,330 Това е 4 милиарда. 809 00:35:40,330 --> 00:35:42,080 Така се оказва, и Има някои people-- 810 00:35:42,080 --> 00:35:46,080 някои Googling потвърди миналата night-- са придобили 4 милиарда златни монети, 811 00:35:46,080 --> 00:35:47,730 или какво ли не, в Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Въпреки че изглежда, че има начин да подвежда играта, 813 00:35:49,860 --> 00:35:53,222 там е бъг или функция, която ви позволява да просто се натрупват много и много точки. 814 00:35:53,222 --> 00:35:54,930 Но възможно най-голям стойност, съгласно 815 00:35:54,930 --> 00:35:58,360 към тази снимка на екрана на някой I намерено онлайн, е наистина, 4000000000. 816 00:35:58,360 --> 00:35:59,240 >> А защо е така? 817 00:35:59,240 --> 00:36:03,040 Това е точно 4000000000, Вероятно защото някой реши, 818 00:36:03,040 --> 00:36:05,500 който е писал тази игра, които биха могли да направят 4 милиарда, 819 00:36:05,500 --> 00:36:07,340 нещо, нещо, нещо, като стойността сложих 820 00:36:07,340 --> 00:36:10,256 с калкулатора по-рано, но това е само малко по-чист за хората 821 00:36:10,256 --> 00:36:12,610 да се каже, максималният брой на coins-- или шипове, 822 00:36:12,610 --> 00:36:14,860 както те наричат ​​them-- че сте може да събере е 4 милиарда. 823 00:36:14,860 --> 00:36:16,290 И така, защо е това? 824 00:36:16,290 --> 00:36:20,310 Как е LEGO играта прилагане на тезгяха 825 00:36:20,310 --> 00:36:23,420 това е следенето на брой монети имате? 826 00:36:23,420 --> 00:36:24,266 Те използвате какво? 827 00:36:24,266 --> 00:36:26,390 АУДИТОРИЯ ДЪРЖАВА: Той спира Разчитам след 4 милиарда. 828 00:36:26,390 --> 00:36:27,720 DAVID J Malan: Той спира Разчитам след 4 милиарда, 829 00:36:27,720 --> 00:36:29,525 което означава, че вие ​​може да заключим, като програмист, 830 00:36:29,525 --> 00:36:31,960 че те са най-вероятно като се използва 32 битово цяло число. 831 00:36:31,960 --> 00:36:35,380 Като програмист буквално напечатан, инт, в неговия или нейния код, 832 00:36:35,380 --> 00:36:39,620 и това е от типа на променлива, която те използват за съхраняване на някого код. 833 00:36:39,620 --> 00:36:42,230 Така че има други прояви на тези видове ограничения. 834 00:36:42,230 --> 00:36:45,063 >> Така че аз не съм играл тази game-- и аз бях четене на историята 835 00:36:45,063 --> 00:36:48,470 за да се потвърди като much-- но в оригиналната версия на Civilization, където 836 00:36:48,470 --> 00:36:53,240 ти явно си взаимодействат един с друго и могат да водят война или мир, 837 00:36:53,240 --> 00:36:56,590 Ганди е трябвало да бъде един от най-спокойните героите, както аз 838 00:36:56,590 --> 00:36:59,280 го разбирам, в първия версия на Civilization. 839 00:36:59,280 --> 00:37:03,250 И в действителност, по скала от 1 до 10, неговата агресивност е просто един. 840 00:37:03,250 --> 00:37:05,620 Така че все така леко агресивно, както изглежда. 841 00:37:05,620 --> 00:37:11,590 >> Но в един момент, можете очевидно инсталиране на демокрацията в географията. 842 00:37:11,590 --> 00:37:14,900 И ако инсталирате демокрацията във вашата версия на играта, 843 00:37:14,900 --> 00:37:17,320 След вашето ниво агресията отива надолу. 844 00:37:17,320 --> 00:37:18,460 Това е нещо добро. 845 00:37:18,460 --> 00:37:20,890 Хората са по-спокойни както изглежда, в тази ситуация. 846 00:37:20,890 --> 00:37:23,190 Но очевидно, някой е направил не да има, ако, състояние 847 00:37:23,190 --> 00:37:24,780 в оригиналната версия на кода. 848 00:37:24,780 --> 00:37:30,650 >> Така нивото на агресия Ганди премина от положително 1, минус 2, на отрицателна 1, 849 00:37:30,650 --> 00:37:33,840 но играта не разбере отрицателни числа. 850 00:37:33,840 --> 00:37:38,680 Така че това, което се случи, е агресията на Ганди ниво отиде от 1, 0, 1 до отрицателна, 851 00:37:38,680 --> 00:37:40,900 която имаше за последица обвивка около да бъде 852 00:37:40,900 --> 00:37:44,690 най-агресивния характер в играта, на стойност 255, 853 00:37:44,690 --> 00:37:46,630 по десетобалната система от 1 до 10. 854 00:37:46,630 --> 00:37:49,887 И тъй като след това, че е станала повече въплъщения на тази игра, 855 00:37:49,887 --> 00:37:51,720 и те го държат като нещо като великденско яйце, 856 00:37:51,720 --> 00:37:53,870 че Ганди е очевидно Ужасно агресивно. 857 00:37:53,870 --> 00:37:56,740 Но това е в резултат на по- много проста грешка програмиране 858 00:37:56,740 --> 00:37:58,630 с това, че много ранна версия на играта. 859 00:37:58,630 --> 00:38:02,860 >> Сега по-смущаващо, по- Наскоро, Боинг 787 860 00:38:02,860 --> 00:38:05,720 е документирано като имащи бъг, не от вида на устройството 861 00:38:05,720 --> 00:38:07,340 сте особено искам да имам бъг. 862 00:38:07,340 --> 00:38:10,130 И симптомите, че аз ще четат тук, от една статия в сайта, 863 00:38:10,130 --> 00:38:13,840 е този, модел 787 самолета че се захранва непрекъснато 864 00:38:13,840 --> 00:38:18,030 за 248 дни може да загуби всичко променлив ток, AC, 865 00:38:18,030 --> 00:38:20,850 електрическа енергия, поради контрол Генератор единици, 866 00:38:20,850 --> 00:38:23,330 GCUs, едновременно навлиза в безотказен режим. 867 00:38:23,330 --> 00:38:26,790 Така че това беше предупреждение, издадено когато е открит този проблем. 868 00:38:26,790 --> 00:38:28,750 Това състояние е причинено от софтуер брояч, 869 00:38:28,750 --> 00:38:32,230 вътрешни за GCUs, така цяло число или променлива, 870 00:38:32,230 --> 00:38:36,850 че ще прелее след 248 дни непрекъсната мощност. 871 00:38:36,850 --> 00:38:40,350 Boeing е в процес на разработване на софтуер, който ъпгрейд GCU 872 00:38:40,350 --> 00:38:42,350 ще отстрани опасно състояние. 873 00:38:42,350 --> 00:38:44,226 >> Така че много прилича на ракета сценарий, където 874 00:38:44,226 --> 00:38:46,850 те са имали някаква променлива че се брои, и броене, 875 00:38:46,850 --> 00:38:50,720 и броене, но постепенно прелива границите на своите възможности, 876 00:38:50,720 --> 00:38:54,890 по подобен начин направих проклетото самолета има променлива преливник 877 00:38:54,890 --> 00:38:56,410 след достатъчно време на движение. 878 00:38:56,410 --> 00:38:59,240 И така, начинът на езика в бузата на работното около този въпрос 879 00:38:59,240 --> 00:39:04,400 е наистина, рестартиране, самолета си всеки 247 дни, така че паметта получава избърсват 880 00:39:04,400 --> 00:39:06,100 и променливата се връща 0. 881 00:39:06,100 --> 00:39:09,410 Но осъзнаваш, че това е много голяма въплъщение на софтуер, 882 00:39:09,410 --> 00:39:14,070 но най-вече като чуваме за Apple, операционни системи навлиза в автомобили, 883 00:39:14,070 --> 00:39:18,030 и самостоятелно шофиране на коли от Google, и произволен брой въплъщения на софтуер 884 00:39:18,030 --> 00:39:21,000 в нашите ежедневието, телевизори и часовници, както и повече, 885 00:39:21,000 --> 00:39:24,950 осъзнае бяха заобиколени от софтуер, всички от които е написана от нас, хората. 886 00:39:24,950 --> 00:39:28,150 >> И тъй като всички ние скоро ще откриете, това е много лесно и много типично 887 00:39:28,150 --> 00:39:30,250 да се правят грешки при писане на софтуер. 888 00:39:30,250 --> 00:39:32,745 И ако не ги хване, някои лоши неща могат да се случат. 889 00:39:32,745 --> 00:39:35,400 Сега понякога някои смешни неща могат да се случат, 890 00:39:35,400 --> 00:39:38,280 или поне понякога ние знаете да очаквате някои грозота. 891 00:39:38,280 --> 00:39:41,550 Така 0, разделен на 0, от степен училище, като цяло е нещо лошо. 892 00:39:41,550 --> 00:39:43,050 Това е неопределено. 893 00:39:43,050 --> 00:39:46,440 И се оказва out-- и нека видим дали моя микрофон може да вземете това, че Apple up-- 894 00:39:46,440 --> 00:39:47,790 имаше някои се забавляват с тази наскоро. 895 00:39:47,790 --> 00:39:48,850 Така че имам iPhone тук. 896 00:39:48,850 --> 00:39:54,160 Отивам да говоря с Siri и я попитай да ми даде отговор на 0, разделен 0. 897 00:39:54,160 --> 00:39:55,850 Какво е 0 разделен от 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Представете си, че имате 0 бисквитки и да ги разделят поравно 900 00:40:02,230 --> 00:40:03,540 между 0 приятели. 901 00:40:03,540 --> 00:40:05,810 Колко бисквитки се всеки човек да се зарази? 902 00:40:05,810 --> 00:40:06,350 Виждаш ли? 903 00:40:06,350 --> 00:40:07,660 Това няма смисъл. 904 00:40:07,660 --> 00:40:10,540 И Cookie Monster е тъжно че няма бисквитките. 905 00:40:10,540 --> 00:40:13,987 И сте тъжни, че вие нямате приятели. 906 00:40:13,987 --> 00:40:15,570 DAVID J Malan: Това е нещо неприятно. 907 00:40:15,570 --> 00:40:17,550 Така че това е, което е просто каза, че има. 908 00:40:17,550 --> 00:40:21,380 Това е неопределен, той не е определено, И наистина, много езици за програмиране 909 00:40:21,380 --> 00:40:24,950 или, наистина, компилатори ще откриване, когато, в една програма, 910 00:40:24,950 --> 00:40:27,050 опитайте да разделите 0 от 0. 911 00:40:27,050 --> 00:40:29,830 По-забавно от това обаче, е, която очевидно, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 е на Twitter тези дни. 913 00:40:31,270 --> 00:40:37,610 А той отговори на това, с този, което е абсолютно очарователни. 914 00:40:37,610 --> 00:40:40,110 Но нека хвърлим един бърз поглед към Няколко други конструкции, 915 00:40:40,110 --> 00:40:43,459 и след това пуснати някои от настоящия код за използване, в добри начини. 916 00:40:43,459 --> 00:40:45,250 Така се оказва, освен за електрически вериги, има 917 00:40:45,250 --> 00:40:49,174 нещо, наречено линия, докато, че изглежда по различен начин и се изпълнява 918 00:40:49,174 --> 00:40:51,590 малко differently-- и ние в крайна сметка ще видите examples-- 919 00:40:51,590 --> 00:40:53,500 но в известен смисъл, е по-лесно, тъй като тя 920 00:40:53,500 --> 00:40:56,670 не позволява да се инициализира и актуализира в границите на контура. 921 00:40:56,670 --> 00:40:57,794 Вие все още може да го приложи. 922 00:40:57,794 --> 00:41:01,219 Така че можете да направите точно същите неща с време на цикъл, като с по линия, 923 00:41:01,219 --> 00:41:03,260 но си синтаксис, ultimately-- Както ще в крайна сметка 924 00:41:03,260 --> 00:41:04,551 see-- ще бъде различно. 925 00:41:04,551 --> 00:41:07,450 Има дори направи линия, докато, които всъщност е малко по-различна, 926 00:41:07,450 --> 00:41:09,640 с това, че има предвид, че за контур и линия, докато винаги 927 00:41:09,640 --> 00:41:13,005 проверите състоянието им на първо място, ако можете да прочетете това нещо горе до долу, 928 00:41:13,005 --> 00:41:16,440 тя вид изглежда като това ще проверите състоянието го миналата, защото това е 929 00:41:16,440 --> 00:41:17,910 наистина последния ред на код. 930 00:41:17,910 --> 00:41:20,580 И наистина, че ще бъде полезно в някои програми, които пишем, 931 00:41:20,580 --> 00:41:23,746 ако искате да направите нещо просто сляпо и в крайна сметка се провери състоянието. 932 00:41:23,746 --> 00:41:25,205 Това не е непременно нещо лошо. 933 00:41:25,205 --> 00:41:27,912 Ако искаме променливи, можем да направим то в няколко различни начина. 934 00:41:27,912 --> 00:41:30,290 И видяхме в Фокстрот карикатура, един начин да го направите, 935 00:41:30,290 --> 00:41:33,400 където можете да декларира променлива, като INT брояч и запетая, 936 00:41:33,400 --> 00:41:36,570 и след това може би следващия later-- линия, може би 10 реда later-- 937 00:41:36,570 --> 00:41:37,800 вие всъщност го инициализира. 938 00:41:37,800 --> 00:41:42,230 Така че тези 2 реда код декларира променлива от тип INT 939 00:41:42,230 --> 00:41:44,930 и го наричат ​​брояч, така че дава ми достатъчно бита за провеждане на инт. 940 00:41:44,930 --> 00:41:48,230 И след това евентуално, го слага стойност 0 в тази променлива. 941 00:41:48,230 --> 00:41:51,250 Тя подрежда в една 0 и 1 модел, който ние знаем от миналата седмица, 942 00:41:51,250 --> 00:41:53,260 представлява броят ние знаем като 0. 943 00:41:53,260 --> 00:41:56,920 Или казано, можете да направите това много по- по-кратко и ясно, точно като тази. 944 00:41:56,920 --> 00:41:59,390 >> Сега имаме и способността да се обадя функции. 945 00:41:59,390 --> 00:42:03,070 И в действителност, тук е 2 линия програма, или извлечение от него, 946 00:42:03,070 --> 00:42:06,157 че ни позволява да всъщност пиша някакъв код, който 947 00:42:06,157 --> 00:42:08,990 получава низ от user-- много като нашия доброволец миг ago-- 948 00:42:08,990 --> 00:42:11,320 съхраняване на резултата променлива, наречена на името, 949 00:42:11,320 --> 00:42:15,470 и then-- много прилича с нашия доброволец с printf-- отпечатва тези ценности 950 00:42:15,470 --> 00:42:19,180 чрез преминаване през два аргумента, на низ, последвано от променливата 951 00:42:19,180 --> 00:42:20,781 нарича, име, самата. 952 00:42:20,781 --> 00:42:23,155 Така че нека да погледнем, преди ние се върнем към Mario там, 953 00:42:23,155 --> 00:42:26,010 най Няколко сега, примери за това. 954 00:42:26,010 --> 00:42:30,537 >> Отивам да вървим напред и отворена нагоре, да кажем, функция-0.c. 955 00:42:30,537 --> 00:42:33,120 И както винаги, този код е разположение на интернет страницата на курса, 956 00:42:33,120 --> 00:42:35,660 така че може да играят заедно в вкъщи и гледам на него по-късно. 957 00:42:35,660 --> 00:42:40,400 Но тук е програмата в това е същество, от линия 17 и 22. 958 00:42:40,400 --> 00:42:43,270 Основната програма е мястото, където програма винаги ще започне. 959 00:42:43,270 --> 00:42:46,980 Тази програма, както изглежда, се случва да отпечатате името ви, на дебелото черво. 960 00:42:46,980 --> 00:42:50,320 Това е след това ще се обадя GetString, точно както направихме с нашите доброволци. 961 00:42:50,320 --> 00:42:53,365 И тогава, това е интересно, то се случва да се обадя PrintName. 962 00:42:53,365 --> 00:42:56,490 Оказва се, през цялото това време, има изглежда е функция, наречена PrintName. 963 00:42:56,490 --> 00:42:57,614 Това отпечатва името на някого. 964 00:42:57,614 --> 00:43:01,210 Ние не трябва да се използва от ФОРМАТ недалечното минало, има PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Но това е подвеждащо защото PrintName не 966 00:43:03,500 --> 00:43:06,760 идват с C. Хората не го направи го измисли преди около 40 или 50 години, 967 00:43:06,760 --> 00:43:07,990 Направих, вместо. 968 00:43:07,990 --> 00:43:10,330 И всъщност, ако превъртите определяне на допълнителни, известие 969 00:43:10,330 --> 00:43:14,200 как мога да напиша моя собствена функции в C. Ще крайна сметка 970 00:43:14,200 --> 00:43:16,319 обясни защо ние продължаваме да кажат: нищожен, на няколко места, 971 00:43:16,319 --> 00:43:18,110 но за днес, нека просто погледнете името. 972 00:43:18,110 --> 00:43:20,905 >> На линия 24, ако искате да създадете свой собствен функция, 973 00:43:20,905 --> 00:43:22,780 буквално напише Име на функцията. 974 00:43:22,780 --> 00:43:24,340 Избрах PrintName. 975 00:43:24,340 --> 00:43:26,159 В скоби, вие След това уточни какъв вид 976 00:43:26,159 --> 00:43:28,450 на входа, и колко ви Искам тази функция, за да се вземат. 977 00:43:28,450 --> 00:43:31,906 В този случай, аз искам да се вземат 1 променлива, наречена, име, 978 00:43:31,906 --> 00:43:34,030 и това ще бъде от тип, стринг, така че ще 979 00:43:34,030 --> 00:43:35,780 да има някаква последователност от символи. 980 00:43:35,780 --> 00:43:39,170 И тогава, това program-- много прилича на Scratch, 981 00:43:39,170 --> 00:43:42,590 можете да имате персонализиран пъзел pieces-- ще има този обичай поведение. 982 00:43:42,590 --> 00:43:46,760 Това ще се обадя ФОРМАТ минаваща през, здравей, контейнер, 983 00:43:46,760 --> 00:43:49,110 и след това ще включите в каквото наречен потребителя. 984 00:43:49,110 --> 00:43:51,450 >> Така че това е един пример за това, което компютърен учен би 985 00:43:51,450 --> 00:43:55,090 повикване абстракция или функционална разлагане, които са само 986 00:43:55,090 --> 00:43:58,110 фантазия начини на saying-- е, ако ви харесва тази идея високо ниво, 987 00:43:58,110 --> 00:44:01,569 като искам функционалност, която отпечатва името на някого, абсолютно сте 988 00:44:01,569 --> 00:44:04,360 може буквално да напишете ФОРМАТ и след това премине в аргументите, които искате, 989 00:44:04,360 --> 00:44:07,340 и програмата ще работи, тъй като той има от сряда. 990 00:44:07,340 --> 00:44:10,510 Но можете да започнете да абстрактна далеч понятието за отпечатване на име. 991 00:44:10,510 --> 00:44:13,270 Можете да го дадете име, като PrintName, и това 992 00:44:13,270 --> 00:44:15,280 е тази идея за наслояване от седмица 0. 993 00:44:15,280 --> 00:44:19,910 >> Отсега нататък, аз и не е нужно да знаете или интересува колко PrintName се изпълнява. 994 00:44:19,910 --> 00:44:22,470 Да го използва ФОРМАТ, може би това не го прави, кой знае какво използва? 995 00:44:22,470 --> 00:44:23,410 На кого му пука? 996 00:44:23,410 --> 00:44:26,034 Сега аз говоря тук, вместо тук. 997 00:44:26,034 --> 00:44:28,700 И наистина, тъй като нашите програми се по-напреднали и сложни, 998 00:44:28,700 --> 00:44:32,550 ние ще продължим да приемате за даденост които съществуват по-ниски ниво парчета от пъзел. 999 00:44:32,550 --> 00:44:34,780 Защото ние ги написал или някой друг е направил, така че 1000 00:44:34,780 --> 00:44:36,910 че тогава можем да се изгради върху тях. 1001 00:44:36,910 --> 00:44:39,430 Нека да погледнем на този вариант, функционира една. 1002 00:44:39,430 --> 00:44:41,780 >> Така че това е малко по- напреднали, но се оказва, 1003 00:44:41,780 --> 00:44:44,570 че в библиотеката CS50 е, има само една функция GetInt. 1004 00:44:44,570 --> 00:44:47,720 Ние не мислим, преди години, за да приложи функция GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 И това е малко досадно, защото, ако вие, момчета, които пишат програма, където 1006 00:44:50,970 --> 00:44:53,325 Искате ли да получите положителен цяло число от потребителя, 1007 00:44:53,325 --> 00:44:55,010 абсолютно можете да използвате GetInt. 1008 00:44:55,010 --> 00:44:57,840 И вие можете да се консултирате с абсолютно състоянието и може би една линия 1009 00:44:57,840 --> 00:45:00,320 ако това междинно съединение е по-голяма от 0 и крещи на потребителя 1010 00:45:00,320 --> 00:45:02,699 ако той или тя не дава вие положително число. 1011 00:45:02,699 --> 00:45:04,740 Но нека да се изгради тази сграда блокира себе си, а, 1012 00:45:04,740 --> 00:45:06,555 обичай Scratch парче, ако щете. 1013 00:45:06,555 --> 00:45:08,680 Отивам да имат програма тук, че в крайна сметка, аз 1014 00:45:08,680 --> 00:45:11,780 Искам да мога да се обадя GetPositiveInt, и аз искам да бъда 1015 00:45:11,780 --> 00:45:14,200 можете да отпечатате каквото и да е инт. 1016 00:45:14,200 --> 00:45:16,240 Но това се абстрахира сега. 1017 00:45:16,240 --> 00:45:19,050 Това е просто били дадени на високо ниво име, което казва какво прави, 1018 00:45:19,050 --> 00:45:21,780 което е прекрасно, защото това е много интуитивен сега, за да се чете. 1019 00:45:21,780 --> 00:45:24,710 И ако аз направя това, което е под грижа качулката, позволете ми да превъртите надолу. 1020 00:45:24,710 --> 00:45:27,140 И това е малко плашещо На първо място, особено 1021 00:45:27,140 --> 00:45:29,470 ако това е първата програма, но нека да разгледаме. 1022 00:45:29,470 --> 00:45:32,860 >> Аз вече не казва, нищожен, защото се оказва, функции, 1023 00:45:32,860 --> 00:45:34,777 много прилича GetString, може връща стойност за мен. 1024 00:45:34,777 --> 00:45:36,610 Те не просто трябва за отпечатване на екрана, 1025 00:45:36,610 --> 00:45:38,410 те действително могат да предадат ми нещо обратно. 1026 00:45:38,410 --> 00:45:41,535 И докато преди PrintName, Аз не се нуждаят от нещо обратно. 1027 00:45:41,535 --> 00:45:44,160 Имах нужда от страничен ефект от нещо се появяват на екрана, 1028 00:45:44,160 --> 00:45:46,570 но аз не се нуждаят от човешка да ми предаде нещо обратно. 1029 00:45:46,570 --> 00:45:48,840 Тук, с GetPositiveInt, като с GetInt, 1030 00:45:48,840 --> 00:45:50,640 Искам да се подаде нещо обратно. 1031 00:45:50,640 --> 00:45:53,220 Така че аз казвам не, нищожен, на ред 23, но инт, 1032 00:45:53,220 --> 00:45:55,570 в която се казва, тази функция че пиша, 1033 00:45:55,570 --> 00:45:58,860 наречено GetPositiveInt ще ми върне цяло число, а не нищо, 1034 00:45:58,860 --> 00:45:59,890 Не невалидни. 1035 00:45:59,890 --> 00:46:03,280 >> В същото време, това ще отнеме не входове, така че съм, вид, обърнати него. 1036 00:46:03,280 --> 00:46:08,280 Аз не съм като някоя GetPositiveInt вход, аз искам тя да ми даде своята продукция. 1037 00:46:08,280 --> 00:46:09,800 И след това, което се случва сега? 1038 00:46:09,800 --> 00:46:11,640 Така че тук е как мога да декларира променлива. 1039 00:46:11,640 --> 00:46:15,090 Правил съм го извън контура, по причини, ние в крайна сметка ще видите, 1040 00:46:15,090 --> 00:46:17,700 но това само дава ми 32 бита нарича, п, 1041 00:46:17,700 --> 00:46:20,952 и аз съм предварително определяне тях да съхранявате число. 1042 00:46:20,952 --> 00:46:23,660 И тук е, че правя, докато конструкт, и това е причината, че е полезно. 1043 00:46:23,660 --> 00:46:26,700 Буквално да направите това, а п е по-малко от 1. 1044 00:46:26,700 --> 00:46:28,030 Така че нека да видим какво ще стане. 1045 00:46:28,030 --> 00:46:30,760 I разпечатате, моля дайте ми положително инт. 1046 00:46:30,760 --> 00:46:34,300 След това да получа едно цяло число, с помощта на CS50 функционира и се съхранява в п. 1047 00:46:34,300 --> 00:46:38,990 >> И тогава, какво ред код вероятно получава изпълнен следващата, логично? 1048 00:46:38,990 --> 00:46:41,890 Коя линия номер? 1049 00:46:41,890 --> 00:46:42,571 Да, така 31. 1050 00:46:42,571 --> 00:46:45,320 Може би не знаете това, докато сте е казал, или нещо го направи извод, 1051 00:46:45,320 --> 00:46:45,986 но това е вярно. 1052 00:46:45,986 --> 00:46:48,280 Той отива горе до долу и след това продължава да се повтарят. 1053 00:46:48,280 --> 00:46:55,840 Така че, ако сте написали в речем, на броя отрицателна 1, п е по-малко от 1 отрицателна? 1054 00:46:55,840 --> 00:46:56,340 Да. 1055 00:46:56,340 --> 00:46:58,470 Тъй като отрицателен 1 е по-малко от 1. 1056 00:46:58,470 --> 00:46:59,510 И така, какво трябва да се случи? 1057 00:46:59,510 --> 00:47:03,260 Отивам да направите това а п е по-малко от 1, 1058 00:47:03,260 --> 00:47:05,760 така че аз отивам да се върнем към линия 28. 1059 00:47:05,760 --> 00:47:09,530 >> И всеки time-- и нека си тече this-- направи функция 1, за да го съставят, 1060 00:47:09,530 --> 00:47:11,340 и сега Дот наклонена черта функция 1. 1061 00:47:11,340 --> 00:47:14,280 Ако изпишете отрицателна 1, това е ще продължим да крещи по мен 1062 00:47:14,280 --> 00:47:17,530 докато не си сътрудничат, защото всеки от моите входа е по-малко от 1 1063 00:47:17,530 --> 00:47:20,070 и ако това е, докато по-малко от 1, Отивам да продължаваш да правиш това. 1064 00:47:20,070 --> 00:47:24,240 Ако най-накрая го даде редица като 50, за щастие, той казва, благодаря за 50. 1065 00:47:24,240 --> 00:47:24,970 Защо? 1066 00:47:24,970 --> 00:47:30,640 Защото веднага след като п не е по-малко от 1, спра да остана в този цикъл, 1067 00:47:30,640 --> 00:47:33,840 и тази нова дума днес, възвръщаемост, буквално прави това. 1068 00:47:33,840 --> 00:47:36,800 Така че аз съм просто изпълнява, в чувство, което е равно на GetString, 1069 00:47:36,800 --> 00:47:40,590 къде съм подаде обратно всеки, който е с помощта ми, някаква стойност. 1070 00:47:40,590 --> 00:47:42,820 То не трябва да бъде низ, това е инт. 1071 00:47:42,820 --> 00:47:44,990 Така че просто, бързо Например, но ние скоро ще 1072 00:47:44,990 --> 00:47:47,930 видите някои по-сложни версии на едно място. 1073 00:47:47,930 --> 00:47:53,882 Всъщност, нека да разгледаме по- числов един, който се нарича return.c. 1074 00:47:53,882 --> 00:47:55,590 И това всъщност е малко по-лесно. 1075 00:47:55,590 --> 00:47:59,010 Така че целта на тази програма в life-- нека да се съберат и да го ползвате, 1076 00:47:59,010 --> 00:48:03,090 така че се възвръщаемост, Дот наклонена черта, return-- известие 1077 00:48:03,090 --> 00:48:05,530 програмата просто кубчета стойност 2. 1078 00:48:05,530 --> 00:48:08,410 Това е доста глупаво, това е трудно код, той не взема никакви входове, 1079 00:48:08,410 --> 00:48:12,220 но тя не демонстрира друг функция, която съм си написал. 1080 00:48:12,220 --> 00:48:15,760 Така че тук, аз съм обявен за променлива, наречена х, от тип INT, 1081 00:48:15,760 --> 00:48:17,840 равен на броя 2, напълно произволно. 1082 00:48:17,840 --> 00:48:19,530 Това е само част пухкави печат. 1083 00:48:19,530 --> 00:48:23,070 Той казва, че х е сега, като и такива, cubing точка точка точка. 1084 00:48:23,070 --> 00:48:26,390 И магията е очевидно в ред 21. 1085 00:48:26,390 --> 00:48:30,120 Обаждам функция, наречена, куб, Аз съм го подаде лист хартия 1086 00:48:30,120 --> 00:48:32,890 с номер 2, изписана върху него, и каква стойност, математически, 1087 00:48:32,890 --> 00:48:34,860 искам да се измъкнем от него? 1088 00:48:34,860 --> 00:48:36,570 Просто като проверка здрав разум? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Нали така? 1091 00:48:37,570 --> 00:48:40,160 Аз искам 2 кубчета обратно, от 2 до Силата на 3, така че 8 гърба. 1092 00:48:40,160 --> 00:48:42,570 >> Така че, когато се изпълнява куб? 1093 00:48:42,570 --> 00:48:44,349 Е, забележи, че е приложена тук. 1094 00:48:44,349 --> 00:48:47,140 И точно като преди, логично, въпреки че синтаксис е вероятно 1095 00:48:47,140 --> 00:48:49,320 много нови за много от вас, Искам тази функция 1096 00:48:49,320 --> 00:48:51,780 да ме върне лист хартия с пад върху него. 1097 00:48:51,780 --> 00:48:53,990 Така че аз имам едно цяло число, на Името е произволно, 1098 00:48:53,990 --> 00:48:55,530 но обикновено нарича куб. 1099 00:48:55,530 --> 00:48:58,430 Входът към него, е п от въведете число, така че това е 1100 00:48:58,430 --> 00:49:00,800 как мога да премине в броя 2 на лист хартия. 1101 00:49:00,800 --> 00:49:03,910 И после се оказва, C опори математика, така че не е нужно х е за време, 1102 00:49:03,910 --> 00:49:06,680 можете просто да използвате звездичката за умножение. 1103 00:49:06,680 --> 00:49:11,070 И това се връща н пъти п пъти п, която е просто една стойност на кубчета. 1104 00:49:11,070 --> 00:49:12,840 >> Така че къде отиваме с всичко това? 1105 00:49:12,840 --> 00:49:14,570 Това определено е вихрушка турне, бъдете сигурни, 1106 00:49:14,570 --> 00:49:16,410 че в супер секции и в проблем определи 1, 1107 00:49:16,410 --> 00:49:18,368 ще се ходи през всичко това още повече. 1108 00:49:18,368 --> 00:49:22,490 И в определен проблем 1, ние ще прехвърлим от графичен света на Scratch 1109 00:49:22,490 --> 00:49:25,640 към нещо по команден ред в C. Но ние ще почерпим вдъхновение 1110 00:49:25,640 --> 00:49:27,680 от този тук игра от недалечното минало, където 1111 00:49:27,680 --> 00:49:31,591 използване на C, а стандартната издание на р набор ще приложат пирамида на Марио. 1112 00:49:31,591 --> 00:49:34,340 И в хакер издание на р набор, ако така решите да избира, 1113 00:49:34,340 --> 00:49:38,280 ще приложи малко по- оспорване пирамида с два пика. 1114 00:49:38,280 --> 00:49:41,239 Вие също така ще приложи алгоритъм, алчен алгоритъм. 1115 00:49:41,239 --> 00:49:43,030 Оказва се, че има някои интересни логика 1116 00:49:43,030 --> 00:49:45,640 зад процеса на използвате станция на касата 1117 00:49:45,640 --> 00:49:47,410 и действително подавайки някого промяна. 1118 00:49:47,410 --> 00:49:50,410 Налице е алгоритъм, който е доста ясно, че може дори да 1119 00:49:50,410 --> 00:49:53,576 хванете интуитивно когато за първи път прочетох it-- осъзнавайки, че е това, което винаги съм 1120 00:49:53,576 --> 00:49:57,110 направено по всяко време съм дал на някого някаква пари back-- която ви позволява да винаги 1121 00:49:57,110 --> 00:50:00,679 намали броят на хартиени банкноти или монети, метални 1122 00:50:00,679 --> 00:50:02,220 че сте подаде обратно към потребителя. 1123 00:50:02,220 --> 00:50:04,610 И това, разбира се, е наложителна защото, ако отидете на CVS или какво ли не, 1124 00:50:04,610 --> 00:50:06,430 вие не искате да бъде предаден цял куп такива 1125 00:50:06,430 --> 00:50:07,596 или цял куп жълти стотинки. 1126 00:50:07,596 --> 00:50:10,120 Вие искате най-малочислени монети, вероятно, е възможно. 1127 00:50:10,120 --> 00:50:13,070 >> И накрая, вие също така ще бъдат оспорвани да се бъркам в света на водата 1128 00:50:13,070 --> 00:50:17,220 и всъщност става поскъпване за картографиране между темповете на потока, 1129 00:50:17,220 --> 00:50:19,890 от искал, вода в душ, точно колко вода се използва. 1130 00:50:19,890 --> 00:50:22,640 И загатването в него, ще бъде този клип тук, 1131 00:50:22,640 --> 00:50:24,840 която ще приключи на за само 60 секунди, през което 1132 00:50:24,840 --> 00:50:29,070 рисува картината на нисък дебит душове. 1133 00:50:29,070 --> 00:50:30,886 >> [Възпроизвеждане на видео] 1134 00:50:30,886 --> 00:50:31,385 -Всичко е наред. 1135 00:50:31,385 --> 00:50:32,774 Имам всичко тук. 1136 00:50:32,774 --> 00:50:35,800 Имам Cyclone F Series, Hydra, Jetflow, Стокхолм 1137 00:50:35,800 --> 00:50:37,660 Supersteam, каквото се сетите. 1138 00:50:37,660 --> 00:50:39,265 >> -И Какво ще препоръчате? 1139 00:50:39,265 --> 00:50:40,460 >> -Какво търсиш? 1140 00:50:40,460 --> 00:50:41,300 >> -Power Мъж. 1141 00:50:41,300 --> 00:50:42,285 Сила. 1142 00:50:42,285 --> 00:50:42,910 ПОДОБЕН Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Това Е за радиация. 1144 00:50:44,520 --> 00:50:46,335 -Това е вярно. 1145 00:50:46,335 --> 00:50:48,275 -Сега Какво е това? 1146 00:50:48,275 --> 00:50:49,704 -Това Е Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Аз не се продават, че един. 1148 00:50:50,620 --> 00:50:51,700 >> -Но Това е, което искаме. 1149 00:50:51,700 --> 00:50:52,680 Това е един командос 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Не Ми повярва. 1151 00:50:53,882 --> 00:50:55,090 Той е използван само в цирка. 1152 00:50:55,090 --> 00:50:56,512 Това е за слонове. 1153 00:50:56,512 --> 00:50:59,356 >> -Ще Плащате нищо. 1154 00:50:59,356 --> 00:51:01,252 >> -Какво За Джери? 1155 00:51:01,252 --> 00:51:02,760 >> -Той Не може да се справиш с това. 1156 00:51:02,760 --> 00:51:04,910 Той е деликатен. 1157 00:51:04,910 --> 00:51:05,750 О да. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END PLAYBACK] 1160 00:51:37,320 --> 00:51:37,700 DAVID J Malan: Добре. 1161 00:51:37,700 --> 00:51:38,820 Това е, ако за CS50. 1162 00:51:38,820 --> 00:51:40,050 Ще се видим следващата седмица. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> SPEAKER 1: [? Скъли?], [? Ian,?] доколкото това аутро проект, 1165 00:51:49,029 --> 00:51:50,362 какво сте момчета излезе с? 1166 00:51:50,362 --> 00:51:51,990 >> SPEAKER 2: Е, ние дадохме това разнообразие на мисълта, 1167 00:51:51,990 --> 00:51:53,250 и смятаме, че най-добрият начин to-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: May I? 1169 00:51:53,660 --> 00:51:54,326 >> SPEAKER 2: Да. 1170 00:51:54,326 --> 00:51:56,360 С всички средства, всъщност. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Така че аз мисля, можем да обобщим нашата идея 1172 00:51:59,425 --> 00:52:05,450 за outros с една word-- нищо. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J Malan: Нищо? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Нищо. 1176 00:52:11,200 --> 00:52:12,990 DAVID J Malan: Какво означава това? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: outros са за нищо. 1178 00:52:16,260 --> 00:52:21,720 SPEAKER 2: Ами, искам да кажа, във философията, Искам да кажа, нищо не е винаги нещо. 1179 00:52:21,720 --> 00:52:24,200 SPEAKER 1: Така what's-- това, което е предпоставката? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: Така че това е като живота. 1181 00:52:25,720 --> 00:52:26,680 ДОБРЕ. 1182 00:52:26,680 --> 00:52:28,294 Какво прави днес? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J Malan: Станах, имаше закуска, и дойде да работи. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Това е аутро. 1185 00:52:34,056 --> 00:52:36,806 SPEAKER 2: Но, искам да кажа, не би трябвало да нещо се случи с него по the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Не, не, не, не. 1187 00:52:37,889 --> 00:52:40,220 Нищо не се случва. 1188 00:52:40,220 --> 00:52:42,910 >> SPEAKER 1: Така че, защо са ни гледат? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Понеже това е една аутро за CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J Malan: Не още. 1191 00:52:48,652 --> 00:52:49,151