Джэйсан Хиршхорн: Сардэчна запрашаем на тыдзень тры, усё. У нас ёсць заняты, але цікава Раздзел наперадзе нас. Такім чынам, спачатку, таму што мы зрабілі некаторыя Headway з курсу, але мы па-ранейшаму ўжо шмат навучання засталося зрабіць, я збіраюся паказаць вам, хлопцы некаторыя рэсурсы што павінна апынуцца неверагодна карыснымі, як вы не толькі наблізіцца да свайго Праблема ўстанаўлівае, але і пераварыць усё матэрыял мы даем вам хлопцы ў лекцыі і шорты і падзел. Тады мы збіраемся правесці першую 20 25 хвілін раздзеле пераходзячы GDB, якія вы можаце мець ці не мець выкарыстаны на гэтай стадыі, але гэта неверагодна карысны інструмент, які будзе дапамагчы вам адладкі праграм. Многія з вас, магчыма, выкарыстоўвалі Printf ў сярэдзіна вашай праграмы, каб высветліць , Што пераменная роўных. GDB нават лепш, чым Printf і не сапсаваць свой код, таму што вам запусціць яго на выкананы файл. Такім чынам, мы пройдземся па 10 самым карысным каманды, што трэба для GDB, і мы ідзяце на практыкаванні разам так ў задачы ўсталяваць тры і за яго межамі, вы можна выкарыстоўваць GDB для адладкі вашы праграмы. І, нарэшце, мы збіраемся перайсці на некаторыя сартавання і пошуку алгарытмаў што вы бачылі ў лекцыі, і мы збіраецца на самай справе код, а не толькі псевдокод, але код бінарны пошук, пузырьковый сартавання, і выбар роду. Такім чынам, спачатку я хачу пайсці над рэсурсамі. Гэта шырокі спіс, і гэта менш шрыфта, таму што я меў непасрэднае дачыненне да змясціцца на тут. Але гэта не толькі дапаможа вам, зноў жа, з праблемных набораў і пераварвання інфармацыі вы даведаліся, але вызначана, прыйшоў час віктарыны, яны будуць быць неверагодна карыснымі. Такім чынам, спачатку лекцыя адзначае. Калі вы ідзяце ў cs50.net/lectures і перайдзіце да канкрэтнай тыдня і дня, вы ўбачыце, што ёсць запісы для кожнага лекцыі, якая з'яўляецца не проста стэнаграма, але адрэдагаваная версія , Што было пакрыта ў лекцыі з кодам фрагменты і іншыя карысныя смачныя кавалачкі. Я вельмі рэкамендую рух над тымі. І тое, як добра, што ёсць зыходны код наяўных у кожнай лекцыі. І зноў жа, гэтыя горкі будуць таксама можна азнаёміцца ​​на сайце cs50.net/sections у гэты вечар. Так другі з'яўляюцца шорты кожны тыдзень, што вечка тэмы, як правіла, ад 5 да 15 хвілін у даўжыню. А тыя, спадзяюся, дасць вам выдатны падручнік па розных тэмах. Па-трэцяе - і гэта з'яўляецца новым у гэтым год - гэта study.cs50.net. Калі вы яшчэ не праверылі яго, я настойліва рэкамендуем вам зрабіць гэта. Вы дабіраецеся, каб выбраць тэму. У нас ёсць дзесяткі пытанняў там. Так, напрыклад, вы выбіраеце функцыі. Гэта дае вам некалькі слайдаў і адзначае на функцыях. Тыя, на самай справе слайды, што ТФ рэкамендуецца выкарыстоўваць падчас нашага прэзентацыі ў раздзеле. Там таксама парады і рэкамендацыі па працы з функцыямі, і ёсць праблемы практыкі, якія дапамагаюць Вы працуеце з функцый. Мы таксама даем вам спасылкі на мала Функцыі і час, што функцыі прыдумалі ў лекцыі. Так study.cs50.net, новы гэта год, фантастычны рэсурс. Далей, у мяне ёсць чалавек, які з'яўляецца кіраўніцтва Каманда, што вы можаце працаваць на каманднага радка. Так што калі ў вас ёсць якія-небудзь пытанні аб Каманда, напрыклад, рандаў, якія мы сутыкнуўся на мінулым тыдні ў раздзеле і вы, хутчэй за ўсё сустракаюцца ў ваша праблема ўсталяваць, праходзячы генераваць код, але калі вы ўведзяце мужчыну рандаў, вы атрымаеце старонку, распавядае вам усё пра рандаў. Гэта дае вам тое, што трэба, параметры ён прымае, а таксама аб даходах Тып і кароткае апісанне гэтай функцыі. Так праверце рандаў. Гэта можа быць трохі шматслоўным і заблытаным, так што часам я лічу, што проста трошкі, што я хачу ведаць, лепшы спосаб, каб знайсці адказ. Так практыцы з Google. Атрымаць добра Google. Ён стане вашым лепшым сябрам. А таксама Google, калі вы не можаце знайсці яго на Google, cs50.net/discuss, гэта форум. Хутчэй за ўсё, калі ў вас ёсць пытанне, адзін з вашых 700 + аднагодкамі таксама мае, што пытанне і, магчыма, папрасіў гэта ўжо ў абмеркаваць форумаў і ён адказаў. Так што калі ў вас ёсць агульныя пытанні ці ў вас ёсць пытанне, што вы думаеце можа быць, іншыя людзі, магчыма, сутыкнецеся з, праверыць cs50.net/discuss. Нарэшце, апошнія два, калі вы хочаце пагаварыць з рэальным чалавекам, офіса гадзін з панядзелка па пятніцу. Там таксама онлайн гадзіны працы для студэнтаў пашырэння. І апошняе, але, вядома, не ў апошнюю чаргу, мне, клічнік. Ва ўсіх вас ёсць маю кантактную інфармацыю. ня Калі вам трэба што-небудзь, калі ласка, ніколі саромейцеся звяртацца да мяне. Заўсёды не саромейцеся рабіць гэта. Вельмі мала хто з вас, якія дадалі мяне на Gchat, так што выклікае расчараванне, але, спадзяюся, гэта зменіцца паміж у гэтым і наступным раздзеле. Любыя пытанні да гэтага часу на рэсурсы? Вялікі. Нарэшце, яшчэ адзін раздым для зваротная сувязь, sayat.me/cs50. Вы можаце даць мне ананімны зваротнай сувязі пра тое, як я раблю. Гэта было сапраўды карысным на мінулым тыдні. Я атрымаў некалькі заўваг ад вас, хлопцы адразу пасля падзелу, плюс ад іншыя студэнты, якія глядзелі яго на працягу тыдня, і гэта быў неверагодна папераджальны. Я збіраюся паспрабаваць абмежаваць маё выкарыстанне слова "салодкі", але я пакажу мой энтузіязм і хваляванне ў іншых адносінах. Але былі і іншыя дадатковыя асноўныя вынікі ўздзеяння, як плюсы, так і дэльта. Таму, калі ласка, я даю вы, хлопцы, зваротная сувязь на вашых праблемных мностваў. Не саромейцеся, каб даць мне зваротную сувязь на маім вучэнні. Я тут для вас, хлопцы. Вялікі. Гэта ўсё, што ў мяне ёсць для Першы раздзел. Хто-небудзь ёсць любая пытанні да гэтага часу? І ў мяне ёсць да ведама для цэнтр кіравання. Студэнты пашырэння ўжо Messaged мяне кажучы што яны не атрымліваюць ніякага аўдыё, але гэта з маіх сілах, каб выправіць. Так, мы спадзяемся, што атрымлівае вырашана ў бліжэйшы час. Калі вы глядзіце онлайн, прывітанне, але вы не можаце пачуць мяне. Такім чынам, спачатку мы збіраемся прайсці праз GDB. GDB, як я намякнуў на раней, з'яўляецца інструментам адладкі нашмат лепш, чым Printf. Такім чынам, каб пачаць працу з GDB, вы, хлопцы, калі Вы хочаце адкрыць свой прыбор і прыняць файл, які я паслаў па электроннай пошце да вас раней - гэты файл будзе таксама даступныя ў Інтэрнэце ў трохі - і запусціць GDB. / імя файла. Перш за ўсё, вядома, у вас ёсць для кампіляцыі падаць, таму што GDB працуе толькі на выкананыя файлы. Але калі вы хочаце, каб пачаць GDB, першае, што вы робіце, запуску GDB. / Цэзар. Дык вось назва праграмы мы знаходзімся збіраецца пайсці з ім прама цяпер. Так што я збіраюся пісаць зрабіць Цэзара, які дасць мне выкананы файл тут вылучаныя зялёным колерам. А потым я збіраюся запусціць GDB. / Cesar. І там вы ідзяце. Вы бачыце ў нас ёсць некаторы тэкст распавядаў мне аб версіі GDB, даючы мне некаторыя звесткі аб гарантыі, і тады мы ёсць запрашэнне ВУП, які выглядае накшталт накшталт нашай каманднага радка радку але вы бачыце, што гэта адкрыта Хлопец, GDB, побач дужка. Перш чым мы працягнем і адладкі гэты файл што я пасылаў да вас усіх, давайце паглядзім на некаторыя карысныя каманды так у нас ёсць пачуццё таго, што мы збіраемся распавесці. Гэтыя каманды пералічаныя тут у Парадак, у якім я звычайна выкарыстоўваюць іх. Так што я пачала маю праграму, запусціўшы ГПБ. / Імя праграмы, у гэтым выпадку, Цэзар. І то першае, што я раблю 99,9% частку часу тыпу брэйк маю на ўвазе. Гэта ўсталёўвае кропку супыну на асноўнай. Па сутнасці, тое, што вы робіце там з'яўляецца праграма збіраецца спыняцца на Асноўным так што вы можаце прыступіць да вывучэння яго лінію за радком, а не працуе ўсё шлях да канца. Вы можаце разбіць ў розных кропках ваш код, але галоўным, як правіла, добрае месца для пачатку. Наступная каманда запуску запускаецца. Гэта пачынаецца праграму запушчанай, і калі вам трэба ўвесці камандную радок аргументы, вы запусціце яго такім каманду. Запуск з аргументамі. Так, паколькі мы збіраемся за версію з З, што праграма вы, хлопцы, напісаў для PSet два - гэты, вядома, мае некаторыя памылкі у ім, што, спадзяюся, мы знойдзем - мы збіраемся запусціць запусціць з некаторай каманды аргументы каманднага радка, таму што Цэзар, як вы, хлопцы, ведаеце, за праблемы ўсталяваць спецыфікацыю, займае некаторы аргументы каманднага радка. Наступная пара каманд, наступны адзін на самай справе называецца наступная. Гэта адзін зойме ў вас радок за радком праз вашу праграму. Так ўдару п, то ўвядзіце адбярэ ў вас на наступны радок, выкананне папярэдняя радок. Крок прымае вас не толькі Наступная радок, але гэта адбярэ ў вас ўнутры функцыі. Так што калі вы напісалі функцыю ў ваш код або калі вы хочаце, каб даследаваць каб я, напрыклад, вы можаце націснуць з, а замест таго, каб наступным радку файл, які вы збіраецеся праз права Зараз, вы сапраўды будзеце крок у гэтая функцыя і паглядзець свой код. Спіс паказвае вам, у вельмі зручнай для карыстальнікаў фармат, 10 ці каля таго лініі вакол дзе вы ў цяперашні час у кодзе так што вы можаце ўбачыць файл замест таго, каб памяняць назад і наперад паміж рознымі відамі. Друк, як Printf, як вынікае з назвы. Гэта паказвае тое, што пераменная роўная. Інфармацыя мясцовыя жыхары сапраўды карысна. Гэта адмысловая версія друку. Інфармацыя мясцовыя жыхары паказвае вам усё мясцовыя зменныя, друкуе іх усё для вас што ў цяперашні час даступныя. Так што я, як правіла, замест таго, каб раздрукаваць чатыры зменныя, якія я цікава, калі я ў цыкле, для Напрыклад, я проста пішу інфармацыя мясцовых жыхароў, і ён будзе паказаць мне, што мой лічыльнік я роўная, а таксама масіва, што я працуе на роўных. Нарэшце, па-ранейшаму. Увод перапынак спыняецца вам у пункце разрыву. Вы можаце ісці па лініі ад лінія з шэрагам і кроку. Працягнуць запускае праграму, каб ваш наступны не парушаць пункт або да завяршэння, калі больш няма кропак разрыву. Адключэнне выдаляе кропкі супыну, калі вам вырашыў перапынак у асноўны было недарэчна, вы хочаце ўсталяваць яго ў іншым месцы. І, нарэшце д, кінуць паліць, атрымлівае з GDB. Так гэтая праграма,. / Цэзар, мы збіраемся праглядаць прама зараз, і мы збіраецеся выкарыстоўваць GDB, каб знайсці што памылкі ў гэтай праграме. Я пабег гэтую праграму раней з Праверце 50, і я атрымаў адзін хмурны погляд. Усё гэта існавала, гэта скампіляваны, прайшло шмат выпрабаванняў, але для чамусьці, ён не праходзіў пяты тэст, звяртаючыся BARFOO, усе вечка, у Е-Д-У-І-Р-Р, усе загалоўныя, з выкарыстаннем тры якасці ключа. Я атрымаў даволі блізка. Я выйшаў на адну літару. Такім чынам, ёсць некаторыя невялікія памылкі ў тут. Я паглядзеў праз мой код. Я не мог зразумець яго. Будзем спадзявацца, што вы, хлопцы, можаце дапамагчы мне высветліць, што гэтая памылка ёсць. Дык вось памылка, што мы пошук. Давайце рухацца ў GDB. Зноў жа, я бег GDB. / Цэзара, так што зараз мы знаходзімся ў GDB. І тое, што гэта першы што я павінен рабіць? Я толькі што ўступіў GDB. Хтосьці даў мне добры Каманда для ўваходу. СТУДЭНЦКАЯ размовы Асноўнае. Джэйсан Хиршхорн: Перапынак асноўнай. Фантастыка. Давайце увядзіце што цаля Вы, хлопцы, можаце глядзець тут або прытрымлівацца разам на вашых кампутарах. Перапынак асноўны, і вы ўбачыце, Кропка разрыву была ўсталяваная на ўзроўні - гэта дае мне некаторыя дзіўныя адрасы памяці, і гэта таксама дае мне нумар радка. Калі б я быў, каб азірнуцца назад на гэты файл, Я зразумеў бы, што асноўныя адбылося на лініі 21. Тое, што я павінен працаваць далей? Ці працуе мая праграма? Няма. Так што я павінен працаваць далей? СТУДЭНЦКАЯ: Запусціце. Джэйсан Хиршхорн: Запусціце. Ці павінен я проста Run Run, або павінны Я дадаць некаторыя іншыя рэчы ў? СТУДЭНЦКАЯ: Запуск з аргументам. Джэйсан Хиршхорн: Запуск з каманда аргументы. А так як я адладкі вельмі спецыфічная так, я павінен паказаць, што лінія аргумент каманднага. Так што я буду сапраўды працуюць тры, якія, зноў жа, выхадны я атрымаў ад Выезд 50. Пачынаючы праграму. Мы праходзім праз пару радкоў. Цяпер вы ўбачыце, што мы знаходзімся на лініі 21. Як я ведаю, што мы знаходзімся на лініі 21? Таму што калі вы паглядзіце налева майго акна тэрмінала, ёсць ён кажа лінію 21. І гэта дае мне, на самой справе, код, які на лініі 21. Так што я абмовіўся раней. Асноўнае на самай справе не на лініі 21. Галоўная знаходзіцца пару радкоў вышэй 21. Але ў радку 21, гэта дзе мы ламаць. Гэты радок кода мае яшчэ не выканана. Гэта важна. Лінія вы бачыце мае не быў выкананы яшчэ. Гэта наступная радок кода Вы збіраецеся выканаць. Так што ў наступны лінія, як вы, хлопцы, верагодна, знаёмыя з, гэта праверка стану, каб убачыць, калі ў мяне ёсць ўступіў аргумент каманднага радка. І каб я: што з'яўляецца другім частка, што робіш? Што такое для мяне? СТУДЭНЦКАЯ: Змена яго ў цэлы лік. Джэйсан Хиршхорн: Выбачайце? СТУДЭНЦКАЯ: Яна мяняецца аргумент у цэлы лік. Джэйсан Хиршхорн: Так, каб я змяняе аргумент v1 з радка ў цэлы лік. А потым што ж гэта праверка? СТУДЭНЦКАЯ: Калі ёсць другая аргумент каманднага радка, у бок ад запуску праграмы. Джэйсан Хиршхорн: І што У другой палове гэтага Праверкі лагічны выраз? Гэтая частка тут, каб я? СТУДЭНЦКАЯ: Калі ён адмоўны. Джэйсан Хиршхорн: Пераканаўшыся, што? СТУДЭНЦКАЯ: Пераканаўшыся, што гэта, па сутнасці, станоўчым. Джэйсан Хиршхорн: Цалкам дакладна. Гэта праверка таго, калі гэта адмоўным, і, калі яна адмоўная, я ёсць адчуванне, наступная радок моц быць мне крычаць на карыстальніка. Так што давайце ўдарыў канец выканаць гэтую лінію. Мы не бачым, што лінія, што вы, хлопцы, можа быць, чакаў убачыць крычаць на Карыстальнік, а затым вяртаюцца, таму што гэтая лінія не быў выкананы. Я ўвайшоў 3. Так што я, на самай справе, увядзіце два каманду аргументы каманднага радка, і 3 больш за нуль. Такім чынам, мы ўбачылі, што лінія, мы выканалі, але мы не крок ўнутры, калі ўмовы. Так што цяпер, побач, я бачу, я ўсталёўваю унутр ключавым роўна да я АГ v1. Так што гэта мне стварэнні ключ зменнай. Так што калі я раздрукаваць ключ прама зараз, таму што што дазваляе ўбачыць значэнне ў зменнай, Ключ роўная 47. Гэта дзіўна, але вядома, гэта таму, што ў мяне няма выконваецца гэтую лінію яшчэ. Так што цяпер, калі я ударыў п, выканаць гэты радок, і зрабіць ключ друку, ключ будзе роўны 3, што мы і чакаем, што ён складзе. Такім чынам, яшчэ раз, у GDB, лініі, якую вы бачу, вы яшчэ не выканана. Вы павінны ўдарыць н або з або шэраг з іншых каманд на самай справе выканаць гэтую радок. Ключ для друку. Ключа на 3. Да гэтага часу так добра. Радок ўяўляе сабой просты тэкставы. Давайце выканаем гэтую лінію. Я атрымліваю радок ад карыстальніка. Давайце паглядзім, на мой Выезд 50, я увядзіце BARFOO ўсе загалоўныя літары, так гэта тое, што я ўводжу. Калі б я зараз друкаваць звычайны тэкст. Вы ўбачыце, што яна роўная радок. Гэта дае мне некаторую іншую дзіўную Шаснаццатковы лік, але гэта адбываецца ў Справа ў тым, што мая радок BARFOO. Калі б я хацеў, каб убачыць, якія ключавыя склаў у гэтая кропка, як я мог праверыць ключ? СТУДЭНЦКАЯ: ключ друку. Джэйсан Хиршхорн: ключ друку, менавіта так. А на самай справе, ёсць ярлык. Калі вы стаміліся ад увёўшы друк, Вы можаце проста ўвесці з. Так р ключавым робіць сапраўды такі ж рэчы. І зноў жа, я бачу, што роўна 3. Калі б я хацеў, каб высветліць, што абодва ключа і BARFOO склаў у той жа час але я стаміўся ад набраўшы кожны адзін індывідуальна, я маглі б увесці інфармацыя мясцовых жыхароў. Гэта дае мне ключавыя роўна 3. Звычайны тэкст роўна BARFOO. Гэта таксама дае мне гэтыя два дзіўныя рэчы у верхняй частцы, гэтая пераменная я і гэтая пераменная н. Тыя, якія рэальна існуючых ў маёй асноўнай праграмы. Мы не сутыкнуліся з імі яшчэ, а ў якасці папярэдняга прагляду, тым існуюць у маім цыкле. Таму ў дадзены момант, яны роўныя нейкі загадкавы нумары, таму што яны не былі ініцыялізацыі пакуль няма, але яны ўсё яшчэ існуюць ў памяці, так што яны проста ўсталяваць да некаторага значэння смецця. Але мы бачым ключ у просты тэкст прама там. Так што я збіраюся выканаць гэтую лінію, Лінія 34, для завесы. Мы збіраемся, каб перайсці ў цыкл, націснуўшы н. І мы ўнутры цыклу. Мы знаходзімся ў нашай першай праверкі. І зноў жа, гэта павінен роду выглядаць вам знаёмыя, таму што гэта было Праграма Цэзар, які быў напісаны, але зноў жа, ёсць нейкая памылка. І цяпер, калі я зраблю інфармацыя мясцовых жыхароў, таму што я ўнутры, што цыкл, вы ўбачыце што я роўная нуля, як мы чакаем. Гэта тое, што мы паставілі яго ў і ініцыялізацыі гэта ў цыкле. н роўная 6. Гэта таксама мае сэнс, таму што мы ўсталёўваем гэта да STRLEN звычайнага тэксту. Так што я хацеў зрабіць інфармацыя мясцовых жыхароў або друк да зменнай часта, каб пераканацца, што усё заўсёды тое, што Я чакаю, што ён роўны. У гэтым выпадку, усё тое, што я чакаю, што ён роўны. Такім чынам, давайце пачнем перасоўванне праз гэта для завесы. Лінія Я на гэта лінія 36, пры звычайным тэкст, які я больш і раўніны тэкст, які я менш або роўная г. Я ведаю, што мая праблема не ў мой першы Ліст, гэта з другім лістом. Калі мы азірнемся таму пры заездзе 50, У ідзе ў E штрафу. Я бяру А і пакідаючы яго ў якасці , Не змяняючы яго слоў Д. Такім чынам нешта не так з другая літара. Так што я збіраюся рухацца там праз секунду. Але калі б я хачу, каб праверыць, які раўніну Тэкст я склаў у гэты канкрэтны так, я думаю, што гэта павінна быць што? Тое, што павінна звычайны тэкст я раўняцца ў гэтым Першы раўнд праз цыкл? СТУДЭНЦКАЯ: Нуль? Джэйсан Хиршхорн: Звычайны тэкст з I? Такім чынам, ён павінен быць капітал B. Я, вядома, роўная нуля, але звычайны тэкст Кранштэйны нуля замкнёнае кранштэйны роўная B таму радкі, як мы бачылі на мінулым тыдні, з'яўляюцца масіў, таму мы атрымліваем Першы знак ад гэтага. Такім чынам, яшчэ раз, калі я раздрукаваў просты тэкст Я, я, па сутнасці, атрымаць сімвал Б. І гэта акуратна, ці не так? Я на самой справе не просты тэкставы I. Гэта не адна з зменных, якія я паставіў або ініцыялізацыі, але вы можаце раздрукаваць з цэлага шэрагу рэчаў калі вы хочаце, каб. Але давайце пяройдзем праз. Калі звычайны тэкст я больш А і просты тэкст I менш або роўна Z, які выразна дакладна, таму што ў нас ёсць капітал Б. Я збіраюся запусціць некаторыя каманды на ім. Мы бачылі, што матэматыка на мінулым тыдні, так што мы будзем прымаем гэта як належнае, што ён працуе Права згодна з Праверце 50. Гэтыя фігурныя дужкі, першы паказаў, што я выходзіў, калі стан, а другі паказаў што я выхаду для цыклу. І вось цяпер, калі я ударыў Далей, мы ўбачым мы вярнуліся ў цыкл зноў. Мы збіраемся праз цыкл зноў. Давайце на самай справе крок у секунду ітэрацыя для цыкла і тыпу Інфармацыя мясцовыя жыхары. Такім чынам, мы знаходзімся ў другі ітэрацыі нашага цыклу. Я роўная 1, які мы чакаем. N роўная 6, які мы чакаем. Ключ роўна 3, што мы чакаем. І звычайны тэкст, вы ўбачыце, роўная EARFOO цяпер, а не BARFOO больш, таму што ў нашай папярэдняй ітэрацыі, B быў зменены на капітал E. Такім чынам, мы збіраемся сутыкнуцца з праблемай, так што гэта Тут мы збіраемся пагрузіцца ў адладцы. Але хто-небудзь ёсць якія-небудзь пытанні пра тое, што мы зрабілі да гэтага часу? Фантастыка. Такім чынам, мы збіраемся выканаць гэта, калі стан, звычайны тэкст кранштэйны Я зачыніў Кранштэйны больш А і просты тэкст я менш або роўная Z. Але перш Я іду ў гэта, таму што гэта, дзе Я ведаю, што мая памылка, я хачу паказаць з простага тэксту I. Так давайце паставім раздрукоўку. Ён робіць раўняцца знакаў A, так што здаецца да гэтага часу, усё добра, і добра. Так што я чакаю гэтую лінію за маёй логіцы, гэтая лінія павінна быць праўдай. Гэта загалоўная літара. Але калі б я ўдарыў п, мы разумеем, што гэта лінія, па сутнасці, не быў выкананы. Я саскочыў на іншае, калі. Чаму гэта адбылося? СТУДЭНЦКАЯ: Таму што ў вас ёсць ваш стан звычайнага тэксту больш чым, не больш або роўна. Джэйсан Хиршхорн: Так у мяне быў свой звычайны тэкст Я больш, не болей або роўна. Такім чынам, ясна, сталіца не зрабіў выклікаць гэта, калі ўмова, і мы зрабілі не ўвайсці ў яго, і мы зрабілі ня зрабіць неабходныя зрух. Дык вось яно што, на самай справе. Я зразумеў, мой баг. Я не мог вярнуцца ў маім зыходным файле, змяніць яго, і абнаўляць яго і запусціць Праверце 50 разоў. Але мы ўбачым, як раз для педагогіка'S мне, калі я працягваю. Астатняе, калі не выконвае альбо, але што замест роўная з'яўляецца каманда гэта не змяняе. Так што гэта не змянілася наогул, і калі я друкаваць звычайны тэкст тут, мы ўбачым збіраецца праз што цыкл не стаў, па сутнасці, змяніць гэтую другі сімвал наогул. Ён па-ранейшаму сталіца А. Такім чынам, яшчэ раз, мы адладжаная нашу памылку. Мы зразумелі, што ёсць логіка адсутнічае. І мы адладжаная яго загадзя да фактычнага выканання гэтай лініі, але вы б заўважылі, калі б мы проста ўдарыў Далей і перайсці да што яшчэ, калі, гэта азначае, што, што калі ўмова не адпавядае рэчаіснасці. Мы не, на самай справе, атрымаць вынік мы чакалі. Такім чынам мы маглі б быць прапанавана, было мы не былі так праніклівы, каб глядзець на што калі ўмова і праверыць, калі, па сутнасці, наша ўмова варта ацаніць у праўда ў бягучым кантэксце. Вось і ўсё, для адладкі гэтую праграму. Хто-небудзь ёсць пытанні? Што каманда, якую я мог ўразіць кінуць GDB? Пытанне: А потым я будзе прапанавана, кінуць у любым выпадку? Так ці не. Я стукну так, і я буду сышлі GDB. Так, каб быў хуткі грунт, каб GDB. На самай справе, у рэальным сцэнары, Я зрабіў гэта ў працоўны час. Я GDBed гэты дакладны праграму ў Прыёмныя гадзіны з студэнтам. І калі мы вернемся да каманд, якія мы бачылі раней, мы выкарыстоўвалі размовы Асноўнае, першае , Што мы зрабілі. Мы выкарыстоўвалі бег з аргументамі каманднага радка, Другое, што мы зрабілі. Мы выкарыстоўвалі наступны шмат рухацца нам па лініях. І зноў, кароткая версія з наступнага з'яўляецца н. Вось у дужках шэрым колерам на слайдзе. Мы не выкарыстоўвалі крок, але мы не зрабілі абавязкова павінны ў гэтым выпадку. Але мы маглі б выкарыстоўваць яго ў трохі пазней на сёння, калі мы адладцы, для Напрыклад, бінарны пошук, калі двайковы Пошук выклікаецца ў асобны Функцыя але ёсць некаторыя памылкі з ім. Мы збіраемся хочаце, каб увайсці ў заклік да бінарнага пошуку і на самай справе яго адладкі. Пералічыце мы не выкарыстоўвалі альбо таму, што ў нас было добрае пачуццё нашага кода, але калі я сапраўды хацелі атрымаць уяўленне аб тым, які код я быў вакол, я мог бы проста выкарыстоўваць спіс. Надрукаваць мы выкарыстоўвалі, інфармацыя мясцовых жыхароў, якія мы выкарыстоўвалі. Працягнуць мы не павінны выкарыстоўваць у гэтым так, пры гэтым мы не павінны выкарыстоўваць адключыць, але мы зрабілі выкарыстанне кінуць. Зноў жа, гэтыя 10 каманд, практыкаваць іх. Калі вы разумееце, гэтыя 10 каманд, вы павінны быць устаноўлены для адладкі любой выдаваць з GDB. Такім чынам, мы збіраемся пайсці на, зноў жа, Сутнасць раздзеле сёння, пераходзячы гэтыя сартавання і пошуку алгарытмы. Перш, чым мы гэта зрабіць, зноў жа, усе пытанні, каментары, асцярогі за GDB? Так як усе збіраецеся выкарыстоўваць GDB, а ня Е? Так што ўсё, дзеля навечна, ў усе ківае іх галовы права цяпер, так што я буду бачыць Вас у працоўны час і ўсё ТФ будзе бачыць Вас і яны скажуць, пакажы мне, як выкарыстоўваць GDB, і вы зможаце паказаць ім, ці не так? Выгляд? Можа быць, мы спадзяемся. Крута. Так што мы збіраемся пераехаць у сартавання і пошуку. Вы ўбачыце мяне ёсць спіс ужо адсартаваны для нас, але, што не збіраецца , Мае месца заўсёды. Такім чынам, у праблеме ўсталяваць спецыфікацыі для Праблема ўсталяваць тры, у вас ёсць шорты што вы можаце глядзець, і гэта на самай справе просіць вас глядзець гэтыя шорты. Акрамя таго, у лекцыі на мінулым тыдні, мы перайшлі многія з гэтых алгарытмаў, таму я не збіраюся марнаваць час у класе адбываецца над гэтымі алгарытмамі зноў або малюнак карцінкі пра тое, як яны алгарытмы працы. Зноў жа, што інфармацыя, якую вы можаце паўторна гадзіны лекцыя, або, што інфармацыя захопліваецца цудоўна на шортах на гэтыя вынікі, усё якія даступныя ў cs50.net. Так замест гэтага, што мы збіраемся зрабіць, гэта напісаць гэтыя праграмы. У нас ёсць адчуванне, ментальную мадэль, пра тое, як яны працуюць, і так, што мы збіраемся зрабіць, гэта кадзіраваць іх па-сапраўднаму. Мы збіраемся ператварыць гэтую ментальную мадэль, гэтая карціна, калі хочаце, у Фактычны код. І калі вы былі крыху збянтэжаныя або туманна на ментальнай мадэлі, я цалкам зразумець. Мы на самай справе не збіраецца перайсці да кодам адразу. Такім чынам, хоць гэта запрашэнне на гэтым слайдзе пытаецца вам код бінарны пошук, і на самай справе, паўтаральны версія бінарны пошук, першае, што я сапраўды хочам вас зрабіць, гэта напісаць некаторы псевдокод. Так у вас ёсць гэтая ментальная мадэль пра тое, як бінарны пошук працы. Выміце ліст паперы, калі ў вас ёсць адзін лёгка даступныя, ці адкрыць тэкставы рэдактар, і я хацеў бы ўсё напісаць. Вазьміце чатыры хвіліны, каб напісаць псевдокод для бінарнага пошуку. Зноў жа, думаю пра тое, што ментальнай мадэлі. Я прыйду вакол, калі ў вас ёсць пытанні і мы можам зрабіць карціну з. Але спачатку, перш чым мы пачнем праграмаванне, Я хацеў бы напісаць псевдокод для бінарнага пошуку таму, калі мы пачаць, у нас ёсць некаторыя напрамкі, як туды, дзе мы павінны ўзначаліць. СТУДЭНЦКАЯ: Ці можна лічыць, масіў значэнні, якія мы атрымліваем ужо адсартаваныя? Джэйсан Хиршхорн: Дык што для бінарнага пошуку працаваць - выдатны пытанне - вы павінны прыняць у адсартаваны масіў значэнняў. Так выказаць здагадку, што гэта будзе працаваць. Мы вернемся да гэтага слайд. Вы ўбачыце ў парфіру функцыі дэкларацыя BOOL binary_search унутр значэнне, унутр значэння, Int N. Гэта павінна выглядаць знаёмым, калі вы ужо падышоў або атрымалі ваш рукі брудныя з мноствам праблем. Але гэта ваша аб'ява функцыі. Зноў жа, не трэба турбавацца аб што многае ў гэты момант. Тое, што я сапраўды хачу, каб вы зрабіць, гэта прыняць чатыры хвіліны да псевдокода двайковы пошук, а затым мы пойдзем больш, што ў складзе групы. І прыйду вакол. Калі ў вас ёсць пытанні, калі ласка свабодна падняць руку. Чаму б вам не ўзяць больш за два хвілін скончыць псевдокод? Я ведаю, гэта можа здацца смешным, што мы трацім столькі часу на тое, што нават не на самай справе ў З, але асабліва для іх больш складаныя алгарытмы і праблема наборы, якія мы павінны высветліць, пачынаючы з псевдокод не турбуючыся аб сінтаксісе, проста турбуючыся аб логіка, неверагодна папераджальны. І такім чынам, вы не вырашаючы два неверагодна цяжкія праблемы адразу. Ты проста засяродзіцца на логіцы, а то вы пераехаць у сінтаксісе. ОК. Пачнем перажывае псевдокод. Я напісаў тут, двайковы Пошук псевдокод. Мы напішам гэта на сесці разам. Ці я напішу яго, і вы будзеце даваць мне Запрашэнні мне трэба. Так хто-небудзь можа даць мне першы лінія псевдокоде вы напісаў для бінарнага пошуку? Так, Эні? Студэнт: У той час як даўжыня Спіс больш за нуль. Джэйсан Хиршхорн: У той час як даўжыня з спісу больш за нуль. І зноў мы бачым некаторыя C-гледзячы сінтаксічныя рэчы на ​​тут. Але больш за гэта на англійскай мове. Хто-небудзь ёсць якія-небудзь лінію, яны паставілі да гэтага ў іх псеўда-код? СТУДЭНЦКАЯ: Атрымаць масіў з сартуюцца колькасці. Джэйсан Хиршхорн: Вы напісалі "атрымаць Масіў парадку п. лікаў. "Пер Аб'яву функцыі, мы будзем праходжання масіў парадку п. лікаў. СТУДЭНЦКАЯ: [неразборліва]. Джэйсан Хиршхорн: Так мы будзем мець, што. Але так, калі ў нас не было, што мы неабходна будзе разабрацца наш масіў нумары, таму што бінарны пошук працуе толькі на спарадкаваныя масівы. Такім чынам, хоць даўжыня спісу роўная нуля, я збіраецца паставіць у некаторых фігурных дужак , Каб яна выглядала трохі больш, як С. Але ў той час, здаецца, адлюстраванне на у той час як завесы, так што ўнутры гэтага час завесы, што нам трэба зрабіць для бінарнага пошуку? Кто-то, хто не даў мне адказаць яшчэ, але хто гэта напісаў? СТУДЭНЦКАЯ: Да сярэдзіны спісу. Джэйсан Хиршхорн: Том. Да сярэдзіны спісу. І дадатковы пытанне, што мы робім толькі мы знаходзімся ў сярэдзіна спісу? СТУДЭНЦКАЯ: Зрабіце праверку няхай гэта будзе нумар, які вы шукаеце. Джэйсан Хиршхорн: Выдатна. Перайсці сярэдзіну спісу і праверыць калі наша каштоўнасць ёсць - фантастычным. Хто-небудзь што-небудзь яшчэ гэта было інакш, чым гэта? Вось менавіта. Першае, што мы робім у бінарны пошук будзе ісці ў сярэдзіне спісу і праверце, калі наша каштоўнасць ёсць. Так што я мяркую, калі наша значэнне там, што ж нам рабіць? СТУДЭНЦКАЯ: Вернемся да нуля [неразборліва]. Джэйсан Хиршхорн: Так, калі наш значэнне ёсць, мы знайшлі яго. Такім чынам, мы можам сказаць некаторы шлях, аднак гэта функцыя вызначана, мы гаворым карыстачу мы знайшлі яго. Калі яго там няма, хоць, гэта дзе гэта становіцца складаней. Так што, калі яго там няма, нехта іншы, хто працаваў над бінарнага пошуку або мае ўяўленне пра тое, у цяперашні час, што мы будзем рабіць? СТУДЭНЦКАЯ: Вопрос. Джэйсан Хиршхорн: Так? СТУДЭНЦКАЯ: Якое масіў ўжо адсартаваны? Джэйсан Хиршхорн: Так, мы мяркуем, масіў ўжо адсартаваны. Студэнт: Так то вы павінны праверыць, калі значэнне, якое вы бачыце больш, чым значэнне, якое вы хочаце, вы можаце перамяшчаць да сярэдзіны другой палове. Джэйсан Хиршхорн: Дык што, калі сярэдзіна спіс больш чым тое, што мы шукаеце, то мы што? Мы рухаемся, дзе? СТУДЭНЦКАЯ: Вы хочаце, каб перайсці да палова спісу з лічбы ніжэй, чым гэта. Джэйсан Хиршхорн: Так мы будзем патэлефануеце, што левая. Так што калі сярэдні больш, мы можам шукаць Левая палова спісу. А потым пры пошуку, што я маю на ўвазе пры пошуку? СТУДЭНЦКАЯ: [неразборліва]. Джэйсан Хиршхорн: Мы ідзем у сярэдзіне. Мы фактычна паўтарыць гэтую рэч. Мы вяртаемся праз нашу час цыклу. Я дам вам апошні - інакш, калі, сярэдні менш, чым мы, што мы робім тут? СТУДЭНЦКАЯ: Ідзіце направа. Джэйсан Хиршхорн: Пошук права. Гэта выглядае добра, але хто-небудзь ёсць усё, што мы можа адсутнічаць або быць ўсё астатняе, што вы паклалі у псеўда-код? Так што гэта тое, што мы да гэтага часу. У той час як даўжыня спісу больш нуля, мы збіраемся пайсці у сярэдзіне спісу і праверыць, калі наша каштоўнасць ёсць. Калі сярэдні больш, мы збіраемся пошук налева, яшчэ, калі сярэдзіна менш, мы збіраемся шукаць права. Так мы ўсе былі трохі знаёмыя з тэрміны, якія мы выкарыстоўваем у інфарматыцы і прылады ў нас ёсць. Але вы ўжо заўважылі, мы былі кажучы па-ангельску, але мы выявілі, шмат рэчаў, якія, здавалася, карта на інструменты, якія ёсць у нашай кадавання набор інструментаў. Так прама з месца ў кар'ер, мы не збіраецца яшчэ на самай справе код. Што мы бачым тут на англійскай мове, што карты на што мы можам напісаць у C? Студэнт: У той час як. Джэйсан Хиршхорн: У той час як. Так што гэта ў той час як тут, карты на ні да чаго? СТУДЭНЦКАЯ: у той час як пятля. Джэйсан Хиршхорн: у той час як цыкл? Ці, можа, у больш агульным плане, пятля. Мы хочам зрабіць нешта зноў і зноў. Так што мы збіраемся, каб закадаваць пятлю. І мы ўжо ведаем, таму што мы зрабілі гэта пару разоў, і мы ёсць шмат прыкладаў там, як на самой справе пісаць гэты паказчык для завесы. Так што павінна быць даволі лёгка. Мы павінны быць у стане атрымаць, што пачаў даволі хутка. Што яшчэ мы бачым тут? Якія яшчэ структуры сінтаксісу, рэчы што мы знаёмыя з у С, мы ўжо ёсць пачуццё аснове ад слоў, якія мы выкарыстоўвалі? Так, Ганна? [Неразборліва] жартую. Ганна, ісці наперад. СТУДЭНЦКАЯ: Калі і ў іншым месцы. Джэйсан Хиршхорн: Калі і астатняе - прама тут. Дык што ж тыя, падобны? СТУДЭНЦКАЯ: калі яшчэ заяве. Джэйсан Хиршхорн: Так, ўмовы, ці не так? Такім чынам, мы, верагодна, трэба напісаць некаторыя ўмовы. І зноў, хоць, магчыма, блытаючы пры па-першае, мы як правіла, маюць сэнс цяпер як напісаць умоў і Сінтаксіс для умоў. І калі мы не робім, мы проста паглядзець Сінтаксіс умоў, выразаць і ўстаўляць што, таму што мы ведаем, што трэба ўмова тут. Любыя іншыя рэчы, якія мы бачым, што адлюстраванне на рэчы, якія мы, магчыма, спатрэбіцца зрабіць у C? Так, Aleha? СТУДЭНЦКАЯ: Гэта можа быць відавочна, , Проста праверка, калі значэнне роўна нешта. Джэйсан Хиршхорн: Так як жа мы правяраем і - для гэтага заходзім у сярэдзіне спісу і праверыць, калі наша каштоўнасць ёсць? Як мы гэта робім, што ў C? Што сінтаксіс для гэтага? СТУДЭНЦКАЯ: Роўна, роўна. Джэйсан Хиршхорн: Роўна, роўна. Так што гэта праверка, верагодна, будзе быць роўнасці, роўных. Таму мы разумеем, што неабходна, што недзе. А на самай справе, проста пры яе напісанні, мы бачым гэтыя іншыя рэчы. Мы збіраемся мець, каб зрабіць некаторыя Аператары параўнання ў там - фантастычным. Так што на самай справе выглядае, па вялікі, мы не пісалі слова C кода яшчэ. Але мы атрымалі ментальную мадэль ўніз праз лекцыі і тых шортах. Мы напісалі псеўда-код у выглядзе групы. І ўжо, у нас ёсць 80%, калі не 90% таго, што нам трэба зрабіць. Цяпер нам проста трэба закадаваць ён, які зноў, нетрывіяльная праблема, якая патрабуе вырашэння. Але па крайняй меры мы затрымаліся на логіцы. Па крайняй меры, цяпер, калі мы ідзем у працоўны час, Я магу сказаць, я ведаю, што мне трэба зрабіць, але вы можаце нагадаць мяне сінтаксісу? Ці нават калі працоўны час перапоўненыя, вам Ці можа Google для сінтаксісу, а чым захрасанне на логіцы. І зноў, замест таго, каб вырашаць логіка і сінтаксіс праблемы ўсё адразу, часта нашмат лепш разарваць гэтыя два жорсткіх праблемы прэч ў дзве больш кіраваныя тыя і рабіць псеўда-код, а затым код на мове C. Такім чынам, давайце паглядзім, што я зрабіў для псеўда-код загадзя. У той час як даўжыня спісу больш нуля, паглядзіце на сярэдзіне з спісу. Калі лік знойдзена вярнуўся праўда, яшчэ калі лік вышэй, пошук злева. Інакш, калі лік менш, пошук Добра, вяртанне ілжывым. Так што выглядае амаль ідэнтычна, калі не амаль ідэнтычны таму, што мы напісалі. На самай справе, Том, што вы спачатку сказаў, парушаючы сярэдзіне спісу, і калі лік знойдзена ў двух сцвярджэнняў на самай справе, што я зрабіў. Я аб'яднаў іх там. Я павінен быў слухаць Вы ў першы раз. Такім чынам, гэта псеўда-код у нас ёсць. Калі вы хочаце цяпер, прабачце, перайдзіце Вернемся да нашага зыходнай задачы. Давайце кода binary.c. Так рэалізацыі итеративный версію бінарны пошук, выкарыстоўваючы наступныя Аб'яву функцыі. І вам не трэба капіяваць яго ўніз толькі пакуль. Я на самой справе адбываецца, каб адкрыць прама тут binary.c. Так што ёсць аб'яву функцыі у сярэдзіне экрана. І вы ўбачыце, я ўзяў псеўда-код ад на маіх бакоў, але практычна ідэнтычныя да чаго мы пісалі, і пакласці, што ў для вас. Так што цяпер, давайце пяць хвілін закадаваць гэтую функцыю. І зноў жа, калі ў вас ёсць якія-небудзь пытанні, падніміце руку, дайце мне ведаць, я буду прыйсці. СТУДЭНЦКАЯ: [неразборліва]. Джэйсан Хиршхорн: Так што я ўзяў двайковы Вызначэнне пошук у уверх, на лініі 12. Вось што я атрымаў для сваіх слайда. А потым усё гэта псеўда-код, я проста скапіяваць і ўставіць на слайдзе, псеўда-код слайд. Я ўсё яшчэ не чуючы [неразборліва]. Так што калі вы скончылі рэалізацыя, я хачу, каб праверыць яго. Мне па электроннай пошце вам файл helpers.h раней у гэтым класе. І яна будзе даступная онлайн, а таксама для загрузкі для людзей, якія глядзяць на гэты раз падзел затрымліваецца. І я проста выкарыстаў агульны размеркаванне Код ад pset3. Так што я ўзяў find.C, выкарыстоўваць свой helpers.h файл Замест файла helpers.h што даў у кодзе размеркавання. І я павінен быў зрабіць адно змяненне ў find.C замест выкліку проста Пошук, тэлефануйце binary_search. Так што, калі вы хочаце праверыць свой код, ведаю, што гэта, як гэта зрабіць. На самай справе, калі мы будзем праводзіць гэты код Прама цяпер, я проста зрабіў копію мой каталог pset3, зноў жа, выгружаная Памочнікі файлы, а затым зрабіў, што змяніць у find.C патэлефанаваць binary_search а не проста пошук. Джэйсан Хиршхорн: Так. У Вас ёсць пытанні? СТУДЭНЦКАЯ: Nevermind. Джэйсан Хиршхорн: Не турбуйцеся. Ну, давайце пачнем. Мы будзем кадзіраваць гэта як група. Яшчэ адна заўвага. Зноў жа, гэта можа лёгка быць заменены у для задачы ўсталяваць тры. У мяне ёсць helpers.h файл, які, хутчэй за чым helpers.h нам даюць, заяўляе бінарны пошук, бурбалка роду, і выбар роду. І ў find.c вы заўважыце на лініі, што гэта такое, лінія 68, мы называем двайковы пошук, а ня пошук. Такім чынам, яшчэ раз, код, які даступны онлайн або код, які вы стварэнне прама цяпер можна лёгка памяняць месцамі на працягу р набор 3, каб праверыць яго. Але спачатку, давайце код бінарны пошук. Наша аб'яву функцыі, мы вернемся лагічнае значэнне. Возьмем цэлае пад назвай значэнне. Возьмем масіў цэлых лікаў з імем значэнні, і мы бярэм п памер масіва. У радку 10, прама тут, у мяне ёсць Рэзкае ўключаюць stdbool.h. Хто-небудзь ведае, чаму гэта там? Так, што гэта радок кода рабіць? СТУДЭНЦКАЯ: Яна дазваляе выкарыстоўваць які вяртаецца тып BOOL. Джэйсан Хиршхорн: Цалкам дакладна. СТУДЭНЦКАЯ: Ці гэта бібліятэка, якая дазваляе выкарыстоўваць тып якое вяртаецца BOOL. Джэйсан Хиршхорн: Так рэзкае ўключаюць stdbool.h лінія дае мне некаторыя вызначэння і аб'явы для рэчаў што я маю права выкарыстоўваць у гэтая бібліятэка. Так сярод тых, кажа, што ёсць Гэты тып завецца лагічны, і гэта можа быць сапраўдным або ілжывым. Дык вось што, што лінія робіць. І калі ў мяне не было, што лінія, я б трапіць у бяду за напісанне гэтага Слова прама тут, лагічны, прама там. Цалкам дакладна. Таму мне трэба, што ў гэтым кодзе. ОК. Так што гэта, зноў жа, з'яўляецца паўтаральным версія, ня рэкурсіўны адзін. Дык давайце пачнем. Давайце пачнем з гэтага першага лінія псеўда-код. І, спадзяюся, мы будзем - ці не, мы спадзяемся. Мы збіраемся пайсці па пакоі. Мы пойдзем парадкова, і я дапамагу Вы высвятляеце лінію, што нам трэба напісаць першы. Такім чынам, хоць даўжыня спісу больш за нуль. Пачнем у пярэдняй часткі. Якую лінію я павінен напісаць тут, у кодзе? Студэнт: У той час як дужка N большае за 0. Джэйсан Хиршхорн: У той час як н вялікі, чым 0. Такім чынам, п памер спісу, і мы правяраем, калі - [Устаўляючы ГАЛАСЫ] Джэйсан Хиршхорн: - Прабачце? СТУДЭНЦКАЯ: Як мы ведаем, што п-памер спісу? Джэйсан Хиршхорн: Выбачайце. За спецыфікацыі PSet, пошук і як бы дзейнічае вам трэба напісаць, N з'яўляецца памер спісу. Я забыўся растлумачыць, што тут. Але так. N з'яўляецца памер спіс, у гэтым выпадку. Такім чынам, хоць п большае за 0. ОК. Гэта можа апынуцца трохі праблематычна хоць, калі так будзе працягвацца. Таму што мы будзем працягваць, каб ведаць Памер спісу на працягу ўсяго гэтага Функцыя, але сказаць, што мы пачнём з масівам 5 цэлых лікаў. І мы праходзім праз, і мы зараз скараціўся да масіў з 2 цэлых лікаў. Якія 2 цэлыя лікі, што? Памер 2 зараз, калі мы хочам глядзець, але якіх 2 з'яўляецца тое, што? Ці мае гэта сэнс, на гэтае пытанне? ОК. Я папрашу яго зноў. Такім чынам, мы пачнем з гэтага масіва 5 цэлыя лікі, п роўная 5, ці не так? Мы будзем працаваць да канца тут. мы, верагодна, змяніць памер, Права, як справы ідуць на. Што тое, што мы гаворым, што хочам зрабіць. Мы не хочам шукаць поўны рэч зноў. Так бы мовіць, што мы змяніць яго на 2. Бярэм палову спісу Гэта дзіўна. Так проста ўзяць 2. Так што цяпер п роўна 2. Я прашу прабачэння за бедных сухога сцірання маркеры. Ці не так? І мы шукаем па спісе зноў са спісам памеру 2. Ну, наш масіў па-ранейшаму памеру 5. Мы кажам, мы толькі хочам, каб пошук 2 месцы ў ім. Такім чынам, якія 2 месцы гэта такое? Ці мае гэта сэнс? Ці з'яўляюцца яны левыя 2 месца? Ці з'яўляюцца яны правільныя 2 месца? Ці з'яўляюцца яны сярэднія 2 месца? Мы разбілі праблему ўніз, але мы на самай справе не ведаю, якая частка праблема, якую мы ўсё яшчэ глядзім, толькі пры наяўнасці гэтых 2 зменныя. Так што мы павінны крыху больш, а п, большае за 0. Мы павінны ведаць, дзе, што п у нашым фактычным масіве. Так хто-небудзь ёсць зменіцца на гэтай лініі? Большая частка гэтай лініі зусім правільна. Ёсць яшчэ адно дадатак? Ці можам мы памяняць нешта для п да зрабіць гэтую лінію крыху лепш? Угу? СТУДЭНЦКАЯ: Ці можаце вы ініцыялізаваць зменную як даўжыні да п, то будзем выкарыстоўваць пазней у функцыі? Джэйсан Хиршхорн: Так ініцыялізацыі зменнай даўжыні п, і мы выкарыстоўваем гэта пазней? Але тады мы проста абнавіць даўжыню і мы яшчэ сутыкнуліся з гэтай праблемай, дзе мы скараціць даўжыню нашай праблемы, але мы ніколі не ведаем, дзе, уласна, што даўжыня адлюстроўваецца на. СТУДЭНЦКАЯ: Хіба гэта не адбудзецца пазней, калі вы кажаце, пошук злева, пошук ці не так? Вы збіраецеся перайсці на іншы Вобласць Вашых - Джэйсан Хиршхорн: Мы збіраемся пайсці у вобласць, але як мы ведаем, якія павінны ісці? Калі ў нас ёсць толькі масіў і гэта п, як мы ведаем, дзе перайсці ў масіве. У задняй частцы, так? Студэнт: У вас ёсць, быццам бы, ніжэй мяжа і верхняя мяжа зменнай ці нешта ў гэтым родзе? Джэйсан Хиршхорн: ОК. Так што гэта яшчэ адна ідэя. Замест таго каб проста адсочваць памер, мы адсочваем ніжняга і верхняя мяжа зменнай. Так як жа нам разлічыць памер ад ніжняя мяжа і верхняя мяжа? [Устаўляючы ГАЛАСЫ] Джэйсан Хиршхорн: адніманне. А таксама адсочваць ніжняя і правую мяжы, дайце нам ведаць, мы пошуку гэтых двух? Няўжо мы пошуку гэтыя два сюды? Няўжо мы пошуку сярэднюю два? Напэўна, не дзве сярэднія, таму што гэта, па сутнасці, з'яўляецца бінарны пошук. Але цяпер мы зможам атрымаць памер, але і межы масіва. У сутнасці, калі ў нас ёсць гігант Тэлефонная кніга, мы сарваць яго напалам. Цяпер мы ведаем, дзе, што менш, Тэлефонная кніга. Але мы на самай справе не раздзіраючы Тэлефонная кніга ў два разы. Нам усё яшчэ трэба ведаць, дзе Новыя межы нашай праблемы. Хто-небудзь ёсць якія-небудзь пытанні пра гэта? Да? СТУДЭНЦКАЯ: Ці будзе гэта працаваць, ствараючы зменная, я, што вы потым проста перанесці пазіцыя я ў адносінах да яго бягучае становішча і даўжыня, п? Джэйсан Хиршхорн: А што гэта я? СТУДЭНЦКАЯ: Як я быць як свайго роду - Як вы б ініцыялізаваць я быць сярэдняе становішча масіва. А потым, калі значэнне ў становішчы я ў сярэдзіна масіва ў ўстаноўлена, быць менш, чым значэнне, вам трэба, я зараз становіцца даўжыня масіва, а таксама значэнне я падзяліў на 2. Маўляў, бачыце, вы хуткасць I - Джэйсан Хиршхорн: Дакладна. СТУДЭНЦКАЯ - да - Джэйсан Хиршхорн: Так што я амаль упэўнены, што будзе працаваць. Але справа ў істота, неабходна два фрагменты інфармацыі тут. Вы можаце зрабіць гэта з пачатку і канца, ці вы можаце зрабіць гэта з памерам, а затым некаторыя маркер. Але вы павінны дзве часткі інфармацыі тут. Вы не можаце прайсці з толькі адзін. Ці значыць гэта, мае сэнс? Так што мы збіраемся, каб прайсці, і мы збіраемся зрабіць [неразборліва] і стварыць некаторыя маркеры. Так Што вы пішаце ў кодзе? СТУДЭНЦКАЯ: Я толькі што сказаў, унутр мяжу адзін роўна 0. Джэйсан Хиршхорн: Давайце назавем што унутр, пачынаючы. СТУДЭНЦКАЯ: ОК. Джэйсан Хиршхорн: Гэта робіць больш сэнсу для мяне. І? СТУДЭНЦКАЯ: Я сказаў, я думаю, Int сканчаецца. Джэйсан Хиршхорн: дзесятковага сканчаецца. СТУДЭНЦКАЯ: Я думаю, п мінус 1, ці нешта ў гэтым родзе. Маўляў, апошні элемент. Джэйсан Хиршхорн: Такім чынам, вы пісалі, унутр пачынаючы роўны 0, кропка з коскі, і міжнар канчатак роўна п мінус 1, кропку з коскі. Так па сутнасці, што мы робім тут, 0 першае месца. І, як мы ведаем, у масівах, яны не ідуць да п, яны ідуць да н мінус 1. Так у нас ёсць некаторыя межы нашага масіва. І гэтыя першапачатковыя межы, здараецца, пачатковыя межы нашай праблемы. ОК. Дык гэта гучыць добра. Тады, калі мы вернемся да гэтай лініі, у той час як даўжыня спісу большае за 0, што, замест таго, каб п, павінны мы ставім тут? СТУДЭНЦКАЯ: Напісаць заканчваючы мінус пачатак. Джэйсан Хиршхорн: У той час як канчатак мінус пачынаюць больш 0? ОК. І мы маглі б, калі б мы хацелі зрабіць гэта крыху лепш, чым яшчэ мы маглі зрабіць? Калі б мы хацелі, каб прыбраць гэты код трохі? Як мы можам пазбавіцца ад 0? Гэта проста пытанне стылю. Гэта правільна, прама цяпер. СТУДЭНЦКАЯ: Канцоўка ня роўная пачатак? Джэйсан Хиршхорн: Мы можам зрабіць што? [Устаўляючы ГАЛАСЫ] СТУДЭНЦКАЯ: Ending больш? Джэйсан Хиршхорн: Так. Мы можам проста зрабіць той час як канчатак больш, чым пачатку. Дакладна. Мы дадалі пачынаюць з другога боку пра гэта, і мы вызваліліся ад 0. Так што гэта проста выглядае трохі чысцей. ОК. Так, у той час як даўжыня спісу роўная 0, мы пісалі што, у той час як канчатак больш чым пачатак. Мы збіраемся паставіць у наш неабходнасці фігурныя дужкі, і то першае, што мы хочам зрабіць, гэта паглядзець на іх у невялікай спісе. Вы? Вы можаце даць мне - СТУДЭНЦКАЯ: Калі дужка значэнне квадратных дужках - Джэйсан Хиршхорн: Калі дужкі значэнне квадратных дужках. СТУДЭНЦКАЯ: Канцоўка падзяліць на 2. Джэйсан Хиршхорн: Ending? СТУДЭНЦКАЯ: Я бачу праблему з вашым - Джэйсан Хиршхорн: ОК. Ну, паглядзіце на сярэдзіне. Адкуль мы ведаем, што сярэдзіна? Так. Такім чынам, дазвольце мне выдаліць гэты код. Адкуль мы ведаем, што сярэдзіна? У чым, калі ў вас ёсць пачатак і канец, як вы знаходзіце сярэдні? СТУДЭНЦКАЯ: Вы ў сярэднім. СТУДЭНЦКАЯ: Вы дадаць іх разам, а затым - Джэйсан Хиршхорн: Дадайце іх разам, а затым? СТУДЭНЦКАЯ: І вы ў сярэднім. Падзяліце яго на 2. Джэйсан Хиршхорн: Дадайце іх разам і падзяліць на 2. Так унутр сярэдняга роўных? Тым, вы можаце даць яго мне? СТУДЭНЦКАЯ: Пачынаючы плюс канчатак - Джэйсан Хиршхорн: Пачатак плюс канчатак. СТУДЭНЦКАЯ: Усе, кранштэйны, дзеліцца на 2. Джэйсан Хиршхорн: Усё, у дужках, дзеліцца на 2. Так што гэта дае мне сярэдзіну ні пра што, правільна? СТУДЭНЦКАЯ: Акрамя таго, неабходна, каб закругліць яго. Джэйсан Хиршхорн: Што вы значыць, мне трэба акругліць яго? [Устаўляючы ГАЛАСЫ] СТУДЭНЦКАЯ: Таму што, калі Гэта дзіўнае лік, то гэта ўсё роўна, - Джэйсан Хиршхорн: Ну, добра. Так што я мог акружыць яго. Але калі гэта няцотная лік, 5, я магу якая прымае значэнне 1, ад сярэдзіны. Ці, калі гэта цотная колькасць, а, што гэта лепш так. Калі гэта 4, у нас ёсць толькі 4, я магу ўзяць першы "сярэдні", цытата, канец цытаты або другі «сярэдні» адзін. Альбо будзе працаваць для бінарнага пошуку, так што я на самой справе не трэба акругліць яго. Але ёсць адна рэч, якую я трэба глядзець на гэтай лініі. Мы не маглі б зразумець гэта, але мы вернемся да яго. Таму што гэтая лінія на самай справе яшчэ неабходны яшчэ адну рэч. Але да гэтага часу, мы напісалі чатыры радкі кода. Мы атрымалі наш пачатак і заканчваючы маркеры. У нас ёсць час цыклу, якая адлюстроўвае непасрэдна да нашай псевдокоде. Мы глядзім на сярэдзіне, якая адлюстроўвае непасрэдна на нашым псевдокоде. Я б сказаў, гэта ідзе да сярэдзіны з спісу, гэты радок кода. А потым, калі мы ідзем у сярэдзіне спіс, наступнае, што мы павінны зрабіць, гэта праверыць, калі наша каштоўнасць ёсць для псевдокод мы пісалі раней. Так як жа мы правяраем, калі наша каштоўнасць знаходзіцца ў сярэдзіне спісу? Вы. Чаму б вам не зрабіць гэта? СТУДЭНЦКАЯ: Калі наша каштоўнасць з'яўляецца ў сярэдзіне роўная усё, што мы ўсталяваць - Я маю на ўвазе роўная роўная - Джэйсан Хиршхорн: Гэта - ОК. СТУДЭНЦКАЯ: Я не ўпэўнены, што Пераменная мы шукаем бо, хоць, таму, што - [Устаўляючы ГАЛАСЫ] СТУДЭНЦКАЯ: [неразборліва]. Джэйсан Хиршхорн: Цалкам дакладна. За аб'яўленні функцыі, мы шукаем значэнне. Так мы шукаем значэнне ў масіве значэнняў. Такім чынам, вы маеце рацыю. Вы будзеце рабіць, калі яна адкрыта дужка значэнне кранштэйны сярэдні зачынены кранштэйна роўных роўная кошту, а ўнутры Дык што ж нам рабіць? Калі наша каштоўнасць там, што мы павінны зрабіць? [Устаўляючы ГАЛАСЫ] СТУДЭНЦКАЯ: Вярнуцца да нуля. Джэйсан Хиршхорн: Вярнуцца праўда. СТУДЭНЦКАЯ: Вярнуцца праўда. Джэйсан Хиршхорн: Міхаіл, што ж гэта лінія рабіць? СТУДЭНЦКАЯ: [неразборліва] праграма запуску яго курс, і што скончылася, і ў Вас ёсць, што вам трэба рабіць? Джэйсан Хиршхорн: Праграма або што? У гэтым выпадку? СТУДЭНЦКАЯ: Функцыя. Джэйсан Хиршхорн: Функцыя. І вось, каб вярнуцца да таго, што называецца гэта і даць яму значэнне, праўда. Цалкам дакладна. Галоўная. Што які вяртаецца тып з асноўнай, Майкл? СТУДЭНЦКАЯ: унутр, цэлае? Джэйсан Хиршхорн: унутр, дакладна. Цэлае. Гэта быў проста пытанне, каб пераканацца, вы, хлопцы, былі на ім. Што гэта, як правіла, вярнуцца, калі усе працуюць добра? СТУДЭНЦКАЯ: Нуль. Джэйсан Хиршхорн: Нуль. Цалкам дакладна. СТУДЭНЦКАЯ: Калі гэта проста вяртае ісціну, няма інфармацыі надаецца пра тое, што - О, гэта проста кажу, што гэта значэнне ўнутры масіва. Джэйсан Хиршхорн: Цалкам дакладна. Гэтая праграма не дае інфармацыі ад таго, дзе менавіта гэта значэнне. Гэта толькі кажуць, так, мы знайшлі гэта, ці не, мы не знайшлі яго. Так што, калі лік знойдзена, вярнуцца дакладна. Ну, на самай справе мы проста зрабілі, што сапраўды хутка з гэтай адной радкі кода. Так што я буду рухацца, што лінію псевдокоде. СТУДЭНЦКАЯ: не трэба змяніць масіў? Яна павінна быць значэнняў, а не кошт, ці не так? Джэйсан Хиршхорн: Выбачайце. Дзякуй. СТУДЭНЦКАЯ: Так. Джэйсан Хиршхорн: Гэтая лінія павінны быць значэння. Цалкам дакладна. ОК. Такім чынам, мы глядзелі на сярэднім спісе. Калі лік знойдзена вяртанне праўда. Працягваючы з нашым псевдокоде, калі сярэдні больш, пошук засталося. Так што мне прыйшлося тут, калі лік вышэй, пошук засталося. Канстанцін, вы можаце даць мяне гэты радок кода? СТУДЭНЦКАЯ: Калі значэнне сярэдзіне - Джэйсан Хиршхорн: Дык што, калі значэнне - калі адкрыта дужка значэнні кранштэйны сярэдні зачыняе дужка - СТУДЭНЦКАЯ: менш, чым значэнне? Джэйсан Хиршхорн: Менш чым. СТУДЭНЦКАЯ: менш значэння. Джэйсан Хиршхорн: Значэнне. Ну, на самай справе, вы хочаце праверка нумары - Выбачайце. Гэта крыху збівае з толку. Але яшчэ, калі лік у сярэдзіна спісу больш. СТУДЭНЦКАЯ: О, добра. Джэйсан Хиршхорн: Я буду змяніць гэтую сітуацыю. Інакш, калі сярэдні вышэй, мы Для пошуку злева, добра? І што ж нам рабіць ўнутры гэта, калі стан? СТУДЭНЦКАЯ: Ці магу я зрабіць невялікае змяненне ў ўмова, змяніць яго на іншае, калі? Джэйсан Хиршхорн: Інакш, калі? ОК. Так што гэта код будзе выконвацца пра тое ж. Але добрая рэч аб выкарыстанні, калі, яшчэ калі, у адваротным выпадку або, калі інакш, калі, яшчэ азначае, што толькі адзін з тых, збіраецца быць правераны, не ўсе тры з іх, патэнцыйна. І гэта робіць яго трохі прыемней на кампутары, гэта выкананне вашай праграмы. Так [? Канстанцін,?] мы ўнутры гэтай лініі, інакш, калі значэнні, кранштэйны сярэдняга зачыняе дужка больш, чым значэнне. Што мы павінны зрабіць? Мы павінны шукаць левую. Як мы гэта робім? Я збіраюся даць вам пачаць. У нас ёсць гэтыя дзве рэчы, званыя пачынаючы і заканчваючы. Так што павінна адбыцца да пачатку? Калі вы хочаце знайсці злева ад Спіс, мы атрымліваем наш Пачатак току. Што нам трэба зрабіць? СТУДЭНЦКАЯ: Пакладзем пачатак ў сярэдзіне плюс 1. Джэйсан Хиршхорн: Дык што, калі мы пошук левую? СТУДЭНЦКАЯ: На жаль, сярэдні мінус - так канцоўка будзе сярэднім мінус 1 і пачатак - Джэйсан Хиршхорн: А што адбываецца з самага пачатку? СТУДЭНЦКАЯ: Ён застаецца тым жа самым. Джэйсан Хиршхорн: Так значэнне застаецца нязменным. Калі мы шукаем левую, мы з выкарыстаннем тых жа пачатак - Цалкам дакладна. І заканчваючы? На жаль, тое, што робіць заканчваючы роўна зноў? СТУДЭНЦКАЯ: Блізкі мінус 1. Джэйсан Хиршхорн: Блізкі мінус 1. Цяпер, чаму мінус 1, а не толькі сярэдні? СТУДЭНЦКАЯ: сярэдзіна з карціна ўжо, таму што мы мелі праверыў, што гэта па-за? Джэйсан Хиршхорн: Гэта Цалкам дакладна. Сярэдзіна з карціны. Мы ўжо праверылі сярэдзіну. Такім чынам, мы не хочам "сярэдзіну", цытату канец цытаты, каб працягваць быць у Масіў, што мы шукаем. Так што гэта фантастычна. Інакш, калі значэнні кранштэйны сярэдняга больш чым значэнне заканчваючы роўных сярэдні мінус 1. Джэф, што з гэтай нагоды апошняй радку? СТУДЭНЦКАЯ: астатняе. Значэнні сярэдняга менш кошту? Джэйсан Хиршхорн: Мы будзем вы даеце мне яшчэ. Так што калі вы не дасце мне - СТУДЭНЦКАЯ: Такім чынам, пачынаючы будзе сярэднім плюс 1. Джэйсан Хиршхорн: Пачынаючы роўна сярэдні плюс 1, зноў жа, за тое ж самае Прычына, па якой Канстанцін даў нам раней. І ў рэшце рэшт, хто не даў мяне радок кода яшчэ? Вярнуцца ілжывае, Aleha, што мы пішам тут? СТУДЭНЦКАЯ: Вярнуцца ілжывым. Джэйсан Хиршхорн: Вярнуцца ілжывым. І мы павінны зрабіць гэта, таму што калі мы не знайсьці ягонага, мы павінны сказаць, мы не знайшлі яго. І мы сказалі, што мы збіраемся вярнуцца лагічны, так што мы вызначана павінны вярнуцца BOOL недзе. Так што давайце запускам гэтага кода. Я на самой справе збіраецца - так што мы ў тэрмінале. Мы ачысціць наша акно. Давайце зробім усё. Мы выявілі, што адна памылка. Там ў памылцы ў радку 15, чакаецца Кропка з коскі ў канцы Дэкларацыя. Такім чынам, што ж я магу забыць? СТУДЭНЦКАЯ: Кропка з коскі. Джэйсан Хиршхорн: Кропка з коскай прама тут. Я думаю, што быў код Тома. Так Том, [неразборліва]. Жартую. Давайце ж зрабіць усё зноў. СТУДЭНЦКАЯ: Што каталог Dropbox мы павінны быць у для гэтага? Джэйсан Хиршхорн: Такім чынам, вы можаце проста глядзець на гэты біт. Але зноў жа, калі вы хочаце, каб перамясціць гэта код у ваш каталог pset3 паспрабаваць гэта, вось што я зрабіў. Калі вы заўважыце тут - шкада, добры пытанне. [? LS,?] У мяне ёсць тут код find.c з кода дыстрыбутыва на гэтым тыдні. У мяне ёсць helpers.h. У мяне ёсць Make-файл, які я на самой справе злёгку змененая, каб уключыць гэтыя новыя файлы мы пішам. Усё, што код будзе даступны, ня код размеркаванне, але новы Зрабіць файл, новы файл helpers.h будзе быць даступныя ў Інтэрнэце для запампоўкі. Зноў жа, так што тыя, з'яўляюцца дадатковыя коды ў нас ёсць. Так што ўсё, за гэтай лініі, робіць знайсці, двайковы, выбар бурбалка - маркі усе трое і кампілюе ў гэта выкананы код знаходка. Дык увогуле, мы не хочам, каб прама ў check50. Мы хочам, каб выканаць некаторыя тэсты самастойна. Але менавіта так мы можам паскорыць гэты трохі, check50 2013 pset3.find пройдзе у helpers.c-- маё дрэннае. У мяне няма, што прама цяпер. Так што мы на самай справе збіраецца запусціць код па-сапраўднаму. Usage.find /, вы ведаеце, што гэта значыць? СТУДЭНЦКАЯ: Вам патрэбны другі каманднага радка на ім. Джэйсан Хиршхорн: мне трэба Другі каманднага радка. І ў адпаведнасці са спецыфікацыяй, мне трэба ўвесці тое, што мы шукаем. Такім чынам, давайце зірнем на 42. Мы будзем трымаць яго ў адсартаваны, таму што мы не напісалі функцыю сартавання яшчэ - 42, 43, 44. І кіравання D не знайшлі Іголка ў стозе сена. Гэта дрэнна. Гэта вызначана ёсць. Давайце паспрабуем нешта яшчэ. Можа быць, гэта таму, што я паклаў гэта ў самым пачатку. Давайце зробім 41, 42, 43. Там мы ідзем. Гэта яго знайшлі. Скажам ў канцы зараз, проста так што мы можам быць дбайным - 40, 41, 42. Не знайшлі іголку. Так што я казаў пра гэта раней. На жаль, я ведаў, што гэта павінна было здарыцца. Але ў педагагічных мэтах, гэта добра, каб даследаваць яго. Гэта не працуе. Па некаторых прычынах, ён не можа знайсці яго. Мы ведаем, што там, але мы не знаходзіў яго. Такім чынам, адна рэч, якую мы маглі зрабіць, гэта прайсьці праз GDB, каб знайсці яго, але робіць нікога, абыходзячы GDB, ёсць Пачуццё, дзе мы аблажаліся? [? Маду? ?] СТУДЭНЦКАЯ: Я думаю, што гэта можа быць, калі сканчаецца роўная пачатку, і гэта проста спіс з аднаго элемента. Тады ён проста ігнаруе яго замест фактычна правяраючы яго. Джэйсан Хиршхорн: Гэта Цалкам дакладна. Калі канчатак роўная пачатак, мы яшчэ ёсць элемент у нашым спісе? СТУДЭНЦКАЯ: Так. Джэйсан Хиршхорн: Так, на самай справе, мы ёсць адзін і толькі адзін элемент. І гэта, хутчэй за ўсё, адбудзецца, калі, за кодзе мы тэставалі, мы знаходзімся ў Пярэдняя частка стозе сена або, па крайняй канец сена. Вось дзе пачатак і канчатак збіраецца роўна адзін, з бінарнага пошуку. Такім чынам, у гэтых двух выпадках ён не працуе, таму заканчваючы быў роўны пачатку. Але калі заканчваючы роўная пачатку, Ці гэта, у той час як цыкл выканаць? Гэта не так. І мы маглі б праверылі што зноў жа праз GDB. Так як мы можам выправіць гэты код, таму што калі той час як канчатак роўная пачынаючы, мы таксама хочам, каб гэты у той час як пятля для запуску. Так што выпраўленне мы можам зрабіць, каб выраўнаваць 18? СТУДЭНЦКАЯ: [неразборліва] больш або роўна. Джэйсан Хиршхорн: Цалкам дакладна. У той час як канчатак больш або роўная пачатку. Так што цяпер, мы ўпэўненыя, каб атрымаць, што кут выпадак у канцы. І давайце паглядзім. Давайце запусцім гэты яшчэ раз. Давайце зробім усё. Зноў жа, вам прыйдзецца проста прытрымлівацца разам тут. Знайсці 41 на гэты раз. Проста трымаць яго ў адпаведнасць. Знайсці 42. Скажам ў пачатку - 42, 43, 44. Мы знайшлі яго. Так, каб было сапраўды змена мы павінны былі зрабіць. Гэта было шмат кадавання мы толькі што зрабіў, бінарны пошук. Хто-небудзь ёсць любыя пытанні перад Я перайду ў лініі мы пісалі ў бінарны пошук ці як мы лічылі, тое, што мы не высвятлялі? Перш чым мы пяройдзем, я таксама хачу адзначыць , Што па вялікім рахунку, мы супаставілі наша псеўда-код ад аднаго да адзін на наш код. У нас сапраўды былі, што складаная рэч каб высветліць, з пачынаючы і заканчваючы. Але калі б вы не зразумелі, што з, вы напісаў бы ў значнай ступені ідэнтычныя код, за выключэннем гэтыя два верхніх радках. І тады вы б зразумелі, калі Вы зрабілі гэта ў стрымак і выпадках, якія трэба нешта яшчэ. Так што нават калі вы вынікалі нашым псеўда-код радка да радка, вы б ужо атрымалі ўсе, акрамя двух ліній код, які вы павінны былі напісаць. І я быў бы гатовы паспрачацца, што вы, хлопцы, бы ўсё зразумеў, што з даволі хутка, што вам трэба, каб пакласці свайго роду маркерам туды, каб высветліць , Дзе вы былі. Гэта зноў жа, ёсць сіла рабіць псеўда-код загадзя. Такім чынам, мы можам зрабіць логіку, а затым мы можам турбавацца аб сінтаксісе. Калі б мы былі збянтэжаныя аб логіцы пры спробе запісаць гэты код у C, мы атрымалі б ўсё сапсаваў. А потым мы будзем задаваць пытанні аб логіка і сінтаксіс і счапленне іх усё разам. І мы атрымалі б страчаным у тым, што можа хутка стаць вельмі цяжкая задача. Так давайце пяройдзем цяпер да выбару выгляду. У нас ёсць 20 хвілін у запасе. Таму ў мяне ёсць пачуццё, што мы не зможам прайсці праз усе выбару роду і пузырьковый сартавання. Але давайце па крайняй меры, спроба скончыць выбару роду. Так рэалізацыі выбар роду дапамогі Наступны аб'яву функцыі. Зноў жа, гэта ўзята з Праблема ўсталяваць спецыфікацыю. Int значэння з'яўляецца дужкі, з'яўляецца масіў цэлых лікаў. І int.n з'яўляецца памер гэтага масіва. Роду Выбар збіраецца сартаваць гэты масіў. Так у адпаведнасці з нашай ментальнай мадэлі адбору роду, мы цягнем - Спачатку мы пройдземся па спісе першым Час, знайсці найменшае лік, пакласці яго ў пачатку, знайсці другую найменшую колькасць, пакласці яго ў Другая пазіцыя, калі мы хочам накшталт ў парадку ўзрастання. Я не прымушаю вас пісаць псеўда-код прама цяпер. Але перш, чым мы робім код як клас у пяць хвілін, мы збіраемся напісаць псеўда-код, таму мы павінны некаторы сэнс ад таго, дзе мы ідзем. Так спрабаваць запісаць псеўда-код па сваім меркаванні. А потым спрабуйце павярнуць, што псеўда-код у код. Мы зробім гэта ў якасці групы праз пяць хвілін. І, вядома, дайце мне ведаць, калі ў вас ёсць якія-небудзь пытанні. СТУДЭНЦКАЯ: Што гэта? Джэйсан Хиршхорн: Паглядзіце, як далёка вы можаце атрымаць у больш за дзве хвіліны. Я разумею, вы не будзеце быць у стане скончыць. Але мы пойдзем на гэта ў групе. Вы ўсё кадавання так [неразборліва], таму я шкада, каб прыпыніць, што вы робіце. Але давайце пройдзем гэта як групы. І зноў, бінарны пошук, вы ўсё даюць мне адзін, калі не больш радкоў кода. Дзякуй Вам за гэта. Мы збіраемся зрабіць тое ж самае тут, код разам як група. Так выбар роду - давайце напішам У выніку хуткай псеўда-код. За ментальнай мадэлі, можа хто-то даць мне першая лінія псеўда-код, калі ласка? Што я хачу зрабіць? Студэнт: У той час як спіс выйшаў з ладу. Джэйсан Хиршхорн: Добра, у той час як Спіс выйшаў з ладу. А што вы маеце на ўвазе "не ў парадку?" Студэнт: У той час як [неразборліва] ня сартуюцца. Джэйсан Хиршхорн: У той час як спіс выйшаў з ладу, што ж нам рабіць? Дайце мне другую лінію, калі ласка, Маркус. Студэнт: Так знайсці наступны найменшая колькасць. Гэта будзе з водступам. Джэйсан Хиршхорн: Так знайсці Наступны найменшая колькасць. А потым хто-то яшчэ? Як толькі мы знойдзем наступны па велічыні лік, што ж нам рабіць? Я збіраюся сказаць, знайсці найменшая колькасць. Гэта тое, што мы хочам зрабіць. Так што знайдзіце найменшая колькасць. Тады што ж нам рабіць? СТУДЭНЦКАЯ: [неразборліва], каб пачатку. Джэйсан Хиршхорн: Выбачайце? СТУДЭНЦКАЯ: Змесціце яго ў пачатку спісу. Джэйсан Хиршхорн: Так змесціце яго ў пачатак спісу. І што ж нам рабіць, каб рэчы што было ў пачатку з спісу, ці не так? Мы перазапісу нешта. Дык дзе ж мы ставім, што? Так, Ганна? СТУДЭНЦКАЯ: Дзе самы маленькі лік было? Джэйсан Хиршхорн: Так паклаў пачатак спісу, дзе Найменшая колькасць было. Такім чынам, хоць гэты спіс не ў парадку, знайсці найменшую колькасць, змесціце яго ў пачатак спісу, пакласці пачатак спісу, дзе Найменшая колькасць было. Маркус, вы можаце перафразаваць гэтую лінію у той час як спіс не ў парадку? Студэнт: У той час як лік не былі адсартаваныя? Джэйсан Хиршхорн: Такім чынам, для таго, каб ведаю, што нумары не былі сартуюцца, што мы павінны зрабіць? Колькі нам трэба прайсці праз гэты спіс? Студэнт: Так што я думаю цыкл, або у той час як, у той час праверылі нумары менш чым даўжыня спісу? Джэйсан Хиршхорн: ОК, гэта добра. Я думаю, што misphrased маё пытанне дрэнна. Я проста спрабую атрымаць на мы збіраемся павінны пайсці праз увесь спіс. Такім чынам, хоць гэты спіс не ў парадку, для мяне гэта цяжка супаставіць на. Але ў прынцыпе, гэта, як Я думаю пра гэта. Прайдзіце ўвесь спіс, знайсці найменшую колькасць, змесціце яго ў пачынаючы - на самай справе, вы маеце рацыю. Скажам іх абодвух. Такім чынам, хоць гэты спіс не ў парадку, мы трэба ісці праз увесь спіс адзін раз, знайсці найменшае лік, месца гэта ў пачатку спісу, пакласці пачатак спісу, дзе Найменшая колькасць было, а потым, калі Спіс па-ранейшаму не ў парадку, у нас павінны прайсці праз гэта Працэс зноў, ці не так? Вось чаму выбар роду, серада Вялікі-O адборачнага роду, хто? СТУДЭНЦКАЯ: Н ў квадраце. Джэйсан Хиршхорн: Н ў квадраце. Таму што, як Маркус і я проста зразумеў, тут, мы збіраемся павінны прайсціся па спісе спіс колькасць разоў. Так перажывае нешта Даўжыня п п колькасць разоў на самай справе н квадрат. Так што гэта наш псевдокод. Гэта выглядае вельмі добра. Хто-небудзь ёсць якія-небудзь пытанні аб псевдокоде? Таму што на самой справе выбар роду павінны верагодна, прыйсці 12:59, кода з псевдокод. Таму ўсе пытанні аб Логіка псевдокоде? Калі ласка, папытаеце яго цяпер. Роду Выбар - у той час як спіс з парадку, мы збіраемся прайсці праз гэта і знайсці найменшае кожны раз і паклаў яго ў пярэдняй. Такім чынам, хоць гэты спіс не ў парадку, можа хто-небудзь даць мне гэты радок кода, які не даў мне пару радкоў кода яшчэ, калі ласка? Гэта гучыць як што? СТУДЭНЦКАЯ: Гэта цыкл. Джэйсан Хиршхорн: Гэта гучыць падабаецца цыкл. Добра, вы можаце даць мне для цыкла? Для - СТУДЭНЦКАЯ: я роўная 0. Джэйсан Хиршхорн: я ці - што ж нам не хапае? Тое, што адбываецца прама тут? СТУДЭНЦКАЯ: Int. Джэйсан Хиршхорн: Цалкам дакладна. (INT = 0; - СТУДЭНЦКАЯ: <п; я + +). Джэйсан Хиршхорн: прыбіў яго, Джэф. Мы збіраемся па спісе, ці не так? Мы бачылі, што код раней. Выдатна. Дык давайце паставім нашы фігурныя дужкі тут. Я збіраюся паставіць некаторыя Фігурныя дужкі тут. Такім чынам, хоць гэта 0, мы павінны пайсці праз увесь спіс. Такім чынам, кожны раз, калі мы пройдземся па спісе, што мы хочам, каб адсочваць? СТУДЭНЦКАЯ: Калі якія-небудзь свопы зробленыя. Джэйсан Хиршхорн: Знайсці найменшая колькасць. Такім чынам, мы, верагодна, варта адсочваць найменшая колькасць кожны раз. Так лінія я магу зрабіць, каб адсочваць найменшага колькасці? Aleha, як я магу трымаць трэк-то? СТУДЭНЦКАЯ: Пачніце новую зменную. Джэйсан Хиршхорн: Пачніце новую зменную. Так давайце створым зменную. Які выгляд? СТУДЭНЦКАЯ: Int. Джэйсан Хиршхорн: Int. Давайце назавем гэта самы маленькі. І тое, што робіць яго роўным, калі мы толькі пачынаюць сваю дзейнасць? Мы не пайшлі па спісе яшчэ. Мы знаходзімся ў першай частцы спіс у наш першы раз да канца. Што яго роўным, найменшая колькасць? СТУДЭНЦКАЯ каштоўнасцяў, якія я. Джэйсан Хиршхорн: каштоўнасцяў, якія я. Гэта гучыць зусім дакладна, ці не так? Найменшая колькасць у пачатку дзе мы знаходзімся. Так што цяпер у нас ёсць маленькі, і мы павінны прайсці праз увесь спіс і параўнаць гэта маленькі з усім астатнім. Так што мы ідзем па спісе зноў? Майкл? СТУДЭНЦКАЯ: Вам трэба зрабіць іншы цыкл. Джэйсан Хиршхорн: Іншы цыкл. Давайце зробім гэта. Дайце мне код. СТУДЭНЦКАЯ: Для цыкла - для самых маленькіх - проста Int J, не маглі б вы сказаць? = 0; такім чынам, што - Джэйсан Хиршхорн: Ну, калі мы хочам прайсці праз увесь спіс - СТУДЭНЦКАЯ: J <п, J + +). Джэйсан Хиршхорн: Фантастыка. Мы збіраемся прайсці праз цыкл яшчэ раз. І як мы можам знайсці найменшая колькасць? Том? У нас ёсць бягучы найменшая колькасць, так як мы можам знайсці новы маленькі? СТУДЭНЦКАЯ: Мы можам праверыць, калі найменшая лік у нас ёсць больш, чым значэнні кранштэйны J. Джэйсан Хиршхорн: Дык што, калі найменшай больш, чым значэнні кранштэйна у. Так што, калі наша цяперашняя маленькі больш - Я збіраюся рухацца гэтыя два радкі кода там на секунду. Таму што, перш чым рабіць якія-небудзь замену, мы трэба ісці праз увесь спіс. Так што гэта псевдокод павінны на самай справе быць па-за што ўнутраная цыклу. Так што праз ўвесь спіс. Калі маленькі больш то значэння J і што? СТУДЭНЦКАЯ: Тады маленькі роўная значэнні J. Джэйсан Хиршхорн: Фантастыка. Адзін хуткі пытанне - ў першы раз мы ідзем праз гэтую пятлю, я збіраецца раўняцца 0, J збіраецца роўным 0, як толькі мы сюды трапілі. Такім чынам, мы збіраемся параўноўваць шэраг сабе. Хіба што больш эфектыўна? Не, гэта не зусім эфектыўна. Гэтак жа наша J трэба ісці ад 0 да п кожны раз? Ці заўсёды мы павінны праверыць праз увесь спіс? [Неразборліва]? СТУДЭНЦКАЯ пачатку я замест гэтага. Джэйсан Хиршхорн: J банку пачаць з чаго? СТУДЭНЦКАЯ: я. Джэйсан Хиршхорн: J можаце пачаць з I. Так што цяпер мы параўноўваем пачынаючы з той, якую мы знаходзіцеся. Але нават тады, з'яўляецца тое, што ў якасці эфектыўным, наколькі гэта магчыма? СТУДЭНЦКАЯ: + 1. Джэйсан Хиршхорн: + 1, здаецца, найбольш эфектыўным, таму што мы ўжо ёсць я. Мы пра тое, што, як маленькі ў радку 15. Мы збіраемся пачаць з наступны аўтаматычна. Так мы праходзім цыкл. Мы пойдзем праз кожны раз. Мы пойдзем праз колькасць разоў. Зараз мы атрымалі праз гэта ўнутраная цыклу. У нас ёсць найменшае значэнне ратуе. Нам трэба, каб змясціць яго на пачатку спісу. Так як я магу размясціць яго на пачатку спісу? Што такое пераменная, якая спасылаецца ў пачатку спісу? Мы знаходзімся ў гэтай знешняй цыкл, ну і што ставіцца да пачатку спісу? СТУДЭНЦКАЯ каштоўнасцяў, якія я. Джэйсан Хиршхорн: Цалкам дакладна. Значэнні я гэта пачатак - або шкада, не пачало. Гэта было зман. Гэта месца, дзе мы знаходзімся ў пачатку малокомплектных частка спісу. Так ацэньвае я. А што значыць, што роўныя? СТУДЭНЦКАЯ: Найменшы. Джэйсан Хиршхорн: Значэнні я роўная што? СТУДЭНЦКАЯ: Найменшы. Джэйсан Хиршхорн: Найменшы. Цалкам дакладна. Такім чынам, мы змясціўшы яго ў пачатку з спісу, і зараз мы павінны паставіць пачатак спісу, дзе найменшая колькасць было. Так як я магу напісаць, дзе Найменшая колькасць было? Значэння што? СТУДЭНЦКАЯ: 0. Джэйсан Хиршхорн: Невялікі лік гэты на 0? СТУДЭНЦКАЯ: Так. Джэйсан Хиршхорн: Што рабіць, калі маленькі лік было ў канцы гэта малокомплектных спіс? СТУДЭНЦКАЯ: На жаль, якой было пытанне? Джэйсан Хиршхорн: Дзе найменшая колькасць? Мы ўзялі самы маленькі і паклаў яго на пачынаючы з гэтай лініі прама тут. СТУДЭНЦКАЯ: Ён павінен мець захавана ў некаторых - СТУДЭНЦКАЯ: Значэнні J. Джэйсан Хиршхорн: Ну, гэта не абавязкова значэнні J. Гэта нават не існуе на дадзены момант. СТУДЭНЦКАЯ: Вы павінны абвясьціць пераменная раней і затым прызначыць яго - калі вы знойдзеце найменшая колькасць, прызначыць індэкс гэтага ліку ў некаторая пераменная ці нешта накшталт гэтага. Джэйсан Хиршхорн: Дык можа вы кажаце, што зноў? СТУДЭНЦКАЯ: Такім чынам, дзе вы заявілі Int маленькі, вы павінны таксама абвясціць Int найменшы індэкс = я, або нешта ў гэтым родзе. Джэйсан Хиршхорн: Дык дзе я дзесятковага маленькі, я павінен не толькі адсочваць кошту, але размяшчэнне. унутр smallest_location = у гэтым так, мы проста робяць я. Нам трэба ведаць, дзе ён знаходзіцца. Мы дабраліся да канца кода, і мы зразумеў, што мы паняцця не мелі, дзе гэта было. І так зноў, мы адлюстраванне гэта на 00:59. Вы, хлопцы, кадавальныя гэта на свой страх і волі верагодна, атрымаць да той жа праблеме. Як, чорт вазьмі, я знаходжу гэта? І тады вы зразумееце, пачакайце, я трэба адсочваць, што. Так што, калі маленькі больш чым значэнні J. Мы ўсталявалі маленькі роўная значэнняў у. Што яшчэ нам трэба змяніць? Канстанцін, што яшчэ зрабіць, мы павінны змяніць? СТУДЭНЦКАЯ: Размяшчэнне. Джэйсан Хиршхорн: Цалкам дакладна. Так дайце мне гэты радок у кодзе. СТУДЭНЦКАЯ: smallest_location = у. Джэйсан Хиршхорн: Цалкам дакладна. А потым зваліўся ў канцы, калі мы хочам паклаў пачатак спісу, дзе найменшая колькасць было, як мы см. дзе Найменшая колькасць было? Маркус? СТУДЭНЦКАЯ: Найменшая колькасць было размешчаны ў маленькай месцы. Джэйсан Хиршхорн: Так пры значэннях smallest_location. І што ж мы паставіць там? Пачатак Спіс, што гэта такое? СТУДЭНЦКАЯ: Ну, мы сапраўды не ведаем, больш, таму што мы перапісаў. Так што гэта памяняліся месца з гэтых двух ліній? Пры пераключэнні гэтыя дзве лініі вакол. Джэйсан Хиршхорн: Такім чынам, мы не больш, таму што мы скінуць лінію да значэнняў я да маленькіх. Такім чынам, мы страцілі гэтую пачатковае значэнне. Дык вы сказалі своп гэтыя дзве лініі. Так што цяпер паклаў пачатак спісу дзе найменшая колькасць было. Так smallest_location роўная каштоўнасці я. Гэта рухаецца пачатку гэтага малокомплектных частку спісу на маленькі месца. А потым у значэнні я мы рухаемся што найменшая колькасць. Ці мае гэта сэнс, чаму мы павінен быў зрабіць, што своп? Мы б перапісаныя гэтае значэнне - іншая справа, вы б, напэўна, зразумеў, і знайсці ў ВУП. Такім чынам, мы паклапаціліся усе псевдокод. Ці ёсць што-небудзь яшчэ, што мы трэба напісаць тут? Хто-небудзь можа думаць ні пра што? СТУДЭНЦКАЯ: Як вы ведаеце, калі вы скончыце? Джэйсан Хиршхорн: Як мы ведаеце, калі мы скончым? Вялікае пытанне. Так як жа нам ведаць, калі мы скончылі. СТУДЭНЦКАЯ: Стварыце зменную, каб трымаць кошт з, калі ёсць своп зрабіў ці не і прайсці праз праход. Джэйсан Хиршхорн: ОК. Гэта было б працаваць у пузырьковый сартавання. Але для выбару роду, калі мы не будзем зрабіць абмен, што можа быць проста таму што найменшае значэнне у ім яго правільнае размяшчэнне. Мы маглі б мець спіс 1, 2, 4, 3. У другі раз праз мы не будзе рабіць ніякіх свопов. Мы будзем на ліку 2, але мы будзем яшчэ трэба, каб працягваць ісці. Так што нам трэба адсочваць, калі мы зрабілі, ці ж мы проста хочам, каб пайсці пакуль гэта не будзе скончана? СТУДЭНЦКАЯ: Мы можам проста пайсці пакуль яна не будзе скончаная. Джэйсан Хиршхорн: Мы можам проста ісці, пакуль гэта не скончана. У пузырьковый сартавання, вы цалкам маеце рацыю, Джэф і Aleha, з вашым рашэннем - гэта выдатна, каб адсочваць, колькі свопы вы зрабілі, таму што ў бурбалку роду, калі вы на самой справе не робяць ніякіх свопов, вы скончыце, і вы можаце магчыма скараціць вашыя Праблема трохі ўніз. Але для выбару роду, вы, сапраўды трэба ісці да канца ў спіс кожны раз вакол. Такім чынам, гэта тое. У нас ёсць дзве хвіліны засталося. Давайце зробім усё. Дазвольце мне проста адкрыць Знайсці тут і зрабіць упэўнены, што я на самой справе выкліку - Я не называю пузырьковую сартаванне. Давайце зменім гэта ў мой выбар роду. зрабіць усё. / знайсці. Давайце даведаемся 42. На гэты раз мы збіраемся прайсці малокомплектных спіс, таму што яна можа вырашыць па-першае, у адпаведнасці з кодам знайсці - павінны разабрацца Першы, якія выкарыстоўваюць нашу функцыю сартавання, а затым шукаць нешта. Пальцы скрыжаваўшы ўсіх. Аб божа мой. Эй, маё сэрца білася. Так што гэта правільна. На самай справе, калі мы пабеглі гэта больш шырока, код, наколькі я магу сказаць, зусім правільна. Ёсць некаторыя прапановы, Я б за вас. Напрыклад, 15 і 16, здаецца трохі залішнім. Здаецца, што вы не абавязкова неабходна захаваць і тыя. Калі ў вас ёсць найменшую месцы, вы можаце лёгка знайсці найменшае значэнне па проста набраўшы значэнні I. Так што, калі б я павінен быў быць класіфікацыі кода, які я фактычна будзе, я б верагодна, зняць кропку, калі вы ўключаны абодва з іх, таму што вам ня трэба абодвух з іх. Калі ў вас ёсць месца, вы можаце вельмі лёгка атрымаць значэнне. І, здаецца, крыху дзіўна захоўваць іх абодвух. Можа быць, нават не ўзяць кропку, але вядома каментаваць, што гэта можа быць, ня стылістычны выбар Вы павінны зрабіць. Вядома, код па-ранейшаму працуе на выдатна. Таму, на жаль, мы не зрабілі дабрацца да пузырьковый сартавання. Я шкадую пра гэта. Мы зрабілі фінішную выбару роду. Хто-небудзь ёсць якія-небудзь канчатковыя пытанні аб выбары роду? Добра, перш, чым мы качан, я хачу, каб вы адкрыць свой Chrome браўзэр. На жаль, гэта было проста абуральным убудова для аднаго тыпу інтэрнэт-браўзэра. Вы можаце адкрыць любы тып браўзэра, але гэта, верагодна, будзе Chrome. І пайсці ў гэты наступным вэб-сайце - sayat.me/cs50. Калі вы не друкуеце на кампутары Прама зараз, вы выразна не раблю гэта, Том. І, калі ласка, зрабіць гэта альбо прама зараз або на працягу наступнага гадзіны - даць мне некаторую зваротную сувязь. Гэта толькі раздзел два. У нас ёсць яшчэ шмат разам, таму я ёсць шмат месца для паляпшэння. Я спадзяюся таксама зрабіў некаторыя рэчы добра. Такім чынам, вы можаце прымусіць мяне адчуваць сябе ўсё так дрэнна, але калі Вы таксама хочаце, каб даць мне смайлік твар, я быў бы ўдзячны, што добра. Запоўніце, што цалі І з адной хвіліны налева, што было тры тыдні. Я буду стаяць за некаторы час калі ў вас ёсць якія-небудзь пытанні. Я ўбачу вас, хлопцы ў лекцыі заўтра.