Дэвід Дж малая: Усе Добра, так што гэта CS50. І гэта відавочна пятніцу. І гэта канец тыдня адзін. Такім чынам, вы, напэўна, памятаеце, што мы спыніліся, у мінулы раз, з захапляльным гатункаў. Прычым мы не падвяргайце гэтую хлусня, што ні Усё роўна, што вы вучылі расце да, 1 дзеліцца на 10, не ў Тое, 0,1 або 0,100 або 0,10000. На самай справе, калі мы складаем гэты Праграма, як мы рабілі ўчора, з, зрабіць недакладнасць, а затым зрабіць кропку, слэш, недакладнасць, мы даведаліся, што гэта тое, што 1 дзеліцца на 10 на самай справе. Так што на самай справе не зусім так. Але гэта робіць намёк на некаторыя фундаментальнае абмежаванне кампутараў. І на самай справе, сярод рэчы, якія мы збіраемся зрабіць сёння зірнуць на тое, чаму гэта мае здарылася, што наступствы гэта мае, як чалавецтва не змагло каб зразумець гэта ў некаторых вельмі сур'ёзна situations-- Вынікам ўстанаўлення які была даволі трагічная і expensive--, а таксама зірнем на тое, як мы можа на самай справе абараняць супраць гэтых відаў абмежаванняў. Так інтуітыўна, мабыць, чаму 1 дзеліцца на 10, у адпаведнасці з майго кампутара Тут, не толькі 1/10, 0,10? Так. Што вы думаеце? Глядачка: падстава сістэмы злічэння адрозніваецца? Дэвід Дж малая: The што? О, корань адрозніваецца? Так што не зусім. Гэта на самай справе больш асноватворнае значэнне для апаратнага забеспячэння. Іншыя думкі? Так. Глядачка: Яны прадстаўляць колькасці па-іншаму? Дэвід Дж малая: Так they-- правай. Яны ўяўляюць сабой лік па-рознаму. Недакладна, па-відаць. Так што is-- Ну, інакш з чаго? Або ад каго? Ад нас? Глядачка: Так. Яны не выкарыстоўваюць дзесятковую сістэма [неразборліва]. Дэвід Дж малая: ОК. Такім чынам, у пэўным сэнсе, яны не выкарыстоўваць дзесятковую сістэму. Пад капотам, усё, сапраўды, двайковы, і гэта звязана, у рэчаіснасці. Але гэта яшчэ больш просты Тлумачэнне, чым гэта. Так. Глядачка: Яны толькі так шмат бітаў. Яны могуць захоўваць толькі да пэўнага Ступень, як з знакаў пасля коскі. Дэвід Дж малая: Так. Гэта тое, што сапраўды становіцца на яго. Аказваецца, што кампутары як правіла, заўсёды будзе толькі выкарыстоўваць абмежаваную колькасць інфармацыі прадстаўляць нешта. Дакладна? У рэшце рэшт, у нас ёсць толькі фіксаваны аб'ём прасторы на цвёрдым дыску. У нас ёсць толькі фіксаваную суму АЗП або кампутарнай памяці. І калі ў вас ёсць толькі фіксаваная сума-то, вядома, вы не можаце на самой справе падлічыць да бясконцасці або любы нумар, які вы хочаце. Вы, накшталт, павінны выбраць тое, што спектр каштоўнасцяў вы збіраецеся падтрымліваць. І так, напрыклад, за тыдзень ці два таму, калі мы казалі пра ASCII, і мы гаварылі аб 8 біт, або байт, так бы мовіць, Найбольшая колькасць мы маглі ўяўляюць 8 біт быў тое, што? 255. І мы можам прадставіць 256 сумарныя значэння але калі мы праводзім адну з іх на 0-- Ну, а калі мы правесці адзін з іх на 0, то найбольшая колькасць ёсць, вядома, 255. Так што атрымліваецца, што гэта выпадак таксама, у гэтым кантэксце. Мы пачалі казаць, у апошні раз, аб лікаў з якая плавае кропкай, якія адрозніваюцца ад цэлых лікаў, у што яны маюць дзесятковую кропку і, спадзяюся, некаторыя нумары пасля гэтага, але яны занадта. Кампутар, як правіла, толькі збіраюся выкарыстоўваць 32 біта, 64 біта, можа быць, прадстаўляць значэнне з якая плавае коскі. Так што, хоць мы выраслі навучання матэматыцы і, ведаючы, што вы можаце абсалютна ёсць бясконцая колькасць лікаў пасля дзесятковай кропкі, а не калі ў вас ёсць канчатковае памяці. Вы, накшталт, ёсць, каб закругліць, або выбраць, якія нумары вы збіраецеся прадстаўляць. І таму вы можаце думаць, у нейкім сэнсе, гэты які з'яўляецца бліжэйшым кампутар набліжэнне да значэння 1/10, што ён можа атрымаць, толькі з 32 ці каля таго біт. І гэта не проста 1/10. Напрыклад, калі я змяніць гэта 1/3, які мы думаем, яшчэ прасцей. Так 1 дзеліцца на 3. Дазвольце мне захаваць файл. Дазвольце мне ісці наперад і перакампіляваць яго. І дазвольце мне зноў запусціць яго. Тут таксама, па-відаць, 1/3 ня 0,3 а затым бясконцую колькасць 3-х пасля гэтага. Вы павінны гэта недакладнасць у канцы. Так мы, людзі, правільна, і што Вы даведаліся, на самай справе, правільна, але мы натыкаючыся супраць некаторых абмежаванняў. І тое, што я думаў, мы робім сёння, з'яўляецца пачаць гледзячы на, шчыра кажучы, Трагічныя наступствы гэтага часам, калі чалавецтва не зусім рэалізаваць для гэтай рэальнасці, і гэтыя абмежаванні. І мы ўбачым шэраг віньетак ад History Channel, які прымае погляд на, як усё пайшло не так. Гэта доўга каля 8 хвілін, і мы вернемся пасля гэтага і зірнуць на сапраўды што яшчэ можа пайсці не так. Калі б мы маглі прыцьміць lights-- [Прайграванне відэа] -Компьютеры, Мы ўсе прыйшлі да разумення у часта хвалюе праблемы, якія ісці з імі. Памылкі, вірусы, і праграмнае забеспячэнне глюкі невялікія кошты плаціць за зручнасці. Але ў высокатэхналагічных і высакахуткасных ваенныя і касмічныя прыкладання, праграмы найменшая праблема быць павялічаны ў катастрофе. 4 Чэрвень 1996, навукоўцы падрыхтавалі запусціць беспілотны Арыян 5 ракета. На яго борце навукова Спадарожнікі прызначаныя ўсталяваць, як менавіта Ўзаемадзейнічае магнітнага поля Зямлі з сонечнымі вятрамі. Ракета была пабудавана для Еўрапейскае касмічнае агенцтва і адарваўся ад свайго аб'екта на ўзбярэжжы Французскай Гвіяны. -І Каля 30 секунд у палёт, яны спачатку заўважыў нешта адбываецца не так. Што сопла былі павароту такім чынам, яны сапраўды не павінны. Каля 40 секунд у палёце, ясна аўтамабіль трапіў у бяду, і вось, калі яны зрабілі рашэнне знішчыць яго. Дыяпазон афіцэр бяспекі з Вялізныя кішкі націснуў кнопку, ўзарвалі ракету, перш чым ён мог стаць пагрозай для грамадскай бяспекі. -Гэта Быў дзявочае ваяж Ariane 5, і яго разбурэнне ўзяў размясціць з-за памылкі убудаваныя ў праграмнае забеспячэнне ракеты. -The Праблема на Арыян было тое, што быў нумар, які патрабуецца 64 біт, каб выказаць, і ён хацеў, каб пераўтварыць гэта 16-бітнае лік. Яны меркавалі, што лік ніколі не будзе вельмі вялікі, што большасць з гэтых лічбаў у 64 бітнае лік было 0 '. Яны не мелі рацыю. -The Няздольнасць аднаго праграма, каб прыняць выгляд нумар генеруецца іншы быў у корані збою. Распрацоўка праграмнага забеспячэння стала вельмі затратная частка новай тэхналогіі. Арыян 4 ракеты былі вельмі паспяховым, так праграмнага забеспячэння створана для таго, быў таксама выкарыстаны на Ariane 5. -The Асноўная праблема ў тым, што Арыян 5 быў хутчэй, паскараецца хутчэй. І праграмнае забеспячэнне было ня склалі за гэта. -The Знішчэнне ракеты быў велізарны фінансавая катастрофа, Усё з-за памылкі праграмнага забеспячэння хвілін. Але гэта быў не першы час праблемы пераўтварэння дадзеных мучыла сучасныя тэхналогіі ракеты. -У 1991 з пачаткам вайны ў Персідскім заліве ў першых, ракета Patriot выпрабаваў падобнага роду праблемы пераўтварэнні нумар. У выніку 28 чалавек, 28 амерыканскіх салдат былі забітыя і каля 100 параненыя, калі Патрыёт, які павінен быў для абароны ад ўваходзяць бокоплавов, не ўдалося звольніць ракету. -Калі Ірак уварваўся ў Кувейт і Амерыку запусціў Бура ў пустыні ў пачатку 1991 года, Patriot ракетныя батарэі былі разгорнутыя каб абараніць Саудаўскую Аравію і Ізраіль з іракскіх ракетных нападаў Скад. Патрыёт гэта ЗША, сярэдняй далёкасці зямля-паветра сістэмы вытворчасці кампаніі Raytheon ст. -Памер Перахопнікаў Patriot, Сам, аб, доўга прыкладна 20 футаў. І ён важыць каля 2000 фунтаў. І гэта нясе боегалоўку about-- Я думаю, што гэта прыкладна 150 фунтаў. І боегалоўка, сам, гэта выбуховае рэчыва, якая мае фрагменты вакол яго. Кажух боегалоўкі прызначаны, каб дзейнічаць як карцеч. Даследаваны ракеты ажыццяўляецца, 4 за кантэйнер, і транспартуюцца паўпрычэпа. -The Патрыёт супраць ракетнай сістэмы ўзыходзіць па крайняй меры, 20 гадоў. Першапачаткова ён быў распрацаваны як зенітна-ракетнага збіваць варожыя самалёты. У час вайны ў Персідскім заліве ў першых, калі што вайна прыйшлі разам, Армія хацеў выкарыстаць яго для збіць бокоплавов, а не самалёты. Іракская гурт не столькі праблемы, але армія хвалявалася пра бокоплавов. І так яны спрабавалі абнавіць Patriot. -Intercepting Ворага Ракета падарожжа ў Маха пяць збіраўся быць досыць складанай задачай. Але калі Патрыёт быў дастаўлены ў эксплуатацыю, Армія не вядома пра Іракскі мадыфікацыя, якая зрабіла іх бокоплавы амаль немагчыма патрапіць. -Што Здарылася, з'яўляецца бокоплавы, што ішлі ў, былі нестабільнымі, яны былі пагойдваючыся. Прычына гэтага, быў іракцаў, для таго, каб атрымаць 600 кіламетраў з дыяпазон ракеты 300 км, узяў вага з пярэдняй боегалоўкі і зрабіў боегалоўка лягчэй. Так што цяпер, Патрыёт спрабуе прыйсці на ветры, і вялікую частку часу, пераважная большасць з Час, было б проста лётаць Скад. -пасля Сістэмных аператараў Patriot зразумеў Патрыёт міма брамы, яны ўзарвалі боегалоўку патрыёта, у каб пазбегнуць магчымых ахвяраў, калі ён быў падаць на зямлю. -Гэта Было тое, што бачыў, большасць людзей, гэтыя вялікія вогненныя шары ў небе, і зразумелі, як перахапляе Скад боегаловак. Хоць у ноч неба, з'явіліся патрыёты каб быць паспяхова руйнуючы бокоплавов, у Дахране, не можа быць ніякай памылкі аб яго выкананні. Там, радар сістэма Патрыёта страціў якое ўваходзіць Скад, і ніколі не запушчаны, з-за праграмнага забеспячэння недахоп. Гэта быў ізраільцян, якія ўпершыню выяўлены што больш сістэма была на, тым больш час разыходжанні стаў, у сувязі з гадзінамі убудаванага ў кампутары сістэмы. -О За 2 тыдні да Трагедыя ў Дахране, Ізраільцяне паведамілі Міністэрства абароны, што сістэма губляючы часу, што пасля прыкладна 8 гадзін працы, яны заўважылі, што сістэма была становіцца прыкметна менш дакладнымі. Міністэрства абароны адказаў кажу ўсё батарэйкі Patriot не пакідаць сістэмы на працягу доўгага часу. Яны ніколі не казалі, што доўгі час было. 08:00? 10:00? 1000 гадзін? Ніхто не ведаў. -The Батарэі Patriot размешчаны ў казармах у Дахране, і яго недахопы ўнутранага гадзіны, быў на больш чым 100 гадзін у ноч на 25 лютага. -Гэта Адсочваецца час з дакладнасцю прыкладна 1/10 секунды. Цяпер 1/10 секунды знаходзіцца цікавы нумар таму што ён не можа быць выяўляецца ў двайковым, дакладна. Што азначае, што не можа быць выказана, дакладна, у любым сучасным лічбавым кампутары. Цяжка паверыць, але выкарыстоўваць гэта ў якасці прыкладу. Давайце лік, 1/3. 1/3 не можа быць выказана у дзесятковай, дакладна. 1/3 0.333 адбываецца бясконцасці. Там няма ніякага спосабу, каб зрабіць гэта, з абсалютная дакладнасць, у дзесятковай. Гэта дакладна такая ж Праблема, што адбылося ў Patriot. Чым даўжэй сістэма працавала, то горш памылка часу стаў. -пасля 100 гадзін працы, памылка У той час быў толькі прыблізна 1/3 секунды. Але з пункту гледжання арыентацыя на Ракета падарожжа ў Маха 5, гэта прывяло да адсочвання Памылка з больш чым 600 метраў. Гэта будзе фатальная памылка для салдат на Дахране. -Што Здарылася, з'яўляецца запуск Скад быў выяўленыя з дапамогай спадарожнікаў ранняга папярэджання, і яны новыя, што Скад быў у бліжэйшыя іх агульным кірунку. Яны не ведаюць, дзе ён ішоў. -Гэта Быў цяпер да радара кампанент сістэмы Patriot, абароны Дахране, каб знайсці і захаваць трэк надыходзячай ракеты праціўніка. -The Радар быў вельмі разумны. Гэта будзе на самой справе адсочвання пазіцыя па ветры а затым прадказаць, дзе ён, верагодна, будзе, у наступны раз, то радар паслаў імпульс з. Гэта называецца вароты дыяпазон. -Тады, Калі Патрыёт вырашае дастаткова часу мае перадаецца вярнуцца і праверыць на наступны месца для гэтага выяўленага аб'екта, яна ідзе назад. Так што, калі ён вярнуўся да няправільным Месца, тады не бачыць аб'ект і не вырашыць, што не было Аб'ект, гэта была ілжывая выяўлення, і падае трэк. Які ўваходзіць Скад знік з экрана радара, і некалькі секунд праз, яго урэзаўся ў казармы. Скад забітыя 28 і быў апошнім адным звольнены падчас Першай вайны ў Персідскім заліве. Трагічна, што абноўленае праграмнае забеспячэнне прыбыў у Дахране на наступны дзень. Праграмнае забеспячэнне было недахоп было зафіксавана, закрыццё адна кіраўнік у праблемных Гісторыя ракеты Patriot. [КАНЕЦ ПРАГЛЯДУ] Дэвід Дж малая: Такім чынам, мы будзем глядзець на некаторыя аналагічныя абмежаванні ў толькі крыху. Але спачатку, давайце пераход да вашага ведама некалькі Вось. Так одно-- гэты ўік-энд, ёсць будзе супер раздзелы, якія прызначаны, каб выцесніць рэгулярна запланаваныя ўчасткі, якія пусцяць у тыдзень праз. Зірніце на вэб-сайце CS50 ў для атрымання дадатковай інфармацыі пра іх. Яны таксама будуць здымацца і транслявацца жыць для тых, хто не змог прысутнічаць. Праблема ўсталяваць 1 на Сайт вядома ўжо, і мы зірнем на што ў толькі крыху. І працоўныя гадзіны таксама будзе размясціць гэты панядзелак па чацвер. Так што гэта быў самы кананічны Праграма, якую мы глядзелі на апошні раз. Гэта як просты Праграма вы можаце напісаць у C, і нават гэта крыху адважнае заяву. Дакладна? Таму што вельмі шмат ўяўная складанасць гэтага. Такім чынам, давайце зірнем на тое, што некаторыя з гэтых элементаў былі і затым паспрабаваць забяспечыць псіхічнае мадэль, як Гэтыя найпростыя праграмы працаваць, а затым мы пачнем погляд на рэчы яшчэ больш складаным. Так гэтая лінія тут, падкрэсліў зараз, ў жоўты, тое, што мы казалі, у апошні раз, што гэта робіць для нас? Якая мэта ён служыць? Любы з далей таму? Так. Глядачка: [неразборліва] Дэвід Дж малая: Добра. Так што гэта дае вам доступ на каманды, або давайце называюць іх функцыі, што хтосьці яшчэ пісаў, што абвешчаныя, так бы мовіць, у нейкі іншы файл. Такім чынам, мы будзем бачыць менавіта тое, што .h файл гэта супраць файла .c, у рэшце рэшт. Але цяпер, проста ведаю, што Printf, напрыклад, сярод функцый, якія былі заявіў у нейкай іншай файл, дзе-то яшчэ на цвёрдым дыску, што аблокі дазваляе нам атрымаць доступ да Printf і выкарыстоўваць яго без неабходнасці зноўку вынаходзіць што кола сябе. Між тым, галоўны. Што было аналагам асноўнага, на мінулым тыдні? Так. Глядачка: Зялёны сцяг кнопкі. Дэвід Дж малая: Так. Драпіны гадоў, калі зялёны сцяг кнопкі. Гэта як паззл што пінае рэчы з. І так аналагічна, зрабіў свет вырашыў некалькі гадоў таму, што ў C, і куча іншых мовах, калі вы хочаце, каб напісаць праграму Ваш першы функцыя ўжо называць, галоўны. І ён павінен выглядаць наступным чынам. Але мы вернемся, у іншы раз, да чаго, INT, і пустата, значыць у гэтым кантэксце. У цяперашні час, фігурныя дужкі з'яўляюцца свайго роду з, як кавалак галаваломкі формы нуля ў які Інкапсулюйце некалькі радкоў. І сярод на лініях тут, гэта адно тут. Printf функцыя, мэта якога ў жыццё для друку адфарматаваную радок. І адфарматаваць, я маю на ўвазе вас можна падключыць значэнняў запаўняльнікаў, і вы можаце паказаць, колькі дзесятковай кропкі, колькі лікаў для друку пасля дзесятковай кропкі і таму падобнае. І Printf, вядома, займае адно або больш аргументаў або параметраў, інакш вядомы, больш проста, у якасці ўваходных дадзеных. Так Printf, як шмат Функцыі, прымае ўваходы. І гэтыя ўваходы абняў двума дужкамі тут. А ўнутры тых адзін уваход. Гэта радок, як мы называлі яго, якая з'яўляецца проста паслядоўнасць сімвалаў, як слова, або фразу, або ў цэлым эсэ, нават у падвойныя двукоссі. І гэта тое, што адбываецца ў ўплываць на Паводзіны Printf таму што, вядома, гэта проста звычайная функцыя друку. Гэта не будзе ведаць, што для друку, калі вы не скажаце яму. А потым, некаторыя дробязі. Што мы гаворым гэта дзіўна паслядоўнасць знакаў? Так. Глядачка: Новая лінія. Дэвід Дж малая: Новая лінія. Так што атрымліваецца, вы не можаце проста націснуць, увядзіце, калі вы пішаце праграму. Як правіла, кампілятар будзе атрымаць трохі збянтэжаныя тым, што вы маеце на ўвазе. Хутчэй за ўсё, у вас ёсць у літаральным сэнсе кажуць, дай мне новую лінію тут. І так / п тое, што мы звычайна выклікаць кіраўнік сімвал. Так п, для новай лініі. І кампілятар ведае што, калі ён бачыць, / п, ён павінен фактычна выклікаюць кампутар, У канчатковым рахунку, або Printf, у дадзеным выпадку, раздрукаваць фактычны новага лінія, як, патрапіўшы ў, увядзіце, на клавіятуры. І, нарэшце, тое, што мы казалі гэты кавалак сінтаксісу для? Што яна сабой уяўляе? Так. Глядачка: [неразборліва] Дэвід Дж малая: Гэта проста канец лініі. Гэта канец заявы. І разумею, што мы не пакласці іх усюды. Мы, вядома, не давайце іх на канцах кожнага радка. Напрыклад, няма ні на Першая лінія, няма ні на лініі з, галоўным чынам, няма ні пасля фігурных дужках, але вы пачынаеце бачыць і атрымаць знаёмыя з, дзе ён заклікаў да. І гэта амаль заўсёды пасля функцыі патэлефанаваць ці заяву, некаторыя дзеянні што вы на самой справе прымае. І цяпер ведаем, асабліва калі сярод тых, хто менш камфортна, гэтыя віды дурных рэчаў што вы будзеце ў канчатковым выніку выпадкова стукаць Ваша галава да сцяны над. Таму што вы будзеце лагічна упэўнены, у нейкай праблемы Вы вырашылі для задачы Набор і чорта толькі не будзе збіраць або нават бегчы. І так часта, на ранняй стадыі, гэта будзе быць таму, што вы прапусцілі дужкі, ці вы прапусцілі кропку з коскі. І так проста быць уважлівымі з гэтых відаў рэчаў, і не спрабаваць атрымаць расчараваныя ім, таму што вельмі хутка робіць гэта стаць старая капялюш. Але гэта вельмі лёгка атрымаць расчараванне на ранняй стадыі, у якасці выніку. Так што цяпер, давайце зірнем на тое, як гэтая лінія на самай справе працуе а затым паглядзіце на трохі больш складаным. Такім чынам, мы маем тут, то уменне маляваць на экране. І давайце выкажам здагадку, што гэта мой экран кампутара, але я пішу, прывітанне праграму, і я не рэалізаваны, Printf. Хтосьці рэалізаваў, Printf. Хто хацеў бы прэтэндаваць на рэалізавалі, Printf? Калі мы можам? Добра, што ваша імя? СТУДЕНТ 1: [? Copal. ?] Дэвід Дж малая: Copal, давай да. Давай до. Добра. Такім чынам, мы маем, вось, некаторыя тэгі імя, так як мы будзем рабіць у невялікую гульню гэта. І мы звяжамся з Вамі, Printf. І калі вы хочаце, каб прыехаць сюды, тое, што я толькі што намалявалі на экране, гэта даволі проста, ёсць я, гэта. Добра, так, прывітанне, мяне клічуць, Printf, калі вы хочаце, каб пакласці, што на. Добра. І калі вы можаце ісці стэнд на экране кампутара як быццам вы знаходзіцеся функцыя, прыйшоў з гэтай кампутарнай сістэмы. І ваша мэта ў жыцці на самай справе нешта надрукаваць. Але гэтак жа, як праграмы мы толькі што на экране, тут, мы збіраемся мець, каб на самай справе даць вам некаторы ўклад. А так, калі мой ўваход, тут, па-відаць, тое, што перадаецца PRINTF, давайце выгляд здзекавацца яго, як гэта. Я збіраюся напісаць на літаральна паперка, "прывітанне, свет", Зваротная касая рыса Н. І быць зразумела, што Я толькі што намалявалі на гэтай паперцы, выглядае як гэта. Так што, калі я запускаю гэтую праграму, і гэта жоўтая лінія кода запускаецца на выкананне, Гэта як калі б я, праграмы прывітанне, я перадаўшы частку уваход з з функцыяй што нехта напісаў. І калі вы, з вашым пальцам, мог на самай справе, з пальцам, маляваць на экране тое, што гэта вы былі перададзеныя, эфект у канчатковым выніку гэта дакладна даведацца, што на экране. І маленькі куток выпадак. І добра, што мы не павінны бачыць The, новая лінія, у гэтай кропцы. Было б няправільна для вас відавочна намаляваць сімвал новага радка. Але калі мы працягвалі пісаць словы на экранам, яны будуць у канчатковым выніку ніжэй. Так што дзякуй вам вялікі, але прытрымлівацца тут толькі для аднаго моманту. Цяпер нам трэба адно іншае Праца на грамадскіх пачатках, калі б мы маглі, што збіраецца павінны гуляць ролю of-- Гэта толькі людзі, у аркестры Прама цяпер. Як about-- ОК. Прама тут. Давай до. Ваша імя? СТУДЕНТ 2: [? Ivay. ?] Дэвід Дж малая: Выбачайце? СТУДЕНТ 2: [? Ivay. ?] Дэвід Дж малая: Ітан, давай да. Няма? Хіба я што няправільна, нават пасля сказаў, што гэта ў два разы? Давай до. Цяжка пачуць тут. ОК. І я вельмі шкада, што ваша імя? СТУДЕНТ 2: [? Ivay. ?] [? Дэвід Дж малая: Ivay. ?] ОК. Зараз, калі вы не розум, вы GetString. СТУДЕНТ 2: ОК. Прахладны. Дэвід Дж малая: Так што, калі вы хочаце стаяць тут на імгненне, давайце зірнем на трохі больш складаная праграма, што у цяперашні час мае тры радкі кода. Такім чынам, мы маем адзін, назавіце сваё імя, выкарыстоўваючы Printf; два, заклік да GetString, суправаджаецца прызначэннем на Пераменная называецца, радок з, або называюць гадоў; а потым яшчэ выклік, Printf, але на гэты раз з двума ўваходамі. Такім чынам, мы ўжо зрабілі стан Ваша імя, дакладней, мы ў ужо зрабіў званок PRINTF. Так што я збіраюся напісаць, дзяржаўных сваё імя. І так, што я збіраюся прайсці, Printf, у імгненне, гэта даволі проста, гэта. Так што, калі вы хочаце, каб ісці наперад і рабіць гэта на экране, гэта ваш ўклад у цяперашні час. Добра. І забудзьцеся радок, у нас зараз ёсць наша ўласная радок кода тут. Такім чынам, у, GetString, мы павінны на самай справе назваць, GetString. Так ваша мэта ў жыцці, каб проста хадзіць з ў аркестр, калі б вы маглі, і атрымаць чыё-то імя. Але давайце даць вам тое, каб пакласці яго на. Калі вы хочаце, ідзіце наперад і атрымаць радок, атрымаць чыё-то імя на тым, што паперка, калі б вы маглі. Добра. І мы бачым, у імгненне, чыё імя мы атрымліваем. Між тым, што я збіраюся ёсць гатовы, гэта чысты ліст з паперы, у якіх, я збіраюся захоўваць любы значэнне яго з'яўляецца тое, што GetString вяртаецца да мяне, Я, быўшы пераменная радок называецца, с. Добра. Так што вы тут? Нік. Добра. Такім чынам, мы маем імя Nik тут. Так што гэта тое, што ў літаральным сэнсе быў вернуты для мяне, так бы мовіць, па GetString. Я, у цяперашні час, я збіраюся выканаць левай баку гэтага выказвання, дзе я проста скапіяваць ўніз, для сённяшніх мэтаў, Нік. Так што цяпер, у мяне ёсць пераменная называецца, з, захоўвання імя для Nik. Я ўжо перадаў Printf, папярэдні аргумент. Але ў нашым трэцім і канчатковым лініі Код, я на самой справе трэба рукі Printf што-то трохі different-- "прывітанне,% s," зваротны слэш п. І таму апошняя радок я збіраюся каб send-- апошняе, што я збіраецца запісаць зараз, заключаецца ў наступным. Такім чынам, два радкі кода, або а ў апошнім радку кода, заклікі да двух inputs-- Адзін з іх, гэта, і два, гэта. Так што, калі наша функцыя Printf Зараз можна прымаць іх у якасці ўваходных дадзеных, дазвольце мне ачысціць экран для вас. На самай справе няма, вы можаце пайсці наперад. Мы пакінем яго, паколькі ён знаходзіцца на той жа самой праграмы. Мы павінны ўбачыць, прывітанне, Нік. Добра. Так што гэта было даволі мала абручы, каб скакаць праз, проста пісаць, пакажыце вашыя імя, і, прывітанне, Нік. Але гэтая простая ідэя перадачы паведамленняў, ўваходнага і выходнага між іншым атрымання, менавіта мадэль, якую мы будзем мець нават для самых складаных функцый. Так што дзякуй вам вялікае вам абодвум. У нас ёсць выдатны стрэс Мяч тут для вас. І дзякуй нашай GetString і PRINTF добраахвотнікі, так. Дзякуй. Добра. Дзякуй вам абодвум. Такім чынам, мы гаворым пра да гэтага часу, у асноўным, аб радках. І высвятляецца, што на самой справе З можа зразумець некалькі розных тыпаў дадзеных. На самай справе, давайце Паглядзіце на гэтыя тут. Так C, і шмат моў, разумець рэчы, званыя сімвалы. Паўкокс, як правіла, адзін байт, ці восем біт. І гэта ўяўляе сабой адзін знак, як літара A, або капіталу Ліст, або малая лiтара А, або клічнік, або любы сімвал, вы можаце друкаваць на клавіятура, а часам і больш. Мы таксама здарыцца ўбачыць паплаўкі. Паплавок, наогул, А 32-бітавы значэнне, ці чатыры байта таму што зноў, адзін байт восем бітаў. Такім чынам, паплавок значэнне з якая плавае кропкай, што-то з коскі. І на самай справе, вось што фільм была размова аб тым, калі яны казалі пра плавае Значэння кропак, некаторы фіксаваны лік бітаў выкарыстоўваецца для прадстаўлення рэчыўнага ліку. Але ёсць таксама рэчы, званыя двайнікі. Яны існуюць у Java, калі вы ўзялі АСК ТП, і двайны, як імя, на шчасце, мяркуе, у два разы больш, як паплавок. Гэта ўсё яшчэ сапраўдны лік, ён проста мае больш бітаў з якой будзе ўсё больш дакладным, або для захоўвання яшчэ большай колькасці. INT лёгка. Мы гаварылі пра тое, што ў апошні раз. Гэта проста лік. І гэта наогул 32 біт, ці чатыры байта. І так, калі ў вас ёсць, давайце зараз паглядзім, 32 bits--, і мы зрабілі гэта ў тыдзень 0, вельмі briefly-- калі ў вас ёсць 32 біта, тое, што самая вялікая Колькасць можна прадставіць як цэлае? Дайце або ўзяць? Гэта як 4 млрд, і гэта толькі калі мы прадстаўляючы толькі станоўчыя колькасці. Калі ў вас ёсць 32 біта, і вы хочаце, каб прадстаўляць адмоўныя лікі, а таксама, ваш дыяпазон, па сутнасці, адмоўны 2 млрд на станоўчы 2 млрд. Але ў цэлым, мы пачнем пры 0 падняцца на 4 млрд. Вы не павінны ведаць, дакладна, але мы можам пераканацца ў гэтым, на самай справе, калі я проста адкрыць невялікі калькулятар, тут. Я магу зрабіць 2 32, і гэта дакладна, як вялікі, колькі значэнняў вы можаце ўяўляюць, з 32 бітамі. І гэта прыкладна 4 млрд. Такім чынам, мы будзем трымаць, бачачы, што колькасць у некалькіх розных месцах. Але калі вам трэба больш нумары, чым гэта, Аказваецца ёсць тое, што называецца даўным. І доўга доўга як правіла, 64 біта, якія азначае, што гэта на парадак нават больш, чым у міжнар. Таму я не магу нават вымавіць найбуйнейшым нумар, які вы можаце прадстаўляць, але гэта прыкметна больш. Цяпер, як у бок, гістарычна, калі INT 32 біт, і доўга доўга 64 біта, як вялікі доўгі, не доўга доўга? Можна падумаць, што гэта ўжо, чым Int але, магчыма, менш працяглы, чым доўгі доўгі, але гэта на самай справе залежыць. І так атрымліваецца адзін расчараванняў таксама з напісання кода на некаторых сістэмах, з'яўляецца тое, што не ўсе з гэтых тыпаў дадзеных ёсць загадзя вызначаныя значэнні. Часам гэта гэта шмат бітаў. Часам гэта што шмат бітаў. Такім чынам, вы на самой справе трэба ведаць, часам, якія апаратныя вы працуеце праграмнага забеспячэння на. На шчасце, іншыя мовы і іншыя тыпы дадзеных, якія ў цяперашні час існуюць, дазволіць вам быць больш дакладным. Ну, мы бачылі радок, і мы бачылі, лагічны, таксама але, аказваецца, тыя, прыходзяць Толькі з бібліятэкай CS50. Так што тыя, якія не пабудавалі у С. Тыя замест прыйсці ў гэтым файле, званым CS50.h, што мы ў канчатковым выніку адхіліце слаёў. Але цяпер, яны проста дадатковыя тыпы дадзеных. Лагічнае значэнне з'яўляецца сапраўдным або ілжывых, і Радок ўяўляе сабой паслядоўнасць знакаў, як слова. Цяпер Printf, мы бачылі, мае запаўняльнікі,% S з'яўляецца адным. І вы маглі б, каб цяпер, вывесці з гэтых прыкладаў, іншых, як вы маглі б запаўняльнік для розных тыпаў дадзеных. Напрыклад, зрабіць здагадку, калі вы хацеў, каб раздрукаваць адзін сімвал з дапамогай Printf, запаўняльнік, верагодна,% гр. І калі вы хочаце, каб раздрукаваць лік з запаўняльнікам,% I. % LLD гэта даўным дзесятковы значэнне, але доўга доўга, так што карты да гэтага. І тады% F для плывучых значэнне пункту або для падвойнага, так што часам яны паўторна выкарыстоўваць у розных кантэкстах. Такім чынам, мы будзем бачыць і выкарыстоўваць некаторыя з тых, хто на працягу доўгага часу. І Printf і іншыя функцыі таксама Кіравальныя паслядоўнасці падтрымку іншых, а часам, яны неабходныя. Так зваротны слеш н новая лінія. Зваротная касая рыса т, хто-небудзь хочаце прыняць ўдар? Глядачка: Таб. Дэвід Дж малая: Таб. Так што, калі вы сапраўды хочаце раздрукаваць ўкладку, ня фіксаванае колькасць прабелаў, але фактычна Ўкладка характар, вы не трапляеце, закладка, на клавіятуры, як правіла ,, вы на самой справе зваротнай касой т. Зваротная касая рыса двайны двукоссі, чаму я заўсёды хачу, што? Дакладна? Чаму я не магу Проста увядзіце падвойныя двукоссі на клавіятуры? Глядачка: Таму што, у адваротным выпадку, гэта будзе думаць, што гэта канец з падабаецца ваш друку [? Тэкст. ?] Дэвід Дж малая: Дакладна. Памятаеце, з нашай PRINTF прыклады, калі мы праходзілі ў PRINTF на ўваходзе, злева ад гэтага радка ўводу і справа ад гэтага ўваходу Увесну, вядома, быў двайны двукоссі. Калі ваш уласны ўваход мае падвойнае Цытата ў сярэдзіне, што кампутар можа патэнцыйна заблытацца, каб, робіць гэтую падвойныя двукоссі ставяцца да сярэдзіны? Ён належыць з левага? Ён належыць з правага? І так, калі вы хочаце, каб зрабіць яго супер ясна, у вас зваротная касая рыса двайны двукоссі, так што гэта бег, так бы мовіць, і гэта не сплаўляючы нешта іншае. І ёсць некалькі іншых тут, Зваротная касая рыса г, адзінарныя двукоссі, 0, што мы можам убачыць на працягу доўгага часу, а таксама. А цяпер, як наконт функцый? Так дзеянняў, якія мы можам зрабіць, такім чынам, далёка на гэтай мове, З, добра, мы бачылі, Printf, вядома, і ўсё з іншых на экране, вось, што мы будзем выкарыстоўваць для Першы курс у некалькі тыдняў, толькі прыходзяць, калі бібліятэка CS50. І яны робяць гэта нашмат прасцей, у З фактычна атрымаць карыстацкі ўвод. Аказваецца, што ў C, і адкрыта на некалькіх мовах, гэта рэальная боль у шыі, каб зрабіць нешта простае, як хуткае карыстальніка для клавіятуры, для яго ці яе ўвод. І таму гэтыя функцыі робяць яго лягчэй. І гэта таксама мае памылку праверкі па ўсім, так што, калі вам Нагадаем, у сераду, мы ўбачыў, паўторыце спробу, папярэджанне, калі я не супрацоўнічала, і я набраў слова, а не нумар? Мы зрабілі цяжкую рана на пераканацца, што карыстальнік ўзаемадзейнічае. Але гэта ўсяго толькі трэніроўка Колы, што мы ў канчатковым выніку, і хутка, зняць. Такім чынам, каб рэзюмаваць, то, давайце зірнем, гэтак жа, як мы гэта рабілі з нуля, у некаторыя кананічныя канструкцыі ў С. Гэта павінна, накшталт з, быць беглы тур, проста так, што ў вас ёсць спасылка і што вы бачылі рэчы ў першую чаргу. Але тады мы будзем глядзець на фактычнае кадаванне выкарыстоўваць некаторыя з гэтых будаўнічых блокаў. Гэтак жа, як у пустым, калі мы хацелі заявы, сказаць ці пачакайце, у C, у нас ёсць функцыі, а, як Printf. Калі мы хочам, каб выказаць стан ў C, гэта падобна, у духу, да гэтага кавалак галаваломкі, што паглядзеў, як гэта ў драпіна. Але замест гэтага, мы літаральна напісаць, калі. А потым, у дужках, мы паставілі ўмову, дзе гэта ўмова, што мы будзем тэлефануйце, зноў жа, лагічны выраз. І зноў жа, гэта свайго роду псевдокод. І, на самай справе, // гэта каментар. Гэта проста ангельскія словы да сябе. Але гэта агульная структура, калі, стан. Але мы ўбачым, бетон прыклады ў хвіліну. Калі вы хочаце, каб мець двухбаковая відэлец ў дарозе, гэтак жа, як мы зрабілі з нашай добраахвотнікам на Серада, вы можаце мець, інакш, калі. І калі вы хочаце, каб мець трэці і канчатковае стан, або сітуацыя, па змаўчанні, Вы можаце мець проста яшчэ блок, там. І сапраўды гэтак жа, з лагічных выразах, Вы, можа, і, іх разам. І мы ўбачылі ў сераду, што гэта не адзін Ампэрсанд, гэта два, па прычынах, больш нізкага ўзроўню, якія мы ў канчатковым выніку ўбачыць і гуляць. Ці-юць рэчы разам на 2 вертыкальныя паласы. На клавіятуры ЗША, гэта як правіла, адным з ключавых з клавішай пераключэння вышэй Ваш Увядзіце ключ ці клавішу вяртання. Тады ёсць гэтыя рэчы, якія мы будзем выкарыстоўваць, можа быць, адзін ці два разы. Яны функцыянальна эквівалентныя тое, што вы можаце зрабіць з, калі, інакш, калі інакш, калі яшчэ, пабудаваць, але яны называюць перамыкач. Яны выглядаюць вельмі розныя, але мы бачыць у некаторых з нашага кода размеркавання, для будучыні Пастаўленая задача, хутчэй за ўсё, што часам проста прыгажэй спосаб выразы цэлае куча умоў, не маючы шмат фігурных дужках і шмат дужак і водступаў. Але яны не даюць нам больш не энергіі, чым мы ўжо. А цяпер завесы. А гэта, мы будзем глядзець на ледзь больш павольна. Але тады, мы пачнем іх выкарыстоўваць, асабліва для тых, хто ўжо знаёмы. Гэта кананічнае чынам, калі неверагодна аркан чынам, каб напісаць цыкл у З Цяпер пятля ў пустым было даволі простая. У вас ёсць, назаўжды, блок. У вас ёсць, Паўтор, блок з проста нумар, які вы павінны ўвесці ў. І з, для завесы, вы можаце рэалізаваць абодва гэтых ідэй, але гэта крыху больш тэхнічны характар. Але, шчыра кажучы, гэта таксама адносна просты. Пасля таго, як вы ведаеце, парадак аперацыі, вы ў літаральным сэнсе толькі збіраецеся падключыць значэнняў і сказаць кампутар, што рабіць. Дык вось прыклад. Гэта цыкл, які, цалкам проста, лічыць ад аднаго да колькасці праз іншую. І толькі зірнуўшы у яго, нават калі ў вас ёсць няма папярэдняга вопыту з гэтая мова, які нумар гэта, верагодна, пачаць адлік з? ОК, 0. І я мяркую, што гэта таму, што вы бачыць, што ёсць больш INT і я, які з'яўляецца зменнай. Гэта ініцыялізуецца ў 0. А потым, падобна, мы перадаем Printf, значэнне. І на самай справе, я зрабіў трохі памылку друку тут. Але гэта лёгка выправіць. Дазвольце мне дадаць, я тут. Цяпер у нас ёсць PRINTF істота Прайшло тое значэнне запаўняльніка. І тое, што адбываецца разлічваць праз? АЎДЫТОРЫЯ: 50. 50. 49. Дэвід Дж малая: 49. Так 50, на першы погляд, здаецца, правільна. Але, аказваецца, будзе наш стан, што мы трымаем праверкі. І мы збіраемся спыніцца, як толькі ня я больш не менш, чым 50. Так што гэта пятля, наадварот, павінны выканаць, так доўга, як я менш за 50. Але як толькі яна становіцца 50, або 51, ці яшчэ горш, ён павінен спыніцца аўтаматычна. Добра. Так што на самай справе тут адбываецца? Так што гэта парадак аперацыі па пятлі. Адзін з іх, у вас ёсць Так званы ініцыялізацыі. Гэты жоўты вылучаны фрагмент кода выконваецца першым, і гэта мае эфект, што, за Серада, вы, верагодна, сабе ўявіць. Гэта стварае зменную I і яго крамы ў гэтай зменнай значэнне 0. Так я гэта 0 ў гэтай кропцы ў гісторыі. Наступнае, што адбываецца ў гэтай канструкцыі, тым, што ўмова атрымлівае правераны. Так што я праверыць адразу, гэта я менш 50? І, вядома, адказ на дадзены момант з'яўляецца, вядома ж, так. Ды таму, што я = 0, і гэта, безумоўна, менш, чым 50. Тады тое, што адбываецца, з'яўляецца тое, што гэта радок кода, выконваюцца. І на самай справе, калі ёсць некалькі радкоў кода ў гэтых фігурных дужках, Усе яны атрымліваюць выкананы адзін за адным. І ў сілу тут, па-відаць, каб раздрукаваць лік я, што будзе быць 0, а затым 1, а затым 2. Але чаму? Чаму гэта атрымаць павялічваецца? Ну, чацвёрты рэч, якая адбываецца тое, што гэты сінтаксіс запускаецца на выкананне пасля коскі. я ++ з'яўляецца скарочаны спосаб казаць; ўзяць значэнне I, і дадаць да яго 1; і затым у наступны раз, дадаць 1 да яго; і ў наступны раз, дадаць да яго 1. Так што, калі мы працягваць ісці, што адбудзецца Далей ідзе Я не збіраюся ініцыялізаваць я калі-небудзь зноў. Калі я ўсё ініцыялізацыі я да 0, гэты прыклад ніколі не скончыцца, таму што я б затрымаўся на 0. Але тое, што адбываецца, дык гэта што ўмова будзе правярацца, радок кода будуць выкананы, я будзе павялічвацца, стан будзе правярацца, Код будуць выкананы. І ён працягваў на ровары зноў, і зноў, і зноў, Пакуль я не індукуе ++ значэнне 50. Стан потым кажа, 50 менш за 50? Адказ, вядома, няма, і так што ўвесь код спыняе выкананне. І калі ў вас ёсць больш кода на экране унізе, гэта тое, што адбудзецца далей. Гэта выскоквае з гэтых фігурных дужках і працягвае друкаваць больш пасля гэтага. Такім чынам, у цяперашні час жарт, з факстрота, што Вы, магчыма, цяпер разумею. Гэта заўсёды пацешна. Гэта як хіхікае выгляд прасочваюцца, а потым разумееш, вы не павінны смяяцца над гумару, як гэта. Але ёсць некаторыя вынас тут, педагагічна, таксама. Так што атрымліваецца, што я адсутнічае кавалак сінтаксісу, або Факстрот-х прапускаючы кавалак сінтаксісу тут. Чаго не хапае, што мы мелі і ў любой іншай, напрыклад, да гэтага часу? Вярнуцца, ёсць, так нешта яшчэ, што мы вернемся да хуткім часе. Чаго не хапае, праўда? Так. Глядачка: The ініцыялізацыя [неразборліва]. Дэвід Дж малая: ОК. Так што, так. Так на самой справе, гэта is-- Ну, і колькасць ініцыялізуецца наверсе, ці, хутчэй, заявіў наверсе. Так што гэта яшчэ адзін спосаб зрабіць гэта. Але не ў адным радку яна дзейнічае, хоць. Як тут? Глядачка: Гэта фігурныя дужкі? Дэвід Дж малая: Так. Так фігурныя дужкі адсутнічаюць. Але гэты код, я маю на ўвазе, да іх гонару, на самай справе, сінтаксічна правільным. Аказваецца, вы не патрэбныя фігурныя дужкі калі ў вас ёсць толькі адзін радок кода, Вы хочаце, каб выканаць ўнутры цыклу. Цяпер мы заўсёды, у класе, і ў увесь наш код размеркавання, ўключаюць фігурныя дужкі у любым выпадку, проста для яснасці. Але разумею, што ў падручніках і онлайн-прыклады, Вы можаце вельмі добра бачыць кучаравыя падцяжкі хапае небудзь. І гэта нармальна, калі тое, што вы ўжо з водступам і прызначана гэта проста адна радок кода, а не некалькі радкоў кода, патэнцыйна. Добра. Так звязанай з пытаннем недакладнасць, гэта пытанне перапаўнення, у тым сэнсе, што, як, у цэлых маюць абмежаванні на іх гэтак жа, як з якая плавае коскі? У свеце плавае кропкай значэння, мы можам быць толькі так дакладныя, пасля чаго, часам дрэнныя рэчы могуць здарыцца, і нашы праграмы могуць быць багі і памылкі. Цяпер нават з цэлымі лікамі, Вы можаце сутыкнуцца з праблемамі. Цяпер цэлае не мае дзесятковай кропкі ці лікі, наступныя пасля яго. Гэта проста натуральны лік, як правіла ,. Так што можа пайсці не так з Int? Калі я выкарыстоўваю Int да Граф, што можа пайсці не так? Здаецца, нашмат прасцей. Так. Глядачка: Калі Колькасць трапляе [неразборліва] Дэвід Дж малая: Так. Што рабіць, калі вы лічыце так высока, што вы Не магу выказаць, што на самой справе вялікая колькасць. Дакладна? У нейкі момант, вы ідзяце перавышаць межы з 32-бітнага значэння або 64-бітнае значэнне. Цяпер зноў, я не ўпэўнены, як вымаўляецца 64-бітнае значэнне, але я ведаю, з 32-разраднага цэлага ліку, самая вялікая каштоўнасць гэта можа быць, калі гэта толькі станоўча значэння, прыкладна 4 млрд. Так што, калі я спрабую лічыць да 5 млрд, нешта здарыцца. Але давайце паглядзім, што на самой справе, можа здарыцца. У свеце цэлага Перапаўненне, дзе вы, у пэўным сэнсе, перапаўненне Ёмістасць лік, што можа здарыцца? Дык вось двайковае лік, гэта вяртанне да 0. Гэта ўсё 1, і запаўняльнікі там, з'яўляюцца ступенямі 2, так што гэта двайковы файл. Такім чынам, гэтыя 8, 1 біт на экране. І калі вы памятаеце або Вы хутка зрабіць матэматыку, якое значэнне прадстаўлены тут з гэтых васьмі бітаў 1? 255. І нават калі вы не былі ўпэўненыя, у матэматыцы, вы маглі б зрабіць гэта. Ці вы маглі б проста выгляд розуму праз яго, пачакайце хвіліну, калі я якія прадстаўляюць 8 бітнае значэнне, і я атрымаў 256 магчымых значэнняў, але першы з якіх з'яўляецца 0, Я проста ведаю, што вялікі будзе 255, і гэта тое, што гэты мог бы быць. Такім чынам, няхай я спрабую дадаць 1 да гэтага значэння. Што б вы зрабілі ў класе Школа пры даданні 1, і гэта не вельмі падыходзіць, таму што Вы павінны несці 1? Што гэта лік збіраецца каб стаць, калі вы дадаеце 1? Гэта стане 0. Дакладна? Таму што, калі б у вас была больш bits-- і я паспрабуйце, накшталт, увядзiце яго here-- калі ў нас было больш бітаў, тое, што мы маглі б зрабіць тут дадаць 1, і тады мы б атрымаць гэта. Упс. Мы б 1 біт ўсю дарогу сюды. Але калі гэта канчатковае значэнне, гэта толькі 8 біт, і гэта наканавана з дапамогай кампутара, што 1 эфектыўна няма. Гэта проста нейкая падае з абрыву. І так, калі вы дадасце 1 да 255, тое, што значэнне вы, відаць атрымаць? 0. І так выпадкова лікаў, і, магчыма, ненаўмысна, у канчатковым выніку ўпакоўка вакол, як гэта. Так што можа быць следствам гэтага? Ну, ёсць некалькі розныя рэчы. Такім чынам, адна, яна ў канчатковым выніку гледзячы як 0, ненаўмысна, але вы можаце бачыць роду, нават у рэальным свеце, да лепшага ці да горшага, праявы гэтай ідэі мяжы. Напрыклад, любы з вас, хто калі-небудзь гуляў Lego Star Wars, Хто-небудзь выпадкова не ведаеце, максімальны лік манет Вы можаце сабраць у Lego Star Wars? Вазьміце здагадку, заснаваную на сёння навадныя пытанні. Гэта больш, чым 256 ці 255. Гэта 4 млрд. Так што атрымліваецца, а ёсць некаторыя people-- некаторыя звяртаючыся да дапамогі пацвердзіў апошні night-- атрымалі 4 млрд залатых манет, ці яшчэ шмат чаго, у Lego Star Wars. Хоць, па-відаць, ёсць спосаб падмануць гульню, ёсць памылка або асаблівасць, якая дазваляе вам толькі нарастаць шмат-шмат кропак. Але як мага большую Значэнне, па у гэтым скрыншоце з каго я знайсці ў Інтэрнэце, на самай справе, 4 млрд. Цяпер, чаму гэта? Гэта дакладна 4 млрд, верагодна, таму што хтосьці вырашыў, хто пісаў у гэтую гульню, што яны маглі б зрабіць 4 млрд, тое, што-тое, што-то, як значэння я ўздымаў з калькулятарам і раней, але гэта проста трохі чысцей для людзей сказаць максімальную колькасць з coins-- або шпількі, як яны называюць, што вы them-- можа збіраць гэта 4 млрд. І так, чаму гэта? Як гэта LEGO гульні рэалізацыі лічыльніка які адсочвае з Колькасць манет ў вас ёсць? Яны выкарыстоўваюць тое, што? Глядачка: Ён спыняецца лічачы пасля 4 млрд. Дэвід Дж малая: Ён спыняецца лічачы пасля 4 млрд, значыць, вы можаце выснову, як праграміст, што яны, верагодна, з выкарыстаннем 32 разраднае цэлы лік. Як праграміст літаральна тыпізаваных, INT, у яго ці яе код, і гэта тып зменнай, яны выкарыстоўваюць для захоўвання чыю-то код. Так што іншыя праявы з гэтых відаў межах. Так што я не гуляў у гэтую game-- і я чытаў на гісторыі каб пацвердзіць, як much-- але ў Арыгінальная версія Civilization, дзе Вы, мабыць, ўзаемадзейнічаюць адзін з аднаго і могуць весці вайну ці свет ёсць, Гандзі павінен быў быць адным з самыя мірныя персанажы, як я разумею, у першым Версія цывілізацыі. І на самай справе, па шкале ад 1 да 10, яго агрэсіўнасць была проста 1. Так так, мякка-небудзь агрэсіўны, па-відаць. Але ў нейкі момант, вы можаце па-відаць, ўсталяваць дэмакратыю ў вашым рэгіёне. І, калі вы ўсталюеце дэмакратыю у вашай версіі гульні, то ваш ўзровень агрэсіі зніжаецца. Гэта добрая рэч. Людзі больш спакойны па-відаць, у гэтай сітуацыі. Але, мабыць, нехта зрабіў няма, калі, стан у арыгінальнай версіі кода. Так ўзровень агрэсіі Гандзі адправіўся з Станоўчы 1, мінус 2, каб адмоўны 1, але гульня не зразумець адмоўныя лікі. Дык што здарылася агрэсія Гандзі Узровень пайшоў ад 1, 0, 1 да адмоўнага, які меў эфект обцяканьне да таго, найбольш агрэсіўны характар ў гульні, пры значэнні 255, па шкале ад 1 да 10. І з таго часу, там было больш ўвасаблення гэтай гульні, і яны захавалі яго ў якасці свайго роду велікоднае яйка, што Гандзі па-відаць, жахліва агрэсіўным. Але гэта было вынікам вельмі простая памылка праграмавання у гэтым вельмі ранняй версіі гульні. Зараз больш трывожна, больш У апошні час Boeing 787 было зафіксавана як якія маюць памылка, не від прылады вы асабліва хочаце, каб памылка. І сімптомы, якія я буду чытаць тут, з артыкула ў Інтэрнэце, гэта было, мадэль 787 самалёт што быў уключаны пастаянна для 248 дзён, могуць страціць усё пераменнага току, пераменнага току, Электрычная магутнасць, у выніку блокі кіравання генератарам, ГПа, адначасова ўдаючыся ў Бяспечны рэжым. Так што гэта было папярэджанне выдаецца калі была выяўлена гэтая праблема. Гэта ўмова выклікана з дапамогай праграмных лічыльніка, ўнутранымі ў адносінах да гПа, так цэлы лік або пераменная, што перапаўненне пасля 248 дзён бесперапыннай магутнасці. Боінг ў працэсе распрацоўвае абнаўлення праграмнага забеспячэння, што гПа будзе выправіць небяспечнае стан. Гэтак жа, як ракеты сцэнар, у якім яны былі нейкія зменнай што разлічвае, і падлік, і падліку, але паступова перапоўненыя межы яго магчымасцяў, Аналагічна зрабіў пракляты самалёт маюць зменную перапаўнення пасля дастаткова часу бегу. І так як мова-у-шчаку працы вакол гэтага пытання гэта па-сапраўднаму, перазагрузка, ваш самалёт кожны 247 дзён, так што памяць атрымлівае знішчаныя і пераменная вяртаецца 0. Але разумеюць, што гэта вельмі вялікі ўвасабленне праграмнага забеспячэння, але асабліва калі мы чуем аб Apple, аперацыйных сістэм адбываецца ў аўтамабілях, і самастойнага кіравання аўтамабіляў з Google, і любую колькасць увасабленняў праграмнага забеспячэння У нашай паўсядзённым жыцці, тэлевізараў і гадзіны, і больш, рэалізаваць былі акружаны праграмнага забеспячэння, усе з якіх напісана нас, людзей. І, як мы ўсе хутка выявіце, гэта вельмі лёгка і вельмі тыпова памыляцца пры напісанні праграмнага забеспячэння. І калі вы не злавіць іх, некаторыя дрэнныя рэчы могуць здарыцца. Зараз часам, некаторыя смешныя рэчы могуць здарыцца, ці, прынамсі, часам мы ведаць, каб чакаць некаторага непрыдатнасць. Так 0 дзеліцца на 0, з класа школа, як правіла, дрэнна. Гэта вызначана. І атрымліваецца out-- і давайце паглядзім, калі мой мікрафон можа падняць гэта up-- што Apple было павесяліцца з гэтым у апошні час. Так у мяне ёсць iPhone тут. Я збіраюся пагаварыць з Siri і папрасіць яе каб даць мне адказ на 0, падзелены на 0. Што 0, падзелены на 0? Сири: Уявіце сабе, што ў вас ёсць 0 печыва, і вы падзяліць іх раўнамерна сярод 0 сяброў. Колькі печыва мае кожны чалавек атрымаць? Разумееце? Гэта не мае сэнсу. І Cookie Monster сумна што няма печыва. І вы сумна, што ў вас няма сяброў. Дэвід Дж малая: Гэта свайго роду непрыемны. Так што гэта тое, што як раз там сказаў. Гэта нявызначаным, гэта не вызначана, І сапраўды, многія мовы праграмавання або, сапраўды, кампілятары вызначыць, калі вы, у праграме, паспрабаваць падзяліць 0 на 0. Больш задавальнення, чым гэта, хоць, гэта што, па-відаць, Cookie Monster на Twitter у гэтыя дні. І ён адказаў на гэта, з гэтым, што абсалютна чароўныя. Але давайце хуткі погляд на некалькі іншых канструкцый, а затым пакласці некаторыя з гэтых Код для выкарыстання, у добрых адносінах. Так што атрымліваецца, акрамя для завес, ёсць тое, што называецца ў той час як цыкл, у якім выглядае па-іншаму, і рэалізуецца трохі differently-- і мы ў канчатковым рахунку бачыць examples-- але ў пэўным сэнсе, гэта прасцей, таму што гэта не дазваляюць ініцыялізаваць і абнавіць межах мяжы цыклу. Вы ўсё яшчэ можаце рэалізаваць яго. Такім чынам, вы можаце зрабіць тыя ж самыя рэчы, з час цыклу, як і для цыклу, але ваш сінтаксіс, ultimately-- як мы ў канчатковым рахунку see-- будзе адрознівацца. Там нават рабіць той час як цыкл, які на самай справе мала чым адрозніваецца, у гэтым у той час як для цыклу і ў той час як цыкл заўсёды праверыць іх стан па-першае, калі Вы чытаеце гэтую рэч зверху ўніз, гэта накшталт падобна, што гэта збіраецца праверыць гэта ўмова ў мінулым, таму што гэта сапраўды апошняя радок кода. І на самай справе, што будзе карысна у некаторых праграмах, якія мы пішам, калі вы хочаце, каб проста слепа зрабіць нешта і ў канчатковым выніку правяраць стан. Гэта не абавязкова дрэнна. Калі мы хочам зменныя, мы можам зрабіць гэта ў некалькі розных спосабаў. І мы ўбачылі ў Факстрот мультфільм, адзін са спосабаў зрабіць гэта, дзе вы аб'яўляеце зменную, як INT лічыльнік коскі, а затым, магчыма, later-- наступны лінія, можа быць, 10 ліній later-- вы на самой справе яго ініцыялізацыі. Такім чынам, гэтыя 2 радкі кода абвясціць зменную тыпу Int і назваць яго лічыльнік, так што гэта дае мне дастаткова біты правесці Int. А потым у рэшце рэшт, ён ставіць значэнне 0 ў гэтай зменнай. Гэта парадкуе размяшчэнне 0 і 1 ўзор, што мы ведаем з мінулага тыдня, ўяўляе сабой лік, мы ведаем, як 0. Або, шчыра кажучы, вы можаце зрабіць гэта значна больш коратка, проста гэта падабаецца. Цяпер мы таксама маем Магчымасць выкліку функцый. І на самай справе, вось 2 лінія праграмы або ўрывак з яго што дазваляе нам на самой справе напісаць код, які атрымлівае радок з user-- шмат як наш валанцёр на імгненне ago-- захавання выніку ў пераменная называецца імя, і then-- гэтак жа, як з нашым валанцёрам з printf-- друкуе гэтыя значэння перадаўшы два аргументу, то Радок, а затым зменнай называецца, імя, сябе. Такім чынам, давайце зірнем, перш, чым мы вяртаемся да Марыё ёсць, на пару зараз, прыкладаў. Я збіраюся ісці наперад і адкрыць да, скажам, функцыя-0.c. І, як заўсёды, гэты код даступныя на вэб-сайце Курсу, так што вы можаце гуляць разам на дадому і паглядзець на яго пазней. Але вось праграма ў гэта Сутнасць, па лініі 17, 22. Асноўная праграма, дзе Праграма заўсёды збіраецца пачаць. Гэтая праграма, па-відаць, збіраецца раздрукаваць ваша імя, двукроп'е. Гэта тое буду называць GetString, гэтак жа, як мы зрабілі з нашымі валанцёрамі. А потым, гэта цікава, ён збіраецца назваць PrintName. Аказваецца, увесь гэты час, ёсць здаецца, функцыя называецца PrintName. Гэта друкуе чыё-то імя. Мы не павінны выкарыстоўваць Printf ад мінулых гадоў, ёсць PrintName. Але гэта зман таму PrintName ня аснашчаны С. Людзі не зрабіў вынайсці каля 40 ці 50 гадоў таму, Я зрабіў, замест гэтага. І на самай справе, калі я пракруткі далей ўніз, апавяшчэння як я магу напісаць мой уласны функцыі ў С. Мы ў канчатковым рахунку растлумачыць, чаму мы працягваем казаць, пустата, у некалькіх месцах, але на сённяшні дзень, давайце проста паглядзіце на назву. У радку 24, калі вы хочаце, каб стварыць сваю ўласную функцыю, вы ў літаральным сэнсе напісаць найменне функцыі. Я абраў PrintName. У дужках, вы пакажыце, якія віды уваходаў і колькі вы хачу гэтую функцыю, каб узяць. У гэтым выпадку, я хачу, каб прыняць 1 пераменная называецца, імя, і ён збіраецца быць тып, радок, так што гэта каб некаторая паслядоўнасць знакаў. А потым, гэта program-- гэтак жа, як у пустым, Вы можаце мець карыстацкі галаваломкі pieces-- будзе мець гэты звычай паводзіны. Гэта збіраецца патэлефанаваць Printf праходзячы, прывітанне, запаўняльнік, а затым ён збіраецца падключыць у любы карыстальнік называецца. Такім чынам, гэта прыклад таго, што вучоны-кампутарнік будзе Выклік абстракцыя або функцыянальны Разлажэнне, якія з'яўляюцца проста мудрагелістыя спосабы з saying--, калі Вам падабаецца гэты высокі ўзровень ідэя, як я хачу, функцыянальнасць, друкуе чыё-то імя, абсалютна вы можа ў літаральным сэнсе напісаць Printf, а затым прайсці ў аргументах, якія вы хочаце, і праграма будзе працаваць, як гэта мае, так як у сераду. Але вы можаце пачаць абстрагавацца ад паняцце друку імя. Вы можаце даць яму імя, як PrintName, і гэта гэтая ідэя слаёў ад тыдня 0. З гэтага часу я, і вы не павінны ведаць, ці ўсё роўна, як PrintName рэалізуецца. Так, гэта выкарыстоўвае Printf, можа быць, гэта няма, хто ведае, што выкарыстоўвае? Каго гэта хвалюе? Цяпер я кажу тут, а тут. І сапраўды, як нашы праграмы атрымліваюць больш прасунутыя і складаныя, мы збіраемся працягваць прымаць як належнае што існуюць больш нізкія часткі галаваломкі ўзровень. Таму што мы пісалі іх ці нехта іншы, так што мы можам затым пабудаваць на іх. Давайце зірнем на гэта варыянт, для адной функцыі. Так што гэта адно трохі больш пашыраны, але, аказваецца, што ў бібліятэцы CS50, у ёсць толькі функцыя GetInt. Мы не думаю, што гадоў таму, каб рэалізаваць функцыю GetPositiveInt. І гэта крыху раздражняе, таму што калі вы, хлопцы, пішаце праграму, дзе Вы хочаце, каб атрымаць станоўчы цэлае лік ад карыстальніка, Вы можаце выкарыстоўваць абсалютна GetInt. І вы можаце праверыць з абсалютна стан і, магчыма, пятля калі INT больш чым 0 і крычаць на карыстальніка калі ён ці яна не дае Вы станоўчае лік. Але давайце будаваць гэты Будынак блакаваць сябе, а, карыстацкіх драпін частка, калі вы будзеце. Я збіраюся мець праграму тут, у канчатковым рахунку, што я хачу быць у стане назваць GetPositiveInt, і я хачу быць магчымасць раздрукаваць усё, што ИНТ. Але гэта абстрагуюцца прэч зараз. Гэта проста далі высокі ўзровень Імя, якое кажа, што ён робіць, што выдатна, таму што гэта вельмі інтуітыўна зараз чытаць. А калі я ўсё роўна тое, што пад капот, дазвольце мне пракруціць ўніз. І гэта крыху палохае Па-першае, у асаблівасці калі гэта ваш першы Праграма, але давайце зірнем. Я больш не кажучы, несапраўдным, таму што гэта аказваецца функцыі, гэтак жа, як GetString, можа вяртае значэнне для мяне. Яны не проста для друку на экране, яны могуць на самай справе перадаць мне нешта яшчэ. І калі раней PrintName, Я нічога не трэба назад. Мне трэба пабочны эфект то з'яўляецца на экране, але мне не трэба чалавека перадаць мне што-небудзь. Тут, з GetPositiveInt, як з GetInt, Я хачу, каб нешта быць перададзены назад. Так што я кажу няма, пустата, на лініі 23, але INT, у якім гаворыцца, гэтая функцыя што я пішу, называецца GetPositiveInt збіраецца перадаць мяне цэлае, а не нічога, ня пустата. Між тым, ён не збіраецца прымаць ніякіх Ўваходы, так што я, накшталт, яго назад. Я не даю GetPositiveInt любы ўваход, я хачу, каб даць мне свой выхад. І тады тое, што адбываецца зараз? Дык вось, як я магу аб'явіць зменную. Я зрабіў гэта за межамі цыклу, па прычынах, мы ў канчатковым выніку бачым, але гэта проста дае мне 32 біт называецца, п, а ў мяне да вызначэння ім захоўваць цэлае. І вось, што рабіць, пакуль канструкцыі, і гэта, чаму гэта карысна. Літаральна гэта зрабіць, у той час як п менш 1. Такім чынам, давайце паглядзім, што адбудзецца. Я раздрукаваць, калі ласка, даць мне станоўчы Int. Затым я атрымаць Int, выкарыстоўваючы CS50-х функцыянаваць і захоўваць у п. І потым, што радок кода, верагодна, запускаецца на выкананне наступны лагічна? Які нумар радка? Так, так 31. Вы не ведаеце гэта, пакуль у Вас няма сказалі або роду высновах, але гэта праўда. Само зверху ўніз а затым паўтарае. Так што, калі я набрала, скажам, у лік адмоўны 1, з'яўляецца п менш, чым адмоўны 1? Так. Таму што адмоўны 1 менш, чым 1. Дык што ж адбылося? Я збіраюся зрабіць гэта у той час як п менш 1, так што я збіраюся вярнуцца да лініі 28. І кожны time-- і давайце працаваць this-- зрабіць функцыя 1 скампіляваць яго, і ў цяперашні час кропка слэш функцыю 1. Калі я друкую адмоўны 1, гэта будзе трымаць на мяне гарлапаніць пакуль я не супрацоўнічаць, таму што кожны з маіх уваходаў складае менш за 1 а калі падчас менш за 1, Я збіраюся працягваць рабіць гэта. Калі я, нарэшце, даць яму нумар, як 50, На шчасце, ён кажа, дзякуй за 50. Чаму? Таму што як толькі п не менш 1, я перастану затрымацца ў гэтым цыкле, і гэта новае ключавое слова сёння, вяртанне, у літаральным сэнсе робіць. Так што я проста рэалізуецца, у пачуццё, што эквівалентна GetString, дзе я вяртаючы да хто выкарыстоўвае мяне, некаторы значэнне. Гэта не павінны быць радок, што гэта Int. Такім чынам, просты, хуткі прыклад, але мы хутка ўбачыць некаторыя больш складаныя версіі яшчэ. На самай справе, давайце паглядзім на лічбавая адной, якая называецца return.c. А гэта на самай справе трохі прасцей. Так Мэта гэтай праграмы ў life-- давайце скампіляваць і запусціць яго, таму пераканайцеся, вяртанне, кропка слэш, return-- апавяшчэнне праграма проста кубікі значэнне 2. Гэта даволі дурное, цяжка Код, не прымаць якія-небудзь матэрыялы, але дэманструе іншы функцыя, я напісаў сам. Дык вось, я аб'яўлены Пераменная, называецца х, тыпу Int, роўна ліку 2, цалкам адвольна. Гэта толькі некаторыя пухнатыя друку. Гэта кажа х цяпер, напрыклад, і напрыклад, узвядзенне ў куб кропка кропка кропка. І магія, па-відаць, у радку 21. Я тэлефаную функцыю пад назвай, куб, Я уручаючы яму ліст паперы з нумарам 2, напісаныя на ёй, і тое, што кошт, матэматычна, я хачу, каб выйсці з яго? Гэтак жа, як для праверкі адсутнасці памылак? 8. Дакладна? Я хачу 2 кубе таму, 2 сіла 3, так 8 таму. Дык дзе ж куб рэалізаваны? Ну, заўважылі, што гэта рэалізуецца тут. І, як і раней, па логіцы, нягледзячы на ​​тое, што сінтаксіс, верагодна, вельмі новай для многіх з вас, Я хачу гэтую функцыю перадаць мяне ліст папера з міжнар на ім. Так у мяне ёсць Int, у Назва адвольна, але зручна назваць куб. Ўваходных да яго, гэта п увядзіце лік, так што як я магу прайсці ў нумар 2 на аркушы паперы. А потым высвятляецца, З падтрымлівае матэматыка, так што вы не павінны х для часоў, вы проста выкарыстоўваць зорачку для множання. І гэта вяртае п разоў п раз п, які з'яўляецца проста значэнне ў кубе. Дык куды мы ідзем з усім гэтым? Гэта, безумоўна, беглы тур, будзьце ўпэўненыя, што ў супер раздзелах і ў задачы набор 1, Вы будзеце прайшоў праз усё гэта яшчэ больш. І ў праблему ўсталяваць 1, мы пераход з графічнага свеце нуля да чаго-то больш каманднага радка у C. Але мы чэрпаем натхненне з гэтага тут гульні ад мінулага, у якім з дапамогай C і стандартная рэдакцыя р камплект вы рэалізуеце піраміду Марыё. І ў хакерскай выданне р камплект, калі вы так вырашыце абраць, Вы рэалізаваць трохі больш выклік піраміду з двума пікамі. Вы таксама рэалізаваць Алгарытм, прагны алгарытм. Аказваецца ёсць некаторыя цікавая логіка за працэсам працуе станцыі касавы а на самай справе перадачы хто яшчэ змяненне. Існуе алгарытм, які даволі проста, што вы, магчыма, нават схапіць інтуітыўна, калі вы ўпершыню прачытаў it-- разумеючы, што тое, што я заўсёды зроблена ў любы час я даў камусьці некаторыя грошы back--, што дазваляе заўсёды звесці да мінімуму колькасць папяровыя купюры або металічныя манеты што вы вяртаючы карыстальніку. І гэта, вядома, з'яўляецца пераканаўчым таму што, калі вы ідзяце ў CVS ці яшчэ шмат чаго, Вы не хочаце, каб быць перададзены цэлая куча адзінак або цэлая куча драбяза. Вы хочаце найменшае манеты, напэўна, можна. Нарэшце, вы таксама будзеце быць аспрэчаныя плёскацца ў свет вады а на самай справе атрымаць ацэнку для адлюстравання паміж тэмпамі плыні, як, вада ў душы, толькі, колькі вады выкарыстоўваецца. І намёк ў ёй, будзе гэты кліп тут, які мы ў канчатковым на працягу за ўсё ў 60 секунд, што малюе карціну душавыя галоўкі нізкага патоку. [Прайграванне відэа] -Добра. Я атрымаў усё тут. Я атрымаў Cyclone серыі F, Гідра, Jetflow, Стакгольм Supersteam, вы называеце яго. -А Што вы рекомендуете? -Што Вы шукаеце? -Power Чалавек. Магутнасць. -Як Silkwood. -Гэта Для выпраменьвання. -Гэта Дакладна. -Зараз Што гэта? -Гэта Commando 450. Я не прадаю што адзін. -Але Гэта тое, што мы хочам. Гэта камандас 450. -Не, Паверце мне. Гэта выкарыстоўваецца толькі ў цырку. Гэта для сланоў. -Я Нічога плаціць. -Што Аб Джэры? -Ён Не мог справіцца з гэтым. Ён пяшчотны. Ах так. [КАНЕЦ ПРАГЛЯДУ] Дэвід Дж малая: Добра. Вось калі для CS50. Мы будзем бачыць Вас на наступным тыдні. СПІКЕР 1: [? Скалі?], [? Ян ,?] паколькі гэты завяршальны праект, што б вы, хлопцы, прыдумалі? СПІКЕР 2: Ну, мы далі гэта разнастайнасць думкі, і мы думаем, што лепшы спосаб, мэтай якіх СПІКЕР 3: Ці магу я? СПІКЕР 2: Так. Усімі сродкамі, на самай справе. СПІКЕР 3: Так што я думаю мы можам падвесці нашу ідэю для OUTROS з аднаго word-- нічога. Дэвід Дж малая: Нічога? СПІКЕР 3: Нічога. Дэвід Дж малая: Што гэта значыць? СПІКЕР 3: Outros з'яўляюцца ні пра што. СПІКЕР 2: Ну, я маю на ўвазе, у філасофіі, Я маю на ўвазе, нічога не заўсёды нешта. СПІКЕР 1: Так what's-- што памяшканне? СПІКЕР 3: Так што гэта, як жыццё. ОК. Што вы рабілі сёння? Дэвід Дж малая: Я ўстаў, было сняданак, і прыйшоў на працу. СПІКЕР 3: Гэта Outro. СПІКЕР 2: Але, я маю на ўвазе, не павінен нешта здарыцца з ім на the-- СПІКЕР 3: Не, няма, няма, няма. Нічога не адбываецца. СПІКЕР 1: Дык чаму мы глядзім? СПІКЕР 3: Таму што што гэта Outro для CS50. Дэвід Дж малая: Пакуль няма.