ЈАСОН Hirschhorn: Добредојдовте до три недели, секој. Имаме зафатен, но возбудливи делот пред нас. Значи прво, затоа што сме го направиле некои напредок со текот, но ние се уште имаат многу за учење што да се прави, јас сум ќе ви покаже момци некои ресурси што треба да се докаже да биде неверојатно како корисни вие не само што им пријде на вашиот Проблемот сетови, но, исто така, се вари сите материјалот ние да ви даде момци во предавања и панталони и секција. Тогаш ние ќе треба да поминат првите 20 до 25 минути од делот случува во текот GDB, кои може или не може да има користи во овој момент, но тоа е неверојатно корисна алатка што ќе да ви помогне да debug вашите програми. Многу од вас може да се користат printf во средината на вашата програма да дознаам од она што променлива изнесуваше. GDB е дури и подобар од printf и не зафркнам вашиот код затоа што стартувате на извршна датотека. Па ние ќе одиме во текот на 10 најкорисен команди ви треба за gdb, и ние сме ќе одат на вежба заедно, така во проблемот се утврдени три и пошироко, ќе можете да го користите GDB да им помогне на дебагирање вашите програми. И, конечно, ние ќе одиме над некои сортирање и пребарување алгоритми што го виде во предавањето, и ние сме ќе всушност код, не само pseudocode, но кодот бинарни пребарување, меур сортирање и селекција вид. Значи прво, сакам да одам во текот на ресурси. Ова е голема листа, и тоа е помал фонт бидејќи имав многу да одговара на тука. Но, овие не само што ќе ви помогне, повторно, со проблемот поставува и варењето информации што го научиле, но дефинитивно, ајде квиз време, тие ќе биде неверојатно корисна. Значи прво, предавањето белешки. Ако одите на cs50.net/lectures и дојдете до одредени недела и ден, ќе видите дека постојат белешки за секој предавање, што не е едноставно препис, но изменето верзија на она што беше покриена со предавање со код фрагменти и други корисни tidbits. Силно препорачувам случува во текот оние. А потоа, како и, таму е изворниот код достапни од секоја лекција. И повторно, овие слајдови, исто така, ќе биде достапна на интернет на cs50.net/sections оваа вечер. Па втората се шорцеви, секоја недела, кои покрие теми, обично 5-15 минути во должина. И оние надевам дека ќе ви даде голем буквар на различни теми. Трето - и ова е сосема нов на овој година - е study.cs50.net. Ако не сте го проверуваат надвор, јас Силно препорачувам да го стори тоа. Можеш да одбереш некоја тема. Имаме десетици теми таму. Така на пример, кога се откинува функции. Тоа ви дава некои слајдови и забележува на функции. Тоа се, всушност, слајдови кои TFS се охрабруваат да ги користат во текот на нашето презентации во секција. Постои, исто така совети и трикови за справување со функции, и има пракса проблеми кои им помагаат на ќе работат со функции. Ние, исто така ви даде линкови до краток за функции и времињата што функции доаѓаат во предавање. Па study.cs50.net, сосема нови овој година, фантастичен ресурс. Следно, имам човек, кој е во упатството команда која ќе може да се кандидира на командната линија. Значи, ако имате било какви прашања во врска со команда, на пример, ранд, која ние сретнал минатата недела за време секција и, најверојатно, ќе се среќаваат во вашиот проблем поставени кога минува низ генерира код, но ако го напишете човек ранд, ќе добиете на страница, која сите што кажува за ранд. Тоа ви дава она што е потребно, на параметри е потребно, како и враќање видот и краток опис на таа функција. Па проверете ранд. Тоа може да биде малку разточен и збунувачки, па понекогаш сметам дека едноставно Googling она што сакам да знам е најдобар начин да го најдете одговорот. Па се практикуваат со 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. / Цезар. И таму да одите. Гледаш имаме некој текст ми кажуваше за верзијата на GDB, ми даваат некои гаранција информации, а потоа ние навремена БДП, кој изгледа вид на како нашиот командната линија, Но, гледате е отворен paren, GDB, во близина paren. Пред да се продолжи и debug оваа датотека дека јас испратени до сите вас, ајде да погледнеме на некои корисни команди па ние имаме чувство од она што се случува да се покрие. Овие команди се наведени тука во редоследот по кој јас обично ги користите. Па да почнам мојата програма од трчање GBD. / Име на програмата, во овој случај, Цезар. А потоа Првото нешто што правам 99,9% од времето е тип пауза значи. Која поставува брејк на главната. Во суштина, она што го правиш таму е програма се случува да се запре на Главната па можете да почнете испитување го линија страна на линијата, отколку водење на сите пат низ. Може да се скрши на различни точки во вашиот код, но главната е генерално Добро место за почеток. Следната команда Трчам е рок. Која започнува на програмата за трчање, и ако ви треба за да влезат во командната линија аргументи, ќе го стартувате таа команда. Работи со аргументи. Така, бидејќи ние се случува во текот верзија на Ц, кој е на програмата вас момци напиша за pset две - ова, се разбира, има некои грешки во него кои се надевам дека ќе најдеме - ние ќе се кандидира работи со некои команда линија аргументи, бидејќи Цезар, како вие момци знаат за проблемот постави спецификации, зема некои командната линија аргументи. На следните неколку команди, следниот еден е всушност нарекува следната. Дека еден зема ви линија по линија преку својата програма. Па притискање n тогаш Внесете ве води до следната линија, извршување претходната линија. Чекор не само што ви е потребно да се следната линија, но тоа ќе ве однесе внатре функции. Значи, ако сте го напишале функција во вашиот код или ако сакате да се истражуваат да Јас, на пример, може да удри, и наместо да оди на следното линија на на датотеката која сте си минува низ право Сега, вие всушност ќе влезете во оваа функција и да видиме нејзиниот код. Листа ви покажува, во многу лесен формат, 10 или така линии околу каде што во моментов се во вашиот код така што всушност може да се види на датотеката наместо да се разменуваат назад и назад меѓу различни ставови. Печатење е како printf, како што самото име имплицира. Кој ви покажува она променлива еднакви. Информации локалното население е навистина од голема помош. Ова е специјална верзија на печатење. Информации мештаните ви покажува сите на локалната променливи, отпечатоци сите нив за вас кои се моментално достапни. Па јас генерално, наместо да печатење на четири варијабли кои сум љубопитни за ако јас сум во за телефонска линија, за пример, јас само напиши инфо локалното население, и тоа ќе ми што ми контра јас покаже еднакво, како и низа што сум работи на еднаквите. Конечно, продолжи. Паузата ви запира на брејк. Можете да прошетка низ линија по согласност со следната и чекор. Продолжи работи на програмата за вашиот следен брејк или до завршување ако нема повеќе брејк поени. Оневозможи ги отстранува пауза поени ако одлучи на пауза на главната беше несоодветни, вие сакате да ставете ја некаде на друго место. И конечно q, да престанам, излегува од gdb. Значи оваа програма,. / Цезар, ние ќе се обидеме да се погледне преку право сега и ние се случува да се користи GDB да се најде грешки во оваа програма. Истрчав оваа програма порано со Проверете 50, и добив еден намуртено. Сè што постои, тоа собрани, таа помина многу од тестовите, но за некоја причина, тоа не помине на петтиот тест, претворајќи BARFOO, сите капи, во Е-Д-У-I-Р-Р, сите капи, користење на три, како клучна. Добив прилично блиску. Јас се симна од едно писмо. Значи има некои мали грешка тука. Видено низ моите код. Не можев да го дознаам. Се надевам, вие момци може да ми помогне дознаам што овој баг е. Значи тоа е грешка сме барате. Ајде да се движат во gdb. Повторно, јас сум се кандидира gdb. / Цезар, па сега ние сме во gdb. И што е првото нешто што треба да направам? Јас сум само влезе gdb. Некој да ми даде добар командата за да влезат. СТУДЕНТСКИ: Break главната. ЈАСОН Hirschhorn: Break главната. Фантастично. Ајде да напишеш дека внатре Вие момци може да се види тука или следете заедно на вашите компјутери. Се скрши главна, и ќе видите брејк беше поставен во - тоа ми дава некои чудни меморија адреса, и исто така ми дава бројот на линијата. Ако јас да се погледне назад на оваа датотека, Јас ќе сфатат дека главната се случи на линија 21. Што треба да се кандидира следно? Е мојата програмата за трчање? Бр. Значи она што треба да се кандидира следно? СТУДЕНТСКИ: Стартувај. ЈАСОН Hirschhorn: Стартувај. Треба јас само се кандидира рок, или треба да Додадам некои други нешта во? СТУДЕНТСКИ: Стартувај со аргумент. ЈАСОН Hirschhorn: Стартувај со команда аргументи. И бидејќи јас сум за дебагирање многу специфичен случај, јас треба да влезе во таа командата. Затоа јас ќе се кандидира три, кој е, пак, излез добив од Проверка 50. Стартување на програмата. Ние одиме преку неколку линии. Сега ќе видите дека ние сме на линија 21. Како да знам дека ние сме на линија 21? Бидејќи ако се погледне на лево на мојот терминален прозорец, има се вели линија 21. И тоа ми дава, всушност, кодот кој е на линијата 21. Па јас погрешно ја изговори порано. Главната всушност и не е на линијата 21. Главната е неколку линии над 21. Но, во линија 21, тоа е каде што ние се прекрши. Оваа линија код има уште не погубен. Тоа е важно. Линијата ќе видите не има уште не е извршена. Тоа е следната линија на кодот вие сте за да се изврши. Па следниот линија, како вие момци се веројатно запознаени со, дали е ова состојба проверка за да види дали имам влезе во командата. И да јас, што е втор дел од тоа го прават? Што е на i? Студент: менување на тоа да биде цел број. ЈАСОН Hirschhorn: Молам? СТУДЕНТСКИ: Тоа е промена на аргумент на цел број. ЈАСОН Hirschhorn: Значи да се з менува ARG в1 од низа на цел број. А потоа она што се проверува? Студент: Ако постои и втор командата, настрана од водење на програма. ЈАСОН Hirschhorn: И, што е втората половина на овој Булова израз проверка? Овој дел овде, а да јас? Студент: Ако е негативен. ЈАСОН Hirschhorn: Изработка на сигурни дека она што? СТУДЕНТСКИ: Изработка на сигурни дека тоа е, всушност, позитивни. ЈАСОН Hirschhorn: Токму така. Ова е проверка за да видат дали тоа е негативни, и ако тоа е негативна, јас имаат чувство на следната линија може да да ме вика на корисникот. Па ајде удри крајот да се изврши оваа линија. Ние не ги гледаме таа линија дека вие момци можеби очекува да се види вика на корисник, а потоа се враќаат, бидејќи оваа линија не се изврши. Влегов 3. Па јас не, всушност, влезе во две команда линија аргументи, и 3 е поголема од нула. Па видовме дека линија, ние погубен, но ние не се повлече во внатрешноста на ако состојба. Па сега, следната, гледам јас сум поставување int клучните еднаква на на i ARG в1. Па тоа е мене создавање променлива клуч. Значи, ако јас испечатите клучните токму сега, бидејќи кој ви овозможува да видите вредност во внатрешноста на променлива, Клучот е еднаква на 47. Тоа е чудно, но се разбира, тоа е затоа што не сум извршува таа линија уште. Па сега ако јас хит n, изврши таа линија, и го прават печати клуч, клучот ќе изнесува 3, што е она што ние го очекуваме тоа да се изедначи. Значи, повторно, во GDB, линијата ќе види сеуште не сте погубен. Мора да го погоди n или s или повеќе на други команди за да всушност изврши таа линија. Копчето Print. Клуч на 3. Досега, толку добар. Стринг е обичен текст. Ајде да се изврши таа линија. Јас сум добивање на стринг од корисникот. Ајде да видиме во мојата Проверете 50, јас внесете BARFOO сите капи, па тоа е она што јас ќе влезе. Ако јас сега се печати на обичен текст. Ќе видите изнесува стринг. Тоа ми дава некои други чудни хексадецимален број, но тоа го прави во Всушност кажам дека мојот стринг е BARFOO. Ако сакав да видам што клучни изнесуваше на оваа точка, како би можел да се провери клуч? Студент: Печати клуч. ЈАСОН Hirschhorn: Печати клуч, точно. И всушност, постои кратенка. Ако ви се уморни од пишување на печатење, можете само да пишувате стр. Па стр клучните прави истото точната нешто. И повторно, гледам изнесува 3. Ако сакав да дознаете што двете клучни и BARFOO изнесува во исто време но јас бев уморен од пишување секоја еден од поединечно, јас да напишете инфо локалното население. Што ми дава клучните еднаквите 3. Обичен текст еднаква BARFOO. Исто така, ми дава овие две чудни работи на врвот, на оваа променлива i и оваа променлива n. Тие се всушност постоечките во мојот главната програма. Ние не ги сретнал сеуште, но како преглед, оние постојат во моите за телефонска линија. Па токму сега, тие се изедначи некои чудни броеви, бидејќи тие не биле во уште се иницијализира, но тие се уште постојат во меморијата, па тие се само во собата некои ѓубре вредност. Но ние ги гледаме клуч во обична текст право таму. Па ќе одам да се изврши оваа линија, линија 34, за телефонска линија. Ние ќе фрламе во за телефонска линија со притискање н. И ние сме во внатрешноста на за телефонска линија. Ние сме на нашето прво чек. И повторно, овие вид на треба да се погледне запознаени за вас, бидејќи ова е Цезар програма со која беше напишано, но повторно, има некој вид на бубачка. И сега, ако го направам инфо локалното население, бидејќи јас сум внатре дека за јамка, ќе видите дека јас еднаква на нула, како што очекуваме. Тоа е она што ние го постави за да и се иницијализира тоа да во за телефонска линија. n е еднакво на 6. Кој исто така има смисла, бидејќи ние во собата до strlen на обичен текст. Па сакам да направам инфо локалните жители или да ги печатите на променливите често да бидете сигурни дека сè е секогаш она што Очекувам тоа да се изедначи. Во овој случај, сè е она што го очекуваме тоа да се изедначи. Значи, да почнеме движат низ ова за јамка. Линијата јас сум на е линија 36, ако обичен текст i е поголема од и обичен текст i е помала од или еднаква на z. Знам дека мојот проблем не е со мојот прв писмо, тоа е со второто писмо. Ако ги погледнеме назад во Проверете 50, Б оди на Е парична казна. Јас сум преземање на А и оставајќи го како А, не го менува за да Д Значи нешто не е во ред со Второто писмо. Па ќе одам да се движат таму во една секунда. Но, ако јас сакав да се провери што обичен текст што изнесуваше во овој конкретен случај, мислам дека тоа треба да биде што? Што треба обичен текст јас еднакви во оваа првиот круг преку за телефонска линија? Студент: нула? ЈАСОН Hirschhorn: Обичен текст на јас? Така треба да биде главен град Б Јас, се разбира, е еднаква на нула, туку обичен текст заградата нула затворени заградата еднаква Б бидејќи жиците, како што видовме минатата недела, се низа, па ние сме добивање на првиот карактер од тоа. Значи, повторно, ако јас отпечатени обичен текст на Јас, јас, всушност, го добиете карактер Б И тоа е уредни, нели? Јас не, всушност треба обичен текст I. Тоа не е една од варијаблите јас во собата или иницирана, но можете да печатите надвор цела низа на работи ако сакате да. Но, ајде да се движат низ. Ако обичен текст I е поголема од А и обичен текст I е помала од или еднаква на Z, кои јасно е точно, бидејќи имаме капитал Б Одам да се кандидира некои команда на неа. Видовме дека математика минатата недела, па ние ќе земе здраво за готово дека тоа функционира право според Проверете 50. Овие големи загради, првиот покажа дека сум бил излегување на ако состојба, на вториот се појавил дека сум излегување на за телефонска линија. Па сега кога ќе се погоди Следно, ќе видиме ние сме назад во за телефонска линија повторно. Ние сме минува низ за јамка повторно. Ајде всушност чекор во втората повторување на за телефонска линија и видот инфо локалното население. Па ние сме во втората итерација на нашите за телефонска линија. Јас еднакво на 1, кој се очекува. N еднаква 6, кој се очекува. Клучни еднаква 3, кој се очекува. И обичен текст, ќе видите, е еднаква на EARFOO сега, не BARFOO повеќе бидејќи во нашите претходни повторување, Б беше изменета на капитал Е Значи ние сме за да се сретнуваме со проблемот, така што ова е местото каде што ние ќе треба да нурне во дебагирање. Но, дали некој има било какви прашања за она што го направиле досега? Фантастично. Значи ние сме за да се изврши ова ако состојба, обичен текст заградата Ги затворив заградата поголема од А и обичен текст јас помалку од или еднакво на Z. но пред Одам во тоа, затоа што ова е местото каде Знам дека мојот грешка е, сакам да истакнам надвор обичен текст на Првата Значи ајде да се стави испечатите. Тоа го прави се изедначи со карактер, така што изгледа толку далеку, се е добро и добро. Така што очекувам оваа линија по мојата логика, оваа линија треба да биде точно. Тоа е голема буква. Но, ако јас хит n, ние не сфаќаат дека ова линија, всушност, не се изврши. Скокнав спушти до друго, ако. Зошто се случи тоа? Студент: Бидејќи имате вашата состојба на обичен текст е поголем од A, не е еднаква или поголема од. ЈАСОН Hirschhorn: Значи имав мојот обичен текст I е поголема од A, не е поголем од или еднаков на. Па јасно, главниот град не го предизвика ова ако состојба, и ние го сторивме не влезете во него, и ние го сторивме не направиме потребните смена. Значи тоа е тоа, всушност. Јас сфатиле мојата бубачка. Јас може да се врати во мојот извор датотека, менуваат, и надградба на тоа и се кандидира Проверете 50 повторно. Но ќе видиме, само за педагогија за доброто, ако јас продолжувам да одам. На друго место ако не изврши било, но што наместо еднаква е на командната кој не се менува. Па тоа не е променет на сите, и ако печати обичен текст тука, ќе видиме ќе преку кои за телефонска линија не, всушност, промени кои Вториот знак на сите. Тоа е уште една капитал А Па уште еднаш, ние дебагира нашата грешка. Сфативме дека имало некои логика недостасува. И ние го дебагира пред време пред всушност извршување таа линија, но ќе се забележи имаше ние само хит Next и се фрламе на тоа друго, ако, тоа значи дека дека ако состојба не е вистина. Ние не, всушност, се резултат што се очекуваше. Па тогаш ние би можеле да се предизвика, имаше ние не била толку остроумен, да се погледне на дека ако состојбата и проверете дали, всушност, нашата состојба треба да се евалуираат до точно во сегашниот контекст. Тоа е се за дебагирање оваа програма. Дали некој има било какви прашања? Што команда би можел да го погоди да се откажат од GDB? П И тогаш ќе биде побарано, Откажувате? Да или не. Јас ќе го погоди одговорот е да, и јас ќе се откажев gdb. Така што беше брзо Primer да gdb. Всушност, во вистинска сценарио, Го направив ова на работното време. Јас GDBed ова точната програмата на работното време со студент. И ако ние се вратиме на команди видовме пред, ние се користат пауза главни, првиот нешто ние го сторивме. Ние се користат да работат со командната линија аргументи, Второто нешто што го направив. Ние се користи следната многу да се движат нас преку линии. И повторно, кратка верзија на следната е n. Тоа е во загради во сива на слајд. Ние не се користи чекор, но ние не сме секогаш треба да се за овој случај. Но, ние може да го користат во малку подоцна на денешната ако сме дебагирање, за пример, бинарната пребарување кога бинарни пребарување се нарекува во посебен функција, но има некои грешка со неа. Ние ќе сакате да влезете во на повикот на бинарни пребарување и всушност тоа debug. Листа ние не се користи или затоа моравме добра смисла на нашиот код, но ако сакаше да се добие чувство на она што јас код беше околу, јас само може да се користи листа. Печати се користи, инфо локалното население ќе се користи. Продолжи ние не треба да го користи во овој случај, ниту пак ние треба да се користи оневозможи, но ние го сторивме употреба откажам. Повторно, овие 10 заповеди, практикуваат нив. Ако се разбере овие 10 заповеди, ќе треба да се постави за дебагирање било издаде gdb. Значи ние сме за да се оди натаму, повторно, на Суштината на делот денес, случува во текот овие сортирање и пребарување алгоритми. Пред да се стори тоа, повторно, било какви прашања, коментари, загриженоста за gdb? Така е сите ќе ги користи GDB наместо printf? Па секој, за доброто на вечни времиња е, сите се одобруваат главата право сега, па јас ќе се видиме во работното време и сите TFS ќе ви помогнат и видете тие ќе речат, да ми покаже како да се користи GDB, и ќе бидете во можност да им покажеме, нели? Вид на? Можеби се надевам. Кул. Па ние ќе се преселат во сортирање и пребарување. Ќе видите јас имам листа веќе сортирана за нас, но тоа не се случува да биде случај секогаш. Па во проблемот постави спецификација за Проблемот се утврдени три, имаш шорцеви дека може да се види, и тоа, всушност, те прашува да се види оние шорцеви. Исто така во предавање минатата недела, отидовме во текот многу од овие алгоритми, па јас сум нема да трошат време во класа ќе во текот на овие алгоритми повторно или цртеж слики за тоа како овие алгоритми работа. Повторно, дека оваа информација може да се ре-часовник предавање, или дека информации е заробен исклучително на шорцеви за овие пребарувања, сите на кои се достапни во cs50.net. Така, наместо, она што ние ќе треба да направите е да напишете овие програми. Имаме чувство, ментална модел, за тоа како тие работат, и така она што ние ќе да се направи е кодот на нив за реално. Ние ќе се претвори дека ментален модел, таа слика, ако сакате, во Вистинските код. И ако сте биле малку збунет или маглива на ментална модел, јас целосно се разбере. Ние не сме всушност ќе Скокни до кодот достапен. Па додека ова во овој слајд прашува можете да го кодот бинарни пребарување, и всушност, итеративен верзија на бинарни пребарување, првото нешто што го навистина сакате да направите е да пишуваат некои pseudocode. Па имате овој ментален модел за тоа како бинарни пребарување дела. Извади лист хартија ако имате еден лесно достапни, или отвори уредувач на текст, и јас би сакал сите да пишуваат. Преземе четирите минути за да се напише pseudocode за бинарни пребарување. Повторно, мислам за тоа ментален модел. Ќе дојдат, ако имате прашања и ние може да нацрта слика од. Но прво, пред да започнете програмирање, Би сакал да се напише pseudocode за бинарни пребарување, па кога ќе нурне во, имаме некои насока таму каде што треба да се упатат. Студент: Можеме ли да претпоставиме низа на вредности ќе го добиеме е веќе сортирани? ЈАСОН Hirschhorn: Значи за бинарни пребарување да работат - одличен прашање - ќе треба да се земе во сортирани низа на вредности. Па претпоставувам дека ќе работат. Ние ќе се вратиш на овој слајд. Ќе видите во пурпурно функцијата декларација е bool binary_search int вредност, int вредности, int n. Ова треба да изгледа познато, ако сте веќе се приближува или добиле вашиот раце валкани со проблемот во собата. Но тоа е вашата функција декларација. Повторно, не треба да треба да се грижите за дека многу во овој момент. Она што јас навистина сакате да направите е да четири минути да pseudocode бинарни пребарување, а потоа ќе одиме во текот на овој како група. И јас ќе дојдат околу. Ако имате прашања, се чувствуваат слободно да се подигне својата рака. Зошто не ве однесе повеќе од две минути да завршам на pseudocode? Знам дека ова може да се чини смешно што ние сме трошат толку многу време на нешто што не е дури и всушност во Ц, но особено за овие повеќе предизвик алгоритми и проблемот утврдува дека ние треба да дознаам, почнувајќи од pseudocode не се грижам за синтаксата, само да се грижиш логика, е неверојатно корисна. И на тој начин, вие не сте решавање два неверојатно тешко проблеми одеднаш. Сте само се фокусира на логика, и потоа да се движат во синтакса. OK. Да почнеме минува низ на pseudocode. Имам напишано тука, бинарен Барај pseudocode. Ние ќе ја напишам оваа на одборот заедно. Или јас ќе го напишам и ќе даде мене инструкциите што ми треба. Па секој може да ми даде првата линија на pseudocode сте напиша за бинарни пребарување? Да, Ени? СТУДЕНТСКИ: Додека должината на листа е поголема од нула. ЈАСОН Hirschhorn: Додека должина на листата поголема од нула. И повторно, можеме да видиме некои Ц изглед синтаксички работи овде. Но, повеќето од тоа е на англиски јазик. Дали некој има било која линија тие се стави пред ова во своите псевдо-код? СТУДЕНТСКИ: Земете низа на подредени броеви. ЈАСОН Hirschhorn: Ти напиша "добие низа на сортирани броеви. "Пер на функција декларација, ние ќе се поминува низа на подредени броеви. СТУДЕНТСКИ: [нечујни]. ЈАСОН Hirschhorn: Значи ние ќе го имаат тоа. Но да, ако ние не го имаме тоа, ние ќе треба да се најде на нашата низа од броеви, бидејќи бинарна пребарување работи само на подредени низи. Така, додека должината на листата е еднаква на нула, јас сум случува да се стави во некои големи загради да го направите да изгледа малку повеќе како C. Но, додека, се чини дека на сајтот врз додека јамка, па во овој додека јамка она што ние треба да се направи за бинарни пребарување? Некој друг кој не ми даде одговори, но сепак кој го напиша ова? СТУДЕНТСКИ: Одете до средината на листата. ЈАСОН Hirschhorn: Том. Оди до средината на листата. И следење прашање, што правиме еднаш сме на средината од листата? СТУДЕНТСКИ: Дали проверка дали тоа е бројот што го барате. ЈАСОН Hirschhorn: Одлично. Оди на средината од листата и да го провери ако нашата вредност е таму - фантастично. Дали некој има било што друго која ќе биде различна од ова? Тоа е точно. Првото нешто што го правиме во бинарна пребарување е да отидете до средината на листата и проверете дали нашата вредност е таму. Па претпоставувам ако нашата вредност е таму, што ќе правиме? Студент: Се враќаме нула [нечујни]. ЈАСОН Hirschhorn: Да, ако нашите вредност е таму, ние ја најдов. Па може да се каже, на некој начин, но тоа функција е дефинирана, ние им кажуваме на корисникот ние ја најдов. Ако тоа не е таму, иако, тоа е каде што ова станува незгодно. Значи, ако тоа не е таму, некој друг кој работи на бинарни пребарување или има идеја сега, она што ќе правиме? СТУДЕНТСКИ: Прашање. ЈАСОН Hirschhorn: Да? Студент: е низа веќе сортирани? ЈАСОН Hirschhorn: Да, ние сме под претпоставка низа е веќе подредени. Студент: Значи, тогаш мора да се провери дали вредноста која ја гледате е поголема од вредноста што сакате, можете да се движите до средината на другата половина. ЈАСОН Hirschhorn: Значи, ако средината на листата е поголема од она што ние сме барате, тогаш ние треба да направам? Ние се движат, каде? СТУДЕНТСКИ: Сакате да се преселат во половина од листата со броеви помала од тоа. ЈАСОН Hirschhorn: па ние ќе јавам дека на левата страна. Значи, ако средината е поголем, може да се бара Левата половина од листата. А потоа од страна на интернет, што мислам кога го велам пребарување? СТУДЕНТСКИ: [нечујни]. ЈАСОН Hirschhorn: Ние одиме кон средината. Ние всушност го повтори тоа нешто. Ние одиме назад преку нашата додека јамка. Јас ќе ти дадам последната - друго, ако, средината е помалку од она што ние, што правиме тука? Студент: Оди десно. ЈАСОН Hirschhorn: Барај десно. Ова изгледа добро, но не секој има нешто што ние може да се исчезнати или нешто друго што ќе се стави во вашиот псевдо-код? Значи ова е она што го имаме досега. А должината на листата е поголема од нула, ние ќе треба да се оди на средината на листата и проверите дали нашата вредност е таму. Ако средината е поголем, ние ќе пребарување лево, друго ако средината е помалку, ние ќе треба да барате право. Така што сите ние сме имале некои блискоста со условите што се користи во компјутерските науки и алатки имаме. Но вие веќе ќе забележите бевме зборуваат англиски јазик, но ние откривме многу нешта што се чинеше дека на сајтот за да алатки што ја имаме во нашите кодирање алатка комплет. Па право надвор од лилјак, ние не сме ќе всушност го кодот сеуште. Што гледаме овде, во англиската дека мапи за да се работи можеме да пишуваат во C? СТУДЕНТСКИ: Додека. ЈАСОН Hirschhorn: Додека. Значи ова време, токму тука мапи за што? Студент: А додека јамка. ЈАСОН Hirschhorn: А додека јамка? Или веројатно, поопшто, јамка. Ние сакаме да се направи нешто одново и одново. Па ние ќе го кодот јамка. И ние веќе знаеме, затоа што ние го направивме ова неколку пати и ние имаат многу примери од таму, Како всушност да се напише овој индекс за циклус. Така што треба да биде прилично лесно. Ние треба да бидат способни да се добие дека почна прилично брзо. Што друго можеме да видиме тука? Кои други структури syntaxes, работите дека ние сме запознаени со C, ние веќе имаат чувство на Врз основа исклучување на зборовите што ги користат? Да, Ана? [Нечујни] само се шегувам. Ана, повелете. Студент: Ако и друго. ЈАСОН Hirschhorn: Ако и друго - токму тука. Значи она што тие изгледаат како? Ученик: ако друго изјава. ЈАСОН Hirschhorn: Да, услови, нели? Па ние најверојатно ќе треба да пишуваат некои услови. И повторно, иако можеби збунувачки во Прво, ние обично имаат чувство сега за тоа како да се напише услови и синтаксата за услови. И ако ние не, ние само се погледне до синтакса за условите, copy & paste дека, бидејќи ние знаеме треба услов тука. Било други работи можеме да видиме дека сајтот излез работи што можеби ќе треба да се направи во C? Да, Aleha? СТУДЕНТСКИ: Ова може да биде очигледна, од само проверка ако вредност е еднаква на нешто. ЈАСОН Hirschhorn: Така како ние да се провери и - така оди на средината од листата и проверете дали нашата вредност е таму? Како го правиме тоа во C? Што е синтакса за тоа? Студент: еднакво, еднакви. ЈАСОН Hirschhorn: еднакво, еднакви. Па оваа проверка е веројатно нема да биде еднакво, еднакви. Па ние ќе знаете што треба дека некаде. И всушност, само во пишувањето, гледаме оние други работи. Ние ќе мора да направи некои споредба оператори таму - фантастично. Па тоа всушност изгледа како, од страна и голем, ние не го имаат напишано збор на C код уште. Но добивме ментална модел надолу преку предавања и оние шорцеви. Ние напиша псевдо-код како група. И веќе имаме 80% ако не 90% од она што ние треба да направите. Сега, ние само треба да го кодот тоа, што повторно е не-тривијални проблем да се реши. Но барем ние сме заглавени на логика. Барем сега кога одиме на работното време, Можам да кажам, знам што ми треба да се направи, но да ве потсетам ме на синтакса? Или дури и ако на работното време се преполни, можете Може Google за синтаксата, а отколку да се заглавени на логика. И повторно, наместо да се обидува да ги реши логиката и синтакса проблеми сите одеднаш, често е многу подобро да се се скрши оние два хард проблеми исклучите во две повеќе податлив и оние стори псевдо-кодот, а потоа кодот во C. Да видиме она што го направив за псевдо-код пред време. А должината на листата е поголема од нула, да се погледне на средината на листата. Ако бројот се најде врати точно, друго Ако бројот повисока, пребарување лево. Друго, ако бројот пониски, барај право, се врати лажни. Така што изгледа речиси идентични, ако не и е речиси идентично со она што ние го напишал. Всушност, Том, што си рекол, прво, кршење на средината од листата и ако број наоѓаат во две изјави е, всушност, она што го направив. Јас ги комбинираат таму. Требаше да слушав сте прв пат. Па тоа е псевдо-кодот го имаме. Ако сакате да сега, жал, одете Назад кон нашиот првичниот проблем. Ајде код binary.c. Па спроведување итеративен верзија на бинарни пребарување со помош на следниве функција декларација. А вие не треба да го копирате да ја срушат само уште. Јас сум всушност ќе се отвори до тука binary.c. Па таму е функција декларација во средината на екранот. И ќе видите Зедов псевдо-код од на мојот страни, но речиси идентични на она што го напиша, и стави дека во за вас. Па сега, ајде да ги пет минути да кодот на оваа функција. И повторно, ако имате било какви прашања, подигне својата рака, дозволете ми да знам, ќе доаѓаат наоколу. СТУДЕНТСКИ: [нечујни]. ЈАСОН Hirschhorn: Земав бинарни дефиниција за пребарување на на почетокот, на линија 12. Тоа е она што го добив за мојот слајд. А потоа сето тоа псевдо-кодот Јас само копија и пејст од слајд, псевдо-кодот слајд. Јас сум уште не слухот [нечујни]. Па ако си ја завршил имплементација, сакам да го проверам. Ве преку е-маил на helpers.h датотека порано во оваа класа. И тоа ќе бидат достапни на интернет, како и за преземање за луѓе гледаат овој дел време одложен. И јас само се користи генерички дистрибуција кодот од pset3. Земав find.C, го користам мојот helpers.h датотека наместо helpers.h датотека тоа е дадено во дистрибуцијата код. И морав да се направи една друга промена во find.C наместо повикувајќи едноставно пребарување, јавете се binary_search. Значи, ако сакате да ги тестираат вашите кодот, знаат дека тоа е како да го направи тоа. Всушност, кога ќе се работи овој код токму сега, јас само го направи копија од мојата pset3 директориум, повторно, сменил помагачите датотеки и потоа направи тоа промени во find.C да се јавите binary_search наместо едноставно пребарување. ЈАСОН Hirschhorn: Да. Имате прашање? Студент: Не е важно. ЈАСОН Hirschhorn: Не грижете. Добро, ајде да започнете. Ние ќе кодот го ова како група. Една друга забелешка. Повторно, ова е, може лесно да бидат заменети во за Проблем постави три. Имам helpers.h датотеката која, наместо од helpers.h ние сме дадени, изјавува бинарни пребарување, меур вид, и селекција вид. И во find.c што ќе забележите на линија, што е тоа, линија 68, што ние го нарекуваме бинарни пребарување, наместо за пребарување. Значи, повторно, кодот кој е достапен онлајн или кодот кој сте создавање токму сега лесно може да бидат заменети во за p постави 3 да го провериш. Но прво, да е кодот бинарни пребарување. Нашата функција декларација, ние се врати bool. Земаме цел број наречен вредност. Земаме низа од цели броеви се нарекува вредности, и ние се n да биде големината на низа. On-line 10, токму тука, имам остри вклучуваат stdbool.h. Дали некој знае зошто тоа е таму? Значи она што не таа линија на код? СТУДЕНТСКИ: Тоа ви овозможува да се користете bool враќање тип. ЈАСОН Hirschhorn: Токму така. СТУДЕНТСКИ: Или тоа е библиотека која овозможува да се користи bool враќање тип. ЈАСОН Hirschhorn: Така остар вклучуваат stdbool.h линија ми дава некои дефиниции и декларации за работите дека јас сум дозволено да се користи во оваа библиотека. Така меѓу оние кажува дека има овој тип се нарекува bool, а тоа може да биде точно или неточно. Значи тоа е она што таа линија не. И ако немав таа линија, јас би добие во неволја за пишување на оваа Зборот токму тука, bool, право таму. Точно во право. Значи ми треба дека во овој код. OK. Па ова, повторно, е итеративен верзија, не е рекурзивен еден. Па нека да започнете. Да почнеме со првиот линија на псевдо код. И се надевам, ние ќе - или не се надевам. Ние ќе одиме низ собата. Ќе одиме линија по линија, и јас ќе ви помогне ќе дознаам линија која ние треба да се напише во прв план. Така, додека должината на листа е поголема од нула. Да почнеме во предниот дел. Што линија треба да пишувам тука, во кодот? СТУДЕНТСКИ: Додека заграда n е поголем од 0. ЈАСОН Hirschhorn: Додека n е голема од 0. Така што n е големината на листа, и ние сме проверка, ако - [Ставање ГЛАСОВИ] ЈАСОН Hirschhorn: - Жал ми е? Студент: Како да знаеме дека n е со големина на листата? ЈАСОН Hirschhorn: Извини. За на pset спецификација, пребарување и вид функции што треба да се напише, n е со големина на листата. Јас заборавив да го објасни тоа овде. Но да. n е со големина на листата, во овој случај. Па додека n е поголем од 0. OK. Дека може да се покаже малку проблематично иако, ако работите одат натаму. Затоа што ние ќе продолжиме да се знае Големината на листата во текот на овој функција, но велат дека ние започнете со низа на 5 броеви. И ние одат преку и ние сме сега се сведени на низа на 2 цели броеви. Кои 2 цели броеви е тоа? Големината е 2 сега дека ние сакаме да се погледне, но кои 2 е тоа? Дали тоа има смисла, тоа прашање? OK. Јас ќе го прашам повторно. Па ние да започнете со оваа низа од 5 цели броеви, а n е еднаков на 5, нели? Ние ќе се кандидира низ овде. ние најверојатно ќе се промени големината, право, како работите одат натаму. Што е она што ние велиме ние сакаме да се направи. Ние не сакаме да го бара целосна работа повторно. Така велат дека ние ја промените да 2. Земаме половина од листата што е чудно. Па само ги собереш 2. Па сега n изнесува 2. Јас се извинувам за сиромашните сува избрише маркери. Нели? И ние сме во потрага низ листата повторно со листа на големина 2. Па, нашите низа се уште е на големината 5. Велиме ние само сакаме да Барај 2 места во неа. Така што 2 места се оние? Дали тоа има смисла? Се тие лево 2 спотови? Дали се тие право 2 спотови? Дали се тие средината 2 спотови? Ние сме скршени проблемот надолу, но ние всушност не знам кој дел од проблемот ние сме сè уште гледа, само со овие 2 променливи. Значи ние треба малку повеќе, тогаш, време n е поголем од 0. Ние треба да знаеш каде што n е во нашите вистински низа. Па не некој има промена на оваа линија? Поголемиот дел од оваа линија е совршено точни. Дали има уште еден прилог? Можеме да се разменуваат нешто за n да направи оваа линија е малку подобро? Мм-хм? СТУДЕНТСКИ: Можете ли да се иницијализира со променлива како должината на n, кои потоа ќе се користи подоцна во текот на функција? ЈАСОН Hirschhorn: Значи се иницијализира променлива должина на n, и ние ги користиме тоа подоцна? Но, тогаш ние само се ажурира должина и ние уште работат во овој проблем, каде што намали должината на нашиот проблем, но никогаш не знаеме каде, всушност, таа должина мапи излез. Студент: не е тоа што ќе се случи подоцна, кога си ти што зборуваш, барај лево, пребарување нели? Ви се случува да одат во друг област на вашиот - ЈАСОН Hirschhorn: Ние ќе одиме на површина, но како да знаеме кои треба да одат? Ако имаме само низа и овој n, како да знаеме каде да се одат во низа. Во грбот, да? СТУДЕНТСКИ: Дали имате, како, пониска врзани и горна граница променлива или такво нешто? ЈАСОН Hirschhorn: OK. Значи ова е уште една идеја. А не само следење на големина, ние ги пратите на долниот и горна граница променлива. Така како ние да се пресмета големината од Пониската врска и горна граница? [Ставање ГЛАСОВИ] ЈАСОН Hirschhorn: Одземање. А исто така и следење на долниот врзани и горните обврзани да ги споделите со нас, сме во потрага овие две? Дали сме во потрага овие две овде? Дали сме во потрага средината две? Веројатно нема средината две, бидејќи Ова, всушност, е бинарна пребарување. Но сега дека ќе бидете во можност да се добие големината, но исто така и на границите на низата. Во суштина, ако ние си имаме гигант телефон книга, ние го рипувате на половина. Ние сега знаеме каде што помалите телефонот книга е. Но, ние не сме всушност расцепен на телефонот книга на половина. Ние сеуште треба да знаат каде нови граници на нашиот проблем е. Дали некој има било какви прашања за тоа? Да? Студент: Дали тоа ќе функционира преку создавање на променлива, јас, што потоа само се префрли позицијата на i во однос на нејзината моментална позиција, а должината, n? ЈАСОН Hirschhorn: И што е i? Студент: Како што се како вид на - Како ќе се иницијализира јас да биде средна положба на низата. А потоа, ако вредноста на позиција i во средината на низата во резултат да биде помала од вредноста што треба, јас сега станува должината на низата, плус вредноста на i поделено со 2. Како, види, ти префрлат I - ЈАСОН Hirschhorn: Право. Студент: - до - ЈАСОН Hirschhorn: Па јас сум речиси позитивно е што ќе работат. Но поентата суштество, треба две парчиња на информации тука. Можете да го направите со почетокот и крајот, или можете да го направите со големина, а потоа некои маркер. Но вие не треба две парчиња на информации тука. Вие не може да се снаоѓаат со само една. Дали тоа има смисла? Па ние ќе да се оди преку, како и ние сме случува да се направи [нечујни] и да се создаде некои маркери. Значи Зошто го напишете во вашиот код? Студент: Јас само рече int врзани еден е еднакво на 0. ЈАСОН Hirschhorn: Да ја наречеме дека int, почеток. Студент: OK. ЈАСОН Hirschhorn: Тоа го прави повеќе смисла за мене. И? СТУДЕНТСКИ: Реков, претпоставувам, int крај. ЈАСОН Hirschhorn: int крај. СТУДЕНТСКИ: Претпоставувам, n минус 1, или нешто слично. Како, последниот елемент. ЈАСОН Hirschhorn: Значи ти напиша, int почнувајќи еднаквите 0, запирка, и int крај еднаква N минус 1, точка-запирка. Значи во суштина, она што го правиш тука, 0 на првата позиција. И како што знаеме во низи, тие не одат до n, тие одат до n минус 1. Па ние имаме некои границите на нашата низа. И овие првични границите се случи да биде почетна границите на нашиот проблем. OK. Така што звучи добро. А потоа, ако ние се вратиме на оваа линија, додека должината на листата е поголема од 0, што, наместо на n, треба ќе стави тука? СТУДЕНТСКИ: Напиши завршува минус почеток. ЈАСОН Hirschhorn: Додека завршува минус почетокот е поголем од 0? OK. И ние би можеле, ако сакавме да направи тоа малку поубаво, што друг би можел да правиме? Ако сакаме да се чисти овој код се малку? Како можеме да се ослободи од 0? Ова е само еден стил прашање. Тоа е точно, токму сега. СТУДЕНТСКИ: завршува не го прави тоа еднакви почеток? ЈАСОН Hirschhorn: Можеме да го направи она што? [Ставање ГЛАСОВИ] СТУДЕНТСКИ: Стопирање е поголема? ЈАСОН Hirschhorn: Да. Ние само може да се направи додека не завршува е поголема од почетокот. Во право. Додадовме почетокот на другата страна на тоа, и ние се ослободи од 0. Значи ова само изгледа малку почист. OK. Така, додека должината на листата е 0, ние напиша дека, додека завршува е поголема од почеток. Ние ќе се стави во нашите неопходни тркалезните загради, а потоа првото нешто ние сакаме да направите е да се погледне во нив во малку листа. Вас? Можете ли да ми го - Студент: Ако заграда вредност квадратен заграда - ЈАСОН Hirschhorn: Ако загради вредност квадратен заграда. СТУДЕНТСКИ: завршува поделено со 2. ЈАСОН Hirschhorn: Стопирање? СТУДЕНТСКИ: Гледам проблем со вашиот - ЈАСОН Hirschhorn: OK. Па, погледнете во средината. Како да знаеме што средината е? Да. Па да ми го избришете овој код. Како да знаеме што средината е? Во ништо, кога имаш на почетокот и на крајот, како да го пронајдете средината? СТУДЕНТСКИ: Вие просек. Студент: Можете да ги додадете заедно, а потоа - ЈАСОН Hirschhorn: Додади нив заедно, а потоа? Студент: А ти просек. Поделете го со 2. ЈАСОН Hirschhorn: Додади нив заедно и јаз од 2. Па int средината еднаква на? Том, може да го даде за мене? Студент: Почнувајќи плус завршува - ЈАСОН Hirschhorn: Почеток плус завршува. СТУДЕНТСКИ: Сите, држач поделено со 2. ЈАСОН Hirschhorn: Сите во загради, поделено со 2. Така што ми дава средината на ништо, точно? СТУДЕНТСКИ: Можете исто така треба да го заокружи. ЈАСОН Hirschhorn: Што мислите значи, јас треба да го заокружи? [Ставање ГЛАСОВИ] СТУДЕНТСКИ: Бидејќи ако тоа е непарен број, тогаш тоа е како - ЈАСОН Hirschhorn: Па, ОК. Па можев да го заокружи. Но, ако тоа е непарен број, 5, можам да земајќи 1 далеку од средината. Или ако тоа е парен број, туку тоа е подобро случај. Ако тоа е 4, имаме само 4, може да се земе првиот "средината", цитат, unquote или вториот "среден" еден. Или ќе работат за бинарни пребарување, па јас всушност не треба да го заокружуваат. Но, постои една друга работа што треба да се погледне во оваа линија. Ние не може да го сфати, сепак, но ние ќе се вратам на тоа. Бидејќи оваа линија, всушност се уште треба една друга работа. Но досега, ние сме писмени четири линии на код. Добивме наша почетокот и завршувајќи маркери. Ние имаме додека јамка, која мапи на директно до нашите pseudocode. Ние сме во потрага на средината која мапи директно на нашата pseudocode. Јас би рекол дека ова оди во средината на листата, оваа линија код. И тогаш, откога ќе одиме до средината на листата, следното нешто што треба да направите е да проверите дали нашата вредност е таму за на pseudocode ние напишал порано. Така како ние да проверите дали нашата вредност е на средината од листата? Вас. Зошто да не го правиш ова? Студент: Ако нашата вредност е во средината е еднаква на она што ние во собата на - Мислам еднаков еднаков на - ЈАСОН Hirschhorn: Тоа - OK. Студент: Не сум сигурен дека она што променлива ние сме во потрага за иако, е затоа што - [Ставање ГЛАСОВИ] СТУДЕНТСКИ: [нечујни]. ЈАСОН Hirschhorn: Токму така. На функција декларација, ние сме во потрага по вредност. Па ние сме во потрага по вредност во низа на вредности. Па ти си точно во право. Вие ќе направите, ако отворена paren вредност заграда средината затворени заградата еднаквите еднакво вредност, а внатре има она што ние треба да направам? Ако нашата вредност е таму, што ние треба да направите? [Ставање ГЛАСОВИ] СТУДЕНТСКИ: Враќање нула. ЈАСОН Hirschhorn: Враќање вистина. СТУДЕНТСКИ: Враќање вистина. ЈАСОН Hirschhorn: Мајкл, што значи оваа линија направам? СТУДЕНТСКИ: [нечујни] програмата се кандидира по својот тек, а тоа е над, а сте она што треба да направам? ЈАСОН Hirschhorn: Програмата или што? Во овој случај? СТУДЕНТСКИ: Функцијата. ЈАСОН Hirschhorn: Функцијата. И така, да се вратат на она што се нарекува тоа и го даде вредност, вистина. Точно во право. Главната. Што е враќање тип на главните, Мајкл? Студент: int, број? ЈАСОН Hirschhorn: int, точно. Цел број. Тоа беше само прашање да бидете сигурни дека вие момци биле на врвот на неа. Што значи тоа обично се врати, ако сите нешта се работи добро? СТУДЕНТСКИ: Нулта. ЈАСОН Hirschhorn: Нулта. Точно во право. Студент: Ако ова само се враќа точно, нема информации кои се дадени за тоа што - Ох, ова е само велејќи дека тоа вредност е внатре во низа. ЈАСОН Hirschhorn: Токму така. Оваа програма не е давање на информации од каде точно вредноста е. Тоа е само велејќи, да, ние откривме тоа, или не, ние не го најдете. Значи, ако бројот е пронајден, се врати вистина. Па, всушност ние само го сторија тоа навистина брзо со кои една линија код. Па јас ќе се пресели таа линија на pseudocode. СТУДЕНТСКИ: Не ни треба за промена на низа? Тоа треба да биде вредности, а не вредност, нели? ЈАСОН Hirschhorn: Извини. Ви благодарам. Студент: Да. ЈАСОН Hirschhorn: Оваа линија треба да биде вредности. Точно во право. OK. Па ние сме погледна средината листа. Ако бројот се најде враќање вистина. Продолжување со нашите pseudocode, ако средината е поголем, барај лево. Па морав овде, ако бројот повисока, пребарување лево. Константин, може да ви даде мене оваа линија код? Студент: Ако вредноста на средината - ЈАСОН Hirschhorn: Значи, ако вредноста - ако отворен paren вредности заграда средината блиску заграда - Студент: е помал од вредност? ЈАСОН Hirschhorn: е помалку од. СТУДЕНТСКИ: Помалку од вредност. ЈАСОН Hirschhorn: Вредност. Па, всушност, сакате да проверете дали бројот - Жал. Ова е малку збунувачки. Но на друго место, ако бројот на средината на листа е поголема. СТУДЕНТСКИ: Ох, во ред. ЈАСОН Hirschhorn: Ќе го промени тоа. Друго, ако средината е поголем, ние сакате да пребарувате лево, во ред? И она што го правиме во внатрешноста ова ако состојба? СТУДЕНТСКИ: Може ли да се направи мала промена на состојбата, го промени друго, ако? ЈАСОН Hirschhorn: друго, ако? OK. Па овој код ќе се изврши за истото. Но убаво нешто во врска со користење ако, друго ако, друго ако, или ако, друго ако, друго значи дека само еден од оние се случува да се да се проверува, не сите три од нив, потенцијално. И дека тоа малку го прави поубаво на компјутер, кој е водење на вашата програма. Па [? Константин,?] ние сме внатре оваа линија, друго ако вредностите, заградата средината блиску заграда, е поголема од вредноста. Што треба да направите? Ние треба да се бараат на левата страна. Како го правиме тоа? Одам да ви даде почеток. Имаме овие две работи се нарекува почеток и крај. Значи она што треба да се случи на почетокот? Ако сакате да пребарувате на левата страна на листа, да добиеме нашите сегашни почеток. Што треба да го направам тоа? СТУДЕНТСКИ: Ние се постави на почетокот кон средината плус 1. ЈАСОН Hirschhorn: Значи, ако ние сме во потрага по левата страна? СТУДЕНТСКИ: За жал, средината минус - па крај ќе биде средната минус 1 и почетокот - ЈАСОН Hirschhorn: И што се случува со почеток? СТУДЕНТСКИ: Тоа останува иста. ЈАСОН Hirschhorn: Значи значење останува иста. Ако ние сме во потрага по левата страна, ние сме со користење на истите почетокот - точно во право. И крај? Жал ми е, она што го прави завршува еднаков повторно? СТУДЕНТСКИ: Блискиот минус 1. ЈАСОН Hirschhorn: Блискиот минус 1. Сега, зошто минус 1, а не само средината? Студент: Средината е надвор од слика веќе, бидејќи имавме проверено дека тоа е надвор? ЈАСОН Hirschhorn: Тоа е точно во право. Средината е надвор од сликата. Ние веќе проверен средината. Значи ние не сакаме "средината", цитат unquote, да продолжи да биде во низа, дека ние сме во потрага. Па ова е фантастично. Друго, ако вредности заградата средината е поголем од вредност завршува еднаквите средината минус 1. Џеф, она што за овој последната линија? Студент: друг. Вредности средината е помалку од вредност? ЈАСОН Hirschhorn: Ќе ти си ми даде друг. Па ако не ми даваат - Студент: Па тогаш почнуваат ќе биде средната плус 1. ЈАСОН Hirschhorn: Почнувајќи еднаквите средината плус 1, пак, за истиот причина што Константин ни даде порано. И на крајот, кој не даде мене линија од кодот уште? Враќање false, Aleha, што ние се пишува тука? СТУДЕНТСКИ: Враќање лажни. ЈАСОН Hirschhorn: Враќање лажни. И ние треба да го направи тоа, затоа што ако не го најде, ние треба да се каже не го најдете. И рековме дека си оди за да се врати bool, па ние дефинитивно треба да се врати на bool некаде. Па ајде да ја извршите оваа код. Јас сум всушност ќе - па ние сме во терминал. Ние ќе се расчисти нашиот прозорец. Да се ​​направи сите. Ние се најде таму е една грешка. Има грешка на линија 15, што се очекува запирка на крајот на декларација. Значи она што не го заборавам? Студент: Точки и запирки. ЈАСОН Hirschhorn: Точки и запирки право тука. Мислам дека тоа беше Том код. Па Том, [нечујни]. Само се шегувам. Ајде да се направи сите се повторно. Студент: Што Dropbox директориум ние треба да биде во за ова? ЈАСОН Hirschhorn: Значи можете да само да се види за ова малку. Но, повторно, ако си сакал да се помести ова HTML кодот на вашата pset3 директориум да се обиде тоа надвор, тоа е она што го направив. Ако ќе забележите тука - Жал ми е, добро прашање. [? ЛС,?] Имам тука на find.c код од оваа недела distro код. Имам helpers.h. Имам направи датотека дека јас всушност изменето малку да се вклучат овие нови додадени фајлови: ние сме пишување. Сите дека кодот ќе бидат достапни, не дистрибуција код, но новиот Направете датотека, новиот helpers.h датотека ќе бидат достапни на интернет за симнување. Повторно, така што оние се дополнителни кодови имаме. Така прават сите, по оваа линија, го прави најде, бинарни, меур избор - го прави сите три од нив и компајлира во оваа извршна код најде. Значи генерално, не сакаме да директно на check50. Ние сакаме да се кандидира на некои тестови на нашите сопствени. Но, само за да можеме да се забрза овој малку, check50 2013 pset3.find ќе помине во helpers.c-- мојот лошо. Јас немам тоа право сега. Па ние сме всушност ќе се кандидира кодот за реално. Usage.find /, знаеш што значи тоа? СТУДЕНТСКИ: Треба втор командната линија на неа. ЈАСОН Hirschhorn: Ми треба втор командната линија. И по спецификација, ми треба за да влезат во она што го барате. Значи, да погледнеме за 42. Ние ќе го задржи во подредени, затоа што не напишал функција вид досега - 42, 43, 44. И контрола на D не најде игла во haystack. Тоа е лошо. Тоа е дефинитивно таму. Ајде пробајте нешто друго. Можеби тоа е затоа што се стави тоа на почетокот. Ајде да направиме 41, 42, 43. Таму ќе одиме. Тоа ја најдов. Нека си го стави на крајот сега, само па ние може да биде темелна - 40, 41, 42. Не се најде игла. Така што споменав порано. За жал, знаев дека тоа требаше да се случи. Но, за педагошки цели, тоа е добро да го истражуваат. Тоа не функционира. Поради некоја причина, тоа не може да го најдете. Знаеме што е таму, но ние не сме ја најдат. Значи едно нешто можеме да направиме е да помине низ GDB да го најдете, но не никого, без да одите низ GDB, имаат смисла на тоа каде ние ја зезнав? [? Madu? ?] Студент: Мислам дека тоа би можело да биде кога завршува е еднаква на почетокот, и тоа е само листа еден елемент. Тогаш тоа само го игнорира наместо на всушност проверува. ЈАСОН Hirschhorn: Тоа е точно во право. Кога завршува еднаква на почеток, ние уште имаат елемент во нашиот список? Студент: Да. ЈАСОН Hirschhorn: Да, всушност, ние имаат еден и само еден елемент. И дека, најверојатно, ќе се случи кога, на кодот ние се тестираат, ние сме во пред haystack или на крајот на haystack. Тоа е каде што почетокот и крај ќе еднакви една, со бинарни пребарување. Па во тие два случаи тоа не работа, бидејќи завршува е еднаква на почетокот. Но ако завршува е еднаква на почетокот, го прави ова додека јамка изврши? Тоа не се случи. И ние би можеле да се проверат дека повторно преку gdb. Па како можеме да го надминете овој код, бидејќи кога време завршува е еднаква на на почетокот, ние исто така сакаме оваа додека јамка да се кандидира. Па што фикс може да се направи за да линија 18? СТУДЕНТСКИ: [нечујни] е поголема од или еднаков на. ЈАСОН Hirschhorn: токму во право. Додека крај е поголема од или еднаква на почетокот. Па сега, ние бидете сигурни дека да се добие дека агол случај на крајот. И да видиме. Ајде да ја извршите оваа уште еднаш. Ајде да се направи на сите. Повторно, ќе мора да се само следат заедно тука. Најди 41 на овој период. Само да го задржи во согласност. Најди 42. Ајде да го стави на почетокот - 42, 43, 44. Ние ја најдов. Така што е навистина промена ни е потребно да се направи. Тоа беше многу кодирање ние го направија бинарни пребарување. Дали некој има било какви прашања пред Јас тргнуваме во линии ние напиша во бинарни пребарување или како ние сфатиле од она што ние го дознаам? Пред да се движи, исто така сакам да истакнам дека од страна и големи, ние одбележан нашите псевдо-кодот една да еден кон нашиот код. Ние не го имаат тоа слабо нешто да дознаам со почеток и крај. Но не сте сфатиле дека надвор, ќе имаат напишано доста идентични код, освен за оние првите две линии. А потоа ќе се реализира кога сте го направиле тоа во проверки и случаи кои ви треба нешто друго. Па дури и ако ги следеше нашите псевдо-кодот линија за да линија, ќе си добиле сите, но две линии на кодот се потребни за да се напише. И јас би бил подготвен да се обложи дека вие момци сите би сфатиле дека од прилично брзо, дека е потребно да се стави некој вид на маркер таму да дознаам од каде сте биле. Дека повторно, е моќта на прави псевдо-код пред време. Така што можеме да направиме логиката прво, а потоа можеме да се грижи за синтаксата. Ја ние се збунети околу логиката додека се обидувал да ја напишам оваа кодот во C, ние би добиле сите Слободен простор. И тогаш ние ќе се прашува за логика и синтакса и meshing сите нив заедно. И ние би го добиле изгубени во она што може брзо да стане многу тежок проблем. Па ајде да се движат за сега за селекција вид. Имаме 20 минути. Па имам чувство дека нема да биде во можност да се добие преку сите селекција вид и меур вид. Но нека барем обид да заврши изборот вид. Па спроведување селекција вид користење на по функција декларација. Повторно, ова е превземена од Проблемот постави спецификација. Int вредности е голема заграда, е низа на цели броеви. И int.n е големината на таа низа. Избор вид се случува да го решите оваа низа. Така на нашата ментална модел на избор вид, ние се повлече - Прво, ние одиме преку листата првиот време, најдете најмал број, го стави на почетокот, се најде на втората Најмал број, го стави во втората позиција ако сакаме да вид во растечки редослед. Јас не сум ги принудува да се напише псевдо-кодот, токму сега. Но, пред да го направите кодот како класа во пет минути, ние ќе се обидеме да се напише псевдо-кодот, така имаме некои смисла на каде одиме. Така се обиде да напише псевдо-код на своја. А потоа се обиде да се претвори дека псевдо-код во кодот. Ние ќе го направи тоа како група во пет минути. И, се разбира, дозволете ми да знам дали имате било какви прашања. Студент: Дека тоа? ЈАСОН Hirschhorn: Види колку далеку може да се добијат во повеќе од две минути. Јас разбирам дека не ќе да биде во можност да го заврши. Но ние ќе одиме во текот на овој како група. Вие сте сите кодирање, па [нечујни], па јас сум Жал ми е да се откажеш она што го правиш. Но, ајде да одиме преку тоа како група. И повторно, бинарна пребарување, ви даде на сите мене еден ако не и повеќе линии на код. Ви благодариме за тоа. Ние ќе го прават истото тука, кодот заедно како група. Па селекција вид - нека напише некои брзи псевдо-код. На ментална модел, некој може да ми даде на првата линија на псевдо-кодот, ве молам? Што сакам да направам? СТУДЕНТСКИ: Додека листа е на ред. ЈАСОН Hirschhorn: Добро, а на листата е надвор од употреба. И она што сакаш да кажеш "на ред?" СТУДЕНТСКИ: Додека [нечујни] не се подредени. ЈАСОН Hirschhorn: Додека листа е на ред, што ќе правиме? Дај ми го втора линија, Ве молиме, Маркус. Студент: Значи се најдат на следниот Најмал број. Ова ќе биде вовлечен. ЈАСОН Hirschhorn: Па најдете на Следниот најмал број. А потоа некој друг? Откако ќе најдете на следната најмалиот број, што ќе правиме? Одам да се каже најдете најмал број. Тоа е она што ние сакаме да се направи. Па најдете најмал број. Тогаш што правиме? СТУДЕНТСКИ: [нечујни] до почетокот. ЈАСОН Hirschhorn: Молам? Студент: ставете го во почнувајќи од листата. ЈАСОН Hirschhorn: Значи ставете ја во на почетокот на листата. И она што го правиме на работа тоа беше во почетокот на листата, нели? Ние сме пребрише нешто. Па каде да се стави тоа? Да, Ана? СТУДЕНТСКИ: Каде најмалите број беше тоа? ЈАСОН HIRSHHORN: Па стави на почетокот на листата, каде што Најмал број беше. Така, додека на листата е надвор од употреба, се најде најмал број, ставете ја во на почетокот на листата, се стави на на почетокот на листата, каде што Најмал број беше. Маркус, може да ви парафразираме оваа линија додека на листата е на ред? СТУДЕНТСКИ: Додека броеви не се подредени? ЈАСОН HIRSHHORN: Добро, па со цел да Знаеме дека бројките не биле сортирани, што ние треба да направам? Колку ние треба да се поминат низ оваа листа? Студент: Значи Претпоставувам дека за јамка, или време, додека броеви проверуваат е помала од должината на листата? ЈАСОН HIRSHHORN: Добро, тоа е добро. Мислам дека misphrased моето прашање лошо. Јас бев само се обидува да добие на ние ќе мора да одат во текот на целата листа. Така, додека на листата е надвор од употреба, за мене, е тешко да се на сајтот на. Но, во основа, тоа е како Мислам дека за ова. Поминат низ целиот листа, најдете Најмал број, ставете го во почеток - всушност, во право си. Ајде двајцата стави. Така, додека на листата е надвор од употреба, ние треба да поминат низ целата листа еднаш, се најде најмал број, место тоа во почетокот на листата, се стави на почетокот од листата каде што Најмал број беше, а потоа ако листа се уште е на ред, ние сме мора да одат преку овој процесот повторно, нели? Тоа е причината зошто изборот вид, Биг-О траење на селекција кој вид, некој? Студент: N квадрат. ЈАСОН HIRSHHORN: N квадрат. Бидејќи како Маркус и јас само сфатив тука, ние ќе треба да одат преку Листата број на пати. Така минува низ нешто должина n n број пати е всушност N квадрат. Значи ова е нашата pseudocode. Ова изгледа многу добро. Дали некој има било какви прашања за pseudocode? Бидејќи всушност избор вид треба да веројатно се 12:59, кодот од pseudocode. Па било какви прашања во врска со Логиката на pseudocode? Ве молиме да го прашам сега. Избор вид - додека на листата е надвор на ред, ние ќе треба да одат преку него и да се најде најмалиот секој пат и го стави во предниот дел. Така, додека на листата е надвор од употреба, може да некој да ми даде таа линија на кодот кој не ми даде една линија на код сепак, ве молам? Тоа звучи како што? Студент: Тоа е за телефонска линија. ЈАСОН HIRSHHORN: Звучи се допаѓа за телефонска линија. Добро, може да ми даде за телефонска линија? За - Студент: i изнесува 0. ЈАСОН HIRSHHORN: Јас или - што сме ние недостасува? Она што се случува тука? СТУДЕНТСКИ: Int. ЈАСОН HIRSHHORN: Токму така. (Int i = 0; - Студент: i