[МУЗЫКА ГУЛЯЕ] David J. малая: Добра. Гэта CS50, і гэта гэта пачатак другога тыдня. Дык давайце пачнем сёння з памылкай. Памылка, вядома, з'яўляецца памылка ў праграме, і вы атрымаеце вельмі знаёмыя з гэтай канцэпцыяй калі вы ніколі не праграмавалі раней. pset0 і цяпер pset1. Але давайце разгледзім то трохі просты на першы. Гэтая праграма тут, што I кінулі разам у загадзя, і я сцвярджаю, што гэта павінна надрукаваць 10 зоркі на экране, выкарыстоўваючы Printf, але гэта, відаць глючыць ў некаторым родзе. Улічваючы, што спецыфікацыя, ён павінен надрукаваць 10 зорак, але гэта не так, відаць, тое, што Вы прэтэндаваць з'яўляецца памылка? Так? Так што гэта не зусім па адной памылкі, і што вы маеце на ўвазе? Добра. Выдатна. Так мы вызначылі пачаць нулявое значэнне для I, і мы паказалі н значэнне 10, але мы выкарыстоўвалі менш або роўна. І прычынай таго, што гэта два персанажы і не толькі адзін знак, як у матэматыцы кнігі, з'яўляецца тое, што ў вас няма спосаб выражэння адзін знак эквівалентныя. Значыць, менш, але калі вы пачынаеце адлік з нуля, але вы разлічваць ўсю дарогу да канца і роўная 10, Вы, вядома, збіраецца разлічваць 11 рэчаў у агульнай складанасці. І так вы збіраецеся друкаваць 11 зорак. Так што можа быць выправіць гэта? Так? Так што проста адрэгуляваць менш або роўная проста быць менш, і ёсць, я сцвярджаю ,, магчыма, іншае рашэнне, занадта. Што можа яшчэ вы робіце? Так? Так што пачніце прыраўноўванне яе да 1, і пакінуць менш або роўная. І, шчыра кажучы, я б сцвярджаць, што для тыповай чалавека, гэта, верагодна, больш простым. Пачніце адлік з 1 і прыкінь праз 10. Па сутнасці рабіць тое, што вы маеце на ўвазе. Але рэальнасць такая, у праграмаванне, як мы бачылі, кампутарнікі і праграмісты , Як правіла, пачынаюць адлік з нуля. І так гэта нармальна, як толькі Вы прывыкае да яго. Ваш стан будзе наогул нешта накшталт менш. Так проста лагічным Памылка, што мы маглі зараз выправіць і ў канчатковым рахунку перакампіляваць гэта і атрымаць толькі 10. Ну, як аб гэтай памылцы тут? Тут, зноў жа, я сцвярджаю, што ў мяне ёсць Мэтай друку 10 stars-- па адным у радку на гэты раз, але гэта не так. Перш, чым мы прапануем тое, што выпраўленне, тое, што робіць гэта друкаваць візуальна, калі б я быў скласці і запусціць гэтую праграму вы думаеце? Так? Зорка. Так што усе зоркі на ж лінія, што я чуў, а затым сімвал новага радка. Так давайце паспрабуем гэта. Так што глючыць-1, увядзіце, і я бачу каманду ляск што мы гаварылі ў мінулы раз. ./buggy-1, і на самай справе я бачу ўсё 10 зорак на той жа радку, хоць я прэтэндаваць у маёй спецыфікацыі проста каментар на вяршыні код, які я меў намер зрабіць адзін зав лінія. Але гэта выглядае правільна. Цяпер радок 15, падобна, я друк зорку, а затым лінія 16 гэта выглядае як я друк Сімвал новага радка, і яны абодва з водступам так Я ўнутры цыклу ясна. Так што не я павінен рабіць зорку, новы лінія, зорка, новая лінія, зорка, новая лінія? Так? Так, у адрозненне ад мовы як Python, калі вы знаёмыя, водступ ня значэння да кампутара. Гэта мае значэнне толькі да чалавека. Так у той час як тут, я вынайшаў ліній 15 і 16-- што выглядае прыгожа, але кампутар не клапоціцца. Кампутар клапоціцца аб фактычна не маючы фігурныя дужкі вакол гэтых радкоў кода. Так што гэта clear-- як і ў Scratch-- што гэтых двух радкоў кода павінны быць выкананы. Як адзін з тых жоўтага драпін галаваломкі шт зноў і зноў і зноў. Так што цяпер, калі я паўторна запусціць гэты program-- ./buggy-2-- Хм. У мяне ёсць памылка цяпер. Што я забыўся зрабіць? Так, так што я не скампіляваць яго. Так што глючыць-2. Няма такога файла, таму што я не зрабіў кампіляваць другую версію. Так што цяпер цікава неаб`яўленая переменная-- ня 2. Мы робім 1. Зрабіць багі-1-- ./buggy-1-- і цяпер кожны з іх знаходзіцца на той жа лініі. Зараз ёсць выключэнне гэта, як меркавалася пазоў шахце што вам патрэбныя гэтыя фігурныя дужкі. Калі гэта на самай справе OK-- калі вы маеце заўважыў у раздзеле або textbooks-- апусціць фігурныя дужкі? Так? Дакладна. Калі ёсць толькі адзін радок кода, якая вам хачу быць звязаны з цыкл, як у нашым першым прыкладзе. Гэта цалкам законна апусціць фігурныя дужкі проста як свайго роду выгоды ад кампілятара да вас. Так? Добры пытанне. Ці будзе гэта лічыцца памылка стыль? Мы б promote-- як у CS50 кіраўніцтва па стылі, URL, для якіх знаходзіцца ў pset1-- што заўсёды выкарыстоўваць фігурныя дужкі. Вядома, калі вы пачатковец у праграмаванні. Рэальнасць такая, што мы не збіраецца забараніць вам рабіць гэтыя выгоды. Але калі вы толькі знаёміцеся у курс справы, абсалютна проста заўсёды выкарыстоўваць фігурныя падцяжкі пакуль вы не атрымаеце павесіць яго. Добры пытанне. Добра. Так што тое была памылка. Прынамсі, у той даволі просты. І ўсё ж вы можаце думаць, даволі зачаткавым стане, ці не так? Гэта свайго роду першага тыдня глядзець на мове як, убачыць вашыя памылкі ў ім. Але рэальнасць гэта на самай справе прадстаўнік некаторыя даволі палохалых праблем якія могуць паўстаць у рэальным свеце. Такім чынам, некаторыя з вас могуць успомніць калі вы будзеце прытрымлівацца тэхнічныя навіны, ці, можа быць, нават злавіў ветру гэтага ў лютым з гэтага мінулага года, што Apple, было зрабіў трохі памылкай у абодвух прашыўкай, аперацыйная сістэма іх тэлефоны, а таксама Mac OS, аперацыйная сістэма на іх настольных ПК і наўтбукаў. І вы бачылі такія загалоўкі, як гэта. І пасля гэтага, Apple паабяцаў выправіць гэтую памылку, і вельмі хутка зрабіў гэта выправіць у прашыўкай, але потым у канчатковым выніку ўсталявалі яго ў Mac OS а. Цяпер ні адзін з гэтых загалоўкаў у адзіночку сапраўды выявіць тое, што асноўная праблема была, але памылка была ў канчатковым рахунку, зводзіцца да памылка ў SSL, Secure Sockets Layer. І карацей кажучы, Гэта праграмнае забеспячэнне што нашы браўзэры і іншыя Праграмнае забеспячэнне, якое выкарыстоўваецца для чаго? Калі б я сказаў, што SSL з'яўляецца удзел, кожны раз, калі вам наведаць URL, які пачынаецца з HTTPS, што тады можа SSL быць звязана? Шыфраванне. Такім чынам, мы будзем казаць пра гэта ў бліжэйшыя дні. Шыфраванне, мастацтва караскацца інфармацыю. Але Карацей, Apple некаторы час таму зрабіў памылку у іх рэалізацыі SSL, у праграмнае забеспячэнне, якое ў канчатковым рахунку, рэалізуе URL-адрасы, як HTTPS або макс злучэнні і там. Вынік, які з'яўляецца тое, што ваш злучэння можа патэнцыйна быць перахопленыя. І вашы злучэнні былі не абавязкова шыфруюцца калі вы былі некаторыя дрэнны хлопец у паміж Вы і вэб-сайт прызначэння, якія ведаў, як скарыстацца гэтым. Зараз Apple, у канчатковым рахунку, размешчаныя Выпраўленне гэтай нарэшце, і апісанне іх выпраўленне было гэта. Бяспечнага транспарту не ўдалося праверыць Сапраўднасць сувязі. Пытанне было разгледжана аднаўлення прапушчаных крокаў праверкі. Так што гэта вельмі рука хвалістыя тлумачэнне для проста кажу, што мы аблажаліся. Існуе літаральна адзін радок кода, які быў багі у іх рэалізацыі SSL, і калі вы ідзяце ў Інтэрнэце і пошук для гэтага Вы можаце на самой справе знайсці Арыгінальны зыходны код. Напрыклад, гэта здымак экрана толькі частка даволі вялікі файл, але гэта функцыя, па-відаць называецца SSL праверыць знак сервера абмену ключамі. І гэта займае кучу Аргументы і ўваходы. І мы не збіраемся засяродзіцца занадта шмат на дробязях там, але калі вам засяродзіцца на кодзе ўнутры гэтага TOPMOST function-- давайце павялічыць на што. Вы, магчыма, ужо падазраю, што памылка можа быць, нават калі вы паняцця не маеце, у канчатковым выніку тое, што вы глядзіце на. Там накшталт анамаліі тут, што, што? Так, я не вельмі люблю Погляд з двух Гото не атрымоўваецца. Шчыра кажучы, я сапраўды не ведаю, што перайсці збой сродкі, але з двума з іх спіной да спіны. Гэта толькі часткова трэцца мяне інтэлектуальна няправільны шлях, і на самай справе, калі мы павялічыць на толькі тых ліній, гэта C. Так шмат кода ад Apple сама напісана на C, і гэта, па-відаць сапраўды equivalent-- не да такой сімпатычнай водступу версія, але калі вы прызнаеце той факт, што няма ніякіх фігурныя дужкі, што Apple, сапраўды напісаў быў код, які выглядае як гэта. Так што я паменшылі маштаб, і я проста фіксаванай водступ у тым сэнсе, што калі няма ніякіх фігурныя дужкі, што другая перайсці няўдачу вось у жоўты збіраецца выканаць ні на што. Гэта не звязана з калі стан над ім. Такім чынам, нават зноў, калі вы не зусім зразумець, што гэта магло б рабіць, ведаю, што кожны з іх conditions-- кожнай з гэтых ліній з'яўляецца вельмі важным крокам У працэсе праверкі калі вашыя дадзеныя на самай справе зашыфраваныя. Так пропуск аднаго з іх крокі, не самая лепшая ідэя. Але так як у нас гэта Другі перайсці няўдачу ў жоўты, і таму што як толькі мы роду эстэтычна перамясціць яго налева, дзе яго лагічна знаходзіцца ў дадзены момант, тое, што гэта значыць для лініі кода ніжэй гэтай другой Гото няўдачу б вы думалі? Гэта заўсёды будзе прапушчаны. Так GOTOS, як правіла, з неадабрэннем па прычынах, мы не будзем сапраўды ўваходзяць у, ды і наогул у CS50 мы не схільныя вучыць гэта зацвярджэнне Гото, але вы можаце думаць аб Гото церпяць няўдачу, паколькі сэнс хаду скачка ў некаторай іншай частцы кода. Іншымі словамі пераскокваць гэта апошняя радок наогул, і таму вынік гэтай дурной проста памылка, якая была проста вынікам Магчыма хто скапіяваць і ўставіць адзін таксама шмат разоў было тое, што ўвесь бяспеку IOS і Mac OS быў уразлівы для перахопу дрэнных хлопцаў на працягу досыць доўгага часу. Пакуль Apple, нарэшце, не зафіксаваў гэта. Зараз, калі некаторыя з вас на самай справе працуе старыя версіі прашыўкай ці Mac OS, Вы можаце пайсці ў gotofail.com якія гэта сайт, які хто настроены ў значнай ступені вызначаюць праграмна калі ваш кампутар па-ранейшаму ўразлівыя. І, шчыра кажучы, калі гэта так, гэта, верагодна, добрая ідэя абнавіць свой тэлефон ці ваш Mac ў гэтай кропцы. Але там, толькі сведчаннем, наколькі ацэнка гэтых нізкім узроўні больш падрабязна і даволі простыя ідэі можа сапраўды перавесці ў рашэнні і праблемы, якія affected-- у гэтым case-- мільёны людзей. Зараз некалькі слоў пра адміністрацыі. Раздзел пачнецца ў бліжэйшую нядзелю. Вы атрымаеце ліст па выхадныя аб падзеле, у якім пункце працэс рэзекцыі пачнецца, калі ў Вас ёсць зразумеў, зараз у вас ёсць некаторыя новыя канфлікты. Так што гэта адбываецца кожны год, і мы размесцяцца ў бліжэйшыя дні. Офіс hours-- зрабіць трымаць вачэй па гэтым графіку тут. Змяняе трохі на гэтым тыдні, у прыватнасці, час пачатку і размяшчэнне, так што звярніцеся што перш чым адправіцца ў працоўны час любы з наступных чатырох начэй. А цяпер слова па ацэнцы, асабліва, як вы акунуцца ў праблемы ўстанаўлівае адзін і за яго межамі. Так у адпаведнасці са спецыфікацыяй, яны, як правіла, восі, уздоўж якіх мы ацэньваем сваю працу. Сфера ставіцца да таго, што меры ваша код інвентар патрабуецца асаблівасці па нашай спецыфікацыі. Іншымі словамі, колькі набор кавалак ты адкусіць. Ты зрабіў траціну з яго, палова, 100% ад яго. Нават калі гэта не правільна, колькі вы спрабавалі? Так што адлюстроўвае ўзровень намаганняў і колькасці , Да якога вы адкусілі Задачы мноства. Correctness-- гэтым, каб Наколькі, ваш код У адпаведнасці з нашай тэхнічныя характарыстыкі і ніякіх памылак. Так гэта правільна працаваць? Калі мы даем яму некаторыя матэрыялы, робіць гэта даць нам вынік, які мы чакаем? Design-- зараз гэта першы з у прыватнасці якасныя, або тыя, якія патрабуюць чалавечых меркаванняў. І сапраўды, менавіта таму ў нас ёсць штат так шмат навучальных таварышаў і, вядома памочнікі. У якой ступені ваша код, напісаны добра? І зноў гэта вельмі якасная ацэнка што будзем працаваць з вамі на двухнаправленно ў бліжэйшыя тыдні. Так што, калі вы не толькі лікавыя паказчыкі, але і Пісьмовае балы, або ўвялі зваротнай сувязі, або пісьмовыя водгукі ў ангельскіх слоў. Гэта тое, што мы будзем выкарыстоўваць, каб везці вас да фактычна пісаць лепшы код. І ў лекцыі і секцыі, мы пастараемся пазначыць out-- так часта, як мы can-- тое, што робіць праграму не толькі правільна і функцыянальна добра, але і добра распрацавана. Найбольш эфектыўным ён можа быць ці нават самая прыгожая гэта можа быць. Што прыводзіць нас да стылю. Стыль, у канчатковым рахунку з'яўляецца эстэтычнае меркаваньне. Вы выбралі добрае імёны для вашых зменных? Вы водступам код правільна? Ці значыць гэта выглядаць добра, і таму, гэта проста для іншага чалавека чытаць ваш адпаведная яго правільнасці. Зараз наогул за навучальны план, мы забіць гэтыя рэчы на ​​пяцібальнай шкале. І дазвольце мне забіваць дадому кропка што ў тры сапраўды добра. Вельмі хутка зрабіць людзей пачаць рабіць арыфметыку. Калі яны атрымліваюць тры з пяць ад правільнасці некаторы PSET і яны думаюць, блін, я збіраюся 60% які па сутнасці з'яўляецца D або E. Гэта не тое, як мы думаю з гэтых лікаў. Тры сапраўды добра, і што мы звычайна чакаюць у пачатку тэрміна ў тым, што калі вы атрымліваеце куча three's--, магчыма, пару кірмашоў, пару fours-- або пара двоек, пару fours-- што гэта добрае месца, каб пачаць. І да таго часу, як мы бачым, уверх траекторыя з цягам часу, Вы знаходзіцеся ў асабліва добрым месцы. Формула мы выкарыстоўваем для вага рэчы па сутнасці гэта за вучэбнай праграмы, які проста азначае, што мы надаюць большае значэнне карэктнасці. Таму што гэта вельмі часта карэктнасць што займае больш за ўсё часу. Паверце мне цяпер. Вы find-- па меншай меры, ў адным pset-- што вам правесці 90% свайго часу працуе на 10% ад гэтай праблемы. І ўсё быццам працуе для аднаго або двух памылак, за выключэннем, і тых, з'яўляюцца памылкі, якія трымаць вас да позняй ночы. Гэта тыя, што роду пазбегнуць вам. Але пасля сну на ім, або наведваць прыёмныя гадзіны або задаваць пытанні онлайн, з'яўляецца калі вы атрымліваеце на гэтым 100% гол, і менавіта таму мы вага Правільнасць найбольш. Дызайн трохі менш, і стыль трохі менш. Але майце на mind-- стылі мабыць, самы просты з іх адкусіць у адпаведнасці з кіраўніцтвам па стылі. І цяпер, больш сур'ёзным звярніце ўвагу на акадэмічнай сумленнасці. CS50 мае няўдалы распазнаванне з'яўляючыся найбуйнейшым вытворцам Савета Ad выпадкі амаль кожны год гістарычна. Гэта не таму, што студэнты падманваюць у CS50 больш, чым любы іншы клас, а таму, што па характары працы, той факт, што гэта электронны, той факт, што мы глядзім на гэта, і той факт, мы кампутарнікі, Я магу сказаць, што мы, на жаль, вельмі добрая ў выяўленні яго. Дык што ж гэта азначае ў рэальным выразе? Так гэта, у адпаведнасці з вучэбнай, Філасофія Курсу сапраўды зводзяцца да разумных. Існуе гэтая лінія паміж рабіць сваю працу па сваім меркаванні і атрымаць крыху разумна дапамогу ад аднаго, і адкрыта рабіць гэтую працу за свой сябар, ці даслаўшы яму ці ёй ваш код так што ён ці яна можа проста прыняць або ўзяць яго права. І, што перасякае лінію што мы звяртаецца ў класе. Глядзець, навучальны план у канчатковым рахунку, для ліній што мы звяртаем як разумна і неабгрунтаваным паводзінамі, але на самой справе гэта фурункул да сутнасці з ваша праца неабходнасці быць сваім уласным у канцы. Цяпер з гэтым сказаў, ёсць эўрыстычны. Таму што, як вы, магчыма, imagine-- ад працоўнага дня і візуальныя і відэа мы ў паказана такім чынам far-- CS50 сапраўды прызначаецца, каб быць як сумесны і як кааператыў і як сацыяльны наколькі гэта магчыма. , Як групавая, як гэта строгі. Але з гэтым сказаў, эўрыстычны, як вы ўбачыце ў вучэбнай праграме, з'яўляецца тое, што, калі вы выпрабоўваеце некаторыя праблемы. У вас ёсць памылка ў кодзе, што вам не можа вырашыць, што гэта разумна для вас паказаць код каму-то яшчэ. Сябар нават у класе, сябар сядзіць побач з вамі ў працоўны час, або член персаналу. Але яны не могуць паказаць свой код да вас. Іншымі словамі, адказаць на ваш question-- Мне трэба help-- ня ах, вось мой код. Зірніце на гэта і вывесці з яго тое, што вы будзеце. Цяпер, вядома, ёсць спосаб відавочна да гульні гэта сістэма, у якой я пакажу вам, мой код да таго, пытанне. Вы пакажыце мне маю код да таго, пытанне. Але ўбачыць навучальны план зноў тонкія дэталі, дзе гэтая лінія. Проста зараз намаляваць карціну і падзяліцца максімальна празрыста дзе мы знаходзімся ў ў апошнія гады, гэты лік выпадкаў Дошка аб'яваў што CS50 была больш апошнія сем гадоў. З 14 выпадках гэта апошняя восень. З пункту гледжання студэнтаў, якія ўдзельнічаюць, гэта было 20 некаторыя дзіўныя студэнты гэта мінулай восенню. Быў пік 33 студэнты некалькі гадоў таму. Многія з іх, на жаль, больш не тут, на тэрыторыі кампуса. Студэнты, якія ўдзельнічаюць у працэнтах ад Клас гістарычна ў дыяпазоне ад 0% да 5,3%, што з'яўляецца толькі сказаць гэта штогод праблемай. І ў гэтым кірунку, тое, што мы хочам зрабіць, гэта перадаць адзін што мы dd-- проста FYI-- параўнаць на справядлівасць тым студэнтам, якія з'яўляюцца наступныя лініі адпаведна. Мы робім параўнаць усе ток Довады супраць усіх апошніх місій за апошнія шмат гадоў. Мы таксама ведаю, як Google вакол і знайсці рэпазітары кода онлайн, дыскусійныя форумы онлайн, праца сайтаў у сеткі. Калі студэнт можа знайсці яго, мы можам, вядома, знайсці яго так жа, як мы з шкадаваннем зрабіць. Так што вы ўбачыце ў вучэбнай праграме хоць гэта становішча шкадаванне. Я магу, вядома, ацаніць, і мы ўсе мае Супрацоўнікі зрабіўшы ход, як гэта, ці гэта само па сабе адзін з цягам часу, вядома, ведаеце, што гэта такое, калі жыццё становіцца на шляху, калі ў вас ёсць некаторыя позна ўначы deadline-- не толькі ў гэтым класе, але another-- калі вы цалкам вычарпаныя, падкрэсліў, ёсць празмернае колькасць іншых рэчаў, каб зрабіць. Вы будзеце рабіць у пэўны момант у жыццё, вядома, дрэнна, магчыма, позна ноч рашэнне. Так у адпаведнасці з вучэбнай, ёсць гэты пункт, такія, што калі на працягу 72 гадзін з моманту некаторыя бедныя рашэнне, вы з'яўляецеся ўладальнікам да яго і выйсці на мяне і адзін з кіраўнікоў Курсу і ў нас будзе размова. Мы будзем звяртацца з рэчамі ўнутрана ў надзеі з яго становіцца больш Момант вучэнне або жыццёвы ўрок, і не тое, што з асабліва радыкальныя наступствы як вы можаце ўбачыць на гэтых графіках тут. Так што гэта вельмі сур'ёзны сігнал. Спынімся толькі нешматлікія секунд, каб зняць напружанне. [МУЗЫКА ГУЛЯЕ] David J. малая: Добра, так як у тым, што для Segue? Для сённяшніх першасных тэмах. Першы з якіх з'яўляецца абстракцыяй. Яшчэ адна з якіх будзе прадстаўленне даных, якія адкрыта з'яўляецца сапраўды сухі спосаб сказаць, як мы можам ісці аб вырашэнні праблем і думаць аб рашэнні праблемы? Такім чынам, вы бачылі ў пустым, і ў цябе бачыў, магчыма, ужо ў pset1 з C што вы не толькі можаце выкарыстоўваць функцыі, як Printf, што іншыя людзі ў міма гадоў пісаў для вас. Вы таксама можаце напісаць свае ўласныя функцыі. І хоць вы не маглі б зрабіў гэта ў C, і, шчыра кажучы, у pset1 Вы сапраўды не трэба пісаць свой ўласную функцыю, таму што ў problem-- хоць, магчыма, складанай на першы glance-- вы ўбачыце у канчатковым выніку можа быць вырашана з не ўсё, што многія радкі кода. Але з гэтым сказаў, з пункту гледжання пісаць сваю ўласную функцыю, зразумець, што C сапраўды дае Вы такая магчымасць. Я збіраюся пайсці ў сучасным зыходным кодзе, які даступны ўжо на сайце, і я збіраюся ісці наперад і адкрытай да праграмы пад назвай функцыя 0.C, і ў нулявы функцыі мы ўбачым некалькі рэчаў. У першых радках 18 праз 23 мая асноўная функцыя. І зараз, калі мы пачынаем чытаць Код, які мы не пішам на ляту, але замест гэтага я напісаў загадзя або што вы ў задачы ўсталяваць можа атрымаць якія маюць было напісана загадзя. Добры спосаб пачаць чытаць код чужое гэта паглядзець на галоўнай функцыі. Высветліць, дзе гэты запіс Справа ў тым, каб запусціць праграму, і вынікайце яго лагічна адтуль. Так што гэтая праграма па-відаць друкуе Ваша імя двукроп'е. Затым мы выкарыстоўваем GetString з бібліятэкі CS50 каб атрымаць радок, альбо слова або фразу ад карыстальніка на клавіятуры. А тут яшчэ гэты рэч здесь-- PrintName. Цяпер PrintName ня функцыя, якая пастаўляецца з C. Гэта не ў стандартным io.h. Гэта не ў CS50.h. Гэта, хутчэй, у тым жа файле. Звярніце ўвагу, калі я пракруціць ўніз а bit-- лініі 25 у 27-- гэта проста даволі спосаб каментуючы ваш код з дапамогай зорак і касыя рысы. Гэта мульты-лінія каментаваць, і гэта толькі маё апісанне ў сіні што робіць гэтая функцыя. Таму што ў лініі 28 да 31, Я напісаў супер простую функцыю чыё імя з'яўляецца PrintName. Гэта займае, колькі Аргументы б вы сказалі? Так адзін argument--, таму што ёсць адзін Аргумент пералічаныя ўнутры дужкі. Тып, які з'яўляецца радком. Які павінен сказаць PrintName Гэта выглядае прыкладна так чорны скрыню або функцыя, якая прымае як уваход радок. І імя гэтага радка зручна будзе імя. Ня S, ня N, але імя. Такім чынам, што ж PrintName рабіць? Гэта добры просты. Гэтак жа, як аднаго радка кода для Е, але, мабыць, яго друкуе "Hello," так і так. Дзе так і так паходзіць ад аргументу. Зараз гэта не велізарная інавацыя тут. Сапраўды, я ўзяў праграму, якая можа былі напісаныя з аднаго радка кода , Паставіўшы гэта тут, і змянілі яго на тое які ўключае ў сябе некаторыя шэсць ці сем ці каля таго радкоў кода ўвесь шлях сюды. Але гэта адпрацоўка прынцып, вядомы як абстракцыі. Выгляд інкапсуляцыі ўнутры новы функцыя, якая мае імя, і лепш яшчэ, што назва літаральна кажа, што ён робіць. Я маю на ўвазе printf-- гэта не апісвае яго. Калі я хачу стварыць паззл, або, калі I хачу стварыць функцыю які друкуе чыё-то імя, прыгажосць робіць гэта з'яўляецца тое, што я магу на самой справе даць, што функцыі імя , Які апісвае тое, што ён робіць. Цяпер яна займае ў ўваходзе, што Я ўмоўна назваць імя, але гэта таксама цудоўна апісальны замест таго, каб трохі больш агульны як С. і несапраўднымі, на дадзены момант, проста азначае, што гэтая функцыя не уручыць мне нічога. Гэта не тое, GetString што літаральна уручае мне радок як мы рабілі з паперкі са сваімі аднакласнікамі на мінулым тыдні, а ён проста мае пабочны эфект. Ён друкуе то на экран. Так у рэшце рэшт, калі я сапраўды робяць функцыя-0, ./function-0, мы ўбачым, што ён просіць майго імя. Я тыпу Давіда, і гэта тыпы з майго імя. Калі я зраблю гэта зноў з Робом, ён збіраецца сказаць "Прывітанне, Боб". Так простая ідэя, але, магчыма, экстрапаляваць гэта псіхічна што, як вашыя праграмы атрымаць крыху больш складана, і вы хочаце напісаць кавалак Код і выклік, які code-- Invoke што code-- некаторымі апісальны назваць як PrintName, C робіць сабе нам гэтую магчымасць. Вось яшчэ адзін просты прыклад. Напрыклад, калі я адкрываю падаць з сённяшняга дня называецца return.c, заўважыць, што я зрабіў тут. Большая частка гэтай галоўнай функцыі Е. Я спачатку адвольна ініцыялізацыі зменная з імем х да ліку 2. Я затым раздрукаваць "х цяпер % Я "праходжання ў значэнні х. Так што я проста кажу, што гэта такое. Цяпер я проста смела сцвярджаючы з Printf. Шукаю кубатуры, што значэнне х, і я робіць гэта шляхам выкліку функцыі называецца куб праходжанне у х у якасці аргументу, а затым захаваць выхад У самой зменнай, х. Так што я выдаліўшы значэнне х. Я пераазначэння значэнне х з любой вынікам выкліку гэтая функцыя куб. А потым я проста раздрукаваць некаторыя пухнаты матэрыял тут кажуць, што я зрабіў. Дык што ж тады з'яўляецца куб? Звярніце ўвагу, што ў корані тут па-іншаму. Я даў функцыю назву, як і раней. Я паказаў імя аргументу. На гэты раз яна завецца п замест імя, але я мог называць яго інакш я хачу. Але гэта не так. Гэтая рэч злева. Раней гэта было тое, што ключавое слова? Хлопчыкі. Зараз гэта відавочна, унутр. Так што, мабыць, забраць? У той час як несапраўднымі азначае свайго роду нішто, і гэта было так. PrintName не вярнуўся нічога. Гэта нешта зрабіў, але гэта не перадаць мяне тое, што я мог бы паставіць на Левая частка знака роўнасці як я зрабіў тут, на лініі 22. Так што, калі я кажу, у на лініі 30, што гэта такое, верагодна, маючы на ​​ўвазе пра тое, што куб робіць для мяне? Так? Гэта вяртае цэлае. Так ён перадае мне, для Асобнік, паперка , На якой ён напісаў адказ. 2 кубе, ці 3 у кубе, або 4 cubed-- ўсё, што я прайшоў у, і як я гэта рэалізаваць? Ну, проста п раз п раз п як я мог куб значэнне. Такім чынам, яшчэ раз, супер проста ідэя, але дэманстратыўнае Цяпер, як мы можам пісаць функцыі што на самой справе было нас каштоўнасці, якія маглі б прадстаўляць цікавасць. Давайце паглядзім на апошні прыклад тут называецца функцыя адна. У гэтым прыкладзе, ён пачынае каб атрымаць больш пераканаўчымі. Такім чынам, у функцыі аднаго, гэта program-- апавяшчэнне ў канчатковым рахунку, выклікае функцыю называюць GetPositiveInt. GetPositiveInt ня функцыі ў бібліятэцы CS50, але мы вырашылі, што хацелі б, каб існаваць. Так што, калі мы пракруціць ўніз пазней у файле, звярніце ўвагу, як я пайшоў аб рэалізацыі атрымаць станоўчы Int, і я кажуць, што гэта больш пераканаўчым таму што гэта годны колькасць радкоў кода. Гэта не проста глупства маленькая цацка праграмы. Гэта на самай справе атрымаў апрацоўку памылак і рабіць нешта больш карыснае. Так што, калі вы не бачылі праходжанне гульні відэа, што мы, убудаваныя ў pset1, ведаю, што гэта з'яўляецца адным з відаў пятля ў C, блізкая па духу з відамі рэчаў нуля можа зрабіць. І рабіць гаворыць гэтага. Раздрукуйце гэта. Тады наперад і атрымаць n-- атрымаць Int і захаваць яго ў п, і працягваць рабіць гэта зноў і зноў, і зноў, пакуль п менш аднаго. Так н збіраецца быць менш за адзін толькі калі чалавек не супрацоўнічае. Калі ён ці яна друкуе ў 0 або -1 або -50, гэты цыкл будзе трымаць выкананне зноў і зноў. І ў канчатковым рахунку заўважыць, я проста вярнуць значэнне. Так што цяпер у нас ёсць функцыя што было б добра калі CS50 б рэалізаваць у CS50.h і CS50.c для вас, але тут мы можам зараз рэалізаваць гэта самі. Але два заўвагі па некаторых ключавых дэталяў. Одно-- чаму я заяўляю Int н, вы думаеце, на лініі 29 а не проста рабіць гэта тут, які больш адпавядае тое, што мы зрабілі на мінулым тыдні? Так? Добрая думка. Так што, калі б мы павінны былі паставіць яго тут, гэта як быццам мы трымаць абвясціўшы яго зноў і зноў. Гэта само па сабе з'яўляецца ня праблематычна, па сутнасці, таму што нам трэба толькі Значэнне адзін раз і затым мы збіраемся атрымаць новы ў любым выпадку. Але добрая думка. Так? Закрыць. Так, таму што я заявіў н на Лінія 29 па-за цыклу, яна была даступная на працягу гэта цэлая функцыя. Не іншыя функцыі, таму што н-ранейшаму ўнутры гэтых павойных падцяжкі тут. Так што-ўпэўнены. Дакладна. Так што гэта нават больш важна. Калі мы замест заявіў н прама тут, на лініі 32, гэта праблематычна, таму што здагадка дзе яшчэ мне трэба атрымаць да яго доступ? На лініі 34, і Простае правіла з'яўляецца што вы можаце выкарыстоўваць толькі пераменная ўнутры з самых апошніх фігурныя дужкі , У якім вы абвясцілі яго. На жаль, лінія 34 адна лінія занадта позна, таму што я ўжо зачынена фігурная дужка на лініі 33 што адпавядае фігурная дужка ў радку 30. І такім чынам, гэта спосаб сказаць, што гэтая пераменная Int з'яўляецца вобласцю дзеянні, так бы мовіць, каб толькі ўнутры з тых фігурныя дужкі. Гэта проста не існуе па-за імі. Так сапраўды, калі я зраблю гэта так, дазвольце мне захаваць код як гэта is-- няправільна напісана. Дазвольце мне ісці наперад і робяць Функцыя-1, і notice-- памылкі. Выкарыстанне неаб'яўленай ідэнтыфікатар п на лініі 35, які знаходзіцца прама тут. І калі мы пракруткі уверх Далей, яшчэ адзін. Выкарыстанне неаб`яўленая Ідэнтыфікатар н на лініі 34. Так кампілятар, Clang, будзе заўважыць, што яго проста не існуе, нават калі ясна, што яна ёсць візуальна. Такім чынам, простае выпраўленне абвясціўшы яго там. Цяпер дазвольце мне перайсці да верхняй частцы файла. Што кідаецца ў вас, як быўшы трохі адрозніваецца ад таго, што мы глядзелі на мінулым тыдні? Мала таго, што ў мяне ёсць імя, не толькі У мяне ёсць некаторыя вострыя ўключае ў сябе да лепшых, У мяне ёсць тое, што я знаходжуся называючы прататып. Зараз, выглядае жудасна падобна на тое, мы толькі што бачылі некалькі хвілін таму на лініі 27. Так што давайце вывесці з іншай Паведамленне пра памылку, чаму я зрабіў гэта. Дазвольце мне ісці наперад і выдаліць гэтыя радкі ёсць. І таму мы нічога не ведаем пра прататыпе. Remake гэты файл. Зрабіце функцыю адзін. А цяпер, блін, чатыры памылкі. Давайце пракруткі да першага. Невідавочнае аб'яву функцыі атрымаць станоўчы Int з'яўляецца несапраўдным у C99. C99 проста азначае, што 1999 версія мовы C, які з'яўляецца тое, што мы сапраўды з дапамогай. Дык што ж гэта значыць? Ну C-- і больш канкрэтна C compilers-- даволі тупыя праграмы. Яны толькі ведаюць, што ў Вас ёсць сказаў ім, і гэта фактычна тэматычная з мінулага тыдня. Праблема ў тым, што калі я іду аб рэалізацыі імя тут, і я выклікаць функцыю названую GetPositiveInt тут на лініі 20, што функцыя тэхнічна не існаваць, пакуль кампілятар не бачыць лінію 27. На жаль, кампілятар рабіць рэчы зверху, уніз, налева, направа, так, таму што не бачыў Рэалізацыя GetPositiveInt, але ён бачыць вы спрабуеце выкарыстоўваць яго тут, гэта проста будзе bail-- крычаць на Вы з памылкай message-- магчыма загадкавымі, а не на самай справе кампіляцыі файла. Такім чынам, так званы прататып да тут, па агульным прызнанні залішнім. Літаральна, я спусціўся сюды, і я скапіяваў і ўставілі гэта, і я паклаў яго тут. Пустата б больш правільным, таму мы літаральна скапіяваць і ўставіць яго на гэты раз. Я літаральна скапіяваў і ўставіў яго. Сапраўды як як хлебнага мякішу. Трохі падказка кампілятара. Я не ведаю, што гэта робіць пакуль няма, але я абяцаў вам , Што ў канчатковым выніку будзе існаваць. І вось чаму гэта line-- ў лінія 16-- заканчваецца кропкай з коскі. Гэта з'яўляецца залішняй па дызайне. Так? Калі вы не звязаць сваю бібліятэку каб the-- о, добры пытанне. Sharp ўключае файлаў загалоўка уключэнняў. Трэба be-- павінны амаль заўсёды быць на самым версе файла для similar-- для сапраўды гэтак жа прычына, так. Таму што ў стандарт io.h літаральна лінія як гэта, але са словам Printf і з опцыямі і які вяртаецца тыпу. І так, робячы рэзкае ўключаць да тут, што вы літаральна робіць будзе скапіяваць і ўставіць змесціва каго-небудзь яшчэ напісаў наверсе. Такім чынам cluing код і Справа ў тым, што гэтыя функцыі існуюць. Так? Абсалютна. Так вельмі разумны і правільны рашэннем было б, ведаеце што? Я не ведаю, што Прататып, але я ведаю, калі я разумею, што C з'яўляецца проста нямы і пераасэнсоўвае зверху ўніз. Ну давайце дамо яго, што ён хоча. Давайце выразаць гэты код, устаўце яго лепшых, і зараз націснуць галоўны ўнізе. Гэта таксама дасць магчымасць вырашыць праблему. Але вы маглі б вельмі лёгка прыдумаць сцэнар, у якім трэба выклікаць B, і, магчыма, B ператэлефаноўвае A. Гэта тое, што называецца рэкурсіі, і мы вернемся да гэтага. І гэта можа ці не можа быць добрым рэч, але вы можаце вызначана зламаць гэтае рашэнне. І больш за тое, я б сцвярджаюць, стылістычна, асабліва калі вашы праграмы стаць так доўга і так доўга, гэта проста супер зручна пакласці галоўнай у верхняй таму што гэта рэч найбольш праграмісты збіраюцца клапаціцца аб. І так гэта трохі чысцей, магчыма, зрабіць гэта так, як Я першапачаткова зрабіў гэта з прататыпам нават хоць гэта выглядае трохі залішнім, на першы погляд. Так? На жаль, вы можаце сказаць, што гэта гучней? Пры пераключэнні месцазнаходжання ўкараненне і прататып? Так што гэта добрае пытанне. Калі вы паўторна заявіць пра гэта ўніз тут, давайце паглядзім, што адбудзецца. Так што, калі я здушыў гэта тут, вы кажаце. Ой, прабачце. Гучней? Нават гучней. О, добры пытанне. Ці будзе гэта прывесці да анулявання функцыю? Вы ведаеце, пасля ўсіх гэтых гадоў, я ніколі не паставіць прататып пасля. Так давайце зробім зрабіць функцыю-1 пасля выканання гэтага. [Мармычучы] David J. малая: Ой, пачакайце. Мы ўсё яшчэ павінны паставіць усё верх. Так давайце зробім гэта тут, калі я разумеючы Вашы пытанні правільна. Я стаўлю усе, у тым ліку вышэй галоўным прататыпам, але я стаўлю прататып Ніжэй ажыццяўлення. Так што, калі я зрабіць адзін, я атрымліваю назад error-- нявыкарыстаны пераменная н. О, ёсць. Дзякуй. Давайце паглядзім, што мы пазбавіцца ад гэтага. Гэта іншая памылка, так што давайце ігнараваць гэта. Давайце сапраўды хутка перарабіць гэта. Такім чынам, аргумент не дадзеныя выкарыстоўваецца радок фармату n-- о, гэта таму, што Я змяніў да іх тут. Добра, мы ведаем, што адказ збіраецца to-- усё ў парадку, тут мы ідзем. Ах, дзякуй за пазітыў. Добра, я выпраўлю гэты код after-- ігнараваць гэтую канкрэтную памылку так як гэта was-- гэта працуе і ёсць адказ. Так што не перазапісвае тое, што вы толькі што зрабілі. Я падазраю, кампілятар напісаная такім чынам што ігнаруе свой прататып Таму што цела, так бы мовіць, з функцыя ўжо былі рэалізаваны вышэй. Я б на самой справе пракансультавацца Кіраўніцтва кампілятара зразумець, ці ёсць іншыя Маецца на ўвазе, але на першы погляд проста спрабуе і эксперыментаваць, там, здаецца, няма ніякага ўплыву. Добры пытанне. Так што давайце ісці наперад зараз, рухаючыся ад пабочных эфектаў, якія з'яўляюцца функцыямі, якія робяць тое, што візуальна на экране з Printf, але не вяртае значэнне. І функцыі, якія маюць вяртанне каштоўнасці, як мы толькі што бачылі некаторыя з. Мы ўжо бачылі гэта паняцце сферы, і мы ўбачым гэта зноў і зноў. Але цяпер, зноў жа, выкарыстоўваць эмпірычнае правіла што пераменная можа быць выкарыстана толькі ўнутры самой нядаўна адкрыў і закрытыя фігурныя дужкі, як мы бачылі ў гэтым канкрэтным прыкладзе. І як вы адзначылі, існуе ability-- Вы маглі б вырашыць некаторыя з гэтых праблем паставіўшы зменную глабальна у самым пачатку файла. Але амаль ва ўсіх выпадках мы б незадаволены, што, і на самай справе нават не ідуць у гэтым рашэнні для цяпер. Так што на дадзены вынас у тым, што зменныя маюць гэта паняцце сферы. Але цяпер давайце паглядзім на іншы сухі спосаб на самай справе шукае на некаторыя даволі цікава Дэталі рэалізацыі. Як мы маглі б прадстаўляць інфармацыю. І мы ўжо глядзелі на гэта у першы тыдзень класе. Гледзячы на ​​бінарных файлаў, і нагадваючы сабе аб дзесятковай. Але памятаеце з мінулым тыдні, што C мае розныя тыпы дадзеных і гроздья больш, але найбольш карысныя з іх цяпер можа быць гэта. Сімвал, або сімвал, які адбываецца каб быць адзін байт ці восем бітаў агульнай. І гэта азначае, што памер з паўкокс толькі адзін байт. Байт восем бітаў, такім чынам, гэта азначае, што мы можам ўявіць, як шмат знакаў. Колькі лістоў або Сімвалы на клавіятуры калі ў нас ёсць адзін байт ці восем біт. Ўспомніце нулявы тыдні. Калі ў вас ёсць восем біт, колькі ўсяго значэння можа вы ўяўляеце з патэрны нулёў і адзінак? Одно-- больш. Так 256 за ўсё, калі вас пачаць адлік з нуля. Так што калі ў вас ёсць восем bits-- так што калі мы былі нашы бінарныя цыбуліны тут зноў, мы маглі б ператварыць гэтыя лямпачкі на і выключаецца ў любым з 256 унікальных структур. Цяпер гэта крыху праблематычна. Не так шмат для ангельскай і раманскія мовы, але, вядома, калі вы ўявіць, для Напрыклад, азіяцкія мовы, якія маюць значна больш сімвалаў, чым як 26 літары алфавіту. Мы на самой справе, магчыма, спатрэбіцца больш чым адным байт. І да шчасця, у У апошнія гады мае грамадства прынятыя іншыя стандарты, якія выкарыстоўваюць больш аднаго байта на адной зарадцы. Але на бягучы момант у С, па змаўчанні толькі адзін байт ці восем бітаў. Цэлае, тым часам, чатыры байт, інакш вядомы як 32 біт. А гэта значыць, што як мага большую лік можна ўявіць з міжнар па-відаць ,? З мільярд. Так што гэта чатыры мільярды плюс-мінус. 2 у 32-я ўлады, калі мы ня прымаем на сябе адмоўныя лікі і проста выкарыстоўваць усе станоўчыя лічбы, гэта чатыры мільярды плюс-мінус магчымасці. Паплавок, тым часам, гэта іншы тып тыпу дадзеных у C. Гэта яшчэ цэлы шэраг, але гэта рэальная колькасць. Што-то з коскі. І атрымліваецца, што C таксама выкарыстоўвае чатыры байта для прадстаўлення значэнняў з якая плавае кропкай. На жаль, колькі з якая плавае значэння пункту ёсць у свеце? Колькі рэчавыя колькасці ёсць? Там у бясконцае лік, і ў гэтым дачыненні ёсць бясконцую колькасць цэлых лікаў. Так што мы ўжо накшталт капаць сабе яму тут. Прычым, мабыць, у computers-- на найменш праграмы, напісаныя на C на them-- могуць разлічваць толькі вышэй, чым чатыры мільярды плюс-мінус, і якая плавае коскі можа толькі па-відаць, ёсць канчатковае колькасць дакладнасцю. Толькі так шмат лічбаў пасля іх коскі. Таму што, вядома, калі ў вас ёсць толькі 32 біта, Я не ведаю, як мы збіраемся ісці аб якія прадстаўляюць рэальную numbers-- верагодна з рознымі тыпамі малюнкаў. Але ёсць, вядома, канчатковае лік такіх шаблонаў, так і тут, гэта праблематычна. Цяпер мы можам злёгку пазбегнуць гэтай праблемы. Калі вы не выкарыстоўваеце паплавок, вы можаце выкарыстоўваць двайны у С, што дае вам восем байт, што з'яўляецца спосаб больш магчымых структур нулёў і тыя. Але гэта ўсё яшчэ канчатковая, якая збіраецца каб быць праблематычным, калі вы пішаце праграмнае забеспячэнне для графікі або для фантазіі матэматычныя формулы. Такім чынам, вы, магчыма, на самай справе хочуць падлічваць больш, чым гэта. Доўгі long-- тупа named-- Таксама васьмі байт, або 64 бітаў, і гэта ўдвая больш, чым у Int, і гэта на працягу доўгага цэлага значэння. Fun fact-- калі Int чатыры байта, як доўга гэта доўга ў C звычайна? Таксама чатыры байта, але доўга доўга восем байт, і гэта па гістарычных прычынах. Але вынас зараз проста, што дадзеныя ёсць быць прадстаўленым у computer--, гэта фізічная прылада з электрычнасцю, гэта наогул за рулём гэтыя нулі і ones-- з канчатковымі аб'ёмамі дакладнасцю. Так у чым праблема то? Ну ёсць праблема цэлалікавага перапаўнення. Не толькі ў С, але ў кампутары ў цэлым. Напрыклад, калі ў гэтым гэта байт варта bit-- так што калі гэта восем bit-- ўсе з якіх з'яўляюцца нумар адзін. Які гэта нумар які ўяўляе калі выказаць здагадку, гэта ўсё станоўчыя значэння ў двайковым? 255, і гэта не 256, таму што нулявы самае нізкае лік. Так 255 з'яўляецца самым высокім Адзін з іх, але праблема , Мяркуюць, што хачу павялічыць гэтую зменную, што выкарыстоўвае ўсяго восем біт калі я хачу, каб павялічыць яго. Ну, як толькі я дадаць адзін для ўсіх гэтых адзінак, Вы, магчыма, можа сабе ўявіць visually-- проста як несучы яго, выкарыстоўваючы decimals-- то адбываецца цячы злева. І на самай справе, калі б я дадаць нумар адзін з гэтым, тое, што адбываецца ў двайковым з'яўляецца тое, што яно перапаўняе да нуля. Так што калі вы толькі use-- не ў Int, але адзін байт разлічваць цэлыя ў праграме, па default--, як толькі вы атрымаеце 250, 251, 252, 253, 254, 255-- 0 прыходзіць пасля 255, што, верагодна, не тое, што карыстальнік збіраецца чакаць. Цяпер тое ж час у плавае коскі свет, у вас таксама ёсць аналагічная праблема. Не столькі з самай вялікай number-- хоць гэта яшчэ пытанне. Але з колькасцю дакладнасцю што вы можаце прадстаўляць. Такім чынам, давайце зірнем на гэты прыклад тут таксама ад сённяшняй крыніцы code-- плаваць-0.c. І заўважце, гэта супер простая праграма, якая варта, мабыць, раздрукаваць, якое значэнне? Што вы заклад, што гэта збіраецца друкаваць хоць ёсць трохі новага сінтаксісу тут? Так, мы спадзяемся 0.1. Такім чынам, эквівалентная адной дзесятай таму што я раблю 1, дзеленай на 10. Я ўпэўнены, захоўваць адказ ў зменнай называецца е. Гэтая пераменная мае тып паплаўка, які гэта ключавое слова, я проста прапанаваў існавала. Мы не бачылі гэта раней, але гэта накшталт хупавы спосаб у Printf каб вызначыць, як шмат лічбаў вы хочаце ўбачыць пасля коскі. Так гэта абазначэнне проста азначае, што вось запаўняльнікам. Гэта для плавае кропкай Значэнне, і, о, дарэчы, паказаць яго з дзесятковай кропкі з адзін нумар пасля коскі. Дык вось лік ўважаецца лічбаў, так бы мовіць, што вы, магчыма, захочаце. Такім чынам, дазвольце мне ісці наперад і рабіць зрабіць паплавок-0, ./float-0, і, мабыць, 1 дзеліцца на 10 0.0. Цяпер, чаму гэта? Ну зноў жа, кампутар прымае мне літаральна, і я напісаў 1 і я напісаў 10, і зрабіць здагадку, што з'яўляецца мяркуецца тып дадзеных для гэтых двух значэння? Int, гэта тэхнічна то трохі іншае. Гэта, як правіла, доўга, але гэта у канчатковым рахунку, інтэгральнае значэнне. Не ад значэння з якая плавае кропкай. Што азначае, што калі гэты з'яўляецца Int і гэта Int, Праблема ў тым, што кампутар ня валодаюць здольнасцю нават захоўваць гэтую дзесятковую кропку. Так што, калі вы робіце 1 дзеліцца на 10 з выкарыстаннем цэлых лікаў для лічніку і назоўнік, адказ павінен быць 0,1. Але computer-- таму тыя integers-- не ведаю, што рабіць з 0,1. Дык што ж гэта відавочна робіш? Гэта проста выкінуць, і што я бачу ў канчатковым рахунку, 0.0 толькі таму, што я настойваў на тым, Е паказаць мне адну дзесятковую кропку. Але праблема ў тым, што калі вам падзяліць цэлае на цэлы лік, Вы get-- па вызначэнні з C-- цэлае. І ён не збіраецца рабіць нешта добрае і зручна як вакол яго да бліжэйшы уверх ці ўніз. Гэта адбываецца ўсячэнне усе пасля коскі. Так што проста інтуітыўна, што, верагодна, выправіць? Што простым спосабам выправіць тут? Так? Дакладна. Чаму б нам проста не разглядаць іх як эфектыўна з якая плавае коскі ператвараючы іх у паплаўкамі або парным разрадзе. І зараз, калі я сапраўды робяць паплаўкі-0, або калі я кампілюе паплаўкі-1, які ідэнтычны што толькі што было прапанавана. І зараз я раблю паплаўкі-0, зараз я атрымаю свой 0,1. Зараз гэта дзіўна. Але цяпер я збіраюся зрабіць то трохі іншае. Мне цікава паглядзець, што на самой справе адбываецца пад капотам, і я збіраюся надрукаваць гэта да 28 знакаў пасля коскі. Я хачу, каб сапраўды ўбачыць 0.1000-- infinite-- [Неразборліва] 27 нулёў пасля гэтага 0,1. Ну паглядзім, калі гэта тое, што я сапраўды атрымаць. Зрабіць плавае-0 і той жа файл. ./floats-0. Давайце павялічыць на драматычнай адказ. Увесь гэты час, вы думалі 1 дзеліцца на 10 10%, або 0,1. Гэта не так. Па крайняй меры, наколькі гэта кампутар турбуецца. Цяпер why-- Добра, гэта поўнае хлусня 1 дзеліцца на 10 складае 0,1. Але why--, што гэта не вынас сёння. Дык чаму ж кампутар думаю, у адрозненне ад усіх нас у пакоі, што 1 дзеліцца на 10 з'яўляецца на самай справе, што з розуму значэнне? Што кампутар робіць, па-відаць? Што гэта? Гэта не перапоўніць, як такой. Перапаўненне звычайна, калі Вы абгарнуць вакол значэння. Менавіта гэтае пытанне недакладнасці у значэнне з якая плавае коскі дзе ў вас ёсць толькі 32 ці, можа быць, нават 64 біт. Але калі ёсць бясконцае колькасць рэальных numbers-- нумары з знакаў пасля коскі і лічбы thereafter-- напэўна Вы не можаце прадставіць усе з іх. Такім чынам, кампутар даў нам бліжэй матч да значэння ён можа прадстаўляць з дапамогай, што шмат бітаў да значэння я на самой справе хочаце, які з'яўляецца 0,1. На жаль, калі вы пачаць рабіць матэматыку, ці вы пачаць з удзелам гэтых відаў плавае значэння пункту ў важным programs-- фінансавага праграмнага забеспячэння, ваенны software-- нічога дзе ўспрыманне верагодна, даволі важна. І вы пачынаеце дадаваць нумары, як гэта, і пачатак працуе, што праграмнае забеспячэнне з сапраўды вялікімі ўваходамі або для вялікай колькасці гадзін або вялікім дзён ці вялікай колькасцю гадоў, гэтыя малюсенькія памылкі безумоўна, можа скласці з цягам часу. Зараз, як у бок, калі вы калі-небудзь бачыў Супермэн 3 ці офіснае прастору і вы, магчыма, памятаеце як гэтыя хлопцы скралі шмат грошай са свайго кампутара з дапамогай значэння з якая плавае кропкай і складання мала рэшткі, мы спадзяемся, што фільм цяпер мае больш сэнсу. Гэта тое, што яны былі намякаючы на ​​ў гэтым фільме. Той факт, што большасць кампаніі не будзе выглядаць пасля пэўнага колькасці дзесятковых знакаў, але тыя фракцыі цэнтаў. Такім чынам, вы пачынаеце іх складання, вы пачынаеце рабіць шмат грошай на ваш банкаўскі рахунак. Дык вось Офісныя памяшканні патлумачыў. Зараз, на жаль, за Офісныя памяшканні, ёсць некаторыя законна трывогу і значныя ўздзеяння з гэтых відаў якія ляжаць у аснове праектныя рашэнні, На самай справе, і адной з прычын мы выкарыстоўваем C на працягу так што ў вас сапраўды ёсць гэтую зямлю да разумення таго, як працуюць кампутары, як праграмнае забеспячэнне працуе, і ня прымаць як належнае. І на самай справе, на жаль, нават з што фундаментальнае разуменне, мы, людзі робяць памылкі. І тое, што я думаў, я б падзяліцца з'яўляецца гэта восем хвілін відэа тут прынята з эпізоду Сучасныя Цуды, якая адукацыйная шоў пра тое, як усё гэта працуе што малюе дзве карціны пра тое, калі няправільнае выкарыстанне і разуменне з якая плавае коскі прывяло да некаторых істотным Сумныя вынікі. Давайце зірнем. [ВИДЕОВОСПРОИЗВЕДЕНИЕ] Цяпер -Мы вярнуцца ў "Інжынірынг Бедствы "на сучасных цудаў. Кампутары. Мы ўсе прыйшлі да разумення часта праблемы расчараванне, што атрымаў з them-- багаў, вірусаў, і Праграмнае забеспячэнне glitches-- для невялікіх цэн плаціць за выгоды. Але ў галіне высокіх тэхналогій і высокай хуткасці ваенныя і касмічныя праграмныя прыкладання, самая малая праблема будзе быць павялічаны ў катастрофе. 4 чэрвеня 1996 года, навукоўцы гатовыя запусціць беспілотны ракета Арыян 5. На яго борце навукова Спадарожнікі прызначаныя ўсталяваць, як менавіта Ўзаемадзейнічае магнітнага поля Зямлі з сонечнымі вятрамі. Ракета была пабудавана для Еўрапейскае касмічнае агенцтва, і стартаваў з яго аб'екце на ўзбярэжжа Французскай Гвіяны. -на Каля 37 секунд у палёт, яны ўпершыню заўважыў што-то пойдзе не так. Гэта фарсункі былі паваротным такім чынам, яны сапраўды не павінны. Вакол 40 секунд у палёце, выразна аўтамабіль трапіў у бяду, і вось, калі яны зрабілі рашэнне яго знішчыць. Афіцэр бяспекі дыяпазон, з велізарныя кішкі, націснуў на кнопку і ўзарвалі ракету, перш чым ён мог стаць пагрозай для грамадскай бяспекі. -гэта Быў дзявочае Падарожжа з Ariane 5, і яе разбурэнне ўзяў месца з-за недахопу ўбудаваны ў праграмнае забеспячэнне ракеты. Даследаваны праблемы на Ariane было тое, што быў нумар, які патрабуецца 64 біта, каб выказаць, і яны хацелі, каб пераўтварыць гэта да 16-разраднага колькасці. Яны лічылі, што лікі ніколі не будзе вельмі вялікі. Што большасць з гэтых лічбаў у 64-разраднае лік былі нулі. Яны не мелі рацыю. Даследаваны няздольнасць аднаго праграма, каб прыняць выгляд ліку, спароджаная іншы быў у корані правалу. Распрацоўка праграмнага забеспячэння стала вельмі затратная частка новай тэхналогіі. Ariane 4 ракеты былі быў вельмі паспяховым. Так што большая частка праграмнага забеспячэння, створанага для ён быў таксама выкарыстаны ў Ariane 5. Даследаваны асноўная праблема было тое, што Ariane 5. Быў faster-- паскараецца хутчэй, і праграмнае забеспячэнне не даводзілася, што. Даследаваны знішчэнне ракеты была велізарная фінансавая катастрофа. Усё за памылкі хвілін праграмнага забеспячэння. Але гэта быў не першы Час праблемы пераўтварэння дадзеных мучыла сучасныя тэхналогіі ракеты. -У 1991 з самага пачатку з першай вайны ў Затоцы, ракета Patriot выпрабаваў падобны выгляд праблемы пераўтварэнні лік. І ў выніку 28 people-- 28 Амерыканскія soldiers-- былі забітыя, і каля ста атрымалі раненні. Калі Patriot, які павінен быў для абароны ад ўваходзяць Скадо, не ўдалося звольніць ракету. -Калі Ірак уварваўся ў Кувейт, і Амерыку запушчаны Бура ў пустыні ў пачатку 1991 года, Patriot ракетныя батарэі былі разгорнутыя абараніць Саудаўскую Аравію і Ізраіль ад ракетных нападаў Ірака Скад. Патрыёт з'яўляецца сярэдняй далёкасці ЗША зямля-паветра сістэмы вытворчасці кампаніі Raytheon. -Размер Патрыётаў перахопнік у тым: гэта даўжынёй каля прыкладна 20 футаў, і важыць каля 2000 фунтаў. І гэта нясе боегалоўку о, Я думаю, што гэта прыкладна 150 фунтаў. І сама баявая частка фугасных, якія мае фрагменты вакол яго. Так кажух боегалоўкі распрацаваны, каб дзейнічаць як карцеччу. Даследаваны ракеты ажыццяўляецца чатыры за кантэйнер, і транспартуюцца паўпрычэпа. Даследаваны Patriot супрацьракетная сістэма ўзыходзіць па крайняй меры, 20 гадоў. Першапачаткова ён быў распрацаваны як зенітна-ракетнага каб збіваць варожыя самалёты. У першай вайны ў Персідскім заліве калі, што вайна на, Армія хацела выкарыстоўваць яго для збіваць Скадо, а не самалёты. ВПС Ірака быў ня столькі праблемы, але армія хваляваўся аб Скадо. І такім чынам яны спрабавалі абнавіць Patriot. -Intercepting Ворага Ракета падарожжа ў Маха 5 збіраўся быць досыць складанай. Але калі Patriot быў дастаўлены ў эксплуатацыю, Армія не было вядома аб Іракскі мадыфікацыя, якая зрабіў іх бокоплавы амаль немагчыма яго. Што здарылася з'яўляецца Скадо, што прыязджалі ў былі нестабільныя. Яны былі нетрывалымі. Прычына гэтага была ў Iraqis-- для таго, каб атрымаць 600 кіламетраў з з 300-кіламетровай далёкасці missile-- узяў вага з пярэдняй боегалоўкі, і зрабіў боегалоўка лягчэй. Так што цяпер Patriot спрабуе прыйсці на Скад, і вялікую частку time-- пераважная большасць time-- было б проста лётаць на Скад. -пасля Сістэмных аператараў Patriot зразумеў Patriot міма варот, яны ўзарвалі боегалоўку Патрыятычнага каб пазбегнуць магчымых ахвяр, калі ён дазволілі ўпасці на зямлю. -гэта Было тое, што бачыў большасць людзей як вялікія вогненныя шары ў небе, і зразумелі, як перахапляе з Скад боегаловак. -хоць У начным небе, патрыётаў здавалася, паспяхова знішчыўшы Скад, у Дахране не можа быць няма памылка аб яго выкананні. Там радыёлакацыйная сістэма Патрыятычнага страцілі след якое ўваходзіць Скад і ніколі не запушчаны ў сувязі да праграмнага хіба. Гэта было ізраільцян, якія ўпершыню знойдзены што чым даўжэй сістэма была на, тым больш час разыходжанні сталі. У сувязі з гадзінамі убудаванага ў кампутары сістэмы. -Каля За два тыдні да Трагедыя ў Дахране, ізраільцяне паведамілі Міністэрства абароны што сістэма губляла час. Праз 08:00 бегу, яны заўважылі, што сістэма становіцца прыкметна менш дакладным. Міністэрства абароны адказаў, распавядаць усё батарэйкі Patriot каб не пакінуць сістэм на працягу доўгага часу. Яны ніколі не казалі, што доўгі час быў. 08:00, 10 гадзін, у тысячу гадзін. Ніхто не ведаў. -аккумуляторную Батарэю Patriot размешчаны ў казармах у Дахране і яго недахопы ўнутранага Гадзіны былі на працягу больш за 100 гадзін у ноч на 25 лютага. -It Адсочваць час з дакладнасцю каля адной дзесятай долі секунды. Цяпер дзясятую секунды цікавы нумар таму што яна не можа быць выказана у падвоеным дакладна, што азначае, што яна не можа быць выказана дакладна у любым сучасным лічбавым кампутары. Цяжка паверыць, але выкарыстоўваць гэта ў якасці прыкладу. Возьмем лік траціну. Траціну не можа быць выяўляецца ў дзесятковай дакладна. Траціну з'яўляецца 0,333 адбываецца для бясконцасці. Там няма спосабу зрабіць гэта з абсалютная дакладнасць у дзесятковай. Гэта менавіта тое, праблемы што здарылася ў Patriot. Чым даўжэй сістэма зарабіла, горш памылка часу стаў. -пасля 100 гадзін працы, Памылка ў часе было толькі каля адной траціны секунды. Але з пункту гледжання адраснасці Ракета падарожжа ў 5М, гэта прывяло да адсочванню Памылка больш за 600 метраў. Было б фатальнай памылкай для салдат на Дахране. Што здарылася ў запуск Скад было выяўленыя спадарожнікамі ранняга папярэджання, і яны ведалі, Скад ішоў у іх агульным кірунку. Яны не ведалі, дзе ён ішоў. Цяпер настаў час, каб радара кампанент сістэмы Patriot абараняючы Dhahran, каб знайсці і захаваць трэк надыходзячай ракеты праціўніка. Даследаваны радар быў вельмі разумны. Было б на самой справе адсочвання Становішча Скад а затым прадказаць, дзе ён, верагодна, будзе у наступны раз радар паслаў імпульс з. Гэта называецца вароты дыяпазон. -Тады Раз патрыётаў вырашае дастаткова часу мае прайшоў, каб вярнуцца і праверыць на наступны Размяшчэнне для гэтага знойдзенага аб'екта яна ўзыходзіць. Таму, калі гаворка вярнулася да няправільным месца, тады не бачыць аб'ект. І ён лічыць, што не было ні аднаго аб'екта. Гэта было ілжывае выяўленне і ён падае дарожку. Даследаваны які ўваходзіць Скад знік з экрана радара, і некалькі секунд праз, яго урэзаўся ў казармы. Скад забіты 28. Было апошні звольнены падчас першай вайны ў Персідскім заліве. На жаль, абнаўленне праграмнага забеспячэння прыбылі на досвітку наступнага дня. Праграмнае забеспячэнне недахоп быў быў фіксаваны, закрыццё адзін раздзел у праблемных Гісторыя ракеты Patriot. [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] David J. малая: Вось менавіта для CS50. Мы будзем бачыць Вас у сераду. [МУЗЫКА ГУЛЯЕ]