[Powered by Google Translate] [Частка 3] [менш камфортна] [Nate Хардисон] [Harvard University] [Гэта CS50.] [CS50.TV] Добра, давайце пачнем. Сардэчна запрашаем у 4 тыдні CS50. Калі вы, хлопцы, адкрыйце вэб-браўзэр і адкрыць PSET 3, Барацьба з CS50, мы збіраемся пачаць хадзіць праз участак пытанні там. Гэтак жа, як на мінулым тыдні, мы будзем працаваць у CS50 прасторы, калі вы таксама будзеце цягнуць, што як уверх, так, і калі вы ідзяце наперадзе і па гэтай спасылцы, што я ўстаў тут на самым версе. Прыйшоў час пачаць працу. У нас ёсць наша маленькая праграма прывітанне тут. Нічога не вар'ят. Адна з першых рэчаў, якія я хачу зрабіць з вамі, хлопцы сёння ісці на працягу некалькіх рашэнняў да праблемы Set 1, добры прыклад рашэнняў, толькі так можна адчуць, якія кода персаналу піша, якія кодам іншыя студэнты пішуць, А вы паглядзіце на гэта, таму што я ведаю, гэта дзіўна калі вы прадставіць рашэнне праблемы набору і атрымаць каментары на вашай ўласнай версіі, але часам гэта карысна паглядзець, як іншыя людзі рабілі гэта, Асабліва тыя, якія з'яўляюцца прыемныя воку. Па большай частцы, я быў сапраўды ўражаны рашэнні, якія вы, хлопцы вытворчасці. Я яшчэ не пачаў глядзець на вашы 2s задач, але калі яны што-небудзь накшталт першага, гэта нічога не значыць, але добрыя рэчы. Калі вы паглядзіце на мае змены, давайце пачнем ўсе шляхі ўніз па пераглядзе 1, і мы збіраемся ўзяць хуткі погляд на рашэнне Марыё. Калі пацягнуць гэтую гульню, гэтыя праграмы, якія мы збіраемся прадставіць правільныя. Існавалі ня правільнасць праблем з гэтымі праблемамі, а, хутчэй, Мы хочам крыху расказаць аб розных пытаннях дызайну , Якія выкарыстоўваліся тут. Адна з рэчаў, што было цікава аб рашэнні тым, што ён выкарыстаў гэтую новую канструкцыю, званую фунт вызначыць, часам таксама завуць хэш вызначыць. Дазвольце мне наблізіць яго тут. # Вызначаем дазваляе даваць імёны гэтых лічбаў у вашай праграме. У гэтым выпадку максімальная вышыня піраміды ў Mario было 23 і, а не пакласці 23 у маім кодзе мы хацелі б звярнуцца да гэтага як жорсткага кадавання 23 - замест гэтага дае назву MAX_HEIGHT на гэты нумар, так што тут, у маім зрабі той час як цыкл вы можаце звярнуцца да MAX_HEIGHT замест таго, каб лік 23 цалі [Студэнт] Што такое перавага, што рабіць? Гэта вялікае пытанне. Адным з іх з'яўляецца чытэльнасць. Перавага выкарыстання гэтага # вызначыць з'яўляецца чытэльнасць. Калі я чытаю гэты код, я бачу, што адбываецца. Я бачу ў такім стане, што тут мы тэстуем на вышыню быцця <0, што мы маглі б таксама вызначаны быць мінімальная вышыня або вышыня мін. Іншым перавагай з'яўляецца тое, што потым можна будзе прачытаць астатнюю частку лініі, каб убачыць , Што мы таксама праверкі, каб пераканацца, што вышыня не перавышае вышыню не больш, таму што мы збіраемся працягваць у той час як вышыня больш, чым вышыня макс. Іншым перавагай з'яўляецца тое, калі я маштаб трохі тут- калі я запускаю гэтую праграму і я запускаю яго, скажам, з 23 прама зараз, ён будзе друкаваць усе 23 шэрагаў проста так. Але сказаць, што я хацела, каб змяніць вышыню не больш, і цяпер я хачу, каб абмежаваць максімальную вышыню піраміды будзе сказаць толькі чалавек, які быў ачмуральны. # Уключыць , # вызначыць MAX_HEIGHT, і скажам, што мы хацелі, каб усталяваць яго роўным 10. Цяпер у гэты момант, усё, што я павінен быў зрабіць, змяніць яго ў гэтым месцы. Я магу перакампіляваць код, і цяпер, калі я паспрабую і ўвядзіце ў 12, яна папросіць мяне зноў. У гэтым выпадку мы выкарыстоўваем толькі MAX_HEIGHT раз. Гэта не так ужо клопатаў, каб увайсці ў і змяніць яго ў той час цыклу, калі вам трэба. Але ў праграмах, у якіх вы спасылаецеся той жа магічнае лік зноў і зноў, гэта # вызначыць механізм сапраўды зручна таму што вы проста змяніць яго адзін раз у верхняй частцы файла-гэта правіла, дзе вы змесціце іх- і змяненне прасочваецца праз астатнюю частку файла. Іншыя рэчы, якія я хацеў бы адзначыць у гэтым прызначэнні, што я думаў, выглядаў сапраўды добрым, адзін быў наймення зменных. Вы бачыце тут, што ў нас ёсць цэлыя зменныя называюцца радкі і званай вышыні. Прасторы, хэшы, яна дапамагае зрабіць код крыху больш чытэльным, робіць яго крыху больш зразумела, што адбываецца на самай справе. Гэта ў адрозненне ад выкарыстання, скажам, выпадковых літар ці проста абракадабру ў цэлым. Апошняе, што я пакажу, што ў цыклы, Часта гэтыя зменныя итератора, гэтыя лічыльнікі, якія вы выкарыстоўваеце ў вашай цыклы, гэта стандартныя і звычайныя, каб пачаць іх альбо я, а затым J і K і адбываецца адтуль, калі вам трэба больш зменных, і гэта толькі ўмоўнасць. Ёсць шмат канвенцый. Гэта залежыць ад мовы праграмавання, які вы выкарыстоўваеце. Але ў C, мы звычайна пачынаем з я. Гэта не мае сэнсу выкарыстоўваць, скажам, або б у залежнасці ад сітуацыі. Вось менавіта для гэтага. Калі вы зараз падцягнуць Перагляд 2, вы ўбачыце іншую Марыё, і гэта адна падобная на іншую, што мы толькі што бачылі, але ён робіць нешта крута. Калі мы паглядзім на гэты падзел прама тут, ва ўнутраным цыклу, яны выкарыстоўваюць некаторыя вар'яты шукае сінтаксіс тут, прама ў гэтай лініі. Гэта называецца патройны аператар. Гэта калі іншае заяву кандэнсуецца ў адной радку. Умова гэтай частцы ў дужках. Гэта раўнасільна таму, калі J <вышыня - I - 1. А тое, што змест гэтага блока, калі б гэта прастора , А затым зьмест таго, што яшчэ будзе ёсць гэты #. Гэта, па сутнасці, прысваенне прасторы для гэтай зменнай. Гэта паклаўшы месца ў змесціва блока зменнай, Калі гэта ўмова выконваецца, і калі ўмова не выконваецца, Затым блок пераменная атрымлівае гэтую #. І тады, вядома, замест таго, каб будаваць цэлую радок і друк ўсё ў канцы гэтага рашэння выводзіць яе на адзін знак за адзін раз. Даволі халаднавата. Яшчэ пару рэчаў, каб глядзець на. Мы будзем пераходзіць да прагнай. Цяпер, калі мы паглядзім на прагных, гэта першае рашэнне выкарыстоўвае гэтыя # вызначае зусім няшмат. У нас ёсць адна канстанта вызначана для кожнага з розных лікаў у гэтай праграме. У нас ёсць адзін для цэнтаў за долар, па адной для памяшканняў, дзесяць цэнтаў, нікель і капейкі, і цяпер, калі мы пракруціць ўніз і прачытаць код, мы бачым стандартны рабіць-час цыклу друку ўсе з. Выгляд сутнасць гэтай праблемы, разумеючы, што Вы, неабходныя для пераўтварэння паплавок, які вы праглядаеце ў ад карыстача да цэлага сапраўды рабіць матэматыку, і гэта таму, з лікамі з якая плавае кропкай, пра якую мы казалі ў лекцыі коратка, гэта не магчыма, каб сапраўды прадстаўляць кожнае значэнне на лікавай прамой таму, што існуе бясконца шмат значэнняў паміж 3 і, скажам, 3,1 нават. Вы можаце мець 3,01 і 3,001 і 3,0001, і вы можаце працягваць ісці. Аказваецца, кожны раз, калі вы працуеце з грашыма, вы часта хочуць, каб пераўтварыць яго ў фармаце цэлага ліку, так што вы не губляеце грошы і ў такім жа родзе. Робячы гэта, і акругленне быў ключ. Гэта рашэнне выкарыстаць зусім просты, вялікі алгарытм, якая памяншаецца колькасць пакінутых цэнтаў, спачатку па кварталах, то па дзесяць цэнтаў, то нікель, то капейкі, і дадаўшы да ліку манет кожны раз. Іншае рашэнне, што мы будзем бачыць, як я маштаб і перайсці да перагляду 4, былі вельмі падобныя пачатку, але замест гэтага выкарыстаў спраў і мода Права сюды, каб разлічыць колькасць цэнтаў. Гэта, лік кварталаў роўная колькасці цэнтаў падзяліць на 25, і прычына гэтага працуе, таму што мы робім цэлае падраздзяленне, так што гэта адкідванне астатку. [Студэнт] Ці ёсць у нас на каментар пошук? Гэта сапраўды залежыць. [Студэнт] Ты каментуючы больш, чым код прама тут. Так, і так ёсць куча розных філасофій па гэтым пытанні. Мая асабістая філасофія ў тым, што код сапраўды праўда, як ваш код з'яўляецца тое, што на самой справе выканання на кампутары, і так ваш код павінен быць чытаным, як можна не патрабуюць столькі каментароў. Тым не менш, калі вы робіце рэчы, якія з'яўляюцца свайго роду складаным матэматычным або алгарытмічных, гэта добра, каб каментаваць тыя, так што вы можаце дадаць дадатковае вымярэнне, дадатковы пласт да таго, хто чытае ваш код. У гэтых рашэнняў, часта яны пракаментавалі ў большай ступені толькі таму, што Мы хочам мець магчымасць распаўсюджваць іх і ёсць людзі забраць іх і чытаць іх даволі лёгка. Але, безумоўна, я згодны, што гэта цяжка. [Студэнт] Але калі вы сумняваецеся, ісці цяжэй? Калі вы сумняваецеся, ісці цяжэй. Некаторыя людзі часам гавораць, 0 вяртанне ці нешта накшталт гэтага. Я думаю, што гэта смешна каментар. Відавочна, што тое, што адбываецца. Мне не патрэбны англійская, каб сказаць мне гэта. Часам людзі будуць пісаць такія рэчы, як "kthxbai!" Гэта міла, але і не- гэта не робіць розніцы паміж каментуючы пункту ці не. Такога роду каментары толькі ха-ха. Cool. На дадзены момант, давайце пачнем працаваць над праблемай Set 3-га падзелаў пытанняў. Калі вы, хлопцы цягнуць гэта зноў, як і на мінулым тыдні, мы не збіраемся глядзець шорты ў гэтым раздзеле. Мы паведамім вам, хлопцы, што рабіць у свой вольны час і казаць пра пытанні. Але цяпер у гэтым раздзеле мы збіраемся выдаткаваць трохі больш часу, казаць пра меншай кадавання асновы як мы гэта рабілі на мінулым тыдні, і замест гэтага, мы збіраемся надаваць больш увагі яшчэ трохі тэорыі, так што казаць пра бінарны пошук, а затым сартаванне. З тых з вас, хто сочыць разам з лекцыяй, можа хто-небудзь даць мне рэзюмэ, у чым розніца паміж бінарны пошук і лінейны пошук? Што адбываецца? Вядома. Лінейны пошук пошук праз кожны элемент у спарадкаваны спіс адзін за адным, адзін за адным, і бінарны пошук дзеліць спіс на 2 групы, правярае, ці мае ключы, якія вы шукаеце, больш ці менш, чым сярэдзіна значэння што вы толькі што знайшлі, і калі ён менш, ён ідзе з меншым спісам і затым дзеліць гэта зноў, робіць тую ж функцыю, ўвесь шлях ўніз, пакуль не знойдзе сярэдзіну, каб быць роўным значэнні сябе. Права. Навошта нам гэта трэба? Чаму мы гаворым пра бінарнага пошуку па параўнанні з лінейным пошукам? Так. Двайковыя нашмат хутчэй, так што калі вы падвоіць памер праблемы ён робіць яшчэ адзін крок, а не ў два разы больш. Менавіта так. Гэта выдатны адказ. Лінейны пошук вельмі праверкі аднаго элемента за адзін раз, і, як мы бачылі ў першы дзень лекцый , Калі пайшоў Давід сваім прыкладам тэлефоннай кнізе і вырваў адну старонку з тэлефоннай кнігі ў той час, і працягвалі рабіць гэта зноў і зноў і зноў, ён збіраецца ўзяць яго сапраўды шмат часу, каб знайсці нікога ў тэлефоннай кнізе, калі, вядома, ён шукаў кагосьці ў самым пачатку алфавіту. З бінарны пошук, вы можаце пайсці значна хутчэй, і гэта не толькі ў два разы хутчэй ці 3 разы хутчэй, або ў 4 разы хутчэй. Але праблема становіцца ўсё менш і менш і менш значна хутчэй. Каб праілюстраваць гэта, мы пачнем гаварыць пра тое, што адбываецца калі мы пішам бінарны пошук. Праблема ў руцэ, што калі ў мяне ёсць масіў лікаў, скажам, 1, 2, 3, 5, 7, 23, 45, 78, 12323, , А затым 9 з тонай 0s пасля яго, Мы хочам быць у стане высветліць, сапраўды хутка, што знаходзіцца ў гэта масіў лікаў. Я ведаю, гэта здаецца трохі дурным і трохі надуманы, таму што цяпер яна ёсць. У нас ёсць масіў, які не вельмі шмат элементаў у ім, і калі я папрашу аднаго з вас, каб высветліць ці сапраўды 23 знаходзіцца ў масіве, вы можаце зрабіць гэта даволі хутка проста зірнуўшы на гэтым і казаў мне: так ці не. Аналагавых, каб разгледзець з'яўляецца ўявіце сабе, калі б гэта было, скажам, табліцамі Excel з 10000 радкоў, 20.000 радкоў. Вядома, вы можаце зрабіць F каманда або кіравання F і шукаць нешта. Вы таксама можаце выкарыстоўваць фільтры і пошук матэрыялу, але калі ў вас праглядаць гэты файл радок за радком за радком, гэта зойме ў вас шмат часу, каб знайсці яго. Гэта накшталт як у прыкладзе тэлефоннай кнігі, таксама, дзе ніхто не глядзіць у адну старонку тэлефоннай кнігі на час. Як правіла, яны яго адкрыць да сярэдзіны, ці, у выпадку вялікай колькасці тэлефонных кніг і слоўнікаў, дзе Вы на самой справе гэта ключ на першую літару, Вы пстрыкаю на што першы ліст і адкрыць і пачаць хадзіць праз яго. Нагадаеце мне ваша імя. >> Сэм. Сэм. Як Сэм сказаў, што лінейны працэс пошуку будзе вельмі павольным, , А замест гэтага з бінарны пошук, як гэта працуе так, што кожны раз, калі мы праходзім праз ітэрацыя нашага алгарытму пошуку, мы збіраемся падзяліць спіс у два разы, па сутнасці, на дзве меншыя спісы. І тады на наступным ітэрацыі цыклу, мы дзелім яго зноў ў іншых невялікіх спісаў. Як вы можаце бачыць, праблема становіцца ўсё менш і менш бо трымаемся адкідаючы палову спісу кожны раз. Як гэта выкінуць працы? Гэтак жа, як напамін, што мы збіраемся рабіць, калі мы былі кампутараў і мы былі, скажам, шукае нумар 5 у гэтым спісе з'яўляецца тое, што мы хацелі б выбраць нумар у сярэдзіне. У сярэдзіне гэтага спісу, таму што ёсць 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 чысла, Мы б выбраць нумар альбо на 4-й пазіцыі або на 5-й пазіцыі, і мы называем гэта сярэдзіне нашага спісу. Вылучыце нумар у сярэдзіну. Тады, як сказаў Сэм, мы праверым, каб убачыць, калі гэта лік роўна на нумар, які мы хочам атрымаць або наш патрэбны нумар. Калі ён роўны, то мы знайшлі яго. Мы пераможам. Калі гэта не роўныя, то ёсць некалькі выпадкаў. Два выпадку альбо лік павінна быць больш, чым колькасць, мы глядзім на, ці гэта менш, чым. Калі яна больш, мы рухаемся направа. І калі ён менш, мы рухаемся налева. І тады мы паўтарыць увесь працэс зноўку альбо на правай палове або ў левай палове спісу. Першая праблема ў раздзел сёння ў тым, каб высветліць, як мы можам рэальна пачаць, каб выказаць гэта ў код C. У нас ёсць псевдокод тут. Тое, што мы пачнем рабіць гэта я буду цягнуць да зусім новую прастору, захаваць гэты перагляд, так што ў нас ёсць гэтыя нататкі на потым, мы выдалім ўсё гэта, а затым скапіруйце і ўстаўце з праблемай набору гэтую інфармацыю ў нашых прасторах, і, спадзяюся, гэта не парушае. Perfect. Калі вы, хлопцы, усё гэта зрабіць, скапіруйце і ўстаўце гэты код у новую прастору, ў пустую. Давайце паспрабуем Даніэль. Калі скампіляваць і запусціць гэтую праграму, яна працуе? Нумар >> Што ён кажа? Ён кажа, што кантроль дасягае канца непустое функцыі. Так, так што дазвольце мне паспрабаваць запусціць яго. Хіба вы, хлопцы, бачылі гэтага раней? Ці ведаеце вы, што гэта значыць? Добра, давайце прааналізуем гэта няшмат. Ён казаў на file.c на лініі 9, слупок 1 мы маем памылку, гэтак жа, як вы сказалі, і ён кажа, што ён, што вынікаюць з папярэджанні аб памылках і папярэджання вяртаецца тыпу. Падобна на тое, что-то адбываецца з вяртаннем тыпу, які мае сэнс. У нас ёсць непустое функцыя, якая азначае, што ў нас ёсць функцыя , Якая не вяртае пустэчу. Пустэчу функцыя з'яўляецца той, які выглядае наступным чынам: несапраўднымі Foo (), і гэта пустэча, таму што вяртаецца тып з'яўляецца несапраўдным, Гэта азначае, што калі ў нас нешта тут як вяртанне 1, мы атрымаем памылку кампіляцыі для гэтага. Тым не менш, у нас ёсць непустое функцыі. Нашы непустое функцыі ў гэтым выпадку наша функцыя пошуку таму што яна мае вяртаецца тыпу BOOL. Калі ён кажа, што кантроль дасягае канца непустое функцыі, гэта таму, што пошук не мае вяртаецца заяве. Гэта не вяртаецца нічога тыпу BOOL. Мы можам выправіць гэта, і што вы думаеце, хлопцы Пошук павінен вярнуць па змаўчанні? Якім павінна быць значэнне па змаўчанні вяртанне пошуку? Таму што гэта тое, што мы можам паставіць у канцы. Шарлота, ці ёсць у вас-? Праўда ці хлусня? >> Сапраўдным або ілжывым. Які? False. Я не ведаю. Хлусня? Давайце паспрабуем. Чаму б вам сказаць вяртанне ілжывым? Гэта выдатная інтуіцыя. [Charlotte] я не ведаю. Мы збіраемся вярнуцца ілжывым у гэтым выпадку, таму што гэта будзе нашым змаўчанні Калі па нейкіх прычынах гэты спіс пусты або іголкай што мы шукаем не існуе. Затым у самым канцы, калі мы не вернемся праўдзівай раней у гэтай функцыі, Мы заўсёды ведаем, што гэтая функцыя будзе сказаць Не, гэта не ў масіве. Гэта не ў стозе сена. Цяпер, калі мы скампіляваць і запусціць яго, дазвольце мне захаваць гэта такім чынам мы можам пацягніце яго ўверх. Цяпер, калі мы скампіляваць і запусціць нашу праграму, ён будуе. Мы атрымліваем наш маленькі радку. Калі б я стукнуў 4-ох-ох. Гэта не надрукаваць што-небудзь. Падобна на тое, што ўсё скончылася добра. Мы павінны запоўніць гэтую цалі Мы гаварылі пра алгарытм ў псевдокоде трохі назад. Давайце паглядзім, акрамя гэтага, і я буду цягнуць, што алгарытм таму зноў. Давайце ударыў гэтага хлопца. Няма. Там яна ёсць. Як мы гэта робім? Што б быць добрай стратэгіяй для крананні з гэтым кодам? Вы павінны абраць лік у сярэдзіне. Як мы выбіраем лік у сярэдзіне масіва? Любыя прапановы? [Студэнт] STRLEN падзяліць на 2. STRLEN падзяліць на 2. Гэта адзін вялікі. STRLEN работы з асаблiвымi відамі масіваў. Якія віды масіваў? Струнны масівы, масівы знакаў. Гэта што такое ж паняцце, што мы хочам ўжываць, але мы не можам выкарыстоўваць StrLen, таму што мы не маем масіў знакаў. У нас ёсць масіў цэлых лікаў. Але што StrLen атрымаць для нас? Вы ведаеце, што гэта становіцца для нас? [Студэнт] STRLEN прымушае нас даўжыні. Менавіта ён прымушае нас даўжыні. STRLEN атрымлівае даўжыню масіва для нас. Як мы можам атрымаць, што ў нашай праграме бінарнага пошуку? Як бы вы атрымаць даўжыню масіва? [Студэнт] STRLEN? Вы можаце атрымаць даўжыню правільна адфарматаваць масіў радкоў C з StrLen. Праблема, аднак, у тым, што мы не маем масіў радкоў. Калі мы паглядзім на гэты код, мы павінны гэта масіў цэлых лікаў. Як мы ведаем, як доўга гэта? [Студэнт] Ёсць эквівалентна адным для канчатковай кропкі, як Int L ці нешта? Аказваецца, там на самай справе няма, і гэта такім чынам, гэта адна з тых рэчаў, якія проста добра ведаць аб C, што няма ніякага спосабу, каб атрымаць даўжыню масіва калі ўсё, што я вам гэта масіў. Прычынай ён працуе са радкамі, прычына StrLen работ, таму што калі радок правільна адфарматаваць, ён будзе мець, што адмысловыя \ 0 знак у самым канцы. Вы таксама можаце ўявіць, калі ў вас няправільна адфарматаваных радкоў і няма \ 0 знак ёсць, то ўсё гэта не працуе. [Студэнт] Вы можаце дадаць \ 0? Мы маглі б у гэтым выпадку. Мы маглі б дадаць нейкую \ 0 ці нейкі азначае знак, а затым выкарыстоўваць яго. Але гэта не зусім будзе працаваць таму што \ 0 для знакавых тыпу, і тут у нас ёсць цэлыя. Іншая справа, калі б мы выкарыстоўвалі асаблівую каштоўнасць як -1, каб адзначыць канец масіва Затым мы ніколі не маглі б захоўваць -1 ў нашым цэлымі масівамі. Мы затрымаліся. Атрымліваецца, што адзіны спосаб атрымаць даўжыню масіва ў C з'яўляецца на самай справе памятаю калі вы ўсталюйце яго, а затым перадаваць яго з масівам так што кожны раз, калі ў мяне ёсць функцыя, якая будзе рабіць некаторую працу на масіў цэлых лікаў або паплаўкоў або падвойваецца ці што там у вас, Мне таксама трэба даць функцыяй даўжыні масіва, і гэта менавіта тое, што мы зрабілі тут, у функцыі пошуку. Калі вы паглядзіце, што мы зрабілі, калі мы пераходзім у нашым масіве тут, Мы таксама праходзяць у даўжыню, памер. Проста так атрымалася, што мы назвалі гэтую зменную тут, гэты параметр або аргумент. Гэта называецца аргументам функцыі спісу або спісу параметраў, і яны таксама называюцца аргументамі або параметрамі. Людзі выкарыстоўваюць розныя тэрміны ў розны час. Я часам памяняць іх на сабе. Проста так здарылася, што гэтая пераменная тут называюць аналагічна да гэтага # вызначыць тут. Але яны не тое ж самае. Капіталізацыя мае значэнне. Калі вы паглядзіце на тое, што тут адбываецца, мы заяўляем, нашы Int масіва, які мы назвалі лічбы. Мы далі гэта наш памер, які адпавядае нашаму # вызначыць наверсе. Гэта будзе 8. А потым, калі мы потым называем нашу функцыю пошуку унізе, мы пераходзім у лік мы хочам знайсці, які мы запыце атрымалі ад карыстальніка. Мы праходзім ў масіве, гэта лікі, і тады мы таксама павінны прайсці ў памер масіва, і тое значэнне памеры 8 атрымлівае захоўваецца або перадаецца ў гэты лік зменнай памеру. У нас ёсць памер масіва. Цяпер, калі мы вернемся да таго, пра які мы казалі раней, Я думаю, Missy выхоўваецца такой ступені, што тое, што мы павінны зрабіць, гэта атрымаць даўжыню масіва і падзеліце яго на 2, і што дасць нам кропку. Давайце паглядзім. Ці магу я каго-небудзь напісаць гэты дакумент і захаваць яго ў сваім прасторы? Як наконт Лэйлы? Ці магу я вам пішу гэта ў? Напісаць першы радок, дзе вы бераце даўжыню масіва і атрымаць сярэдзіна і захоўваць яго ў новую зменную. Я дам вам пару секунд. Ці гатовыя вы? [Студэнт неразборліва] Вядома, я мог вам разлічыць сярэднюю кропку ў стозе сена масіва ўнутры функцыі пошуку выкарыстаннем даўжыні стозе сена масіў, які з'яўляецца памер зменнай? Нічога хітрага. [Лейла] Гэтак жа памеру / 2 і проста- І захаваць яго, і націсніце на кнопку Save тут на вяршыні, і мы пацягніце яго ўверх. Perfect. Там мы ідзем. Awesome. Як, ці будзе гэта скампіляваць? [Лейла] Не, яна павінна быць вышэй. [Nate] Так, так што ж нам трэба зрабіць? [Лейла] Як Int сярэдзіне ці чамусьці. Awesome. Так, давайце зробім гэта, унутр сярэдзіну = памер. Ці будзе гэта скампіляваць? Давайце выдаліць гэты каментар і атрымаць яго ў бок. Тое, што не будзе збіраць з гэтай нагоды? Мы нічога не робім з цэлым, таму нам трэба раздрукаваць яго ці нешта накшталт гэтага. Так, менавіта так. Мы атрымаем нявыкарыстаных зменных. Што яшчэ не будзе працаваць з гэтай нагоды? Я думаю, што вы сказалі нешта, Сэм. Кропка з коскі. Так, я прапускаю гэтыя кропкі з коскі. Гэта будзе пастаянная рэч на працягу ўсяго тэрміну. Апошняе, што я буду рабіць, я пакладу некаторыя прабелы па абодва бакі гэтага аператара тут, так як гэта звычайна як мы гэта робім ў адпаведнасці з нашым стылем кіраўніцтва. У нас ёсць сярэдзіна нашага масіва. Цяпер, калі мы памятаем, вернемся да нашага алгарытму, што быў другі крок, які мы павінны былі зрабіць, калі ў нас сярэдзіна? [Студэнт] Калі гэта больш [неразборліва]. Так, так што мы павінны рабіць нейкія параўнанні, і што мы тут параўнанне? Вы сказалі, што калі яна больш. Што ў гэтай прапанове гаворка? Лік, якое з'яўляецца, калі гэта больш, чым сярэдзіна, а затым падняцца на масіў? Менавіта, таму колькасць, якое з'яўляецца, калі мы- Іголкі, так што мы ў параўнанні з іголкай, і што мы параўнанні з іголкі? Паколькі іголка з'яўляецца тое, што мы шукаем. Мы параўноўваючы яго, каб дабрацца да цэнтра. Але гэта мае сэнс, каб праверыць, калі сярэдзіна іголкі =? Ці мае гэта сэнс? Хто-небудзь не згодны? Давайце паспрабуем, калі (сярэдзіна іголкі ==). [Студэнт] Printf ці вы яго знайшлі. [Nate] Е ("Мы выявілі, што \ п"); У адваротным выпадку, я збіраюся пачаць рабіць нешта іншае тут. Я збіраюся пачаць збіраць у фігурныя дужкі, калі заявы ўвесь час проста таму, што калі мы дадамо больш матэрыялу, то мы не атрымліваем кампілятараў. Так, Сэм. У вас ёсць кропка. Праблема ў тым, што сярэдзіна ўяўляе сабой пазіцыі ў масіве, але вы можаце атрымаць яго для прадстаўлення значэння ў гэтай пазіцыі масіва. Гэта вялікая кропка. А ўсё чулі, што сказаў Сэм? Ён сказаў, што сярэдзіна як ўяўляе сабой толькі пазіцыі ў масіве, але гэта не фактычны элемент у масіве. Калі вы думаеце пра код, як напісана прама зараз, калі мы паглядзім на гэты масіў сюды, якое мае 8 элементаў у ім, , Што з'яўляецца значэннем сярэдзіны збіраецца быць у гэтай функцыі? [Студэнт] 4. [Nate] 4. Калі мы паглядзім на лік 4 - і мы можам толькі запусціць гэты код і пакласці трохі сумнае твар тут таму што мы не знайшлі яго, калі мы запусцім гэты код як гэта прама цяпер, загрузіўшы яго, будаўнічыя, дазвольце мне пракруціць ўніз, і калі мы паглядзім на лік 4, Мы знайшлі яго, але мы не атрымаць гэтую Printf так. Адной з прычын з'яўляецца тое, што мы не вярнуліся праўда, але мы сапраўды знайсці нумар 4? І Сэм кажа, няма. Што ж мы бачым? Мы сапраўды знайшлі сярэдзіну, якая, калі мы паглядзім на масіве сюды, гэта будзе элемент з індэксам 4, што мы глядзім на, , Што на 23. Як мы на самай справе атрымліваем, што элемент у сярэдзіне і не толькі сярэдзіна сябе? [Студэнт] Мы хацелі б увесці знак ці нешта? Што б гэта зрабіць, проста з цікаўнасці? Вы можаце спыніцца трохі падрабязней? Вы павінны пераўтварыць пазіцыю ў нумар, так што вы павінны зрабіць некаторыя сувязі, я думаю, што гэта знак, але яно не можа быць. Так, гэта добры момант. Мы робім шмат такога пераўтварэння пазіцыі ў сімвалы, гэтыя знакі, У першых двух набораў праблемы. Аказваецца, што тут, гэта амаль падобна на доступ да га знака ў радку, калі гэта мае сэнс. Тут мы хочам атрымаць доступ да сярэдзіны элемента. Як мы гэта робім? Кевін, у вас ёсць якія-небудзь прапановы, як мы маглі б гэта зрабіць? Вы можаце зрабіць стог сена, адкрытая дужкі, сярэднія, зачыненыя кранштэйн. Ці можаце вы напісаць, што для нас? Захавайце яго сюды, і мы будзем цягнуць, што ўверх. Мы глядзім на гэты радок 9, і мы, разумеючы, што мы не хочам, каб параўнаць іголку ў сярэдзіне, але замест гэтага, мы хочам параўнаць іголкі на элемент у пазіцыі сярэдзіны у нашым стозе сена масіва. Cool. Там мы ідзем. Так, гэта выглядае даволі добра, калі (іголка == стозе сена [сярэдзіна]). Мы знайшлі яго. Цяпер, калі мы запусцім код-Мы рэзервовую копію трохі- ён збірае, яна працуе, і зараз, калі мы паглядзім на 4, мы не знайшлі, таму што зараз мы на самай справе атрымаць лік 23. Мы атрымліваем значэнне 23, і гэта тое, што мы ў параўнанні з нашымі іголкі. Але гэта добра. Гэта крок у правільным кірунку. Менавіта гэта мы і спрабуем зрабіць. Мы не спрабуем параўноўваць іголку супраць пазіцыі ў масіве а супраць фактычнага элементаў у масіве. Калі мы азірнемся назад, цяпер зноў на наступным кроку ў нашым алгарытме, які наступны крок? Лейла ўжо згадвалі гэта сцісла. [Студэнт] Калі ласка, праверце, калі яно больш ці менш, а затым вырашыць, у які бок рухацца. [Nate] Так, так, як бы нам гэта зрабіць? Ці можаце вы паставіць у некаторых-я захаваць гэты перагляд, а затым, калі вы пакладзеце ў некалькі радкоў, якія будуць гэта рабіць. Так, Шарлота. >> У мяне ёсць пытанне. Хіба не павінна быць сярэдзіна - 1, таму што перш за ўсё гэта 0 праіндэксаваныя, таму, калі мы ставім 4, што на самой справе не характар, што мы шукаем? Ды і іншых праблем з гэтым уяўляе- гэта вялікі ўлоў, таму што тое, што будзе ў канчатковым выніку адбываецца магчыма калі мы будзем рухацца і мы ніколі не адрэгуляваць першапачаткова? Я думаю, што мы маглі б у канчатковым выніку робяць спрабуе атрымаць доступ да Элемент на 8-й пазіцыі масіва, якія ў дадзеным выпадку не існуе. Мы хочам зрабіць нейкі ўлік той факт, што ў нас ёсць нуль індэксацыі. [Charlotte] Выбачайце, я меў на ўвазе сярэдзіна - 1 у квадратных дужках. Мы можам зрабіць гэта. Мы вернемся да гэтага пытання крыху пазней. Як толькі мы пачынаем, каб дабрацца да фактычнага цыклу, вось тады мы сапраўды бачым гэта уступае ў гульню. У цяперашні час, мы можам гэта зрабіць, але вы маеце рацыю. Гэта нуля індэксацыя будзе мець эфект, які мы павінны ўлічваць. Давайце паглядзім. Як больш, і менш чым? [Студэнт] я атрымліваю, як зрабіць больш, і менш, чым частку. Я проста не быў упэўнены, што друкаваць, калі вы выявіце, што гэта менш, чым стозе сена сярэдзіне ці больш. Тут я магу выратаваць тое, што дыскі- [Nate] Так, калі вы захаваеце тое, што ў вас ёсць, і мы будзем пацягніце яго ўверх. Там мы ідзем. [Студэнт] І я стаўлю пытальнік, што я не ведаў. [Nate] Гэта выглядае выдатна. Тут у нас ёсць знакі пытання, таму што мы яшчэ не ведаем, тое, што мы збіраемся зрабіць яшчэ дастаткова. Што мы хочам зрабіць-ой, у нас ёсць некаторыя дужкі ўсе фанкі на нас. Мы выправім гэтыя дужкі. Там мы ідзем. І тое, што мы хочам зрабіць, па нашым алгарытму, калі мы не знойдзем іголку? Скажам, у выпадку, калі іголка менш, чым тое, што мы глядзім. Кевін. Толькі паглядзіце на левую палову. Права, такім чынам, мы паставім каментар тут, які кажа «паглядзіце на левую палову". І калі іголка больш стог сена ў сярэдзіне, што мы хочам зрабіць? [Студэнт] Тады вы паглядзіце на правую палову. Паглядзіце на правую палову ", паглядзіце на правую палову". Не так ужо і дрэнна. Такім чынам, на дадзены момант, усё выглядае даволі добра. Праблема з кодам, як напісана гэта што? [Студэнт] У вас няма канчатковых кропак для паловы. Так, у нас няма канчатковых кропак для паловы. Мы толькі збіраемся прайсці праз гэта адзін раз. Мы толькі збіраемся глядзець адзін на сярэдзіну. Любы элемент ёсць, або яе няма. Для таго каб завяршыць гэта, мы павінны будзем зрабіць нейкі паўтарэння. Нам трэба паўтараць да таго часу, пакуль мы бачым, што альбо элемент знаходзіцца там, таму што мы звузілі і, нарэшце, знайшоў яго, або яго там няма, таму што мы глядзелі праз усе рэчы, ў адпаведных палавінах масіва і выявіў, што няма нічога там. Кожны раз, калі мы атрымалі гэта паўтор адбываецца, што мы будзем выкарыстоўваць? [Студэнт] цыкл. Нейкая цыклу. Так. [Студэнт] Ці можам мы рабіць-пакуль пятля і ён гэта зрабіць і то пры іголка не роўна-я не ўпэўнены, дзе я збіраюся з гэтым. Але накшталт як гэта зрабіць, пакуль яна не роўная значэнню, карыстацкі ўвод. Так, так што давайце паглядзім, як гэта магло б напісаць сам? Вы сказалі, што давайце выкарыстоўваць DO-цыклу. Дзе зрабіць старт? [Студэнт] Адразу пасля памеру / 2. [Nate] Добра, і што ж мы будзем рабіць? Мы запоўніць пазней. Што мы будзем рабіць? [Студэнт] Не мы хочам зрабіць усё тое, што мы маем у выпадку частка? [Nate] Ці падабаецца ўсе гэтыя рэчы, выдатна. Капіраванне і ўстаўка. О, Божа. Давайце паглядзім, калі гэта працуе, калі мы можам ўкладкі над гэтым. Прыгожая. Добра, і мы захоўваем гэта так, вы, хлопцы, ёсць. Усё ў парадку, і мы збіраемся рабіць гэта ў той час, тое, што было пры ўмове, што вы былі пасля? [Студэнт] У той час як іголка не роўныя, так як клічнік. Але я не ўпэўнены дакладна, што гэта такое яшчэ. [Nate] Так, гэта адзін са спосабаў зрабіць гэта. Сэм, у вас ёсць каментарыі? [Сэм] я ўспомніў, калі я глядзеў на відэа, Я ўзяў скрыншот аднаго з падобных, калі мы рабілі псевдокод для яго, была некаторая сувязь паміж макс і мін. Я думаю, што гэта было нешта накшталт, калі Макс ўсё менш мін. Ёсць. [Сэм] Альбо як калі б Макс не менш, чым мін ці нешта накшталт гэтага, таму што гэта будзе азначаць, што вы шукалі ўсё. Так, так што ж гэта гучыць як максімальны і мінімальны мелі на ўвазе? [Сэм] Значэнні, якія, цэлыя лікі, якія збіраюцца змяніць адносна таго, дзе мы ставім кропку. Менавіта так. [Сэм] У гэты момант ён збіраецца [неразборліва] вылічыць макс і мін. Сярэдзіна гэта максімальны і мінімальны ідэя. Ці мае гэта сэнс для людзей? Калі б мы былі, каб пачаць глядзець на тое, як мы збіраемся гэта зрабіць ітэрацыю, Вы маеце рацыю, што мы хочам выкарыстоўваць нейкія рабіць, у той час як пятля. Але я думаю, калі мы ўспомнім, што адбываецца на месцы гэтага масіва і тое, што адбываецца на самай справе, я збіраюся пісаць тут- на самай першай ітэрацыі бінарны пошук, маем- Я збіраюся выкарыстоўваць б і е для абазначэння пачатку. А потым у канцы нашага масіва. Мы ведаем, што пачатак на 4 прама тут, і мы ведаем, што канец на 108. Скажам, мы шукаем лік 15. Першы раз, калі мы робім гэта, як мы бачылі раней, сярэдзіна альбо будзе 16 ці 23 у залежнасці ад таго, як мы вылічым рэчы. З раўнамернага дзялення ў сярэдзіне дасць нам гэта прастора паміж 16 і 23, мы не можам падзяліць яго пароўну або падзяліць яго і атрымаць на сапраўдную сярэдзіну. Мы будзем глядзець на 16. Мы разумеем, "Гэй, 16> 15, якія мы шукаем". Каб затым паглядзіце на левую палову масіва тое, што мы ў канчатковым выніку робіць, адкідаючы гэта ўся верхняя частка і кажа: "Добра, цяпер наша канчатковая кропка будзе тут". Наступная ітэрацыя нашага цыклу, мы цяпер, гледзячы на ​​гэты масіў, эфектыўна адкінуўшы гэтую частку, таму што цяпер калі мы бярэм сярэдзіну, каб быць розніца паміж пачаткам і канцом, мы знаходзім нашу сярэдзіну, каб быць 8, якія мы можам праверыць 8 каб убачыць, дзе ён знаходзіцца ў залежнасці ад колькасці мы шукаем, 15, знаходзім, што 15 больш, такім чынам, мы павінны рухацца да правай частцы спісу, якіх мы ведаем, таму што мы людзі, і мы можам убачыць яго. Мы ведаем, што правая частка збіраецца быць там, дзе мы яго знаходзім, але кампутар не ведае, што, такім чынам, што мы будзем рабіць гэта мы будзем на самай справе было гэта пайсці, і цяпер у пачатку і ў канцы знаходзяцца на тым жа месцы, так што сярэдзіна становіцца адзіным нумарам у спісе ў той момант, , Што на 15, і мы знайшлі яго. Ці значыць гэта, праліць святло на якім усё гэта максімальны і мінімальны пазначэнне ідзе, адсочванне канчатковых кропак масіва для таго, каб высветліць, як звузіць рэчы ўніз? Што б адбылося, калі б гэта было не роўная 15 цяпер? Што рабіць, калі мы шукалі 15 і, замест гэтага, гэта лік было таксама 16? Мы б сказалі: "О, гэта больш. Мы хочам вярнуцца да левых ". І мы б рухаць нашу электронную направа, у гэты момант у нас ёсць канчатковая кропка, якая была б супярэчлівымі. Ён не змог бы знайсці больш элементаў таму што цяпер у нас ёсць канчатковая кропка і наша пачатковая кропка, Макс нашых і нашых мін, зараз пераварочваецца. Мы пошуку па ўсім масіве. Мы не можам нічога знайсці. Гэта кропка, у якой мы хацелі б сказаць: "Добра, мы збіраемся, каб спыніць гэты алгарытм. Мы нічога не знайшлі. Мы ведаем, што гэта не тут ". Як гэта адбываецца? [Студэнт] Як менавіта кампутар пераключэння канца? Як у канцы канчатковым выніку перад пачаткам? У рэшце рэшт перад пачаткам у сувязі з матэматыкай, што мы збіраемся рабіць кожны раз, калі мы робім гэта. Тое, як мы памяняцца, калі вы паглядзіце на самы першы раз мы гэта робім своп дзе ў нас пачатак у 4 і ў канцы на ўсім шляху ўніз на 108 і нашы сярэдзіна, скажам, у 16 ​​- Я збіраюся скінуць гэта назад у 15-калі мы шукаем 15, Мы ведалі, што тое, што мы зрабілі, калі мы праверылі 16 і ўбачыў, што гэта было больш, і хацеў адкінуць усю правую частку спісу, Мы ўбачылі, што тое, што мы хацелі зрабіць, гэта перайсці гэтую электронную прама тут. Па сутнасці, электронны былі перамешчаныя ў адзін да сярэдзіны. Аналагічным чынам, калі мы зрабілі гэта ітэрацыі алгарытму і сярэдзіна была на 8, мы выявілі, што 8 <15, таму мы хацелі, каб перамясціць б наступны за сярэдзіну. Зараз, у пачатку і ў канцы абодва разам у гэтым 15. Калі б мы адбываліся шукаць нейкія іншыя каштоўнасці, а не 15, або, калі гэта 15 замест гэтага было 16, мы б выявілі, што электронная мы хочам, каб перамясціць адзін да сярэдзіны. Цяпер у электроннай бы там перавярнуўся менш, чым б. Давайце разгледзім, як мы на самай справе ў канчатковым выніку гэты алгарытм кадавання. Мы ведаем, што мы хочам, каб гэтая сярэдзіна разлік. Мы таксама ведаем, што мы хочам, каб адсочваць пачатак і канец масіва нашы бягучага масіва, каб мы маглі зразумець, дзе гэтая левай палове спісу, а дзе правая палова спісу. Мы робім гэта альбо пачатак і канец, ці мы можам называць іх мінімальны і максімальны. Я буду выкарыстоўваць пачынаюцца і заканчваюцца на гэты раз. Калі мы пачынаем, калі мы азірнемся на нашым прыкладзе тут, нашы пачатку быў усталяваны ў самым пачатку масіва, як натуральны. Што індэкса гэта было? Якой павінна быць наша пачаць? Данііл. [Данііл] Haystack [0]. [Nate] Так, каб мы маглі ўсталяваць яго роўным стозе сена [0]. Праблема, аднак, у тым, што гэта дае нам не пазіцыя першага элемента. Гэта дае нам індэкс першага элемента або фактычнае значэнне ў гэтай першай пазіцыі. [Студэнт], які будзе канвертаваць ў 0,20? [Nate] Што гэта будзе зрабіць, гэта, ну, ён не будзе рабіць любыя пераўтварэнні. Што ён будзе рабіць гэта ён будзе захоўваць 4 у пачаць, і тады гэта будзе цяжка зрабіць параўнання з пачатку таму што Бегін будзе праводзіць значэнне 4, , Які з'яўляецца пачаткам нашага масіва, але мы хочам, каб адсочваць індэксы ў масіве у адрозненне ад значэнняў. Мы на самай справе выкарыстаць 0, як гэты. На канец масіва Шарлота прынесла гэта крыху раней. Гэта тое, дзе мы будзем браць пад увагу нуля індэксацыі. Шарлота, што да канца масіва? Што такое індэкс канца? [Charlotte] Памер - 1. Так, і памер якой мы павінны выкарыстоўваць? Ці павінны мы выкарыстоўваць памеры капіталу або маленькая памер? Капітал памерам. У гэтым выпадку мы маглі б выкарыстоўваць памеры капіталу. Калі мы хочам гэтую функцыю, каб быць партатыўнымі і выкарыстоўваць гэтую функцыю ў іншых праграмах, мы сапраўды можам выкарыстоўваць малыя памеру. Гэта таксама добра. Але Шарлота зусім правільна, што мы хочам мець памер - 1. На дадзены момант- [Студэнт] Як атрымалася, што вы можаце выкарыстоўваць загалоўныя памер? Як атрымліваецца, што мы маглі б выкарыстоўваць загалоўныя памер? Аказваецца, што гэтыя # вызначае, сапраўды, пад капотам, тэкст, як знайсці і замяніць, калі гэта мае сэнс. Пры кампіляцыі кода этапе папярэдняй апрацоўкі складальніка праходзіць праз файл, і ён шукае ўсюды, што вы напісалі памеры капіталу, і ён замяняе, што тэкст літаральна з 8, як і што. У гэтым сэнсе, гэта вельмі адрозніваецца ад зменнай. Гэта не зойме ніякага месца ў памяці. Гэта просты трук замена тэксту. У гэтым выпадку, мы збіраемся выкарыстоўваць памер. Адсюль мы хочам зрабіць свайго роду паўтор, і мы на правільным шляху з нашым DO-цыклу. Мы хочам зрабіць нешта, пакуль ўмова не выканана больш, і, як мы бачылі раней, мы ўбачылі, што гэта ўмова сапраўды, што мы не хочам канца быць менш, чым пачынацца. Гэта наша прыпынак стане. Калі гэта адбудзецца, мы хочам, каб спыніцца і абвясьціць, як: "Гэй, мы не знайшлі нічога". Каб выказаць гэта, мы хочам выкарыстоўваць нейкі цыкл. У гэтым выпадку, было б зрабі той час як цыкл, цыкл, у той час як цыкл? У нас ёсць зрабі той час як цыкл тут. Вы, хлопцы, як гэты падыход? Як вы думаеце, мы павінны паспрабаваць іншы падыход? Кевін, якія думкі? Мы маглі б нейкі час цыклу, таму што мы ведаем, максімальная будзе больш, чым мін у пачатку любым выпадку. Так, так што няма ініцыялізацыі, што павінна адбыцца. Тыя, зрабі той час як завесы выдатна, калі ў вас ёсць што-то для ініцыялізацыі да гэтага тэставання, а тут Мы ведаем, што мы не збіраемся трымаць паўторнай ініцыялізацыі як пачынаць і сканчаць кожны раунд цыклу. Мы ведаем, што мы хочам ініцыялізаваць іх, а затым праверыць наш стан. У гэтым выпадку, я на самой справе пайсці з простай цыкл час. Аказваецца, што рабіць, у той час як завесы выкарыстоўваюцца даволі рэдка. Шмат месца нават не вучаць рабіць падчас цыклаў. Яны добрыя для апрацоўкі карыстацкага ўводу, такім чынам, мы бачылі, многія з іх да гэтага часу. Але нармальна і пакуль завесы значна больш агульнага. Аказваецца, што гэта ўмова, як напісана Не будзе сапраўды нам вельмі добра, і чаму гэта? Мне вельмі шкада, я не ведаю вашага імя. Я Джэры. >> Прабачце? Гэта Б-О-Р-У-I. Ну, добра. Я не бачу цябе ў маім спісе. Ах, гэта таму, што-о-о, гэта мае сэнс. У вас ёсць уяўленне аб тым, чаму гэта пакуль пятля не можа працаваць, як задумана, як напісана з умовай? [Jerry] Вы маеце на ўвазе, як вы хочаце, каб усе рэчы пасля таго, як у-? Так, так вось адзін. Мы маглі б пакласці ўсе гэтыя рэчы ў той час як цыкл, што з'яўляецца абсалютна дакладна. Іншая справа, што гэта крыху больш праблематычна, аднак, з'яўляецца тое, што гэта ўмова не працуе. [Студэнт] Вам трэба перавярнуць яго. Права, такім чынам, гэта ўмова ніколі не будзе сапраўдным першапачаткова, як мы гаварылі пра гэта. Мы хочам зрабіць нешта да канца <пачацца, але мы хочам зрабіць нешта ў той час як пачаць ≤ канца. Там у звароце, што логікі няма. Я вінаваты рабіць тых памылак, ўвесь час. [Студэнт] Чаму гэта павінны быць менш або роўныя? Таму што вы памятаеце выпадак, калі мы дабраліся да дзе быў толькі адзін элемент, і мы былі ўнізе, і мы шукалі як раз у 15 ў нашым масіве? І наша пачатак і канец наш быў таго ж элемента. Мы хочам, каб пераканацца, што мы працуем у гэтым выпадку. Калі б мы зрабілі прамую менш, Мы б толькі быць у стане атрымаць да 2-элемент масіва. Як толькі мы дабраліся да апошняга элемента, што, калі б гэта было наша элемент, мы ніколі не знайсці яго. Цяпер вось, мы можам зрабіць гэтак жа, як вы казалі. Мы можам пачаць plopping рэчы прама ў сярэдзіну нашага цыклу. Мы можам пляснуць ў нашай сярэдзіне. Мы можам узяць усё гэта, калі заявы, выцягнуць іх з гэтага зрабі той час як цыкл, пляснуць іх, ачысціць рэчы трохі, і я буду ісці наперад і захаваць гэты перагляд. І ў гэты момант, мы атрымліваем даволі блізка. Сэм. Я думаю, вы таксама павінны мець Int сярэдзіну = памер - 1/2. Зразумеў, памер - 1/2. Ці ёсць што-небудзь яшчэ нам трэба змяніць у гэтай лініі? Гэта быў добры ўлоў. Што ж памеру рабіць? Няўжо мы пастаянна змяняецца памер? Для таго, каб трымаць лінію, як гэта, мы павінны змяніць памер. Мы павінны змяніць памер кожны раз, калі мы ідзем вакол цыклу. Але памятайце, калі мы ішлі праз наш прыклад толькі трохі вышэй, і ў нас быў пачатак на 4 і ў канцы ўсе шляхі на 108? Як мы вылічым сярэднюю кропку? Калі б мы, выкарыстоўваючы памер? Ці мы выкарыстоўвалі пачынаюцца і заканчваюцца, а? Гэта розніца паміж канцом і пачаткам. Вось менавіта, і як менавіта я павінен напісаць, што Шарлота? Проста канец - пачатак. Вам не трэба будзе рабіць - 1 таму што - 1 была ўключана ў рэшце рэшт, і пачынаюцца ўжо. [Nate] Выдатна, вы маеце рацыю. Мы не павінны рабіць - 1, таму што гэта - 1 былі ўключаныя і склала пры ініцыялізацыі ў канцы зменнай. Ці ёсць што-небудзь яшчэ мне трэба зрабіць, сінтаксічна, каб гэтая лінія мае сэнсу? [Студэнт] Plus пачаць. >> Plus пачаць? [Студэнт] у канцы. Таму што ён разлічваецца толькі на палову даўжыні. Вам трэба дадаць пачацца. [Nate] Што б гэта вылічыць для нас? Калі мы думаем пра канец на гэтай самай першай ітэрацыі, Канец будзе ў пазіцыі індэкса 7. Пачатак знаходзіцца ў становішчы 0. Памятаеце, што мы шукаем альбо становішча 3 або пазіцыі 4. Калі мы паглядзім на гэтую матэматыку, проста каб зрабіць яго крыху больш адчувальным, паставіць некаторыя нумары тут, у нас ёсць 7, 0, так 7 - 0, а затым / 2 складае 3 у цэлалікавых дзяленне, то ёсць. Тады нам трэба, каб затым дадаць туды наш пачаць? Мы не ў гэтым выпадку. На самай першай ітэрацыі, то гэта будзе выдатна, таму што Бегін 0. Але, як мы прагрэс, мы робім сапраўды ўсё, проста трэба канец - пачаць / 2. Там яшчэ адна хітрасць, і гэта менавіта адна з прыярытэт. [Студэнт] Ці трэба нам дужкі? [Nate] Сапраўды, і гэта таму, што калі мы не будзем ставіць гэтыя дужкі, Затым гэтая радок будзе інтэрпрэтавацца, а як (канец) - (пачатак / 2), які мы дакладна не хочам. Сачыце за тым, правілы прыярытэту. [Студэнт] Чаму яна не скончыцца + пачаць? Чаму яна не скончыцца + пачаць? [Студэнт] Чаму гэта не так? Чаму б гэта было +? Я думаю, што вы маеце рацыю. [Студэнт] Таму што гэта сярэдняя? [Nate] End + пачаць, вы маеце рацыю. Нічога сабе, я цалкам goofed. Вы маеце рацыю. Калі б мы рабілі мінус, мы хацелі б дадаць пачынаць маштаб У гэтым выпадку, вы вельмі правільна, што мы хочам узяць сярэдняе з двух, таму мы хочам, каб дадаць іх, у адрозненне ад адняць іх. [Студэнт] Ён таксама будзе працаваць, калі вы зрабілі канца - пачынаць / 2 + пачацца. Ён бы, калі б мы, я так лічу. Напрыклад, калі мы глядзім на пачатку, і мы перамясцілі яго сюды да 15. Цяпер пачынаецца ў пазіцыі 2. Апошняя знаходзіцца ў становішчы 7. Калі адняць іх, мы атрымаем 5. Падзяліце гэта на 2, атрымліваем 2. І тады мы дадаем 2 назад, і што атрымлівае нас на 4-й пазіцыі, які знаходзіцца прама тут, якое з'яўляецца сярэдзінай. [Студэнт] Ці трэба нам, каб клапаціцца аб абкручванні? У якім сэнсе мы павінны клапаціцца аб абкручванні? Калі сума або розніца паміж у залежнасці ад таго, як мы робім гэта не цотная колькасць. Затым кампутар заблытаецца ці, калі гэта 2,5; Вы рухацца налева або направа, каб вызначыць, што з'яўляецца сярэдзіна? Ёсць. Аказваецца, што з цэлалікавых дзяленне, Мы ніколі не атрымаем гэтыя лікі з якая плавае кропкай. Мы ніколі не атрымаем дзесятковы. Гэта цалкам адкідаюцца. Калі ў вас ёсць кампутар падзяліць 2 Int зменныя, і адна 7, а іншы 2, Вы не будзеце атрымліваць 3.5 у якасці выніку. Ён будзе атрымліваць 3. Астатнія будуць адкінутыя, так што гэта эфектыўна акруглення Не круглая, а хутчэй за падлозе, калі вы, хлопцы, знаёмыя з гэтым у матэматыцы, дзе вы цалкам адмовіцца ад дзесятковай, і так вы, па сутнасці абрыву ўніз да бліжэйшага Усяго пазіцый, да бліжэйшага цэлага ліку. [Студэнт] Але тады гэта праблематычна, таму што калі ў вас ёсць масіў з 7 элементаў Затым, што аўтаматычна робіць 3. элемент з сярэдзіны, а не 4-й. Што нам рабіць з гэтым? Гэта праблематычна, таму што калі б мы мелі масіў 7, было б выбраць 3-й, а не 4-й. Ці маглі б вы растлумачыць трохі больш? [Студэнт] Таму што, калі ў вас ёсць 7 элементаў, то 4-й элемент будзе сярэдзіна, дакладна? Памятаеце, Ваша меркаванне аб тым нуля індэксуецца, хоць. [Студэнт] Так, так і ў становішчы 3. Гэта будзе сярэдзіна. Так. Ну, добра. Я разумею, што вы маеце на ўвазе. Гэта крыху дзіўна, так як мы прывыкаем да гэтага само паняцце пазбавіцца ад знакаў пасля коскі. Гэта вялікая кропка. Давайце скончым гэта. Мы разлічана наша сярэдзіна. Мы тэставання, каб убачыць, калі нашы іголкі роўная сярэдняй кошту. Мы друкуем, што мы яго знайшлі, але на самой справе, тое, што мы хочам зрабіць у гэтай сітуацыі? Мы выявілі, таму мы хочам, каб выклікае ведаем, што мы яго знайшлі. У нас ёсць функцыя, якая гэта лагічны тыпізаваных функцыі. Тое, як мы сігналізаваць пра гэта выклікае нашы функцыі, якія мы гатовыя пайсці гэта мы кажам: "Гэй, гэта праўда". Як бы мы гэта зробім, Кевін? Вы ківаючы галавой. >> [Кевін] Дадаць вяртання праўда. [Nate] Сапраўды, вярнуць праўдзівы. Цяпер, калі гэта не роўныя, як бы мы паглядзім на левую палову? Любыя ідэі? Стэла, якія ідэі? Вам неабходна ўсталяваць новую пазіцыю канца. Так. Такім чынам, мы павінны зрабіць становішча сярэдзіна - канец. Вялікі. Нам неабходна стварыць новыя пазіцыі на канец глядзець на левую палову. Гэта было тое, што мы гаварылі раней, дзе Я працягваю вяртацца да гэтага прыкладу. Я пачынаюцца тут, а то ў мяне ў канцы ўсе шляхі сюды. Зноў жа, калі мы глядзім на 15, і наша сярэдзіна знаходзіцца на 16, і мы разумеем, "Oops, 16 больш. Мы хочам, каб перайсці да левай палове ". Мы б затым перамесціце канец 15, і мы робім, што, узяўшы ў бок ад сярэдняй пункту і ўстаноўка, што нашы новыя канца. Сапраўды гэтак жа, калі мы хочам, каб глядзець на правую палову, як бы мы гэта робім? У Вас ёсць ідэя? [Студэнт] Вы толькі што ўсталявалі пачынаюць мидпойнте + 1. [Nate] Вялікі. І зараз у выпадку, калі мы не знойдзем нічога, нічога, што атрымаць паклапаціліся для нас? Даніэль, не атрымаеце, што паклапаціліся пра нас? [Данііл] Няма [Nate] Калі мы зробім гэта праз увесь масіў, і мы нічога не знойдзем, дзе б, што будуць клапаціцца, ці мы павінны клапаціцца аб ім? [Данііл] у той час як стан. [Nate] Так, у той час як стан, дакладна. Яна будзе клапаціцца аб якія праходзяць праз увесь масіў, калі мы нічога не знойдзем. Гэта ў той час як цыкл завершыцца. Мы ніколі не сутыкаліся з гэтым умовай, і мы можам вярнуцца ілжывым. Мы таксама можам пакінуць гэта, калі тут, як гэта таму што, калі гэта, калі сцвярджэнне дакладна, і наша функцыя будзе вяртаць, і такім чынам мы істотна адмены гэтай функцыі ў гэтай кропцы Калі мы вернемся праўда. Але што адбываецца з гэтай структурай тут? Ці будзе гэта працаваць зусім, або ёсць лагічны загана там? Існуе некаторы лагічны загана ў наяўнасці, з тым, як ён настроены. Што можа быць? [Студэнт] Навошта вам патрэбен - і + 1с? Гэта адрознівае наш масіў, каб быць наша новая левая палова і правая палова. [Студэнт] Але чаму ты не мог зрабіць гэта без - 1 і + 1с? [Nate] Мы маглі б ўсталяваць яго роўным сярэдзіна? Што можа быць праблематычным з гэтай нагоды? [Студэнт] Я думаю, гэта неэфектыўна, паколькі вы правяраеце значэнне, якія ўжо правераны. [Nate] Сапраўды, так што Сэм цалкам правы. Калі вы ўсталюеце канца і пачаць роўна сярэдзіна замест - 1, + 1 задуменна, у нейкі момант у будучыні мы скончым праверку сярэдзіну зноў. [Студэнт] Я пачаў PSET, а затым у мяне было нешта накшталт гэтага дзе я забыўся + 1, і яно засела ў бясконцым цыкле. Правільна, таму што ў нейкі момант вы ніколі не збіраюся пачынаць і сканчаць на самай справе перасякаюцца. Cool. Там яшчэ адзін лагічны загана, і што, што гэта абавязкова павінен быць яшчэ, калі. Чаму гэта можа быць? Прычына ў тым, калі гэта не яшчэ, калі-ты бачыў гэта, Кевін? [Кевін] Так, таму што вы змены канчатковай кропкі. [Nate] Менавіта так. Мы змяняем канчатковай кропкі, і калі яно напісана, як гэта зрабіць-Мы прасторы паміж- яна будзе правяраць гэты выпадак. Гэты выпадак, калі гэта атрымаецца, перапыніць з функцыі. Тады яна будзе правяраць наступным выпадку, і калі гэта ўдасца, ён будзе рэгуляваць канчатковую кропку, а затым ён будзе працягваць і праверыць гэты выпадак. Але на дадзены момант, мы не хочам, каб працягнуць праверку. На шчасце, мы не скідаецца сярэдзіны тут, і мы ведаем, што гэта справа не ўдасца. Але мы дакладна хочам пакласці яшчэ, калі там хоць, што можа быць у дадзеным выпадку так як мы не падладжваючыся сярэдзіну, якая б змяніць сітуацыю? Не, таму што гэтыя выпадкі з'яўляюцца выключнымі. Зноў жа, мой дрэнны. Мы не, я думаю, трэба гэта яшчэ, калі. Мы можам даць яму паспрабаваць і запусціць яго і паглядзець, што адбываецца. Будаўніцтва, адбылася памылка. Гэта, напэўна, таму што я пакінуў гэтыя б у і е месца ў тут. Ці ёсць у мяне больш тых, наверсе? Гэта не падобна на гэта. Мы маштаб, будаўніцтва, там яна ідзе, так што цяпер, калі мы шукаем 15, Так. Дазвольце мне змяніць маштаб малюнка 15, так. Мы можам запусціць яго зноў. Загрузка зыходнага кода, будаўніцтва, працуе. Мы можам шукаць нешта накшталт 13, і мы нічога не атрымліваем раздрукоўку, так што гэта не знаходзячы, што для нас. Гэта выдатна, таму што гэта не ў нашым спісе. Цяпер мы знаходзімся па-за часам. Гэта будзе яго на гэтым тыдні. Дзякуй, што далучыліся, і ўбачымся. [CS50.TV]