[Гуляе музыка] СПІКЕР 1: Гэта CS50 і гэта пачатак другога тыдня. Такім чынам, давайце ныраць прама ў нешта што глючыць, так бы мовіць. Так, за вось CS50 IDE а ў мяне пад'ехаў загадзя гэта па-чартоўску screen-- гэта. Спойлер папярэджанне. Добра. Я выцягнуў гэты экран тут, які мае вельмі простую праграму. Калі мы пракруціць ўніз, большасць гэта проста каментары, але тут, у лініі 13 праз 17 ў нас ёсць праграма. Гэта сінтаксічна няправільна, што азначае, што калі Я скампіляваць яго, ён будзе скампіляваць і запусціць, але ён памылковы. Гэтая праграма прэтэндуе ў каментарах наверсе, што яна павінна надрукаваць 10 зорак, але гэта не так. І на аснове вашага вопыту, ці хутка будзе досвед працы з C, Вы можаце адрозніць лагічна чаму гэта, на самай справе, глючыць? Да? АЎДЫТОРЫЯ: Гэта ідзе ад нуля да 10. Гэта 11 ітэрацый. СПІКЕР 1: Так. Такім чынам, гэта адбываецца ад нуля праз і роўна 10, што, вядома, 11 ітэрацый. Так, ён збіраецца друк, сапраўды, 11 зорак. Так, Канвенцыя інфарматыка у большасці моў праграмавання гэта, сапраўды, проста пачаць адлік з нуля, але падлічыць, але не праз Значэнне, якое вы на самай справе хвалюе. Цяпер, гэта адна рэч, якая Прымае крыху прывыкнуць і нават да драпін, прызначаныя, як гэта для якія не праграмістаў або неадпаведнасці кампутара Навукоўцы і для дзяцей у асноўным, разлічана на Вы пачынаеце падліку галасоў у цэлым на адным. І гэта нармальна. Вы можаце абсалютна пачаць адлік ў адным, калі гэта больш зручна. І разлічваць да і праз 10, але вы зразумееце, у прыватнасці, на гэтым тыдні і за што проста так многія рэчы ў праграмаванні Выкажам здагадку, што 0 з'яўляецца першым значны, з якой вы лічыце, што вы збіраецеся знайсці прасцей толькі, каб атрымаць у гэтай звычкі пуску ад нуля і лічыць да значэння Вы клапоціцеся аб прама цяпер з атрымаць ісці. Так, што зафіксавана, што. Мы змянілі менш або роўная крыху менш за. Давайце зірнем на Другі прыклад тут. Так, гэтая праграма занадта сцвярджае ў сваім каментары наверсе, што ён павінен раздрукаваць дзесяць зорак, але гэта не так. Што памылка тут? Так, што-і прабачце, давайце быць ясна. 10 зорак. Адзін за лінію, але гэта не так. Так, у самой справе, дазвольце мне ісці наперад і кампіляцыі гэты, таму што гэта крыху менш, ачысціць на аснове гэтага апісання. Дазвольце мне пайсці ў наш каталог крыніцы. Зрабіць калыску адна кропка слэш, багі адзін. ОК, я бачу, 11 зорак, якія яшчэ праблематычна, але яны таксама ўсё ў адной радку. Што праблема тут? Так. АЎДЫТОРЫЯ: [неразборліва]. СПІКЕР 1: Так. Так што гэта тонкасць, якую вы можаце Нагадаем, мне робіць кароткае згадванне аб. Нават калі ўсё выглядае прыгожая, і гэта прыгожа з водступам, і гэта збольшага выглядае як да драпін У гэтай лініі 16 і 17, Сапраўды, з водступам пад гэтым цыкл. Гэта неістотна. Кампутар не ведаць ці бачыць прабелы. Белае прастору толькі для нас, людзей, стылістычна. Кампутар не ведае, калі ў вас ёсць Фігурныя дужкі, якія б, на самай справе, выправіць гэтую праблему. Такім чынам, калі мы на самай справе пайшоў і відавочна пакласці ў гэтых фігурных дужках што б выправіць гэтую праблему, робіць ясна кампілятара што я на самой справе хачу, каб выканаць два радкі кода зноў, і зноў, і зноў. Але тое, што фундаментальнае тлумачэнне? Дакладна? Мы не павінны строга Фігурныя дужкі ўвесь час, хоць гэта, верагодна, лепш практыка, каб патрапіць у гэтую звычку ў любым выпадку нават калі ён дадае два сімвалы ў кодзе. чаму? АЎДЫТОРЫЯ: [неразборліва]? СПІКЕР 1: Так, так што гэта іншае рашэнне ў цэлым. Дакладна? Асабліва, калі на першы погляд вам не сапраўды шанаваць тое, што адбываецца. Ну, вядома, мы маглі б проста рабіць дзве рэчы адначасова і проста пазбегнуць праблемы ў цэлым. І гэта выдатна, але цяпер, для сённяшніх мэтаў, тое, што гэта тлумачэнне памылка? Чаму ўсе гэтыя зоркі на адной лініі? Да? АЎДЫТОРЫЯ: Здаецца, што калі ў вас ёсць адна радок кода, Вы можаце зрабіць гэта без іх. СПІКЕР 1: Дакладна. Гэта проста чалавечая ўмоўнасць. Людзі разумеюць, што гэта крыху раздражняе або стомна каб паставіць фігурныя дужкі ўсе частку часу, калі ўсё, што вы хочаце зрабіць гэта выканаць адзін радок кода. Так, людзі вырашылі некаторыя час таму, што гэта нармальна. Калі вы хочаце, каб пакласці ўсе вашы завесы толькі на гэтай адной лініі, як гэта, гэта нармальна з адной Кропка з коскі ў канцы. Але вы можаце зрабіць толькі адзін такі Лінія без фігурных дужак. Такім чынам, калі кіраўніцтва CS50 стыль а пакажа на, вы ўбачыце, што, як правіла гэта добрая звычка каб трапіць у гэта, пакуль вы не цалкам камфортна збіваецца ад гэтых відаў канвенцый і рабіць сваю справу. Пакуль вы сябе паслядоўным. І мы будзем гаварыць больш пра стыль трохі пазней сёння. Такім чынам, дазвольце мне адкрыць адну іншую праграму. Вядома, мы павінны выправіць, што 10, а таксама. Дазвольце мне ісці наперад і напісаць сапраўдны хутка праграма, якую я буду называць, скажам, пятля кропка С. Такім чынам, цыкл кропка З І ў пятлі кропка C Я збіраюся мець, ўключаюць у сябе стандартныя I / O кропка Н INT асноўны пустэчу. А цяпер давайце проста рабіць, на самай справе, цыкл. Так, 4 INT I атрымлівае нуль. Я менш, чым, скажам, 50 гадоў. Я плюс, плюс. А потым тут давайце ісці наперад і не друкаваць F. А потым я хачу, каб надрукаваць I і новая лінія, кропка з коскі. І гэта павінна надрукаваць усе лік ад нуля да 50? Некаторыя кіраўнік ківае. Праз некалькі NOS. Што памылка ўжо? Што лёгка памылка, якую я зрабіў? Так. АЎДЫТОРЫЯ: [неразборліва]. СПІКЕР 1: Так. Таму, нават калі гэта выглядае як гэта тое, што я маю намер, Нагадаем, што я таксама проста ASCII сімвалаў. Так што, калі я кажу, друк "І." Гэта ў літаральным сэнсе збіраецца друкаваць I. Такім чынам, калі я хочаце падключыць ў якасці запаўняльніка Я на самой справе значэнне трэба зрабіць гэта а затым падключыце-у Значэнне I дынамічна. У адваротным выпадку я проста хачу, каб атрымаць 50 I на экране. Такім чынам, дазвольце мне ісці наперад і зрабіць гэты цыкл, запусціць яго, і, сапраўды, у нас ёсць усе аж па 49. І калі я пракруткі назад у часе я бачу нуль, у самым пачатку. Ну, што, калі я накшталт сапсаваць? Што рабіць, калі я гэта зрабіць? Проста таму, што я не думаў. Што гэтая праграма. Пасля таго, як зноў кампіляцыі і запуску, збіраецца рабіць лагічна? АЎДЫТОРЫЯ: Нічога. СПІКЕР 1: Нічога. Чаму так? АЎДЫТОРЫЯ: Я прызначаны для нуль. Такім чынам, ўмова фальшыва. СПІКЕР 1: Так, менавіта так. Увесь код з'яўляецца правільным, сінтаксічна. Гэта будзе кампіляваць, гэта код будзе працаваць, але гэта не збіраюся зрабіць што-небудзь карыснае таму што я ініцыялізаваць я да нуля. Затым мы правяраем, ёсць я больш 50? Відавочна, што няма, гэта не так. Такім чынам, цыкл ніколі не выконваецца наогул. Што, калі мы нешта зрабіць трохі больш безразважна? Так, што, калі мы робім, як я міжнар атрымлівае нуль. А цяпер дазвольце мне выкарыстоўваць час цыкл, які быў яшчэ адным умовай. І ў той час я кажу, а я больш або роўная нуля, а затым тут я ісці наперад і захаваць файл, каб цыкл. І я збіраюся запусціць яго. Што я буду бачыць гэта раз з час цыкла? Так. АЎДЫТОРЫЯ: бясконцы цыкл? СПІКЕР 1: бясконцы цыкл? Так, і чаму? АЎДЫТОРЫЯ: Таму што гэта заўсёды роўны нулю. СПІКЕР 1: Так. Такім чынам, я ініцыялізуецца роўным нулю. Вядома, я заўсёды больш чым або роўна 0 ў якасці выніку. Такім чынам, я проста хачу, каб ўбачыць гэта бясконца. І зараз, гэта прыдумаць, як толькі або двойчы галоў курсу. Што адбываецца, калі вы ёсць бясконцы цыкл? АЎДЫТОРЫЯ: Упраўленне С. СПІКЕР 1: Так. Так кіравання С у канчатковым выніку адказваць. На жаль, мы раздрукаваць мільёны і мільёны нулёў ўжо і таму кампутар мае выгляд атрымаў наперадзе мяне. Так, ён збіраецца ігнараваць мне для няшмат. Але калі вы проста націсніце CONTROL C нешматлікія раз на вашым Mac ці PC клавіятуры, у канчатковым выніку ён павінен, сапраўды, спыніць. А калі не, мы пакажам вам некаторыя метады да тых часоў, калі вам можа на самай справе гвалтоўна забіць праграм, гэтак жа, як у Windows, і Mac OS, калі гэта будзе неабходна. Але давайце паспрабуем нешта яшчэ. Давайце на самай справе павялічыць I. З'яўляецца гэта па-ранейшаму будзе бясконцым? Дазвольце мне запусціць гэты. І цяпер вы можаце выгляд бачыць, што адбываецца. Гэта, таксама, з'яўляецца бясконцы цыкл. Але гэта крыху дзіўнае пытанне. Ці з'яўляецца гэта ў друк нумары назаўжды? АЎДЫТОРЫЯ: Няма СПІКЕР 1: Няма Чаму? Я чуў, некаторыя NOS тут. Someone-- Так. АЎДЫТОРЫЯ: Вы не хапае біт сапраўды будзе трымаць. СПІКЕР 1: Добра. Так што я не дастаткова біт, каб працягваць ісці. Такім чынам, што адбудзецца? Гэта проста збіраецца спыняцца? АЎДЫТОРЫЯ: У нейкі момант яна будзе зачынена the-- СПІКЕР 1: Гэта будзе зачынена пятля ўніз, але чаму? Што адбудзецца на самы канец яго межаў? Да? АЎДЫТОРЫЯ: Гэта будзе цыкл Вярнуцца да адмоўных лікаў. СПІКЕР 1: адмоўных лікаў або калі мы проста лячэння станоўчая, нуля, па меншай меры. Так што, так, абсалютна. Нагадаем, што мы бачылі ў апошні раз, што калі вы павялічыць вашы біты занадта шмат разоў, і вы там першы план перапаўненне ёмістасць ИНТ ці нешта тыпу дадзеных, вы збіраецца, каб абгарнуць вакол, напэўна, два адмоўных лікаў. Ці, калі вы паказаць, што дыяпазон павінен быць толькі станоўчым, якія вы можаце зрабіць, але мы не бачылі, што яшчэ, Вы маглі б у канчатковым выніку, па меншай меры яшчэ на нулі. Хоць, на самой справе, так. У гэтым выпадку адмоўнага лік, і ў гэтым выпадку цыкл будзе спыніць таму што я не, на самай справе, больш або роўна нуля, калі ён адмоўны. Так, на жаль, як доўга б мы павінны чакаць? Зараз мы да тое, што 2 млн иш? Мы, як 2 млрд, мы збіраемся, прыйдзецца чакаць пакуль мы не можам рэальна ўбачыць гэты сімптом. Але мы бачым яго трохі хутчэй, maybe-- давайце паглядзім, калі мы можам перапыніць. Давай. Нават меню з'яўляюцца павольна. Добра. Такім чынам, мы вернемся да таго, што ў хуткім часе. Гэта добрая time-- пабяры, шчанюкі. Гэта добры час для некаторых аб'яваў. Так што, калі вы маглі б ўдзельнічаць у YHack, які з'яўляецца падзеяй з'яўляецца Спонсарам нашых сяброў у Ельскім універсітэце. І, сапраўды, некаторыя з Курсу ТФ ў Ельскім універсітэце ўдзельнічаюць у гэтым. YHack з'яўляецца міжнароднай секчы-а-марафон арганізаваны і праведзены у Ельскім універсітэце, у выніку чаго разам 1500 аднадумцаў хакераў і творчых ўсіх па ўсім свеце. Калі гэта ўяўляе цікавасць, зірнуць тут. Калі гэта занадта коратка на экранам, зірніце на сённяшніх слайдаў для URL для yhack.org. Так, таксама некалькі хуткіх аб'яваў. Так, афіцыйна ўчасткі пачнуць на наступным тыдні тут і Нью-Хейвен. Майце на ўвазе, вы будзеце атрымліваць E-mail праз гэты ўік-энд, хутчэй за ўсё ,. Гэта займае шмат часу, для CS50 да падзелу, улічваючы ўсе людзі ў клас і ўсё ў руху. І ўсё вучэнне стыпендыятаў раскладу і яшчэ умацоўваючы, але сочыце за электроннай пошце і ў выпадку неабходнасці быць, вы можаце паўторна раздзел там пасля. Study.cs50.net. Такім чынам, нават калі вы з'яўляецеся сталым удзельнік на участках, разумеюць, што амаль усе рэсурсаў мы выкарыстоўваем у раздзелах з'яўляюцца агульнадаступнымі на CS50 Даследаванне па гэтым адрасе тут. Так што, калі вы калі-небудзь хацелі б зноў водгук Матэрыял з падзелу, ці чытаць наперад, ці вы не можаце зрабіць гэта некаторыя тыдні разумець, што прыклады слайды, і праблемы, і вызначэння, і больш за ўсё там таксама. Гадзіннік аднавіць сёння, і заўтра, і ў сераду, і ў чацвер, праверце Курсу вэб-сайт для графіка. А таксама, у цяперашні час прыступае сёння CS50 Абмеркаваць. Так што, калі і калі ў вас ёсць пытанні адзін з адным або для супрацоўнікаў Курсу, і, як правіла, працуе на нейкай праблемы набору, зразумець, што вы не абавязкова павінны звярнуцца да чалавека наступным вамі. Калі няма ні аднаго, вы можаце дацягнуцца да нас і аднакласнікамі онлайн з дапамогай CS50 Абмеркаваць. Такім чынам, гэта абмеркаванне дошка для курса, і разумею, што гэта гэта, бадай, лепшы месца, каб пачаць, калі ў вас ёсць пытанні, калі ў непрацоўны час у прыватнасці. Ланчі пачне на гэтым тыдні таксама. У Агонь і лёд [Неразборліва] ў Нью-Хейвене. Зірніце на курс-х сайт для таго, каб RSVP. Першы прыйшоў, першы абслужыць за гэта. Калі вы не атрымаеце на гэтым тыдні мы зробім гэтыя самыя кожную пятніцу на працягу тэрміну. ОК, а цяпер некалькі слоў аб класіфікацыі. Асабліва, калі мы ўступаем праблемы на адзін, які на гэтым тыдні, і праблема ўсталяваць два і пасля гэтага. Як мы можам ісці аб ацэнцы мноства Р і ацэнкі іх якасці? Такім чынам, гэта чатыры восі, якія мы выкарыстоўваем у CS50, і яны гэтыя чатыры тут. Сфера, якая захоплівае на лікавы Асновай толькі, колькі з Р мноства ты парушэнні. Гэта прыкладна адпавядае намаганні, і гэта наш спосаб захопу вы паспрабуйце палову Р ўсталяваць ўсе Р набору. Гэта лёгкі, каб атрымаць ідэальны балы па, калі вы, сапраўды, паспрабуйце кожны аспект P набору. Так, што майце гэта на ўвазе. Правільнасць менавіта гэта. Ці мае ваш код працаваць, як спецыфікацыі і як рашэнне ўзор штабоў выказаць здагадку, што ваш код павінны, па сутнасці, працуюць. Праверце 50, калі вы яшчэ не сустрэлі яго Тым не менш, у Р усталёўваецца адно ўдакладненне і, як правіла не даюць вам так / не адказаў адносна таго, што ваш код з'яўляецца правільным. Прынамсі, настолькі, наколькі мы збіраемся ацаніць яго на аснове выпрабаванняў што мы бяжым у гэтай праграме. Дызайн з'яўляецца значна больш суб'ектыўна. Гэта, як добра напісана ваш код. І гэта тое, што Вы атрымаеце лепш з цягам часу, і гэта тое, што мы будзем забяспечыць больш якасную зваротную сувязь па. І дызайн я мог значыць неўзабаве вы можа быць у нейкай спакуса P ўсталяваць нешта зрабіць loopingly, але ёсць магчыма тры, ці чатыры, або пяць ўкладзеных цыклаў пярэднія або ўкладзеныя ў той час як завесы. Што наогул павінна пачаць, каб вы скурчвацца і ў цэлым будзе лічыцца дрэнны дызайн. І вы пачнеце бачыць у класе і з класа добрых спосабаў рабіць рэчы, дрэнныя спосабы рабіць рэчы, якія можа быць усё правільна, але не абавязкова добра распрацавана. Як пісаць эсэ. Вы маглі б быць у стане паставіць словы на старонка, граматычна правільна, але эсэ або Тэзіс, што яны ў гэта проста цалкам некогерентного або непераканаўчым. І так, што можа быць у аналагавы напісана свет дрэнны ці добры дызайн. І стыль, таксама, даволі суб'ектыўна. Але па меншай меры мы чакаем кансістэнцыі. Гэта, як даволі ваш код. Рэчы прыгожа з водступам? Ці з'яўляюцца вашыя зменныя таксама называюцца / Ці ўсё Вашы дужак і фігурныя дужкі выраўноўваецца так, як яны павінны быць? У нас ёсць кіраўніцтва CS50 стыль як Пастаўленая задача будзе ўказваць вам на. Тыя больш камфортна ў Сардэчна запрашаем у бадзяжных ад так доўга, як вы самастойна паслядоўным. І гэта таксама ўрок мы ўмацаваць у раздзеле. Так што, калі ўсё гэта было трохі хутка, разумеюць, Р набор і секцыі будзе ісці ў больш падрабязна ў бліжэйшы час. Але ў цэлым у нас ёсць вельмі мала вядра для CS50. Вынікі, як правіла, у маштабе ад аднаго да трох, або аднаго да пяці. Мы literally--, і я не магу сказаць, гэта досыць на працягу першага тыдня. Тры добра. Такім чынам, хоць, ды, тры з пяць нармальна, матэматычна, можа быць 60 працэнтаў або як D мінус. Тры, на самай справе, добра. І на самай справе, мы чакаем, большасць студэнтаў у класе каб пачаць тэрмін вакол двоек, троек і чацвёрак, і. Напэўна, не так шмат пяцёрак. Ці не занадта шмат з іх. Але ў цэлым, каб пачаць у што салодкае пляма на крывой такім чынам, што з цягам часу, там на самой справе месца для, і магчымасці для верхняй прагрэсіі. Таму, калі ласка, не прыраўноўваюць тры з 60%. Гэта значна больш абстрактнае, чым гэта. Формула, з якой мы вылічыць гатункаў важыцца наступным чынам. Правільнасць стаіць найбольш. Дызайн варта трохі менш. Стыль варта трохі менш. І гэта, як правіла захоплівае колькасць часу што ідзе ў атрыманні кожнага з гэтых восяў раз. Стыль вельмі лёгка, павінны быць супер хутка, але гэта лёгка звычка каб атрымаць гультаяватыя. Правільнасць можа заняць Вы вялікую частку часу. Пераследуючы некаторыя памылкі можа прыняць, што дадатковы гадзіну ці болей, і так, забіўшы у канчатковым рахунку, захоплівае гэта. І так, цяпер больш сур'ёзна слова. Так CS50 мае адрозненне, да лепшага ці яшчэ горш, у тым можа быць, лепш пазнаёміцца з пытаннямі акадэмічнай сумленнасць, чым большасці іншых, вядома. І на самай справе, гэта, наколькі мне вядома, што мы адпраўляем больш студэнтаў, на жаль, у дысцыплінарных мэтах кожны год у выніку. Так, у інтарэсах поўнага раскрыццё інфармацыі, давайце коратка казаць пра тое, што адбываецца ў CS50, і тое, што вам можа зрабіць, і што вы можаце мець на ўвазе. Такім чынам, вось з 2007 года, калі Я атрымаў у спадчыну курс, гэты лік выпадкаў Дошка аб'яваў. Дошка аб'яў з'яўляецца дысцыплінарная Гарварда орган, цяпер гонар Адвакат, у якіх выпадках, калі згадваюцца Студэнты зрабіць нешта, што, вядома-х Вучэбная праграма лічыць неабгрунтаваным. Там няма рэальнай карціны тут, я б сказаў. Гэта вагаецца над гадоў, але ў цэлым гэта колькасць выпадкі, якія згадваюцца. Колькасць студэнтаў якія ўдзельнічаюць? Гэта таксама мяняецца. Як правіла, у мінулым годзе за Напрыклад, 29 студэнтаў Гарварда былі Аб'ява селі, так бы мовіць. 29 з іх цяперашніх студэнтаў, Двое з іх раней студэнтаў, хто супрацоўнічаюць у нейкі неспрыяльны чынам. І тады ў тэрмінах Працэнт, гэта, як правіла, каля 3% класа, які, на жаль, робіць гэтыя віды рашэнняў. Так, у мінулым годзе ён склаў 3,5% з цела студэнта CS50 ў што было аб'яву селі, так бы мовіць. Такім чынам, што ж ўсё гэта значыць? А што мы, уласна, рабіць? Такім чынам, для поўнага раскрыцця, мы абсалютна, як кампутарныя навукоўцаў, ёсць праграмныя сродкі ў нашым распараджэнні і гэта вельмі лёгка для нас, справядлівасці дзеля, аднакласнікі, што аднаго, якія не з'яўляюцца перасячэння гэтых ліній, каб перасекчы параўнання кожны прадстаўленне ў гэтым годзе супраць кожны прадстаўленне ў працягу апошніх васьмі гадоў. Праграмнае забеспячэнне робіць гэта. І ў канчатковым рахунку гэта чалавечыя вочы, якія вырашаюць ці не ставяцца некаторыя значэнне для далейшага судовага разбору, але праграмнае забеспячэнне, безумоўна, дапамагае. І гэта, шчыра кажучы, чаму, што я думаю, у нас ёсць такія вялікія лічбы ў CS50. Гэта не таму, што CS50 студэнты або CS студэнты больш як правіла, менш сумленнымі чым любыя іншыя студэнты, гэта проста ў нас ёсць інструменты і метады з якой зрабіць гэты першы праход. Але мы робім сачыць на ўсе гэтыя рэчы а таксама, зноў жа, у інтарэсах прызнаючы працу, якая быўшы пакласці у з супер большасці класа. І палітыка Курсу на акадэмічнай сумленнасці, хоць гэта куча пунктаў доўга з кучай патронаў якія, мы спадзяемся, цалкам чытаным, гэта сапраўды зводзяцца да разумных. І лепшы правіла, што мы прапануем да ў праграме гэта, сутнасць ўсіх работ, якія вам прадставіць гэты курс павінен быць свой уласны. І на самай справе, амаль усе з тых, у выпадках, указаных для прыняцця дысцыплінарных мер гэта таму, што нейкі студэнт позна ноч, як правіла, аказалася сваё код больш прама аднакласніку, які затым прыняў яго у поўным аб'ёме або значна іх. Але на самой справе, гэта нармальна. І сапраўды, у офісе гадзін, паперкі Вы былі перададзеныя, калі вы прыйшлі ў офіс гадзін на мінулым тыдні стымулюе столькі ж. Вы цалкам вітаецца і заахвочваецца каб абмеркаваць праблемныя наборы з аднакласнікамі. Каб дапамагчы адзін аднаму, калі каменем. Але наогул правіла павінна быць гэтым ", калі вы просіце аб дапамозе, Вы можаце паказаць свой код, каб іншыя, але вы не можаце паглядзець іх ». Так, іншымі словамі, калі я змагаецца з нейкай набор P а я сяджу там у Сталовая, або ў бібліятэцы, або ў класе спрабуючы знайсці няспраўнасць, Я магу, вядома паказаць мой код на маім экране каб чалавек, які сядзіць побач для мяне, вядома, персанал, але таксама аднакласнік. Але калі рашэнне, што мой аднакласнік прапануе гэта, ох, тут проста зірніце на тое, што Я зрабіў, што перасякае лінію. І я адважыўся б сказаць, што гэта, як правіла разумная рэч для большасці людзей вельмі лёгка вызначыць лінію. І так, паглядзець навучальны план для больш падрабязна. А цяпер адзін з найбольш спрэчныя аспекты з CS50 праграме, што я думаў, будзе казаць у заключэнне тут гэта так званы пункт шкадаванне. Такім чынам, вось усё ў парадку друку. Але ў цэлым мы бачылі за апошнія 8 гадоў плюс што, сапраўды, амаль усе CS50-х выпадкі акадэмічнай несумленнасці было вынікам толькі бедныя прыняцця рашэнняў позна ўначы. Вынікам стрэсу, вынік адсутнасці ежы, недахоп сну, занадта шмат камплектаў P, занадта шмат тэрміны, занадта шмат абавязацельстваў. Стрэс стварэння ў 2:00, 03:00 М., 4:00 раніцы, з тэрмін за гарамі. Большасць студэнтаў у гэтых выпадках толькі што зрабілі дрэнныя рашэнні што яны, магчыма, вельмі добра шкадаваць На наступную раніцу, калі не хвілін, але да мінулага года не было выпускны клапан, што гэтыя студэнты маглі на самай справе адкрыць на самай справе-адрас Праблема галава на без страху быць загрузкі з каледжа ў цэлым. І, сапраўды, мы ўвялі гэта шкадаванне пункт мінулым годзе, у якім гаворыцца, што калі на працягу 72 гадзін, тры дні, перасячэння некаторай лініі прадпісана ў праграме вы прыйшлі наперад, каб адзін з Курсу кіраўнікі, і мы павінны пагаварыць пра яе. Там па-ранейшаму быць некаторыя вынік, насуперак таму, што гэта Паведамлялася, наадварот. Існуе яшчэ некаторыя вынікі, якія гэта дзейсныя ходам, як правіла, абнуленне р набор або прымаючы некаторыя іншыя дзеянні, але мы, на самай справе, справіцца з гэтым самі і не гл яго вышэй былі вынікі можа быць значна больш сур'ёзнымі. І, сапраўды, падзяліцца, што адбылося у мінулым годзе, за восем гадоў, і ў цяперашні час дзевяць гадоў, выкладання гэтага курса і пасля важдацца з рознымі ручкамі, ператвараючы розныя цыферблаты над мінулым некалькі гадоў на акадэмічнай сумленнасці, і, бачачы, па дадзеных няма бачных Ўплыў, нават у прамовах, як гэта, гэта было рукі ўніз лепшае, што мы ўвялі педагагічна у восем гадоў разам гэтыя лініі ў CS50. 19 студэнтаў выйшлі наперад па гэтым артыкуле ў мінулым годзе. Мы не прынялі ніякіх мер для сем з гэтых студэнтаў, вызначэння таго, што яны залішне хваляваўся. Яны былі не, на самай справе, перасёк лінію, але гэта быў добры чат, каб тым не менш. Мы абнуляецца 11 ачкоў якія былі прадстаўлены. І ў адным выпадку мы папрасілі студэнт, каб зрабіць праблему ўстаноўкі. Але больш пераканаўчым, шчыра кажучы, з гэтых 19 чатаў, які быў нашмат больш, чым я Чакаецца, што кожны з іх 10 хвілін да можа быць, гадзінная, таксама прынёс каб запаліць шэраг пытанняў, якія тычацца сямейныя пытанні, пытанні сябар, праблемы псіхічнага здароўя што мы тады займаліся, З студэнта дабраславеньне, жыхар дэкан, ці сяброў, або любое іншае лік дапаможных рэсурсаў. Так што гэта было, безумоўна, адна з лепшых відаў выкарыстання нашага часу і адзін з лепшых умяшанняў. Ня з тым, што ён не меў ўваход на хуткасці выяўлення акадэмічнай несумленнасці ў цэлым. І я адважуся сказаць ,, гэта падмноства студэнтаў у мінулым годзе быў дэмаграфічны, што мы раней ніколі не вызначаны да і ніколі не звязаны з раней. І так, гэта былі выдатныя гісторыі поспеху нават калі яны былі даведзены да святла менш чым аптымальных умовах. Так, майце гэта на ўвазе як вы зробіце, магчыма, некаторыя бедныя рашэння самастойна позна ўвечары, што існуе да таго часу, звяртацца як студэнт у гэтай сітуацыі валодаць і выйсці наперад, так што мы можам ёсць такі чаце і барацьбы з ім такім чынам, што гэта адукацыйны, а затым мы можам пакінуць гэта ззаду нас на наступны дзень. Так што без далейшых цырымоній, прыняць краю ад гэтай гутаркі, прычына шчанюкі Уверх проста, каб зламаць лёд на імгненне. І, на жаль, яны ўсё спяць, але тое, што павінна было адбыцца тут быў кожны павінен быў у трапятанне і від адпачынку пасля гэтага вельмі цяжкага размовы. Але, мабыць, я паклаў шчанюкі спаць. Але калі вы ідзяце ў CS50-х сайт слеш шчанюкі, вы можаце глядзець іх на працягу ўсяго дня. У прыватнасці, можа быць, 2:00, або 03:00, або 4:00 раніцы па начах каб убачыць невялікае палягчэнне стрэсу ёсць. Так што гэта слэш шчанюкоў. Добра. Хіба гэта не весела? ДОБРА. Такім чынам, вернемся да некаторых кампутары навука, калі можна. Так, нагадаем, што ў мінулы раз мы пачалі шукаю не толькі на асноўнай, які быў функцыя па змаўчанні, то пры зялёны сцяг націснуў эквівалентныя, але мы таксама пачалі коратка пісаць некаторыя з нашых уласных функцый. І не да гэтага часу ні адна з гэтых функцый былі асабліва вялікімі ці мясістыя. Вы атрымаеце ў тыя больш Функцыі, верагодна, Р ўсталяваць 2, Р набор 3, безумоўна, Р набор 4 і наперад. Цяпер большасць вашых праграм, калі не ўсё з іх, вядома, для P набор 1 можа быць зроблена цалкам у асноўны. Калі ваша праграма толькі пяць ліній, 10 ліній, доўга нават 20 радкоў, выдатна Разумна пісаць усё ў асноўны і не больш чым ўскладняюць код, але тое, што мы робім сёння і далей спрабуе таксама ўвесці некаторыя добрыя метады праектавання так што, як ваш код становіцца больш складанай і, як праблемы Вы хочаце, каб вырашыць атрымаць складаней і больш цікавым вас ёсць, накшталт, інструменты ў панэлі інструментаў, з якой , Для распрацоўкі рашэнняў у іх. Такім чынам, давайце зірнем таму на гэтая праграма ад майго апошні тыдзень, што быў нулявы функцыі кропка С і заўважыць, што, папросту кажучы, гэта выглядае з двума Функцыі, асноўны і імя друк. І успамінаючы або, магчыма, зваротны інжынірынг сёння, тое, што было матывацыі для ўкаранення функцыя ў радку 28 называецца, Назва друк? Або тое, што гэта было прыкладам у Умовы прынцыпе або вынас, калі вы б. Некаторыя шумы. Што? Ды так Функцыянальная декомпозиция гэта свайго роду фантазіі спосаб сказаць, раскласці вашу праграму на складовыя часткі а затым выкарыстоўваць тыя часткі сабраць цэлае. Так, што таксама толькі збольшага з рот ўжо але гэта, бадай, нават Лепшым прыкладам чаго-то проста называецца абстракцыяй. Дакладна? Абстракцыя будзе адзін з паўтаральных тым у CS50 а таксама камп'ютэрныя навукі ў больш агульным, так як гэта тэхніка, з якой вы можаце вырашыць праблемы больш эфектыўна, таму што вы можаце напісаць рашэння больш інтуітыўна і такім чынам, што шалі і зразумела, іншымі людзьмі. Што я маю на ўвазе, што? Так, магчыма, гэта нашмат больш чытэльным паглядзець на праграмы, як гэта, супер кароткія, хоць ён ёсць. Калі вы бачыце ў радку 22, што ёсць функцыя называецца, імя друк. Адна Гэта імя кажа, што ён робіць. Гэтая функцыя, па-відаць займае ўваход паміж яе круглых дужках, і, мабыць, нешта робіць, як мяркуецца выводзіць імя. І так, хоць мы можа мець зусім зрабіў тое, што мы зрабілі тыдзень таму, які быў проста ўзяць гэты фактычны радок кода, пазбавіцца ад гэтага, і атрымаць пазбавіцца ад гэтага ўсё разам, мы накшталт абстрагуюцца паняцце друку імя. Я не хвалюе, калі вы выкарыстоўваеце друку размарожванне. Мяне не хвалюе, калі ў вас ёсць адсоткаў S і зваротны слеш Н. Яны неверагодна таемныя звесткі. Тое, што я клапачуся аб якасці праграміст друку імя. І так, што лепшы спосаб зрабіць гэта чым шляхам выкліку функцыі, імя друк? І так, што было адным з матываў для гэтага нешта накшталт гэтага. Стварэнне код больш чытэльным, больш шматразовыя, а таксама самастойна апісальны характар. Цяпер, давайце зірнем у іншым прыкладзе, які быў функцыі адзін, які мы мелі тут. Так, на гэты раз, мабыць, нават больш, пераканаўчым, паколькі, у гэтым выпадку, Я не хачу, каб проста атрымаць Int. Я хачу, каб атрымаць станоўчы Int. І атрымліваецца, каб атрымаць станоўчы Int вы павінны зрабіць кучу мітуснёй. Дакладна? Гэта не проста адна лінія патэлефанаваць, як імя друк быў, якія, па агульным прызнанні менш пераканаўчымі. Каб атрымаць станоўчы Int, logically-- дазвольце мне пракручваць ўніз, каб схаваць гэта. Што вы павінны зрабіць? Як і ўсе інструментаў, якія мы ёсць на дадзены момант з'яўляюцца рэчы, як друк DEF ад стандартных Бібліятэка, а таксама з бібліятэкі CS50 у нас ёсць Атрымаць Int, Float і атрымаць, Атрымаць Доўгі, доўгі, атрымаць радок, але толькі адзін, Герман, прама зараз Атрымаць Int. Такім чынам, калі толькі ў вас ёсць інструмент у скрыні для інструментаў, гэта атрымаць Int, як мы можам ісці аб рэалізацыі яго, каб атрымаць станоўчы Int? АЎДЫТОРЫЯ: Стварыце часопіс і праверыць на Ці уваходнай, што яны далі быў станоўчым ці не. СПІКЕР 1: Ідэальны. Дакладна. Іншым інструментам мы маем у нашым інструментаў ад тыдня ці два таму гэта толькі разнавіднасцяў цыклаў. І так, так, калі мы выкарыстоўваем час цыкл, або зрабіць у той час цыклу, або пярэдняя цыкл мы маглі б сысці з любым з тых, у той ці іншай форме. Мы можам рэалізаваць паняцце Get станоўчае INT толькі з дапамогай Get Int, а затым проста трымаць называючы яго зноў і трымаць прыставаць карыстальніка пакуль ён ці яна на самай справе дае нам тое, што мы хочам. І вось зараз, гэта абстракцыя працэсу атрымання станоўчага Int у функцыі пад назвай Атрымаць Станоўчы Int трохі больш пераканаўчым, паколькі глядзець на гэта. Гэта як 10 плюс радкоў кода, што ўдзельнічаюць у атрыманні станоўчага Int, і я сапраўды не хвалюе, як вы гэта робіце. Усё, што я ўсё роўна гэта ты можаце зрабіць гэта, і таму я маю скрытыя ўсе гэтыя дэталі за Функцыя называецца Атрымаць Станоўчы INT, што сапраўды, мае гэтую рабіць, пакуль завесы. І ўбачыць на мінулым тыдні сінтаксісу ёсць, але гэта толькі заяўляе N, і выводзіць Інструкцыя для карыстальніка. Ён заклікае Атрымаць Int, а затым ён правярае гэта ўмова зноў і зноў, і ня зноў, пакуль карыстальнік ўзаемадзейнічае. Так што цяпер, некалькі праверак на адэкватнасць. Для тых, хто, магчыма, знаёмыя з нейкай праграмавання, чаму N заявіў, чаму я ствараю N па-за зрабіць у той час цыкл? Чаму гэта на лініі 29, а не на 33, як, напрыклад. АЎДЫТОРЫЯ: Таму што, калі вы аб'явіць яго па-за, гэта свайго роду з больш, чым больш scope-- СПІКЕР 1: Добра. АЎДЫТОРЫЯ: --і калі вы абвясьцеце гэта ўнутры цыклу, [неразборліва] таму што ён не ведае пра гэта. СПІКЕР 1: Дакладна. Калі я магу simplify-- гэта пытанне з вобласці бачнасці. І сфера ставіцца да кантэксту ў якой пераменная існуе або можа выкарыстоўвацца. І прыемна правіла тут з'яўляецца тое, што як правіла, пры аб'яўленні або зарэгістравацца пераменная Вы можаце толькі выкарыстоўваць яго ўнутры з бліжэйшых якая ахоплівае фігурныя дужкі. Такім чынам, што ж гэта значыць? Калі я, замест таго, каб, адмяніць гэта і ісці з тое, што адчувае сябе крыху прасцей. Дакладна? Радок 32 выглядае проста чысцей мяне цяпер. Я раблю і тое і іншае адзін раз і затым прысваення правая рука да левай руцэ. Праблема ў цяперашні час грунтуецца на што вызначэнне аб'ёму у тым, што N можа быць выкарыстаны ў лініі 31 і 32 ўнутры гэтага цыклу, але дзе па гэтым вызначэнні ён не можа быць выкарыстаны? У адпаведнасці што? Так. АЎДЫТОРЫЯ: 35. СПІКЕР 1: 35. Дакладна не 35. А таксама дзе яшчэ? АЎДЫТОРЫЯ: 34. СПІКЕР 1: Нават 34 праблематычным, таму што гэта па-за фігурных дужках. І так на самой справе, давайце паглядзім, што адбываецца. Дакладна? Гэта можа здацца трохі інтуітыўна або не могуць, але давайце паглядзім, што кампілятар павінен сказаць, калі мы ідзем у тэчку зыходнага сёння. Зрабіце адну функцыю. О, мой бог. Ну, я, нарэшце, скончыў што, дарэчы. Добра. І тое, што праблема тут? Вельмі таямніцай глядзець. Але вось тое, што я typed-- зрабіць адну функцыю. Вось тое, што робіць індукаваны які на самай справе з дапамогай кампілятара ляск з некаторымі з гэтых сцягоў што мы ўбачым зноў у хуткім часе. І зноў, заўсёды выглядаюць на першай памылкі, таму што гэта, магчыма, толькі каскадны бессэнсоўна ўплыў на іншых лініях. Дык што ж гэта азначае, што праблема ў функцыі 1.C. Менавіта на лініі 32. І гэта ў слупку, або характару, 13. Таму, калі ваш тэкставы рэдактар, які можа дапамагчы вам вызначыць, дзе праблема. Так што, калі я пракруткі уверх, што лінія 32? Гэта сапраўды гэты што ўжо выдзелены Права here-- выкарыстоўваўся пераменная п. Але гэта не выкарыстоўваўся. Я выкарыстоўваю яго. Але кампілятара блытаць, таму што яна існуе толькі ўнутры гэтай рамкі. І таму я не магу выкарыстоўваць яго тут. Я не магу выкарыстоўваць яго тут. І кампілятар, такім чынам, нават не хвалюе, што я спрабую. Гэта, здаецца, не будзе выкарыстоўвацца у межах сваёй фактычнай вобласці. Такім чынам, мы можам пашырыць сферу робячы менавіта тое, што мы пачалі with-- Int N. І хоць гэта не выглядаць элегантна, мабыць, і мы бярэм дадатковую радок тут, зараз ён знаходзіцца ў рамках ўсюды. Такім чынам, давайце паспрабуем яшчэ раз. Так што функцыю аднаго. Ніца. І зараз, калі я, калі я запускаю функцыю Адзін з іх, давайце яго адмоўнае 10, адмоўнае 1, 0, 1, і гэта сапраўды працуе. Так што яшчэ адно рашэнне тут. Вы ведаеце, што? Што рабіць, калі я сапраўды змагаюся з гэтым? Я не ведаю, дзе п мяркуецца ісці. Вы ведаеце, што? Я проста хачу, каб пакласці яго ўсё спосаб уверсе майго файла тут. Што б гэта зрабіць, як вы думаеце? Да? АЎДЫТОРЫЯ: [неразборліва]. СПІКЕР 1: Так. Так што я зрабіў гэта глабальная, так бы мовіць. Калі ў вас ёсць пераменная, што гэта за межамі усе вашы функцыі, якія дазволена, і код варта кампіляваць і п цяпер будзе даступная не толькі ў Get станоўчае INT, але і ў main-- якія трохі трывожна, таму што ёсць ўжо ў п Асноўная, дык яшчэ на што ў проста moment-- але гэта будзе лічыцца дрэнны дызайн. Добра. Калі вы змушаныя звяртацца да нешта накшталт, ну, я буду проста пакласці яго тут, таму што код здаецца кампіляваць як правіла, не лепшая практыка. Хутчэй вы хочаце выбраць самы вузкі магчымы маштаб для зменных, які будзе азначаць, адбываецца з нашай першапачатковай канструкцыі, якая прама тут. Цяпер, як у бок, калі ты ёсць тут тоесна імя зменнай, спосаб справіцца з this-- хоць гэта не будзе адбывацца занадта often-- з'яўляецца тое, што гэта па-ранейшаму выдатна тут. Але гэта вызначэнне ў адпаведнасці п 22 будзе цень глабальны адзін. Так што гэта адзін будзе працаваць у Асноўны і глабальны на самай справе ўжываецца, калі вы знаходзіцеся ў атрымаць станоўчы INT Але пра гэта у іншы раз, але толькі для тых, каму цікава. Карацей кажучы, мы фіксуем гэта тут. Зараз давайце дражніць адзін ад аднаго два іншыя часткі перш чым мы разгледзім у адной апошнім радку кода у гэтай праграме. Атрымаць станоўчы Int. На левай баку яго слова ёсць слова INT. Што гэта азначае вы думаеце? Да гэтага часу мы ў асноўным бачылі несапраўднымі. Да? АЎДЫТОРЫЯ: Гэта тып пераменная, вы пытаецеся. СПІКЕР 1: Так, гэта тып, дазвольце мне не сказаць, пераменная, але тып значэння што я прашу вярнуцца да. І на самай справе, што гэта Інтуітыўна зразумелы тут, з надзеяй. Дакладна? Калі вы хочаце атрымаць станоўчае INT, што гэта вы хачу function-- як наш добраахвотнікі з апошняга тыдня перадаць вам назад кавалак паперы з міжнар на ім? І так мы паказалі, што так званы тып якое вяртаецца гэтай функцыяй гэта атрымаць станоўчы Int. Калі мы не хочам, каб яго нічога вяртаць, вы кажаце, несапраўднымі. Калі вы хочаце, каб вярнуцца радок, вы кажаце радок. Калі вы хочаце, каб вярнуцца паплавок, вы кажаце, паплавок. Але толькі той, які ўжываецца тут лагічна, таму што я выкарыстоўваю GET Int, хоць я абмяжоўваючы яго станоўчыя значэння, з'яўляецца вярнуць Int. Так, наадварот, што гэта значыць што ёсць пустэча ў дужках? Што дужкі як правіла, вызначаюць? Да? АЎДЫТОРЫЯ: Гэта азначае, што функцыя-х на самай справе не атрымаць яго. СПІКЕР 1: Гэта азначае, што функцыя-х на самай справе не атрымаць тое, што? АЎДЫТОРЫЯ: ўваход. СПІКЕР 1: уваход, наогул. Так сапраўды, калі дужка Тут вы паказваеце несапраўднымі, гэта проста азначае, я не хачу ніякай ўваход. Я разбяруся з праблемай сам. І на самай справе, вы не павінны расказаць атрымаць станоўчы INT-небудзь. Вы проста кажаце, атрымаць пазітыўны Int, і што Функцыя будзе сыходзіць і рабіць сваю справу. Але там было няшмат трук У мяне гуляў тут увесь гэты час каб пераканацца, што гэты код кампілюецца. Звярніце ўвагу, што int-- атрымаць станоўчы INT void-- на лініі 27. Але па нейкай прычыне, здавалася б, дзіўны гэта таксама тут, на лініі 16. І толькі для добрай мерай Я паўтару гэта так цалкам ідэнтычныя. І я сказаў прататып з трохі адна радок каментар. Што адбудзецца, калі я выдалю, што і Зараз запусціце зрабіць функцыя 1, увядзіце. Упс. Пачакайце хвіліну. Дзе мой ўкладка? А? У рэжыме чакання. Зрабіць функцыю 1. Там мы ідзем. ДОБРА. Калі б не выратавала яго належным чынам. Так, я думаю, што гэта крыху памылка тут, дзе я не бачачы імя укладкі ў цяперашні час. Так што тут адбываецца? Невідавочнае аб'яву функцыі атрымаць станоўчы Int з'яўляецца несапраўдным у C99. Так зман зноў. Так што гэта сведчыць аб? Ну, атрымліваецца, што З даволі дурное. Ну, гэта праграмаванне мова, або, хутчэй, кампілятар. Гэта ведае толькі тое, што ў вас ёсць вучыў яго, і гэта толькі будзе ведаць, што-то калі вы вучылі раней. Іншымі словамі, у Асноўны на дадзены момант, я спрабуе выклікаць функцыю называецца атрымаць станоўчы Int. Але кампілятар ня будзе заўважыць, што атрымаць станоўчую Int не існуе да таго часу, лініі 26. І так, што кампілятар робіць гэта проста Памылкі, як толькі ён трапляе ў лінію 17, кажучы невідавочнае аб'яву з атрымліваць станоўчую Int, які гэта проста мудрагелісты спосаб сказаць, я не ведаю, што атрымаць станоўчае INT яшчэ. Іншыя мовы, такія як Java і Python і Рубі можа глядзець наперад. З гэтага не робіць. І так як мы фіксуем гэта адзін з двух спосабаў. Альбо адзін, калі праблема ў тым, што атрымаць станоўчае INT не бачыў, Ну, дазвольце мне проста перанесьці яго на вяршыню. Гэта было выправіць гэтую праблему. Але ў цэлым, гэта лічыцца лепш тэхніка каб паставіць асноўную функцыю па крайняй топ, так што чалавечай чытання кода ведае, што робіць праграма, таму што галоўны не пахаваны ўсе спосаб унізе або ў сярэдзіне. Гэта на самым версе. Так што не адчуваю ідэальным. І вы можаце на самой справе атрымаць ў сітуацыі, калі Калі выклікі адной функцыі іншы, што выклікае іншую, ня вы можаце атрымаць на пытанне дзе ні можа пайсці вышэй іншы, лагічна. Гэта проста не магчыма. І так як на працу вакол гэтага проста ўзяць подпіс функцыі, што ў speak-- першая лінія, дзе гэта declared-- і проста скапіяваць, уставіць яго на зверху, а не з павойнымі braces-- проста кропкай з коскі. Гэта як маленькі намёк што гэта ў будучыні. І на самай справе, увесь гэты час, калі мы бачылі рэчы, як стандартны io.h і cs50.h, аналагічна, у тыя кропка г файлы ёсць іншыя прататыпы. І мы ўбачым, што ў хуткім часе. Карацей кажучы, калі ў вас ёсць праграма ў файле з мноствам функцый Акрамя асноўнага, вы амаль заўсёды хочуць абвясціць іх толькі шляхам іх першы лінія, кропкі з коскі, у самым пачатку файла. Гэта было шмат за адзін раз. Любыя пытанні? Любыя пытанні? Добра. Такім чынам, давайце рухацца далей, то нешта накшталт кашлю. Ох. Як фітынга. Добра. Кашаль. Дык вось з ажыццяўленне праграмы мы зрабілі іншы дзень у Драпін, што вельмі проста толькі кажа кашаль, кашаль, кашаль. Добра. І нехта сказаў некалькі дзён таму, што ёсць спосаб ачысткі гэты код ўжо. Усё ў парадку? Як толькі вы капіруеце і ўстаўкі, верагодна, дрэнны дызайн. Прынамсі, як толькі мы атрымаем чатыры ці пяць або 20 кашляе, ён адчувае сябе дрэннай практыкай. Мы проста трымаць копію, ўстаўку. Што відавочнае рашэнне ачысткай гэтую праграму ўверх? АЎДЫТОРЫЯ: Пятля. СПІКЕР 1: Так. Так што выкарыстоўвайце пятлю. І мы можам выкарыстоўваць для цыклу, у той час як цыкл, любую колькасць падыходаў. І на самай справе, вось што мы робім у версіі аднаго тут. Я замест перапісаць яго у версіі адзін з cough.c быць проста кашаль на працягу завесы. Добра, але ёсць магчымасць цяпер роду пачатку на гэта крыху больш як дызайн ўрок, які мы вучылі хвіліну назад, што this-- выказаць здагадку, што я хацеў стварыць функцыю, званую кашаль, давайце разгледзім на імгненне тое, што ён будзе выглядаць. Так што, калі я хачу што- кашляць, я проста трэба выкарыстоўваць друк п ўнутры функцыі. І сапраўды я. І на самай справе, усё гэта Час, у любы час вы друк нешта экран, праграміст назвалі б, што пабочны эфект. Гэта не я перадачы таму нехта значэнне. Гэта мне прымаць нейкія дзеянні што можа быць візуальна відавочна. Але гэтая функцыя кашаль, ён вяртае нічога на аснове яго першай лініі? Не, таму што тып якое вяртаецца значэння з'яўляецца несапраўдным, што проста азначае, гэта не ўручаць мне нічога наўзамен. Гэта можа быць нешта рабіць візуальна, але гэта не ўручаць мне рэзервовае паперку ​​як на мінулым тыдні. Ці трэба любы ўваход? Няма. І так гэта пустата тут. Так што гэта таксама свайго роду празмерна інжынерных гэтую праблему. Дакладна? Я зрабіў праграму больш комплекс, некалькі радкоў кода, Я не зрабіў гэта любы больш функцыянальным, але гэта будзе прыступкай, магчыма, для больш шырокай Кантэкст больш складаны код. Але тое, што пра гэта? Што я done-- проста зірнуўшы на гэта, не гледзячы на ​​каментар на самым версе file-- Што Я прынцыпова зрабіць тут з маім кашлем Рэалізацыя, адрозніваецца? Так, у спіне? АЎДЫТОРЫЯ: Зрабіце так, вы можаце ёсць персанаж выключыць. СПІКЕР 1: Так. Такім чынам, гэта адчувае сябе збольшага добра. Дакладна? Гэта як даданне да вашага функцыю праграма або ваша функцыя, у гэтым выпадку. Ён па-ранейшаму нічога не вяртае. Гэта можа мець візуальны пабочны эфект, таму што гэта тэлефануе друку п. Але цяпер я параметризовали функцыя, якая азначае, што я паказана прынятыя уваход тыпу Int і называюць яго п, але я мог бы назваць яго што-небудзь я хачу. На самай справе, гэта можа быць проста раз будзе яшчэ больш відавочным. І тады я мог бы змяніць гэта тут. Але справа ў тым, што гэта, як я стварыць функцыю, якая прымае ўвод. І калі ўспомніць, гартаць праз, магчыма, у адным онлайн з скразныя, то Чацвёрты і апошні прыклад кашаль, Вы заўважыце, тут я абагульніў мой код further-- роду абстрактную гэта далей. Як кашлю і чхання, абодва о, як сказаць нешта робіць або свайго роду гуку. Захаваць б адпаведныя драпін блок. І так, што я зрабіў у гэтай версіі, якія мы можам проста погляд на, з'яўляецца кашаль, як кажуць, [кашляе], кашаль, а тым часам, чханне як кажуць, [Achoo]. І таму я абагульніў рэалізацыя тых зараз рэалізацыі гэта агульная функцыя, кажуць, што цікава для сённяшніх мэтаў толькі таму, што ён па-ранейшаму не мае вяртаецца тыпу. Але колькі уваходаў яна ёсць? АЎДЫТОРЫЯ: Два. СПІКЕР 1: Два. І таму, калі вы хочаце, каб прыняць у двух аргументаў, проста падзеліце іх коскі. І калі вы хочаце, каб затым выкліку гэтай функцыі, Звярніце ўвагу, што толькі патэлефанаваць скажам, цытата, канец цытаты, для першага аргументу, агульная п, для другога аргументу. Такім чынам, яшчэ раз, мы проста павінны цяпер будаўнічыя блокі, так што мы сапраўды можам ажыццявіць некаторыя з нашых уласных функцый. Добра. Любыя пытанні па іх? Так што цяпер давайце адхіліце пласт, калі так. І мэта, у канчатковым рахунку гэта на наступным тыдні праблема набор будзе на cryptogrophy-- мастацтва караскацца інфармацыю. І, у прыватнасці, інфармацыя будзе ў вас зашыфраваць або расшыфраваць будзе тэкст. І так, што быццам запрашэння пытанне сёння як добра, што адбываецца пад капотам з тэкстам за ASCII ад нулявы тыдні, і як мы можам на самай справе пачаць маніпуляваць? Дык вось імя Zamyla ст. І ў тэксце, якія могуць быць уведзеныя у, як функцыі Get струн. І пачынаючы з гэтага моманту, калі вы бачыце радок, як this-- Z-A-M-Y-L-A-- пачаць думаць пра яго, як быццам кожны з тых персанажаў у скрынцы яго самастойна. І сапраўды, праз тыдзень або каля таго гэта Час, кожны з гэтых скрынак будзе прадстаўляць вельмі канкрэтна блок memory-- ўкус памяці. Такім чынам, кожны з гэтых лістоў, У канчатковым рахунку, будзе прадстаўляць 8 біт. І мы сапраўды ўбачыць, што адбываецца на пад капотам у маім кампутары. Але для не дастаткова проста паглядзець на Zamyla праз гэтую лінзу, прычым кожны з гэтыя лісты ў яго ўласнай скрынцы. І дастаткова добра ў C мы можам доступу да кожнага з гэтых скрынь непасрэдна. Так што калі вы хочаце атрымаць першы Ліст яе імя, супер проста на C. Калі вы хочаце, каб атрымаць апошні Ліст, супер проста, як добра з кавалкам новага сінтаксісу. Так што я збіраюся ісці наперад у CS50 IDE і адкрыць радок нулявой кропкі C. І ў гэтым прыкладзе тут ёсць пара новых рэчаў адбываецца. Такім чынам, спачатку ў радку 19, мы бачылі гэта before-- атрымаць радок. Так як для хуткай праверкі наяўнасці свядомасці, калі хто-то можа прапанаваць да славесна Тлумачэнне непрафесіянала з тое, што адбываецца ў радку 19. Як толькі перавесці гэта на Англійская, што сусед ня CS50 маглі б зразумець. Так. АЎДЫТОРЫЯ: Ёсць карыстацкі ўваход А радок і захоўваць яго ў зменнай с. СПІКЕР 1: Добра. Карыстальнік увёў радок і захоўваць яго ў зменнай с. Гэта выдатна. Так што на правай руцэ бок, мы называем Get радок. Гэта вяртае значэнне што не атрымаў прызначаны ад правага боку да левай рукой- бок у зменнай пад назвай S Тое прызначаны для захоўвання радка. Дакладна. Так што цяпер лініі 22, за каментар у радку 21, Відавочна, друкуе гэты радок адзін знак у радку. Але як? Такім чынам, перш за ўсё, мы ініцыялізуючы я 0. А потым, як нам дабрацца да канец імя Zamyla ў? Ну, у канцы Імя Zamyla, я мог ўручную ўвесці апошняга знака яе імя так ці інакш, альбо лічбу яго. Дакладна? Калі мы вернемся here-- Z-А-М-L-- У-Л-A--, каб я мог ўвесці. Што індэкс Апошні ліст Zamyla ў? Калі гэта 0-- казаць як programmer-- 0, 1, 2, 3, 4, 5, Я heard-- самай справе так, апошнюю літару па назве Zamyla з'яўляецца шостым, але калі лічыць з 0, гэта будзе нумар 5. Так што майце гэта на ўвазе. Аказваецца, ёсць функцыя ў З называецца STRLEN, і назад у дзень і па гэты дзень усе яшчэ, шмат праграмістаў выбраць сінхранізаваць імёны для сваіх Функцыі, якія гучаць як словы яны спрабуюць сказаць. Так StrLen з'яўляецца даўжыня радка. І так, што б даўжыня радка S вярнуцца, калі Zamyla з'яўляецца уваходам? АЎДЫТОРЫЯ: Пяць. СПІКЕР 1: Z-А-М-У-Л. Шэсць. Дакладна? Што даўжыня імя Zamyla ў? Дакладна? І толькі ў рэальнасці, шэсць літар. Дакладна? І так што ж гэта значыць для нашага цыклу? Мы збіраемся, каб перайсці ад 0 да шасці, які збіраецца даць нам пяць ітэрацый. Што мы робім на кожнай ітэрацыі? Ну, адсоткаў З, хто-то здагадаліся другі дзень, азначае запаўняльнік для чаго? АЎДЫТОРЫЯ: Чар. СПІКЕР 1: Проста сімвал. Такім чынам, адзін character-- ня некалькі знакаў, як радок. А потым вось новая лінія што ў нас ёсць раздрукоўкі. А потым вось новы сінтаксіс. Калі вы хочаце, каб раздрукаваць я-й знак у радку S, так бы мовіць, Вы можаце проста сказаць, што найменне радкі S, а затым адкрыйце квадратная дужка, і затым зачыніў квадратную дужку, з I сярэдні. І гэта збольшага добра, што гэта выгляд выглядае як квадрат гэтак жа, як квадраты, у якіх Zamyla-х існуюць знакі на гэтым малюнку няма. Так што, калі я на самой справе запусціць гэтую Цяпер, давайце паглядзім, што адбываецца. Зрабіць радок 0 кропка слэш радок 0, і тады я збіраецца ўвесці імя Zamyla ст. Там няма хуткае, таму што я не выкарыстоўваць друк п, але гэта нармальна. Я проста ведаю, што рабіць. І на самай справе, ён друкуе Імя Zamyla, у адной на радку. Зараз давайце трохі неразумныя. Выкажам здагадку, што я не ведаў, аб StrLen i я думаў ,, Усё ў парадку, ніхто не збіраецца мець назваць больш, чым, як 50 знакаў. Давайце ісці наперад і перакампіляваць гэта і запусціце яго, а затым увядзіце ў Zamyla зноў. Лагічна, што з'яўляецца Праграма будзе спрабаваць надрукаваць? Z-А-М-У-Л-А, то, як 45 невядомыя байт памяці. І на самай справе, мы вернемся да гэтай ідэі памяці. Але толькі лагічна, калі Імя Zamyla з'яўляецца так доўга, у адпаведнасці з выявай тут, што мы гаворым, гэта трымаць друк, друк трымаць, трымаць друк, друк трымаць, трымаць друк, ўвесь шлях да 50 сімвала, якія хто ведае, што адбудзецца. Такім чынам, давайце на самай справе зірнуць. Давайце ўвесці Zamyla. Цікава. Нам пашанцавала. Проста цэлая куча прабелаў. Ох. Там адзін персанаж у стылі фанк. Гэта выглядае накшталт як дзіўнае пытанне пазначыць там, але ёсць імя Zamyla ст. Давайце сапраўды неразумныя. Як наконт таго, раздрукаваць 500 блокі ў невядомасць? Давайце ісці наперад і зрабіць гэта а затым паўторна запусціць. І давайце поўны экран гэта, таму што мы павінны бачыць больш прасторы. Zamyla. Зноў пашанцавала. Ці можам мы атрымаць больш неразумныя? Давайце больш неразумныя. 50000 знакаў. Гэта, вядома, не самая добрая ідэя. Добра. Зрабіць радок 0. Гэта будзе наш апошні дэма. Zamyla. Цьфу. Цьфу. ДОБРА. Так мая памяць сапраўды пусты прама цяпер, якая на самой справе свайго роду зручна. Тое, што я спрабую атрымаць усе правы, мэтай якіх. А цяпер я проста хачу, каб атрымаць неразумныя. 500000. Make-- давайце поўнаэкранным яго. Enter. Zamyla. Там мы ідзем. Я паняцця не маю, што гэта ёсць, але гэта гучыць дрэнна. Добра. І на самай справе, у бліжэйшы час, калі вы сярод нямногіх шчасліўчыкаў ў працоўны час і ў задачы ўсталяваць адзін, вам цалкам можа сутыкнуцца з гэтым. Сегментацыя віна на самай справе маюць выразна пэўны сэнс. Гэта азначае, нейкая памылка якія адносяцца да сегмента памяці. І з пункту гледжання непрафесіяналы, гэта азначае, мы закранулі memory-- мы выкарыстоўвалі аператыўную памяць у маім кампутары што я не павінен быў доступ. І вось што і магутны і таксама небяспечна аб З, што вы сапраўды ёсць неабмежаваны доступ ў аб'ёме памяці вашай праграмы або байт або АЗП, больш канкрэтна. Таму, нават калі імя Zamyla ў мае даўжыню ўсяго шэсць сімвалаў, Я ўсё яшчэ магу пайсці куды-небудзь ў памяці я хачу. І, як у бок, калі ў Вас ёсць калі-небудзь чытаў некаторыя артыкулы на працягу многіх гадоў аб некаторых сервер або нейкая праграма на ўзлом або узламаны, гэта скарысталіся чымсьці называецца перапаўненне буфера эксплойт, які мы будзем на самай справе пагаварыць на працягу некалькіх тыдняў, гэта як правіла, са спасылкай на тое падманваючы кампутар будзе добра ў за межы памяці што яна павінна мець, і знайсці нешта сакавітыя што memory-- пароль, мабыць, спосаб абыходу некаторы серыйны нумар праверыць, ці проста наогул у стане каб падмануць кампутар выконвае код, які не быў прызначаны. Але давайце вернемся да Рэальнасць на секунду дзе гэтая праграма была рэалізаваны з STRLEN, і ўвесці адно тут. Што новага ў гэтых трох верхніх радках? Так радок кропка ч. Аказваецца ёсць гэтая бібліятэка называецца Радок кропка Н, або радок Бібліятэка, якога файл загалоўка, так бы мовіць, гэта радок кропка ч, што дае мне Доступ да гэтай функцыі STRLEN. Калі я апускаю, што кампілятар збіраецца крычаць на мяне ў нейкай форме. Але вы ведаеце, што? Зараз давайце сапраўды нюансаў. У лініі 22, нешта накшталт з inefficient-- дрэнна распрацаваны, arguably-- аб гэтай радкі кода. Ўспомніце, як для цыклу рэалізуюцца і якія крокі паўторыцца і зноў і again-- ініцыялізацыі, стан, код, які запускаецца на выкананне, то прырашчэнне або змяненне, той стан, затым код, то змена, то стан, затым код, то змена, і гэтак далей. Так што можа быць трохі неспакой ці дрэнна зроблена тут? Так, у сінім. АЎДЫТОРЫЯ: STRLEN з'яўляецца называецца шмат, шмат разоў. СПІКЕР 1: Так. Так называецца StrLen шмат разоў, але тое, што Даўжыня імя Zamyla гадоў Упершыню цыкл выконваецца? АЎДЫТОРЫЯ: Шэсць. СПІКЕР 1: Шэсць. Ну, тое, што даўжыня яе імя другі раз код выконваецца? АЎДЫТОРЫЯ: Шэсць. СПІКЕР 1: Добра. Ён па-ранейшаму шэсць. Дакладна? Імя Zarla мае не змянілася, нават калі я шукаю толькі на частку літар у яе імя. І таму той факт, што я эфектыўна Задаючы гэтае пытанне, што даўжыня Zamyla, што даўжыня з Zamyla, што даўжыня Zamyla, шэсць асобных разы, або сем нават, проста глупства, таму што гэта нязменная, што адказам. І так, што я мог на самай справе зрабіць this-- ў радку аднаго У мяне ёсць трохі палепшаную версію тут. There-- whoops-- радок два я ёсць нязначна лепшы варыянт, у якім Я this--, а не проста ініцыялізацыі I 0, я таксама з коскі абвясціць зменную з імем другога N-- я не павінен сказаць Int зноў. Я не павінен, на самай справе. Але я кажу, п. І тады я ініцыялізаваць н да StrLen п, так што зараз колькі разоў STRLEN атрымаць выкананы ў агульнай складанасці? Толькі адзін раз. І так гэта тое, што мы маем на ўвазе раней аб лепшы дызайн. На самай справе, як толькі ваш код правільны, ісці наперад і думаць праз, я, выкарыстоўваючы ў якасці мала памяці або некалькі секунд або мілісекунды часу кампутара як можна рэалізаваць некаторыя праблемы? І я збіраюся пракруткі і толькі згадаць што ёсць гэта згадка нуль ў гэтай версіі, але мы вернемся да таго, што ў хуткім часе. Таму што цяпер, давайце зірнем на, дзе гэта адбываецца, каб прывесці нас. Такім чынам, адна, атрымліваецца, што цяпер у нас ёсць магчымасць паглядзець на асобныя знакі, мы можам выкарыстоўваць нешта ад тыдня 0, што было вельмі заблытанымі, а накшталт нецікава ў той час. Але цяпер, і асабліва, калі мы атрымаць у крыптаграфіі ў тыдзень, гэта будзе вельмі магутным. Аказваецца, што з некаторымі Інтс і плавае Data types-- і сімвалы і радкі і іншы things-- некаторыя з іх можа быць вельмі лёгка ператвараецца ў іншае. Напрыклад, калі мы казалі аб ASCII некаторы час ago-- вось загалоўныя літары А праз М, кропка, кропка, dot-- мы сказалі, што ёсць адлюстраванне паміж гэтымі літарамі і лічбамі. І на самай справе, гэта справядліва для малых літар, а таксама. Малыя а ёсць 97, а з'яўляецца сталіцай 65. І ёсць шэраг ў ASCII, які знаходзіцца за ўсё гэта адлюстраванне Сістэма для ўсіх тых іншых лістах. Такім чынам, што ж гэта значыць? Ну, я збіраюся ісці наперад і адкрыць да рэальнага хутка нешта пад назвай ASCII 0, большасць з якіх з'яўляецца каментароў. І зноў у Інтэрнэце вы заўсёды можаце погляд праз каментары. І зірніце, што гэта будзе рабіць. Так ён атрымаў галоўную функцыю. Я цвёрда лік толькі для зараз, таму што я ведаю, што я раблю. Я ведаю, што я хачу бачыць тут. І я ініцыялізацыі I 65. І я разлічваю на праз 26 Усяго літары. І што я буду раздрукаваць адзін радок, у той час калі вы можаце інтэрпрэтаваць гэта выдзелены лінію? Што друкуецца? Так. АЎДЫТОРЫЯ: Вы збіраецеся раздрукаваць ліст, адпавядае карце Ліст значэнне і цэлае значэнне? СПІКЕР 1: Дакладна. Я збіраюся надрукаваць ліст адпаведнае цэламу значэнні, і наадварот, наступным чынам. Ну гэта, нехта сказаў раней, гэта проста запаўняльнік для гольца. Ён па-ранейшаму ёсць. Гэта, вядома, з'яўляецца запаўняльнікам Для таго int-- ня новая лінія. А цяпер звярніце ўвагу, мой першы значэнне, Я падлучэння для гэтага запаўняльніка не толькі І. я кажу, у дужках, сімвал я, якія ў дужках сімвал з'яўляецца кажа кампілятар, лячэння I а не як тое, што яна ёсць, што лік. Лячыць яго ў якасці фактычнага характару. У той час як другое значэнне я падключыць in-- я-- павінны быць проста лік. Так што, калі я скампіляваць гэты program-- так што гэта зрабіць ASCII 0, кропка слэш ASCII 0-- Я проста Гэтая маленькая дыяграма, якая паказвае мне ўсё магчымае адлюстравання без таго, каб думаць яго праз або высветліць гэта самастойна. І я таксама раздрукоўкі, заўважаць малыя літары, таму што праз некалькі радкоў, я друкаваць гэтую адлюстраванне як добра, што гэта проста сказаць, што як толькі вы разумееце што адбываецца пад капот, вы можаце аўтаматычна канвертаваць туды і назад. І на самай справе, калі любы з вас калі-небудзь рабіў гэта ў пачатковай школе ці чуў пра каго-то міфічна прымаючы да ведама і перадачы яго ў яго ці яе сяброўка ў класе, але вы платныя Лісты, як становіцца B, і Б становіцца C, ці нешта складаней, чым, што, маўляў, як бы вы ісці аб рэалізацыі, што ў дзяцінстве? Ну, вы проста ведаеце, выгляд А становіцца B, B становіцца C, але матэматычна, што было, што дзіця робіць? Што вы дадаючы да кожнай літары? Эфектыўна, 1. Таму, калі вы зменіце А ў пункт Б, гэта накшталт як змяняецца ад 65 да 66, які матэматычна азначае проста дадайце 1. І таму, калі вы былі рэалізаваць што мала спосаб падману для настаўніка ў кодзе, вы можа рабіць тое, што толькі дадаўшы адну літару разам. Таму, перш чым доўга, мы ўбачыце, як мы можа скарыстацца тым, што на самой справе сапраўды барацьба і расшыфроўваць Інфармацыя. У той жа час, вядома, што мы пачалі ўвесці пару іншых бібліятэк here-- радок адзін сёння. І вельмі карысны сайт спадзяюся, вы знойдзеце называецца reference.cs50.net, што выкладчыцкі склад паставілі разам, так што калі вы хочаце, каб паглядзець, як STRLEN работ, Вы можаце пачаць друкаваць імя функцыі, націсніце STRLEN там, а затым менш камфортна тлумачэнне будзе з'яўляцца. Ці, калі вы хочаце, каб службовая асоба Linux на аснове тлумачэння, вы можаце націснуць больш зручныя у правым верхнім куце, і гэта прадставіць тую ж інфармацыю, але ў больш складаных умовах. Гэта карысна рэсурс на самай справе ведаю, што ўсё робіць. У наступны раз мы збіраемся зірнуць на Ovaltine і больш, і прадставіць сябе у свеце крыптаграфіі. Да гэтага, мы ўбачым, Вы ў канцы гэтага тыдня. А цяпер, Колтон Огден. Убачымся ў сераду. [Гуляе музыка] [Гуляе музыка] СПІКЕР 1: Што [БІП] ты робіш? СПІКЕР 1: Я еў свой дэсерт? Як вы ясьце яго? З вашымі рукамі? [Гуляе музыка]