ПРОФЕСОР: Така че в дневния ред на тази седмица, не че много неща. Но се надяваме, че много, много полезно и от значение за вас, момчета тази седмица. Но ние ще прекарат може би 15, 20 минути просто бързо да говорят за списък линк. Списъци линк ще бъде покрита на теста. Така че може би ще е много полезно да научите малко за това какво е това. Отиваме да прекарват по-голямата мнозинство от днешния вписванията преминавате викторина нулеви проблеми практика. И тогава ние ще спаси може би 20, 30 минути в края на всяко спиращ въпроси някой има. И тогава, последният пет минути, аз ще съм до получаване на помпата до реч за теста. Вие, момчета, всички искат да са тук за това. Защото това ще е добро време. Добре, така че някои материал в списъка линк. Как те обикновено структурирана е Имате ли какво се нарича възел, нали? Трябва тези неща, наречени възли, които са structs. Аз ще отида как да се създаде възел в следващия слайд. Но по същество всички свързани списъци е данни, че е нанизани заедно чрез указатели. И така предимството имаме за използване на свързан списък свърши, може би, като масив, е факта, че в масив имате нужда от един съседен блок памет всичко в едно и също място, една след друг, за да може да има това. Като има предвид, свързан списък, бихте могли имат произволни парченца памет всички краища на вашия компютър нанизани заедно с указатели. И по този начин ви могат да имат достъп до информация който идва един след друга, след друга без да се налага само на огромна част от памет в компютъра някъде. И така, това е един от най-големите причини, поради които използваме списък линк. На второ място, това е много лесно да се динамично преоразмеряване списъка с линк, защото в масив, когато декларира масив, имате определен набор стойност. Да кажем, че е искал да създаде масив от 10 числа. Аз създаде масив от 10 числа, и това е всичко. Това е 10. Аз не знам какво да правя след това. Ако исках да стане 11, не може да го направи. Ако искам да направи 9, не може да го направи. Докато в списъка за връзка, можете да добавите и изтриване и го поставете където искате. Можете да промените размера на динамично вашия структурира тук, вашата структура на данните. И това ни дава много повече допълнителна гъвкавост че ние не правим обикновено имаме с масиви. Всеки, който се бърка на основния структура на колко списък линк е или защо ние трябва да използваме една върху масив? Да, ние ще отидем в детайли как всъщност да си създадете. Но това е просто вид общия смисъл точно сега. Готино. И така масиви са нанизани заедно на тези прекрасни малки неща наречените възли. All възел се е вид структура на. Не забравяйте, че една структура на е, ако искате да се създаде определен вид променлива в С, който не вече съществува, вие, като програмист, всъщност може да се създаде, че сами. И така, този тип информация структура се нарича възел, в действителност е бил създаден от нас, че не съществува в рамките на C по себе си. И така, че създадете такъв е, че трябва заглавната част на typedef структура на, което казва на компилатора, че съм за да се създаде структура на. Отиваме име "възел". А вътре отиваме да декларира променлива в, които ще се съхранява стойност. И тогава ние също ще са указател, наречена "Напред" който сочи към следващия възел в списъка с линк. И тогава ще довърша, че на разстояние само с повтаряне възел отново, така компилаторът знае, OK това е краят на моята структура на. И така, по този начин, ние сме вид за създаване на сладко малко масив вид на нещо, с стойност и с показалец. И вие може да ги свърже всички заедно с тези насоки. Така, че всички те могат да бъдат натура нанизани заедно в една верига. Готино. Можеш ли да чуеш, че малко по-добре? АУДИТОРИЯ: Да. ПРОФЕСОР: Добре. Така че начинът, по който, като вие може да видите, Типичният списък линк е структурирана е имате главата. Имате стойността на главата, която не е се посочи от всяко друго показалка. Но това ще посоча, или препратка, друг възел. Възелът след върви за указване на възел след това, и така нататък, и т.н. докато накрая удари В края на списъка ви връзка. И просто няма да има показалка там. И така, мисля, че като, от една верига, или дори ако някой от вас, момчета, направени, аз не знам, като с Плодове Loops когато сте били малки. Вие ще ги низ заедно и ги носят около врата си. Мисля, че е точно същото нещо. Трябва тези малки неща, които можете може да низ заедно тази точка до една след това, с тази след играта, и така нататък и т.н. докато имате верига на структурата на данните които можете да използвате, както желаете. Така че начинът, по който това бихме обикновено вмъкнете или изтриете всеки възел от връзка списък е много различна в зависимост от това къде този възел е. Така, например, защото указатели са винаги сочейки към конкретна стойност, когато изтриете или поставете възел, искате да се уверите, че показалецът е всичко сочи към правилните неща. Така че, ако искате да вмъкнете потенциално нов възел със стойността на една вътре сортиран връзка списък, ние всички знаем тук от картината, която ще отидете в между главата и две, нали? Защото едно пасва точно там. Но начинът, по който ние ще направим това е от първия dereferencing показалеца от главата и да изпраща тази към едно. Но ние влезе в голям проблем тук. Може ли някой да види какъв е проблемът е ако бяхме първи сочен показалеца от главата до един? Какъв проблем може да се натъкнем, ако се опитаме да добавите към предната част на нашата масив? АУДИТОРИЯ: [недоловим] ПРОФЕСОР: Точно така. Така че тук имаме указател, който е веднъж посочи от главата към две. Но ако се отървете от които показалка, която го насочите към едно, ние сега нямам идея къде да отида, за да намерите две. Защото както казах и преди, имаш гигант парче памет в компютъра. Всички тези възли могат бъде произволно осеяни на всяко място във вашия компютър. И вие не знаете как да отида за намиране на това. И така, вие трябва да имате указатели сочейки към всички възли в края. Или пък, ако случайно сочен един без първо възлагане първа стойност, вие сте просто ще загубят всичко след това. Така че това, което ние ще направите, е, бихте направили първата искате да създадете показалеца върху възелът, който искате да вмъкнете. Насочете го до мястото, където искате да го поставите да, и след това след това можете може да посочи главата назад към едно. Това прави ли смисъл да се всички тук? Страхотен. Мислете за това като точно като една верига. Ако добавите верига, това е вид интуитивен как бихте отида за вмъкване това. ОК, така, че всъщност е много по-кратък, отколкото си мислех, че ще бъде, петминутно увлекателно разказана история на линия за предаване на списъци. Точно така, вие имате на основна представа за това какво е това. Тук имаме в дневния ред на викторина нула. Не позволявайте това да ви сплаши. Знам, че е много информация. Тя изглежда много страшно. То също е много, аз мисля, CSC вид отношение. Неща като шестнадесетични струни, указатели, разпределения динамична памет са много страшни термини звучене. Но ние ще ги разбие надолу, направете някои проблеми практика така че вие, момчета, всички са готови за този тест. Колко от вас, момчета имат Вече започнах да уча? OK, вие вероятно искат за да започне подготовка за работа за това, защото теста е утре. Или четвъртък за някои от вас. Да, така че ние ще тръгнем над някои проблеми практика. Ако вие, момчета, всички искат да вземат от лист хартия, молив. Отиваме да просто да прекарат огромното мнозинство от днешния вписванията преминавам през някои от които така вие имате представа за това какво да очакваме в анкетата. ДОБРЕ. Няколко логистична детайли, както и, за никого които не са били в тази връзка съществува, ако отидете cs50.yale.edu, на лицевата тази страница има връзка който казва: "За Quiz нула." Link ще ви отведе там. Ако не сте го прочетете, моля, прочетете го. Защото тя ви казва наистина важно информация по отношение на теста. Отивам да го направим из че само защото, физически, ако вие не знаете къде да отида, ще имаме проблеми. И така, ако си последния от гледна точка с A до N, отидете в залата юридическия факултет. И ако последните ти започва с P до Z, отидете на Davies Auditorium. И това се отнася само за хората в секцията сряда. Ако сте като викторина на Четвъртък, отидете на SSS 114 когато си лекция обикновено е. АУДИТОРИЯ: [недоловим] ПРОФЕСОР: O до Я, ти започваш да отиде в залата Дейвис. Отивам да се промени това, нали? О, да, ти просто не успяват автоматично. О, да, това си ти Криста. Да, моето лошо. Да, O до Я, ти започваш за да отидете на Davies Auditorim. Отивам да се определи това, след като кача. Да. И след това също е нещо, важно да се има предвид, е тази сряда, ако сте официално записани в секцията сряда, трябва да занесете викторина в сряда. И ако сте записани в четвъртък, трябва да занесете викторина четвъртък. И това е по време на учебните часове. Къде, мисля, че това е като да се 01:00 02:15 в сряда и 2:30-3:45 в четвъртък. Ако имате непримирими конфликти, Извинения на Дийн са единственото нещо, за съжаление, можем да вземем. Защото ние сме имали огромното мнозинство от исканията за да превключите от сряда до четвъртък. Което не можем да почитаме, освен ако имаме заявка за Дийн. ДОБРЕ. Така че, преди да можем да започнем с Няколко проблемите на практика, Аз съм просто ще отидем Полезни съвети на Анди за успеха. Вие, момчета, когато изучавате, вие наистина искат да практикуват пишете код на ръка. Първото, което някога съм път взе викторина CS, аз не трябваше писането практика код на ръка преди и тя беше изключително шокиращо колко трудно е било. Когато вие, момчета, не се получи в навик да напишете всичко, тя идва много естествено е могат да са autocompleted скоби и запетаи там. Когато го напиша на ръка, понякога е по- много, много лесно да се забрави и запетая, или забрави да затвори една скоба, или забрави да затвори на дебелото черво, или нещо такова. Така че, когато пишете код на ръка, това е много различно усещане. Така че вие, момчета, когато сте на труд през някои от проблемите на практика, това ще е добре да практикуват наистина днес. Или утре, предполагам, ако сте като викторината в четвъртък. На второ място, ние имаме последният, като, осем години на стойност от практиката викторини онлайн. Тази година вероятно ще бъде викторина много, много подобно на всички от тях. Те всички са много сходни. Можете вид влязат в стил на вида на въпроси че ние питаме, вида на функции, които ние ще го пишат, и така нататък, и така нататък. Така че да викторини на практика, особено с ограничения по време. 75 минути, за да направя теста е Не много време. Това е много, много дълго. И така, вие момчета наистина искат за да се уверите, че вие, момчета, са в навик на писане код на ръка бързо. Защото не искате първият време, за да видите викторина на тази дължина да бъде на вашия тест. Вие, момчета, наистина искате да се уверите, че практикувате предварително. На четвърто място, което искате да се преразгледа лекционни и раздел слайдове. Вие не трябва да запомнят неща. Всъщност, всеки има право на един лист бяла хартия бележки, отпред и отзад. Вие, момчета, могат да пишат или пишат. Ако откриете себе си се налага да запомните нещо, го остави на този лист. Аз ви гарантирам, че не искате да се заби в средата на тази викторина е като, о, да, какво е най- по време на работа на този вид в сравнение с този сорт. Просто го остави и да го копирате направо от бележката лист. След това можете да всъщност просто използвайте мозъка да мисли за проблемите, вместо да се налага да се припомни факти. И така наистина се възползвате на каквито и да било подробности нишови че си мислиш, че трябва да запомните, тя цоп надолу върху листа преглед. OK, на всички въпроси, логистично по отношение на теста преди да започнем някои викторина проблеми практикуват? Да? АУДИТОРИЯ: Аз не съм имал шанс да погледнете на теста [недоловим] но е то ще бъде приложение най-вече, или е налице също така ще бъде, харесват, въпроси на знанието? ПРОФЕСОР: Това е много. Така че, начинът, по който аз ще описано викторината is-- I, взети заедно някои проблеми практика че извадих от всички викторини. Но вие ще видите, че има две основни видове въпроси ще ви питат. Един от тях е на много ниско ниво детайл от неща. Ние ще ви дадем малко парче код и да кажа, има ли грешка тук? Какво щеше да се отпечатване тук? Какво ще се произвежда този код, и така нататък. Така подробности информационни много ниско ниво. А на обратната страна, ще имаме много високо ниво на въпроси, основани на знанието. Можеш ли да обясниш какво по разлика между двоичен търсене и линейно търсене е? Защо искаме да използвате една върху друга? Може би, това, което е GDB? Защо искаме да използваме GDB? По-високо ниво, по-фундаментална разбиране на въпроса. Така ще видите смес от две от тях на вашия тест. Нещо друго, преди да сме главата направо в нея? ДОБРЕ. АУДИТОРИЯ: по-One. ПРОФЕСОР: О, още един. Извинете. АУДИТОРИЯ: Да, всичко е наред. Значи казваш, 75 минути се твърде кратък, като това е малко вероятно че ние ще завърши? Или подобно, 75 минути е точно толкова време, като ще се наложи, ако бяхме подходящо подготвени? ПРОФЕСОР: OK, така че викторина е предизвикателство. Той определено е предизвикателство. Тук ще намерите себе кратко навреме. Вие вероятно ще удари, като 10, 15 минути, за да си отидат, и са подобни, мамка му. Имам толкова много да се прави. И това е напълно наред. Всеки ще се чувстват по същия начин. Просто бъдете много наясно колко време имате. И така, ето защо аз ви казвам момчета правят викторини на практика. Защото той наистина дава голямо чувство от това, което викторината ще се хареса. Така че, ако откриете себе си в в състояние да завърши практиката викторини в добра сума на време, можете да се пестеше добре, тогава няма да имате проблем в сряда или четвъртък. Готино. Така че, ако всеки wants-- Мисля повечето хора имат листа хартия извън вече. Отивам да същество просто ви дам примерни въпроси, ви дам момчета, като, един няколко минути, за да ги направя. И ние ще отидем като класа това, което отговаря на възможностите им са. Така че това е един много типичен ранно въпрос ние ще те питам, това просто да конвертирате числа между различните бази. Binary, като вие може да изземване, е база две. Decimal е основа 10, или това, което ние като хора обикновено интерпретират. Шестнадесетично е основа 16, която е равна на нула чрез девет както и чрез Е. Така че има четири числа, аз съм ви питам момчета да конвертирате тук. Аз ще дам ли, три до четири минути, за да мислят как чрез ние ще отидат за решаване на този въпрос. АУДИТОРИЯ: Дали сме позволено калкулатори? ПРОФЕСОР: Вие няма да нуждаят калкулатори, да. Мисля, че основното допълнение, според мен, е всички вие, момчета, ще бъдат помолени да направя. И точно затова вид имат чувство от когато всеки е направил, погледнете нагоре, вълна, аз не знам, усмивка, Посетете щастлив, ако сте готови. Да. Може би още няколко минути. OK, нека го донесе инча Аз нарочно ще ви дам момчета по-малко време отколкото може би трябва да се направим някои от тези проблеми, просто защото искам да се уверите, че получаваме през куп проблеми. Така че не се тревожете, ако не сте имаме шанс да отбележи. Totally OK толкова дълго, колкото имате представа за това как да отида за това. Така че нека да вървим напред и да направим първата. Така че първо, няма кой искаш да ми кажеш в двоичен, това, което правим всяка от тези цифри представляват по отношение на техните ценности? Да? АУДИТОРИЯ: Two до мощност нула, 12:58. ПРОФЕСОР: Точно така. Така. Нали, така типично когато сме в база 10 всички те представляват, също както, 10 до основата на нула, нали? Това е вашата нечии място. Всичко си място 10 е е 10 на силата на един. Можете 100 място пак е 10 на силата на две. Каквато и да е основа, вие сте в върви общо с точно същото нещо, само с различна основа. Така двоичен, всичко, което е база е две. Ти ще да конвертирате всички цифри в две какъвто и да е власт на тази цифра. И така, в този смисъл, ние може да има по-лесен начин да бъде в състояние да добавите или обобщим всички числа, за да се преобразува в база 10. Така че няма кой да искаш да ми кажеш какво е отговор на първата е в базата на десет? АУДИТОРИЯ: Two, [недоловим] ПРОФЕСОР: Да. АУДИТОРИЯ: 42. ПРОФЕСОР: 42, там ще отида. Така че начина, по който ние имаме този отговор беше от правене на две на първия, който е две. Плюс две трети, което е осем. Plus двама до петата, която е всичко, което е останало. Можете да ги обобщим и това е 42. Има ли някой объркан от това как сме стигнали, че? Така че основната Освен това, като Аз казах, всичко ще бъде наред. Ако не е, добре, можем да практикуваме това също. Но това е добре. Готино. Някой иска ли да ми дадеш отговори на втория, както и? 50? Good. Всеки, объркан за това как имаме, че или? Cool, ще имат отговори за следващия слайд. Така че не се тревожете, ако трябва да го копирате. ОК, така че шестнадесетичен е малко по-особено. но аз ще ви покажа момчета пряк път за това как да го направя. Така шестнадесетичен, както ти не забравяйте, всичко това е било 16. И тъй като ние като хора не го правят всъщност има 16 номера, за да представляват, че, отидем от нула до девет, които нашата първа 10 стойности, а след това, което правим от А до F, които са следващите шест стойности. И така, най-лесният начин да се премине от всяко двоично число да шестнадесетичен е да ги раздели на две половини. И така всяко двоично число ще даде най-вероятно ще има осем цифри. Можете просто да се прекъсне ги по средата. Така че първото one-- една онзи, един един, един, един, един такъв. Вид на това мисля, вие знаете, съставя наклонена черта или запетая между тях. А може просто да конвертирате директно каквото това е първият брой шестнадесетичен, и каквото и да е тук вторият от шестнадесетичен. Така че не забравяйте, от общата система за означаване, какво шестнадесетични стойности започват с? АУДИТОРИЯ: Нула. ПРОФЕСОР: 0X. Така че ние знаем, че всеки път, когато ви попитам да конвертирате всеки брой да шестнадесетичен, или всеки път, когато видите някоя номер, който започва с 0X, вие знаете, че това е шестнадесетична стойност. И тогава започваш да бъдете помолени да определи какви са тези две цифри са. И начина, по който направи това, събраха нагоре че половината и събраха до тази половина. Така в този пример, какво би един, една, едно, едно бъде? Каква стойност би била тя? Това ще бъде F, нали? Това ще бъде 15. Така че това ще бъде F. One, един, един, един тук е също F. Така един, една, едно, едно, едно, едно, едно, една в шестнадесетичен, всичко това е е 0xFF. Защото това половината представлявана F, стойността 15, и това половината представлявана F, стойността 15. Защото не забравяйте, че сме броене от нула до девет. A е като 10, B е като 11, F е 15. Това прави ли смисъл на всички как имаме от двоичен в шестнадесетичен вид? АУДИТОРИЯ: И така, как стигнахме 15 от една, една, една, един? ПРОФЕСОР: Да, това е двоичен, нали? Представете си, че това е само двоично число. Така че имате две до нулев, който е един. АУДИТОРИЯ: О, OK. Така че просто го общо навън. ПРОФЕСОР: Да, и след това просто общо, че навън. Това е всичко, това е. АУДИТОРИЯ: OK. ПРОФЕСОР: OK. АУДИТОРИЯ: Така и да отидеш от двоичен да е десетична да шестнадесетичен? ПРОФЕСОР: Това е най- Най-лесният начин да направите това, да. Нали няма да е десетична, защото десетични има само нула до девет. Ние сме просто вид разделяне този нагоре в две. АУДИТОРИЯ: [недоловим] използване на десетични да намерите какво мачове до в шестнадесетичен. ПРОФЕСОР: Искам да кажа, че си събраха до използване на основния математика. АУДИТОРИЯ: Да. ПРОФЕСОР: Да, доста много. Тя е малко объркващо. Но просто знам, че сте могат да разделят каквото тази стойност е в само половинки. Виж, какво е това в двоичен? Какъв номер е това? Това ще бъде нещо от нула до F. Тук също ще бъде нещо от нула до F. И тогава може просто да сложи тези две точно там. АУДИТОРИЯ: OK. ПРОФЕСОР: Да. ДОБРЕ. Така че, момчета искат да опитайте следващото тогава? Нула, едно нула едно, един, нула, едно нула. Аз ще ви дам момчета като 30 секунди, тъй като най-вероятно не е знаел трик за това как да направите това по-рано. OK, всеки, който иска да получи това един изстрел? 0X5A. ПРОФЕСОР: 0X5A. 5а. Good. Така че ето това би be-- искате да ни кажете как си го това? Първо, как попаднахте петимата? АУДИТОРИЯ: Защото нула, един, нула, едно е пет. ПРОФЕСОР: Всички ли разбирате защо нула, едно, нула, едно е пет? Имаш един тук. Ти нямаш нищо в два до първата. В две до втората, има един, който е четири. Така че можете да добавите с четири плюса онзи, имате пет. Всеки добър? ДОБРЕ. И тогава какво е това и защо? Какъв номер е A съответства? АУДИТОРИЯ: 10. ПРОФЕСОР: И какво е това в базата две? АУДИТОРИЯ: [недоловим] ПРОФЕСОР: Точно така. Така че тази втора стойност тук ще бъде 0X5A. Всеки добър за това как да конвертирате? Това е много по-лесно, отколкото си мислите, че е. Аз просто искам да се уверите, Знаете ли, че полезни съвети и трикове за това как да направите това. АУДИТОРИЯ: Защо можеш просто да се разделят то в средата подобно? Просто бъдете като, ОК, аз съм само ще грижа за тези първи [недоловим]? ПРОФЕСОР: Защото това е всъщност най- начин шестнадесетични стойности са представени. 0X, че всъщност означава нищо друго, освен ти казвам че това е шестнадесетично число. И това винаги означава първите четири цифри. И това винаги означава последните четири цифри. И така тези две цифри просто отговарят на различни битове. АУДИТОРИЯ: Така че ние ще always-- ПРОФЕСОР: Ти си винаги ще получи осем бита стойност. АУДИТОРИЯ: Е, че просто искал нещо тук или че нещо цял? ПРОФЕСОР: Това е просто нещо в компютрите, Аха. АУДИТОРИЯ: OK. Awesome. ПРОФЕСОР: Също така, така че в този пример ние превърнахме от двоичен в десетичен, и от двоичен в шестнадесетичен вид. Вие, момчета, искате да се уверите, вие също практикуват става по друг начин. Така че, ако ти дадох 0xFF, бихте могли изготвят, че в двоичен, нали? Можете да конвертирате F в двоичен, което е едно, едно, едно, едно, конвертирате F до двоичен, които е един, един, един, един. Така че ние може да ви помоля да направите, по друг начин. Така че е десетична към двоична, или шестнадесетичен да двоичен. Значи вие искате да се уверете, че знаете и в двете посоки. Ние най-вероятно ще ви задам един комбинация от двете. Да, имате въпрос? Мога да see-- сте добре? АУДИТОРИЯ: Да. ПРОФЕСОР: OK. Дали съм добър, за да изтриете това? Страхотен. Добре, така че отговорите са тук, ако някой Любопитното е, по-късно и се бърка. ДОБРЕ. АУДИТОРИЯ: Има ли значение дали ще се постави нашите писма в столицата или с малки букви? ПРОФЕСОР: Това е така, защото в шестнадесетичен, по силата на споразумение, всички герои са главни букви. Така че от А до F са ще бъде главна. Ако сложите малки букви а, аз не знам ако ние непременно ще отбележи, че грешат. Но теоретично, това не е технически как точно трябва да го има. Така че всички те трябва да бъдат главни букви. Да, добър въпрос. ДОБРЕ. Втори въпрос. Помислете за тази прекрасна програма тук. Ще ти задам въпроса, Ще се върна това. Така че, от една страна, това, което е вътре в стандартна io.h това е от интерес за програмата? На второ място, това, което прави невалидни означават в съответствие три? И трето, какво означава връщане нула от Основната, като линия шест, обикновено означават? Ако вие искате да напишете тези, надолу, тъй като аз трябва да се върнете обратно да слайда само така можете да видите кода. Това е пример за подобно, може би по-висока въпрос ниво, където ние ви молим какви неща да кажа в една програма. Всеки добър за мен, за да се върнете към слайда? ОК готино. Така че аз ще ви дам хора като може би три минути, за да гледат на това много бързо. ОК, така че това е като сравнително лесно, концептуално. Някой иска ли да ми каже какво е Първият вътре от хеш включително нашата стандартна файл io.h библиотека? Защо имаме нужда от тази библиотека включени за тази програма? Какво тук се нуждаем от него за? Да? АУДИТОРИЯ: Е, че когато сложите, че ФОРМАТ? ПРОФЕСОР: Точно така. Така ФОРМАТ, всеки път, вие вземат вход от потребителя и печат на нещо на екрана, това е стандартния вход, изход библиотека. Мислете за това, че way-- вход, изход. Трябва ли изход? Да, аз правя. Така че аз знам, че аз съм винаги ще нужда от стандартизиране i.o библиотеката. Така ФОРМАТ е функцията от които се нуждаем, за да получите достъп до и таг включват в стандартна i.o библиотека. ДОБРЕ. Второ, той какво прави недействително означават? Имаме инт главната (празнотата), какво прави анулира тук да кажа тук, на третия ред? Да, в гърба. АУДИТОРИЯ: [недоловим] ПРОФЕСОР: Точно така. Така че не забравяйте, което сме научили като се започне с нашия pset че всъщност можете да зададени команди доводи, че вашата програма, която ви Основната функция, приема като вас, потребителя, го наричат. Ако имаме нищожен, това означава, че може просто да се изпълнява директно на програмата без никакви аргументи от командния ред. Всеки ясно за това? ДОБРЕ. И накрая защо ни притеснява правиш това завръщане нула нещо тук? Защо ние дори имаме инт главната? Защо не можем просто трябва невалидни основни невалидни? Да? АУДИТОРИЯ: Точно така, че ние можем да бъдете сигурни, че програмата е излизане успешно, като за разлика от него, ако се брои. И ние ще знаем, че това е различен вид грешка. ПРОФЕСОР: Да, точно така. Това е просто един много конвенционално нещо, което правим, е, че точно в края на програма, за да се увери че основната си функция работи правилно, ние винаги искаме да направим замяна нула. Въпреки, че ние може да е задължително Не виждате, че печатни навсякъде. Тъй като програмисти, нали знаеш, ако имате много различни реда код а вие не знаете къде те са наред, и ако грешка случва искате да уверете се, че можете да получите тази грешка. И така, обикновено, ако нещо се грешна ще имаме възвращаемост на един току-що да се уверите, ние знаем, че това е така. Така че, ако сте въвели връщане нула, които обикновено означава, програмата ви е изпълнена успешно. Добър? Готино. OK, втора програма тук. Помислете за това. И ако вие видите плувка, вие може би имат добра представа за това какво Аз съм за да ви попитам. Така че, когато тази програма изпълнява, както можете да видите, Аз съм за обявяване на плувка вътре моята основна функция. Аз съм го назовава "отговори", и аз съм настройка че равен на една разделена на 10. Аз съм отпечатване, до един знак след десетичната запетая, че плувка. И тогава аз съм връщане нула. Така че, когато се изпълнява програмата, мисля, обратно към алчни сега, тази програма отпечатва 0.0. Както всички знаем, надявам се ние всички знам, един разделен на 10, не е 0,00, това е 0.1. Но обясни защо тази програма мисли че един разделен на 10 разпечатки до 0.1 друга от 0,1? Аз ще ви дам момчета може би като 30 секунди, за да просто бързо да мислят за това и аз ще се върна в програмата. ДОБРЕ. Всеки, който иска да го пробвам? В три изречения или по-малко, защото обикновено сме ще ограничи всички отговори до три изречения или по-малко така че не е просто повръщам случайни неща на вашия викторина. Да, да вземе един изстрел. АУДИТОРИЯ: Така че аз мисля, че има тази нещо, наречено, като, [недоловим] Така че може да има, например, може да има, като, 0.09, Там ли се отпечата първата цифри, че ще бъде до 0.0? ПРОФЕСОР: затвори, не съвсем. Christabell? АУДИТОРИЯ: Ти си делят една и 10, и двамата са цели числа. И така, начинът, по който то се случва да съхранявате това е като цяло число. И така, най-близкото цяло число, ще бъде 0.0. И така, това е 0.1. ПРОФЕСОР: Да, това е наистина добра. Това е правилният отговор. Така че това е един много объркващо концепция за много деца. И аз наистина искате да се уверите, че Това се задълбочава в главата на всеки. Така че това, което ние наричаме плаващ Точка на неточност, когато причината, поради която много от вашите програми в алчни не работи, защото първоначално е бил сте забравили да хвърли своя променлива. Така че това, което каза Christabell е напълно правилна. A плувка по своята същност е неточно. Защото в един компютър, нали, ние имаме ограничен размер на бита на паметта можем да използваме, за да представляват числа. Така, например, това CS50 ID is-- Мисля, че това е 64-битов компютър. A плувка може да бъде представена само с ограничен размер на тези битове. И така с 0.1 безкрайни нули, че беше 0.1 е, нали? Но ние не можем действително се съхранява този брой в нашия компютър. Ние просто не разполагат с достатъчно памет да го направят. И така, най-близкото сближаване на какво се съхранява в паметта е всъщност нещо като 0.000 нещо, нещо, нещо, нещо такова. Което, след като съкрати тя, закръглява надолу до 0.0. И така, това е само един пример който демонстрира много въпроси имаме, когато сме опитвайки се да направя неправилно математика без леене, различно число. Така че просто се притесняват от това да се случи. На викторини, ако ние ви дам блок от код и това е като, това, което се отпечатва в края? И ако това е някаква случайна стойност вас момчета трябва да знаят, защо това се случва. Да? АУДИТОРИЯ: съкращава се отървете от всичко след определен момент? [Недоловим] ПРОФЕСОР: Да, така всъщност това е наистина лош пример, защото каквото всъщност 0.100 ще се съкрати до 0,1. Но ако ви се налага да тичам it-- аз не правя не забравяйте, защото миналата година те той се кандидатира с различна програма. Те се завтече в нещо, наречено на CS50 Appliance, която е различен от ID. Това беше 32-битова система, мисля. И така, имаше различни номера. Но по същество, просто знам, че цялата концепция за отрязване и как точно реже неща, на разстояние. И така, ако тя rounds-- АУДИТОРИЯ: Без закръгляване. ПРОФЕСОР: Точно така. Да. Готино. Здравейте, в гърба. Ние просто ще се над някои преглед викторина въпроси. Всичко е наред. Така че, помисли за друга програма тук. Отивам да ви дам момчета за няколко минути, за да прочетете над това. Това е нещо, което е за много наскоро, че мисля, че духаше много от вас умове момчета-те години. Но ние ще говорим чрез това отново само за да сте сигурни го разбирам напълно. ДОБРЕ. ДОБРЕ. Всеки, който се нуждаят от повече време, за да Прочети чрез този код? ДОБРЕ. Така че ми се струва, че в тази програма съм създаване на два низа с помощта GetString. Един наречени лидер и един нарича т. И ако те са равни равнява на друг, тя трябва да се отпечатва "Вие написали едно и също нещо. " Но elsewise, той ще отпечата: "Ти напечатани различни неща ", нали? Изглежда много, много проста. Но, въпреки това, ако аз всъщност опитам да напиша тази програма, изглежда, че дори когато съм входни точно същите струни, тя все още отпечатва: "Ти напечатани различни неща! " Някой иска да вземе изстрел в защо тази програма винаги отговаря, че на входовете са различни, дори когато самите думи са едни и същи? Така че, ако аз трябваше да input-- David любов да се използва за пример като майка, нали? Малки букви М-О-М за S, T се равнява на малки букви M-O-M. Ако аз се завтече това чрез този код, защо да го разпечатате "сте въвели различни неща?" Някой се нуждаят от повече време да мисля за това? OK, аз мисля, че ние сме добри. Да? АУДИТОРИЯ: ОК, така че това е нещо, за там, където се съхранява в паметта, нали? ПРОФЕСОР: Да. АУДИТОРИЯ: Когато това е като, ако това низ и се съхранява при паметта spot-- Аз съм изобретяването this-- е нула. ПРОФЕСОР: Разбира се. АУДИТОРИЯ: И низ т се съхранява в паметта място, като, 167, и след това нулата не равно 167. ПРОФЕСОР: Точно така. ОК, така че не забравяйте, това невероятно откровение обяснихме за вас, момчета през изминалата седмица, че струни наистина не съществуват? Когато ние създаваме нещо, наречено низ сме в действителност, създаване на нещо, наречено Чар звезда. Което на краищата това е е показалец към низ или да масив от символи. И така, в този пример, ако аз са за въвеждане на М-О-М пътя че компютъра ми ще се съхранява тя е в рамките на паметта наклонена черта нула, нали? Тези четири букви, символи, ще се съхранява някъде. И тогава тези четири знаци, наклонена черта нула, се съхраняват някъде другаде, нали? Нямам представа къде адресите са, те са някъде в компютъра ми. Но аз не знам точно къде се намират. Когато се създаде низ ите, всичко, което наистина е е указател към започнете от този низ. И когато се създаде този тон стойност, всичко, което е указател до тук. И така, когато се опитвате да се равнява и проверете да се види дали и е равнопоставено се равнява на тон, на компютъра в действителност е просто връщане към можете адреса на тази м и адреса, на който m. И защото те са две отделни парчета на данни които се съхраняват в две различни адреси в компютъра си, вашия компютър никога няма да ги признава като същото. Някой иска да даде един изстрел в това, което ние ще трябва да направите, ако искаме да се коригира това и да има правилно работеща програма вместо? Помислете за това за няколко секунди. Какво ни е нужно да се промени, за да получите тази функционираща програма Между другото ние искаме той да функционира? Да, искам да взема пробождане в него? АУДИТОРИЯ: Можем ли да се опитам да сочен за показалеца и проверка през масива? ПРОФЕСОР: Това е един от начините да го направя. Така че, това, което се казваше? Съжалявам, напомня ми. Zee: Zee. ПРОФЕСОР: Да, и какво от това Zee препоръчва да работи абсолютно. Нали така? Бихме могли сочен показалеца и действително отида и достъп физическите данни вътре оттук. И само ние може да се сравни целия екран. Можем да кажем, OK, показалеца, дайте ми какво има вътре тук. Той ще се върне на m. И бих казал, показалеца, дайте ми какво има вътре тук. Връща m. Направете тези мач? Да. Тогава можем да продължат напред. Ние продължаваме да гледате целия двама струни по целия път до края и да видим дали тези хора са равни, ако всички стойности са равни. И ако всички стойности са равни, След това ние знаем, струните са верни. Абсолютно, това е начина, по който ще го направи? Някой бърка на някой от това? Цялата концепция за това как струни са наистина само на указатели, и как те наистина не съществуват? И защо ние се грешки харесват начина, по който да го получа? Защото аз ви гарантирам, момчета, показалки и разпределение низ и паметта ще излезе. Да? АУДИТОРИЯ: [недоловим] сочен това, можете просто сложи една звезда [недоловим] ПРОФЕСОР: Точно така. Така че, за да derererence указател средства за да отидете на този адрес на показалеца и получаване на данните, стойността там. И начина да направите това е звезда показалка. Не бъркайте това. АУДИТОРИЯ: [недоловим]. ПРОФЕСОР: Да. АУДИТОРИЯ: Така че можете да просто напишете ако звездата е равно равни звезда тон. ПРОФЕСОР: Ами, не. Не. АУДИТОРИЯ: Това не е достатъчно добър, нали? ПРОФЕСОР: Това не е, защото си само проверка на първата буква. Вие вероятно ще нужда от някакъв вид на една линия, която се изпълнява за всеки отделен характер и в двете струни. Да. Така че, ако искате просто да проверите ако те започна с едно и също нещо, можете да направите, ако, звезда ите се равнява на звезда тон. Тогава трябва да знаеш, че най-малко те започна със същия характер. Да? АУДИТОРИЯ: Така че начинът, все пак, че ще бъде като внедрен за линия или показалеца? ПРОФЕСОР: Да. Доста просто за контур. Не забравяйте, че David в клас споменато безплатно синтактична захар? А той имаше тази много объркващо нещо от звезда т плюс един, където би се интегрират чрез и да го преместите показалеца? По-лесният начин за правене това е само тона на аз. Така че това е просто един масив. Начинът, по който бихте имат за линия, която се проведе от нула до аз, когато е дължината на низ, просто можете да пишат, че вместо да правиш Цялата показалеца, позоваване нещо. Така че тези неща са точно еквивалент на вашия компютър. Вие, момчета, най-вероятно няма Трябва да знаете, че, но е добре да се просто вид има в задната си ум. Просто знам, че компютърът разпознава различни блокове с код като едно и също нещо. Тъй като това е просто много по-потребител лесен за нас, за да я представи като това е масив. Това е просто по-лесно. АУДИТОРИЯ: Така че използването на strlen да харесва, get-- ПРОФЕСОР: Да. АУДИТОРИЯ: OK. ПРОФЕСОР: Може би могъл използвате strlen или, ако сте не са имали strlen можете да направите до просто докато не удари наклонена черта нула и за двете. Или ще работи. Да. АУДИТОРИЯ: Така че това е, за да сочен всеки един символ, ако бяхме в действителност написването на този код, ние може просто да се направи т скоби аз Харесва със звездата пред него? ПРОФЕСОР: Да, равнява се равнява ите скоба аз, а след това продължи да се движи и надолу, докато не се появи на края. Да, това е това, което ще направя. И аз всъщност ще имаме следващата пример, когато ние всъщност напиши strlen така вие ще натура на се играят наоколо с него малко. Така че е ясно, всеки, само на паметта, конци, указатели, качествени адреси? Някои по-високи концепции ниво, че сте със сигурност ще трябва да знаят за теста утре. Всичко е наред. Good. Да. ОК, така че едно нещо, че ние ще се обърнете вие, както правим всяка година на викторина, е, Предполагам, че сте забравили (което ние като че ли забрави да направи годишно) в която заглавния файл strlen е обявена. И така, ние трябва да го пренапише себе си. Ето и списък с насоки че ние можем да ви представим момчета, където можете да получите да се предположи, че S низа няма да бъде нула. Можете да се предположи, че е ще бъде прекратено с наклонена черта нула. Така ли, че това е, което това ще завърша с. И, например, че дължина здравей ще бъде пет. Така че можете да се предположи, че здравей ще бъде пет, Н-E-L-L-О. Не е нужно да се предположи, че от обратната страна нулеви сметки за дължината. Това последно нещо тук, не го правят притеснявате за число препълване. Дали някой си спомня какво число препълване е? АУДИТОРИЯ: отива отвъд дължина на [недоловим]. ПРОФЕСОР: Да, може ли да обясните малко, какво означава това? АУДИТОРИЯ: Така че, предполагам, че се връща отрязване на примера по-рано. Но ако имате само толкова много номера които излизат извън броя на битовете че всъщност можете да я присвоите че тя просто ще вид отсече. ПРОФЕСОР: Да, така на един типичен компютър, колко бита имаме? АУДИТОРИЯ: 32? ПРОФЕСОР: Да, 32, надясно. И така, това е, това, което, четири милиарда, два милиарда? Четири милиарда, до четири милиарда положителни числа, нали? Два милиарда отрицателна, два милиарда положително, зависи от това как искате да го направя. И така в общи линии можем да имаме достатъчно числа, които могат да се изкачат до двама до 31 минус 1, нали? Защото след като удари два до 32-о, не го правим са толкова много памет в компютъра ни. И така, на теория, I може да излезе с редица това е, като, от два до 46-то. Това е един огромен брой задник, но теоретично могат. И така число преливане да е, ако се опитате да създадете цяло число, което е извън това, което компютърът ви е с възможност за съхраняване. И така, вие момчета за този пример не е нужно да се тревожи за нас ти дава гигантска низ, който е от два до 32-ри символа дълго. Това ще бъде наистина означава. Добре, така че аз съм просто ще даде вие базовата структура на този. Ще се създаде функция, наречена инт strlen където а премине в, Чар звезда, или низ, указател към низ наречен лидер. Добре, всички, които копирате надолу. Готино. Oops-- друг начин. Така че това е нещо като по-трудно парче проблем така че аз ще ви дам момчета може би пет до шест минути до вид брейнсторминг и пиша тази функция навън. АУДИТОРИЯ: Ние не правим сметка за [недоловим], ние не трябва да се използва число? ПРОФЕСОР: Не, не. Аз ще ви дам момчета намек. A линия, докато може да бъде много полезен тук. Да. Ето бонбони. Candy също ще бъде на разположение за викторината, мисля. Така че вие, момчета, ще бъдат всички захаросани утре. Може I-- ще го получиш. АУДИТОРИЯ: OK. ПРОФЕСОР: Да. Може би повече от 30 секунди, или така. Добре, ако сте не е направено, не се безпокойте. Ние ще се движат през това заедно. ДОБРЕ. Така че аз съм просто ще оформлението на основна структура за тази функция тук. Int strlen. Първо, няма кой искате да кажете на ми какво означава, че инт? Ние трябва да имаме в тази функция. АУДИТОРИЯ: Strlen [недоловим]. ПРОФЕСОР: Точно така. Така че каквото и да става тук, ние трябва да връща цяло число. И, както е посочено в спец, ние искаме да return-- Отида за нея момчета, просто продължавай. Всичко е наред. Яжте всичко, така че не е нужно да го вземе обратно, всъщност. The INT просто означава, че сте ще се върне цяло число. Какво е това Чар звезда лидер? Какво означава това? АУДИТОРИЯ: Подобно, какво и е въведен инча ПРОФЕСОР: Точно така. И това, което е почти едно и също нещо като Чар звезда? АУДИТОРИЯ: String? ПРОФЕСОР: Точно така. Така че всичко, което правим, е да даде този указател към низ. ДОБРЕ. Готино. Също така, не забравяйте, ако забравим да ви дам тези скоби, не забравяйте да ги напиша сам. Тъй като теоретично, кода си е неправилно, ако сте пропуснали да ги напиша. Просто винаги обръщат внимание. Както, малки неща че не сте забелязали когато сте програмиране на вашия лаптоп, защото лаптопа си го прави за вас? Не забравяйте, когато пишете на ръка. Да? АУДИТОРИЯ: Но как неправилно? Подобно, ще стигнем целият проблем е наред? ПРОФЕСОР: Не, не. Не се притеснявайте. Това всъщност е теоретично е възможно за да получите пълния брой точки на въпрос дори ако вашият код ще Никога не тичам в реалния живот. Аз предлагам да не се опитвате за да се случи. Например, като че ли всичко че е тук е прав, но сте пропуснали двоеточие или скоба, кода си, всъщност няма да се изпълнява. Но ние може да бъде милостив. Да? АУДИТОРИЯ: Трябва ли да се коментирам нашия почерк? ПРОФЕСОР: Не, не, не притеснения за това. Не коментирам. Style трябва да бъде добър. Подобно, не Smush всичко на един ред. Ние няма да бъде щастлив с вас, ако направите това. Някой иска да дай ми на първия ред? Hint, това е много лесно. Да? АУДИТОРИЯ: Int, п е равно на нула. Просто се създаде брояч. ПРОФЕСОР: Така че ние искаме някои нещо като брояч, нали? Аз съм просто ще го наречете "разчита" за по-голяма разпознаваемост. Какво искаме да го зададете равен на? АУДИТОРИЯ: Нула. ПРОФЕСОР: Да. Точка и запетая. То също е много странни тираж точка и запетая. Просто практикуват прави това. Така че ние искаме да имаме първа брояч на тип инт. Тъй като ние искаме да брои до колко много знаци или букви са в този низ, нали? Много лесно първата крачка. OK, може би малко по-сложна Сега, как ще да го направи? Някой иска да дайте ми линията на код че може да бъде в състояние да помогне на линия чрез каквото и да е това? Да, смела душа в гърба? АУДИТОРИЯ: ОК, така че, докато точка звездички, за да, звездата на лидер, не е равна на нула, а след това направи нещо? ПРОФЕСОР: Това е наистина, наистина близо. Наистина в близост. Така че аз отивам да се справи две неща, с това. На първо място, това не е точно нула. Какво е? Това е нищожна терминатор, която е наклонена черта нула. Така че те са различни в от гледна точка на това как те се съхраняват. Значи вие сте много близо. И на второ място, ние не искаме просто да преместите показалеца. Искаме да всъщност достъп до стойностите, нали? И така, как да го направим? Много лесно. Не мислете за указатели, не мисля за спомени. Върни се две седмици на този курс. АУДИТОРИЯ: [недоловим]. ПРОФЕСОР: Както на, не помниш ли? Какви са струни? Как те се съхраняват в паметта? АУДИТОРИЯ: Те са повдигнати. ПРОФЕСОР: Те се отглеждат. И така, как можем достъп всеки знак вътре? АУДИТОРИЯ: [недоловим]. ПРОФЕСОР: Точно така. Така че това, което става вътре while-- тук? S на - АУДИТОРИЯ: I. ПРОФЕСОР: О, аз не съществува, нали? АУДИТОРИЯ: О, да разчита? ПРОФЕСОР: Ние можем само използвате брой, не можем да го направим? АУДИТОРИЯ: За съжаление, аз го нарече аз. ПРОФЕСОР: Да, всичко е добро. Ние имаме променлива тук това е вече са били декларирани като нашия брояч. Така че защо да не се използва само, че да се движат през примката, докато? Това прави ли смисъл? Така че, докато е на count-- Някой искат да ми даде това, което се случва след тук? АУДИТОРИЯ: Това не го прави равен. ПРОФЕСОР: не е равно, нали? Това е най-добрия резултат е равен, удивителен знак е равен, каквото си момчета искат да го наричат ​​не equal-- АУДИТОРИЯ: [недоловим]. ПРОФЕСОР: Да. Запомни апостроф е за Чар, двойни кавички са за низ. Бъдете внимателни при използването им. Така че, когато ние не търсим чрез масива, последният знак, ние знаем, ние не искаме тя да бъде наклонена черта нула. Така че, докато. Ние не сме в края на низа. Какво искаме да направим вътре? АУДИТОРИЯ: Искаме да добавите към брояч, така тя се брои плюс плюс? ПРОФЕСОР: Точно така. Така че тук ние ще направим брои, брои плюс плюс. Липсва още един ред. Почти сме там. Какво се забравя да се направи? АУДИТОРИЯ: Връщайки нула? ПРОФЕСОР: Вие искате да се върнете нула? АУДИТОРИЯ: Не, връщайки се към strlen. Изчакайте. ПРОФЕСОР: Кой се съхранява в? АУДИТОРИЯ: граф. Броя. ПРОФЕСОР: Точно така. Така че тук ние ще се върне преброяване. Защото това, което сме правиш тук ultimately-- имаме насрещно променлива, която е Ще увеличите чрез нашия низ. Отиваме да продължава напред, дръжте отиваш, около и около в тази линия. И докато ние не сме на края на тази низ, който е нищожна терминатор. И всеки път, когато мине през това, ние добавяме към нашия брояч. И ние отиваме по-нататъшно заедно в този масив. И в края, след като ние удари нулевата терминатор, ние знаем, о, ние можем прекъсне, върнете броенето. Ние разполагаме със strlen. Всички ли се как това се реализира? Докато loops-- Знам, че не трябва направи много с тях, но те обикновено са много, много полезно, ако не знам за какво спиране състояние, задължително трябва да бъде. Въпрос? АУДИТОРИЯ: Можем ли да пиша за нищожна от състоянието на време? ПРОФЕСОР: Докато? Да, така че в този проблем, аз трябваше момчета се предполага, че не е ще бъде нула. Защото не забравяйте, Теоретично, ако ти дадох указател, че е твърде голяма памет, това ще ви дам нула, нали? Това е, което оперативната система ще направя. Така че, ако аз не ти казах да се предположи, би била нищожна, трябва да се провери. Така че тук, вие ще направите, ако е равнява се равнява на нула, се върнете една. Нещо такова. АУДИТОРИЯ: [недоловим] нула. ПРОФЕСОР: Добре, ще кажа, ти защо не можем да направим това. Защото не забравяйте, в паметта, нали, тук. Ще отидете тук. Имаш гигантски блокове памет с всички мрежи които съхраняват различни стойности, нали? И така всичко низ is-- за Например, ако искаме да вход здравей, би било Н-E-L-L-О наклонена черта нула, нали? И тогава кой знае, като случайна неща, които са тук, след това. В действителност ние не знаем какво има там. И така, ако ви се налага да правите вместо наклонена черта нула, нищожна, тя не може да се счита за невалидно. Тъй като това може да означава само някои случайни други неща които не принадлежат на вашия низ. И така, начинът, по който ние винаги знаем, че низ завършва е с наклонена черта нула. И така, това винаги е как можем проверка, за да види края на низ. Null, всичко, което е средство, ако имате несъществуваща показалеца, на първо място, или ако паметта ти е просто толкова голям, че няма да може да го върне, а след това, че ще бъде нищожна. Така че бъдете много внимателни при диференциране разликата между нулевата и наклонената черта нула. Да. Всеки OK с това? ДОБРЕ. Така че аз трябваше вие ​​напишете strlen. Реално бихме могли също така да попитам ти пиша от А до I, не забравяйте, че "Atwoa" или каквото и вие искате да го наречете? Тази функция в Vigenere и Цезар, че преобразува стойност Ascii да е цяло число? Това също е дошъл на последните тестове на функции, които сме ви помоли да напиша. Доста всяка функция които сте използвали и е много лесно да се напише, сензори обичат е по-ниска, е горната, да се намали, за горната. Функции, които ще конвертирате низ от малки в големи. Ние всички знаем как се прави това, нали? Това е доста лесно. Просто искате да се уверите, че сте can-- това е един и същ процес мисъл. Ти просто обхождане чрез а ти обърне нещата. Или разчитате или когато включите нещата по различен начин. Бих suggest-- I не знам дали отиваме да ви помоля да запомните какво капитал A или капитали Z, или малки букви A, или с малки букви Z са в Ascii, но аз бих предложил може би писмен вид, че определени в случай ние правим. Точно така, вие имате база за сравнение. Като главни букви A, какво, 197? И след това с малки букви е като 50 нещо. 65, да, там ще отида. Така че просто доста много познаете Разликата между тях е 32. Това е доста важно. Да. Дали съм добър по този въпрос? ДОБРЕ. АУДИТОРИЯ: Бихме могли теоретично пиша някакъв от тях надолу, както и на нашия little-- ПРОФЕСОР: Вие теоретично може просто да копирате функцията надолу. Вярно е. АУДИТОРИЯ: Не [недоловим]. Професор: Вие, момчета имат лист. Вие, момчета имат бележка лист. Можете да го написали. Можете да го напиша. Можете да правите каквото си искате с него. Да. Така теоретично, ако искате да отидете за. АУДИТОРИЯ: [недоловим] но ние наистина не задължително трябва да се помни, стойността, ние можем просто използвате, за да горен или да ниска функционална, нали? ПРОФЕСОР: Да. Но ако ви дадохме въпрос който казва, пишете на горната, След това ще трябва да го напиша. Така вие може да се предположи, че сте момчета да имат достъп до всички функции, но ако искате да използвате, за да горен или да по-ниска, това, което и вие трябва да направите? АУДИТОРИЯ: [недоловим] използвате CS50 [недоловим] ПРОФЕСОР: тя е CS50.h? Бъдете внимателни там. Така че да се горна част, за да се намали, е горна част, е по-ниска, функции, които включват манипулация низ са всичко това в нито ASCII или в рамките на математиката библиотеката или в рамките на низ библиотеката. Така че, ако вие използвате тези, функции, да бъдат внимателни, да се помни, да включи тази глава. Така че може би и ти нещо искате да включите във вашия лист, какви са хедъра? Какви са библиотеките сте използвали? Какви функции са вътре тези библиотеки? Това е важно. Да? АУДИТОРИЯ: можем ли просто ченге и да направим таг през Абсолютно всяка буква, която някога сме виждал подобно на всички въпроси? ПРОФЕСОР: Вие може. Аз не знам колко щастливи ние ще бъде в степен че викторина, когато всяка част от код е два пъти по-дълго, тъй като тя трябва да бъде. Аз не знам, бихме могли излитане точка за стил. Но теоретично си код ще е прав. Вие може да ченге и Просто включва всичко. Това е добре също, да. АУДИТОРИЯ: [недоловим]. ПРОФЕСОР: Да. Бих предложил да не правиш, че все пак. Да. АУДИТОРИЯ: Cool. ПРОФЕСОР: Добър въпрос. АУДИТОРИЯ: Така че, най-лошия сценарий. ПРОФЕСОР: Най-лошият случай. Ако сте напълно забравя, бихте могли да направите това. Да. Да, код е точно там. Използвах п вместо брой, но, вие знам, каквото и да плува лодката си. АУДИТОРИЯ: Чакай, така че ние не би трябвало да таг включват, защото ние сме като се започне от INT? ПРОФЕСОР: Да, аз просто се приема, че бяхме помолени да напишат функцията. Ако искате да сте в безопасност, вие вероятно биха могли да го сложи там. Но аз просто не си направи труда, да. Аз дори не знам дали сте нужда от библиотека за това. Тъй като не сте наистина отпечатване от нещо или нещо, нали? Да, аз не знам дали имате нужда от библиотека. ДОБРЕ. Това също е малко по-заедно линиите на манипулиране на паметта. Този вид доста труден. Помисли за това. Имате функция, наречена функция. Можех да го нарекли независимо, но аз избирам да го наречете функции. Аз го имам над основната ми. Не забравяйте, че искате да имате функция, след като вашия основен, искате да сте сигурни, че включва прототип на върха. Но в този случай тя е толкова кратък че се чувствах, че мога просто тя включва върха основните. Не трябва да има прототип, защото той вече е написано по-горе. Така че всичко, което правя в моята основна функция създава число х е равно на 10. Обаждам ми функции функция, и след отпечатване на нещо. И след това, че всъщност какви функции се справя. Вие, момчета, искате да се мисли през това. Защото това е доста труден. Това е много, много труден, всъщност. Помисли какво е това програма ще бъде извеждане. Аз ще ви дам момчета две минути. Хубави дискусии? АУДИТОРИЯ: Да. ПРОФЕСОР: Да. Добре, така че това е труден за причина. И затова ми се искаше да донесе това да вниманието на всички. Някой иска ли да ми дадете предложение, опит? Това, което ще отпечата? Totally глоба, ако не си прав. Да? АУДИТОРИЯ: Мисля, че е 100 и След 10 на две отделни линии. ПРОФЕСОР: И на 10? Някой има ли други предположения? Да? АУДИТОРИЯ: Може би просто защото 10 функция не се връща нещо? ПРОФЕСОР: ОК, така че ние има предположение номер едно е, че предполагам, номер две е Просто ще отпечата 10. Някой има ли други предположения? ДОБРЕ. Така че нека да минеш през това, нали? Всеки път, когато се получи част от код, не просто го погледнете и да бъде като, ах, че толкова много неща! Толкова съм объркана! Подобно, успокойте се надолу. Просто знам, че просто можете да гледам през кода ред по ред. Това е всичко, това е. Това е като четене на книга. Така че с всяка функция, ние винаги започва от основната. Така че ние ще започне в инт основната нищожен, дори на програмата вече тече надолу, нали? Започнете в основната невалидни. Int х е равно на 10. Така че аз отивам да изтрие тази. Отивам да се направи паметта само така можете момчета може вид виждат какво се случва. Не забравяйте, тук имаме нашия стак? До тук имаме нашата натрупаш някъде тук. Stack порасне, нали? И в рамките на пакета, имате захранващия функционират, както и Всички захранващи локални променливи. Така че тук, в размер на 10 х инт. В рамките на нашата основна функция сме създаване на променлива, наречена х. Ние сме за създаване, че равно на 10. Тук имаме някои х, а ти си настройка, която равна на 10, нали, в рамките на основната. Всеки добър? Function. Така че сега, в рамките на основната ни функция, ние се обаждате функцията сме написано по-горе. Така че ние сме вече влиза втората функция. Отиваме да се създаде друг променлива инт х е равно на 100. Какво се случва тук, в стека? Какво се случва, когато ти се обадя по- функция, която създава нови променливи? Какво се случва тук, в стека? АУДИТОРИЯ: [недоловим] пилоти на върха? ПРОФЕСОР: Да. Така че това всъщност създава копие. И това нещо пилоти на върха. Помислете за stack-- комин на книги, една купчина от нищо. Купища на върха, в първите последния вън, издържи, първа изходяща. Така че това ще създаде х тук. Това ще има всички funcs променливи. Страхотен. Така че сега имаме два различни х, че представляват две много различни неща. След това ние ще се отпечата от цялото число на х. Така че нека да отпечатате 100, нали? Защото тук той е 100. Така че това е първото нещо, че то се случва да разпечатате. Тъй като тази функция се връща нищо, Сега тази функция, тази линия в основния готово е. Всеки добър с мен досега? Така че ние сега сме през две от три линии на нашата основна функция. Сега отиваме към третия ред. Отиваме да ФОРМАТ. Какво е това х рамките главната? Какво означава, че представляват? Каква стойност е х сега? АУДИТОРИЯ: 100. ПРОФЕСОР: Това е 100? АУДИТОРИЯ: Все още 10. ПРОФЕСОР: Все още 10. Да. Защото не забравяйте, в рамките на нашата функция, х е равно на 100. Но ако се върнем назад на нашата основната функция, тази променлива се съхранява в различно място на нашия стак. Така че сега ние трябва да се върнем към Основната стак, захранващ локални променливи. И тук х е равно на 10. И така, ние отиваме да разпечатате 10. Така че тя е абсолютно прав. Отиваме да имат мощност от 100 и 10. Да? АУДИТОРИЯ: Когато изчистване, Дали това е грамада или стека, че е [недоловим]? ПРОФЕСОР: Когато изчистване, сте като спомен от купчината и тяхното разпределяне. Така че не е нужно да се забъркваш с нищо от това. Така че предполагам, че по-голяма храна за вкъщи тук е нещо, наречено обхват. За тези от вас, които са най- сесия за преразглеждане снощи, ние говорихме накратко за това. Обхват определя как и когато съществуват вашите променливи. Или в какви рамки съществуват ли си променливи. Доста правилото цяло е, вашата variables-- ако ги създавате вътре къдрава braces-- те съществуват само в рамките на тези фигурни скоби. Така например в нашата функция на функции, ще видите тези две скоби. Ако създавате нещо вътре в него, шансовете са всичко, което правите, е създаване на стека и съхраняване, че има. Същото е и в главната. Това е просто съхранява вътре в основната. Също така искате да бъдете много, много внимателни тук. Защото обхват също поддава се на различни примери. Така например за линия, за инт аз равна на 0. I е по-малко от, аз не знам, 10. I плюс плюс. И имаш код вътре в него, нали? Къде е тази променлива, Аз, всъщност само съществува? Само в рамките на вашия за цикъл. Така Обзалагам много от вас, момчета имат Вероятно възникна тази грешка, когато правиш програми във вашите psets. Колко от вас, момчета са се опитали да използват аз извън а за контур и има грешка? Подобно на имот без референтен числа или нещо такова? Причината, поради, което се случва е така, защото тук сте създаване на нещо, което само съществува вътре си за цикъл. И ако се опитате да го използвате, аз не го прави действително съществува извън него. Така че основно на компютър и каза: Аз не знам за какво говориш. Всичко, което знам е, че аз бях тук, но сега вече не. Така че ако трябва да се създаде за цикъл вътре, нали? И аз отивам да се създаде друг, като INT й, и да го правя каквото. И имате код вътре че контур, й съществува само тук. Но, който съществува и в рамките на т. И така й само съществува в рамките на този цикъл за, като има предвид, аз съществува в цялото това нещо. Всеки ясно? Същото е и с условни конструкции ако искате да създадете нещо. Същото е и с вериги, докато ако е искате да създадете нещо. Това е нещо, което да бъде много, много внимателни, за. Така че това е един наистина добър проблем в усети, че тя показа две неща. Той показа първо, обхват. И това демонстрирано също разпределение на паметта. Защото вие, момчета, трябва да знаят, че функции растат нагоре в стека. И че когато ти се обадя функции, вие създавате същество нов стек памет. Това е много различно от какво е вашето мрежово памет. Да. Уф! Всеки OK за това? Това беше объркващо. Много добри теми да разясни, защото вие вероятно сте Ще получите някои трудни неща, като че на теста. Да. Готино. Ще сложа вие получавате 100 от едната линия и след това 10 от друга страна. Да, много добра. Добре, сега вие ще получите шанса да бъде най-TAS. Можете да получите отговори на всички прекрасната имейли, че понякога получават. Така че, Уважаеми Andi, виждам, мисля, нещо не е наред с моя компилатор. Аз съм сигурен, че ми код е правилен, но аз Получавам грешка сегментация всеки път, когато стартирате. Какво става? Моля, помогнете, много любов. Ако вие, момчета, имам нещо подобно че как бихте отговорили? Това всъщност са много чести въпроси ще ви питат. Е, ако, ние ще ви дадем сценарий, ще ни даде най-добрия си предположение какво се случва. Всеки, който има прободна по какво се случва? Да? АУДИТОРИЯ: Може би dereferenced на нищожна, нещо подобно на показалеца се сочеше нещо нищожна. ПРОФЕСОР: Да, това щеше да бъде Например кога, че ще се случи. Но това, което е по-голямата картина от това, което става тук? АУДИТОРИЯ: Е то вие се опитвате за достъп до паметта, че не сте би трябвало да има достъп до? ПРОФЕСОР: Точно така. Така че мисля за виновен по сегменти, мръсно лимити, зона с ограничен достъп в паметта че не трябва да се допират. Така че доста много, когато се опитвате да index-- като например, сте обявен за масив от нула до девет. Но когато се опитвате да се докоснат, че 10-ти стойност, не е имало достъп до тях. Тъй като не сте го декларира. И така, вашия компютър ще да погледнете, че да бъде като, Ъъъ, която се опитвате да отидете извън пределите на индекс. Отивам да ви дам сегментация вина. Мислете като сегмент, нали? Един допълнителен сегмент, вината е когато се опитате да нарушите нещо и не трябва да има. Сегментация вина е по всяко време се опитате да се докоснат неща че не трябва да се допират. Така общите примери са индекс. Разбира се, ако се опитвате да се докоснат, че е нищожна, които също ще работи, както добре. Ако показалеца се опитва да докоснете неща, които не трябва да се докосват, че може да работи, както добре. Най-обикновено ти ще виж това в масив. Всеки добър? АУДИТОРИЯ: Така че, ако искате за достъп до 10-ата точка и има само ограничение за девет или нещо такова. ПРОФЕСОР: Да, точно така. Почти. Готино. Уважаеми Andi. Така че ние имаме тези прекрасни неща, наречени видове. Ако Обединяване sort-- както ние трион в пример, когато Давид стори цяла нещо в class-- защо, ако това е така, много по-бързо, отколкото някоя от останалите сортове, Защо имаме дори притеснява знаейки някоя от останалите сортове? Какъв е този въпрос наистина ви питам? Каква е три word-- АУДИТОРИЯ: Какво е компромис? ПРОФЕСОР: Точно така. Това е, което на въпроса пита. Какво е компромис между Обединяване на сортиране стихове всякакви други видове? АУДИТОРИЯ: Счита памет, нали? ПРОФЕСОР: Смятате ли, обясни, че малко повече? Първо нека да обясня магазин Merge. Как Обединяване подреди работите? АУДИТОРИЯ: Така че тя работи с разделяне всичко в половината и след това да я сложите заедно и преразпределение в ред, като всеки път, когато се слеят сетовете. ПРОФЕСОР: Доста. Така че мога да изготви този вън, но би вземи ме пет минути, за да го извади. Поглед назад към слайдовете на разделите когато ние обхванати Merge подреди. Точно. Така че начинът, сортиране чрез сливане произведения е да го разделя нещата на половина, и след това просто изглежда в Първите стойностите на всички от тях и сортира само това. Непрекъснато създава нови масиви и поставя нещата все повече и повече в ред. И така, докато това е наистина, наистина бързо, защото it's-- знаете, двоично търсене е п дневник на п. Вие създавате толкова много различни масиви, които сте с помощта на огромно количество памет. И така, макар и да е по-бързо, търговията на разстояние тук е, че вие ​​използвате повече памет. И така, намек, подрежда и претърсване бяха покрити много повече тази година отколкото те са били в предишните години. Вие, момчета, трябва да видят, че отразени съответно в анкетата. Аз определено ще прекарват времето си ще над това, което всички различни сортове са, как двоичен търсене, как линейно търсене на работа. Как да би Псевдокод кодират тези навън. Какви са текущите времена? Нещо като работещи пъти е много лесно да копирате надолу върху бележка лист, нали? Наистина е трудно, когато си в средата на теста и вие трябва да разберат това. Копирайте го надолу. Гарантирам ви, че сте ще трябва да знаете, че. Какви са компромисите? Лошия случай, най-добрите сценарии за всички от тях, много да се опознаем. Да? АУДИТОРИЯ: Трябва ли да знам как се кодира Merge подреди? Подобно, имаме нужда да не забравяйте, рекурсивни? ПРОФЕСОР: Аз силно се съмнявам, просто защото това е като доста сложна. Но това не може да е невъзможно, ако ние ви помоля да използвате Псевдокод го. Да. Да, OK, още един. Това може да са дошли в можете последния брой в малко. Да? Знаете, че всеки чуе? ОК, така че доста много напред всичко, какъв тип програма би било който ви дава изход като този? Не забравяйте да ви помоли да се запознаят с този нов вид отстраняване на грешки инструмент? Какво е името на това? Valgrind, нали Това е програма, където може да се нарече, че би могъл да следите всички паметта сте с помощта на вашата програма и става. Така че, ако имаш нещо подобно, Определено загубен, 40 байта в един блок. Вероятно не сте спомняйки си, за да го освободи. Защото ако използвате байта памет, това означава, че сте преглеждана че паметта, но не сте били в състояние да се освободи. Значи вие искате да се уверите, че сте също използвайки free-- това е function-- да освободи всички на паметта преразпределени чрез изчистване. Готино. Така че този слайд, аз ще го има до. Това е навсякъде по много лекции, в много секции слайдове. Вие наистина искате да се уверите ти просто знаеш всичко това. Или в бележката си лист или ако искам да го запомня, не се колебайте да. Това е наистина, наистина, наистина важно. Също така много добър въпрос, че ние може да поиска. Защо е поглед Selection sort-- в Избор sort-- всички Runtimes се п квадрат. Независимо от това как списъка въпрос за вие като, така че защо да е Selection sort-- Аз ще ви дам момчета 30 втори се мисли за това. Защото това е вид объркващо. То е свързано с някои концептуална мисъл. Защо време изтече ще бъдат същите в двете най-лошите и най-добрите сценарии? Да? АУДИТОРИЯ: Защото Selection подреди всеки позиция или пространство в този малък масив нещо, или нещо такова. Така че дори и в най-добрия случай, дори да е перфектно подредени, тя все още ще трябва да бъде като, OK, една. В първата си място имам един. И проверете всички от тях. OK, един е най-малката. И след това тя отива отново и е като, OK, две е най-малката от всички неща. Но тя все още трябва да провери всеки един. ПРОФЕСОР: Да. Така например, нека просто кажем, ние сме списък, вече подредени, масив 04:59. Начинът, по който Избор на видове е, че тя преминава през, той проверява тези две. Тогава той проверява тези две. И тогава се проверява, и да го проверява. Тя продължава да проверява всички от тях, независимо от това дали или не това е всъщност сортирани. Защото това е просто Между другото нещо работи. И така, този въпрос е нещо като концептуален въпрос ще попитате. Когато за пръв път, можете да знам какво Selection сортиране е, нали, за да бъде в състояние да отговори на въпроса. Трябва да сте в състояние да разберат концептуално какво става. И тогава можете да го прилага и си мисля, OK нека само си представете най-лошия сценарий. Те всички са в низходящ ред. Как ще се отрази, че? Ами ако това е възходящ ред? Ако тя вече сортирани? Как ще се отрази, че на автономна работа? И тогава Selection подреди, ще забележите, че всъщност не е от значение. Тъй като сте проверили всички стойности, независимо от това какво се случва. И така добри неща, за да си спомнят. Защо някои видове се различават от другите и как най-добре и най-лошите сценарии ще се отрази на всички от тях. Отивам да наистина удари в всевъзможни защото това ще бъде на викторината. Да. ДОБРЕ. Има шест минути преди края. Мога да взема три минути на въпроса. Също така мога да се мотае наоколо за като 20 минути след вписванията ако искате да зададете въпроси, както добре. Някой просто трябва наистина кратко въпроси или концептуални въпроси те са неясни за момента? Да? АУДИТОРИЯ: Може ли да поговорим малко малко за побитовите оператори? ПРОФЕСОР: Да. Така че побитовите оператори са нещо, което най-вероятно може просто да искате да сложите на вашия лист. Така quickly-- Аз не искам да отидат твърде много в дълбочина защото Харвард, в техния преглед сесия, покрита го доста добре. Побитова оператор, има пет от тях, нали? Има това, което е х или функция, има амперсанд, който е и. Тръба, която е Or. И тогава ще трябва двамата различни видове смени. Ако ти дам две стойности, ако има Аз ви давам, като, едно и едно. Какво щеше да се оцени, че да? Ако ти дам вярна и вярно, вярно ли е? Какво ще кажете за вярно или невярно? И все пак е вярно, нали? Защото има един или. Ние най-вероятно ще ви дам номера. Така че не забравяйте, един е равен Вярно, нула равнява фалшива. И ние може да ви даде тези неща и да ви помоля да ни каже какво ще се случи. Harvard тя обхваща в рамките на първите 10 минути от тяхното изследване на сесията наистина, наистина добре. Така че, момчета искат да направят Сигурни ли сте, да погледнем назад върху това. АУДИТОРИЯ: Дали pisa5 ще бъде на теста? ПРОФЕСОР: No. Дори не погледна pisa5 точно сега. Това е трудно. Просто дори не се притеснява гледа pisa5. Въпреки това, тъй като някои намеци и предложения, I Бих предложил да започнете pisa5 веднага след като теста е приключила. Това ще бъде най-трудното седмица, но тогава вие, момчета, ще бъде тя премина по хълмовете на подвижния зелено и кученца, и това е добре. В този клас се получава значително по-лесно след петата pset. АУДИТОРИЯ: Работно време са неделя, понеделник? ПРОФЕСОР: Да, така ще работно време неделята до понеделник за pset. Работно време тази вечер същество Просто ще е мнение за теста. Ако някой иска да дойде и да поиска на TAS въпрос, ние ще бъдем там. Ще взема още един въпрос, може би ако някой има един въпрос? Да? АУДИТОРИЯ: Когато сте определящи възли, [недоловим] ако ти кажа възел звезда и след това следващата, прави компютърът автоматично Разбирам, че ти си отнасящи се до друг указател? ПРОФЕСОР: No. АУДИТОРИЯ: Трябва да се свържете отново го [недоловим]? ПРОФЕСОР: Така че в общи линии структура на на един възел се, не забравяйте, това е като да създавате възела и тогава имате показалеца нарича следващата. Всичко, което правите е като структурата там. Трябва да зададете че показалеца някъде. Така че компютрите не прави знам това, което прави, все още. Трябва да сте в действителност да я възложи, когато можете да започнете да създавате свой свързан списък. И това е, което най-вече pset 5 ще бъде на. Така че не се притеснява за всеки от които в момента. АУДИТОРИЯ: Така че ние не трябва да се фокусира твърде много върху списък линк, просто общата концепция? ПРОФЕСОР: Само доста много купчини, опашки, с връзки списъци, дървета, хеш таблици. Просто бъдете в състояние да се знае какви са те. Ние няма да попитам Искате ли нещо специфично защото ние наистина не са свършили pset че обхваща всяка от които все още. Така че в последните две минути преди Аз ви освободи, за да убие този тест. Доста подобно, мисля за това как далеч сте момчета са дошли в този клас. Спомням си, когато две седмица от този клас, някои от вас прекарат три часа написването вода. Колко време ще ви отнеме момчета да пишат вода сега? 30 секунди, може би? Помислете с колко вие, момчета, са се научили. CS е наистина, наистина трудно тема. Няма съмнение в това. Това е трудно, затова никой не го изучава. Това е просто трудно. И това е напълно наред. И аз съм наистина горд, че всеки е направил толкова далеч. Psets не са лесни. Те отнеме много време. Вие, момчета, аз никога няма да ви помоля да напише играта на 15 или Vigenere на pset. Няма нужда да се побърквам само за това. Всички ние тестваме тук е да се оцени Вашата концептуално знание, както и тъй като някои от вашите основни умения за кодиране. Тестът е предназначен за бъде наистина предизвикателство. Например, тя е предназначена за да не се получи 100. Тя е предназначена също така за вас, за да най-вероятно не е в състояние да завърши в 75-та минута. И това е напълно наред. Аз съм студент себе си. Знам, аз го мразя, когато ходя от викторина бъде като лайно. Това беше наистина трудно. Вероятно това, което се случва да happen-- и това е напълно наред, Казвам ви момчета точно сега. Средствата по тези неща Не са високи най-малко. А за тези от вас, които Получавам, като, тройки по проблемните комплекти, това не означава, че си ще получите 60 процента от този клас. Ако получите 60% при викторина, че не е така означава, ти започваш да се получите D в този клас. Ние виждаме, особено аз, за тези от вас, в рубриката ми, Виждам колко е трудно вие, момчета са всички работещи. И аз да следите на това. Вие, момчета, ще се оправи. Няма никаква институционална памет на щастие в края на семестъра. Защото всички деца на Харвард са красноречиви приятелите си, о, вие ще се оправи. Никой не иска да ви каже, че момчетата тук. Така че аз трябва да ви кажа, момчета, че тук. Вие, момчета, ще се оправи. Толкова съм горд с всички вас, момчета. Тестът ще бъде трудно. Проучване за него, и след това просто да го изхвърлите. Пригответе се да науча нови неща. И яде бонбони. Имаме имаме много бонбони. Вземи добър сън през нощта. Не, не спя, защото че ще бъде наистина лошо. CS е много логика. Ако не спите, вие не може да функционира, и вашият мозък не може да функционира. И аз ще бъда тук за следващите 20 та ако някой иска да се мотае наоколо. Вие, момчета, ще го убия. Късмет.