[Музыка Прайграванне] David J малая: Добра, дабро запрашаем назад у CS50. Гэта пачатак другога тыдня. Слова з аднаго з нашых сябры на тэрыторыі кампуса - калі вы зацікаўлены, верагодна, альбо цяпер ці ў будучыні тэрміну нават пасля таго, як больш зручны, навучанне навучэнцаў сярэдніх школ трохі што-то аб інфарматыцы, зрабіць галаву, што URL-адрас. Ім, у прыватнасці трэба прама цяпер з настаўнікаў, у прыватнасці, калі ў вас ёсць былі некаторыя ўздзеяння інфарматыкі. Таму нагадаем, што ў мінулы раз, мы ўвялі некалькіх тыпаў дадзеных у C, і Вы, магчыма, пачалі, каб атрымаць рукі брудныя з гэтым да гэтага часу У задачу, пастаўленую адзін. І ў нас быў знак. Такім чынам, у некалькі тэхнічных тэрмінаў, што з'яўляецца сімваламі, як вы ведаеце, што на сённяшні дзень? Так што гэта характар, але давайце Дакладней цяпер. Што мы разумеем пад характарам або асобных знакаў? Нечисловой сімвал - так не абавязкова. Атрымліваецца, што цотныя лікі, нават знакаў прыпынку і літар прадстаўлены з гэтымі дадзенымі тыпу, вядомага як сімвал. Так што гэта не абавязкова ў алфавітным парадку. Да? Так што гэта ASCII сімвал. Так што, калі вы ўспомніце нулявы тыдні, калі у нас былі нашы добраахвотнікі байт прыдумаць і альбо трымаць паднятымі ўверх рукамі ці не ўсё, яны ўяўлялі біт. Але ўсе разам як група з васьмі, яны ўяўлялі сабой байта. І мы ўвялі паняцце ASCII у той лекцыі, якая проста адпаведнасць паміж лічбамі і літарамі. І ASCII ужыванняў, як тыя людзі разумеем, восем біт для прадстаўлення знака. Такім чынам, адпаведна, калі восем бітаў можа кожная прымаць адно з двух значэнняў - нуль ці адзін - Гэта азначае, што дзве магчымасці для гэтага чалавека - нуль ці адзін - дзве для гэтага чалавека, дзве для гэтага твар, дзве для гэтага. Такім чынам, у агульнай складанасці два разы ў два разы два разы двойчы два - так што два восьмым ў агульнай складанасці. Так што агульная колькасць сімвалаў 256 Магчыма, што вы можаце прадстаўляць з васьмю бітамі. Зараз, тыя з вас, хто кажа Азіяцкі моў можа ведаць, што ёсць больш знакаў у свеце, чым проста І × і Cs і Ds. І сапраўды, ASCII бракуе для многія мовы свету. Але пра гэта ў іншы раз. На дадзены момант вядома, што ў C, калі вы хочаце прадстаўляць ліст, кавалак пунктуацыі, ці проста нешта характар ў прыродзе, мы выкарыстоўваем знак. І гэта адзін байт ці восем біт. Як наконт дзесятковага? Ну, цэлалікавых з'яўляецца цэлым лікам. Колькі бітаў, калі вы памятаеце, было цэлае звычайна? Любы нагадаць? Так яно, як правіла 32. Гэта на самай справе залежыць ад кампутара што вы выкарыстоўваеце. Але ў прыборы, і ў вялікай колькасці Кампутары, гэта 32 біта ці чатыры байт - восем разоў чатыры. І цэлых лікаў выкарыстоўваюцца толькі для захоўвання лікамі, альбо адмоўным, станоўчае ці нуль. І калі ў вас ёсць 32 біта, і вы толькі клапоцяцца аб станоўчых лікаў, можа любы стадыён, колькі магчымых цэлыя кампутара могуць складаць ад нуля на да? Таму было б у два-32, які прыкладна ў чатыры мільярды даляраў. Такім чынам, гэтыя двойкі будуць паўтараюцца тэмы ў галіне камп'ютэрных навук. Як мы ўбачым, яны даволі зручна працаваць з, нават калі гэта не зусім Лёгка рабіць матэматыку ў галаве. Таму мы будзем казаць прыкладна ў чатыры мільярды даляраў. Цяпер, вельмі доўга - Вы можаце выгляду здагадку. Гэта даўжэй, чым Int. Колькі бітаў? Так 64 біт ці восем байт. Гэта проста азначае, што вы можаце прадстаўляць нават вялікія ліку, вялікія станоўчыя або больш адмоўных лікаў. А як наконт плаваць? Вось з якая плавае кропкай значэнне 32 біт. Гэта ўсяго толькі сапраўдны лік, то з коскі. Але калі вы замест гэтага трэба больш месца пасля коскі, ці вы хочаце ўяўляюць большая колькасць з некаторымі фракцыі пасля гэтага, вы можаце выкарыстоўваць дваіх чалавек, які складае 64 біта. Але ёсць цікавы вынас тут. Так што калі цэлыя абмежаваныя 32 бітамі і нават доўгі доўгіх абмежаваныя 64 біт, такога роду ўзнікае пытанне, Што рабіць, калі вы на самой справе хочаце падлічыць вышэй, чым 4000000000 для дзесятковага? Ну, вы проста карыстаецеся вельмі доўга. Але што, калі вы хочаце высокага колькасці чым на два 64-й, плюс-мінус? Дык вось, гэта велізарная колькасць. Але ў рэшце рэшт, вы можаце на самой справе клапаціцца аб такіх каштоўнасцях, асабліва калі вы карыстаецеся базу дадзеных і пачынаю збіраць шмат-шмат і шмат дадзеных і прысваенне унікальнага нумары для кожнай часткі гэтых дадзеных. Такім чынам, мы часткова ёсць праблемы. І сапраўды гэтак жа, з якая плавае кропкай значэння - паплаўкамі або двухмесных - Калі вы атрымалі толькі канчатковае лік біт, колькі ўсяго ты мог нумароў магчыма, уяўляюць? Ну, гэта менш зразумела, калі вы ўключаць дзесятковую кропку. Але гэта, вядома, вядома. Калі ў вас ёсць канчатковае лік біт, канчатковым лікам людзей, канчатковаму колькасць лямпачак, вядома, вы можаце ўяўляюць сабой толькі канчатковае лік значэння з якая плавае кропкай. Але колькі сапраўдных лікаў з'яўляюцца іх у свеце? Там у бясконцасць. Так што гэта свайго роду праблема, таму што мы не маюць бясконцая колькасць памяці або аператыўнай памяці ўнутры нашых кампутараў. Такім чынам, некаторыя складаныя рэчы могуць здарыцца. Так што давайце ісці наперад і паспрабаваць каб выказаць гэта тут. Дазвольце мне ісці наперад і адкрываць Gedit. Я збіраюся ісці наперад і захаваць файл называецца "floats0.c" проста быць у адпаведнасці з прыкладам, які даступных у Інтэрнэце, калі вы хацелі б. І я збіраюся ісці наперад і вызначыць яго наступным чынам - Я збіраюся пайсці далей і сказаць, унутр Асноўны пустата, як мы часта робім. А потым у гэтай праграме, я збіраюся абвяшчаю сябе паплаўком, так 32-бітныя пераменная F, адвольна. А потым я збіраюся захоўваць у ім Я не ведаю, адну дзясятую, таму 0,1. Так што я збіраюся выказаць, што як адзін дзеліцца на 10, што цалкам ў законную C. А потым на другой лініі, я проста хочаце раздрукаваць гэты значэнне. Таму нагадаем, што мы можам выкарыстоўваць Е знаёмыя. Мы не хочам выкарыстоўваць% я для Int. Мы хочам выкарыстаць% F для паплаўка. А потым я збіраюся зрабіць зваротную касую рысу N, Зачыніць цытаты, коска, F, кропка з коскі. Такім чынам, вось мая праграма. Там ужо адна памылка. У каго-небудзь, для якога гэтая націснутая ўжо хачу паказаць па меншай меры, адну памылку я зрабіў? Да? Да. Я забыўся "# ўключыць" ў вяршыні, яны сімптомам якой, калі я паспрабую кампіляцыі гэтага будзе, што кампілятар будзе крычаць на мяне, кажучы нявызначаны знак ці нешта ў гэтым родзе. Ён чагосьці не разумее Е падабаецца. Так што я збіраюся рабіць "# ўключыць », Захавайце файл. І цяпер ён знаходзіцца ў лепшай форме. Але я таксама збіраюся паказаць адну новую дэталь сёння. У дадатак да вызначэння месца як трымальнікі% F% I% з, вы можаце часам ўплываць на паводзіны гэтага запаўняльніка. Напрыклад, у выпадку з якая плавае кропкай, калі я толькі хачу для адлюстравання аднаго дзесятковага знака пасля перыяд, я магу рэальна зрабіць 0.1f. Такім чынам, іншымі словамі, я аддзяляю F і знак адсотка з 0,1, як раз Е кажучы, вы маглі б мець цэлы кучай лічбаў пасля коскі момант для мяне. Але я толькі хачу, каб убачыць адну з іх. Так што я збіраюся ісці наперад цяпер і сэкономьте гэтую праграму, зайдзіце ў мой тэрмінал вокны, і я збіраюся ісці наперад Тып і зрабіць паплавок 0, увядзіце. Я бачу, што некалькі загадкавыя лініі, якая пачне больш сэнсу, як мы дражніць яго на часткі гэтым тыдні і на наступнай. Цяпер я збіраюся ісці наперад і запусціць паплавок нуля. І, чорт. Так што ёсць яшчэ адна памылка тут па некаторых прычынах. Я ўпэўнены, што адна дзесятая, або адзінка, дзялення на 10, ня 0.0. Магчыма, я проста не глядзеў пры досыць лічбаў. Дык чаму ж я не казаў, два 0,2 бачыць дзве знакаў пасля коскі, а не толькі адзін. Дазвольце мне вярнуцца да маёй акно тэрмінала тут і падкінуць пару разоў, каб гл. маю гісторыю. Як пераканацца, плаваюць нуля зноў, а затым зноў уверх. І цяпер ўвайсці ў сістэму. І цяпер я ўпэўнены, што гэта няправільна. І я мог бы зрабіць тры і чатыры, і я , Верагодна, будзе працягваць бачыць нулі. Дык дзе ж памылка? Адзін падзелены на 10 павінна быць 0,1. Хто-небудзь хоча прыняць ўдар на тое, што , Фундаментальная праблема складаецца? Да? Яны абодва цэлымі лікамі. Ну і што? Так што з аднаго дзеліцца на 10, гэта што я раблю ў арыфметыцы. І я атрымліваю 0,1. Да. І вось гэта сапраўды гэтым пытаннем. Калі вы прымаеце цэлы лік у кампутар і вы падзеліце яго на іншае цэлы лік, кампутара па змаўчанні будзе Выкажам здагадку, што вы хочаце цэлае. Праблема, хоць, вядома, што 0,1 не зьяўляецца цэлым лікам. Гэта рэальнае лік. І так, што кампутар робіць на па змаўчанні гэта проста выкідвае ўсё пасля коскі. Гэта не акругляе ўніз або ўверх, як такой. Ён проста выкідвае ўсе пасля коскі. І цяпер, калі мае сэнс. Таму што цяпер мы дакладна засталіся з нулём. Але пачакайце хвіліну. Я не бачу цэлалікавай нуля. Я на самой справе бачым 0,00. Так як я магу ўзгадніць гэта цяпер? Калі падзяліць на 10 роўна нулю, але я бачачы 0.00, дзе ён атрымлівае пераўтворана назад у рэальны нумар? Да. Менавіта так. Так што тут, у лінію пяць, калі я на самой справе захоўваць, што 0,1, які затым усекается да нуля, усярэдзіне паплаўка, гэта практычна эквівалентна захоўваць яго не ў выглядзе цэлага ліку, але, на самай справе, як паплавок. Больш за тое, я затым з дапамогай Е да відавочна надрукаваць гэты лік да двух знакаў пасля коскі, хоць там не можа на самай справе быць любы. Таму такога роду смокча, ці не так? Мабыць, вы не можаце зрабіць матэматыку, па меншай меры, на гэтым узроўні дакладнасці, у кампутары. Але, вядома, ёсць рашэнне. Што простым спосабам выправіць, можа быць, мы маглі б зрабіць, нават проста інтуітыўна тут, каб вырашыць гэтую праблему? Да? Павярніце цэлых лікаў у - так. Нават калі я не зусім упэўнены, што менавіта адбываецца на самай справе тут, калі ён прынцыпова звязана з гэтым як быццё цэлыя, добра, чаму б мне не робяць, што 10,0, што робіць гэты 1.0, захавайце файл. Дазвольце мне вярнуцца ўніз, каб ніжняя і перакампіляваць. Дазвольце мне цяпер паўтараецца. А там - Цяпер, у мяне ёсць адна дзесятая прадстаўлена ў выглядзе 0,10. Добра. Так што гэта не дрэнна. І я хацеў бы адзначыць адзін спосаб мы маглі б вырашыць гэтую. Дазвольце мне на самай справе адкат ў часе , Калі ў нас было гэта як адзін дзясятая хвіліну таму. І дазвольце мне ісці наперад і захавайце гэты файл як іншае імя файла, проста каб ёсць трохі кантрольна-прапускнога пункта. Так, каб была адна версія. А цяпер дазвольце мне ісці наперад і зрабіць яшчэ адну версію. Мы назавем гэтую версію два нуля індэксуецца. І я збіраюся зрабіць замест гэта - вы ведаеце, што? Даданне пункту нуля працуе ў гэтым выпадку. Але выкажам здагадку, што былі адной зменнай. Меркаваныя 10 былі зменнай. Іншымі словамі, выкажам здагадку, што я не мог Проста цяжка-кода 0,0 ў канцы гэтага арыфметычнага выразы. Ну, я магу зрабіць што-то у дужках называецца ліццё. Я магу кінуць, што цэлы лік 10 да плавае курсе, і я магу кінуць, што цэлае ў адным плаваюць, а таксама. Тады матэматыку, якая збіраецца быць зроблена эфектыўна 1,0 падзеленае на 10,0, выніку чаго адбываецца у F, як раней. Так што калі я перакампіляваць як зрабіць паплаўкі 2, і цяпер плавае 2, я атрымліваю такое ж адказаць, а таксама. Так што гэта даволі надуманы прыклад, Для вырашэння гэтай праблемы шляхам увядзення ліцця. Але ў цэлым, ліццё будзе моцная рэч, асабліва для Праблема ўсталяваць два ў тыднёвы тэрмін, калі Вы хочаце, каб пераўтварыць адзін тып дадзеных іншы, што ў канцы дня прадстаўлены такім жа чынам. У рэшце рэшт, кожны , Што мы казалі пра да гэтага часу з'яўляецца проста цэлымі пад капотам. Ці, калі гэта занадта нізкім узроўні для Вас, яны проста лічбы пад капотам. Нават знакаў, зноў жа, успомнім ад нулявой тыдні, ёсць колькасці, пад капотам. Які павінен сказаць, мы можам пераўтварыць паміж розныя тыпы нумароў, калі яны проста біт. Мы можам канвертаваць паміж нумарамі і літары, калі яны проста біт, і наадварот. І ліцця такім чынам, уяўляе сабой механізм у праграмаванні, якая дазваляе прымусова змяніць адзін тып дадзеных у іншы. На жаль, гэта не так проста, як я, магчыма, спадабалася. Я збіраюся вярнуцца ў паплаўках 1, які быў больш простым, проста з аднаго 0,0 дададзеныя да кожнага. І як хутка перападрыхтоўкі, Дазвольце мне ісці наперад і перакампіляваць гэта, пераканайцеся, паплаўкі 2 - На жаль, гэта зрабіць паплаўкі 1. А цяпер давайце запусцім паплаўкоў 1. А ў ніжняй, заўважыць што я сапраўды атрымаць 0,1. Такім чынам, праблема вырашана. Але не цяпер. Зараз я збіраюся атрымаць крыху цікава, і я збіраюся вярнуцца ў маю Е заяву і Скажыце, вы ведаеце, што? Я хацеў бы пацвердзіць, што гэта сапраўды адна дзесятая. І я збіраюся хочаце бачыць гэта ў , Скажам, да пяці знакаў пасля коскі. Гэта не праблема. Змяніць двух да пяці, Я перакампіляваць з макіяжам. Я перагрузілі яго як паплаўкі 1. Выглядае нядрэнна. Мае праверкі наяўнасці свядомасці можа скончыцца там, але Я атрымліваю трохі больш прыгод. Я збіраюся змяніць 0,5 да 0,10. Я хачу бачыць 10 лічбаў пасля дзесятковага знака. І я збіраюся ісці наперад і перакампіляваць гэта і перазапусціць плавае 1. Я накшталт шкадавання выпрабаваўшы гэтага далей, таму што мая матэматыка не так выправіць больш, здаецца. Але пачакайце, можа быць, гэта проста шчаслівая выпадковасць. Можа быць, кампутар працуе крыху дзіўна. Дазвольце мне ісці наперад і рабіць 20 знакаў пасля коскі і супакоіць сябе, што я ведаю, як зрабіць матэматыку. Я ведаю, як праграму. Зрабіць паплаўкі 1, перакампіляваць і чорт пабяры. Гэта сапраўды, сапраўды атрымліваю Недалёка ад знака. Дык што ж тут адбываецца? Інтуітыўна, зыходзячы з нашых здагадак раней аб памерах тыпаў дадзеных, , Што павінна адбывацца тут пад капотам? Да? Менавіта так. Калі вы хочаце, каб гэта вялікай дакладнасцю, і гэта па-чартоўску вялікай дакладнасцю - 20 чысла пасля коскі. Вы не можаце магчыма, уяўляюць адвольнае лік, калі ў вас адвольнае лік бітаў. Але мы не робім. Для паплаўком, у нас ёсць толькі 32 біта. Так, калі 32 біта можа быць перастаўляюцца спосабам - гэтак жа, як нашы людзі на, стадыі рукі уверх ці ўніз - у канчатковым ліку спосабамі, ёсць толькі канчатковае лік сапраўдных лікаў можна ўявіць з гэтымі бітамі. І так кампутар у рэшце рэшт будзе мець для пачаць скарачаць куты. Кампутар можа схаваць гэтыя дэталі ад нас трохі часу. Але калі мы пачынаем тыкаць на лічбы і глядзіць далей і далей на задняя колькасці ў цэлы лік, Затым мы пачынаем бачыць, што гэта фактычна апраксімацыі Ідэя адна дзесятая. І так атрымліваецца, на жаль, ёсць бясконцая колькасць лікаў мы не можам прадставіць менавіта ў кампутар, па меншай меры, з канчатковай Лік бітаў, канчатковае аб'ём аператыўнай памяці. Цяпер, на жаль, гэта часам мае рэальныя наступствы. Калі людзі не нарадуюцца гэтаму альбо роду, прымаюць як належнае той факт, , Што іх кампутар будзе рабіць тое, што яны кажуць гэта рабіць і ня зразумець гэтыя асноўныя Ўяўленне дэталі - якія, шчыра кажучы, у некаторых мовах схаваная ад карыстальніка, у адрозненне ад C - некаторыя дрэнныя рэчы могуць здарыцца. І тое, што я думаў, што мы робім як зрабіць крок назад. А гэта прыкладна восем-хвіліннае відэа. Гэта эфір некалькі гадоў таму, і гэта дае зірнуць на самай справе, што можа пайсці так, калі вы па-вартасці ацэняць гэтыя віды дэталяў ў самым усё занадта рэальным свеце. Калі б мы маглі прыглушыць святло на працягу некалькіх хвілін. Выступоўца 1: Вернемся да інжынернай бедстваў для сучасных цудаў. Кампутары - Мы ўсе прыйшлі да разумення Часта праблемы расчараванне якія ідуць з імі. Памылак, вірусаў і збояў праграмнага забеспячэння невялікія кошты, каб заплаціць за зручнасць. Але ў сферы высокіх тэхналогій і высакахуткасных ваенных і касмічных праграм прыкладанняў, найменшая праблема могуць быць павялічаны ў катастрофу. 4 Чэрвень 1996, навукоўцы гатовы запуску беспілотных ракет Ariane 5. На яго борце навуковых спадарожнікаў , Накіраваных на стварэнне, як менавіта Магнітнае поле Зямлі ўзаемадзейнічае з сонечнымі вятрамі. Ракета была пабудавана для еўрапейскіх Касмічнага агенцтва і стартаваў з яго аб'екта на ўзбярэжжы Французскай Гвіяны. JACK Ganssle: прыкладна ў 37 секунд у палёту, яны ўпершыню заўважылі нешта ідзе не так. Паваротных соплаў ў так, як яны сапраўды не павінны. Каля 40 секунд у палёце, выразна аўтамабіля трапіў у бяду. І вось, калі яны зрабілі рашэнне яго знішчыць. Афіцэр для забеспячэння бяспекі, з велізарная мужнасць, націснуў на кнопку, выбухнула ракета, перш чым можна стаць небяспекай для грамадскай бяспекі. Выступоўца 1: Гэта быў першы рэйс з Ariane 5, і яе разбурэнне адбыўся з-за памылкі убудаванага у праграмным забеспячэнні ракеты. JACK Ganssle: Праблема на Ariane аказалася тое, што колькасць , Якія патрабавалі 64 біт выказаць. І яны хацелі, каб пераўтварыць ў 16-бітнае лік. Яны выказалі здагадку, што колькасць ніколі не было будзе вельмі вялікі, што большасць гэтыя лічбы ў 64-бітным колькасці былі нулі. Яны мелі рацыі. Выступоўца 1: няздольнасць аднаго праграмнага забеспячэння Праграма прыняць выгляд нумар, які генеруецца іншы быў у корані недастатковасці. Распрацоўка праграмнага забеспячэння стала вельмі затратная частка новай тэхналогіі. Ariane 4 ракеты былі вельмі паспяховым, так што вялікая частка праграмнага забеспячэння створаных для яго быў таксама выкарыстоўваецца ў Ariane 5. Філіп Койла: Асноўная праблема была што Ariane 5 быў хутчэй, паскорыўся хутчэй. І праграмнае забеспячэнне не было даводзіцца за гэта. Выступоўца 1: Разбурэнне ракеты была велізарная фінансавая катастрофа, Усё з-за памылкі праграмнага забеспячэння хвіліну. Але гэта было не ў першы раз дадзеныя праблемы пераўтварэнні была ахоплена сучаснымі ракетнай тэхнікі. JACK Ganssle: У 1991 годзе, з пачаткам першай вайны ў Персідскім заліве, Patriot выпрабаваў ракету падобнага роду праблема колькасць пераходаў. У выніку, 28 амерыканскіх салдат забітыя і каля 100 параненыя калі Patriot, якая павінна была для абароны ад ўваходзяць Скад, асечку ракетай. Выступоўца 1: Калі Ірак уварваўся ў Кувейт і Амерыка развязала Бура ў пустыні пачатку 1991 года, батарэі ракет Patriot былі разгорнутыя для абароны Саудаўскай Аравіі і Ізраіль ад ірацкіх Scud ракетныя ўдары. Patriot з'яўляецца амерыканскай сярэдняй далёкасці паверхню-паветра сістэма вытворчасці Кампанія Raytheon. Т. пасталы: памер Patriot перахопнікаў сябе прыкладна 20 футаў у даўжыню. І ён важыць каля 2000 фунтаў. І нясе ў сабе боегалоўку каля - Я думаю, гэта прыкладна 150 фунтаў. І боегалоўка сама фугасных які мае Фрагменты вакол яго. Кажух боегалоўкі прызначаны дзейнічаць, як карцеч. Выступоўца 1: ракеты ажыццяўляюцца чатыры за кантэйнер і перавозіцца на паўпрычэпе. Філіп Койла: Patriot супрацьракетных Сістэма вернецца ў не менш за 20 гадоў. Першапачаткова ён быў распрацаваны ў якасці ракеты СПА збіваць варожыя самалёты. У першай вайны ў Персідскім заліве, калі гэтая вайна прыйшлі разам, арміі хацеў выкарыстоўваць яго збіваць Скад, а ня самалёты. Іракскія ВПС не было столькі праблема. Але армія турбаваўся пра Скад. І такім чынам яны паспрабавалі пераехаць Patriot. Выступоўца 1: Перахоп ракету праціўніка Падарожжы ў Машыне было пяць будзе досыць складанай задачай. Але калі Patriot быў дастаўлены ў службы, з войска не было вядома аб Іракскія мадыфікацыі, якія зрабілі свой Скад амаль немагчыма патрапіць. Т. пасталы: Што здарылася з'яўляецца Скад, якія былі У бліжэйшыя былі нестабільныя. Яны былі біцця. Прычынай гэтага было іракцаў, у Для таго каб атрымаць 600 кіламетраў ад 300-кіламетровай далёкасці, узяў вага з пярэдняй боегалоўку. Яны зрабілі боегалоўку лягчэй. Так што цяпер спрабуе Patriot прыйсці на Скад. І большую частку часу, пераважная Вялікую частку часу, было б проста лётаць на Скад. Выступоўца 1: Як толькі сістэма Patriot аператары ўсвядомілі Patriot прапусціў сваёй мэты, яны ўзарвалі патрыётаў боегалоўку, каб пазбегнуць магчымых ахвяр, калі яно было дазволена падаць на зямлю. Т. пасталы: Гэта было тое, што большасць людзі бачылі, як вялікія вогненныя шары ў небе і не зразумеў, як перахапляе Скад боегаловак. Выступоўца 1: Хоць у начным небе Патрыётаў, здавалася, былі паспяхова знішчаючы Скад, у Дахрана ёсць не магло быць памылкай аб яго прадукцыйнасць. Там, радыёлакацыйная сістэма Patriot страцілі Ці не адсочваць ўваходныя і ніколі Скад запусціў З прычыны праграмнага хіба. Гэта былі ізраільцяне, якія першымі адкрылі што чым даўжэй сістэма ішоў, тым больш часу разыходжанне стаў у сувязі з гадзінамі убудаваных у кампутар сістэмы. JACK Ganssle: за два тыдні да Трагедыя ў Дахране, ізраільцяне даведзены да ведама Міністэрства абароны што сістэма губляла часу. Прыкладна праз восем гадзін працы, яны заўважылі, што сістэма становіцца прыкметна менш дакладным. Міністэрства абароны адказаў, кажу ўсім батарэй Patriot не выходзіць з сістэмы на працягу доўгага часу. Яны ніколі не казалі, што доўгі час быў. Восем гадзін? 10:00? 1000 гадзін? Ніхто не ведаў. Выступоўца 1: Patriot размешчаны батарэі у казармах на Дахрана і яе недахопы ўнутраныя гадзіны былі пра больш за 100 гадзін у ноч на 25 лютага. JACK Ganssle: Гэта час, каб адсочваць дакладнасць каля адной дзесятай долі секунды. Зараз, дзесятая доля секунды з'яўляецца цікавае лік, таму што яно не можа быць выражаны ў двайковым дакладна, што азначае яна не можа быць выяўлена менавіта ў любога сучаснага лічбавага кампутара. Цяжка паверыць, але выкарыстоўваць гэта ў якасці прыкладу. Давайце колькасці траціну. Траціна не можа быць выказана у дзесятковай дакладна. Траціна 0,333 збіраецца на бясконцасці. Там няма спосабу зрабіць гэта з абсалютная дакладнасць у дзесятковай сістэме. Гэта дакладна такая ж праблема што адбывалася ў патрыёта. Чым даўжэй сістэма працавала, горшыя памылкі часу стаў. Выступоўца 1: Пасля 100 гадзін працы, памылкі ў часе толькі каля адной траціны секунды. Але з пункту гледжання арыентацыі ракеты Падарожжы ў Машыне пяць, гэта прывяло да памылкі сачэння больш за 600 метраў. Было б фатальнай памылкай для салдаты на Дахрана. Т. пасталы: Справа ў тым, Скад запуск быў знойдзены рана папярэджанне спадарожнікаў. І яны ведалі, што Скад ішоў у іх агульным кірунку. Яны не ведалі, адкуль ён зыходзіць. Выступоўца 1: Цяпер настаў час для радарных кампанентам сістэмы Patriot абароны Дахрана, каб знайсці і захаваць адсочваць кіраванай ракеты праціўніка. JACK Ganssle: радар быў вельмі разумным. Было б фактычна адсочваць становішча Scud, а затым прадказаць, дзе яна , Верагодна, будзе ў наступны раз Радар накіраваў імпульсны выхад. , Які быў названы дыяпазон варот. Т. пасталы: Тады, як толькі Patriot вырашае, прайшло дастаткова часу, каб пайсці назад і праверыць наступнае месца для гэта выяўленага аб'екта, ўстае. Таму, калі гаворка вярнулася да няправільнага месца, ён затым не бачыць аб'ект. І яна вырашыць, што не было ніякай аб'ект, гэта была ілжывая выяўлення і Кроплі дарожкі. Выступоўца 1: ўваходныя Скад зніклі На экране радара, і секунд праз гэта хлопнула у казарму. Скад загінулі 28 і быў апошнім звольнілі падчас першай вайны ў Персідскім заліве. Трагічна, што абноўленае праграмнае забеспячэнне прыбытку Дахрана на наступны дзень. Праграмнае забеспячэнне недахоп быў усталяваны, закрыцця адной кіраўніка ў неспакойным Гісторыя Пэтрыёт. Patriot на самой справе скарачэнне для адсочвання фазіраванай кратамі Перахоп мэты. David J малая: Добра, выцвярэжвае прыкладам таго, каб быць упэўненым. І, на шчасце, гэтыя нізкім узроўні памылкі не з'яўляюцца чым-тое, што мы будзем звычайна павінны шанаваць, вядома, Не было з некаторымі з нашых ранняя з праграм. Хутчэй за ўсё, большасць памылак вы будзеце Сустрэча будзе лагічна ў прыродзе, сінтаксічных ў прыродзе ў выніку чаго Код проста не працуе правільна. І вы ведаеце, гэта даволі хутка. Але асабліва, калі мы дабіраемся да канцы семестра, ён збіраецца усё больш і больш магчымасць сапраўды задумацца аб дызайне з вашых праграм і асноўныя прадстаўленне там таксама дадзеных. Напрыклад, давайце пазнаёмімся з MySQL, які з'яўляецца папулярным кампанентам Database Engine , Якія можна выкарыстоўваць з вэб-сайты для захоўваць дадзеныя на задняй часткі. І вы будзеце мець, каб пачаць вырашаць у канцы семестра не толькі тое, тыпаў дадзеных ўздоўж гэтых ліній выкарыстоўваць але дакладна, колькі біт у выкарыстанні, ці сапраўды вы хочаце захоўваць даты як дата і час, як раз, а таксама такія рэчы, як вялікі Вы хочаце унікальныя ідэнтыфікатары, каб быць, скажам, для карыстальнікаў ў базе дадзеных. На самай справе, калі некаторыя з вас былі Facebook прыходзіцца даволі доўга, і вы ведаеце, як атрымаць доступ У карыстацкі ID - якая часам з'яўляецца ў вашай URL профілю, калі вы не абралі Псеўданім для URL, або калі вы Facebook, якія выкарыстоўваюцца Графік API, агульнадаступных API з дапамогай якога вы Facebook можа папрасіць і для сырых дадзеных - Вы можаце ўбачыць, што вашыя лікавы ідэнтыфікатар. І некалькі гадоў таму, па сутнасці Facebook прыйшлося змяніць ад выкарыстання эквівалент да цэлыя выкарыстанні доўгіх доўга, таму што з цягам часу, як карыстальнікі прыходзяць і сыходзяць, і стварыць шмат рахункаў і падробленыя рахункі, нават яны вельмі лёгка змаглі вычарпаць нешта накшталт 4 млрд. магчымае значэнне, як Int. Так больш на тыя віды пытанняў ў будучыні, а таксама. Добра, так, каб было ліццё. Гэта была недакладнасць. Некалькі хуткіх аб'яваў. Так раздзелах фармальна пачаць маючы адбыцца Нядзеля, панядзелак, аўторак. Вы пачуеце па электроннай пошце ў канцы гэтага тыдня Што тычыцца вашага прызначэнне раздзелах. І вы таксама будзеце тут у гэтай кропцы як змяніць свой раздзел, калі вашы графіка ў цяперашні час змянілася ці ваш Ўзровень камфорту ў цяперашні час змянілася. Між тым P-набор аднаго і хакерскіх з'яўляюцца адным з-за гэтага чацвярга з магчымасцю падоўжыць гэты тэрмін на Спецыфікацыі па пятніцу ў тыповым спосабам. Зразумейце, што ў камплекце з праблемай набор спецыфікацый Інструкцыі па як выкарыстоўваць прыбор CS50, марка, а таксама некаторыя канкрэтныя інструменты CS50 як стыль 50, які можа даць вам з зваротнай сувяззю дынамічна якасць вашага кода стылі, а таксама праверыць 50, які можа даць вам дынамічнай зваротнай сувязі, каб вашыя Код карэктнасці. Прабач, што мы ўсё яшчэ прасавальныя з некалькі завес з праверкай 50. Некаторыя з вашых аднакласнікаў, якія сапраўды пачыналі каля 4 раніцы ў ноч на пятніцу, калі спецыфікацыі падышоў заўважылі з тых часоў некалькі памылак, якія мы працуем да канца, і прабачэнні для тых, хто выпрабаваў празмерных расчараванняў. Няспраўнасць заключаецца ў шахту. Але мы будзем сачыць за CS50 абмеркаваць, што, калі будзе вырашана. Так што словы аб сабе балы. Так што гэта будзе праз тыдзень ці два, перш чым пачаць, каб атрымаць зваротную сувязь на хатніх заданняў таму што вы яшчэ не маюць выкладанне хлопец. І нават тады, мы пачнем ацэньваць Праблема C ставіць перад намі вярнуцца назад і ацаніць драпін так што вы атрымліваеце больш адпаведнага зваротная сувязь хутчэй. Але ў цэлым у праграме, CS50 Праблема наборы ацэньваліся па даўжыні пасля чатырох восяў - сферы, правільнасць, дызайн і стыль. Вобласць будзе лік звычайна ад нуля да пяці, што захоплівае колькі частка, якую Вы адкусілі. Як правіла, вы хочаце, каб гэта было пяць. Вы па меншай меры, паспрабаваў усё. І заўважылі, што гэта множніка так што робіць толькі частка Праблема набору ня лепшая стратэгія. Між тым, больш відавочным з'яўляецца Важнасць правільнасці - проста ваша праграма з правільнымі ў дачыненні да спецыфікацыі? Гэта ўзважаны наўмысна больш ступені, чым дзве іншыя восі з дапамогай у тры разы, таму што мы прызнаем , Якія звычайна вы збіраецеся выдаткаваць нашмат больш часу, каб ганяцца за некаторыя памылкі, Прымусьце ваш код працаваць, то вы водступаў і выбраўшы адпаведныя імёны зменных і як, які на другім канцы спектру стылю. Гэта не значыць, што стыль не важна, і мы будзем прапаведаваць яго больш час як у лекцыях і ў секцыях. Стыль ставіцца да эстэтыкі вашага кода. Вы выбралі добра названыя зменныя , Якія з'яўляюцца кароткімі, але некалькі апісальныя? Ці з'яўляецца ваш код водступам, як вы бачылі ў лекцыю і ў адпаведнасці у стылі 50? Нарэшце з'яўляецца праектаванне правы там у сярэдзіне. Дызайн, тым цяжэй адну, каб змясціць пальцам, таму што гэта значна больш суб'ектыўна. Але гэта, бадай, самы важны з трох восяў з пункту гледжання педагагічнай кошту з цягам часу і што гэта будзе навучанне стыпендыята магчымасць даць Вам якасныя зваротнай сувязі. Сапраўды, у CS50, хоць у нас ёсць гэтыя формулы і ацэнкі, у канцы дня гэта цалкам свядома вельмі маленькія вядра - кропка ад нуля да трох і нулявой і пяць. Мы не спрабуем прыцягнуць вельмі грубых ліній Праблема паміж наборамі ці паміж студэнты а засяродзіцца столькі, колькі мы можам на якасныя, звычайны ліст зваротнай сувязі, альбо тыпізаваных або вуснага ад Вашай таварышаў навучання, Вы даведаецеся дастаткова добра. Але ў агульным, тыя вагі што розныя восі будуць мець. Між тым, таксама, гэта варта мець на ўвазе, што вы не павінны лічыць, што тры з пяці ўяўляе сабой 60% і Таму прыкладна няўдачу. Тры свядома прызначаецца, каб быць роду сярэдзіне шляху добра. Калі вы атрымліваеце ў тройках пачатку семестра, гэта сапраўды прызначана, каб быць добрым месца, каб пачаць. Калі вы атрымліваеце двойку, кірмашах, ёсць безумоўна, некаторыя працы, каб заплаціць крыху больш увагі, каб скарыстацца раздзелаў і працоўны час. Калі вы атрымліваеце карачках і пяцёркамі, выдатна. Але на самай справе, мы спадзяемся ўбачыць траекторыі Сярод студэнтаў - вельмі індывідуальна на аднаго студэнта, але пачынаючы семестра тут, у родзе ад двух да трох дыяпазону, але канчатак тут, ў 4:56 дыяпазоне. Гэта тое, што мы на самай справе шукаем. І мы мець на ўвазе, што дэльта Вы паказваеце паміж нулём тыдзень і тыдзень 12, калі я раблю класах. Гэта не мае значэння для нас зусім так, як Вы справядлівым ў пачатку, калі ваш Траекторыя сапраўды уверх і моцным. Акадэмічнай сумленнасці - так што дазвольце мне надзел больш сур'ёзным голасам на імгненне. Так што гэты курс мае гонар пасылаючы больш студэнтаў, чым любы іншы ў гісторыі, Дошка аб'яваў, я веру. У нас ёсць накшталт страціў рахунак у гэтым кропкі як часта гэта адбываецца. І гэта не таму, што студэнты ў 50 носяць больш несумленнымі, чым іх аднакласнікаў ў іншых месцах. Але разумееце, і тое, што мы вельмі добрыя пры выяўленні такога роду рэчы. І гэта тое перавага, што інфарматыка клас, у якім мы можа і мы параўнаць усе студэнты Праблема ўстанаўлівае парамі супраць усіх адным, а не толькі ў гэтым годзе Але ўсе папярэднія гады. У нас ёсць магчымасць, як студэнты ў клас, Google і знайсці код на сайтах, як GitHub і дыскусійныя форумы. Ёсць абсалютна рашэння CS50 аўтара Р-мностваў плаваюць вакол там. Але калі вы можаце знайсці іх, мы можам знайсці іх. І ўсё гэта вельмі аўтаматызаваны і лёгка, і сумныя для нас знайсці. Але я хачу падкрэсліць таксама, што акадэмічнай палітыкі сумленнасці курса з'яўляецца вельмі павінна быць вельмі шмат супрацьлегласцю гэтага духу. Сапраўды, у гэтым годзе мы перафразаваць рэчы у навучальным плане, каб быць гэтым, кропка кропка кропка, з больш падрабязна у навучальным плане. Але галоўнай тэмай у ходзе самай справе, каб быць разумным. Мы прызнаем, што існуе значная колькасць педагагічных значэнне ў супрацоўнічаюць, у некаторай ступені, з аднакласнікамі, у якім вы двух ці трох ці вы вам больш з'яўляюцца стоячы на ​​белай дошцы дошкай, так кажуць, вашы ідэі - выпісваючы псевдокод у малюнках, дыяграм, што павінна быць, калі Марыё Вы павінны былі напісаць яго першым у псевдокоде. Якой павінна быць прагным алгарытмам - як ён павінен паводзіць сябе ў Праблема зараз адна? І так разумею, што паводзіны што мы заахвочваем вельмі шмат у гэтым кірунку. А ў праграме, вы ўбачыце цэлую кучу пад кулямі разумныя катэгорыю і не разумна катэгорыя, якая дапамагае нам дапамагчы Вы абгарнуць ваш розум вакол, дзе мы намаляваць гэтую лінію. І наогул, годны правіла тым, што калі вы змагаецеся, каб вырашыць нейкая памылка і вашага сябра або аднакласніка сядзіць побач з вамі, гэта разумнае для вас, каб паказаць яму ці ёй код і сказаць: эй, вы можаце дапамагчы мне зразумець, што адбываецца тут не так? Мы звычайна не ахопліваюць супрацьлеглым баку. Гэта не правільны адказ для вашых сябра або аднакласніка тут, каб сказаць, о, проста паглядзіце на мае і фігуры яго ад гэтага. Гэта з'яўляецца свайго роду неабгрунтаваным. Але маючы іншага, іншы мозг, яшчэ адна пара вачэй глядзяць на экране ці глядзелі ваш код і кажаце, вы ўпэўненыя, што хочаце мець завесы тут? Ці Вы ўпэўнены, што хочаце гэтая кропка з коскі тут? Або аб, гэта паведамленне пра памылку азначае гэта. Гэта вельмі разумна і заахвочваецца паводзіны. Выпадках, да якіх я меў на ўвазе раней зводзяцца да таго, калі студэнты позна ўвечары робіць недальнабачнасці рашэнні і па электроннай пошце свой код каму-небудзь ці проста кажу, тут, гэта ў Dropbox або Трошкі позна ўвечары. І таму я заклікаю і прашу вас, Калі ў вас ёсць тых непазбежных моманты стрэсу, вы натыкаючыся супраць тэрміну, у вас няма канца дзень, так як гэта ўжо ў пятніцу на што кропкі, электроннай пошце кіраўнікі курсу або сябе непасрэдна. Скажам, слухай, я ў сваім пераломным момантам тут. Давайце весці размову і зразумець гэта. Звяртаючыся да сеткі ці некаторых іншых ня разумнае паводзіны ніколі не бывае раствора і занадта шмат вашых аднакласнікі ўжо не тут, на кампуса з-за гэтай недальнабачнасці. Але гэта вельмі лёгка абыйсці гэтую лінію. А вось маленькая малюнак, каб падбадзёрыць Вас з Reddit, так што зараз усё будзе ОК. Так хуткае рэзюмэ, то, , Дзе мы спыніліся. Так на мінулым тыдні, нагадаем, што мы ўводзім умовах, а не ў драпін але ў C гэтага часу. І быў некаторы новы сінтаксіс, але Сапраўды ніякія новыя ідэі як такой. У нас былі лагічныя выразы, што мы маглі ці разам з двума вертыкальнымі барах або і разам з двума амперсанда, кажучы, што як левая і правы павінны быць праўдзівымі для гэтага выканаць. Тады ў нас былі выключальнікі, якія мы глядзелі ў каротка, але я прапаную сапраўды проста розны сінтаксіс для дасягнення такія ж мэты, калі вы ведаеце, у загадзя, што вашыя выпадкі будуць. Мы глядзелі на завесах. Цыкл, можа быць, найбольш распаўсюджаным, або па крайняй меры адзін, што людзі звычайна дасягаюць за інстынктыўна. Хоць гэта выглядае трохі загадкава, вы ўбачыце шмат, шмат прыкладаў гэтага ў хуткім часе, у вас ёсць ўжо ў канцы мінулага тыдня. У той час як завесы могуць аналагічна дасягнуць таго ж. Але калі вы хочаце зрабіць якія-небудзь прырашчэння або абнаўленне значэння зменнай, вы павінны рабіць гэта больш, чым ўручную цыкл да дазваляе. А тут яшчэ рабіць-то час як цыкл, што дазваляе нам зрабіць што-небудзь у Хоць бы раз у той час нешта астатняе з'яўляецца ісцінай. І гэта асабліва добра для праграм або для гульняў, дзе вы хочаце прапанаваць карыстачу нешта па меншай меры, адзін раз. І потым, калі ён ці яна не будзе супрацоўнічаць, Вы можаце зрабіць гэта зноў і зноў. З зменнымі, паміж тым, мы былі ліній кода, як гэта, якія маглі б дзве прамыя. Можна абвясціць цэлалікавай называецца лічыльнік, кропкі з коскі. Ці вы можаце проста аб'явіць і вызначыць яго, так бы мовіць. Дайце яму значэнне ў той жа час. І тады, нарэшце, мы казалі пра функцыі. І гэта быў добры прыклад у тым сэнсе, што яна ілюструе два тыпу функцый. Адным з іх з'яўляецца GetString (), які, зноў жа, прымае радок ад карыстальніка. Але GetString () з'яўляецца збольшага цікава, пастолькі, паколькі мы выкарыстоўвалі яго, таму што мы заўсёды выкарыстоўвалі яго з нешта на левай баку Знак роўнасці. Гэта значыць, што GetString () вяртае значэнне. Ён вяртае, вядома, радкі. А потым на левы бок, мы простага захавання гэтага радка ўнутры зменная з імем імя. Гэта зусім іншае, у пэўным сэнсе, ад Е Е, таму што, па меншай меры ў нашым Выкарыстанне тут, нічога не вяртае. Як у баку, яна вяртае нешта. Мы проста не хвалюе, што гэта такое. Але ў ім ёсць тое, што называецца пабочны эфект. І што ж гэта пабочны эфект у кожным выпадку мы бачылі да гэтага часу? Што рабіць Е? Ён друкуе нешта на экран, дысплеяў тэкст, лік ці нешта на экране. І гэта толькі лічыцца пабочным эфектам , Таму што гэта на самай справе не ўручаць яго назад да мяне. Гэта не адказ ўнутры чорны скрыню, які я магу пасля гэтага дасягнуць у і захапіць. Гэта проста робіць гэта сам па сабе, значна як Колтон быў падлучаны да гэтага Чорны скрыню на мінулым тыдні, і ён так ці інакш чароўным быў чарцёж на дошцы без мяне на самой справе ўдзельнічае. Гэта было б пабочны эфект. Але калі я фактычна павінен быў сыходзіць у тут і казаць, ой, вось радкі ад карыстальніка, які б быць вяртаецца значэння. І да гэтага часу мы выкарыстоўвалі толькі функцыі што іншыя людзі напісалі. Але мы можам на самай справе гэтыя рэчы самі. Так што я збіраюся ісці ў CS50 прыбор зноў. Дазвольце мне зачыніць ўкладку, што мы былі адкрытыя хвіліну таму. І дазвольце мне ісці наперад і стварыць новы файл. І я збіраюся ісці наперад і называюць яго адным positive.c. Таму я хачу зрабіць што-то з станоўчыя чысла тут. Так што я збіраюся ісці наперад і рабіць Int - На жаль - # Уключыць. Давайце не будзем рабіць, што ж памылка, як раней. Int асноўных (несапраўднымі), якая адкрывае фігурнай дужкі, закрытай фігурнай дужкай. А цяпер я хачу зрабіць наступнае. Я хачу напісаць праграму, якая настойвае на тым, што карыстальнік дае мне станоўчае цэлае лік. Дык не GetPositiveInt функцыі CS50 ў бібліятэцы. Там толькі GetInt (). Але гэта нармальна, таму што ў мяне ёсць канструкцый, з якімі я магу накласці трохі больш абмежаванне на гэта значэнне. Я мог бы зрабіць нешта накшталт гэтага. Так Int N - і калі вы набіраю тэкст, проста разумею, Я збіраюся вярнуцца і змяніць некаторыя рэчы ў дадзены момант - так Int N роўная GetInt (). І, што збіраецца паставіць Цэлалікавай ўнутры н. І дазвольце мне быць, больш наглядны. Дазвольце мне сказаць нешта накшталт: я патрабую, каб Вы дасце мне станоўчае цэлае лік. Добра. Так што проста трохі інструкцый. А зараз тое, што я магу зрабіць? Ну, я ўжо ведаю, з майго просты умоў або галінак, гэтак жа, як я меў на нуля, я не мог сказаць нешта напрыклад, калі п менш або роўная нуля, то я хачу зрабіць што-то падабаецца, гэта не станоўча. А потым я мог зрабіць - Добра, але я сапраўды хачу атрымаць, што Int. Так што я мог падняцца тут, і я мог збольшага копіі гэтага і гэтага абзаца. І потым, ОК. Такім чынам, калі N менш або роўная нуля гэта зрабіць. Цяпер, што калі карыстальнік не супрацоўнічаць? Ну, тады я збіраюся пазычаць гэта тут. І тады я іду сюды і тут і тут. Так што гэта відавочна не рашэнне, ці не так? Таму што няма канца гэтаму не відаць. Калі я хачу запатрабаваць, каб карыстальнік дае мяне станоўчае цэлае лік, я магу на самой справе атрымаць Int. Затым я магу праверыць, што Int. Але тады я хачу праверыць яго яшчэ раз і праверыць яго яшчэ раз і праверыць яго яшчэ раз. Так, відавочна, што з'яўляецца лепшым пабудаваць, выкарыстоўваюць тут? Добра, нейкі цыкл. Так што я збіраюся пазбавіцца амаль усё гэта. І я хачу, каб гэтая Int хоць бы раз. Так што я збіраюся сказаць, робяць - і я вярнуся да а праз хвіліну - Цяпер, што рабіць? Я збіраюся зрабіць Int N атрымлівае GetInt (). ОК. Так што гэта даволі добра. І цяпер, як часта робяць Я хачу гэта зрабіць? Дазвольце мне сказаць Е ўнутры цыклу так што я магу патрабаваць зноў і зноў, у выпадку неабходнасці. І што ж я хачу, каб гэта а ўмова рабіць? Я хачу працягваць рабіць гэта а тое, што гэта мае месца? Да. N менш або роўна нулю. Так ужо, у нас значна прыбралі гэты код ўверх. Мы запазычылі вельмі простая канструкцыя - зрабі той час як цыкл. Я скраў толькі важныя лініі кода, які я пачала капіявання і ўстаўка, якая не была мудрым. І вось цяпер я збіраюся на самай справе устаўце гэта тут і проста зрабіць гэта адзін раз. І што цяпер я хачу зрабіць на У самым канцы гэтай праграмы? Я проста скажу, што-то простае падабаецца, дзякуй за - і Я зраблю% я для Int - зваротны слеш п, коска, а затым падключыце N, кропка з коскі. Добра. Такім чынам, давайце паглядзім, што адбываецца цяпер калі я запускаю гэтую праграму. Я збіраюся ісці наперад і сапраўды робяць станоўчыя. Чорт. Некалькі памылак. Такім чынам, дазвольце мне пракручваць наперад да першага. Не працаваць праз іх у зваротным кірунку. Працаваць праз іх зверху ўніз каб яны каскадам і толькі адно памыляцца. Няяўная дэкларацыя Функцыя GetInt (). Да. Так было не дастаткова. Я як бы зрабіў тую ж памылку, але крыху па-іншаму ў гэты раз. Мне трэба не толькі ўключаць, але stdio.h Таксама cs50.h, які ўключае ў сябе так званых дэкларацый атрымаць Інтэрнэшнл, якая навучыць прыбора або вучыць З таго, што GetInt () ёсць. Такім чынам, дазвольце мне захаваць. Я збіраюся ігнараваць іншыя памылкі таму што я збіраюся спадзявацца, што яны ці інакш звязаны з памылкай Я ўжо зафіксавана. Такім чынам, дазвольце мне ісці наперад і перакампіляваць з прымаць пазітыўныя, Enter. Чорт. Тры памылкі, да гэтага часу. Дазвольце мне пракруткі уверх да першага. Нявыкарыстаныя зменнай N. Мы не бачылі гэта раней. І гэта таксама, трохі загадкавым. Гэта вывад кампілятара. І што, што выдзеленую радок там - positive.c: 09:13 - кажа, ён кажа на лініі дзевяць з positive.c, на 13-м характару, 13. Калонцы, вы зрабілі гэтую памылку. І ў прыватнасці, гэта кажа Мне невыкарыстоўваемых зменных N. Такім чынам, давайце паглядзім - лінія дзевяць. Я выкарыстоўваю N ў тым сэнсе, што Я даю яму значэнне. Але тое, што кампілятар не падабаецца, што я не здавалася б, яго выкарыстаннем. Але пачакайце, я выкарыстоўваю яго. У радку 11, я выкарыстоўваю яго тут. Але калі я пракруціць ўніз далейшага на positive.c: 11 - таму на лініі 11, 12 знакаў, кампілятар кажа мне, выкарыстанне неабвешчанага ідэнтыфікатар н. Так неаб'яўленай азначае, што я не пазначана яго ў якасці Зменная з тыпам дадзеных. Але пачакайце хвіліну. Я зрабіў менавіта тое, што ў адпаведнасці дзевяць. Так што хто-то сапраўды блытаюць тут. Гэта альбо я, альбо таму, што кампілятар ў адпаведнасці дзевяць, зноў жа, я абвяшчаю Int N, і я прысвоіўшы яму вярнуць значэнне GetInt (). Тады я выкарыстоўваю гэтую зменную N ў адпаведнасці 11 і праверкі, калі яго значэнне менш ці роўным нулю. Але гэта мабыць, дрэнна і зламаныя чаму? Скажы гэта яшчэ раз? Ах, я павінен аб'явіць да N ўваходу ў цыкл. Але чаму? Я маю на ўвазе, мы проста прапанавалі трохі назад, што гэта выдатна, каб абвясціць зменныя усё на адной лініі, а затым прысвоіць ім нейкае значэнне. Глабальная зменная - Вернемся да гэтай ідэі праз хвіліну. Чаму вы хочаце, каб я паклаў яго па-за цыкла? Так і ёсць. Менавіта так. Так, хоць, некалькі парадаксальна, дазвольце мне падвесці вынік. Пры аб'яўленні N ўнутры з блок DO там - спецыяльна ўнутры гэтыя фігурныя дужкі - гэтая пераменная N мае тое, што называецца вобласцю - не звязаных з нашай скоринговой сістэмы ў вядома, - але ёсць сферы, што гэта абмяжоўваецца тымі фігурныя дужкі. Іншымі словамі, звычайна пры аб'яўленні зменную ўнутры набору фігурныя дужкі, то гэтая пераменная існуе толькі Усярэдзіне гэтыя фігурныя дужкі. Такім чынам, што логіка адна, хоць Я абвясціў N ў адпаведнасці дзевяць, ён практычна знікае з сферы, знікае з памяці, так бы мовіць, да таго часу, я ўдарыў лініі 11. Так як лінія 11, на жаль, за выключэннем тых, фігурныя дужкі. Так што я на жаль, не можаце выправіць гэта, вяртаюся да таго, што я зрабіў гэта раней. Вы маглі б спачатку зрабіць гэта. Але тое, што ты зараз не рабіць цыклічна? Вы, відавочна, не атрымліваюць цэлалікавай цыклічна. Таму мы можам выйсці GetInt (), і мы павінны пакінуць GetInt () усярэдзіне цыкл, паколькі гэта тое, што мы хочам прыставаць у карыстальніка зноў і зноў. Але гэта дастаткова, каб пайсці да лініі, скажам, шэсць. Int N, кропка з коскі. Не давайце яму значэнне яшчэ і таму, Вам не трэба, каб толькі пакуль. Але цяпер тут, заўважце - гэта было б вельмі лёгка памылкай. Я не хачу, каб цень майго папярэдняга Дэкларацыя N. Я хачу выкарыстоўваць N, што на самай справе існуе. І вось цяпер у радку 10, Даручаю п значэнне. Але ў адпаведнасці шэсць, я заяўляю н. І так я магу, ці я магу не выкарыстоўваць яго ў лініі 12 цяпер? Я магу, таму што, паміж якімі фігурныя брэкетаў п абвешчаны цяпер? Адзін тут, на лініі пяць. Каб тут, на адной лініі 14. Так што калі я зараз паменшыць маштаб, захаваць гэты файл, перайдзіце назад у і запусціць прымаць пазітыўныя, гэта складзены гэты раз. Так што гэта ўжо прагрэс. Slash. . / Станоўчым, Enter. Я патрабую, каб вы даць мне цэлае станоўчае лік. Адмоўныя 1. Адмоўныя 2. Адмоўныя 3. Нуль. Адзін. І дзякуй за адзін тое, што цяпер друкуецца. Дазвольце мне паспрабаваць нешта яшчэ, з цікаўнасці. Мне кажуць, каб ўвесці цэлы лік. Але што, калі я замест гэтага ўвесці ягня? Так што вы зараз бачыце іншае запрашэнне - паўторыце спробу. Але нідзе ў маім кодзе я напісала паўтарыць спробу. Дык дзе, па-відаць, гэта паўтор падкажыце адкуль, б вы сказалі? Так, ад GetInt () сама. Так што адна з рэчаў, персанал робіць CS50 аўтара для вас, па меншай меры ў першыя некалькі тыдня, як мы напісалі некаторы колькасць праверкі памылак, каб гарантаваць, што калі вы называеце GetInt (), вы па крайняй меры вярнуцца цэлалікавай ад карыстальніка. Вы не будзеце атрымліваць радок. Вы не будзеце атрымліваць знакаў. Вы не будзеце атрымліваць тое, зусім іншае. Вы атрымаеце Int. Цяпер яна не можа быць станоўчым. Яно не можа быць адмоўным. Мы не даем ніякіх гарантый, што вакол. Але мы будзем прыставаць да карыстача паспрабаваць яшчэ раз, паўтору, не паўтарыць, пакуль ён або яна на самай справе супрацоўнічае. Аналагічна, калі я раблю 1,23, , Які не зьяўляецца Int. Але калі я ўвесці, скажам, 50, то дае мне значэнне, якое я хацеў. Добра. Так не дрэнна. Усе пытанні аб тым, што мы толькі што зрабілі? Ключ вынас быцця, каб быць ясным, а не столькі цыкл, які мы бачылі Перад хоць у нас ёсць на самай справе не выкарыстоўвалі яго, але пытанне аб сферы, дзе зменных можа быць можа быць выкарыстана толькі у некаторых названай галіне. Добра, дазвольце мне звярнуцца да прапановы вы зрабілі раней, што з глабальнай зменнай. Як у баку, то атрымліваецца, што іншы Рашэнне гэтай праблемы, але звычайна няправільныя рашэнні або дрэнна спраектаваныя рашэннем з'яўляецца абвясціць зменную як тое, што называецца глабальнай зменнай. Цяпер я збольшага парушае маё вызначэнне аб'ёмаў, таму што ёсць Няма фігурныя дужкі на самым версе і ў самым нізе файла. Але наступствы, што з'яўляецца тое, што ў цяперашні час у чатыры лініі, N з'яўляецца глабальнай зменнай. І як вынікае з назвы, гэта проста даступныя ўсюды. Драпіны на самай справе мае гэтыя. Калі вы выкарыстоўвалі зменную, Вы можаце ўспомніць вам давялося выбіраць, калі гэта для спрайт ці для ўсіх спрайтов. Ну, усё спрайты толькі тым ясней спосаб сказаць глабальным. Да? Ах, вельмі добрае пытанне. Таму нагадаем, што ў самай першай версіі мой код, калі я няправільна дэкларуюцца і вызначаюцца ў адпаведнасці N дзевяць - Я сказаў, што яна зменную і я даў яму значэнне з Аператар прысвойвання - гэта дало мне дзве памылкі. Адзін той факт, што п не быў скарыстаны, і, па-другое, што ў радку 11 ён проста не быў абвешчаны. Такім чынам, першы, які я не адрас у той час. Гэта не строга памылкі абвясціць зменнай, але не выкарыстоўваць яго. Але адна з рэчаў, якія мы зрабілі ў CS50 прылады, свядома, педагагічна, як мы пракруцілі чакання кампілятара зрабіць Пераканайцеся, што вы робіце рэчы не толькі правільна, але на самой справе правільна. Таму што, калі вы аб'яву зменнай N, як і ніколі не выкарыстоўваць яго, ці выкарыстоўваць яго Правільна, то што яно там робіць? Гэта сапраўды не мае сэнсу. І гэта вельмі лёгка з часам, калі Вы ня наладзіць свой кампутар у Такім чынам, проста ёсць код, які мае трохі тут рэшткі, рэшткі там. А потым месяца праз, азіраючыся назад, вы, як, чаму гэтая лінія код ёсць? А калі няма уважлівай прычыны, ён не ідзе на карысць вы ці вашы калегі ўніз па дарозе прыйдзецца спатыкацца яго тады. Як у баку, дзе што прыходзіць? Ну, успомніце, што кожны раз, калі мы складаем праграмы, усё гэта рэчы ў друку. Такім чынам, мы яшчэ вернемся да гэтага. Але зноў жа, зрабіць гэта ўтыліта, якая аўтаматызуе працэс кампіляцыі па працуе фактычны кампілятара называецца ляскам. Гэтая рэч, мы ў канчатковым выніку ўбачыць, мае рабіць з адладкай з адмысловым праграма пад назвай адладчык. Гэта звязана з аптымізацыяй код - больш падрабязна пра гэта ў будучыні. Std = C99 - гэта проста азначае, выкарыстоўваць версію 1999 С. З было вакол нават даўжэй, чым , Але яны зрабілі некаторыя добрыя Змены 10 з лішнім гадоў таму. І вось актуальнымі. Мы кажам, зрабіць усё, што Раней было б папярэджанне Памылка прадухілення студэнта ад кампіляцыі. І сцены сродкаў зрабіць гэта для цэлую кучу рэчаў, а не за ўсё звязаны з зменнымі. І то дазвольце мне перайсці да ў канцы гэтай лініі. І гэта таксама, мы ў канчатковым выніку вярнуцца. Гэта, відавочна, назва файл я кампіляцыі. Гэта нагадвае імя файла Я выводзячы ў якасці імя маёй праграму якая працуе. Гэта-lcs50 проста азначае выкарыстанне CS50 бібліятэкі, і любое нулёў і адзінак, што Супрацоўнікі пісаў раней і склаў у гэтым годзе, інтэграваць іх у маёй праграме. А хто-небудзь ведае, што гэта-LM? Гэта матэматычная бібліятэка, якая з'яўляецца як раз там, нават калі вы не раблю любую матэматыку. Гэта проста аўтаматычна, пры ўмове нам зрабіць. Ну, зробім адзін прыклад Але вось, новы файл. І дазвольце мне захаваць гэты як string.c. Атрымліваецца, што калі мы гаворым пра дадзеныя Тыпы сёння, ёсць яшчэ больш адбываецца пад капотам , Чым мы бачылі да гэтага часу. Такім чынам, дазвольце мне хутка зрабіць хуткую праграму. Уключыце stdio.h. І я пакіну гэта. І Вы ведаеце, дазвольце мне не зрабіць ж памылкі зноў і зноў. Уключыце cs50.h. І дазвольце мне цяпер ісці наперад і рабіць тап_п (несапраўднымі). А зараз я проста хачу зрабіць праграму , Які робіць гэта - абвясціць радок называецца з і атрымаць радок ад карыстальніка. І дазвольце мне зрабіць невялікае інструкцыі тут - калі ласка, дайце мне радок - такім Карыстальнік ведае, што рабіць. А потым тут ніжэй гэтага, Я хачу зрабіць наступнае - для INT I атрымлівае нуля. Зноў жа, праграмісты звычайна пачаць адлік з нуля, але мы не маглі рабіць нешта адно, калі мы сапраўды хацелі. Цяпер я збіраюся зрабіць я менш чым даўжыня радка з с. Так StrLen - S-T-R-L-E-N - зноў жа, гэта кароткім, таму што лягчэй ўвесці, нават калі гэта загадкавым. , Якая з'яўляецца функцыяй мы не выкарыстоўваецца раней, але робіць гэта літаральна - вяртайся да мяне лік, якое ўяўляе Даўжыня радка , Уведзены карыстальнікам. Калі яны набраныя ў прывітанне, ён вернецца пяць, таму што ёсць пяць літары ў прывітанне. Затым на кожнай ітэрацыі гэты цыкл, я плюс плюс. Такім чынам, яшчэ раз, стандартны пабудаваць, нават калі Вы не зусім або занадта зручна знаёмыя з ім яшчэ. Але цяпер на кожнай ітэрацыі гэтага цыклу заўважыць, што я збіраюся рабіць. Я хачу, каб ісці наперад і раздрукаваць адзіночны знак - % З такім зваротную касую рысу N з новага радка. І потым, вы ведаеце, што я хачу зрабіць? Якімі б ні былі слова ў тым, што карыстач уводзіць ў, напрыклад, прывітанне, Я хачу надрукаваць H-E-L-L-О, па адным знаку ў радку. Іншымі словамі, я хачу атрымаць у асобных знакаў у радку, якой да гэтага часу не мае радкі проста была паслядоўнасць знакаў. І атрымліваецца, што я магу зрабіць з, кранштэйны, Я, якая зачыняе дужку, зачыніце дужкі, кропка з коскі. І я сапраўды павінен зрабіць яшчэ адну рэч. Гэта ў файле з імем string.h што StrLen абвешчаны. Так што, калі я хачу выкарыстоўваць гэтую функцыю, Мне трэба, каб паведаміць кампілятара, чакаць, каб выкарыстоўваць яго. Цяпер дазвольце мне пайсці далей і зрабіць Праграма называецца радком. Кропкі, нахільнай рысы радок. Калі ласка, дайце мне радок. Я буду ісці наперад і увядзiце яго. Добры дзень, загалоўнымі літарамі, Enter. А цяпер заўважаю я надрукаваў аднаму знаку за іншым. Такім чынам, новы дэталь у тым, што радок, у рэшце рэшт, можа быць даступныя ў выглядзе асобных яе знакаў, уводзячы квадратных дужкі. І гэта таму, што пад радком капот сапраўды паслядоўнасць знакаў. Але тое, што акуратны пра іх ў аператыўнай памяці кампутара - Mac, PC, б гэта ні было - яны літаральна спіна да спіны да спіны - H-E-L-L-O - на індывідуальным, сумежны байтаў ў памяці. Так што калі вы хочаце атрымаць на восьмы такіх байт, які ў гэтым цыкле будзе Кранштэйн нуля, кранштэйны адной, кранштэйны два, Кранштэйн тры, чатыры кранштэйна - якая ніколі нуля індэксавацца аж да пяці - , Якая будзе выдаваць H-E-L-L-O на асобнай радку. Зараз, як тізер, дазвольце мне паказаць вам віды рэчаў вы ў канчатковым выніку быць здольныя разумець, па меншай меры з некаторымі блізкімі глядзець. З аднаго боку, тое, што мы ўключаныя ў сённяшняй прыклады, калі вы хочаце, на самай справе адна з самых першых джейлбрейк для iPhone. Jailbreaking азначае парэпання тэлефоне так што вы можаце выкарыстоўваць яго на розных носьбітаў або ўсталяваць уласнае праграмнае забеспячэнне. І вы заўважыце, гэта выглядае зусім загадкавыя, хутчэй за ўсё. Але паглядзіце на гэта. IPhone мабыць з расколінамі цыкл, калі ўмова, яшчэ стане, куча функцый мы не бачылі. І зноў жа, вы не будзеце ў першы погляд, верагодна, зразумець, як гэта працуе. Але ўсё, што мы накшталт як прыняць само сабой якія разумеюцца ў нашай сучаснай жыцця фактычна вядзе да зніжэння нават у некаторай гэтых асновах мы былі глядзіце. Дазвольце мне ісці наперад і адкрыць адзін іншыя праграмы, holloway.c. Так што гэта таксама тое, што вы Не павінны сапраўды ведаць. Нават ніхто з супрацоўнікаў або я мог верагодна, зразумець гэта, гледзячы на гэта, таму што гэта быў чыйсьці код , Які быў прадстаўлены да таго, што гістарычна вядомага як зацемнены C Конкурс, у якім можна ствараць праграмы якая кампілюецца і працуе, але так па-чартоўску загадкавымі ні адзін чалавек не можа зразумець, што ён не будзе рабіць, пакуль яны на самой справе запусціць яго. Так што сапраўды, калі вы паглядзіце на гэта код, я бачу пераключальніка. Я бачу асноўнай. Я бачу гэтыя квадратныя дужкі маючы на ​​ўвазе нейкі масіў. Хто-небудзь хоча паваражыць, гэтая праграма на самай справе робіць, калі я бягу Холлоуэй? Да. ОК. Малайцы. Такім чынам, толькі супрацоўнікі і я не магу зразумець , Што гэтыя рэчы робяць. І цяпер, нарэшце, дазвольце мне ісці наперад і адкрыць адной іншай праграме. Гэта адно - зноў, то мы зрабіць зыходны код даступныя ў Інтэрнэце - гэта адно проста выгляд прыгожа глядзець. Усё, што яны зрабілі, гэта хіт прабел зусім няшмат. Але гэта рэальны код. Так што калі вы думаеце, што гэта прыгожа, калі мы фактычна кіруе гэтым у камандным радку ў рэшце рэшт вы ўбачыце, як мы можа рабіць такія рэчы. Такім чынам, мы пакінем вас на гэтай ноце і да сустрэчы ў сераду. [Музыка Прайграванне] Дакладчык 2: На наступным CS50, ТФ зладзіць бунт. Выступоўца 3: Там ён ёсць. Узяць яго! [Музыка Прайграванне]