JASON Hirschhorn: Welcome до три седмици, всички. Имаме трудна, но и вълнуващо раздел напред от нас. Така че, на първо място, защото ние направихме някои Headway с курса, но ние все още са много учене остава да направите, аз съм Ще ви покажа някои ресурси че трябва да бъде изключително докаже полезно, тъй като ви подход не само си проблем поставя, но също възприеме всичко на материала, ние ви даваме момчета в лекции и шорти и раздел. След това отиваме да прекарат първата 20 до 25 минути от раздел става над GDB, които вие може или не може да има се използва в този момент, но това е изключително полезен инструмент, който ще да ви помогне да коригиране на грешки в програмите. Много от вас може да използва ФОРМАТ в на средата на вашата програма, за да разбера какво се равняваше на една променлива. GDB е дори по-добре, отколкото ФОРМАТ и не прецакаш кода си, защото се движат по един изпълним файл. Така че ние ще отидем над най-полезни 10 команди, което се нуждаете за GDB, и ние сме Ще отида на едно упражнение заедно, така че в проблем зададете три и след това, вие може да се използва GDB да помогне за отстраняване на грешки Вашите програми. И накрая, ние ще разгледаме някои сортиране и търсене алгоритми че те видях в лекция, и ние сме Ще всъщност код, а не само pseudocode, но код двоично търсене, балон вид, и избор на сортиране. Така че, на първо място, искам да отида над ресурсите. Това е обширен списък, и това е по-малък шрифт, защото имах много да поберат тук. Но те не само ще ви помогне, отново, с наборите проблемни и изваряване на информация, която научих, но Определено, дойде време викторина, те ще бъде изключително полезно. Така че, на първо място, конспекти. Ако отидете в cs50.net/lectures и превъртете до конкретна седмица и ден, ще видите, че има бележки за всеки лекция, която не е просто препис, но редактирана версия на какво беше покрита с лекция с код откъси и други полезни и интересни факти. Аз силно препоръчвам става над тях. И тогава, както и, че има изходен код достъпно от всяка лекция. И отново, тези слайдове ще бъдат достъпно онлайн на адрес cs50.net/sections тази вечер. Така вторият са шортите всяка седмица, че обхващат теми, обикновено от 5 до 15 минути в дължина. И тези, които ще се надяваме да ви даде голяма грунд по различни теми. Трето - и това е съвсем нов тази години - е study.cs50.net. Ако не сте го проверява, I Силно препоръчваме да го направите. Можете да получите, за да изберете тема. В момента има десетки теми там. Така например, те взема функции. Тя ви дава някои слайдове и отбелязва на функции. Това са всъщност слайдовете, че TFS Желателно е да използвате по време на нашето презентации в раздел. Има също така съвети и трикове за справяне с функции, и има проблеми практики, които помагат работите с функции. Ние също така ще ви даде линкове към кратко върху функции и времената, които функции са дошли в лекция. Така study.cs50.net, чисто нов тази година, фантастичен ресурс. На следващо място, аз имам човек, който е на ръководството команда, която може да работи в командния ред. Така че, ако имате някакви въпроси относно команда, например, Ранд, която ние срещнали миналата седмица по време на секция и сте вероятно срещат в проблема си задава, когато става чрез генериране на код, но ако въведете мъж Ранд, вие ще получите на страницата, която всичко, което разказва за Ранд. Тя ви дава това, което е необходимо, за параметри, които предприема, както и връщане Вид и описание на животните на тази функция. Така че проверете ранда. Тя може да бъде малко по-многословен и объркващо, така че понякога аз намирам, че просто Googling това, което искам да знам е най-добрият начин да намерите отговора. Така практикуват с Google. Вземи добър в Google. Това ще стане най-добрия си приятел. Както и Google, ако не можете да го намерите на Google, cs50.net/discuss, това е дискусионния форум. Шансовете са, ако имате въпрос, една от вашите 700 + връстници също има, че въпрос и може да поиска вече в обсъждане форуми и са отговорили с него. Така че, ако имате общ въпрос или имате въпрос, който смятате, че Може би други хора биха могли да работят в посока на, проверите cs50.net/discuss. Накрая, последните две, ако искате да говори с истинско човешко същество, офис часа от понеделник до петък. Има и онлайн офис часа за студенти удължители. И на последно място, но със сигурност не на последно място, мен, удивителен знак. Вие всички трябва ми информация за контакт. Ако имаш нужда от нещо, моля никога колебайте да се свържете с мен. Винаги се чувстват свободни да го направят. Много малко от вас са ме добавен на Gchat, така че е разочароващо, но да се надяваме, че ще се промени между тази и следващата точка. Всякакви въпроси досега на ресурсите? Чудесно. И накрая, още един щепсел за обратна връзка, sayat.me/cs50. Вие може да ми даде анонимна обратна връзка за това как правя. Това беше наистина полезно миналата седмица. Имам няколко коментари от вас, момчета веднага след точка, плюс от други студенти, които го наблюдаваха през седмицата, и беше невероятно полезно. Аз отивам да се опита да ограничи моята употреба на думата "сладък", но аз ще покажа моята ентусиазъм и вълнение по други начини. Но имаше и друга допълнителна материалноправните обратни, двете плюсове и Делта. Така че, моля, давам ви момчета за обратна връзка на проблемните комплекти. Чувствайте се свободни да ми даде обратна връзка на моето учение. Аз съм тук, за вас, момчета. Чудесно. Това е всичко, което имам за първата част. Дали някой има някаква въпроса досега? И аз имам една забележка за контролния център. Студенти Extension ме оведомен казват, че не ставаш по аудио, но това е извън моята власт да се определи. Така че, да се надяваме, че получава решен скоро. Ако гледате онлайн, здравей, но не можеш да ме чуеш. Така че, на първо място, ние ще да мине през GDB. GDB, както намекна по-рано, е инструмент за отстраняване на грешки много по-добре, отколкото ФОРМАТ. Така че, за да започнете с GDB, момчета, ако който искате да отворите вашия уред и вземи файла, който съм изпращана към вас по-рано - този файл ще бъде на разположение онлайн в малко - и стартирате GDB. / името на файла. Първо, разбира се, ще трябва да компилирате подаде защото GDB работи само на изпълними файлове. Но ако някога искате да започнете GDB, първото нещо, което правиш, стартирате GDB. / Цезар. Така че това е името на програмата, ние сме Ще отида с него точно сега. Така че аз отивам да пиша направи Цезар, който ще ми даде един изпълним файл тук се подчертава в зелено. И тогава аз отивам да тичам GDB. / Cesar. И там ще отида. Вие виждате, ние имаме някакъв текст да ми кажеш за версията на GDB, ми дава някаква информация за гаранция, и след това ние има ред БВП, което изглежда сортиране на като нашата линия бърза команда, но виждате, че е отворен Paren, GDB, близки скоба. Преди да продължим и отстраняване на грешки този файл че аз изпратих на всички ви, нека да разгледаме някои полезни команди, така че имаме чувство от това, което ние ще се покрие. Тези команди са изброени тук, в ред, в който аз по принцип ги използват. Така започна моята програма, като пуснете GBD. / Име на програмата, в този случай, Цезар. И тогава първото нещо, което правя, 99.9% от времето се означава вид почивка. Това определя критичната точка на главната. По същество, какво правиш там е програмата ще спре на Основната така че можете да започнете да го разгледа линия по ред, вместо да работи през цялото път през. Вие може да се счупят в различни точки в кода си, но основният принцип е добро място да започнете. Следващата команда аз тичам се управлява. Това започва изпълнението на програмата, и ако е необходимо да въведете команден ред аргументи, вие го изпълните тази команда. Пусни с аргументи. Така че, тъй като ние преминавате версия на C, който е програмата, вие момчета пише за PSET две - това, разбира се, има някои грешки в него, че да се надяваме, че ще намерим - отиваме да тече тече с някаква команда аргументи линия, защото Цезар, както вие знаете за проблема настроите спец., отнема известно аргументи командния ред. В следващите няколко команди, а в следващия всъщност един се нарича следващия. Това ще ви отведе една линия по линия чрез вашата програма. Така удря н след това Enter ще ви отведе на следващия ред, изпълняващата предишния ред. Step не само ще ви отведе до на следващия ред, но тя ще ви отведе във функции. Така че, ако сте написали функция в кода си или, ако искате да изследвате да Аз, например, можете да натиснете и, и а не става на следващия ред на файла, който преживяваш полето Сега, вие всъщност ще се оттегли в тази функция и да видим неговия код. Списък ви показва, в много удобен за потребителя формат, на 10-те линии около където в момента са в кода си така че всъщност можете да видите файла а не да се налага да сменяте назад и назад между различни гледни точки. Print е като ФОРМАТ, както предполага неговото име. Това ви показва какво се равнява на една променлива. Информация за местните жители е наистина от полза. Това е специална версия на печат. Информация за местните жители ще ви покаже всички местни променливи, като ги отпечатва всичко за вас които са на разположение в момента. Така че като цяло, а не да се налага да разпечатате четирите променливи, че аз съм любопитно дали съм в цикъл за, за Например, аз просто пиша информация на местните жители, и това ще ми какво ми брояч аз показвам равни, както и на масива, че съм работи върху равни. И накрая, да продължи. Въвеждане на почивка ви спира в точката на прекъсване. Вие можете да ходите през линията от съответствие със следващата и стъпка. Продължи писти на програмата за следващата си прекъсне точка или до завършване, ако Няма повече точки за пробив. Disable премахва точки за пробив, ако реши на почивката в главния беше неподходящо, вие искате да го някъде другаде. И най-накрая Q, се откажат, излиза от GDB. Така че тази програма. / Caesar, ние ще да гледам през точно сега и ние възнамерявате да използвате GDB да намерите бъговете в тази програма. Тичах тази програма по-рано с Проверка на 50, и аз имам една гримаса. Всичко това е съществувал, той съставя, тя преминал много от тестовете, но за някаква причина, тя не издържа на пета тест, превръщайки BARFOO, всички капачки, в E-D-U-I-R-R, с главни букви, използване на три като ключов. Имам доста близо. Слязох от едно писмо. Така че има някаква малка грешка тук. Наблюдавал съм през моя код. Не можех да го разбера. Надяваме се, че вие ​​може да ми помогне разбера какъв е този бъг. Така че това е грешка, че сме търси. Нека да се премести в GDB. Отново, аз тичам GDB. / Цезар, така че сега сме в GDB. И това, което е първото нещо, което аз трябва да направя? Току-що влезе GDB. Някой да ми даде добър команда, за да влезете. STUDENT: Break главната. JASON Hirschhorn: Break главната. Fantastic. Да напишете, че инча Вие, момчета, може да гледате тук или следват по протежение на вашите компютри. Пробив главната, и ще видите брейк пойнт е определен на - това ми дава някакъв странен адрес на паметта, и той също ми дава номера на реда. Ако трябва да погледнем назад към този файл, Бих осъзнаят, че основната случи на ред 21. Какво трябва да тичам след това? Има течаща моята програма? Не. Така че това, което трябва да изпълните следващата? STUDENT: Run. JASON Hirschhorn: Run. Трябва ли просто да тичам, или трябва Да добавя някои други неща в? STUDENT: Стартирайте с аргумента. JASON Hirschhorn: Стартирайте с аргументите команда. И тъй като аз съм грешки много специфичен случай, че трябва да влезем в тази аргумент командния ред. Така че аз ще тичам три, което е, отново, на изхода имам от Проверка 50. Стартиране на програмата. Влизаме през няколко линии. Сега ще видите, че ние сме на ред 21. Откъде да знам, че сме на ред 21? Защото, ако се вгледате в ляво на терминален прозорец ми, там тя казва, ред 21. И това ми дава, всъщност, на код, който е в линия 21. Така че аз сбърка рано. Главна всъщност не е в ред 21. Main е няколко реда по-горе 21. Но в ред 21, това е накъде сме се счупи. Тази линия на код има Все още не се изпълнява. Това е важно. Линията виждате не е все още не е изпълнена. Това е следващата линия на код вие сте на път да се изпълни. Така на следващия ред, както вие сте вероятно са запознати с, е тази състояние, проверка, за да видим дали имам вписано аргумент от командния ред. И да съм, каква е втората част от които правиш? Какво е да го правя? STUDENT: Промяната до цяло число. JASON Hirschhorn: Моля? STUDENT: Това е промяна на аргумент цяло число. JASON Hirschhorn: Така че аз да променя арг v1 от низ в цяло число. И тогава какво го проверява? STUDENT: Ако има втори аргумент на командния ред, като изключим от изпълнението на програмата. JASON Hirschhorn: И това, което е втората половина на тази Проверка Булев израз? Тази част тук, за да го правя? STUDENT: Ако е отрицателен. JASON Hirschhorn: Уверете се, какво? STUDENT: Уверете се, че е, в действителност, положителен. JASON Hirschhorn: Точно така. Това е проверка, за да видим дали това е негативен, и ако тя е отрицателна, I имат чувство на следващия ред мощта да ми крещи на потребителя. Така че нека да удари цел да изпълни тази линия. Ние не виждаме, че линията, която момчета Може би очакваше да види крещи в потребител и след това се връщат, защото тази линия не се изпълни. Влязох 3. Така че аз съм в действителност, въведете две команда аргументи линия, и 3 е по-голяма от нула. Така че видяхме, че линия, ние изпълнена, но ние не се оттегли вътре, ако условието. Така че сега, следващия, виждам, аз съм създаване ключов Int се равнява на до аз ARG v1. Така че това е ми създава променлива ключ. Така че, ако разпечатате ключ точно сега, защото която ви позволява да видите стойност във вътрешността на променливата, ключ е равен на 47. Това е странно, но, разбира се, това е, защото аз не съм екзекутиран тази линия все още. Така че сега, ако аз хит N, изпълни тази линия, и да направим ключ печат, ключ ще е равно на 3, което е това, което ние очакваме той да се изравни. Така че отново, в GDB, на вас линия Виждам, че все още не са изпълнени. Имате право да удари п или S или няколко на други команди като наистина изпълнява тази линия. Ключов Print. Ключови размер на 3. Дотук добре. String е обикновен текст. Да се ​​изпълни тази линия. Аз съм се низ от потребител. Нека видим в моя Проверка 50, I въведете BARFOO всички капачки, така че това е, което аз ще влиза. Ако сега аз отпечатате обикновен текст. Вие ще видите, че се равнява на низ. Това ми дава някаква друга странно шестнадесетичен номер, но го прави в Всъщност се каже, че ми е низ BARFOO. Ако исках да видя какво ключ равняваше на този момент, как бих могъл да се провери ключ? STUDENT: ключ Print. JASON Hirschhorn: ключ Print, точно. И действително, има пряк път. Ако ви омръзне да пишете за печат, можете просто да напишете р. Така че ключов стр. прави същото нещо точно. И отново, виждам, че е равно на 3. Ако аз исках да разбера какво ключ както и BARFOO изравни в същото време но бях уморен от въвеждането на всяка един поотделно, I може да въведете информация на местните жители. Това ми дава ключови равни 3. Обикновен текст равнява BARFOO. Той също така ми дава тези две странни неща в началото, тази променлива и и тази променлива п. Тези, които са действително съществуваща в моята основна програма. Ние не сме ги все още срещат, но като визуализация, тези съществуват в моята за линия. Така че точно сега, те се равнява на някаква странна номера, защото те не са били Все още инициализира, но те все още съществуват в паметта, така че те са само в стаята до известна стойност боклук. Но ние виждаме в обикновен ключ текст точно там. Така че аз отивам да се изпълни този ред, линия 34, на за контур. Отиваме, за да скочи в за линия, като натиснете п. И ние сме вътре в за линия. Ние сме в първата ни проверка. И отново, те трябва нещо да потърсите запознат с теб, защото това е Програма Цезар, която е написана, но отново, има някакъв бъг. И сега, ако го направя информация на местните жители, защото съм вътре, че за линия, ще видите че аз се равнява на нула, тъй като ние очакваме. Това е, което можем да го настроите да и инициализира то в за контур. п е равно на 6. Това също има смисъл, защото ние се създаде то на strlen на обикновен текст. Така че аз обичам да правя информация на местните жители или печат да променлива често да се уверите, че всичко е винаги това, което Очаквам той да се изравни. В този случай, всичко е това, което аз очаквам тя да бъде равна. Така че нека да започне да се движи през това за цикъл. Линията аз съм на линия, е 36, ако обикновен текст, е по-голяма от и обикновен текст и е по-малка или равна на Z. Знам, че моят проблем не е с моята първа писмо, че е с второто писмо. Ако погледнем назад към Проверка 50, B отива E глоба. Взимам А и като се остави като А, не го променя до D. Така че нещо не е наред с второто писмо. Така че аз отивам да се движат там в секунда. Но ако аз исках да се провери какво обикновена текст I равняваше в този конкретен случай, аз мисля, че трябва да бъде това? Какво трябва обикновен текст I равни по този първи кръг, преминаващият за цикъл? STUDENT: Нула? JASON Hirschhorn: Обикновен текст на I? Така че тя трябва да бъде столица B. Аз, разбира се, е равно на нула, но обикновен текст скоба нула затворена скоба равнява B защото низове, както видяхме миналата седмица, са масив, така че ние сме получаване на първият знак от това. Така че отново, ако аз отпечатани обикновен текст на Аз, аз, в действителност, получаване на знака B. И това е чист, нали? Аз всъщност не са обикновен текст I. Това не е една от променливите, които изложих или инициализира, но можете да отпечатате от цяла плеяда от нещата ако искате да. Но нека да преминем през. Ако обикновен текст I е по-голяма от A и обикновен текст, е по-малко от или равно на Z, който ясно е вярно, защото ние имаме капитал Б. Отивам да тече някои команда върху него. Видяхме, че математиката миналата седмица, така че ние ще го приемаме за даденост, че тя работи право по Проверете 50. Тези къдрави скоби, първата една показа, че бях излизане от, ако състояние, а вторият показа че аз съм за излизане от цикъла. И така, сега, когато се удари На следващо място, ние ще видим ние сме обратно в за линия отново. Ние минавате за линия отново. Нека всъщност стъпка в секунда итерация на линия за и тип Информация за местните жители. Така че ние сме във втората итерация на нашата линия за. I е равно на 1, което ние очакваме. N е равно на 6, което ние очакваме. Key равнява на 3, който очакваме. И обикновен текст, ще видите, се равнява на EARFOO сега, не повече, защото BARFOO в нашата предишна итерация, Б е променено на капитала E. Така че ние сме на път да се сблъска с проблема, така че това е мястото, където отиваме да потопите в отстраняване на грешки. Но дали някой има някакви въпроси за това, което сме правили досега? Fantastic. Така че ние сме на път да се изпълни това, ако състояние, обикновен текст скоба Затворих скоба по-голяма от A и обикновен текст I по-малко от или равно на Z. Но преди Аз отивам в това, защото това е мястото, където Знам, че ми грешка е, че аз искам да подчертая от обикновен текст на I. Така че нека да сложи край на печат. Това е равно на човешкия характер, така че Изглежда, че досега всичко е добре и добро. Така че аз очаквам този ред на моята логика, тази линия трябва да бъде вярно. Това е главна буква. Но ако аз хит н, ние си даваме сметка, че това линия, в действителност, не се изпълни. Скочих надолу към друго, ако. Защо се случи това? STUDENT: Защото имате състояние на обикновен текст е по-голям от А, е равно или по-голямо от. JASON Hirschhorn: Така че аз имах обикновен текст I е по-голяма от не по-голямо от или равно на. Затова е ясно, на капитали, който не е направил предизвиква появата на това състояние, ако и ние направихме Не стъпвайте в нея, и ние направихме не направи необходимото смяна. Така че това е, всъщност. Разбрах ми бъг. Можех да се върна в моята файла източник, го смените, и го актуализира и Направете проверка 50 отново. Но ще видим, само за педагогика на саке, ако продължим. В друго, ако не изпълни или, но какво вместо равнява е командата че не се променя. Така че това не се е променило изобщо, и ако аз отпечатате обикновен текст тук, ще видим ще чрез които за линия не е, в действителност, промени това второ характер на всички. Тя все още е главна A. Така че отново, ние дебъгва нашата грешка. Дадохме си сметка, че е имало някаква логика липсва. И ние го отстранена преди време, преди всъщност изпълняващата тази линия, но вие ще сте забелязали, ако бяхме само удари Next и скочи до друго, че ако, това означава, че ако състоянието не е вярно. Не, в действителност, се резултатът очаквахме. Тогава бихме могли да са били подканени, имаше ние не е толкова проницателен, за да разгледаме че ако състоянието и проверете дали в действителност, нашето състояние трябва да направи оценка на вярно в настоящия контекст. Това е всичко за отстраняване на грешки на тази програма. Дали някой има някакви въпроси? Какво бих могъл да удари команда да се откажат от GDB? Q. И тогава ще бъдете подканени, откажат от така или иначе? Да или не. Ще удари, да, и аз ще се откажа GDB. Така че това е един бърз грунд за GDB. Всъщност, в реално сценарий, Направих това в работно време. I GDBed точна тази програма при работно време с един ученик. И ако се върнем на командите, които видяхме преди, ние използвахме почивка основната, първата нещо, което направихме. Ние използвахме тичам с аргументи от командния ред, Второто нещо, което е направил. Ние използвахме следващия много да се движат ни чрез линии. И отново, кратката версия на следващия е п. Това е в скобите в сиво на слайда. Не сме използвали стъпка, но не го направихме непременно трябва да се за този случай. Но бихме могли да го използвате в малко по-късно днес, ако ние сме отстраняване на грешки, за Например, двоично търсене, когато двоичен търсене се нарича в отделен функция, но има някаква грешка с него. Ще искам да се оттегли в призива за двоично търсене и всъщност го развенчава. Избройте ние не се използва или защото имахме добро чувство за нашия код, но ако исках да се получи усещане за това, което код I беше наоколо, аз може просто да използвате списък. Печат ние използвахме, информация на местните жители, които използвахме. Продължи ние не трябва да се използва в тази случай, нито пък трябва да се използва забраните, но ние направихме използване откажат. Отново, тези команди 10, ги практикуват. Ако сте разбрали тези десет заповеди, трябва да бъде определен за отстраняване на грешки всеки издава с GDB. Така че ние сме на път да продължи, отново, на Crux на раздел днес, става над тези сортиране и търсене алгоритми. Преди да направи това, отново, на всички въпроси, коментари, опасения за GDB? Така е всеки ще използвате GDB отколкото ФОРМАТ? Така че всеки, заради вечни времена е, всеки кима правото им на главата сега, така че аз ще ви видим в работно време и всички TFS ще можете и да видите те ще кажат, да ми покаже как да използвате GDB, и вие ще бъдете в състояние да им покаже, нали? Нещо? Може да се надяваме. Cool. Така че ние ще се премести в сортиране и търсене. Ще видиш, че има списък вече подредени за нас, но това не се случва да се случи, винаги. Така че в проблема определя спецификация за проблем зададете три, имате шорти , които можете да гледате, и тя всъщност иска от вас да гледате тези шорти. Също така в лекция миналата седмица, ние се приближи много от тези алгоритми, така че аз съм Няма да прекарват времето си в клас ще отново тези алгоритми или чертеж снимки за това как те алгоритми работят. Отново, тази информация можете да си часовник лекция, или тази информация е заловен изключително върху шортите за тези търсения, всички които са на разположение на cs50.net. Така че, вместо това, което ние ще се направите е да напишете тези програми. Имаме чувството, един мисловен модел, за това как те работят, така и това, което ще да направите е да се кодират за реално. Отиваме да се обърнат, че психичното модел, тази картина, ако щете, в действителният код. И ако ти беше малко объркан или мъглива върху психичното модел, напълно разбирам. Ние не сме всъщност ще скочи до код веднага. Така че, докато това бързо в този слайд пита можете да кодирате двоично търсене, и всъщност, един повтарящ версия на двоично търсене, първото нещо, което наистина искате да направите, е да напишете някои pseudocode. Така че имате този мисловен модел за това как двоичен търсене произведения. Извадете лист хартия, ако имате едно лесно достъпно, или отвори текстов редактор, и бих искал всеки да пише. Снемат се четири минути, за да напишете pseudocode за двоично търсене. Отново, мисля за това мисловен модел. Ще дойде наоколо, ако имате въпроси и можем да направим картината навън. Но на първо място, преди да започнем програмиране, Бих искал да напиша pseudocode за двоично търсене, така че, когато ние потопите в, имаме някаква посока като до мястото, където трябва да се отправят. STUDENT: Можем ли да приемем, масива на ценности, които получаваме вече се сортират? JASON Hirschhorn: Така че за двоично търсене да работят - отличен въпрос - вие трябва да се вземат в сортиран масив от стойности. Така че предполагам, че ще работи. Ще се върнем към този слайд. Ще видите в лилаво функцията декларация е булев binary_search Int стойност, вътр стойности, вътр п. Това би трябвало да ви изглежда познат, ако сте вече се приближи или намерила си мръсни ръце с комплекта проблем. Но това е Вашата декларация функция. Отново, няма да се налага да се притеснявате за че много в този момент. Това, което наистина искам да направя, е да вземе четириминути до pseudocode двоичен търсите, а след това ние ще отидем през които като група. И аз ще дойда на мача. Ако имате въпроси, не се колебайте свободни да вдигнете ръката си. Защо не си вземеш още две минути да завърши на pseudocode? Знам, че това може да изглежда нелепо, че ние прекарваме толкова много време за нещо, което дори не е всъщност в С, но особено за тези по- предизвикателни алгоритми и проблем комплекти, които имаме, за да разбера, започвайки в pseudocode не се притеснявате за синтаксиса, просто се притеснявате за логиката, е изключително полезно. И по този начин, вие не сте решаване на две невероятно трудни проблеми наведнъж. Ти просто се съсредоточи върху логиката, и тогава се премести в синтаксиса. OK. Нека започнем става чрез на pseudocode. Аз писах тук, двоичен търсене pseudocode. Ще напиша това на качат заедно. Или аз ще го напиша и ще даде мен указанията ми трябват. Така че, може ли някой да ми даде първата линия на pseudocode ви пише за двоично търсене? Да, Ани? STUDENT: Докато дължината на списък е по-голяма от нула. JASON Hirschhorn: Докато дължина Преглед на по-голяма от нула. И отново, ние виждаме някои C изглеждащи синтактични неща тук. Но повечето от това е на английски език. Дали някой има някаква граница, която поставя преди това в тяхната псевдо-код? STUDENT: Get масив на подредени числа. JASON Hirschhorn: Ти си написал "получи масив на сортираните числа. "според декларация функция, ние ще се минава масив на сортирани номера. STUDENT: [недоловим]. JASON Hirschhorn: So ние ще имаме това. Но да, ако ние не са имали, че ние ще трябва да се справи нашия набор от номера, защото двоично търсене работи само на сортирани масиви. Така че, докато дължината на листа е равен на нула, аз съм ще пуснат в някои фигурни скоби за да изглежда малко по-скоро като C. Но докато, изглежда върху картата докато контур, така че вътре в това, докато контур, което ни е нужно, за да направи за двоично търсене? Някой друг, който не ми даде отговори на все още, но кой е написал това? STUDENT: Отидете в средата на списъка. JASON Hirschhorn: Tom. Отиди до средата на списъка. И въпрос на последващи действия, какво ще правим, след като ние сме в средата на списъка? STUDENT: Направете проверка дали това е броя, което търсите. JASON Hirschhorn: Отлично. Отидете в средата на списъка и проверете ако нашата стойност е там - фантастично. Дали някой има нещо друго това беше по-различно от това? Това е точно така. Първото нещо, което правим в двоично търсене е да отидете до средата на списъка и проверка, за да видим дали нашата стойност е там. Така че предполагам, че ако нашата стойност е там, какво ще правим? STUDENT: Връщаме нула [недоловим]. JASON Hirschhorn: Да, ако ни стойност е там, ние го намерихме. Така че можем да кажем някакъв начин, но това функция се дефинира, да кажем на потребителя ние го намерихме. Ако не е там, обаче, че е когато това стане трудно. Така че, ако той не е там, някой друг, който работех върху двоично търсене или е една идея сега, какво ще правим? STUDENT: Въпрос. JASON Hirschhorn: Да? STUDENT: вече подредени Дали масива? JASON Hirschhorn: Да, ние приемаме, масива вече е сортиран. УЧЕНИК: Значи тогава ще трябва да се провери дали стойността, която виждате, е по-голяма от стойността, която искате, можете да преместите до средата на другата половина. JASON Hirschhorn: Така че, ако по средата на списъкът е по-голямо от това, което сме търсите, тогава ние какво? Движим се къде? STUDENT: Вие искате да преместите половината от списъка с номера по-ниски от това. JASON Hirschhorn: Така че ние ще наричаме това ляво. Така че, ако средата е по-голяма, можем да търсим лявата половина на списъка. И тогава от търсене, което мога да кажа от търсене? STUDENT: [недоловим]. JASON Hirschhorn: Отиваме в средата. Ние всъщност се повтаря това нещо. Връщаме се обратно през нашата линия, докато. Аз ще ви дам един последен - друг, ако средата е по-малко от това, което ние, какво правим тук? STUDENT: Отиди надясно. JASON Hirschhorn: Търсене правото. Това изглежда добре, но някой има нищо, че ние може да липсва или нещо друго, което ще ви постави във вашата псевдо-код? Така че това е, което имаме досега. Докато продължителността на списъка е по-голяма от нула, ние ще отидем до средата на списъка и проверите дали нашата стойност е там. Ако средата е по-голям, ние ще търси наляво, иначе, ако средата е по-малко, отиваме да се търси в правото. Така че всички ние сме имали близки отношения с термините, които използваме в областта на компютърните науки и инструментите, с които разполагаме. Но ти вече ще забележите, бяхме говорейки на английски, но ние открихме много неща, които сякаш картата, за да инструменти, които имаме в нашата кодиране комплект инструменти. Така правото на разстояние бухалката, ние не сме Ще действително код Все още. Какво виждаме тук на английски, че карти към неща, които могат да пишат на C? STUDENT: Докато. JASON Hirschhorn: Докато. Така че това, докато тук карти на това, което? STUDENT: A докато контур. JASON Hirschhorn: A линия, докато? Или може би, по-общо, една линия. Искаме да направим нещо отново и отново. Така че ние ще се кодират една линия. И ние вече знаем, защото сме направили това няколко пъти и ние има изобилие от примери там, как всъщност да пиша този индекс за една линия. Така, че трябва да бъде доста лесно. Ние трябва да бъдем в състояние да се получи, че започна доста бързо. Какво друго, което виждаме тук? Какви други структури синтаксиса, нещата че ние сме запознати с в C, което правим вече има чувство за Based на разстояние от думите, които се използват? Да, Ана? [Недоловим] Шегувам се. Anna, давай напред. STUDENT: Ако и друго. JASON Hirschhorn: Ако и друго - точно тук. И така, какво тези прилича? STUDENT: An ако друго изявление. JASON Hirschhorn: Да, условия, нали? Така че ние вероятно ще трябва да напиша няколко условия. И отново, макар и може би объркващо в на първо място, ние обикновено имат чувство сега за това как да пиша условия и синтаксиса за условия. И ако ние не го направим, ние просто погледнете нагоре по синтаксис за условия, нарязани и паста това, защото ние знаем, трябва условие тук. Всякакви други неща, които виждаме, че картата върху неща, които може да се наложи да се направи в C? Да, Aleha? STUDENT: Това може да е очевидно, само с проверка, ако стойност се равнява на нещо. JASON Hirschhorn: Е, как да проверяваме и - така отивам до средата на списъка и проверете дали нашата стойност е там? Как да го направим, че в C? Какво е синтаксиса за това? STUDENT: равни, равни. JASON Hirschhorn: равни, равни. Така че тази проверка е най-вероятно ще да бъдат равни, равни. Така че ние ще знаем, че имаме нужда от някъде. И всъщност, просто в него писмено, ние виждаме тези други неща. Ние ще трябва да се направят някои оператори за сравнение в там - фантастично. Така че всъщност прилича, и от голям, ние не са писали Думата на C код Все още. Но ние имаме психическо модел надолу чрез лекции и тези шорти. Писахме псевдо-код като група. И вече, ние имаме 80%, ако не 90% от това, което ние трябва да направим. Сега, ние просто трябва да се кодира това, което отново е нетривиален проблем за решаване. Но поне сме заседнали на логиката. Най-малко сега, когато отидем в работно време, Мога да кажа, че знам какво ми трябва да се направи, но може да ви напомня, ме на синтаксиса? Или дори, ако работното време са претъпкани, вие Може ли Google за синтаксиса, а не да се залепи върху логиката. И отново, вместо да се опитва да реши логиката и проблемите всички синтактични наведнъж, често е много по-добре да прекъсне тези два твърди проблеми разстояние в две по-лесно управляеми хора и да направим псевдо-код и след това код в C. Така че нека да видим какво направи за псевдо-код преди време. Докато продължителността на списъка е по-голяма от нула, погледнете в средата на списъка. Ако намери брой върнати вярно, в противен ако номер по-голям, търсене отляво. Иначе ако номер ниска, търсене Добре, връщане фалшиви. Така че, който изглежда почти идентичен, ако не почти идентичен с това, което сме написали. Всъщност, Том, какво ти каза първо, счупи по средата на списъка и ако брой намерени в два отчета е всъщност това, което направих. Аз ги комбинира там. Трябваше да послушам вие за първи път. Така че това е псевдо-код, което имаме. Ако искате да сега, съжалявам, отидете върнем към първоначалния проблем. Нека код binary.c. Така приложи един повтарящ версия на двоично търсене с помощта на следното декларация функция. И не е нужно да копирате го надолу, просто все още. Аз всъщност ще се отвори ей тук binary.c. Така че там е декларацията на функцията в средата на екрана. И ще видите, взех псевдо-кода от по мои страни, но почти идентичен на това, което ние написахме, и сложи това в за вас. Така че сега, нека да вземем пет минути да се кодира тази функция. И отново, ако имате някакви въпроси, вдигнете ръката си, да ме уведомите, аз ще дойде наоколо. STUDENT: [недоловим]. JASON Hirschhorn: Така че аз взех двоичен определение търсене в Горе, на ред 12. Това е, което аз имам за моя слайд. И след всичко това псевдо-код аз просто копирате и поставили от слайда псевдо-код пързалка. Аз все още не чувам [недоловим]. Така че, ако сте приключили с вашето изпълнение, аз искам да го проверя. Аз ви емайл файла helpers.h по-рано в този клас. И това ще бъде на разположение онлайн, както и за изтегляне на хората, които гледат забави този път раздел. И аз просто използва родовото разпределението код от pset3. Тогава взех find.C, използвайте ми helpers.h файл а от файла helpers.h който е даден в кода на разпределение. И аз трябваше да направи една друга промяна в find.C-скоро, отколкото да поставят просто търсене, обадете binary_search. Така че, ако искате да тествате вашия код, Знам, че това е начинът да го направя. В действителност, когато ние ще се работи този код точно сега, аз просто направи копие на ми pset3 директория, отново, разменят файловете на помощници и след това става ясно, че промените в find.C да се обадя binary_search а не просто да се търси. JASON Hirschhorn: Да. Имате въпрос? STUDENT: Nevermind. JASON Hirschhorn: Не се тревожете. Е, нека да започнем. Ние ще се кодира това като група. Една друга бележка. Отново, това е, може лесно да се разменят в за Проблем Set Three. Имам си helpers.h файл, който по-скоро от helpers.h не ни дават, декларира, двоично търсене, балон сортиране, сортиране и подбор. И в find.c вие ще забележите, он-лайн, какво е това, линия 68, което наричаме двоичен търсене, а не търсене. Така че отново, кодът, който е наличен онлайн или код, който сте създаване точно сега може лесно да се разменят в комплект 3 стр. за да го проверите. Но първо, нека да кодира двоично търсене. Нашата декларация функция, ние връща булев. Ние приемаме цяло число, наречено стойност. Ние приемаме масив от цели числа нарича стойности, и ние се п бъде размера на масива. На ред 10, точно тук, имам рязък включва stdbool.h. Някой знае ли защо е там? Е, какво значи тази линия на код правим? STUDENT: Тя ви позволява да използвате тип булев замяна. JASON Hirschhorn: Точно така. STUDENT: Или това е библиотека, която позволява за използване на вида булев замяна. JASON Hirschhorn: Така че рязкото включва stdbool.h Онлайн ми дава някои дефиниции и декларации за неща че ми е позволено да се използва в тази библиотека. Така че сред тези, които се казва, че там е този вид, наречен булев, и може да бъде вярно или невярно. Така че това е, което прави тази линия. И ако аз не са имали тази линия, бих получите в беда за написването на тази дума точно тук, булев, точно там. Точно така. Така че аз трябва, че в този код. OK. Това отново е итеративен версия, а не рекурсивно една. Така че нека да започнем. Да започнем с това първо линия на псевдо код. И да се надяваме, ние ще - или да не се надяваме. Ние ще тръгнем из стаята. Ще отидем ред по ред, и аз ще ти помогна сте наясно с линията, която ние трябва да напише първото. Така че, докато дължината на списък е по-голяма от нула. Да започнем в предната част. Какво ред да пиша тук, в код? STUDENT: Докато скоби п е по-голяма от 0. JASON Hirschhorn: Докато п е голяма от 0. Така че п е размера на списъка и ние сме проверка, ако - [вмъкване VOICES] JASON Hirschhorn: - Моля? STUDENT: Откъде да знаем, че п е размера на списъка? JASON Hirschhorn: Съжалявам. Per спецификация PSET, търсенето и функции за сортиране, което трябва да пиша, п е размера на списъка. Забравих да поясня, че тук. Но да. п е размера на списъка, в този случай. Така че, докато п е по-голяма от 0. OK. Това може да се окаже малко по-проблематично все пак, ако нещата продължават. Защото ние ще продължим да се знае размер на списъка през този функция, но казват ние започнем с набор от пет числа. И ние преминаваме през и ние сме сега го свива до набор от две числа. Кои две числа е, че? Размерът му е 2 сега, че ние искаме да погледнете, но които 2 е това? Това прави ли смисъл на този въпрос? OK. Аз ще го попитам отново. Така че ние започнем с този масив от 5 числа, и п е равно на пет, нали? Ще преминете през тук. ние най-вероятно ще се промени размера, Добре, тъй като нещата продължават. Кое е това, което казваме ние искаме да направим. Ние не искаме да търсите пълния нещо отново. Да предположим, че ние го смените с две. Ние взимаме половината от списъка, че е странно. Така че просто изберете 2. Така че сега п е равно на 2. Извинявам се за бедните сухо изтриване маркери. Нали така? И ние търсене чрез списъка отново със списък на размер 2. Е, нашият масив е все още на размер 5. Ние казваме, че искаме само да търси две места в него. Така че, който две петна са тези? Това прави ли смисъл? Те ли са останали две места? Дали са правилни две места? Дали са средните две места? Ние сме разбити проблема надолу, но ние всъщност не знам коя част от проблема ние сме все още гледаш, само от наличието на тези две променливи. Така че ние се нуждаем от малко повече след това, а п е по-голяма от 0. Ние трябва да знаем, когато този п е в реалното ни масив. Същото прави и някой има смените с тази линия? Повечето от тази линия е съвсем верен. Има ли друг освен? Можем ли да разменим нещо за да п направи тази линия е малко по-добре? Мм-хм? STUDENT: Може ли да се инициализира променлива като неговата дължина до п, че след това ще се използва по-късно във функцията? JASON Hirschhorn: Така се инициализира променлива дължина п, и ние използваме това по-късно? Но тогава ние просто актуализира дължина и ние все още тече в този проблем, когато ние намали продължителността на нашия проблем, но никога не знаем къде, всъщност, тази дължина карти върху. STUDENT: Това не е ли щеше да се случи по-късно, когато искате да кажете, търсене на ляво, търси нали? Ще отида в друга площ на вашия - JASON Hirschhorn: Отиваме да отидете до зона, но как можем да знаем които трябва да отидат за? Ако имаме само масива и това н, как можем да знаем къде да отидете в масива. В гърба, нали? STUDENT: Имате ли, като, по-ниска граница и горна граница променлива или нещо подобно? JASON Hirschhorn: OK. Така че това е още една идея. Вместо просто следене на размер, ние следим по-ниската и горна граница променлива. И как ще се изчисли размера от долна граница и горна граница? [вмъкване VOICES] JASON Hirschhorn: изваждане. А също и следенето на по-ниската и горна граница, за да споделите с нас, ние се търсят тези двамата? Дали сме търси тези две тук? Дали сме търсите средната две? Вероятно не Близкия два, защото това, в действителност, е двоично търсене. Но сега ние ще бъдем в състояние да получи размера, но също и ограниченията на масива. По същество, ако имаме нашия гигант телефонния указател, ние го разкъса на две. Ние вече знаем, че когато по-малък телефонния указател е. Но ние не сме наистина чудесен телефонния указател на половина. Ние все още трябва да знам къде е нови граници на нашия проблем е. Дали някой има някакви въпроси за това? Да? STUDENT: Бихте работи чрез създаване на променлива, аз, че вие ​​тогава просто смени позицията на I в сравнение с неговия текущата позиция и дължина, N? JASON Hirschhorn: И това, което е, аз? STUDENT: Като че ли е подобно нещо - Както бихте се инициализира и да бъде средна позиция на масива. И тогава, ако стойността на позицията, която съм в средата на масива в установено бъде по-малка от стойността, което трябва, аз сега става дължината на масива, плюс стойността на I, разделена на две. Подобно, вижте, вие се измести I - JASON Hirschhorn: Точно така. Студентът: - до - JASON Hirschhorn: Така че аз съм почти положително, че ще работи. Но точка е, имате нужда от две парчета от информация тук. Можете да го направите с начало и край, или можете да го направите с размер, а след това някои маркер. Но нали трябва две парчета на информацията тук. Вие не можете да получите, като само с едно. Има ли, че има смисъл? Така че ние ще преминем, и ние ще направим [недоловим] и да се създаде някои маркери. И какво пишете в кода си? STUDENT: Току-що каза, вътр граница един е равен на 0. JASON Hirschhorn: Да се ​​обадим че Int, като се започне. STUDENT: OK. JASON Hirschhorn: Това прави повече смисъл за мен. И? STUDENT: казах, аз предполагам, ПНА приключва. JASON Hirschhorn: INT край. STUDENT: Предполагам, п минус 1, или нещо подобно. Като последният елемент. JASON Hirschhorn: Значи вие сте написали, вътр започващ равна на 0, точка и запетая, и вътр край е равен н минус 1, точка и запетая. Така че по същество, какво правим Оттук 0 първото положение. А както знаем, в масиви, те не трябва да излизат до N, да отидат до п минус 1. Така че ние имаме някои граници на нашия масив. И тези първоначални граници се случи да бъде първоначалните границите на нашия проблем. OK. Така че, това звучи добре. Тогава, ако се върнем към тази линия, докато дължина на списък е по-голяма от 0, това, вместо N, трябва ние поставяме тук? STUDENT: Напишете приключва минус начало. JASON Hirschhorn: Докато приключва минус начало е по-голяма от 0? OK. И бихме могли, ако искаме да направи, че малко по-хубав, какво друго можехме да направим? Ако искахме да почистите този код се малко? Как можем да се отървем от 0? Това е просто въпрос стил. Това е правилният точно сега. STUDENT: Ending не равно начало? JASON Hirschhorn: Ние можем да направим това, което? [вмъкване VOICES] STUDENT: Ending е по-голяма? JASON Hirschhorn: Да. Ние можем просто да направите, докато приключва е по-голяма от начало. Точно така. Ние добавихме започващ от другата страна на това, и ние се отървах от 0. Така че това просто изглежда Малко по-чист. OK. Така че, докато дължината на списъка е 0, писахме че, докато край е по-голяма от началото. Отиваме да се сложи в нашата необходимо фигурните скоби, а след това първото нещо, което искаме да направим е да погледнем в ги в един малък списък. Вие? Можеш ли да ми дадеш - STUDENT: Ако скобите стойност квадратна скоба - JASON Hirschhorn: Ако скоби стойност квадратна скоба. STUDENT: Ending, разделено на две. JASON Hirschhorn: Прекратяване? STUDENT: Виждам проблем с - JASON Hirschhorn: OK. Ами, погледнете в средата. Откъде знаем, че това, което е средата? Да. Така че нека да изтриете този код. Откъде знаем, че това, което е средата? В нищо, когато имате началото и накрая, как да намерите средата? STUDENT: Можете средно. STUDENT: Можете да ги добавите заедно и след това - JASON Hirschhorn: Добавете ги заедно и след това? Студентът: А ти средно. Разделете го на две. JASON Hirschhorn: Добавете ги заедно и разделете на две. Така вътр средна равнява? Том, ти може да ми го дадеш? STUDENT: Започвайки плюс завършващ - JASON Hirschhorn: Началото плюс приключва. STUDENT: All, скоби, разделено на две. JASON Hirschhorn: All, в скоби, разделена на две. Така че това ми дава средата от нищо, нали? STUDENT: Можете също така трябва да го закръглят. JASON Hirschhorn: Това, което правиш да кажа, че трябва да го закръгли в посока нагоре? [вмъкване VOICES] STUDENT: Защото, ако е нечетно номер, след това е като - JASON Hirschhorn: Е, OK. Така че бих могъл да го закръгли в посока нагоре. Но ако е нечетно число, 5, мога като една далеч от центъра. Или ако е четно число, по-скоро, че е по-добър случай. Ако е 4, имаме само 4, мога да взема първата "средата", цитат, край на цитата или втората "среден" един. Или ще работи за двоично търсене, така че аз всъщност не трябва да го закръглят. Но има и едно друго нещо, което трябва да погледнем в тази линия. Ние може и да не го осъзнаваш още, но ние ще се върнем към него. Поради тази линия всъщност все още се нуждае от едно друго нещо. Но до този момент, ние сме писмено четири реда код. Имаме нашето начало и завършва маркери. Ние имаме нашата линия, докато, който преобразува на директно в нашия pseudocode. Търсим в средата, който съпоставя директно върху нашето pseudocode. Бих казал, че това отива на средата на списъка, тази линия на код. И тогава, след като отидете в средата на списъка, следващото нещо, което трябва да направим се провери дали нашата стойност е там за на pseudocode писахме по-рано. Е, как да проверим дали нашият стойност е в средата на списъка? You. Защо не можете да направите това? STUDENT: Ако нашата стойност е в средата е равна каквото и да настроите - Искам да кажа, равна, равна на - JASON Hirschhorn: It - OK. STUDENT: Аз не съм сигурен какво променлива търсим за все пак, е така, защото - [вмъкване VOICES] STUDENT: [недоловим]. JASON Hirschhorn: Точно така. Per декларацията на функцията, търсим стойност. Така че ние сме в търсене на стойност в масив от стойности. Значи ти си точно така. Вие ще направите, ако скоба отворена Paren стойност средна затворена скоба равни се равнява на стойността, а вътре има какво трябва да направим? Ако нашата стойност е там, какво ние трябва да направим? [вмъкване VOICES] STUDENT: Завръщане нула. JASON Hirschhorn: Завръщане вярно. STUDENT: Завръщане вярно. JASON Hirschhorn: Michael, Какво означава тази линия направя? STUDENT: [недоловим] програмата е свършила курса си, и че е свършила, и вие сте това, което трябва да направите? JASON Hirschhorn: Програмата или какво? В този случай? STUDENT: Функцията. JASON Hirschhorn: Функцията. И така, за да се върнете към каквото нарича него и да го даде на стойност, вярно. Точно така. Main. Какъв е типът връщане на главната, Майкъл? STUDENT: INT, число? JASON Hirschhorn: INT, точно така. Едно цяло число. Това беше просто въпрос да се уверите, момчета са били на върха на него. Какво обикновено се върне, ако всички неща, които работят добре? STUDENT: Нула. JASON Hirschhorn: Нула. Точно така. STUDENT: Ако това се връща истина, че няма информация, подавана за това, което - О, това е просто казвам, че това стойност е вътре в масива. JASON Hirschhorn: Точно така. Тази програма не дава информация къде точно е стойността. Това е само казвам, да, ние открихме, това, или не, ние не го намери. Така че, ако намери брой, върнете вярно. Ами, всъщност ние що го направих, че наистина бързо с това един ред код. Така че аз ще се преместя, че линия на pseudocode. Студентът: Не се нуждаем от за промяна на масива? Тя трябва да е ценности, а не стойност, нали? JASON Hirschhorn: Съжалявам. Благодаря. Студентът: Да. JASON Hirschhorn: Тази линия трябва да бъде стойности. Точно така. OK. Така че ние сме погледна средната списъка. Ако брой намерени връщане вярно. Продължавайки с нашия pseudocode, ако средната е по-голямо търсене на ляво. Така че аз трябваше тук, ако номер по-висока, търсене наляво. Константин, може да ви даде мен тази линия на код? STUDENT: Ако стойността на средната - JASON Hirschhorn: Така че, ако стойност - ако са отворени Paren стойности скоба средната близо скоба - STUDENT: Има по-малък от стойността? JASON Hirschhorn: Има по-малко от. STUDENT: По-малко от стойността. JASON Hirschhorn: Value. Ами, всъщност, вие искате да проверите дали броят - Извинете. Това е малко объркващо. Но иначе, ако числото в средата на списъка е по-голяма. STUDENT: О, OK. JASON Hirschhorn: Ще променим това. Иначе, ако средната е по-висока, ние искате да търсите ляв, OK? И какво ще правим вътре ако това състояние? STUDENT: Мога ли да направя една малка промяна условието, променете го на друго, ако? JASON Hirschhorn: Else ако? OK. Така че този код ще се изпълни за същото. Но хубаво нещо за използването, ако, в противен ако, иначе, ако или ако, в противен случай, в противен означава, че само един от тези, които ще се да бъдат проверени, не всички три от тях, потенциално. И това го прави малко по-прави по-хубав на компютъра, който е използвате вашата програма. Така [? Константин,?] ние сме вътре в този ред, в противен случай, ако стойностите, скоба средната близо скоба е по-голяма от стойността. Какво трябва да направим? Ние трябва да се търси в ляво. Как правим това? Ще ви дам един старт. Ние имаме тези две неща наречени начало и край. И така, какво трябва да се случи към началото? Ако искате да търсите в ляво на списък, ние получаваме ток нашето начало. Какво ни е нужно да го направя? STUDENT: Ние поставяме началото до средата плюс един. JASON Hirschhorn: Така че, ако ние сме търсене в ляво? STUDENT: Съжаляваме, на средна минус - така че краят ще бъде средната минус 1 и начало - JASON Hirschhorn: И това, което се случва в началото? STUDENT: Тя остава същата. JASON Hirschhorn: Така че смисъл остава същата. Ако ние сме търсене отляво, ние сме като се използва същият началото - точно така. И край? За съжаление, това, което прави завършващ равен отново? STUDENT: Middle минус 1. JASON Hirschhorn: Middle минус 1. Сега, защо минус 1, а не само средната? STUDENT: Средата е вън от представям вече, защото имахме проверено, че тя е навън? JASON Hirschhorn: Това е точно така. Средата е извън картинката. Ние вече проверява средата. Така че ние не искаме "по средата", цитат край на цитата, да продължи да бъде в масив, който ние търсим. Така че това е фантастично. Иначе, ако стойностите на средна конзола е по-голяма от стойността приключва равни средна минус 1. Джеф, какво да кажем за този последния ред? STUDENT: Else. Стойности средната е по-малко от стойността? JASON Hirschhorn: Ще ти ми даваш друго. Така че, ако не ми дадеш - УЧЕНИК: Значи тогава започваше ще бъде средната плюс един. JASON Hirschhorn: с начало равни средната плюс 1, отново за същите причина, че Константин ни даде по-рано. И на края, който не е дал ме линия на код Все още? Връщане фалшиви, Aleha, какво да пишем тук? STUDENT: връщане фалшиви. JASON Hirschhorn: връщане фалшиви. И ние трябва да направим това, защото, ако ние не го намери, ние трябва да кажем, не го намери. И ние казахме, че ще се върне булев, така че ние определено трябва да се върне един булев някъде. Така че нека да изпълня този код. Аз всъщност ще - така че ние сме в терминала. Ще изчистите нашия прозорец. Нека направим всички. Ние открихме, че има една грешка. Има една грешка на ред 15, който се очаква точка и запетая в края на декларация. Така че какво да забравя? STUDENT: Точка и запетая. JASON Hirschhorn: Точка и запетая чак до тук. Мисля, че това е код на Том. Така че, Tom, [недоловим]. Шегувам се. Да се ​​направи всичко отново. STUDENT: указател Какво Dropbox трябва да бъде за това? JASON Hirschhorn: Така че можете да просто гледам за този бит. Но пак, ако искате да преместите този код в pset3 директория да се опита то навън, това е, което аз направих. Ако вие ще забележите, тук - Съжалявам, добър въпрос. [? LS,?] Имам тук кода find.c от дистрибуции код тази седмица. Имам helpers.h. Имам файл производител, че аз всъщност редактиран малко, за да ги включи нов файлове Пишем Ви. Всичко на този код ще бъде на разположение, не кода за дистрибуция, но новите Направете файл, новият helpers.h файл ще бъде на разположение онлайн за изтегляне. Отново, така че тези, които са най- допълнителни кодове, които имаме. Така че направи всичко, за тази линия, прави се намери, двоичен, подбор балон - марки всички три от тях и съставя в този изпълним код находка. Така че, като цяло, ние не искаме да направо check50. Ние искаме да направим няколко теста на нашия собствен. Но само за да можем да ускорим това малко, check50 2013 pset3.find ще премине в helpers.c-- ми лошо. Аз нямам това право сега. Така че ние всъщност ще стартирате код за реално. Usage.find /, знаеш ли какво означава това? STUDENT: Имате нужда от втори командния ред върху него. JASON Hirschhorn: Имам нужда от втори команден ред. И според спецификациите, имам нужда да въведете това, което търсите. Така че нека да погледнем за 42. Ние ще го запази в сортираните, защото ние все още не написал функция вид - 42, 43, 44. И Control D не намери игла в купа сено. Това е лошо. Това определено е там. Нека да опитаме нещо друго. Може би това е, защото аз слагам то в началото. Нека да направим 41, 42, 43. Ето. Това го намерих. Нека си го сложи в края сега, просто така че ние можем да бъдем изчерпателни - 40, 41, 42. Не намерихте иглата. Така че аз споменах това по-рано. За съжаление, аз знаех, че това щеше да се случи. Но за педагогически цели, това е добре, за да го изследват. Тя не работи. По някаква причина, той не може да го намери. Ние знаем какво има вътре, но ние не го намери. Така че едно нещо, което може да направите е да отидете през GDB да го намери, но прави никого, без да минава през GDB, имат усещане за това къде ние сгафил? [? Маду? ?] STUDENT: Мисля, че това може да бъде, когато приключва е равна на началото, и това е просто списък с едно-елемент. След това просто го игнорира, вместо действително да го проверява. JASON Hirschhorn: Това е точно така. Когато край равнява начало, което правим все още има елемент в нашия списък? Студентът: Да. JASON Hirschhorn: Да, в действителност, ние да има един и само един елемент. И това най-вероятно ще се случи, когато, на кода, който тествахме, ние сме в пред купа сено или при края на купа сено. Това е мястото, където започва и край ще се равнява един, с двоично търсене. Така че в тези два случая, той не работи, защото приключва била равна начало. Но ако завършващ е равен на началото, прави това, докато контур изпълни? Той не го прави. И бихме могли да се проверява че отново през GDB. И така, как можем да се определи този код, защото когато, докато приключва е равна на начало, ние също искаме това линия, докато се изпълнява. И така, какво можем да направим корекция на ред 18? STUDENT: [недоловим] е по-голяма от или равно на. JASON Hirschhorn: Точно така. Докато край е по-голяма от или равна на началото. Така че сега, ние се уверете, че да се получи, че ъглов случай в края. И нека да видим. Нека да стартирате тази още един път. Нека да направим всичко. Отново, ще трябва просто да следват заедно тук. Намерете 41 и този път. Само не го последователна. Намерете 42. Нека си го сложи в началото - 42, 43, 44. Намерихме го. Така че наистина е промяната ние трябваше да се направи. Това беше много кодиране ние що го направих, двоично търсене. Дали някой има някакви въпроси, преди да Аз се движат по линии в писахме в двоично търсене или как сме измислили от това, което ние го разбера? Преди да продължим нататък, аз също искам да подчертая , че като цяло, ние картирани нашата псевдо-код един до един върху нашия код. Ние нямахме, че трудно нещо да разбера с начало и край. Но ако не бяхте го разбрал, вие би написал почти идентичен код, с изключение на тези първите две линии. И тогава щеше да реализира, когато го направи в проверки и дела, които имате нужда от нещо друго. Така че, дори ако беше следвана ни псевдо-код линия до линия, щеше да намерила всички, но две линии на код, който е необходимо да се напише. И аз ще бъда готов да се обзаложи, че вие, момчета, всичко би го разбрал доста бързо, че ви е необходимо да се сложи някакъв маркер там, за да разбера къде сте били. Това отново е силата на това псевдо-код преди време. Така че ние можем да направим логиката на първо място, а след това ние може да се тревожи за синтаксиса. Ако бяхме били объркани за логиката докато се опитва да пиша този код в C, щяхме да сме придобили всички побъркани. И тогава щяхме да се задават въпроси за логика и синтаксис и съчетаването всички тях заедно. И ние би намерила изгубената в това, което може бързо да се превърне в много труден проблем. Така че нека да преминем сега за избор на сортиране. Имаме отляво в 20-та минута. Така че аз имам чувството, че няма да бъде в състояние да се през всички подбор на сортиране и балон вид. Но нека ни най-малко опит да завърши избор на сортиране. Така приложи избор на сортиране, като се използва следната декларация функция. Отново, това е взето от проблем зададете спецификация. Int ценности е скоби, е набор от числа. И int.n е размерът на този масив. Избор на сортиране се случва да сортирате този масив. Така че на нашия мисловен модел на подбор сортиране, ние издърпайте - на първо място, ние преминаваме през списъка на първа време, да намерите най-малкото число, го постави в началото, намерете втора Най-малкият номер, я оплете в втората позиция, ако искаме да подреди във възходящ ред. Не насилвам да пиша псевдо-код точно сега. Но преди да направи кода като клас в пет минути, ние ще напишем псевдо-код, така че ние имаме някакъв смисъл на къде отиваме. Така че се опитват да пишат псевдо-код по своему. И след това се опитват да се обърнат, че псевдо-код в код. Ние ще направим това като група след пет минути. И разбира се, да ме уведомите, ако имате някакви въпроси. STUDENT: Това ли е? JASON Hirschhorn: Виж колко далеч може може да получите в още две минути. Разбрах, че няма да да бъде в състояние да завърши. Но ние ще отидем над това като група. Всички сте кодиране така [недоловим], така че аз съм Съжалявам за пауза това, което правиш. Но нека да мине през това, като група. И отново, двоично търсене, всичко, което даде ми един, ако не и повече реда код. Благодаря ти за това. Ние ще направим същото нещо тук, код заедно като група. Така че избора на сортиране - нека пишат някои бързи псевдо-код. Per мисловен модел, някой може да ми даде на първа линия на псевдо-код, моля? Какво искам да направя? STUDENT: Докато списъка не е на ред. JASON Hirschhorn: OK, докато списъкът е в ред. И какво искаш да кажеш с "извън цел?" STUDENT: Докато [недоловим] не е сортиран. JASON Hirschhorn: Докато списъка не е на ред, какво ще правим? Дай ми на втора линия, моля, Marcus. УЧЕНИК: Значи намерите следващия Най-малкият номер. Това ще бъде разчленена. JASON Hirschhorn: Значи намерите Следващата най-малкия номер. И тогава някой друг? След като се намери следващата по-малка номер, какво ще правим? Отивам да кажа намерите най-малкото число. Това е, което искаме да правим. Така че намери най-малкото число. Тогава какво ще правим? STUDENT: [недоловим] в началото. JASON Hirschhorn: Моля? STUDENT: Поставя се в началото на списъка. JASON Hirschhorn: Така го поставете в началото на списъка. И какво ще правим с нещо която е била в началото на списъка, нали? Ние сме презаписване нещо. Е, къде да сложим това? Да, Ана? STUDENT: Къде най-малките брой е бил? JASON HIRSHHORN: Така че постави началото на списъка когато малкият брой е бил. Така че, докато списъкът е в ред, намерете най-малкото число, поставете го в началото на списъка, поставете началото на списъка, когато малкият брой е бил. Marcus, можеш ли да перифразирам тази линия докато списъкът не е на ред? STUDENT: Докато цифрите не са подредени? JASON HIRSHHORN: ОК, така, за да се Знам, че цифрите не са били подредени, какво трябва да направим? Колко имаме нужда да проверете този списък? STUDENT: Така че аз предполагам, че за линия, или докато, докато номера проверяват е по-малко от дължината на списъка? JASON HIRSHHORN: Добре, това е добре. Мисля, че misphrased въпроса ми лошо. Просто се опитвах да стигна до ние ще трябва да отидете през целия списък. Така че, докато списъкът е в ред, за мен е трудно да се картата на. Но общо взето, това е начина, Мисля, че за това. Минете през целия списък, намерете Най-малкият номер, го поставете в Начало - всъщност, прав си. Нека да ги сложи и двете. Така че, докато списъкът е в ред, ние трябва да мине през целия списък веднъж, намерете най-малкия номер, мястото то в началото на списъка, поставете началото на списъка, когато малкият брой е бил, и след това, ако списък все още е в ред, ние сме Трябва да мине през този процес отново, нали? Ето защо избора на сортиране, Big-O по време на работа на избор на сортиране, някой? STUDENT: N квадрат. JASON HIRSHHORN: N квадрат. Тъй като Маркъс и аз току-що разбрах, тук, ние ще трябва да проверете списъка на списък брой пъти. Така става през нещо на дължина н н брой пъти е в действителност н квадрат. Така че това е нашата pseudocode. Това изглежда много добре. Дали някой има някакви въпроси за pseudocode? Защото всъщност избор на сортиране трябва вероятно идват 1-1, код от pseudocode. Така че каквито и да било въпроси относно логика на pseudocode? Моля, да го попитам сега. Избор на вид - докато списъкът е вън на поръчка, ние ще мине през него и да намерят най-малката всеки път и я поставете в предната част. Така че, докато списъкът е в ред, може да някой да ми даде, че ред код, който не ми е дал линия на код Все още, моля? Това звучи като какво? STUDENT: Това е за линия. JASON HIRSHHORN: Звучи искал за линия. Добре, може ли да ми даде за цикъл? За - STUDENT: аз е равна на 0. JASON HIRSHHORN: аз или - Какво пропускаме? Какво става тук? STUDENT: Int. JASON HIRSHHORN: Точно така. (INT I = 0; - STUDENT: Аз