[Powered by Google Translate] Члан Проблем Сет 2: Хакер Едитион Роб Бовден, Универзитет Харвард Ово је ЦС50. ЦС50.ТВ Дакле, ја сам Роб. Ја сам виши у Киркланд. Ово је моја трећа година ТФинг ЦС50. То је први пут да смо се мења са традиционалном стилу предавање секцији, где смо некако преглед онога што се догодило у предавању и онда ви постављате питања, сада бити много више проблема бази, где користимо простора, и - Ох, па је идеја да се иде на тај линк сам ти послао, а онда ћеш бити у мом простору. Да ли неко немају лаптоп? Ок. Дакле, ми ћемо користити, а ми ћемо да радимо проблема живе у одељку и дискутују их и схватите шта није у реду и ја могу повући неке од вашег кода, и можда разговарати о вашим идејама. Дакле, да ли је неко имао проблема? Можете да ћаскате са стране, ја не знам да ли ћемо имати разлога за то. Сада, као и претходни суперсецтион, ако сте били у тој класи, знаш шта је то у вези. На све П сета тамо ће бити ове секције. Дакле, П-сет 2, спецификације, претпостављам да га видели на П-СЕТ 1 већ. Али можемо да погледамо П-сет 2 за шта ћемо се иде преко данас. И видећете део питања. Дакле, ово ће бити у свим П-сета, тамо ћу бити део питања. До сада смо рекли: "Размислите о овоме прилику да вежбају." Нећете бити затражено да достави овај програм. Идеја је да се они требало да врстом помоћи да почнете са проблемом сету. Претпостављам на Хацкер издању, многи од њих би требало да буде само нова, занимљиве ствари да уче. Они не могу бити директно применити на проблем сету. И сада нећемо да их поднесу, али у теорији, каснијих проблема сета, можда их поднесе, па можете да дође до одељка или гледати одељак да бисте добили одговоре, или можете једноставно да их добију на своју руку Ако се не осећате као да ужива моје присуство. Дакле - Мислим да је ово прво. О. Такође, према овим деловима питања такође смо да постављате питања о шорц. Претпостављам, у теорији, требало да гледате ово пре доласка у град, али то је у реду, ако не, ми ћемо ићи преко њих у сваком случају. Дакле, можемо да почнемо са овим: "Како вхиле петље разликују од до-вхиле петље? Када је други нарочито корисно? " Дакле, свако ко има било -? [Студентски] Тхе уради док петља ће се увек извршити барем једном. Да. Дакле, то је разлика. Док петља - Ја ћу само то овде - док петља, имамо стање овде, а до-а, ви немате услов док не дођемо овде. И тако, када ваш програм је извршавање, а добија се на вхиле петље, одмах проверава да ли је овај услов. Ако тај услов није истина, то ће само прескоче потпуности петљу. До-вхиле петље, док се програм извршава, он добија на "уради". Ништа се не дешава у овом тренутку, само наставља извршење. Онда када се удари на "време" ако је услов тачан, то ће петља назад и да га поново и опет и опет све док услов није истина и онда само пропадне. Дакле, разлика је у томе, да се ово прескочи одмах од самог почетка. Ово нужно обавља једном и онда може да изврши више пута ако је услов и даље истина. Дакле, док петља ће то урадити једном, или - петљу вхиле - нећемо морати да уради на све, јер чим стигнемо до њега, ако услов нетачан, само ћемо право прескочити преко њега. Док до-вхиле петље, ми ћемо га погубити једном, нужно. Онда, када дођемо до стања, ми смо проверили да ли је то истина или лаж. Ако је то истина, ми ћемо то урадити поново, ако је лажна, само ћемо наставити даље. Дакле, када је други посебно корисно? Тако да могу да кажем да је у целости од 4 године, 3 године, без обзира на, да сам био програмирања, ја сам користио ово, као, мање од 10 пута. И вероватно 5 од њих су у ЦС50 када смо увођења уради вхиле петље. Дакле, када сте користили уради вхиле петље? Када је - да? [Студентски] Када покушавате да добијете унос корисника, или нешто желите да проверите - Да. Дакле, до-вхиле петље, корисник улаз је велики. Зато је на првих неколико проблематичних сетовима, када желите да пита корисника, као, "Дајте ми стринг," не може наставити док ти тај низ. И тако ти нужно, треба да пита за ниску најмање једном. Али онда, ако су они одговорили нешто лоше, онда морате да се петљи назад и питати. Али осим корисничког уноса, то је веома ретко да наиђем случај где желим да петљи "најмање једанпут", али можда и више. Питања или -? Да ли је неко користио до-вхиле петље негде другде? Ок. Дакле, следећи је, "Шта непријављен идентификатор обично указују ако звука коју кланг? " Дакле, какав код да пишем да 'црно идентификатор?' [Студентски] То је к = 2? Дакле, можемо само да га испробате овде, к = 2. Ми ћемо покренути ово - Ох, нисам кликните на њега. Дакле, овде смо добили - све у реду. "Коришћење непријављеним идентификаторима к." Тако да је непријављени идентификатор, променљива. Често ће позвати променљиве идентификатор. Тако да можда не знате да је заправо променљива, али не знам шта је то. Дакле, то је идентификатор. Дакле, зашто је непријављен? Да. Дакле, да би било јасно о терминологији, декларација променљиве када кажете "инт" или "стринг и," шта год. Иницијализација променљиве, или додела променљиве, је кад кажете "к = 2". Дакле, можемо да урадимо то у одвојеним корацима, инт к, к = 2, и док - можемо имати гомилу ствари овде - али док ова линија деси, к је увек неиницијализоване, али је изјавио. И тако смо очигледно не може урадити у 1 линији, а сада смо декларисање и иницијализација. Питања? И на крају, "Зашто је Цезар шифровања није толико сигуран?" Дакле, прво, да ли неко жели да каже шта Цезар Ципхер је? [Студентски] Цезар шифра је само да мап, ви смени свако слово, известан број писама иду преко, и крећу уназад, и није баш сигуран, јер постоји само 26 могућих опција, а ви само треба да пробате сваки 1 од оних док га добити. О. Дакле, ја треба да поновим? Цезарова шифра, то је - мислим, да ћете се бавити тим на проблеме који вас - или ја претпостављам стандардну издање проблема скупа који није на хакерске издању. Дакле, на стандардном издању проблему сету, добићете поруку као, "Хелло, Ворлд" а имате и број као 6, а ти узети ту поруку, и сваки индивидуални карактер, окренете га за 6 позиција у писму. Тако је "х" у здраво постати х-и-ј-к-л-м-н. Дакле, прво слово би н. Ми радимо исту ствар са е. Ако имамо, рецимо, з или тако нешто, па смо се вратили обмотана да '.' Али сваки лик добија цицлед касније 6 карактера у писму, а то није баш сигурно пошто постоји само 26 могућности за колико начина можете да завршимо једну писмо. Дакле, можете једноставно покушати свих 26 њих и, вероватно, дуго довољно поруци, само 1 од тих могућих 26 ствари које ће бити читка, и читљив једна ће бити оригинална порука. Дакле, то није добар начин за криптовање ништа. Независно од ових шорц, "Шта је функција?" Дакле, шта је функција? Да. [Студентски] То је као посебан део кода који можете да позовете да иду преко и онда се вредност повратка вхатевер. Да. Зато ћу да одговорим тако и одговорити следећи - или понављање од такође само одговорили на следећи. Можете да користите функције уместо само копирањем и лепљењем кода изнова и изнова. Само да тај код, ставите га у фуцтион, а онда само да позовете функцију где год да су копирање и лепљење. Дакле, функције су корисне. Дакле, сада ћемо урадити стварне проблеме. Прво. Тако да је идеја о првом је, да га прође низ, а без обзира на - или пише малим словима? Он не каже све малим словима. Дакле, порука може бити било шта, и - ох не. Јесте. "Због једноставности, можете претпоставити да корисник ће само улаз мала слова и размаке." Тако смо га донесе поруку са само малим словима, а затим смо наизменично између капитала и малих слова - мењамо стринг буде престоница и мала, наизменично. Дакле, пре него што вам други чак зароне у проблему, шта је прва ствар коју морамо да урадимо? Ох, шта сам само кликните на? Ох, само кликнуо на е-маил овде. Дакле, прва ствар коју треба да урадите - гледам погрешном? Је ли ово део овога? Не, они су и даље ту, ипак. Ок, још увек овде. Сада не можемо да претпоставимо -? Да. Овде не можемо да претпоставимо да је то само мала и простори. Дакле, сада смо морали да се изборимо са чињеницом да су слова бити шта год желимо да буде. И тако прва ствар коју желите да урадите је само добио поруку. Ми само треба да се низ, Стринг с = ГетСтринг, ок. Сада тај проблем, постоји неколико начина да радим. Али ми ћемо желети да овде користите над битовима операторе. Да ли су људи који или нису били на суперсецтион, или тако нешто, и не знам шта над битовима оператери? Или како се они односе на АСЦИИ на било који начин? [Студент] нисам био у суперсецтион, али знам шта је над битовима оператери. Ок. Па онда не морам да идем преко основама њих, али ћу објаснити шта ћемо желети да овде користите. Дакле, '': Бинарно представљање капитала А, број 65. Идем само да погледам - ​​41 ће бити 01000001. Тако да би требало да буде 65 у децималне, тако да је ово бинарна репрезентација карактера капитала А. Сада, бинарни представљање карактера мала '" ће бити исто, скоро. Да ли је то - 6, да. То је у реду. Дакле, бинарни капитала, бинарни мала '.' Дакле, приметите да је разлика између и "'је ово један бит. И ово се дешава да се 32 бита, се бит који представља број 32. И то има смисла, јер је 65; '' је 97. Разлика између њих је 32. Дакле, сада знамо да конвертујете из А 'А', узимајући и над битовима га ОРинг, са - који изгледа као 1. Ово је над битовима ИЛИ, са 00100000, као и да ће дати нас '. " И ми можемо добити од "А" до које над битовима Андинг са 11, 0 у том месту, 11111. Дакле, ово ће онда нам дати тачно шта 'био, али отказали овај појединачни мало, тако да ћемо морати 01000001, ја не знам да ли сам у праву рачунају. Али ова техника над битовима ОРинг да од капитала у мала, и над битовима Андинг да се са малим до капитала није искључиво А. Све писама, К. вс к З вс з сви они су само ће да се разликују од овог једног бита. И тако можете користити ово да се промени из било ког мало слово на било словом и обрнуто. Ок. Тако једноставан начин добијања из овога - па уместо да написати шта год 1011111 је - једноставан начин представља овај број, а ово није један да сам отишао у суперсецтион, али тилда (~) је други оператер над битовима. Шта је то ~ не гледа у битном репрезентације. Хајде да узмемо било који број. Ово је само неки бинарни број, а шта не ~ је то само окреће све битова. Дакле, ово је била 1, а сада 0, ово је 0, сад 1, 010100. Тако да је све ~ има. Дакле, 32 ће бити број - отарасити тога - па 32 ће бити број 00100000, па ~ ово ће бити тај број овде да сам андед 'А' са. Да ли сви видели? То је прилично уобичајено, као када желите да схватите каснијих ствари које бисмо могли да се виде, када желимо да видимо да ли - или желимо све, сваки мало скуп, осим за 1 Ви имају тенденцију да се ~ о мало да ми не желите да подесите. Дакле, ми не желимо да 32 битни сет, па смо се ~ од 32. Ок. Дакле, можемо да користимо све оне овде. У реду, тако да је у реду ако нисте урадили, полако се хода преко заједно, или ходају због тога, па - кроз ово. Шетња кроз ово. Дакле, имамо ниску, а ми желимо да петља преко сваког знака у том низу и уради нешто на њега. Па како ми петља преко низа? Шта треба користити? Нећу то урадити овде. Да. Дакле, имам свој итератор, а он је то рекао, али како да знам колико карактера у низу? Стрлен (с), онда сам + +. Дакле, оно што сам овде урадио није најбољи начин да се раде ствари. Да ли неко зна зашто? Зато сте проверу језик ниске сваки пут. Тако ћемо желети да преместите стрлен, могао бих да кажем овде, инт дузина = стрлен (с), и онда ја <дужина, а у случају да нисте видели раније, Такође сам могао да урадим инт и = 0, дужина = стрлен (с). И тако је то нешто боље, јер сада сам ограничен обим променљиве дужине само да ово 'за' петље, уместо да га проглашава раније и да увек постоји, и у случају да нисте ухватили зашто је то лоше, или зашто оригинални је био лош, то је - почети на за петљу. Проверио сам стање. Да ли је И <дужину с? Дакле, дужине с, хајде да радимо са "здраво" све време. Дакле, дужина с, х-е-л-л-о. Дужина је 5. Дакле, и = 0, дужина је 5, па нисам је <5, па петља се наставља. Онда смо опет. Ми смо проверили стање. Да ли је И <дужину здраво? Дакле, хајде да проверимо дужину здраво. Х-е-л-л-о. То је 5, ја не <5, па смо опет наставити. Тако смо се обрачун, ми смо здраво бројање за сваке итерације петље, чак мислили да никада неће променити, увек ће бити 5. Тако смо само запамти 5 напред, и сада је све боље. Дакле итератинг преко целог низа. Шта желимо да урадимо за сваки карактер стринга? [Студентски говорећи, неразумљив] Да. Дакле, ако лик не алфабетски, онда ми само желимо да прескочи преко њега. Зато што смо само стало уноса слова слова; не можемо да искористи број. Па како да радимо ово? Дакле нашим условима, тако да ако желимо нешто - проверите да ли је то по абецедном. Па како ћемо то проверити? [Студентски] Можете само да користите функцију је алфа. Да ли је то у један од њих, или било укључују свиђа, цхар.х или тако нешто? Немојмо се користе алфа функција, и користите експлицитни - тако смо с [и], то је осми карактер с, сетите се да стринг низ знакова, па осми карактер с. Сада, ако је слово, знамо да мора да буде у одређеном опсегу. А шта је то домет? Да. Дакле, ако с [и] је ≥ 65, а с [и] је ≤ 90, шта треба да урадим уместо тога? Да. Тако да апсолутно не треба никада није ни потребно да знате АСЦИИ вредности ишта. Никада мислите о бројевима 65, 90, 97 и 102, или шта год да је. Не треба - 112 - не морате да знате оне уопште. То је погрешна. Користите само једним наводнике знакове, самохрани куоте константе. Дакле, '', а мање од 90 је 'З' И то је знатно боље - не бих знао са врха моје главе који је З 90. Ја не знам са врха моје главе да 'З' је капитал З. Дакле, докле год је то у распону од капитала до капитала З, или можемо проверити малим словима Или, ако је то у опсегу ≥ '' и ≤ з. Тако да је наш услов. Стил за где да стави те ствари варира. Ја ћу то да урадим овако. Сада, шта желимо да урадимо? Знамо да је ово писмо је лик, алфабетски карактер. Зато морамо да наизменично да ли је ово сада треба да буде слово или мало слово. Како да пратите од којих је један желимо да буде? [Студентски гласови, неразумљив] Па да, али дозволите ми да проверим. Модул 0-2 је рекао, предлог избачени, и ја се слажем са тим. Осим најаве да, као - ово случај? Да. То је сваки други, али не можемо модул 2 од ја, или сам мод 2, будући приметити да је Е капитал и '' је мала? Али постоји простор одвајајући их? Дакле, они ће бити исти мод 2, али су различити случајеви. [Студентски питање, неразумљив] Да. Дакле, ми ћемо само да пребројите. Такође смо могли да урадим овде ако бисмо желели, да би добили мало незграпан у за петље декларације, ја ћу га ставити овде. Дакле, инт број = 0 почиње у. И сада, ја ћу да бројим колико азбучном карактера смо имали. Дакле, ми неизбежно ћемо рачунати + +, јер смо пронашли још један алфабетски карактер. Али, сада кажете ако бројање мод 2. Па шта ако бројање мод 2? О. Учинићу == 0 за сада. Такође ћемо ићи преко тога. Дакле, ако Број мод 2 == 0, шта онда? [Студенти одговор, неразумљив] Дакле, желимо да заврши великим словима. Постоје 2 предмета, велика и мала су 2 случаја. Дакле, ако смо у малим словима морамо да га велика. Ако је велика ми не треба ништа да урадите. Али, постоји начин - схоулдн'т су окренути - да ми ни не треба да се провери да ли је велика или мала? Шта можемо да урадимо да увек проверите да ли ћемо увек завршити на велико? Па погледајте шта смо урадили за мала 'А', шта ако смо урадили исту ствар тачно на велика? Да ли велика промена, односно да ли се вредност промене? Да. Дакле, свако слово над битовима андед са ~ 32 ће бити да иста велика карактер јер је за било велико слово 32. бит није постављен. Дакле, ако желимо да донесе карактер с [и], желимо да постане мала или велика. Дакле, ако је мала, сада је велика, ако је велика, то је још увек велика, и то је то. Рекао сам то у суперсецтион: Можете користити 32 ако хоћете, али ја више волим да радим теже 'А' -, уместо само обичан 32, јер то може бити било који други део. После 32 бита, то може бити било који од ових, или ми не би било довољно имати Бројеви се представљају све карактере. Дакле, ако сте добили 32 бита, то би могао да буде 64 бита, то би могао да буде 128 бита. Било која од ових бита може бити мало да прави разлику између великих и малих. Ја не би требало да знају да је то 32-битни. Ја могу да користе ову 'А' - да би добили мало да се разликује између два без потребе да се ослањају на магичног броја који је 32. И сада, још рачунају било чудно, па шта желим да урадим? [Студентски одговори, неразумљив] [Студентски] Шта је то? Ја ћу то да урадим у 1 секунду. Па сад, ако желим да - Желим да се уверите лик је сада мала, па ја могу или са 32, а '' 32 што значи - ОДГОВОР Али, погледајте, по истом образложењу, као и претходни, да ако Писмо је већ мала, а затим ОРинг од 32 само наставља оно слово. Она није променила оригиналну карактер. Али сад не морам да се избегне говорећи: "Ако је мала, само заборави на то, ако је велика, а затим га променити. " То је много згодније да то урадите. [Студентски] би да стратегија одузимањем упперЦАСЕ од малих слова посла ако то није било 32? Ако је, рецимо, 34 или тако нешто? Дакле, морате да знате да је разлика између 2 је -? >> 1 бит. То би могло да буде више од 1 бита, док сви бита испод овој позицији су исти. Зато нам је потребно најмање 26 знакова - или, постоји 26 знакова. Зато нам је потребно најмање 26 бројева представља разлику - Разлика између и "" мора да буде најмање 26, иначе ми не би представљало све капиталне бројеве. То значи да, ако почнемо од 1, то ће да користе све ове бита, свих ових првих 5 бита, да представљају све кроз З. Зато следећи битни, или ово мало, следећи бит је онај који је изабрао да разликујете и '.' То је такође разлог зашто у АСЦИИ табели, постоји 5 симболи раздвајају капиталне писма малим словима. Пошто су то симболи, екстра 5 да доноси је 32 био је разлика између њих. [Студентски] Тако да смо могли да радимо, јер је дизајниран АСЦИИ тај начин. Да. Али АСЦИИ - разлика може да буде оба бита. Као, ако је 10000001, а '' је 11100001 - заборавио сам, шта год. Али, ако је то то, онда можемо даље да користимо 'А' - А. То је управо разлика између и "'је и даље ова 2 бита. Мислим да је то написано 48. Да ли је 32 + 64? Ја мислим да јесте? То је још увек ће бити 2 бита; сваки карактер, рецимо, З и З, К и К, они би и даље имају исте тачне битове постављене осим оних 2 бита. Дакле, докле год је то увек тачно, без обзира на то да ли смо користите АСЦИИ или неки други систем, докле год постоји само одређени број битова који су различити за сваки карактер, онда то ради добро. То је само да 32 је успостављен, јер је то прва коју смо можда могли да користе. >> Кул. Склон сам да волим, у случају да нисте видели, ако блок је само једна линија, можете добити ослободити од заграда, па сам обично преферирају радим ово. Такође, знате шта можемо да урадимо ствари као с [и] + = 1? Такође можете да урадите с [и] над битовима и = 32. И над битовима ОР = 32. Такође, рачунамо мод 2 == 0. Дакле, запамтите да је - нећу га написати - било не-нула вредност је тачно, и 0 је лажна. Дакле, "ако Број мод 2 == 0" је исто као и рећи "ако не рачунамо мод 2". Вероватно бих само обрнута линије и рекао, "ако бројање мод 2, Не ИЛИ 1, иначе не АНД 1 ", тако да ми не треба" не ". Али ово ради исто тако добро. А шта друго да урадим овде? Можете да их комбинујете са тернарни ако сте желели, али онда бих само да се ствари компликованије и вероватно још теже да чита, тако да то неће учинити. Свако има неке друге предлоге? Да ли је то све проблем тражио? О, да. Дакле, добили ослободити од тих празних редова, сада ћемо штампати ф% с као један за гудаче, Ми ћемо штампати Ф, С. Сада хајде да пробамо. Да ли радим нешто погрешно? То је \ "; Хоћу н. Ок. Сада ћемо га покренути. Вероватно це викати на мене. Стрлен је у стринг.х. Дакле, ово је лепа ствар у вези кланг је то вам говори шта је унутра, уместо ГЦЦ које само каже: "Хеј, заборавио си нешто, ја не знам шта је било." Али ово ће ми рећи: "Ти треба да укључи стринг.х." Па нисам тражити ништа, тако да не каже ништа. Али, ми ћемо учинити њихов пример, "Хвала 4 адд". То изгледа добро. Ура. Дакле, повратак у ваш главни, ја скоро никад то урадити. То је опционо. А главни је једина функција за коју је обавезно. Ако не врати ништа од главног, то је претпоставити да сте хтели да се врате 0. Питања? Ок. Тако сада други проблем. "Сетите се из другог предавања недељно 2 је да замене вредности променљивих 2 'доношењем та 2 варијабли функцију (чак и ако се зове замену) не баш ради, барем не без 'тројке' ". И игноре показиваче док не стигнемо до њих. Желимо да замени 2 променљиве, ми не користимо функцију да то уради. Ми још увек ћемо то урадити у главни као што каже. Али да користе те 2 променљиве, ми не желимо да користите привремену променљиву. Постоје 2 начина да се то уради. Можете то урадити користећи своје традиционалне бинарних оператора. Дакле, да ли неко зна брз и прљав начин да се то уради? То заправо може да потраје минут размишљања. Ако ја имам - Ја ћу поставити проблем се као да питате. Дакле, ако имам 2 варијабле, која је само цео да ми дају, а сума променљива Б, који је још један цео број који сам дао. Дакле, ако имам ове 2 променљиве, сада желим да их замене. Традиционални, користећи своје редовне бинарних оператора, мислим, као +, -, ÷. Нису над битовима оператори који делују на бинарни. Дакле користите -, + ÷, и сви они. Могли свап радећи нешто = + б, и б = - б, = - б. Дакле, разум проверите, а затим ћемо видети зашто се то ради. Рецимо = 7, б = 3, тада + Б ће бити 10. Дакле, ми смо сада постављањем = 10, а онда радимо б = - б. Дакле, ми радимо б = - б, која ће бити 7, и б = - б опет, или = - б. Који ће бити 10 - 7 што је 3. Дакле, сада, исправно "," било је 7, б је 3, а сада је б 7 и '' је 3. Дакле, та врста има смисла; '' је комбинација 2 бројева. У овом тренутку, '' је комбинација, а онда смо одузимањем од оригиналног б, и онда смо одузимањем шта је оригинал '.' Али ово не ради за све бројеве. Да бисте видели ово, размотримо систем, па смо обично мисле целих бројева као 32 бита. Хајде да радимо на нечему што је само као 4 бита. Надам се да смислимо добар пример сада. Па, знам, ово ће бити лако. Рецимо наши 2 бројеви 1111 и 1111, тако да смо у бинарном сада. У стварним децимале, ако желите да мислите о томе на тај начин, = 15 и б = 15. И тако очекујемо, пошто смо их заменили - они чак не морају да буду исти бројеви, али сам то урадио овако. Хајде да их не би исте бројеве. Урадимо 1111 и 0001. Дакле = 15 иб = 1. Након што смо их заменили, очекујемо '"буде 1 и б да буде 15. Дакле, наш први корак је = + б. Наши бројеви су само 4 бита, тако да ',' који је 1111, а + б, која је 0001, ће завршити као 10000, али имамо само 4 бита. Дакле, сада = 0. А сада желимо да подесите б = - б - у ствари, то и даље ради се савршено. = - б - хајде да видимо да ли ово ради из савршено. Дакле, тада је б = 0 - 1, која ће и даље бити 15, а онда = - б, која ће бити 1. Можда ово функционише. Осећам као да је разлог то не ради коришћењем редовне. Ок, тако да ради на претпоставци да се не ради са регуларним бинарних операција, и ја ћу тражити - Ја ћу Гоогле да видимо да ли је то истина. Дакле, желимо да то урадимо помоћу оператора над битовима, а траг је овде КСОР. Дакле, увођење КСОР (^) ако нисте видели још. То је, опет, над битовима оператер, тако да мало делује по мало, и то је - Ако имате битове 0 и 1, онда ће то бити 1. Ако имате битова 1 и 0, то ће бити 1, имате битове 0 и 0 то ће бити 0, и ако имате битова 1 и 1 да ће бити 0. Дакле, то је као ИЛИ. Уколико било који од бита су истините, то је 1, али за разлику од ИЛИ, то не може бити оба бита који су истина. ИЛИ би ово бити 1, ЛОЛ би се ово бити 0. Тако ћемо желети да користите КСОР овде. Размислите о томе за минут, а ја ћу на Гоогле. Па, не можеш прочитати да, ја тренутно сам на КСОР страници свап алгоритма. Надамо се да ће вам објаснити зашто сам Зар не - То је управо алгоритам који смо управо урадили. И даље не видим зашто - Мора да сам управо покупио лош пример, али овај случај где '' догодило да постане 0, након добијања на 5 бита, тако да сада '' је 0, то је оно што се зове "цео преливања". Према Википедији, "За разлику од КСОР свап, ова варијанта захтева да се користи неке методе да гарантује да је к + и не изазива целобројну преливање ". Дакле, ово има проблема, а то је био цео преливају, али сам урадио нешто лоше. Нисам сигуран. Ја ћу покушати да дођу до још једног. [Студентски] Па, није цео преливна када покушавате да ставите број тамо већи од износа битова сте додељени? Да. Имамо 4 бита. То је - ми смо имали 4 бита, онда пробајте да додате 1 до ње, па смо на крају са 5 бита. Али пети бит само добија одсечена, да. То је заправо могао - [Студентски] Да ли то ти баци грешку, или да ли то - да ли би то баци грешку? Не Значи, нема грешке. Када дођете до окупљања ниво, специјална мало негде је постављен да каже било преливања, али у Ц једноставно некако не баве тим. Ви заправо не може да се бави, осим ако користите специјалне монтажне инструкције Ц. Размислимо о кор свап. И мислим Википедиа артицле можда такође каже да је - Дакле, то је такође довео до модуларна аритметика, тако да сам био у теорији, радећи модуларна аритметика када сам рекао да 0 - 1 је 15 поново. Тако да би могао заправо - на редовној процесором који чини 0 - 1 = 15. Пошто смо завршили на 0, ми одузети 1, па онда само обавија назад около 1111. Дакле овај алгоритам би заправо ради, + б, - б, б -, то може бити добро. Али има неких процесоре који не раде то, па не би било добро у тим специфичним оне. КСОР своп ће радити на било ком процесору. Ок. Идеја је да то треба да буде исти, мада. Где ми користимо КСОР некако добију информације о оба у 1 варијабли, и онда поново извадити информације о појединачним варијабли. Дакле, да ли неко има идеју / одговор? [Студентски одговор, неразумљив] Дакле, ово би требало да ради, а такође, КСОР је комутативна. Без обзира на то којим редом ови бројеви 2 деси да буде у овде, овај резултат ће бити исти. Тако ^ б је б ^. Такође можете да видите ово написано као ^ = б, б ^ =, ^ = б поново. Дакле, ово је у реду, и да видимо зашто то ради, мислим да је од битова. Користећи омањи број, рецимо 11001 и 01100. Дакле, ово је '", ово је б. Тако ^ = б. Ми ћемо бити постављање 'а' = на КСОР ова 2 ствари. Дакле 1 ^ 0 је 1; 1 ^ 1 је 0, 0 ^ 1 је 1 и 0 ^ 0 је 0, 1 ^ 0 је 1. Дакле ',' ако погледате децималног броја, то ће да буде - нећеш видети много односа између оригиналног 'А' и 'новог' али гледајући бита, '' је сада као мрежицом информација оба оригиналног 'А' и оригиналног б. Дакле, ако узмемо б ^, видимо да ћемо завршити на оригинал '.' А ако узмемо оригинални '' ^ новом ',' видимо можемо завршити у оригиналном б. Дакле, (^ б) ^ б = оригинал '.' И (б ^) ^ = оригинални б. Постоји - још један начин гледања на ово је нешто ЛОЛ себи је увек 0. Дакле, 1101 ^ 1101, сви битови ће бити исти. Дакле ни да ће бити случај где је 1 0, а друга је 1. Дакле, ово је 0000. Исто и са овим. (^ Б) ^ б је као ^ (б ^ б). (Б ^ б) ће бити 0, ^ 0 је само ће бити ',' јер су сви битови су 0. Дакле, једини који ће бити где '"је првобитно имао 1 - оне. А иста идеја овде, ја сам прилично сигуран да је такође комутативна. Да. Ја нисам рекао раније да је комутативна. Тхе ^ ',' и то је асоцијативна, па сада (б ^) ^. И можемо да урадимо б ^ (^). И тако опет, ми смо добили оригиналну б. Дакле, '' је сада комбинација 'А' и Б заједно. Користећи наш нови комбиновани '' кажемо б = комбиновани '' ^ оригинални б добијамо оригинал '.' А сада = комбинација '' ^ нови Б, који је био оригинал - или што је сада оно што је '", или б. То је овај случај овде. Ово је = б, стари б. Дакле, сада је све поново у заменили редоследу. Ако смо заиста погледао бита б = ^ б це сабира ове 2, а одговор ће бити ово, а онда = ^ б је КСОРинг ове 2 и одговор је ово. Питања? Ок. Дакле, последњи је нешто знатно теже. [Студентски] Мислим да има једно питање о томе. >> О, извини. [Студентски] Шта је заправо брже? Ако користите овај КСОР, или је, ако се прогласи нову променљиву? Дакле, шта је заправо брже, изјављујући нову променљиву или коришћењем КСОР да замени? Одговор је, по свему судећи, привремена променљива. А то је зато што када је то саставио доле - тако на скупу нивоу, не постоји таква ствар као локалне променљиве или било привремених променљивих или било ове ствари. Они су баш као - има меморије, а постоје регистри. Регистри су тамо где се ствари дешавају активно. Не додати 2 ствари у меморији, ви додати 2 ствари у регистрима. А ти донети ствари из меморије у регистар онда их додате, и онда би их вратити у меморију, али све акције дешава у регистрима. Дакле, када користите привремену променљиву приступ, обично оно што се дешава је ови бројеви 2 су већ у регистрима. А онда од тог тренутка, када сте их заменили, само ћу почети са коришћењем другог регистра. Где год је користила б, само ће користити регистар који је већ складиштење '.' Дакле, не морате ништа да радите да се заиста уради замену. Да? [Студентски] Али то је такође потребно више меморије, зар не? То ће само бити потребно више меморије, ако је потребно да сачувате ту привремену променљиву. Као да сте касније користили ту привремену променљиву поново негде, онда - или сте доделили нешто на ту привремену променљиву. Дакле, ако у било ком тренутку у времену ',' б у температури имају различите вредности или тако нешто, онда ће имати различите локације у меморији, али је истина да постоје многе локалне променљиве које ће само постоје у регистрима. У том случају, она никада није ставио у меморију, па да никад не губимо памћење. Ок. Последње питање је мало више. Дакле, овде, у овој ЦС50 апарата, ту је речник. А разлог за то је зато што [Б66?] Је правописа где ћете писати помоћу хеш табеле или покушава или неки структура података. Ти ћеш бити писање правописа, и ти ћеш бити користећи овај речник да се то уради. Али за овај проблем, ми смо само ћемо гледати да видим да ли једна реч у речнику. Дакле, уместо чувања цео речник у неком структуром података и онда гледа преко целог документа да видимо да ли нешто погрешно је, Ми само желимо да се нађемо 1 реч. Дакле, можемо само да скенира преко целе речник и ако ми никад не пронађе реч у целој речник, онда то није био тамо. Ако се скенирање преко целе речник и не видим ту реч, онда смо добро, ми смо га нашли. Овде се каже да желимо да почнете да тражите на фајл-руковање функцијом Ц,, јер желимо да прочитате речник, али ћу дати савет овде на који функционише треба да мисле. Ја ћу их писати на Спацес. Дакле, основни оне ћете желети да погледате су ф отворена и онда неминовно ф затворен, који ће ићи на крају свог програма, и ф скенирање ф. Такође можете да користите ф прочитали, али вероватно не желите да зато што - не завршиш потребе то. Ф скенирање ф је оно што ће се користе за скенирање преко речник. И тако да не морате да се кодирају се решење, само пробајте и као псеудо-код на свој начин до решења, а онда ћемо да разговарамо о томе. И заправо, пошто сам већ дао сам ти ово, ако одете у било терминала или вашег апарати за љуске, Ја бих - ја обично - ако још увек нисте видели, ја не знам да ли си урадио на часу, али човек, тако да су ман странице су прилично корисна за гледа прилично много било које функције. Тако да могу да урадим, као, ф човече, скенирања ф. Ово је сада информација о скенирања ф породице функција. Такође сам могао да урадим Ф МАН, отворене, као и да ће ми дати детаље о томе. Дакле, ако знате шта је функција користите, или читате код а ви видите неку функцију, а ви сте као, "Шта то уради?" Само човек који име функције. Постоји неколико чудних примера где ћете можда морати да кажу свиђа. Човек 2 да име функције, или човек 3 ту функцију име, али само треба да урадите да ако човек име функције не деси да ради први пут. [Студентски] Дакле читам ман страницу за отворен, али сам и даље збуњена како да га користите и програм. Ок. Много ман странице су мање од помоћи. Они су више од помоћи ако већ знате шта они раде и онда само треба да запамтите редослед аргумената или нешто слично. Или могу вам дати општи преглед, али неки од њих су веома велика. Као ф сцан ф, такође. То вам даје информације за све ове функције, и 1 ред доле дешава да кажу, "Ф скенирање ф чита из гудачког тачке или потока." Али ф отворити. Дакле, како бисмо користили ф отворен? Идеја програма који треба да уради фајл И / О је да прво морате да отворите датотеку коју желите да урадите нешто са, и неизбежно, прочитајте ствари из тог фајла и да ствари са њима. Ф отворена је оно што ми користимо да отвори датотеку. Ствар се вратимо, па шта фајл желимо да отворите, то нам даје - Овде пише "/ усер / схаре / дицт / речи." Ово је фајл који желимо да отворите, а ми желимо да га отвори - морамо да изричито прецизира да ли желимо да га отворите да читају, или ако желимо да отворим да пишем. Постоји неколико комбинација и слично, али ми желимо да отвори ово за читање. Желимо да чита из датотеке. Дакле, шта овај повратак? Она враћа датотеке звезду (*), а ја ћу показати све што је у променљивом ф, тако * опет, то је показивач, али не желе да се баве показивача. Можете мислити ф као ф је сада променљива ћеш користити да представља датотеку. Дакле, ако желите да прочитате из датотеке, можете прочитати из ф. Ако желите да затворите фајл, затворите ф. Дакле, на крају програма, када смо неминовно да затворите датотеку, шта да радимо? Желимо да затворите ф. Тако сада последњи фајл функција које ћемо желети да користите скенер ф ф скенирање ф. И шта да ради је скенира преко датотеке у потрази за образац да одговара. Гледајући ман страници овде, видимо инт ф ф скенирање, да игноришу повратну вредност за сада. Први аргумент је фајл * поток, тако да је први аргумент да ћемо желети да прође је ф. Ми скенирања преко ф. Други аргумент је формат стринг. Ја ћу вам дати ниску формата сада. Мислим да се деси да кажем, 127с \ н, много тога је непотребно. Идеја о томе шта да се формат стринг је можете мислити скенирања ф као супротност штампање ф. Дакле принт ф штампање ф смо такође користе ову врсту формату параметра, али у штампаном ф оно што ми радимо је - хајде да погледамо на еквивалент. Дакле принт ф, и заправо има такође Ф штампа ф, где први аргумент ће бити ф. Када штампате ф, могли бисмо рећи нешто попут: "принт 127с \ н", а затим, ако смо га прође неки стринг, то ће да одштампате ову ниску, а затим нову линију. Шта значи 127, прилично сам сигуран, али никада нисам себе ограничити на њега, Ти не би ни потребно рећи '127 'у штампаном ф, али шта то значи је штампање прве 127 знакова. Тако да сам сигуран да је то случај. Можете да Гоогле за то. Али, у следећем сам скоро позитивно то значи да. Дакле, ово је штампање прве знакове 127, затим у новом реду. Ф скенирање ф сада, уместо да гледа на променљиве и штампање га, то ће изгледати на неком ниске, и чувати образац у променљивој. Идемо заправо користити ф скенирање у другом примеру. Дакле, рецимо да смо имали неке инт, к = 4, а ми смо желели да створи низ сачињен од - желео да створи низ то је као, то ће доћи до много касније, нешто што је као 4.јпг. Дакле, ово је можда програм где ћете имати контра суму, Укратко супротстављање ја, а желите да сачувате гомилу слика. Дакле, желите да сачувате и.јпг, где И нека итерација вашег петље. Па како да учинимо овај редослед за тај ЈПЕГ? Ако сте желели да одштампате 4.јпг, ми само рећи ф штампе, д.јпг%, а онда би одштампали тог ЈПЕГ. Али ако желимо да сачувате 4.јпг ниске, ми користимо сцан ф. Дакле, стринг с - заправо смо Зар не - карактер, цхар с, идемо 100. Зато сам објавио неке низ од 100 карактера, и то је оно што неизбежно ћемо бити ту чување ЈПЕГ ин Дакле, ми ћемо користити за скенирање ф, и формата, како бисмо рекли д.јпг% како да одштампате 4.јпг, формат ће ово бити% д.јпг. Дакле, формат% д.јпг, оно што ми желимо да заменимо д% с, к, и сада морамо негде да сачувате ту жицу. А где ћемо сачувати ову ниску у низ с. Дакле, после ове линије кода, а, ако се штампају ф,% с од променљиве с, то ће штампати 4.јпг. Дакле, ф скенирање ф је исто као сцан ф, осим сада изгледа у овом фајлу за шта да сачувате е. То је оно што последњи аргумент ће бити. Желимо да ускладиштите - "Сцан ф породицу функција скенирања у оба по формату покушао испод. Ако неки су смештени у локацији тачке можда вратити - " Не можемо бити добри. Пусти ме да размислим за секунду. Дакле, скенирање Ф не - шта је, дођавола, функција која то ради? Дакле, скенирање ф неће узети цео и урадити дот јпг. То ће [мумлања]. Сачувајте инт променљиве у стринг инт Ц. Шта је ово променљива, или шта је то функција зове? Да. То је - да. Дакле, оно што сам дефинисање вам је било пре а штампа ф који - то има много више смисла, зашто сам рекао да је много више налик принт ф. Скенирање је ф још нешто као штампе ф, али с штампа ф ће скенирати преко и заменити променљиве и сада га чувати у низу. Уместо штампања га, он га смешта у низу. Дакле игнорисати да у потпуности. Још увек можете да мислите о формату пројектанта као као да од штампања ф. Дакле, сада, ако бисмо желели да урадимо 4.јпг ствар, ми би урадили с тонером ф, к о томе. Дакле, шта скенирање ф ради - шта је ваше питање ће бити? [Студентски] Само сам збуњена на оно што покушавамо да урадимо овде са том ЈПЕГ. Да ли можете да објасните да је 1 још времена? Дакле, то је - то је мање релевантно да ф скенирање ф сада, надамо се, да ће повезати још неки начин. Али оно што сам у почетку намеравао да покаже било - то је заправо директно релевантна за ова [? Ф5] Ти ћеш бити с коришћењем штампача ф, где је, кажу имамо 100 слика, и желите да прочитате слику 1.јпг 2.јпг,, 3.јпг. Дакле, да би то урадили, потребно је да ф отворите, а затим морате да прође у низу који желите да отворите. Зато смо желели да отворе 1.јпг, у циљу стварања ниску која је 1.јпг, радимо с штампа ф од% д.јпг--нисмо урадили за инт и = 0. и <40, и + +. Дакле, с штампа ф% д.јпг од ја. Дакле, после ове линије, сада променљива или низ а ће 1.јпг. Или, 0.јпг, 1.јпг, 2.јпг. И тако можемо да отворимо, заузврат, сваку слику за читање. Дакле, то је оно што ова штампа ф ради. Да ли видите шта се штампа ф сада ради? [Студентски] Ок, тако да се узима - то ствара низ, сометхинг.јпг, а затим складишти га. Да. То ствара - то је још један формат стринг, управо као и скенирања и штампања ф Ф, где се убацује све променљиве у други аргумент, можда с насупрот ја. Можда - Мислим да је то случај. Али, шта год редослед аргумената. То ће убаците све варијабли у формату стринг и онда складиште у нашој бафер, ми то зовемо бафер, то је где смо складиштење стринг. Тако смо складиштење унутар П исправно форматиран стринг,% д пошто је замењен са 4. [Студентски] Дакле, ако смо то урадили, је променљива ф само ће се распоредити? Да. Зато треба затворити оригиналну ф пре него што је овај. Али - и онда, такође, да није било ђ отворити овде, онда би требало да кажем - Да. Али, то би отворити стотину различитих фајлова. [Студентски] Али ми не би могли да приступе или - у реду. Ок. Дакле скенирање ф ф скенирање ф је врста исте идеје, али уместо, уместо чувања га у низу, то је више као сада сте иде преко убод и Паттерн Матцхинг против тог низа и чување резултата у варијабли. Можете да користите скенирања ф да анализирамо због нечега попут 4.јпг, и држати цео 4 к сум на инт. То је оно што можемо да користимо ф скенирате. Ф скенирање ф ћете то учинити у командној линији. Ја сам заправо прилично сигуран да је ово оно што ЦС50 библиотека ради. Дакле, када кажете, "да се инт," то је скенирање ф-инг преко - скенирање ф је начин да добијете корисничко улаз. Ф скенирање ф ће да уради исту ствар, али помоћу датотеке за скенирање заврши. Дакле, овде смо скенирање преко овог фајла. Образац се трудимо да одговарају неки стринг који је 127 знакова следи нови ред Тако да сам прилицно сигуран да би чак и само рећи "подударају с" обзиром да у речнику ми се деси да имамо, ми не гарантује реч је толико дуго, и ф скенирање ф, мислим да ће се зауставити на новој линији, без обзира на све. Али ми ћемо укључити нову линију у мечу, и - [Студентски] Ако нисмо укључују нову линију, не би пронашли делове речи? То је - сваки - гледајући у речнику - Дакле, у речнику, то су све наше речи. Сваки од њих је на новој линији. Скенирање је ф ће покупити ову реч. Ако не укључују нову линију, онда је могуће да ће следећа скенирање ф само читати нову линију. Али, укључујући нову линију онда ће само игнорисати нову линију. Али никада нећемо добити део речи, јер увек смо читање до нове линије, без обзира на све. [Студентски] Али шта ако тражите реч "Цисса", као Цисса. Хоће ли сматрају да, и кажу да је утакмица? Дакле, овде ћемо - то ће читати - то је заправо добра ствар. Ми никада нисмо коришћењем струје - реч тражимо је прва командне линије аргумента. Тако ниска, реч = аргв 1. Тако ниска тражимо је аргв 1. Ми не тражимо реч уопште у нашој скенирања ф. Оно што смо ми радили са сцан ф добија сваку реч у речнику, и онда када будемо имали ту реч да ћемо користити стрцмп да их упореди. Ми ћемо упоредити наше речи и оно што смо управо прочитали унутра Дакле неминовно, ми ћемо завршити раде гомилу скенирања фс док је то тако једноставно дешава да се скенирање ф врате - она ће се вратити један, док је упарен нову реч, и она ће се вратити нешто друго чим је успео да одговара реч. Ми читају преко целе речнику, складиштење линију по линију свака реч у променљиве с. Онда смо се поређењем реч са с, а ако је цена == 0, стрцмп дешава да донесе 0 ако Утакмица је направљен. Дакле, ако је 0, онда можемо да штампамо ф, упарен, или реч у речнику, или како год желите да одштампате ф. А онда - не желимо да Ф затвори изнова и изнова. То је ствар коју желимо да урадимо, а ми не само у потрази за речи у речнику. Тако смо могли да урадимо, ако желимо да тражимо њихову обрасцу, Цисса, као што си рекао раније, Ако смо хтели да тражимо тог обрасца, онда би пропала у случају јер то није заправо реч, али је један од речи у речнику дешава да је у њему. Тако да би меч ову реч, али овај подскуп речи није сама реч. Али то није начин на који га користите, ми читаш у свакој речи и онда упореди реч имамо са том речју. Дакле, ми смо увек у односу пуне речи. Ја могу послати касније финализоване решења. То је врста скоро прави одговор, мислим. [Студентски коментар, неразумљив] Ох, да ли сам се отарасим раније? Цхар с, ваљда смо рекли 127 - заборавио сам шта је највећа је. Само ћемо урадити 128, па сад с је довољно дуго. Ми не треба да одштампате било шта. Такође ћемо хтела да затвори нашу датотеку, а то би требало да буде око правог одговора. ЦС50.ТВ