ЈАСОН Хирсцххорн: Добродошли, свако, до недеље 6.. Драго ми је да вас све видим жив и здрав после квиза 0, јер знам да био мало груб. Али срећом, ви сви јесте невероватно добро. И тако то је дивно. Ако сте у мојој секцији, ја сам дао највише од вас већ направите своје квизове. Пар вас, ја сам састанак након класе. А ако сте студент и проширење нисте добили свој квиз назад ипак, ваш ТФ је вероватно ради на томе и оцењивање га, и да ће га добити назад вама ускоро. Дакле, мој продужни ученика који су гледам сад - надам се живи - Ја ћу добити своје квизове убрзо као добро. Наш дневни ред за данас је следећи. Прво, ми ћемо ићи преко неке ресурси који ЦС50 пружа вама. Ми ћемо ићи преко квиза 0 следећи, и Ја ћу одговорити на сва питања никога има о одређеним проблемима. И онда, ми ћемо ићи преко фајл И / О и проблема сет 5. Ове последње две теме ће предузети се највећи део секције данас. Ставио сам ову листу се сваке недеље као подсетник за све вас, али од језгра секција, имамо само 90 минута - можемо нису у стању да покрије све што сам би волео да покрије за вас. Али имамо тону ресурса за да скрене на као што сте добили да знате материјал и рад кроз твој проблем поставља. Подсетник да сам онлајн имам текст кутија, сет за вас да попуните ако имате повратне информације за мене, и позитивне и конструктиван, о секцији. То УРЛ адреса се налази овде доле. Зато молим, да одвојите тренутак ако имате било повратна информација, да ли је током одељку, или после, или канал видео мрежи, да ми дате Васе мисљење. Заиста ценим било и све то. Тако сам има мале разговоре са доста мојих ученици током недеље - као што сам предати назад квизови, говоримо о Наравно, видим како си. И један тема је дошао до више и преко говорити о - у Конкретно - Проблем поставља. И ја сам ту тему инкапсулирана на плочи одмах. У суштини, постоји разлика између окретање у нешто што је ради правилно и нешто да се уради добро. Већина људи су радили фантастично у смислу исправности - 5 је или 4 је на свим псетс. Већина људи постају су све време. Међутим, само зато што сте урадили нешто право не значи да сте урадио нешто као елегантно, или ефикасно, или као чисто као ти могао да уради. И то је оно што дизајн - и у мањој мери, стил - осе су за. Па ја вас све гура, и други подгрупа гурају момци, да не само ред у ствари које су тачне, али се окрећу у стварима које су добро кодиране. Не радите непотребне ЗА петље, не израчунајте променљиве ако је Ви не морате да. На пример, када се осврнем на проблем поставити 4, приликом постављања цигле на екран, сваки ред - свака цигла у дат ред има исти и координата - исте висине координата. Тако да је и-координата није потребно да се обрачунава у ентеријеру угнеждена ЗА петљу да сте вероватно користи да се те цигле на екрану. Треба само да се сваки израчунати време да пређете на ред, или преселио доле ред. Тако кажу, ако има 10 цигле у ред, свака цигла може имати исти и координата, и да је и-координата могу само да се израчунати једном за све оне. То не треба да се израчуна 10 пута, нити да рачуница потреба да се деси у стварни позив функције - нови грацкед позив функције. Дакле, ако је то било мало збуњујуће за ви, више уопштено, ствари које не треба да се деси сваки пут идете кроз фор петљу не би требало да буде ставити унутар ЗА петље, а не би требало да деси сваки пут када одем кроз фор петљу. Још један добар пример дизајн смо видели у Недељи 3 за 15, можете да задржите стаза од нуле. Дакле, када сте иницијализацију одбор, те саве - у глобалној променљивој, можда - к и и координата од нуле. И онда кад год ти - у функцији ход, кад год би успешан потез, ажурирате локација нуле. То би вас спасити од потребе да радим угнеждена ЗА петље да изгледају кроз укрцају сваки пут у вашем ход функцији и наћи нулу, или наћи на плочицу, а затим проверите шта је поред њега. Уместо тога, ви имате локацију нула, можете једноставно да погледате горе, доле, и лево и десно од њега, да пронађе плочица што тражите. Дакле, у погледу програма смо писања, они никада ниси довољно велики да неки од ових одлука дизајна се заиста дешава да ометају ваше Програм, или да га покренете спорије, или можда чак понестане меморије. Али ми и даље гураш момци да пишу као елегантан и ефикасније код могуће. Дакле, ако радите завршити писање ствари да имају знатно већи обим, они ће бити написано са добро дизајн поред тога што тачно. Дакле, број имате донео је напоље. То је нешто што ми тражимо - нешто ћемо наставити да пусх вам момци на. Ако сте икада имали било каквих питања у вези дизајн вашег програма, слободно да допре до мене, а ја сам срећан да шетња кроз програм са вама, и укаже на неке од дизајна одлуке које сте направили, и дати вам неке сугестије о томе како да се направи још Бољи дизајн одлуке. Зато ћемо прећи на да говоримо о квизу 0. Пре него што то урадимо, да ли неко имате било каквих питања о томе шта Ја сам покривен до сада? [Шушти БУКА] ЈАСОН Хирсцххорн: Седам секунди. У реду. Хајде да причамо о квизу 0 за мало. Већина вас има свој квиз 0 леђима. Ако не, надам се Ви га се сећате мало. Али, ако сте узети квиз 0, онда такође имају приступ мрежи у ПДФ Узорци раствора. Да ли неко има било каква питања пре смо скок у материјалу у недељу око Посебан проблем на квизу 0 - зашто одговор је шта је то? Да ли је неко збуњен о било чему? Чак и ако имаш проблем у праву, али Само бих ја то објасним мало више, ја сам срећан да то уради сада. Зато сам тражио да се момци долазе припремљени са неким мисли о квизу 0. Дакле, ко жели да нам се почео са питањем или цоммент о квизу 0? [РАД шушти] ЈАСОН Хирсцххорн: Није свако урадили савршено. Тако да знам [ЛАУГХС] ту треба да буде неких питања о квизу 0. У реду. Да. Омпица. ОМПИЦА: Број 10. ЈАСОН Хирсцххорн: Број 10. Која је број 10? ОМПИЦА: - ЈАСОН Хирсцххорн: Ја Отад - ОМПИЦА: укључују - ЈАСОН Хирсцххорн: Број 10 је осам И да - писање осам до и? ОМПИЦА: Да. ЈАСОН Хирсцххорн: У реду. Дакле, једно питање сте могли питао је ја наговестио? Одговор је да. У одељку пред квизу, питао сам ви да код оба Стерлинг и осам до ја. Обојица се десило појављују на квизу. Па надамо се, ви платили пажњу на то. А ако сте имали, онда би имали вероватно учињено добро на њих двоје. Али осам до и, нисмо заправо шифра она у класи, али је, опет, питао на квизу. Дакле, неколико ствари које треба предузети уму када кодирање осам до и. Прва ствар, по питању, била је да ли је потребно да проверите да ли је стринг била једнака нулл. Неколико људи је покушао да провери касније у програму, ако ова конзола сам био - тако специфичан карактер у који стринг - био је једнак нулл. Али запамтите, то је у суштини нула - добро је да мислим о нула као нула показивача - показивач на нулу - негде у меморији где Ви никада не може приступити. Дакле, ако је нешто једнако нулл, ви Знам да му није иницијализован, или тамо нема ништа. Дакле, с је знак звезда, с носач и је знак. Тако да има смисла да се с упореди са нулл, али не с носач сам на нулл. Али опет - тако да је прва ствар који сте ви требали да урадите - проверите да проверите да ли сте заиста Имам прави стринг. Даље, ви желели да иду кроз сваки карактер у стрингу. И тако то би било као с конзолом Ја, на пример, ако је ваш сам итератор. И узме тај лик, и добити своју стварну вредност. Ви сте га чувају као цхар, али АСЦИИ вредност за нулу - нула као лик - није заправо цео број нула. То је неки други број који можете потражите у АСЦИИ табели. Дакле, један начин да се исправи за то - вероватно најбољи начин да се исправи за да - се одузима од ње вредност карактер - зеро као карактер. Дакле минус један цитат, нула, још један апостроф. То ће предузети све што имате број као цхар, и да је једнака број као стварне цео број. А то је веома сличан приступу Много људи је у Проблем сет 2, са Цезаром и Вигинере - те шифре, када сте су их ротира. Дакле, након што сте га као број из нула до девет, а затим - у зависности од где иде у коначном броју - морате да га помножите од снаге 10. Неки људи се преселио са леђа на предњи, и множи појединца број од снаге 10. Неки људи се преселио из спреда до полеђине - па је највиши нареди прво бројева - и да ће сачувати оне у глобална променљива бројач. И онда сваки пут кроз ом петља, помножите то гигант глобална цоунтер променљиву 10, да простор за следећи знак. Дакле, то је било мало збуњујуће без ја га писање на табли. Али узорак решење вам је на располагању. Али они су били велике ствари смо тражили. Такође, проверите да се уверите да сваки индивидуални карактер је заиста карактер између нуле и девет, а не неки други лик, као А, на пример. То су ствари које су у потрази за у то питање. Да ли то одговор на твоје питање? ОМПИЦА: Да. ЈАСОН Хирсцххорн: У реду. Да ли има других питања о квизу 0? Шта је састављање? Сви састављање зар не? Не. Било је - [ЛАУГХС] Сва питања у вези компилација процес? Вау. [РАД шушти] ЈАСОН Хирсцххорн: Да. Мајкл. МИЦХАЕЛ: Да ли је број 7 - случајна? ЈАСОН Хирсцххорн: Број 7. Број 7 је добити случајан цео број. Одлично. Тако ти је дато целобројну А и цео број б, и желите случајан цео број између и б. Ми заправо може да напише ово на одбор, јер то је један била једна линија кода - један начин да се то уради. Дакле, ми смо дали као дранд функција можемо да користимо. И шта дранд - под претпоставком да је био засејан - Шта дранд врати? МИЦХАЕЛ: плутају између 0.0 и 1.0. ЈАСОН Хирсцххорн: број - Да. Број између 0 и 1. И тако смо и Б. И онда имамо насумични број између 0 и 1 који су нам по дранд. Неки људи покушали да стави б, или б минус , или нешто унутра оне заграде. То би значило да су они Аргументи за ову функцију. дранд не узима никакве аргументе - као гетСтринг ради Не предузимати никакве аргументе. Дакле, то је само отворена заграда, близу Парен - и то, само по себи, је позив функције. И то вам даје број између 0 и 1. Наравно, имамо читав низ да бројеви могу бити унутра Рецимо, ако је б 10 и је 5, заиста желе броја са низом од 5. Дакле, следећа ствар коју треба да урадите је помножите то по опсег б минус. Дакле, под претпоставком да се умножавају. И да ће нам дати број у датом опсегу. И то је специфичан опсег Разлика између б минус а. И на крају, то ће само дати га од - кажу распон између б минус је 5, који ће нам дати број од 0 до 5. Али ако је у ствари 5, морамо да повећа овај опсег до тамо где је то заправо требало да буде, додавањем. Тако да добија право логике. И онда, да ли имате друго питање? МИЦХАЕЛ: Не Осећам стварно глупо сада. [ЛАУГХС] ЈАСОН Хирсцххорн: Не Не осећам стварно глуп. Број људи борили са овим питањем. А онда, друго питање је, дранд, сте рекли, даје вам пловак - враћа пловак. Али ова функција заправо питали за цео број да се врати. Не морате да баци ово експлицитно на цео број, јер су Операције ће га третирати као све је флоат - као у покретном зарезу броја. Као овај воље - чак и ако то је цео број, ово ће бити исправно множи. Све множење ће радити. Не морате да га баци овде. У ствари, ви не треба да га баци. То би - ако би баци број да је између 0 и 1 - случајни број, флоатинг поинт - онда или ће бити само 0 или 1, тако ћете изгубити све те прецизности. Али на крају, када се вратите, она аутоматски добија послао назад као цео број. Дакле, не морате да урадите да се ливење. Дакле, то је био одговор на то питање, број 7. Има ли још питања о квизу 0? Да, Ени. Анние: Када користимо рекурзивно - када не користимо итеративне петље? ЈАСОН Хирсцххорн: Када користите рекурзивни - па генерално, предности и мане у односу рекурзије итеративни приступ. Може ли неко понудити Про или превара? Молим те? Не може било ко. Ко може да понуди про или цон? [РАД шушти] СТУДЕНТСКА 1: Рекурзивна је мање кодирање - мање куцате? ЈАСОН Хирсцххорн: Па генерално, рекурзије посебно, функција - или алгоритам као обједињавања врста - који се даје на рекурзивне приступ - можда једноставнији да рекурзивно кодирања. И само више смисла да то уради рекурзивно. Дакле, да би професионалац за рекурзије. Други? Да? СТУДЕНТСКИ 2: Цон до рекурзије - Она користи више меморије. ЈАСОН Хирсцххорн: Па баш у праву. Рекурзивни функција ће задржати додајући стек оквире стека. Дакле, ако сте ради на много бројеве, и да позовем ово функционишу много, онда сте сигурно ће заузимају више меморије, док итеративни приступ ће само ставити једну стек оквир на стек, јер то све дешава у оквиру једне функције. Све друге предности и мане? Да. СТУДЕНТСКИ 3: Предности за рекурзије. Не морате да се утврди у унапред колико пута код морао да се понови. Можете имати унапред број пута да морате да вршите итерацију, онда рекурзије је боље, јер потребно је тај резултат. ЈАСОН Хирсцххорн: Ја мислим да је то истина. Али мислим да у оба случаја никада не би - ти би вероватно добити неки улаз од корисника. Или би ова функција има неки улаз да би утврдили колико пута је би требало да ради. Дакле генерално, не би хард код - чак у итеративни приступ - како много пута да петља треба покренути. Да ли сте имали још сте били размишљам о, Ени? У реду. Дакле, то су вероватно два - највећи професионалац и највећи цон се рекурзивно против итеративни приступ. У реду. Још нешто о квизу 0? Идемо даље. Филе И / О. Постоји дивна кратка ове недеље на фајл / И да надам сте гледали вишеструко пута, и дивио. Много посла је отишао у то, и ја сам Чуо је лудачки корисно. Такође сам укључен линк на овом слајду, у случају да нисте имали прилику да га гледам 10 пута. Дакле, ми ћемо укратко прећи Главни кораци у отварању и ради са фајловима, а онда ћемо зароните у проблем кодирања пре испитивање проблема сет. Па опет, ја ћу ставити ово горе на екран, али ја ћу да причам за само минут о томе шта смо радиш овде са датотеком И/О-- Шта то значи? То значи да можемо створити наш програми, а затим имамо програме излаз, а нисте направили никакав утицај на свет изван нашег програма. Али када почнете да радите са фајловима - како их чита у креирању и њих - можемо имати неког утицаја на свет изван нашег програма. Баш као и ако је Мицрософт Ворд није могао да било какве Ворд докумената, затим једном Мицрософт Ворд отказ, сви ваши Рад ће нестати, а то би заиста бити бескористан. Ми на крају желимо да будемо у стању да пишу програме који могу да утичу на свет око њих, како узимајући у комплексни улаза - у смислу фајлова и преко фајлова, а такође ствара занимљив и убедљиве излаза - у смислу различитих типова датотека. Дакле, то је разлог зашто смо почели да научите како да радите са датотекама. Прецизније, шта радимо је следећи. То је врло једноставно. Постоји само неколико корака, а они су овде наведени на овом коду. Тако ћемо ићи кроз ово код линију по линију. Прво, ви видите истакли - када радите са датотеком, без обзира на тип датотеке је, потребно је да га отворите. И то је са позивом да фопен - овде. Можете укључити име датотеке. Ако фајл није у именику, или фасцикла у којој је овај програм животи, онда такође треба да укључи пут до места где је фајл. Идемо да се претпостави да ово фајл под називом "тект.ткт" - једноставан текст документ - у Исто као фасцикла овог програма јесте. Дакле, то је још једна ствар коју треба имати у ум - да ако желите да отворите датотеку негде другде, ви заправо треба да укључи своју локацију. Друго, можете проћи аргумент за фопен, и то је оно што желите да урадите са датотеком. Постоје три главна аргумента да ћеш проћи да фопен. Ко може да ми да те три? Ко може да ми да један од њих? Да. СТУДЕНТСКИ 4: име датотеке? ЈАСОН Хирсцххорн: Извини. Три главне аргументе можете проћи као други аргумент да фопен. У праву си - име датотеке је први аргумент. Али други аргумент да су фопен генерално три жице, и - да. Алеја. АЛЕЈА: за Аппенд. ЈАСОН Хирсцххорн:, ако желите да додаје на фајл који већ постоји. СТУДЕНТСКИ 5: Р за читање. ЈАСОН Хирсцххорн: А, ако желите да прочитате из датотеке. СТУДЕНТСКИ 6: В за врите. ЈАСОН Хирсцххорн: И без, ако желим да пишем у датотеку. Дакле, у овом случају, пишемо до датотеке, тако да смо ж. Ти га отворите, ви такође морате да сачувате филе негде, а да је са код на левој страни задатак оператер - Правим показивач на датотеку зове, у овом случају, датотека. Нећемо бринути шта ово све капе СЛИКА ствар је. Довољно је рећи, да је дуг ток нуле и јединице. И тако ћемо раде га и разумети га. Следећа ствар коју треба да урадите - и ово је невероватно важно - сваки пут када отворите датотеку - у ствари, кад год позове маллоц, за пример, и добити неки меморије и покушајте и сачувајте га у показивачем, увек желите да проверите како би били сигурни да Функција није вратио нула. Дакле, у овом случају, ми смо проверу да сигурни да смо заправо отворили филе исправно, а било је не грешка у нашем програму. Даље, када смо проверили да се уверите да имамо радну датотеку, можемо писати, читати или од, или додати у фајл. У том случају, ја сам једноставно штампање једна линија до овог фајла. Како да знам да? Па, ја користим ову функцију зове иф. Све функције које ће користити приликом писања на, или читање из, или манипулишући датотеке ће бити сличан Функције које сте раније видели, али почети са словом Ф, стоји за датотеку. И иф, за разлику од наше нормалне штампе апликација, узима један додатни аргумент, и да је датотека у којој сте Желим да одштампате ову линију да. Немам ништа да право охаи. Ја немам трећину Аргумент за принтф - или други аргумент да принтф, Трећи аргумент да фпринтф, јер сам немају чуваре места овде. Нећу укључујући све променљиве. Али опет, иф и све ове датотеке Функције које послују са фајловима су углавном ће требати датотеку на који они раде. Коначно, последња ствар која се урадите је да затворите датотеку, баш као са - кад год ми нешто маллоц, желимо да ослободимо нешто, да не бисмо имају цурење меморије - желимо да затвори нашу датотеку. Ако овај програм изашао без затварања датотека, шансе су ништа неће ићи погрешно, посебно ако се био мали фајл. Али, то је свакако добро кодирање стил и пракса да увек затворите датотеку Када завршите га користите. Тако да је основе фајла И / О. Вероватно сте видели да је пре, или Гледао га у том фантастичном кратко. Да ли неко има било каква питања, пре идемо у неку праксу кодирања проблеми, око фајл И / О или кораци сам отишао? [ТИПИНГ СОУНДС] ЈАСОН Хирсцххорн: До иоу Имам једно питање, Ави? АВИ: Не ЈАСОН Хирсцххорн: У реду. Идем да сачекам још седам секунди. [ЛАУГХС] То је стварно добар савет. Ви баш не воле постављања питања. То је у реду. У реду. Дакле, наш проблем пракса је прво, ми смо ће дуплирати функцију командне линије алат који вероватно користи пре - копија - копија алат. Ако откуцате цп а затим прође га два аргументи у вашем терминалу, можете копирати датотеку. И то је оно што се дешава да пишем сада. Па опет, читање са овог слајда, ја бих ви да напишете програм који узима два и само два командне линије аргументи - Изворна датотека и одредишна датотека - и копира садржај извора филе на одредишну датотеку један бајт по један. Дакле, то је много да тражим. Опет, добар приступ за ово је да не иду право у Ц коду, али разбити га у пар корака. Прво, размислите о логици - баш шта ја вас питам да уради - и разумеју све корака до овог проблема. Није у Ц, само у неком псеудокоду, или чак ментални модел шта се дешава. Даље, када имате Псеудокод доле, схватим како Псеудокод мапе на алатима и ствари које смо научили да користе у Ц. И на крају, када сте све то заједно, можете да кодирања проблем. Таке 5 до 10 минута да раде на овом проблему. Ставићу упутства назад у секунду. А онда ћемо да идемо преко Псеудокод, и код она живи као група. Ако имате било каквих питања, док сте раде на томе, слободно да се подигне руку, а ја ћу доћи око и одговорити им. СТУДЕНТСКИ 7: Да ли могу да провуче комад папира? ЈАСОН Хирсцххорн: Шта је горе? [ТИПИНГ СОУНДС] ЈАСОН Хирсцххорн: У реду. Идемо преко псеудокоду прво, и онда ћу ти дати пар више минута да заврши кодирање. Ко би желео да ме кренути са првој линији Псеудокод за ову функцију? СТУДЕНТСКИ 8: Проверите да се уверите да сте добили две датотеке. ЈАСОН Хирсцххорн: У реду. А ако нисмо? СТУДЕНТСКИ 8: Ја бих се вратити 0.. ЈАСОН Хирсцххорн: Да се ​​вратимо 0? СТУДЕНТСКИ 8: Повратак - затамњења. Извините. ЈАСОН Хирсцххорн: Да. Вероватно не 0. Јер 0 знаци све је било добро. У реду. Дакле, то је прва линија од псеудокоду. Ко има другу линију псеудокоду? СТУДЕНТСКИ 9: Отворена оба фајлове? ЈАСОН Хирсцххорн: Отворите обе датотеке. ОК? СТУДЕНТСКА 10: Проверите да ли ако је фајл НУЛЛ? ЈАСОН Хирсцххорн: Проверите да сигуран ни су НУЛЛ. Као по страни - сласх 0 - је то НУЛЛ? СТУДЕНТСКА 11: Не. ЈАСОН Хирсцххорн: То није НУЛЛ. То се зове НУЛЛ терминатор. То заправо је написано само са једним л. Тако нешто против да провере - то је заправо лик - па провери нешто против да се није исто што и проверава да ли је једнак НУЛЛ. А неки људи - о њиховим квизовима и њихов проблем Гарнитуре - имају два од оних збуњен. Али двојица од њих су у ствари различитим. Један завршава стринг - један је показивач на 0. СТУДЕНТСКА 12: Зашто не би сте проверили да уверите да су датотеке нису НУЛЛ пре него што их отворите? ЈАСОН Хирсцххорн: Па отворен штеди нешто у том фајлу. А ако се вратимо овде - па ова линија - фопен - ће вам дати адресу и продавницу да адреса у датотеци, ако то ради. Ако то не ради, она ће сачувати НУЛЛ - СТУДЕНТСКА 12: О. У реду. Имам те. ЈАСОН Хирсцххорн: У досијеу. Дакле, ви не можете проверити за НУЛЛ пре него што сте их отворили. НУЛЛ значи нешто није раде исправно. У реду. Дакле, проверите да ли ни је? Или не? Шта ми мислимо? Ми ћемо ићи са тим. СТУДЕНТСКА 13: Да ли је. ЈАСОН Хирсцххорн: Је ли? Нити је? СТУДЕНТСКА 13: Да ли је. ЈАСОН Хирсцххорн: У реду. Изгледа да имамо неке консензус о томе. Ни НУЛЛ. Ок, следећа линија псеудокоду. Ко није ми дао још линију? Ми ћемо чекати за вас. Да. СТУДЕНТСКА 14: Морате да прочитате од првог фајла? ЈАСОН Хирсцххорн: У реду. СТУДЕНТСКА 14: Или ми користимо фсцанф или нешто као онај први фајл? ЈАСОН Хирсцххорн: Зато желимо да прочитајте из прве датотеке и - хајде да стави овде. Прочитајте из изворне датотеке. И онда, шта ћемо да радимо после ми прочитајте из изворне датотеке? Неко други? СТУДЕНТСКА 15: Писање у одредишна датотека? ЈАСОН Хирсцххорн: Пишемо се одредишна датотека, и - У реду. Шта још ми недостаје? Неко други ко није ми дао линија кода још - од псеудокоду. Да. СТУДЕНТСКА 16: Можда можете увек проверити да ли има нешто да се прочита за, као следећи ред? То су као следећи ред, види ако постоји. [ЕЛЕКТРОНСКИ БЕЕП] ЈАСОН Хирсцххорн: Упс. То је мој журнализовањем софтвер. Да? СТУДЕНТСКА 16: Да. ЈАСОН Хирсцххорн: Па дајте то ми се још једном. СТУДЕНТСКА 16: Проверите да ли је још следећи ред из извор фајл за читање. ЈАСОН Хирсцххорн: У реду. Дакле, ми не читате редове - су читање бајтова овде - али ви сте у праву. Желимо да читају и пишу до нема више бајтова. У реду. И тако они заиста треба да буде увучен мало, јер су под тамо. Зар не? Док смо без бајтова, идемо на прочитајте из изворне датотеке и пишу до одредишне датотеке. И онда, шта је последња линија псеудокоду? Неко ко није дао ми нешто још. СТУДЕНТСКА 17: Затворите фајлове? ЈАСОН Хирсцххорн: Управо тако. Затворите фајлове. Дакле, ту је наш Псеудокод. Ја ћу да ставим у Псеудокод гедит, и за пар минута смо ће кодирати ово заједно. У реду. Хајде да почнемо као група. Нисхант, имам нову датотеку. Управо сам отворио ово горе. Унтитлед Доцумент 1. Шта је прва ствар коју треба да урадим? Нисхант: Укључи библиотеке? ЈАСОН Хирсцххорн: У реду. Шта библиотеке? Нисхант: Стдио.х, стдлиб.х, ја верујем? ЈАСОН Хирсцххорн: У реду. Шта је за стдлиб? Нисхант: Заборавио сам. ЈАСОН Хирсцххорн: У реду. Тако укључују стдио. Шта треба да урадим пре него што Ја почети кодирање? Нисхант: Напишите заглавље? ЈАСОН Хирсцххорн: Како да се то обојени? [изнео ГЛАСОВИ] Нисхант: Како то да боје? ЈАСОН Хирсцххорн: Како да обојите кодирање? Нисхант: Ја не знам. О. Саве. ЈАСОН Хирсцххорн: Саве. Да. Ја треба да га сачувате као. Ц. Тако је сачували на десктопу као цп.ц. Слатко. И ако ја желим да се пуни стил бодова, што би ја укључују на врху? Нисхант: Могао би да напишем своје име, име програма, а у циљу програма, као и? ЈАСОН Хирсцххорн: Изгледа добро. Одлично. Тако сте нас почела савршено. # Инцлуде - такође ћемо писати - У реду. Тако да мислим да сам све спремно да иде. Ко има прву линију кода за мене - или први линија кода који биће потребно да се задовољи наш први цоммент у псеудокоду? Ти. СТУДЕНТСКА 18: Зар не би требало да буде инт аргц, а затим цхар * аргв? ЈАСОН Хирсцххорн: Мислим да у праву си. Хајде да променимо то да инт маин, отворене парен, инт аргц, зарез, цхар * аргв? Овако? СТУДЕНТСКА 18: Заграде. ЈАСОН Хирсцххорн: Заграде. Отворена заграда, затворена заграда, близу родитеља. Савршено. Сада могу узети аргументе командне линије. У реду. Обезбедити смо дали два фајла. Можете ми дати да као добро. СТУДЕНТСКА 18: Ако аргц - овај не равно 3. ЈАСОН Хирсцххорн: Ако отворених заграда аргц не једнако 3? СТУДЕНТСКА 18: Да, ви се вратите 1 или било шта. ЈАСОН Хирсцххорн: Извини. СТУДЕНТСКА 18: Повратак 1. или било шта. ЈАСОН Хирсцххорн: Повратак 1. ОК? Сјајно. Отворите обе датотеке. Ко може да ми помогне да отворим обе датотеке? Ко није ми дао још код? Курт? КУРТ: Па сви капе Ф-И-Л-Е звезда извора. ЈАСОН Хирсцххорн: Идем да извади самогласнике. То су кул. То је као Тумблр. СТУДЕНТСКА 18: Једнако фопен - ЈАСОН Хирсцххорн: Једнако фопен? СТУДЕНТСКА 18: Опен заграда, аргв, отворена заграда. ЈАСОН Хирсцххорн: Чекајте. Извините. Отворена заграда. У реду. СТУДЕНТСКА 18: Да. Аргв суб 1. ЈАСОН Хирсцххорн: Под 1? СТУДЕНТСКА 18: Да. Аргв отворена конзола 1 - Да. А онда запета, а затим отворено двоструко цитат, р, двоструки цитат, затвори заграда, зарез. ЈАСОН Хирсцххорн: Слатко. А шта је са оним другим? СТУДЕНТСКА 18: Врло слично, али уместо тога С-Р-Ц, да ћеш га звати Д-С-Т. ЈАСОН Хирсцххорн: Оо! Свиђа ми се то. СТУДЕНТСКА 18: Д Само-С-Т. Да. А онда аргв, отворену конзолу, 2. Да. А онда в уместо р. Да. ЈАСОН Хирсцххорн: Сјајно. Следеци пар редова. Такође, ако неко има нешто да додате на линије које смо урадили, слободно адд оне као добро. Проверите да ли није ни НУЛЛ. Ко може да ми да код морам да задовољи ту линију псеудокоду? Арчер. Арцхер: Ако срц једнако екуалс НУЛЛ или дст једнако екуалс НУЛЛ, онда сте се вратили - ЈАСОН Хирсцххорн: Шта? Арцхер: Повратак 2? ЈАСОН Хирсцххорн: Повратак 2. Дакле, ако отворена заграда срц једнако једнак НУЛЛ, или - шта год да тхинг'с - лулу? Цеви? Ми ћемо га звати цев. Цеви, цеви, дст једнако екуалс НУЛЛ, врати 2.. ОК? Док смо ван бајтова - некако смо прескочили овај корак од Псеудокод део да ће се овде. Али док смо ван бајтова - Шта то звучи као? Који тип Ц структуре - али ја не користим реч структуру, јер ћемо почети користећи да у другим случајевима - али Ц алатка то звучи као? СТУДЕНТСКА 19: петља. ЈАСОН Хирсцххорн: петља. Звучи као петље. Па ко може да ми да прву линију кода петље овде? Такође можете изабрати какав петља хоћеш, ако ми даш ова линија кода. Постоје три врсте. Добијате да изаберете. Предложио бих један од оних. Ави. Коју хоћеш? АВИ: ЗА. ЈАСОН Хирсцххорн: ЗА. АВИ: инт једнак нули. ЈАСОН Хирсцххорн: У реду. АВИ: Овај део нисам сигуран. Али ја је мање од величине од стар извора? Нисам сигуран у то. ЈАСОН Хирсцххорн: У реду. АВИ: Зато што желите величину слика, зар не? ЈАСОН Хирсцххорн: Дакле, ово вероватно неће дајте нам величину стварни филе у бајтовима. Дакле, шта је друго могла да урадим? Шта је још једна врста петље? Или треба да се држимо са ЗА петље? СТУДЕНТСКА 20: Да ли можете да урадите док петљу? И онда, шта ћете урадити јесте Ти би - јер имамо цхар * за датотеку. Дакле, ако ми само настави да се увецава док ћемо налазе НУЛЛ карактер на крај ње? Или не, јесте да не раде како фајлови? ЈАСОН Хирсцххорн: Дакле, можемо задржати увецава се цхар * док не пронађу НУЛЛ - СТУДЕНТСКА 20: У суштини настави карактер по карактер док не удари крај датотеке. ЈАСОН Хирсцххорн: Да. Дакле, то је оно што желимо да урадимо. Желимо да наставите да читате, карактер по карактеру, док не дођемо до крај датотеке. СТУДЕНТСКА 20: Да. Финд - шта је крај или стоп знак на крају текстуалне датотеке. ЈАСОН Хирсцххорн: У реду. Дакле, када стигнемо до краја датотеке - како да знамо да смо стигли крај датотеке? Ако ја зовем - па хајде да одступи. Шта је функција? Идемо на овој линији овде. Прочитајте из изворне датотеке. Ко може да ми ту линију кода? СТУДЕНТСКА 21: фсцанф? ЈАСОН Хирсцххорн: фсцанф. У реду. Шта ако желим да прочитам, веома конкретно, један бајт? СТУДЕНТСКА 21: Ја не знам. ЈАСОН Хирсцххорн: У реду. Чак и једноставније него фсцанф - шта је - Желим да чита из изворне датотеке? Прочитајте из изворне датотеке. Шта је функција - да. СТУДЕНТСКА 22: То је фреад? ЈАСОН Хирсцххорн: фреад. Мислим да држимо са да је један за сада. Какав аргумената не фреад узети? СТУДЕНТСКА 22: Вероватно тип фајла, а затим место у датотеци? ЈАСОН Хирсцххорн: Шта могу да куцате овде да схватим која врста аргумената фреад траје? Више студената: Човек фреад. ЈАСОН Хирсцххорн: Човек фреад и фврите. Изгледа да су се друже. Дакле фреад узима како много аргумената? СТУДЕНТСКА 23: Четири. ЈАСОН Хирсцххорн: Потребно четири аргумента. Потребно је показивач, величину, и да ствар, која је чудно, а неки фајл. ОК? Хајде да читају о томе овде. "Функција фреад чита н Мемб елементи података, свака величина бајтова дуго, од потока који указује стреам, њихово складиштење на локацији дао показивачем. " Дакле четири аргумента. Зашто не само копирајте ово, и налепите га овде. У реду. Па ко може почети попуњавањем ови аргументи за мене? Ави. АВИ: Извадите празнину. Стави само срц. Извадите показивач и звезду. Пут срц. Онда - ЈАСОН Хирсцххорн: Па ја ћу престати ви тамо, јер је то нетачно. У праву си са СРЦ, али где срц треба да иде? [изнео ГЛАСОВИ] ЈАСОН Хирсцххорн: То би требало да иди овамо. То је срц - наша срц је тип. Погледајмо овде. Ово је пита за тип ФИЛЕ *, ми заправо обично их виде тако. Дакле, ово је пита за аргумент филе типе * зове поток који је срц. ОК? Шта величина ствари ураде желимо да чита? Дао сам ти ово у Проблем опис. СТУДЕНТСКА 24: Један бајт по један. ЈАСОН Хирсцххорн: Један бајт. Колика је бајт? Његова величина је у бајтовима, па шта могу да ставим тамо? СТУДЕНТСКА 25: Један. ЈАСОН Хирсцххорн: Један. Право. Његова величина је у јединици бајт, па 1 је 1 бајт. Колико желим да читам у једном тренутку. СТУДЕНТСКА 26: Један? ЈАСОН Хирсцххорн: Једна ствар. Хоћу да прочитам једну ствар од величине 1, један залогај у време. А где да га ставите, једном сам га прочитао? СТУДЕНТСКА 27: Куда? ЈАСОН Хирсцххорн: Па ја не могу ставити то право у околини. СТУДЕНТСКА 28: Ти ћеш ставити она у трећем показивача? СТУДЕНТСКА 27: За дестинације. ЈАСОН Хирсцххорн: У реду. Да. СТУДЕНТСКА 29: Можете да прогласи нешто да делује као привремено складиштење раније. ЈАСОН Хирсцххорн: У реду. Дај ми то. СТУДЕНТСКА 29: Још један фајл показивач, можда? ЈАСОН Хирсцххорн: У реду. Дакле, ово је празнина звездице - то је тип празнина звезда, тако да не морају да буду фајл показивач. А ако ја читам један бајт, где би било добро место за чување један бајт? СТУДЕНТСКА 29: низ? ЈАСОН Хирсцххорн: низ. У реду. И шта је још нешто што је само величине један бајт? СТУДЕНТСКА 30: цхар *? СТУДЕНТСКА 29: Да. ЈАСОН Хирсцххорн: цхар * није један бајт. СТУДЕНТСКА 29: знак. ЈАСОН Хирсцххорн: Чар је један бајт. Зар не? Па хајде да позовете овај бафер је генерички име се користи за ове ствари за складиштење нешто привремено. Тако сам креира бафер. Зар не? Али, то не узме празнину *. Дакле, можда сте у праву, да је треба да буде тампон величине 0. Тако да чува један - у праву. Јер ово овде - Чар бафер је лик, али ово траје празнину * - показивач. Тако да сам могао да урадим ово и сада бафер је показивач. Шта сам друго могао да урадим? СТУДЕНТСКА 31: Ставите звезду поред цхар. ЈАСОН Хирсцххорн: Могао створили су се цхар *. У реду. Шта је још једна ствар коју сам могао да урадим? Или идемо са овим. Цхар * бафер, па шта да ставим овде? СТУДЕНТСКА 31: буффер. ЈАСОН Хирсцххорн: буффер. Бафер је показивач на цхар. И у том месту, ми смо стављањем један бајт од нечега што смо прочитали. Да. Ави. АВИ: Само брзо питање. Да ли желите да маллоц бафер? ЈАСОН Хирсцххорн: Ко може одговорим на то питање? СТУДЕНТСКА 32: Па, то заиста не тачка на било сада, тако - ЈАСОН Хирсцххорн: Али, да ли желимо да га маллоц? СТУДЕНТСКА 32: Ако сте били да то урадим начин, претпостављам, да, јер би ми била потребна неко место за то да укаже на. ЈАСОН Хирсцххорн: Да ли ми да га маллоц? СТУДЕНТСКА 33: Ако идете да користите га изван петље. ЈАСОН Хирсцххорн: Хоћемо ли користите га изван петље? СТУДЕНТСКА 34: Да. СТУДЕНТСКА 35: Чекајте. Да ли желимо да га прогласи у петљи у онострано? ЈАСОН Хирсцххорн: Претпостављам да имамо неки псеудо ДОК петља овде да смо Покушавам да схватим, да нисмо стигли до још. Ми не треба да га маллоц. Ми смо послују у главни, то ће само који ће се користити унутар ове петље. То не треба да постоји напољу ово. Тако да може бити локални променљива. Имате показивач на локална променљива. СТУДЕНТСКА 36: Али то није указујући на све. ЈАСОН Хирсцххорн: Не, то није иницијализован на све. Али ми не идемо да га користе такође. Идемо да стави нешто у то први пут да смо га користили. Тако да изгледа у реду. Тако да не треба овде маллоц. И ја мислим да је у реду што је. У реду. Имамо фреад линију. Хајде да урадимо следећу линију. Ако желимо да пишу у датотеку, што је добра функција да користите за то? СТУДЕНТСКА 37: фврите? СТУДЕНТСКА 38: фпринтф? ЈАСОН Хирсцххорн: фпринтф је један. Шта је још један? СТУДЕНТСКА 39: фврите. ЈАСОН Хирсцххорн: фврите. И за наше потребе, фврите, које смо овде видели, је вероватно бољи избор. Потребно је четири аргумента као добро. Нисхант, можете ли дати ме аргументи? Нисхант: Први иде да буде само бафер. ЈАСОН Хирсцххорн: У реду. Нисхант: други је само ће бити 1. Трећи ће бити 1. И четврти ће бити дст. ЈАСОН Хирсцххорн: Да ли неко има било каква питања о тој линији? То изгледа добро. У реду. Дакле, сада изгледа као једна ствар за коју смо недостаје - заправо, хајде да пишу ова последња линија. Затворите фајлове. Ко може да нам завршити писање ова последња два реда? Да. Извини, како ти је име? ЛУЦИ: Луси. ЈАСОН Хирсцххорн: Луси. ЛУЦИ: фцлосе срц и онда фцлосе дестинација. ЈАСОН Хирсцххорн: фцлосе, отворена заграда, срц, затвори заграда, тачка и зарез. И фцлосе - да? ЛУЦИ: Отворена заграда, дст а затим тачка и зарез. ЈАСОН Хирсцххорн: Сјајно. И шта треба да укључи на крају? ЛУЦИ: Повратак 0. ЈАСОН Хирсцххорн: Повратак 0. Да ли морам да? Само питање. Да ли морамо да су повратак 0? Више студената: Не ЈАСОН Хирсцххорн: Не Главни то ради аутоматски ако дођете до краја. Али мислим да је лепо укључују се експлицитно. Посебно када смо повратка други ствари током програма. У реду. То је оно што ми недостаје - ДОК шта? Ко може мислити на неке - има неки смисао онога ствари може да иде тамо? Чак и ако је то само у неким псеудокоду као језик? Оно што смо ми стварно - шта Не желимо да идемо до? Да, Луси. ЛУЦИ: крај датотеке. ЈАСОН Хирсцххорн: крај датотеке. Дакле, шта мислите до краја фајла? ЛУЦИ: Када стигнете крај датотеке, стани. ЈАСОН Хирсцххорн: У реду. Дакле, када смо до краја датотеке. Како да знамо када смо стигли крај датотеке? СТУДЕНТСКА 40: Мислим да бафер ће бити постављен на НУЛЛ. СТУДЕНТСКА 41: Пуфер се проглашава унутар петље. ЈАСОН Хирсцххорн: Дакле, мислите бафер ће бити постављен на НУЛЛ. Зашто би бафер може подесити на вредност НУЛЛ? СТУДЕНТСКА 40: Јер када фреад, ви покушавате да ставите ништа у бафер. ЈАСОН Хирсцххорн: У реду. Значи мислиш фреад - када смо стигли до краја фајл, шта је фреад да уради? Мислим да је то питање морамо да схватимо. Шта фреад радим? Да ли ставити НУЛЛ у бафер, или то уради нешто друго? Како можемо да схватимо шта је то? СТУДЕНТСКА 42: Човек. ЈАСОН Хирсцххорн: Човек. Па хајде да погледамо овде. Повратак вредности. На успех, фреад и фврите врати број ставки прочитаних или писаних. Овај број је једнак броју бајтова преносе само када је величина 1. Уколико дође до грешке, или крај је постигнут фајл, вредност повратак је Укратко Цоунт ставка или 0. Дакле, за наше потребе, ако достигне фреад крај датотеке, и чита из крај датотеке, не постоји ништа лево да чита, шта ће да се врати? СТУДЕНТСКА 43: Нула? ЈАСОН Хирсцххорн: Шта? СТУДЕНТСКА 43: Нула? ЈАСОН Хирсцххорн: Нула. То ће да се врати нулу. Дакле, ми знамо да је фреад, када смо стигли до краја датотеке, иде да се врати нулу. Како можемо да користимо да у нашу корист? АВИ: Можете декларисати променљиву изван петље се зове провера. Ако провера једнако - за сада - један. ЈАСОН Хирсцххорн: У реду. АВИ: А онда можете ставити ИФ изјава после фреад кажем ако фреад једнак нули - бр. ЈАСОН Хирсцххорн: Ко може помоћи Ави напоље? АВИ: Шта је вредност враћа фреад? ЈАСОН Хирсцххорн: Управо смо отишао да. АВИ: Како вам се представљају? ЈАСОН Хирсцххорн: Па то враћа - Хајде да погледајте овде - то враћа сизе_т, што је у суштини цео број. Тако да враћа цео број. И у нашем случају, то ће ретурн 1 или 0 - 1 ако је прочитао само једну ствар - један бајт, а 0 ако смо стигли до краја. Дакле, ако фреад - да? СТУДЕНТСКА 45: не можеш само ставити пуну фреад (бафер, 1, 1, срц) у док петља? ЈАСОН Хирсцххорн: Па ви предлажете радим ово у ту? [изнео ГЛАСОВИ] ЈАСОН Хирсцххорн: Држи се. Тако смо ослобађање од тога. Дакле, ви предлагање стављање фреад у ту? Шта би требало да такође потез ако желите да урадите? СТУДЕНТСКА 45: бафер напољу. ЈАСОН Хирсцххорн: Ми треба да Такође преместите ово овде. СТУДЕНТСКА 45: Али, да ли то стално преместите га напред? [изнео ГЛАСОВИ] ЈАСОН Хирсцххорн: У реду. Дакле, то је оно што Оксхар предложио. Ми стварамо нашу бафер. Ми ДОК фреад, онда фврите. Осврт на ово? СТУДЕНТСКА 46: Моје једино питање је, да ли би она заправо извршава команду фреад? ЈАСОН Хирсцххорн: Одлично питање. Када сте стављајући позив функције унутар стања, да ли то позив функције извршава? Видели смо примере ово раније. Зар не? СТУДЕНТСКА 46: У реду. Да. Тако то ради извршити. ЈАСОН Хирсцххорн: Видели смо ствари као да је пре, где имамо позив функције унутар услов. Да ли то позив функције извршавају? Да. Дакле, одговор је да. Ова функција позив ће извршити. Али опет, то је оно што желимо? Шта је један начин можемо да схватимо да ли је то оно што желимо? Више студената: то Рун? ЈАСОН Хирсцххорн: Могли смо да га покренете. Али пре него што то урадимо, можемо такође размишљају кроз ово. Ако - кажу да имамо један бајт у нашем филе, ми ћемо доћи до овде, ми ћемо доћи до тог кода. Ово ће покренути. фреад ће се вратити један бајт и складишти се у бафер. И то ће проценити на 1, десно, након што је 1. враћа. Дакле, док 1. Да ли то значи код унутра ДОК петља ће извршити? СТУДЕНТСКА 47: Да. То је истина. ЈАСОН Хирсцххорн: Да. 1 је истина. То није 0. Дакле, код унутра ће извршити. Тако ћемо писати да. Ми ћемо се вратимо на ово линија поново. Сада имамо - ми смо на крају нашег фајла. Читамо из краја наше датотеке, јер смо имали само један бајт у њему. Фреад враћа 0, продавнице нешто у бафер. Ја искрено не знам шта на њој се чува у баферу. Могли би вероватно потражити да види шта ради. То ја искрено не знам. Ми не знамо, кога брига шта на њој се чува у баферу? Али то не врати 0.. И док ће извршити 0? ДОК 0 неће извршити. Па онда идемо доле. Дакле, хајде да се дизањем руке, ако то је код нас би требало да ради, или ако се треба да урадим прво промене. Дакле, ако мислите - морате да гласате. Ако мислите да треба покренути овај код као што је то, молим вас подигните руку. У реду. Има један - Да ли имате питање, забринутост? Да. СТУДЕНТСКА 48: Након што кренемо бафер изван петље, радимо да га маллоц? ЈАСОН Хирсцххорн: Одлично питање. Након што пређемо бафер ван петља, морамо да га маллоц? Ово је обим питање. Ако иницијализовати бафер ван ове петље, ће постојати унутар петље? Више студената: Да. ЈАСОН Хирсцххорн: Да. Њен обим покрива унутар петље, и, заиста, нешто ниже је унутра овог закона, укључујући ствари унутра. Тако да не треба да га маллоц. То је локална променљива, а њен обим и даље обухвата петља. СТУДЕНТСКА 49: Да ли ми треба да га ослободи? ЈАСОН Хирсцххорн: Да ли ми Потребно је да слободан бафер? СТУДЕНТСКА 49: Да, ако ми не урадимо маллоц. ЈАСОН Хирсцххорн: Да ли ми Потребно је да слободан бафер? Ми не. Опет, то је локална променљива, тако да не треба да га ослободи. У реду. Хајде да видимо шта се дешава. Дакле, то је неинициализированним. Оно нешто што је то било Маркус предложио раније. Тако имамо да је грешка, променљиви бафер се неинициализированним када се овде користи. Како можемо поправити ово? СТУДЕНТСКА 50: маллоц то? СТУДЕНТСКА 51: Једнако НУЛЛ? СТУДЕНТСКА 52: Реци бафер једнако НУЛЛ. ЈАСОН Хирсцххорн: У реду. Изгледа добро. Ми га имамо сада. Хајде да направимо нешто да покуша копирање. Дакле, имамо текстуалну датотеку. Како можемо покренути овај програм? Да. СТУДЕНТСКА 53: Можете да урадите тачку сласх ЦП, тест.ткт. А онда можете да поменемо још једну датотеку који ће ускладиштити у. ЈАСОН Хирсцххорн: У реду. Ми ћемо га звати оут.ткт. Цоол? Сец кривица. Размишљања о сегменту кривица? Ово је сјајно. Како можемо да сазнамо где сек кривица је? Шта? СТУДЕНТСКА 54: гдб. ЈАСОН Хирсцххорн: гдб. Ми смо покренули гдб писањем гдб дот косу црту, име нашег програма. Нема аргументи командне линије тамо. Идемо да подесите Бреакпоинт на главни. Ако желим да почне гдб, шта да радим? СТУДЕНТСКА 55: Р. ЈАСОН Хирсцххорн: Р И шта онда? СТУДЕНТСКА 55: Аргументи? ЈАСОН Хирсцххорн: Онда командне линије аргументи. Идемо кроз хода. Н се само ми узима линију по линију. Ја ћу да одем до Ја узмем СЕГ грешка. Ту је моја кривица сек. Изгледа фреад проузрокована моја кривица сек. Знам фреад изазвао моју СЕГ грешка, јер је то био линија смо управо погубљен. И једина ствар која је дешава у тој линији - Две ствари су се дешавале. Фреад се дешава, а онда смо били раде неке провере, док. Ја сам спреман да се кладим да ДОК провера није узрок мог СЕГ грешка. Највероватније, фреад био узрок мог СЕГ грешка. Такође видим нешто овде, мемцопи. Меморија копија. Звучи као креће од меморију једна локација на други. Звучи као нешто што би се догодило у фреад, можда неки меморија креће одавде довде. Идемо кроз ово поново. Како да то испочетка и покрените га поново? Да. СТУДЕНТСКА 56: Да ли треба да се стави амперсанд пре бафер? ЈАСОН Хирсцххорн: Па амперсанд пре бафер би ми дати адресу пуфер, што је цхар *. Хајде да кроз овај још једном. Како да покренем кроз њу још једном? СТУДЕНТСКА 57: Можете ли само укуцајте рун поново? ЈАСОН Хирсцххорн: Само укуцајте серију опет. Дакле, ми не идемо у изврши ову линију. Дакле, бафер је НУЛЛ показивач. Исправите? То указује да се - хајде да видимо. Ако ми имамо - нацртати брзу слику ово. Могу сви видели да ли Пишем овде? Дакле, у стеку, имамо локални променљива и то се зове бафер, и то је показивач на цхар. Шта је ово адреса знак у? СТУДЕНТСКА 58: 0к0. ЈАСОН Хирсцххорн: Тачно. То је оно што је ово. У овде, унутар бафера, се складишти 0к0. То је оно што имамо - подешавање имамо сада. Дакле, ово линија, фреад, ставља нешто од извора где? У овој кутији или ове кутије? Која кутија? Леви или десни оквир за кутију? Ово право кутија. Она прати показивач, и ставља га овде. Када покушамо и додир меморија на локација 0, шта ћемо добити? Сегментација грешка. То је грешка имамо сада. Да. СТУДЕНТСКА 59: Зар ти немаш ставити звезда бафер? Или не? За фреад? ЈАСОН Хирсцххорн: Па фреад узима показивач. Тако пролази у бафер. И онда ће се де-референца она негде унутра фреад. Али опет, видели смо, потребно је показивач. Ми не треба да га усвоји звезда бафер. То би се, пролазећи је све што је овде. И то вероватно би нам грешку јер смо га де-референцирање. Зар не? Када смо се де-Референце овај показивач, када трудимо се да приступите ову локацију, ми смо све грешку - наша кривица сегментација. Дакле - упс. Идемо да оставе из ГДБ. Наша линија - наш проблем - није у праву овде на овој линији. И то је проблем, јер ове линије. Како можемо створити оквир који је доступан у фреад. Зар не? Ми треба да створи оквир који је један бајт велика, величине цхар. Али морамо да кутија да буде доступан када ова функција извршава. Па где - Да. Нека идеја? СТУДЕНТСКА 60: Само га поставите као сваки случајни карактер. Само уради цхар буффер једнакима карактер. А онда, кад сте тамо бафер - ЈАСОН Хирсцххорн: Чекајте. Знак бафер? Тако да нема звезда? СТУДЕНТСКА 60: Да. Извадите звезду. Једнако случајни карактер. ЈАСОН Хирсцххорн: У реду. Дакле, дајте ми једну. СТУДЕНТСКА 60: Као или нешто. А онда када имате бафер тамо, користите - СТУДЕНТСКА 61: Звезда? Ох не, амперсанд. СТУДЕНТСКА 60: Користите амперсанд. ЈАСОН Хирсцххорн: У реду. А шта је у фврите? СТУДЕНТСКА 60: поново Користите амперсанд. ЈАСОН Хирсцххорн: У реду. Дакле, твоја идеја је, ми стварамо цхар и стави нешто у њу, а затим пишите на тај знак. СТУДЕНТСКА 60: Да. ЈАСОН Хирсцххорн: Шта Шта људи мисле? СТУДЕНТСКА 62: То је замршена. ЈАСОН Хирсцххорн: У реду. Хајде да га извуче. Дакле овај пут, ја ћу да се скрене у ово црвено на стек овде, а онда смо ће имати - ох! Извините. Дакле, овај пут имамо нешто што се зове бафер, а то је на стек. Исправите? И ми смо штедњу у њему је, у почетку. Онда имамо позив фреад. Шта ли је фреад је потребно бајт из наш фајл и ставља га негде. То га ставља у год ствар је указујући на. Па, пре него што смо имали ову адресу - 0к0. Сада оно адреса имамо? СТУДЕНТСКА 63: год адреса бафер. ЈАСОН Хирсцххорн: год адреса бафер. Вероватно ће бити тако нешто. Вероватно ће почети са б и ф, а затим имају шест друге хексадецималне цифре. Није битно. Неки адресу. И ми смо, пролазећи ту адресу за И ми ћемо ставити наше један бајт ствар на тој адреси. Дакле, ми ћемо ставити наше један бајт ствар унутра. А онда ћемо да пишу из шта је све унутра. Да ли неко има било каква питања о томе? Ко мисли да овај број ће радити? Подигните руку ако мислите овај број ће радити. Морате да заузме став. А ко мисли да то код неће радити? Подигните руку. Сви остали би требало да буде подизање руку. У реду. Мајкл, где стојиш? МИЦХАЕЛ: Ја не могу одлучити. Врста у средини. ЈАСОН Хирсцххорн: си у средини. Изаберите једну. МИЦХАЕЛ: Ја ћу имати веру и кажу да ће радити. ЈАСОН Хирсцххорн: У реду. Имаћете веру и кажу то ради? Шта се десило? [изнео ГЛАСОВИ] ЈАСОН Хирсцххорн: Нема сец кривица. Како можемо проверити да ли Две ствари су једнаки? Два фајлови су једнаки. СТУДЕНТСКА 64: Разлика. ЈАСОН Хирсцххорн: Дифф. Дифф проверава разлике између две датотеке, а ако се врати ништа, они су идентични. И ако ми отворимо, добијамо нашу датотеку. Дакле, то је био исправан решење. Погледајмо уназад на то још једном. Ми заправо није ни треба да га покрене. То би вероватно изгледати мало чистач ако нисте ставили нешто случајан унутра. Поента је, ти је потребно да се створи неки простор за складиштење нешто од фреад и узети нешто од фврите. И то ствар морао да буде или локални променљива на стек - ви Могао сам маллоц'д мало простора. Тако смо заправо могли имати написао маллоц овде, и да би радили. А онда бисмо се чување наше ствари негде на гомили. Али ово је стварно, вероватно, најелегантнији решење. Само створе неку простора на стеку за ове ствари да иду. Ја бих још два коментара. Ако сте били да се ред у ово, и онда се постигао на ово, моји коментари би бити као што следи. Ови 1 је овде, са мном, погледајте као магија бројева. То 1, у смислу фреад, има смисла. То је број ствари да читају или пишу. Али овај овде треба вероватно бити нешто друго. Дакле, оно што је једно решење? СТУДЕНТСКА 65: Величина бајт. ЈАСОН Хирсцххорн: Овако? СТУДЕНТСКА 65: Величина цхар. ЈАСОН Хирсцххорн: Величина цхар. Да, бајт није тип. Дакле, величина карактерис радова. Могли смо, на врху наш код, # дефинисано да. Назван нешто БИТЕ и то је заиста знак. Заправо, чак и бољи приступ Можда су ово - уинт. Да ли неко зна шта је то? Извините. Ја га имам уназад. Чекај, не. Којим путем иде? Да ли неко зна шта је то? Да. СТУДЕНТСКА 67: Требало би помоћи стандардизује преко система ствари које имају - као непотписани целих бројева да имају 8 бајтова? ЈАСОН Хирсцххорн: То је потпуно тачно. На различитим машинама, величина цхар - не обично знак. Цхарс су обично један бајт. Али величина других типова података су различите величине на 32-битном рачунару односу на 64-битну машину. Уинт8_т је увек 8 бита - увек један бајт. И ја треба да се укључи да стандардни инт хеадер фајл. Дакле, сада, ово би вероватно био најбољи начин да се напише овај код. Тако сам се отараси магичних бројева. И ја такође имам више логичан укуцајте за бафер. То није једноставно знак, то је бајт, што је оно што очекујемо да буде. И овде, заправо сам био мало више робустан. Нећемо га називајући Чар, који - можда, ко зна - могао бити другачији величина на различитим машинама. Ми заправо кажете да је ово тачно један бајт, увек, без обзира на све. И ако погледамо овде, можемо направити цп. Ух. Шта се десило? СТУДЕНТСКА 68: Могло би да буде укључен. ЈАСОН Хирсцххорн: Шта? СТУДЕНТСКА 69: Да ли је? СТУДЕНТСКА 70: Ниси дефинишу га као тип. СТУДЕНТСКА 71: Али то треба бити дефинисани у стандарду. СТУДЕНТСКА 72: Шта се дешава? СТУДЕНТСКА 73: Треба дефинисати бити све капе? ЈАСОН Хирсцххорн: Дакле, то није # дефине. Заправо, у овом случају, ја сам ће користити типедеф. Зато што га користите као Тип на једној локацији. Дакле, у овом случају, ми заправо желимо да типедеф као да штампа нови тип бајт, а то је, у суштини, ово. То је мало другачије него # дефине. А сада, наш код ради савршено. Дакле, опет, # дефине узима нешто, замењује га свуда са друге ствари. То је само макро - стенограм да се отараси магичних бројева. Али у овом случају, јер смо користећи га као тип - овде - да би за то да раде, морамо да типедеф год бајт је. И ми смо га дефинисање овде. То није строги, то је заправо само непотписани цео број. То је један бајт. Овај код ће бити доступан онлине, а ви сви треба да га одмах. Тако имамо - савршен - 13 минута да одем преко Проблем сет 5. Желим да ходам кроз цопи.ц заједно, а онда ћемо разговарати кратко о другим деловима проблема сет. Дакле, дозволите ми попети цопи.ц. И кул ствар је, заправо сам већ написано доста овог кодекса. Код нас буквално писали само изашао одавде кад сам био писање ово сама. Али ово је цопи.ц, представља темељ за прва два дела Проблем сет за входунит.ц, који морате да пишете, и ресизе.ц. Рецовер.ц, која је трећа и коначна Део проблема сета, није заснива искључивање ове датотеке. Ти ћеш морати да напише тај фајл, ми вам дати шаблон за то филе, али то нема никакве везе са цопи.ц. Али зато цопи.ц је основа за прва два дела, идемо до сада хода кроз њега, тако да имате добар осећај шта то ради. И коментари дати нешто од тога далеко. Већ смо написао нешто од овога. Прво, ми правимо сигурни смо добили три аргумента. Даље, ми смо сећајући име датотеке. Дакле, ми смо прескочили овај корак када смо кодирани нашу ствар - када је наш ЦП. Али овде, они што то мало чистији. Они проверавају да се уверите обе датотеке су добри, у Поред отварања. Написали смо све ово код управо сада, тако да сам неће задржавати на овом коду. Следећа је неких ствари које су специфичне за типови фајлова користимо, који су битмап датотеке. Битмап фајлови имају неку метаподатака у вези са њима. Дакле, први пар бајтова Вас о датотеци. Они нису боје пиксела у тој слици. Они вам кажем о датотеци. А ако сте прочитали кроз сет проблема, ви ћете имати много више информација од типа структура метаподатака су укључени у битмапе. Али зато имамо ово прво сет од - овог законика овде. Ми читања метаподатака - два комада метаподатака - фајл заглавље и инфо заглавље. И ми смо се провере неке делове на проверите да ли је истина битмап фајл пре него што наставите. И опет, то су детаљи ми не морају да иду у сада. Ако прочитате проблема сету, ви ћете разумети ово. Да скратимо причу, то су само кажу, ово је битмап фајл, и потврђујући да. Даље, пишемо оних на ван датотеку. Видимо да се овде. Пишемо се ван показивачем. Даље, ми смо одређивање паддинг. Дакле, опет, као што је посебност са битмап фајл, неке линије укључују паддинг на крају. А ако сте прочитали кроз сет проблема, ћете сазнати више о поставом. Ово је формула да пронађе паддинг. Важно је запамтити - када промените величину битмапе филе, преграде промене. Када промените величину филе, преграде промене. Никада неће бити већи од 3 - то ће бити 0 до 3, закључно. Али када промените величину нешто, преграде промене. Ако ја имам само један пиксел у том реду, ја потребно три бајтова пуњење, јер сваки ред мора да буде умно четири бајтова дуго у битмап датотеке. Али, ако ја то дупло, да иду од једног пиксела на два пикселу, од којих је сваки, рецимо, је бајт, онда треба два бајта пуњење да се направи да једнако до четири. Дакле, када сам променити величину нечега, Морам да промените износ од поставом имам. Да ли то има смисла за све? Даље, ми смо поновити над сваком реду, или кроз све редова. И онда ми итерацију кроз Свака колона у сваком реду. Ми лечењу овог битмапу као мрежа, као што смо третирани одбор у 15.. Као што смо третирани цигле када ми смо их штампају на екрану. Мрежа редова и колона. Онда - Видели смо то. Ми смо заправо само кодирани ово. Направили смо неке привремено складиштење. Читамо у тамо, а затим ми то написати. То је управо оно што смо управо урадили. Даље, зато што сам рекао сваки ред завршава у некој пуњење, ми прескочите преко тог пуњење - паддинг стари. А онда смо га додате. У овом случају, ми стварамо исти тачан фајл. Само смо га копирате. Дакле, ова линија је некако глупо. Могли би буквално само стави унутра паддинг Али ако промените величину датотеке, Да ли и даље желите ову линију? Дакле, ако смо променили величину датотеке, да ли и даље желите да прескочите преко старог пуњење? СТУДЕНТСКА 74: Да. ЈАСОН Хирсцххорн: Тако ми радимо. Јер То, опет, бави са изворном датотеком. Ми не брига за пуњење из изворне датотеке. Желимо да идемо на следећу линију. Али ми не просто ставити назад стари износ поставом. Ми треба да се врати нови износ поставом. Дакле, када мењамо величину фајл, ми и даље желимо да прескоче паддинг у старом фајлу - шта ми читате у од. Али оно што пишете да, идемо да је потребно да се вратите неке другачије број пуњење који смо утврдили. Да. СТУДЕНТСКА 75: Редослед те две линија није битно, зар не? Јер сте руковање различите датотеке. ЈАСОН Хирсцххорн: Управо тако. Редослед ове две линије није битно. Ми писати ову линију. Ово је овде за датотеку пишемо се. То је важно, тако да смо добили Право износ поставом. Ово мора да се бави у датотеци. Желимо да прескочите право преко пуњење. Ми не желимо да читају - ако читате бајт на време, ми не брину о тим паддинг бајтова. Желимо да бисте прешли на следећи ред. Коначно баш као Луси дала за нас, затворимо фајлове и врати 0.. Дакле, ово је цопи.ц. И ми смо у ствари написали - ми смо провели већину одељак писања ово, у суштини. Направио си ово. Дакле, надам се да имате добар осећај шта се дешава овде. Велика разлика, искрено, је само овај први део који се бави особености битмап фајлове. Дакле, ја имам као мој следећи слајд, шта треба да радимо? Па, хајде да размишљамо о детективски роман. А за некога ко прочитао Проблем сет, шта радимо треба да урадите у детективски роман? Једноставно. Алеја. АЛЕЈА: Да ли можете да извадите део сваког пиксела који означава црвено. А онда - врста? ЈАСОН Хирсцххорн: У реду. Зато извадите део сваког пиксел који означава црвено. То је близу, али не све. СТУДЕНТСКА 76: Па, ту је различити начини да се то уради. ЈАСОН Хирсцххорн: У реду. Дај ми један пут. СТУДЕНТСКА 76: Извадите све црвене, и затим наглашавају плаве и зелене. ЈАСОН Хирсцххорн: У реду. Дакле, с обзиром оба ова начина - звучи као да смо му дати пиксел, она има црвену, плаву, зелену и ниво. Желимо да промените релативне нивое црвена, плава, зелена и, зависно на том пикселу. Где у овом коду треба да мењамо релативна црвена, плава, зелена и нивои датог пиксела. Након што сте прочитали - пре него што га написати? Дај ми број линије. Више студената: 83. ЈАСОН Хирсцххорн: 83. Дакле овде. За детективски роман, код треба да Пишите би сви иду тамо. И то је једино код морате да напишете. Јер, као што смо чули, све што је потребно да се урадите је да промените ове релативну плава, црвене, зелене и нивои из сваки пиксел. Ви сте то прочитали у, а сада си ће то написати. Како могу да добијем - да ли ја имам ову ствар зове троструко, овде, и то је од укуцајте РГБТРИПЛЕ - добро, ако смо гледали у бмп.х, шта је РГБТРИПЛЕ? СТУДЕНТСКА 77: То је струцт. ЈАСОН Хирсцххорн: РГБТРИПЛЕ је струцт. Видимо да овде доле. И тако, ако сам хтео да приступа, рецимо, црвени ниво струцт, како ја радим приступите црвени ниво овог струцт? [КЛАСА Мурмурс] СТУДЕНТСКА 78: РГБТРИПЛЕ.ргбтред? ЈАСОН Хирсцххорн: Да ли је то тачно? СТУДЕНТСКА 79: Требало би да буде троструко тачка, уместо РГБТРИПЛЕ тачке? ЈАСОН Хирсцххорн: Троструки. Троструки је локална променљива, тако овде, нема показивачи овде. Дакле, ми само користимо дот нотацију. То ће ми дати ниво црвене. Ако желим да га промените, ја само сет је једнак за нешто друго. Дакле, опет, ова линија кода приступа ова варијабла у овом струцт, и можемо га поставити на нешто ново. Дакле, за детективски роман, опет, ово је, у суштини, оно што треба да урадимо. Врло једноставно. Само промените неке релативне нивое, и ово је место где то иде код. Промена величине, с друге стране, је мало компликованије. У ствари, промене величине је вероватно најтежи део овог проблема сет. Имамо три минута да иду преко њега. Али опет, ми смо већ писали већина овог кода, тако да смо би требало да буде прилично познато. Које су неке ствари које желе да ураде у величину, ако сте прочитали више Проблем сет? Ако им ми, ми може говорити о њима. Које су неке ствари које желе да ураде? СТУДЕНТСКА 80: Вертикално - тако да морате да га хоризонтално величину, али вертикално га промените величину, као и? ЈАСОН Хирсцххорн: Па ако смо дали пиксела, а ми желимо да га промените величину од фактор два, сада треба да буде ресизед хоризонтално и ресизед вертикално. Да ли то смисла? Да. Дакле, то је вероватно Највећи изазов. А ми ћемо говорити о томе у секунду. Да. СТУДЕНТСКА 81: начин сам размишљао о томе је ли потребно одштампајте га - ЈАСОН Хирсцххорн: Чекајте. Немојте нам рећи шта си урадио. Идемо да разговарамо у логици. СТУДЕНТСКА 81: У реду. Шта је било питање? ЈАСОН Хирсцххорн: Ти само подигао руку. Није било никакве сумње. Пусти ме да га представи. Дозволите ми само да дискутују о овом кратко. Дакле, ми смо један пиксел, желимо да понове га, како хоризонтално и вертикално. Дакле, идеално оно што радимо овде је, ми прочитајте у нашој пиксела, ми га напише ипак много времена. Али онда ми имамо овде наш трик, јер онда желимо да прескочите на следећи ред и пишу оно на почетак следећег реда. Дакле, ако желимо да понове оба хоризонтално и вертикално, што је један добар начин да се то уради - један добар иако за то? Тако да не треба да се стално траже око нашег датотеку да поставите ствари. То питање можда неће имати имало смисла, али ја мислим одговорите на то ће помоћи. СТУДЕНТСКА 82: Креирање низа? ЈАСОН Хирсцххорн: Па хајде да мислимо сваког фајла као редом. Хајде да размишљамо у смислу редова. Ако имамо први ред од наше мале слика, можемо направити тај ред у великом реду од великог слику, а затим понове тај ред, међутим много пута она треба да се копирају, уместо да иде пиксел по пиксел, који добија збуњујуће када бави фајловима. Јер ако смо имали - Понестаје ми простора. Ако је ово наш фајл, а ми имамо да један пиксел тамо, а ми желимо да га стави тамо, још увек имамо неке ствари који треба да иду тамо кад смо писање и креирање наш нови фајл - наш фајл који је дупло већи. Али то је заиста тешко са функцијама фајл да прескочите около новим линијама тако, а онда се вратите овде и ставити ствари у тамо. То је готово немогуће да се уради нешто као да, ако то има смисла. Дакле, ако мислимо у смислу редова, можемо узети наш ред, а затим ставити га - понове редове вертикално. И тако смо се баве промена величине вертикално уместо хоризонтално. То је било некако брзо, и мало збуњујуће. Нажалост, наша је време истекло. Ја ћу стајати напољу за оне од вас овде који имају питања у вези Проблем скуп, укључујући и опорави. Па хајде да направимо паузу за сада. А опет, ако имате било каквих питања, можемо разговарати напољу.