>> ЈАСОН Hirschhorn: Добредојдовте сите, Недела 6.
Јас сум среќен да сите ќе видите жив и здрав по Квиз 0, затоа што знам дека
беше малку груб.
Но, за среќа, се што направи неверојатно добро.
И така тоа е прекрасно.
Ако сте во мојот дел, јас сум со оглед на повеќето од вас се врати вашите квизови веќе.
>> Неколку од вас, јас сум состанок по класа.
И ако сте продолжување студент и вие не ги добиле вашите квиз назад
сепак, вашиот ТФ е веројатно работат на тоа и оценување на тоа, и ќе го добие назад
да ви наскоро.
Па ми продолжување студентите кои се гледање токму сега - се надевам дека живееме -
Јас ќе ја добиете вашата квизови кратко, како и.
>> Нашата агенда за денес е како што следува.
Прво, ние ќе одиме над некои ресурси кои CS50 обезбедува за вас.
Ние ќе одиме во текот Квиз 0 следниот, и Јас ќе одговори на сите прашања никого
има за одредени проблеми.
И тогаш, ние ќе се случува во текот на датотека I / O и проблемот поставени 5.
Оние последните две теми ќе се сочинуваат најголемиот дел од делот денес.
>> Ја ставив оваа листа секоја недела како потсетник за сите вас, но на основни
секција, имаме само 90 минути - ние не се во состојба да ги покрие сè што можам
би сакал да се покријат за вас момци.
Но ние имаме еден тон на ресурсите за можете да се осврне како можете да се запознаете
материјалот и работа преку вашиот проблем поставува.
>> Потсетник дека имам онлајн текст кутија, формиран за да се пополни ако
имате било какви повратни информации за мене, позитивни и
конструктивна, околу секција.
Дека рачно се наоѓа веднаш овде.
Затоа ве молам, земи еден момент ако имате било какви повратни информации, без оглед дали за време на секција,
или по, или откако ќе се види на видео онлајн, за да ми даде вашето мислење.
Јас навистина го цениме и сите од неа.
>> Па јас сум бил имаат мали разговори со многу од моите
студенти во текот на неделата - како јас рака назад квизови, зборувајќи за
Се разбира, гледајќи како правиш.
И една тема има излезе одново и над се зборува за - во
особено -
Проблемот поставува.
И јас се врзуваат таа тема на табла, токму сега.
>> Во суштина, постои разлика помеѓу вртење во нешто што е
направи правилно и нешто што е направено добро.
Повеќето луѓе се прави фантастична во однос на точноста -
5 или 4 за сите psets.
Повеќето луѓе се оние сите на време.
>> Сепак, само затоа што сте го направиле нешто во право, не значи сте
направи нешто како елегантно, или ефикасно, или како чисто како што
може да го направи.
И тоа е она што дизајн -
и во помал степен, стил -
оски се за.
Па јас сум се што туркање, и други TFS се врши притисок вас момци, не само возврат
во работи што се точни, но се претвори во работите кои се кодирани и.
>> Не прави непотребни за петелки, не recalculating променливи ако
вие не мора да се.
На пример, гледајќи назад на проблемот постави 4, при пласирањето на тули на
екран, секој ред - секој тула во дадена ред ги има истите y-координатата -
на иста висина координата.
>> Така што y-координата не треба да се се пресметува во внатрешноста на ентериер
вгнездени ЗА јамка дека најверојатно користи да се стави оние тули на екранот.
Тоа само треба да се пресметува секој време за да преминете ред, или
поместува надолу ред.
Така велат ако има 10 цигли во ред, секој тули може да ги имаат истите
y-координата, а тоа y-координата само може да се пресмета
еднаш за сите од нив.
>> Тоа не треба да се пресметува 10 времиња, ниту пак таа пресметка потреба
да се случи во конкретната повик на функција -
новиот gracked повик функција.
Значи, ако тоа беше малку збунувачки за вас, повеќе генерички, работите кои
не треба да се случи секој пат кога да одите преку ЗА јамка не треба да биде
стави во внатрешноста на ЗА јамка и не треба да се случуваат секој пат кога ќе одам
преку ЗА јамка.
>> Друг добар дизајн пример видовме во Недела 3 15, може да се задржи
ги пратите на нула.
Па кога ќе се иницијализира на одборот, може спаси - во една глобална променлива, можеби -
на x и y-координатата на нула.
И тогаш кога тебе -
во вашиот потег функција, секогаш кога ќе се направи успешна потег, ажурирање на
локацијата на нула.
>> Дека ќе те спаси од тоа да имаат да се направи вгнездени јамки за да се погледне преку
се качат во секое време во вашиот потег функција и да се најде на нула, или најдете плочка,
а потоа се провери што е до него.
Наместо тоа, мора локацијата на нула, можете само да се погледне над, под,
и на лево и десно од него, да се најде плочка сте биле барате.
>> Значи во однос на програмите сме пишување, тие никогаш не се доволно големи
дека некои од овие дизајн одлуки навистина се случува да го попречат вашиот
програма, или може да работи побавно, или можеби дури и снема меморија.
Но ние сме уште сте туркање момци да се напише како елегантен и
ефикасен код што е можно.
>> Значи, ако правиш заврши пишување работи кои имаат значително поголем
обем, тие ќе бидат напишани со добра дизајн во прилог на се точни.
Па голем број од вас имаат донесе тоа.
Тоа е нешто што го барате - нешто ние ќе продолжиме да
притисни вас момци натаму.
>> Ако некогаш имате било какви прашања во врска со дизајн на вашата програма, се чувствуваат слободни
да допрат до мене, и јас сум среќен за да прошетка низ вашата програма со тебе,
и се истакне некои од дизајн одлуки што го направи, и да ви даде некои
предлози за тоа како да се направи дури и подобар дизајн одлуки.
>> Па ние ќе да се движат на да зборуваме за Квиз 0.
Пред тоа го правиме, Дали некој имате било какви прашања во врска со она што
Сум покриен досега?
>> [Шушкава БУЧАВА]
>> ЈАСОН Hirschhorn: Седум секунди.
OK.
Ајде да зборуваме за Квиз 0 за малку.
Повеќето од вас имаат вашите Квиз 0 мрежа.
Ако не, се надевам ќе се сеќава на него малку.
Но, ако сте ги направиле Квиз 0, тогаш ќе исто така имаат пристап до PDF онлајн во
примерокот решенија.
>> Дали некој има било какви прашања пред ние фрламе во материјалот на недела за
посебен проблем на Квиз 0 -
зошто одговорот е што е тоа?
Дали некој збунети околу нешто?
Дури и ако имаш проблем во право, но само би сакал мене да го објаснам малку
повеќе, јас сум среќен да го направи тоа сега.
>> Па сум ги распрашувала вие момци да се подготвени со некои
мисли за Квиз 0.
Па кој би сакале да ни се започна со прашање или
коментира за Квиз 0?
>> [Хартија шушкава]
>> ЈАСОН Hirschhorn: Не секој направи совршено.
Па знам [се смее]
таму треба да биде некои прашања за Квиз 0.
OK.
Да.
Ompica.
>> OMPICA: Број 10.
>> ЈАСОН Hirschhorn: Број 10.
Кои едната беше број 10?
>> OMPICA: На -
>> ЈАСОН Hirschhorn: Јас haven't -
>> OMPICA: На вклучуваат -
>> ЈАСОН Hirschhorn: Број 10 беше осум на i - пишување осум до јас?
>> OMPICA: Да.
>> ЈАСОН Hirschhorn: OK.
Значи уште една прашање што би можеле да имаат праша беше јас видовити?
Одговорот е да.
Во делот пред квиз, го прашав вие момци да кодот двете Стерлинг и
осум до i.
Двете од нив се случи да се појави на квизот.
Па се надевам дека, сте платиле внимание на тоа.
>> И ако сте имале, тогаш вие ќе треба веројатно направи добро на оние двајца.
Но осум до јас, ние всушност не код во класа, но тоа беше, повторно,
праша на квизот.
Па неколку работи кои треба да се земе се забележи кога кодирање осум до i.
Првото нешто, по прашањето, беше дека е потребно да се провери ако стрингот
е еднаква на нула.
>> Неколку луѓе се обидоа да се провери подоцна во програмата, доколку е заградата бев -
па специфичен карактер во кои низа - е еднаква на нула.
Но запомнете, дека нула е во суштина - тоа е добро да се мисли на
нула како нула покажувачот - покажувач на нула -
некаде во меморијата каде што никогаш не можете да пристапите.
>> Па ако нешто е еднаква на нула, ќе знаат дека тоа не е иницијализиран,
или таму нема ништо.
Па и не е знак ѕвезда, S заградата јас е знак.
Па тоа го прави смисла да се споредува s до нула, но не и заградата i за ништовни.
Но, повторно - така што беше првото нешто дека требаше да се направи -
проверете, за да бидете сигурни дека всушност добив вистински стринг.
>> Следно, ќе сакаше да оди преку секој лик во низа.
И така тоа ќе биде како на заградата Јас, на пример, ако јас ти е iterator.
И да ги преземат тој лик, и добие својата вистинска вредност.
Вие сте го чуваат како знак, но вредност ASCII за нула -
нула како лик -
всушност и не е цел број нула.
Тоа е некој друг број, кој може да се гледам нагоре во ASCII табелата.
>> Значи еден од начините да се поправи за тоа - веројатно најдобар начин да се поправи
дека - е да одземе од него ликот вредност -
нула како лик.
Значи минус една понуда, нула, уште една понуда.
Која ќе земе она број кој го имате како знак, и да го еднаква на
бројот како вистински број.
>> И тоа е многу слична на пристап многу луѓе се во
проблем во собата 2, со Цезар и Viginere -
оние шифри, кога ќе беа ги врти.
Значи откако ќе го имате како број од нула до девет, а потоа - во зависност од
каде оди во крајна број - што треба да го усоврши
со сила на 10.
>> Некои луѓе се пресели од назад кон пред, и множи на поединецот
број од силата на 10.
Некои луѓе се пресели од пред да се врати -
и така се на највисоко со цел броеви првиот -
и ќе се спаси оние во глобалната контра променлива.
А потоа секој пат преку ЗА јамка, множете се дека гигант глобалната
се спротивстави на променлива со 10, да се направи простор за следниот знак.
>> Така што беше малку збунувачки, без мене тоа пишување на табла.
Но растворот на мострата е на располагање на вас.
Но тоа беа големи работи ние го барате.
Исто така провери да бидете сигурни дека секој индивидуален карактер беше навистина
карактер помеѓу нула и девет, и не некои други карактер, како А,
на пример.
>> Тоа беа работи што бараа во тоа прашање.
Дали тоа одговори на вашето прашање?
>> OMPICA: Да.
>> ЈАСОН Hirschhorn: OK.
Дали постојат било какви други прашања за Квиз 0?
Што е со составувањето?
Сите составувањето нели?
Бр.
Имаше -
[Се смее]
Било какви прашања во врска со компилација процес?
Wow.
>> [Хартија шушкава]
>> ЈАСОН Hirschhorn: Да.
Мајкл.
>> Мајкл: Дали е број 7 - случаен?
>> ЈАСОН Hirschhorn: Број 7.
Број 7 беше добие случаен цел број.
Одличен.
Значи ти си даде цел број еден и цел број b, и дека сакате случаен
цел број помеѓу a и b.
Ние всушност може да ја напишам оваа една на одборот, бидејќи ова
беше една линија од код -
еден начин да го направи тоа.
>> Па ние сме даден drand како функција што може да се користи.
И она што не drand -
претпоставувајќи дека е се носителка -
што значи drand врати?
>> Мајкл: А плови помеѓу 0.0 и 1.0.
>> ЈАСОН Hirschhorn: Голем број - Да.
A број помеѓу 0 и 1.
И така имаме б и.
А потоа ние имаме случаен број помеѓу 0 и 1 што ни се дава од страна на drand.
Некои луѓе се обидоа да се стави б, или б минус а, или нешто во оние
загради.
Тоа би значело дека тие се аргументи на оваа функција.
>> drand не презема никакви аргументи - како getString не
Не ги преземат сите аргументи.
Па тоа е само отворен paren, во близина paren - и дека, сама по себе, е
на повик на функција.
И кој ви дава голем број помеѓу 0 и 1.
Се разбира, ние имаме цела низа дека бројот може да биде внатре
>> Каже, ако b е 10 и е 5, ние навистина сакаат број со опсег од 5.
Па следниот нешто што ние треба да направите е да размножуваат ова со опсег b минус.
Значи под претпоставка дека е множат.
И тоа ќе ни даде голем број рамките на даден опсег.
И дека одредени фреквенции да биде разликата помеѓу б минус.
>> И конечно, тоа ќе само да го даде од - велат дека се движи помеѓу б минус
е 5, што ќе ни даде број од 0 до 5.
Но, ако е во фактот 5, ние треба да ги зајакне овој опсег до каде тоа е
всушност, би требало да биде, со додавање на.
Така што се добива на логиката право.
И тогаш, ќе имате друго прашање?
>> Мајкл: Не
Јас само се чувствувам навистина неми токму сега.
[Се смее]
>> ЈАСОН Hirschhorn: Не
Не се чувствувам навистина неми.
Голем број на луѓе се бореше со ова прашање.
И тогаш, друго прашање е, drand, што рече ти, ти дава плови -
враќа плови.
Но оваа функција всушност праша за цел број да бидат вратени.
>> Вие не треба да го дадат ова експлицитно цел број, бидејќи овие
операции ќе го третираат како сите на плови - како децимален број.
Вака волја - дури и ако тоа е цел број, тоа ќе
се множи правилно.
Сите множење ќе работат.
Вие не треба да го дадат тука.
Всушност, вие не треба да го дадат.
>> Тоа би -
ако би фрли број дека е помеѓу 0 и 1 -
случаен број, со подвижна запирка -
тогаш или ќе биде само 0 или 1, така што ќе изгубите сето тоа прецизност.
Но, на крајот, кога ќе се вратат, тој автоматски добива
испратен назад како цел број.
Значи, вие не треба да се направи дека кастинг себе.
>> Така што ова беше одговорот на тоа прашање, број 7.
Било какви други прашања на Квиз 0?
Да, Ени.
>> ANNIE: Кога ние ги користиме рекурзивен -
кога ние ги користиме итеративен петелки?
>> ЈАСОН Hirschhorn: Кога го користите рекурзивен - така поопшто,
добрите и лошите страни на рекурзијата наспроти итеративен пристап.
Некој може да понуди про или един?
Ве молам?
Не може никого.
Кои можат да понудат про или един?
>> [Хартија шушкава]
>> СТУДЕНТСКИ 1: Рекурзивни е помалку кодирање - помалку пишување?
>> ЈАСОН Hirschhorn: Значи генерално, рекурзија особено, функција -
или алгоритам како логирате вид - кој помага на самата
да рекурзивен пристап -
може да биде повеќе јасна да кодот рекурзивно.
И само го направи повеќе смисла да го стори тоа рекурзивно.
Така што ќе биде про да рекурзија.
Другите?
Да?
>> СТУДЕНТСКИ 2: Con да рекурзија -
Таа користи повеќе меморија.
>> ЈАСОН Hirschhorn: Значи точно во право.
Рекурзивна функција ќе го задржи додавање на магацинот рамки на магацинот.
Значи, ако сте работат на многу броеви, и треба да се јавите на овој
функционираат многу, а потоа сигурно ќе заземаат повеќе меморија, додека
итеративен пристап само ќе се стави еден магацинот рамка на оџакот, бидејќи
сето тоа се случува во рамките на една функција.
>> Било која друга добрите и лошите страни?
Да.
>> СТУДЕНТСКИ 3: Добрите за рекурзија.
Вие не треба да се утврди во унапредат колку пати
кодот мораше да се повтори.
Ќе може да има однапред број на пати поголема од таа што треба да iterate, тогаш
рекурзијата е подобро, затоа што е потребно тој резултат.
>> ЈАСОН Hirschhorn: Мислам дека тоа е вистина.
Но, мислам дека и во двата случаи Ти никогаш не би -
најверојатно ќе добие некои влез од корисникот.
Или оваа функција ќе има некои влез кои ќе се утврди колку пати
треба да се кандидира.
Значи генерално, вие не би тешко код - дури и во итеративен пристап - како
многу пати, што јамка треба да се кандидира.
>> Дали имаш друг сте биле размислува за, Ени?
OK.
Значи тоа се веројатно две -
најголем про и најголем един да рекурзивен наспроти
итеративен пристап.
OK.
Било што друго на Квиз 0?
>> Ајде да се движат натаму.
Датотека I / O. Има прекрасен краток оваа недела на датотека I / O кои се надевам дека
сте ги гледавме повеќе времиња, и се восхитуваат.
А многу работа замина во тоа, и јас сум Слушнав дека е нездраво корисни.
Јас, исто така се вклучени линк на овој слајд, во случај да не сте имале
шанса да се види 10 пати.
>> Значи, ние ќе се обидеме во кратки црти да одиме во текот на главни чекори за отворање и работа
со датотеки, а потоа ние ќе се нурне во кодирање проблем пред
испитување на проблемот во собата.
Значи, повторно, јас ќе одам да се стави ова горе на на екранот, но јас ќе одам да се зборува за
само една минута за тоа што ние сме овде со датотека I/O--
што значи тоа?
>> Тоа значи дека можеме да креираме наш програми, а потоа имаат нашите програми
излез, и не дадоа никакви влијание врз светот надвор од нашата програма.
Но, кога ќе почне да работи со датотеки - и двајцата читање и креирање на
нив - може да имаме некаков ефект на свет надвор од нашата програма.
>> Исто како ако Microsoft Word не беше во можност да се направи било Word документи, а потоа
еднаш на Microsoft Word престанам, сите ваши работа ќе се качил, и тоа ќе
навистина се бескорисни.
Ние го правиме на крајот сакаат да бидат во можност да пишуваат програми кои можат да влијаат на
светот околу нив, и со преземање на комплекс влезови - во смисла на датотеки и
преку додадени фајлови, а исто така создавање на интересни и релевантни резултати -
во однос на различни типови на датотеки.
>> Па тоа е причината зошто ние се почнуваат да се научат како да работат со датотеки.
Попрецизно, кои што го правиме е како што следува.
Тоа е многу едноставна.
Постојат само неколку чекори, и тие се наведени тука на овој код.
Па ние ќе да поминат низ оваа кодот линија по линија.
>> Прво, да се види истакна -
кога си работат со датотека, без оглед на типот на датотека е тоа,
што треба да го отворите.
А тоа е со повик за fopen -
токму тука.
Можете да ги содржи името на датотеката.
Ако датотеката не е во вашиот именик, или папката каде што оваа програма
живот, тогаш исто така ќе треба да се вклучат патот до местото каде што датотеката е.
>> Ние ќе се претпостави дека ова датотека наречена "text.txt" -
едноставен текст документ - е во истата папка како оваа програма е.
Па тоа е друга работа да се задржи во ум - дека ако сакате да отворите датотека
некаде на друго место, вие всушност треба да се вклучат нејзината локација.
>> Второ, можете да помине аргумент за fopen, и тоа е она што сакате да го направите
со датотеката.
Постојат три главни аргументи дека сте ќе треба да помине за да fopen.
Кој може да ми даде на оние три?
Кој може да ми даде еден од нив?
Да.
>> СТУДЕНТСКИ 4: Името на датотеката?
>> ЈАСОН Hirschhorn: Извини.
Три главни аргументи може да го положат како втор аргумент за fopen.
Во право си - името на датотеката е првиот аргумент.
Но вториот аргумент за fopen се генерално три жици, и - да.
Aleja.
>> Aleja: A за додавај.
>> ЈАСОН Hirschhorn: А, ако сакате да додадете на датотека која веќе постои.
>> СТУДЕНТСКИ 5: R за читање.
>> ЈАСОН Hirschhorn: A, ако сакаат да читаат од датотека.
>> СТУДЕНТСКИ 6: W за запишување.
>> ЈАСОН Hirschhorn: И W, ако сакате да запишам во датотеката.
Значи во овој случај, ние сме пишување до датотеката, па ние имаме w.
Ќе го отворите, исто така, треба да се спаси поднесе некаде, и тоа е со
кодот на левата страна на операторот за доделување на -
Јас сум создавање на покажувач кон датотека нарекува, во овој случај, на датотеката.
>> Ние не се случува да се грижите што сето ова капи СЛИКА работа е.
Доволно е да се каже, тоа е долга прилив на оние кои и нули.
А тоа е како ние ќе се работат тоа и да го разбере тоа.
>> Следното нешто што треба да направите - и ова е неверојатно важно -
секогаш кога ќе отворите датотека -
Всушност, секогаш кога ќе се јавите Примерок за пример, и да добијат некои меморија и да се обиде
и го зачувате во покажувач, секогаш сакате да се провери да бидете сигурни дека
функција не се врати нула.
>> Значи во овој случај, ние сме проверка за да бидете сигурни дека ние всушност го отвори
поднесе правилно, и имаше грешка во нашата програма.
Следно, откако ќе Сум проверил за да бидете сигурни дека дека имаме работа датотека, може да
пишете, или да прочитате од, или додадете на датотека.
Во овој случај, јас сум едноставно печатење една линија со оваа податотека.
>> Како да знам тоа?
Па, јас сум со користење на оваа функција наречен fprintf.
Сите функции ќе биде со користење на кога пишувате, или читање од, или
манипулацијата со датотеките ќе бидат слични на функции што сте виделе досега, но
започнете со писмо F, стои за датотека.
И fprintf, за разлика од нашата нормална печатење стан, зема една дополнителен аргумент,
а тоа е датотеката каде што ќе сакате да печатите оваа линија да.
>> Јас немам ништо да правото на ohai.
Јас немам третиот аргумент за printf -
или на вториот аргумент на printf, на Третиот аргумент да fprintf, затоа што
немаат никакви променливи тука.
Јас не сум вклучувајќи ги и сите променливи.
Но, повторно, fprintf и сите на овие датотеки функции кои работат со датотеки
обично се случува да треба на датотеката на кој тие си работат.
>> Конечно, последната важна работа да се направите е да се затвори датотеката, исто како и
со - кога ние Примерок нешто, ние сакаме да се ослободи нешто, да не ги
имаат меморија течење - сакаме да ги затвориме нашите датотека.
Ако оваа програма постоеле без затворање датотеката, шансите се ништо не би одат
во ред, особено ако тоа е мал фајл.
>> Но тоа е секако добра кодирање стил и пракса секогаш да ја затворите вашата датотека
кога ќе завршиш негово користење.
Па тоа е основата на датотека I / O. Веројатно сте виделе дека пред, или
гледав во таа фантастична кратко.
Дали некој има било какви прашања, пред одиме во некои пракса кодирање
проблеми, за датотека I / O или чекори што јас само отиде во текот?
>> [Пишување звучи]
>> ЈАСОН Hirschhorn: Дали имате некое прашање, Ави?
>> AVI: Не
>> ЈАСОН Hirschhorn: OK.
Одам да се почека уште седум секунди.
[Се смее]
Тоа е навистина добар совет.
Вие момци само не ми се допаѓа поставување прашања.
Тоа е во ред.
OK.
Значи нашиот прв пракса проблемот е, ние сме ќе се дуплираат функција на
командната линија алатка која можете веројатно користи пред - копија -
копија алатка.
Ако го напишете ср а потоа да го давате два аргументи во вашиот терминал, можете да
копирате датотека.
И тоа е она што се случува да се напише во моментов.
>> Значи, повторно, читање исклучување на овој слајд, јас би можете да се напише програма која зема
два и само два командната линија аргументи -
изворна датотека и дестинација датотека -
и копии од содржината на извор поднесе до дестинацијата датотека
еден бајт во исто време.
Па тоа е многу да се побара.
>> Повторно, добар пристап на ова е да се не одат директно на C код, но
скрши го надолу во неколку чекори.
Прво, мислам за логиката - токму она што јас сум те прашам да се направи -
и да се разбереме сите на чекори на овој проблем.
Не во C, само во некои pseudocode, или дури и ментална модел на
што се случува.
>> Следно, штом еднаш ќе имаат pseudocode надолу, дознаам како pseudocode
мапи врз алатки и нешта ние сме научив да се користи во C.
>> И, конечно, еднаш имаш сето тоа заедно, можете да го кодот на проблемот.
Земете 5 до 10 минути за да се работат на овој проблем.
Јас ќе се стави на инструкции назад во секунда.
А потоа ние ќе одиме во текот на pseudocode, и кодот
го живеат како група.
>> Ако имате било какви прашања, додека сте работат на ова, се чувствуваат слободни да се подигне
вашата рака, и ќе дојдам наоколу и да одговори на нив.
>> СТУДЕНТСКИ 7: Може ли удар парче хартија?
>> ЈАСОН Hirschhorn: Што ти е?
>> [Пишување звучи]
>> ЈАСОН Hirschhorn: OK.
Ајде да одиме во текот на pseudocode прво, и тогаш јас ќе ти дадам уште неколку
минути за да заврши кодирање.
>> Кои би сакале да ми да започнете со првата линија на
pseudocode за оваа функција?
>> СТУДЕНТСКИ 8: Проверете за да бидете сигурни дека сте биле дадени две датотеки.
>> ЈАСОН Hirschhorn: OK.
И ако ние не сме?
>> СТУДЕНТСКИ 8: Би се вратил 0.
>> ЈАСОН Hirschhorn: Треба ли да се врати 0?
>> СТУДЕНТСКИ 8: Врати -
бришење.
Жал.
>> ЈАСОН Hirschhorn: Да.
Веројатно не 0.
Затоа 0 значи сè беше добро.
OK.
Па тоа е на првата линија на pseudocode.
Кој има втора линија на pseudocode?
>> СТУДЕНТСКИ 9: Отворен двете датотеки?
>> ЈАСОН Hirschhorn: Отворете двете датотеки.
Во ред?
>> СТУДЕНТСКИ 10: Проверете за да ја видите ако датотеката е NULL?
>> ЈАСОН Hirschhorn: Проверете сигурни ни се ништовни.
Како настрана -
намали на 0 -
е дека NULL?
>> СТУДЕНТСКИ 11: Не
>> ЈАСОН Hirschhorn: Тоа не е NULL.
Кој е наречен NULL терминатор.
Тоа е всушност напишано со само една л.
Па проверка на нешто против тоа - Тоа е всушност карактер -
па проверка на нешто против што се не е исто како проверка за да види дали таа
еднакво NULL.
>> А некои луѓе -
на нивните тестови и нивниот проблем поставува - доби
две од овие збунети.
Но двете од нив се всушност различни.
Еден завршува низа -
еден е покажувач на 0.
>> СТУДЕНТСКИ 12: Зошто не би се провери да се бидете сигурни дека датотеки не се NULL
пред да ги отвори?
>> ЈАСОН Hirschhorn: Значи отворен заштедува нешто во таа датотека.
И ако се вратиме тука -
па оваа линија - fopen -
ќе ви даде адресата и продавница таа адреса во датотека, ако таа работи.
Ако тоа не функционира, тоа ќе ги чува NULL -
>> СТУДЕНТСКИ 12: О.
OK.
Те.
>> ЈАСОН Hirschhorn: Во датотека.
Па не можете да се провери за NULL пред сте ги отвори.
NULL значи нешто не работи коректно.
OK.
Па провери да бидете сигурни дека ниту е тоа?
Или се?
Што мислите?
Ќе одиме со тоа.
>> СТУДЕНТСКИ 13: Дали е.
>> ЈАСОН Hirschhorn: Дали?
Ниту е?
>> СТУДЕНТСКИ 13: Дали е.
>> ЈАСОН Hirschhorn: OK.
Ние се чини дека има некои консензус за тоа.
Ниту е NULL.
Добро, следната линија на pseudocode.
Кој не ми даде линија сеуште?
Ќе чекаме за вас.
Да.
>> СТУДЕНТСКИ 14: Мора да се прочита од првиот датотека?
>> ЈАСОН Hirschhorn: OK.
>> СТУДЕНТСКИ 14: Или ние ги користиме fscanf или нешто слично на првата датотека?
>> ЈАСОН Hirschhorn: Значи ние сакаме да читаат од првата датотека и -
ајде да се стави дека во право тука.
Чита од изворниот фајл.
И тогаш, што ќе правиме откако ќе чита од изворниот фајл?
Некој друг?
>> СТУДЕНТСКИ 15: Напиши во дестинација датотека?
>> ЈАСОН Hirschhorn: Ние пишуваме да одредишната датотека, и -
OK.
Што друго се што недостасува?
Некој друг кој не ми даде линија код уште - на pseudocode.
Да.
>> СТУДЕНТСКИ 16: Можеби секогаш можете да проверите дали има нешто да се прочита за,
како на следната линија?
Кои се како на следната линија, види дали таа постои.
>> [Електронска ѕвонче]
>> ЈАСОН Hirschhorn: Упс.
Тоа е мојот journaling софтвер.
Да?
>> СТУДЕНТСКИ 16: Да.
>> ЈАСОН Hirschhorn: Па им даде тоа за мене уште еднаш.
>> СТУДЕНТСКИ 16: Проверете дали има уште следната линија од
изворна датотека за читање.
>> ЈАСОН Hirschhorn: OK.
Па ние не читаш линии - беа читање бајти тука -
но ти си точно.
Ние сакаме да читаат и пишуваат додека нема повеќе бајти.
OK.
И така тие навистина треба да биде вовлечен малку, затоа што тие се под таму.
Нели?
Додека ние сме надвор од бајти, ние ќе чита од изворниот фајл и да пишува
до дестинацијата датотека.
>> И тогаш, што е последен линија на pseudocode?
Некој кој не е даден мене уште нешто.
>> СТУДЕНТСКИ 17: Затвори датотеки?
>> ЈАСОН Hirschhorn: Токму така.
Затвори датотеки.
Па таму е нашата pseudocode.
Одам да се стави на pseudocode во gedit, а во неколку минути ние
ќе кодот ова заедно.
>> OK.
Дозволете ни да започнете како група.
Nishant, имам нова датотека.
Јас сум само отвори ова.
Untitled Document 1.
Што е првото нешто што треба да направам?
>> Nishant: Вклучете библиотеки?
>> ЈАСОН Hirschhorn: OK.
Што библиотеки?
>> Nishant: Stdio.h, stdlib.h, верувам?
>> ЈАСОН Hirschhorn: OK.
Што е stdlib за?
>> Nishant: Заборавив.
>> ЈАСОН Hirschhorn: OK.
Така вклучуваат stdio.
Што треба да направам, дури и пред Јас на проектот за кодирање?
>> Nishant: Напишете заглавието?
>> ЈАСОН Hirschhorn: Како можам да добијам тоа обоени?
>> [Ставање ГЛАСОВИ]
>> Nishant: Како да го добиете боја?
>> ЈАСОН Hirschhorn: Како можам боја кодирање?
>> Nishant: Не знам.
Ох.
Спаси.
>> ЈАСОН Hirschhorn: зачувајте.
Да.
Јас треба да го зачувате како. В.
Па го зачувате на работната површина како cp.c.
Слатка.
И ако сакам да се добие целосна стил поени, што треба да
вклучуваат на врвот?
>> Nishant: Можете да напишете вашето име, името на програмата, а целта
на програмата, како?
>> ЈАСОН Hirschhorn: Изгледа добро.
Одличен.
Значи сте ни го започна натпреварот совршено.
# Include -
ние, исто така, ќе пишувам -
OK.
Па мислам дека јас сум сите во собата да одам.
Кој има првата линија на кодот за мене - или првиот линии на код кој
ќе биде потребно да ги задоволи нашите први коментира во pseudocode?
Вас.
>> СТУДЕНТСКИ 18: Не треба да биде int argc, а потоа char * argv?
>> ЈАСОН Hirschhorn: Мислам дека во право си.
Да ги смениме до int главната, отворен paren, int argc, запирка, char * argv?
Како тоа?
>> СТУДЕНТСКИ 18: голема заграда.
>> ЈАСОН Hirschhorn: Голема заграда.
Отворена заграда, блиску заграда, блиску родител.
Совршена.
Сега може да се земе од командната линија аргументи.
OK.
Се обезбеди ние сме дадени две датотеки.
Може да ми даде тоа како добро.
>> СТУДЕНТСКИ 18: Ако argc -
ова не е еднаква на 3.
>> ЈАСОН Hirschhorn: Ако отворен paren argc не еднакви 3?
>> СТУДЕНТСКИ 18: Да, ќе се врати 1 или ништо.
>> ЈАСОН Hirschhorn: Извини.
>> СТУДЕНТСКИ 18: Враќање 1 или ништо.
>> ЈАСОН Hirschhorn: Враќање 1.
Во ред?
Одлично.
Отвори и датотеки.
Кој може да ми помогне да се отвори и датотеки?
Кој не ми даде код уште?
Курт?
>> Курт: Па сите капи F-I-Л-Е ѕвезда извор.
>> ЈАСОН Hirschhorn: Одам да извадиш самогласки.
Оние кои се кул.
Тоа е како Tumblr.
>> СТУДЕНТСКИ 18: еднакво fopen -
>> ЈАСОН Hirschhorn: еднакво fopen?
>> СТУДЕНТСКИ 18: Отворен paren, argv, отворен заграда.
>> ЈАСОН Hirschhorn: Чекај.
Жал.
Отворен paren.
OK.
>> СТУДЕНТСКИ 18: Да.
Argv под 1.
>> ЈАСОН Hirschhorn: Под 1?
>> СТУДЕНТСКИ 18: Да.
Argv отворен заградата 1 -
Да.
А потоа запирка, а потоа отворете двојно понуда, Р наводници,
блиску paren, точка-запирка.
>> ЈАСОН Hirschhorn: Слатка.
А што е со другиот?
>> СТУДЕНТСКИ 18: Многу слично, но наместо тоа, на С-Р-Ц, ќе го наречеме D-С-Т.
>> ЈАСОН Hirschhorn: Oo!
Ми се допаѓа тоа.
>> СТУДЕНТСКИ 18: Само Д-С-Т. Да.
А потоа argv, отворен заградата, 2.
Да.
А потоа W наместо r.
Да.
>> ЈАСОН Hirschhorn: Велики.
Следните неколку линии.
Исто така, ако некој има работи кои треба да додадете во линии кои ние го направивме, се чувствуваат слободни да
додадете оние како добро.
Проверете, за да бидете сигурни дека ниту е NULL.
Кој може да ми даде код јас треба да задоволи таа линија на pseudocode?
Стрелец.
>> ARCHER: Ако src еднаква на еднаквите NULL или DST еднаква на еднаквите
NULL, а потоа ќе се врати -
>> ЈАСОН Hirschhorn: Што?
>> ARCHER: Враќање 2?
>> ЈАСОН Hirschhorn: Враќање 2.
Значи, ако отворена paren src еднаква на еднакво NULL, или -
што и да thing's - цевка?
Цевка?
Ние ќе го наречеме цевка.
Цевка, цевка, DST еднаква на еднаквите NULL, врати 2.
Во ред?
Додека ние сме надвор од бајти -
ние вид на прескокнат во текот на овој чекор од на pseudocode дел да оди, кликнете овде.
>> Но, сè додека ние сме надвор од бајти - она што го прави тоа звучи како?
Каков вид на C структура -
но јас не го користат зборот структура, бидејќи ние се случува да започнат со користење на
дека во други случаи -
но C алатка Дали тоа звучи како?
>> СТУДЕНТСКИ 19: јамка.
>> ЈАСОН Hirschhorn: јамка.
Звучи како јамка.
Па кој може да ми даде првата линија од циклусот код токму тука?
Можете исто така да изберете што вид на јамка сакате, ако ми дадеш
оваа линија код.
Постојат три вида.
Можеш да одбереш.
Јас би предложиле еден од нив.
AVI.
Кои една сакаш?
>> Ави: ЗА.
>> ЈАСОН Hirschhorn: ЗА.
>> Ави: int i е еднаква на нула.
>> ЈАСОН Hirschhorn: OK.
>> Ави: Овој дел не сум сигурен за.
Но јас е помал од големината на ѕвезда извор?
Не сум сигурен за тоа.
>> ЈАСОН Hirschhorn: OK.
>> Ави: Бидејќи сакате големина на датотека, нели?
>> ЈАСОН Hirschhorn: Значи ова веројатно нема ни даде големината на актуелните
поднесе во бајти.
Па што друго би можеле да правиме?
Што е друг вид на јамка?
Или ние треба да се држиме со за телефонска линија?
>> СТУДЕНТСКИ 20: Може ли да се направи додека јамка?
И тогаш, што би направите е you'd -
бидејќи имаме char * за датотеката.
Значи, ако ние само задржи зголемување, што додека ние би ги најдете на NULL карактер
на крајот од него?
Или не, е дека не е како датотеки дело?
>> ЈАСОН Hirschhorn: Значи можеме да ги одржуваме ја зголемува бројката char *
додека ние се најде на NULL -
>> СТУДЕНТСКИ 20: Во суштина продолжувам да одам карактер по карактер, додека ние хит
на крајот на датотеката.
>> ЈАСОН Hirschhorn: Да.
Значи тоа е она што ние сакаме да се направи.
Ние сакаме да се задржи читање, карактер карактер, додека ние да се
на крајот на датотеката.
>> СТУДЕНТСКИ 20: Да.
Најди -
она што е на крајот или стоп знак на крајот од текстуална датотека.
>> ЈАСОН Hirschhorn: OK.
Па кога ќе дојде до крајот на датотеката - како да знаеме што сме достигна
на крајот на датотеката?
Ако јас го повикувам -
па ајде чекор назад.
Што е функција?
Ајде да одиме во оваа линија, токму тука.
Чита од изворниот фајл.
Кој може да ми даде таа линија на кодот?
>> СТУДЕНТСКИ 21: Fscanf?
>> ЈАСОН Hirschhorn: Fscanf.
OK.
Што ако сакам да се чита, многу Поточно, еден бајт?
>> СТУДЕНТСКИ 21: Не знам.
>> ЈАСОН Hirschhorn: OK.
Дури и поедноставно отколку fscanf - она ​​што е -
Сакам да се прочита од изворна датотека?
Читаат од изворна датотека.
Што е во функција - Да.
>> СТУДЕНТСКИ 22: Тоа е fread?
>> ЈАСОН Hirschhorn: fread.
Мислам да се држиме со дека една сега за сега.
Каков вид на аргументи се fread земам?
>> СТУДЕНТСКИ 22: Веројатно типот на датотека, а потоа локација во датотека?
>> ЈАСОН Hirschhorn: Што можам да напишеш тука да дознаам каков тип на аргументи
fread потребно?
>> ПОВЕЌЕ СТУДЕНТИ: Човекот fread.
>> ЈАСОН Hirschhorn: Човекот fread и запишување.
Изгледа како тие закачам заедно.
Па fread зема колку аргументи?
>> СТУДЕНТСКИ 23: Четири.
>> ЈАСОН Hirschhorn: Таа зема четири аргументи.
Таа ги зема покажувач, големина, и дека работа, што е чудно, а некои датотека.
Во ред?
Ајде да прочитате за тоа во право тука.
"Функцијата fread чита N memb елементи на податоци, секоја големина бајти
долго, од потокот посочи од страна на поток, чување нив на местото
дадена од страна на покажувач. "
>> Значи четири аргументи.
Зошто не можам само да ја копирате оваа, и ставете го во право тука.
OK.
Па кој може да започне пополнување овие аргументи за мене?
AVI.
>> Ави: Извадете празнината.
Стави само src.
Извади покажувач и ѕвездата.
Стави src.
Тогаш -
>> ЈАСОН Hirschhorn: Значи, ќе одам да се запре сте таму, бидејќи тоа е неточно.
Во право си со src, но каде src треба да одат?
>> [Ставање ГЛАСОВИ]
>> ЈАСОН Hirschhorn: Требаше одат овде.
Тоа е СРЦ - нашиот src е тип.
Да ги погледнеме тука.
Ова се прашува за тип на датотека *, ние всушност обично ги видите како тоа.
Па ова бара аргумент на тип на датотека * наречена поток кој е src.
Во ред?
>> Што големина на нештата ние сакаме да се чита?
Ви дадов ова во опис на проблемот.
>> СТУДЕНТСКИ 24: Еден бајт во еден момент.
>> ЈАСОН Hirschhorn: Еден бајт.
Колкава е бајт?
Нејзината големина е во бајти, па што можам да се стави таму?
>> СТУДЕНТСКИ 25: Еден.
>> ЈАСОН Hirschhorn: Еден.
Во право.
Нејзината големина е во единица бајт, така 1 е 1 бајти.
Колку сакам да го прочитате во исто време.
>> СТУДЕНТСКИ 26: Еден?
>> ЈАСОН Hirschhorn: Едно нешто.
Сакам да го прочитате една работа на големина 1, еден залак во исто време.
И каде можам да го стави, еднаш јас го чита?
>> СТУДЕНТСКИ 27: Дестинација?
>> ЈАСОН Hirschhorn: Па јас не може да се стави тоа директно во целта.
>> СТУДЕНТСКИ 28: Ти ќе стави тоа во трета покажувач?
>> СТУДЕНТСКИ 27: до целта.
>> ЈАСОН Hirschhorn: OK.
Да.
>> СТУДЕНТСКИ 29: Можете да изјави нешто да дејствува како привремено чување порано.
>> ЈАСОН Hirschhorn: OK.
Дај ми го тоа.
>> СТУДЕНТСКИ 29: Уште еден фајл покажувач, можеби?
>> ЈАСОН Hirschhorn: OK.
Значи ова не е правосилен ѕвезда -
тоа е еден вид празнина ѕвезда, така што не мора да биде датотека покажувач.
И ако читам еден бајт, каде ќе биде добро место
за да ја запази еден бајт?
>> СТУДЕНТСКИ 29: Низа?
>> ЈАСОН Hirschhorn: низа.
OK.
И што друго е нешто што е само големина еден бајт?
>> СТУДЕНТСКИ 30: А char *?
>> СТУДЕНТСКИ 29: Да.
>> ЈАСОН Hirschhorn: А char * не е еден бајт.
>> СТУДЕНТСКИ 29: А знак.
>> ЈАСОН Hirschhorn: А знак е еден бајт.
Нели?
Така да ја наречеме оваа тампон е генерички име што се користи за овие работи кои треба да се сместат
нешто привремено.
Па јас создаде тампон.
Нели?
Но тоа не се празнина *.
Па можеби вие сте во право, дека тоа треба да биде тампон големина 0.
Па тоа продавници еден -
во право.
>> Бидејќи ова право тука - знак тампон е лик, но
ова се неважечки * -
покажувач.
Па можев да го направи ова и сега пуфер е покажувач.
Што друго можев да направам?
>> СТУДЕНТСКИ 31: Ставете ѕвезда до знак.
>> ЈАСОН Hirschhorn: можев направивме тоа char *.
OK.
Што е уште нешто што можев да направам?
Или да одиме со оваа.
Char * тампон, па што да го ставам тука?
>> СТУДЕНТСКИ 31: тампон.
>> ЈАСОН Hirschhorn: тампон.
Тампон е покажувач кон знак.
И во таа локација, ние сме ставање еден бајт на нешто што сте ги прочитале.
Да.
AVI.
>> Ави: Само брз прашање.
Дали сакате да Примерок тампон?
>> ЈАСОН Hirschhorn: Кој може да одговори на тоа прашање?
>> СТУДЕНТСКИ 32: Па, тоа не е навистина точка за ништо во моментов, така -
>> ЈАСОН Hirschhorn: Но, дали ние сакаме да го Примерок?
>> СТУДЕНТСКИ 32: Ако сте биле за да го направи тоа начин, претпоставувам, да, бидејќи ќе треба
некое место за тоа да укаже.
>> ЈАСОН Hirschhorn: Дали ние мора да го Примерок?
>> СТУДЕНТСКИ 33: Ако си оди за да го користите надвор од јамка.
>> ЈАСОН Hirschhorn: Дали ние ќе го користите надвор од јамка?
>> СТУДЕНТСКИ 34: Да.
>> СТУДЕНТСКИ 35: Чекај.
Сакаме да ја прогласи во јамка да се надвор?
>> ЈАСОН Hirschhorn: Па претпоставувам дека имаме некои псевдо додека јамка тука дека ние сме
се обидувам да дознаам, дека ние не сме добиле на уште.
Ние не треба да го Примерок.
Ние сме работат во главната, тоа е само ќе да се користи во овој циклус.
Тоа не треба да постои надвор од овој.
>> Па тоа може да биде локална променлива.
Имате покажувач локална променлива.
>> СТУДЕНТСКИ 36: Но, тоа не е укажувајќи на ништо.
>> ЈАСОН Hirschhorn: Не, тоа не е иницијализиран на ништо.
Но ние нема да го користите, исто така.
Ние ќе се стави нешто во тоа прв пат ние го користиме.
Така што се чини во ред.
Значи ние не треба Примерок тука.
И мислам дека тоа е во ред како што е.
OK.
Имаме fread линија.
Ајде да го направите на следната линија.
>> Ако сакаме да запишам во датотеката, она што е добра функција да ги користите за да го направите тоа?
>> СТУДЕНТСКИ 37: запишување?
>> СТУДЕНТСКИ 38: fprintf?
>> ЈАСОН Hirschhorn: fprintf е еден.
Што е уште еден?
>> СТУДЕНТСКИ 39: запишување.
>> ЈАСОН Hirschhorn: запишување.
И за нашите цели, запишување, која ја видовме тука, е
веројатно подобар избор.
Потребни се четири аргументи, како и.
Nishant, може да ви даде мене аргументи?
>> Nishant: Одење Првиот е да биде само тампон.
>> ЈАСОН Hirschhorn: OK.
>> Nishant: Втората нечиј само ќе биде 1.
Третиот ќе биде 1.
И четвртиот ќе биде DST.
>> ЈАСОН Hirschhorn: Дали некој има било какви прашања во врска со тоа линија?
Што изгледа добро.
OK.
Па сега тоа изгледа како едно нешто сме недостасува - всушност, да се напише
оваа последната линија.
Затвори датотеки.
Кои можат да ни завршам пишувањето овие последните две линии?
Да.
Жал ми е, како се викаш?
>> Луси: Луси.
>> ЈАСОН Hirschhorn: Луси.
>> Луси: запишам src а потоа запишам дестинација.
>> ЈАСОН Hirschhorn: запишам, отворен paren, src, во близина paren, точка-запирка.
И запишам -
Да?
>> Луси: Отворени загради, DST а потоа запирка.
>> ЈАСОН Hirschhorn: Велики.
И што треба да вклучуваат на крајот?
>> Луси: Врати 0.
>> ЈАСОН Hirschhorn: Враќање 0.
Дали треба да се?
Само едно прашање.
Ние мора да вклучуваат поврат 0?
>> ПОВЕЌЕ СТУДЕНТИ: Не
>> ЈАСОН Hirschhorn: Не
Главната тоа го прави автоматски ако се дојде до крајот.
Но, мислам дека е убаво да се вклучат експлицитно.
Особено кога ние сме се враќа други работи во текот на програмата.
OK.
Тоа е она што ние сме недостасува -
Додека она што?
Кој може да се помисли на некои -
има некои смисла на она што би можеле да одат таму?
Дури и ако тоа е само во некои pseudocode како јазик?
>> Што сме ние навистина - што сакаме да се оди до?
Да, Луси.
>> Луси: На крајот на датотеката.
>> ЈАСОН Hirschhorn: На крајот на датотеката.
Па што сакаш да кажеш со крајот на датотеката?
>> Луси: Откако ќе стигнат до крајот на датотеката, да престане.
>> ЈАСОН Hirschhorn: OK.
Па еднаш кога ќе стигнеме на крајот на датотеката.
Како да знаеме кога сме достигна на крајот на датотеката?
>> СТУДЕНТСКИ 40: Мислам дека тампон ќе биде поставено на NULL.
>> СТУДЕНТСКИ 41: Тампон е прогласена во внатрешноста на јамка.
>> ЈАСОН Hirschhorn: Така мислите тампон ќе биде поставено на NULL.
Зошто би тампон да се постави на нула?
>> СТУДЕНТСКИ 40: Затоа што кога ќе fread, ти се обидуваш да се стави
ништо во тампон.
>> ЈАСОН Hirschhorn: OK.
Значи сте размислување fread -
кога сме стигнале до крајот на датотека, она што е fread случува да се направи?
Мислам дека тоа е прашањето ние треба да дознаам.
Што значи fread направам?
Не го стави NULL во тампон, или не го прават тоа нешто друго?
Како можеме да дознаам што го прави тоа?
>> СТУДЕНТСКИ 42: Човекот.
>> ЈАСОН Hirschhorn: Човекот.
Значи, да погледнеме овде.
Се врати вредност.
На успех, fread и запишување врати број на предмети се прочита или писмени.
Овој број е еднаков на бројот на бајти пренесува само кога големина е 1.
Доколку некоја грешка се случува, или на крајот на Датотеката е постигнат, вратената вредност е
краток точка пол брои или 0.
>> Така и за нашите цели, ако fread достигне на крајот на датотеката, и чита од
на крајот од датотеката, нема ништо лево да се прочита, што е тоа ќе се врати?
>> СТУДЕНТСКИ 43: нула?
>> ЈАСОН Hirschhorn: Што?
>> СТУДЕНТСКИ 43: нула?
>> ЈАСОН Hirschhorn: Нулта.
Тоа се случува да се врати на нула.
Па знаеме дека fread, кога ние сме до крајот на датотеката, се случува
за да се вратите на нула.
Како можеме да го користите дека за да нашата предност?
>> Ави: Можете да декларирате променлива надвор од циклусот наречен чек.
Ако провериш еднаква на -
за сега - еден.
>> ЈАСОН Hirschhorn: OK.
>> Ави: И тогаш може да се стави АКО изјава веднаш по fread велејќи дека ако
fread е еднаква на нула -
бр.
>> ЈАСОН Hirschhorn: Кој можат да ви помогнат Ави надвор?
>> Ави: Што е вредноста вратени од fread?
>> ЈАСОН Hirschhorn: Ние само заврши над тоа.
>> Ави: Како да се претставува?
>> ЈАСОН Hirschhorn: Значи тој се враќа - да гледам нагоре тука - тоа се враќа
size_t, која е во суштина цел број.
Па тоа се враќа цел број.
И во нашиот случај, тоа ќе врати 1 или 0 -
1 ако го прочита една работа - еден бајт, и 0 ако сме стигнале до крајот.
Па ако fread -
Да?
>> СТУДЕНТСКИ 45: Не можам да ви само да ги ставите на целосна fread (бафер, 1, 1, src) во
додека јамка?
>> ЈАСОН Hirschhorn: Значи ти предложи го прават тоа во таму?
>> [Ставање ГЛАСОВИ]
>> ЈАСОН Hirschhorn: Држи се.
Па ние сме ослободување на тоа.
Па ти си предлагање ставање fread во таму?
Она што ние треба, исто така, се движат ако сакате да го направите тоа?
>> СТУДЕНТСКИ 45: Тампон надвор.
>> ЈАСОН Hirschhorn: ние треба да исто така се помести ова овде.
>> СТУДЕНТСКИ 45: Но, дали тоа постојано се движат напред?
>> [Ставање ГЛАСОВИ]
>> ЈАСОН Hirschhorn: OK.
Значи тоа е она што Okshar предложен.
Ние создаваме нашите тампон.
Ние ДОДЕКА fread, тогаш ние запишување.
Мисли на ова?
>> СТУДЕНТСКИ 46: Мојата единствена прашање е, би тоа всушност се изврши командата fread?
>> ЈАСОН Hirschhorn: Велики прашање.
Кога ќе се стави повик на функција внатрешноста на состојба, дали тоа
повик на функција изврши?
Видовме примери на тоа порано.
Нели?
>> СТУДЕНТСКИ 46: OK.
Да.
Па тоа не се изврши.
>> ЈАСОН Hirschhorn: Видовме работи како што порано, каде што имаме
повик на функција во внатрешноста на состојба.
Дали таа функција повик изврши?
Да.
Значи одговорот е да.
Овој повик функција ќе се изврши.
Но, повторно, тоа е она што сакаме?
>> Што е еден начин ние би можеле да дознаам дознаете дали тоа е она што сакаме?
>> ПОВЕЌЕ СТУДЕНТИ: Стартувај тоа?
>> ЈАСОН Hirschhorn: Можевме да го работи.
Но, пред да го направите тоа, ние би можеле Исто така Разумот преку ова.
Ако -
велат дека ние имаме еден бајт во нашата датотека, ќе дојдеме до тука,
ние ќе дојдеме до овој код.
Ова ќе се кандидира.
fread ќе се врати еден бајт и чувајте го во тампон.
И тоа ќе се оцени на 1, право, откако тој се враќа 1.
>> Така, додека 1.
Дали тоа значи дека кодот внатре додека јамка ќе се изврши?
>> СТУДЕНТСКИ 47: Да.
Тоа е вистина.
>> ЈАСОН Hirschhorn: Да.
1 е вистина.
Тоа не е 0.
Па го кодот во внатрешноста тука ќе се изврши.
Па ние ќе се напише тоа.
Ние ќе се движи назад во оваа линија повторно.
Сега имаме -
ние сме на крајот од нашиот датотека.
Читаме од крајот на нашиот датотека, бидејќи имавме само еден бајт во неа.
>> Fread враќа 0, продавници нешто во тампон.
Јас искрено не знам што тоа продавници во тампон.
Ние веројатно може да се погледне до да видиме што тоа го прави.
Дека Јас искрено не знам.
Ние не знаеме, кој се грижи што тоа продавници во тампон?
Но, тоа не се вратат 0.
И ќе Додека 0 изврши?
>> Додека 0 не ќе го изврши.
Па тогаш ние ќе се пресели овде.
Па ајде стигнете кревање раце, ако тоа е кодот ние треба да се кандидира, или ако
треба да се направи промени во прв план.
Значи, ако мислите - што треба да гласаат.
Ако мислите дека треба да ја извршите оваа код како што е, ве молиме подигне својата рака.
>> OK.
Има една -
имате прашање, загриженост?
Да.
>> СТУДЕНТСКИ 48: По што се движи тампон надвор од јамка, ние
мора да го Примерок?
>> ЈАСОН Hirschhorn: Велики прашање.
Откако ќе се движат тампон надвор од јамка, ние мора да го Примерок?
Ова е опсегот прашање.
Ако ние се иницијализира тампон надвор на овој циклус, тоа ќе постои
внатрешноста на јамка?
>> ПОВЕЌЕ СТУДЕНТИ: Да.
>> ЈАСОН Hirschhorn: Да.
Својот делокруг опфаќа внатрешноста на јамка, и, навистина, ништо под неа внатре
на овој закон, вклучувајќи го и работи внатре тука.
Па ние не треба да го Примерок.
Тоа е локална променлива, и својот делокруг се уште е вклучен јамка.
>> СТУДЕНТСКИ 49: Дали ни е потребна за да се ослободи?
>> ЈАСОН Hirschhorn: Дали ние треба да се ослободи тампон?
>> СТУДЕНТСКИ 49: Да, ако ние не Примерок.
>> ЈАСОН Hirschhorn: Дали ние треба да се ослободи тампон?
Ние не.
Повторно, тоа е локална променлива, па ние не треба да го ослободи.
OK.
Ајде да видиме што се случува.
Па тоа е деиницијализира.
Тоа беше она нешто што Маркус предложи порано.
Значи имаме таа грешка, променлива тампон е деиницијализира кога се користи тука.
>> Како можеме да го надминете овој?
>> СТУДЕНТСКИ 50: Примерок тоа?
>> СТУДЕНТСКИ 51: еднакво NULL?
>> СТУДЕНТСКИ 52: Кажи тампон еднаква NULL.
>> ЈАСОН Hirschhorn: OK.
Изгледа добро.
Ние го имаме сега.
Ајде да се создаде нешто да се обиде копирање.
Па ние имаме текст фајл.
Како можеме да ја извршите оваа програма?
Да.
>> СТУДЕНТСКИ 53: Можете да го направите точка сека CP, test.txt.
А потоа можете да именува друга датотека кои ќе се сместат во.
>> ЈАСОН Hirschhorn: OK.
Ние ќе го наречеме out.txt.
Кул?
СКГ вина.
Мисли на СКГ грешка?
Ова е одлично.
Како можеме да дознаете каде на СКГ вина е тоа?
Што?
>> СТУДЕНТСКИ 54: gdb.
>> ЈАСОН Hirschhorn: gdb.
Трчаме gdb со пишување gdb точка коса црта, името на нашата програма.
Нема командната линија аргументи таму.
Ние ќе се постави точка на прекин на главната.
Ако сакам да започне gdb, она што можам да направам?
>> СТУДЕНТСКИ 55: Р
>> ЈАСОН Hirschhorn: Р И што тогаш?
>> СТУДЕНТСКИ 55: Аргументите?
>> ЈАСОН Hirschhorn: Потоа командната линија аргументи.
Ајде да одиме преку.
N е само ме водиш линија по линија.
Одам да се оди до Јас се ми сегмент вина.
Таму е мојата сегмент вина.
Тоа изгледа како fread предизвикани мојот сегмент вина.
Знам fread предизвика мојата сегмент вина, затоа што тоа беше
линија ние само погубен.
>> И единственото нешто што беше се случува во таа линија -
две работи се случуваа.
Fread се случува, а потоа бевме прават некои, додека проверка.
Јас сум подготвен да се обложи дека додека проверка не беше поради мојата сегмент вина.
Најверојатно, fread беше поради мојата сегмент вина.
Јас, исто така види нешто тука, memcopy.
>> Меморија копија.
Звучи како се движат меморија од една локација на друга.
Звучи како нешто што ќе се случи во fread, можеби некои меморија
се движат од тука до тука.
Ајде да одиме преку ова повторно.
Како можам да го почнете одново и се пушта повторно?
Да.
>> СТУДЕНТСКИ 56: Дали треба да се стави на симболот пред тампон?
>> ЈАСОН Hirschhorn: Значи симболот пред тампон ќе ми даде адресата на
пуфер, што е знак *.
Ајде да поминува низ овој уште еднаш.
Како можам да поминува низ него уште еднаш?
>> СТУДЕНТСКИ 57: Може ли само тип се кандидира повторно?
>> ЈАСОН Hirschhorn: Само внеси ги кандидира повторно.
Па ние нема да изврши оваа линија.
Па тампон е NULL покажувач.
Точно?
Тоа е да се покажува кон - ајде да видиме.
Ако ние имаме -
подготви брзо слика на тоа.
Може секого да видат дали Јас пишувам овде?
>> Па во магацинот, имаме локални променлива и се вика тампон, а
тоа е покажувач кон знак.
Што адресата е ова знак на?
>> СТУДЕНТСКИ 58: 0x0.
>> ЈАСОН Hirschhorn: Право.
Тоа е она што е оваа.
Тука, внатре тампон, се чуваат 0x0.
Тоа е она што го имаме - на подесување имаме во моментов.
Па оваа линија, fread, го става нешто од изворот каде?
Во ова поле или ова поле?
Кој кутија?
Лево или десно кутија кутија?
Ова право кутија.
>> Го следи покажувач, и го става тука.
Кога ние се обидуваме и допир меморија на локација 0, што ќе ги добиеме?
А сегментација вина.
Тоа е грешка имаме во моментов.
Да.
>> СТУДЕНТСКИ 59: Не треба да се стави ѕвезда тампон?
Или не?
За fread?
>> ЈАСОН Hirschhorn: Значи fread потребно е покажувач.
Па тоа поминува во тампон.
И тогаш тоа ќе де-референтноста тоа некаде во внатрешноста fread.
Но, повторно, видовме, потребно е покажувач.
Ние не треба да го помине ѕвезда тампон.
Кои ќе бидат поминува тоа што е овде.
И дека, најверојатно, ќе ни даде грешка бидејќи ние сме го де-референцирање.
>> Нели?
Кога ќе се де-референтноста овој покажувач, кога ние се обидуваме да пристапите на оваа локација,
ние сме добивање на грешка - нашите сегментација вина.
Па -
Упс.
Ние ќе престанам надвор од gdb.
Нашата линија -
нашиот проблем - е во право тука на оваа линија.
И тоа е проблем, бидејќи на оваа линија.
>> Како можеме да се создаде една кутија што е достапен во fread.
Нели?
Ние треба да се создаде кутија, која е една бајт голем, со големина на знак.
Но, ние треба таа кутија за да бидат достапни Кога оваа функција ја извршува.
Значи, каде што -
Да.
Сите идеи?
>> СТУДЕНТСКИ 60: Само да го постави како било кој случаен карактер.
Едноставно направете знак тампон еднаквите ликот.
А потоа, кога ќе се амортизира таму -
>> ЈАСОН Hirschhorn: Чекај.
Знак тампон?
Па нема ѕвезда?
>> СТУДЕНТСКИ 60: Да.
Извадиш ѕвезда.
Еднакво случаен карактер.
>> ЈАСОН Hirschhorn: OK.
Па да ми даде еден.
>> СТУДЕНТСКИ 60: Како и слично.
А потоа, кога имаш тампон таму, можете да користите -
>> СТУДЕНТСКИ 61: Star?
О, не, на симболот.
>> СТУДЕНТСКИ 60: Користете го симболот.
>> ЈАСОН Hirschhorn: OK.
И она што за во запишување?
>> СТУДЕНТСКИ 60: Користете го симболот повторно.
>> ЈАСОН Hirschhorn: Во ред.
Значи вашата идеја е, ние создаваме знак и стави нешто во него, а потоа
пишете дека знак.
>> СТУДЕНТСКИ 60: Да.
>> ЈАСОН Hirschhorn: Што луѓето мислат дека?
>> СТУДЕНТСКИ 62: Тоа е згрчена.
>> ЈАСОН Hirschhorn: OK.
Ајде да се извлече.
Значи ова време, ќе одам да се подготви ова во црвено на оџакот тука, а потоа ние
ќе има -
ooh!
Жал.
Па овој пат имаме нешто што се нарекува тампон, а тоа е на магацинот.
Точно?
И ние сме заштеда во него, на почетокот.
>> Тогаш ние имаме повик за fread.
Што fread не е потребно бајт од нашите датотека и го става некаде.
Тоа го става во каква и да е нешто се покажува кон.
Па, пред да дојде на оваа адреса -
0x0.
Сега што адреса имаме?
>> СТУДЕНТСКИ 63: Што адреса тампон е.
>> ЈАСОН Hirschhorn: Што адреса тампон е.
Тоа е веројатно нема да биде нешто слично.
Веројатно нема да почне со б и Ф, а потоа имаат шест други
хексадецимални цифри.
Не е важно.
Некои адреса.
И ние сме поминува таа адреса внатре
>> И ние ќе да се стави една наша бајт нешто на таа адреса.
Па ние ќе да се стави една наша бајт нешто внатре тука.
А потоа ние ќе напише од она што е некогаш внатре тука.
Дали некој има било какви прашања за тоа?
Кој мисли овој код ќе работат?
>> Кренете рака ако мислите дека овој код ќе работат.
Ќе мора да заземе став.
И кој мисли овој код не ќе работат?
Кренете рака.
Сите други треба да биде подигање на нивната рака.
OK.
Мајкл, каде си стои?
>> Мајкл: Не можам да се одлучи.
Вид на во средината.
>> ЈАСОН Hirschhorn: Ти си во средината.
Изберете еден.
>> MICHAEL: Ќе има вера и велат дека тоа ќе работат.
>> ЈАСОН Hirschhorn: OK.
Ќе имаат вера и велат дека тоа функционира?
Што се случи?
>> [Ставање ГЛАСОВИ]
>> ЈАСОН Hirschhorn: Не сегмент вина.
Како можеме да се провери да се види дали две работи се еднакви?
Додадени фајлови: два се еднакви.
>> СТУДЕНТСКИ 64: Diff.
>> ЈАСОН Hirschhorn: Diff.
Разл проверки за разликите меѓу две датотеки, и ако тоа се враќа
ништо, тие се идентични.
И ако ние се отвори, ние го добиваме нашиот датотека.
Така што беше правилна решение.
Ајде да се погледне назад во него уште еднаш.
Ние всушност не се ни треба да се иницијализира.
>> Тоа веројатно ќе изгледа малку почиста ако не се стави
нешто случаен таму.
Поентата е, што ви е потребно да се создаде некои простор за складирање на нешто од
fread и да преземат нешто од запишување.
И дека нешто мораше да биде или локалните променлива на магацинот - може
би можеле да го malloc'd малку простор.
>> Па ние всушност би можеле да имаат напишано Примерок тука, и
кои би работеле.
И тогаш ние би биле чување нашите работи некаде на грамада.
Но, ова е всушност, веројатно, најелегантен решение.
Само создаде простор на магацинот за овие работи да се оди.
>> Јас ќе имаат две други коментари.
Ако сте биле да се претвори во ова, и тогаш се постигна за ова, моите коментари
ќе биде како што следува.
Овие 1 е тука, за мене, гледам како магија броеви.
Ова 1, во смисла на fread, има смисла.
Тоа е бројот на работите да читаат и пишуваат.
>> Но овој токму тука треба да веројатно да биде нешто друго.
Значи она што е едно решение?
>> СТУДЕНТСКИ 65: Големина на бајт.
>> ЈАСОН Hirschhorn: Како тоа?
>> СТУДЕНТСКИ 65: Големина на знак.
>> ЈАСОН Hirschhorn: Големина на знак.
Да, бајт не е тип.
Па големината на знак дела.
Ние би можеле да имаат, на врвот на нашиот код, # дефинирано тоа.
Наречен нешто бајт и тоа е навистина знак.
Всушност, дури и подобар пристап би можело да се ова -
UINT.
Некој знае што е ова?
>> Жал.
Го имам наназад.
Чекај, бр.
На кој начин се оди?
Некој знае што е ова?
Да.
>> СТУДЕНТСКИ 67: Требаше да им помогне на стандардизираат преку системи работи кои
имаат - како непотпишана цели броеви кои имаат 8 бајти?
>> ЈАСОН Hirschhorn: Тоа е точно во право.
На различни машини, големината на ка -
не обично знак.
Карактери се обично еден бајт.
Но големината на други типови на податоци се различни големини на 32-битна машина
наспроти 64-битна машина.
А uint8_t е секогаш 8 битови -
секогаш еден бајт.
>> И јас треба да се вклучат дека стандард int хедер датотека.
Па сега, ова ќе имаат веројатно е најдобар начин да се напише овој код.
Па јас се ослободи од магијата броеви.
И јас исто така имаат повеќе логички тип за тампон.
Тоа не е едноставно знак, тоа е бајт, што е она што ние го очекуваме тоа да биде.
>> И тука, ние сме всушност се малку поцврсти.
Ние не сме нарекувајќи знак, кој -
можеби, кој знае - може да биде различна големината на различни машини.
Ние сме всушност велејќи дека ова е точно еден бајт, секогаш, без разлика што.
И ако гледаме тука, ние не правиме ср.
Ух-ах.
Што се случи?
>> СТУДЕНТСКИ 68: Тоа би можело да биде вклучен.
>> ЈАСОН Hirschhorn: Што?
>> СТУДЕНТСКИ 69: Дали е тоа?
>> СТУДЕНТСКИ 70: Вие не го дефинира како тип.
>> СТУДЕНТСКИ 71: Но, тоа треба бидат дефинирани во стандард.
>> СТУДЕНТСКИ 72: Што се случува?
>> СТУДЕНТСКИ 73: треба да се дефинираат бидат сите капи?
>> ЈАСОН Hirschhorn: Значи тоа не е # define.
Всушност, во овој случај, јас сум ќе ги користи typedef.
Затоа што ние го користите како еден вид на едно место.
Значи во овој случај, ние всушност сакате да го typedef како ние сме печатење на нов тип
бајт, а тоа е, во суштина, ова.
Тоа е малку различен од # define.
>> И сега, нашите кодот работи совршено.
Значи, повторно, # define зема нешто, го заменува насекаде
со друга работа.
Тоа е само на макро -
стенографија да се ослободи од магијата броеви.
Но, во овој случај, бидејќи ние сме користејќи го како тип -
токму тука -
со цел тоа да работат, ние треба да typedef што бајт е.
>> И ние сме го дефинираат токму тука.
Тоа не е struct, тоа е всушност само една непотпишана цел број.
Тоа е еден бајт долго.
Овој код ќе бидат достапни на интернет, и сите што треба да го имаат во моментов.
>> Значи имаме -
совршен -
13 минути да се оди над проблемот поставени 5.
Сакам да прошетка низ copy.c заедно, и тогаш ќе разговараме кратко
за други делови на проблемот во собата.
Па да ми се повлече до copy.c.
И кул работа е, ние сме всушност веќе напишано многу на овој код.
>> Кодот ние напиша буквално само излезе од тука, кога бев
го пишувам овој на моето.
Но, ова е copy.c, темел за првите два дела на
проблемот во собата за whodunit.c, која вие треба да напишете и resize.c.
Recover.c, кое е трет и последен дел од проблемот во собата, не е
базирана на оваа датотека.
>> Сте ќе треба да се напише дека датотека, ќе ви даде дефиниција за тоа
датотеки, но тоа нема никаква да се направи со copy.c.
Но, бидејќи copy.c е основа за првите два дела, ние ќе
да одиме низ него сега, па имате добра смисла на она што го прави.
>> И коментарите даде некои од нив далеку.
Ние веќе напишано некои од ова.
Прво, ние сме си сигурен ние се три аргументи.
Следниот, ние сме сеќавајќи се на име на датотека.
Па ние прескокнат овој чекор кога ние кодирани нашата работа -
кога нашите ср.
Но тука, тие се прави тоа е малку почист.
>> Тие се проверуваат за да бидете сигурни и двете датотеки се добри, во
Покрај отворањето на нив.
Ние напиша сите го овој код само сега, па јас сум нема да се задржиме на овој код.
Следна е некои работи кои се специфични за типови на датотеки што го користите, кои
се битмапа датотеки.
Bitmap датотеки имаат некои метаподатоци поврзани со нив.
>> Па првите неколку бајти ви кажам за датотека.
Тие не се боите на пиксел во таа слика.
Тие ви кажам за датотека.
И ако го прочитате преку проблемот собата, ќе имаат многу повеќе информации
на она што видови на метаподатоци структури се вклучени со bitmaps.
>> Но, тоа е причината зошто имаме оваа прва во собата на - овој код овде.
Ние сме читање на метаподатоци -
две парчиња на метаподатоци - датотека насловот и инфо заглавието.
И ние сме проверка на некои делови од неа да бидете сигурни дека тоа е вистина bitmap датотека
пред да продолжите.
>> И повторно, овие се детали што не треба да одат во моментов.
Ако се чита преку проблемот собата, ќе се разбере овие.
Скратам приказната, овие се само велејќи, ова е една bitmap датотека, и
се потврдува дека.
>> Следниот, ние си пишува оние на из датотека.
Гледаме дека овде.
Ние сме писмена форма до надвор покажувач.
Следниот, ние сме утврдување баласт.
Значи, повторно, како што е посебност со битмапа датотеки, некои линии вклучуваат
баласт на крајот.
И ако го прочитате преку проблемот собата, ќе дознаете повеќе за баласт.
Ова е формула за да се најде баласт.
>> Важно е да се запамети -
кога ќе го смените големината на битмапа датотека, баласт промени.
Кога ќе го смените големината на датотека, баласт промени.
Тоа никогаш не се случува да биде поголема од 3 -
тоа ќе биде од 0 до 3, инклузивна.
Но, кога ќе го смените големината на нешто, Соочи промени.
>> Ако јас само еден пиксел во тој ред, јас треба три бајти на баласт, бидејќи
секој ред мора да биде множители на четири бајти долго во битмапа датотеки.
Но, ако јас го удвои, да одат од еден пиксел две точки, од кои секој од нив,
да речеме, е бајт, тогаш јас треба два бајти на баласт да се направи
дека еднаква на четири.
>> Па кога ќе се промени големината на нешто, Јас треба да се промени висината
на баласт што го имам.
Дали тоа има смисла на сите?
Следниот, ние iterate преку секој ред, или преку сите редови.
А потоа ние iterate преку секоја колона во секој ред.
Ние сме лекување на оваа битмапа како мрежа, како ние сме третирани
одборот во 15.
>> Како што се третира тули кога ние ги печатени на екранот.
А мрежа на редови и колони.
Тогаш - ние го виде тоа.
Ние, всушност, само кодирани ова.
Ние направивме некои привремено чување.
Читаме во таму, а потоа ние го напише.
Ова е токму она што го направија.
>> Следно, затоа реков секоја линија завршува во некои баласт, ние
прескокнете во текот на овој баласт -
старите баласт.
И тогаш ние го додадете назад.
Во овој случај, ние сме создавање исто точно датотека.
Ние сме само тоа копирање.
Па оваа линија е вид на глупо.
Би можеле буквално само стави Соочи внатре
>> Но, ако се промени големината на датотеката, Дали се уште сакате оваа линија?
Значи, ако ние промена на големината на датотеката, ние се уште сакате да ја прескокнете
во однос на стариот баласт?
>> СТУДЕНТСКИ 74: Да.
>> ЈАСОН Hirschhorn: Значи правиме.
Бидејќи ова, повторно, се занимава со изворна датотека.
Ние не се грижат за баласт од изворната датотека.
Ние сакаме да одиме до следната линија.
Но, ние не едноставно кажано назад стариот износот на баласт.
Ние треба да се вратат на нови износот на баласт.
>> Значи, кога ние сме менување на големина на датотека, ние се уште сакате да го прескокнете во текот на
Соочи во старата датотека - што ние читаш од.
Но, она што ние сме пишување да, ние ќе да треба да се стави назад некои различни
број на баласт кој ние сме утврди.
Да.
>> СТУДЕНТСКИ 75: Редоследот на овие две линии не е важно, нели?
Затоа што ти си ракување различни датотеки.
>> ЈАСОН Hirschhorn: Токму така.
Редоследот на овие две линии не е важно.
Ние пишуваме оваа линија.
Ова е тука за датотеката ние сме пишување да.
Тоа е важно, па ќе го добиеме точниот износ на баласт.
Ова мора да се справи со во датотека.
Ние сакаме да ја прескокнете право во текот на баласт.
>> Ние не сакаме да ги читаме -
ако ние сме читање на бајт во еден момент, ние не се грижи за оние баласт бајти.
Ние сакаме да се преселат на следната линија.
Конечно исто како Луси даде за нас, ние затвори датотеки и враќање 0.
Значи ова е copy.c.
А ние всушност напиша - ние поминал поголемиот дел од делот пишувам ова, во суштина.
>> Сте го направиле ова.
Па се надевам дека ќе имаат добра смисла на она што се случува овде.
Голема разлика, искрено, е само овој прв дел, кој се занимава со
особености на битмапа датотеки.
Па морам како мојата следна слајд, она што ние треба да направам?
Добро, ајде да размислиме за whodunit.
>> И за некој кој чита преку проблемот постави, што ние
треба да се направи во whodunit?
Едноставно.
Aleja.
>> Aleja: Можете ли да го извадиш дел на секој пиксел што означува црвено.
А потоа -
вид на?
>> ЈАСОН Hirschhorn: OK.
Па извади од страна на секој пиксели, што означува црвено.
Тоа е блиску, но не сите од неа.
>> СТУДЕНТСКИ 76: Па, има различни начини да го стори тоа.
>> ЈАСОН Hirschhorn: OK.
Дај ми еден начин.
>> СТУДЕНТСКИ 76: Земете сите црвени, и тогаш нагласи сина и зелена боја.
>> ЈАСОН Hirschhorn: OK.
Па со оглед двете овие начини -
тоа звучи како ние го даде пиксели, таа има црвена, сина и зелена ниво.
Ние сакаме да се промени релативните нивоа на црвена, сина и зелена, во зависност
на тој пиксел.
Каде во овој код треба да ги менуваме релативната црвена, сина и зелена
нивоа на даден пиксели.
По што сме го прочита -
пред да го напише?
Дај ми го бројот на линијата.
>> ПОВЕЌЕ СТУДЕНТИ: 83.
>> ЈАСОН Hirschhorn: 83.
Значи, токму тука.
За whodunit, кодот што треба да Напиши сите треба да одат право таму.
И тоа е само код што треба да се напише.
Затоа што, како што слушнавме, сите што треба да направите е да ги промените овие роднина сина,
црвени и зелени нивоа од секој пиксел.
>> Сте го прочитате во, и сега сте ќе го напише.
Како можам да добијам - ако имам тоа нешто наречен трокреветни, токму тука, а тоа е на
тип RGBTRIPLE -
добро, ако се погледна во bmp.h, она што е RGBTRIPLE?
>> СТУДЕНТСКИ 77: Тоа е struct.
>> ЈАСОН Hirschhorn: RGBTRIPLE е struct.
Можеме да видиме дека вистинскиот овде долу.
И така, ако сакав да пристап, да речеме, црвени ниво на struct, како можам да
пристап до црвениот ниво на оваа struct?
>> [КЛАСА шумови]
>> СТУДЕНТСКИ 78: RGBTRIPLE.rgbtred?
>> ЈАСОН Hirschhorn: Дали е тоа точно?
>> СТУДЕНТСКИ 79: Тоа треба да биде тројно точка, наместо RGBTRIPLE точка?
>> ЈАСОН Hirschhorn: Трипл.
Трокреветни е локална променлива, па тука, нема совети тука.
Па ние само користење на точка нотација.
Ова ќе ми даде нивото на црвено.
Ако сакам да го промени, јас само го поставите тоа еднаква на нешто различно.
Па уште еднаш, оваа линија код пристапи оваа променлива во овој struct, и
можеме да го поставите на нешто ново.
>> Значи за whodunit, повторно, ова е, Во суштина, она што ние треба да направите.
Многу едноставна.
Само промена на некои релативните нивоа, и ова е местото каде што кодот оди.
Големината, од друга страна, е малку сложени да ја формира.
Всушност, големината е веројатно trickiest дел од овој проблем во собата.
Имаме три минути за да одат преку него.
>> Но, повторно, ние сме веќе напишано повеќето од овој законик, за да можеме
треба да биде прилично познато.
Кои се некои работи што сакате да го направите во ширина, ако сте ја прочитате во текот на
проблем во собата?
Ако им даде на мене, ние може да се зборува за нив.
Кои се некои работи што сакате да го направите?
>> СТУДЕНТСКИ 80: Вертикално -
па мора да се хоризонтално ја промени големината, но вертикално се промени големината, како?
>> ЈАСОН Hirschhorn: Значи, ако ние си даде пиксели, и ние сакаме да се промени големината со
фактор два, сега треба да биде променета хоризонтално и променета
вертикално.
Дали тоа има смисла?
Да.
Така што е веројатно Најголемиот предизвик.
И ние ќе зборуваме за тоа во секунди.
Да.
>> СТУДЕНТСКИ 81: Начинот на кој јас мислев на тоа беше што ви е потребно да се печати ја надвор -
>> ЈАСОН Hirschhorn: Чекај.
Не ни кажете што направи.
Ние ќе зборуваме во логиката.
>> СТУДЕНТСКИ 81: OK.
Она што беше прашањето?
>> ЈАСОН Hirschhorn: Вие само покрена својата рака.
Немаше прашање.
Дозволете ми да го претстави.
Дозволете ми да разговараат за ова кратко.
Значи имаме еден пиксел, ние сакаме да реплицираат тоа, и хоризонтално и
вертикално.
Значи идеално она што го правиме тука е, ние ја прочита во нашите пиксели, ние ја напише
меѓутоа многу пати.
>> Но, тогаш ние имаме трик тука, затоа што тогаш ние сакаме да го прескокнете
следната линија и напишете го на на почетокот на следната линија.
Значи, ако сакаме да се реплицираат и двете хоризонтално и вертикално, она што е
Еден добар начин да го стори тоа -
една добра иако да го направите тоа?
Значи ние не треба постојано да се трага околу нашата датотека да поставите работите.
>> Тоа прашање не може да има има смисла, но мислам дека на
одговори на тоа ќе ви помогне.
>> СТУДЕНТСКИ 82: Направете низа?
>> ЈАСОН Hirschhorn: Значи ајде да размислиме на секоја датотека како ред.
Ајде да размислуваат во смисла на редови.
Ако имаме нашиот прв ред од нашата мала слика, можеме да направиме тој ред
во голем ред, од голема слика, а потоа се реплицираат дека спорот сепак
многу пати треба да се повтори, наместо да оди пиксел од пиксел,
кој добива збунувачки, кога справување со датотеки.
>> Затоа што ако ние требаше -
Јас сум истекува на просторот.
Ако ова е нашиот датотека, и ние имаме дека еден пиксел таму, и ние сакаме да го стави
право таму, имаме уште некои работи кои треба да одат таму, кога сме
пишување и создавање на нашата нова датотека -
нашите датотека која е двапати поголема.
>> Но тоа е навистина тешко со датотека функции за да го прескокнете околу да се нови линии
како што, а потоа се врати тука и се стави работите во таму.
Тоа е речиси невозможно да се направи нешто како што, ако тоа го прави смисла.
Значи, ако мислиме дека во однос на редови, може да се преземе нашата ред, а потоа и го стави -
реплицираат редови вертикално.
>> И тоа како ќе се справи со промена на големината вертикално наместо хоризонтално.
Тоа беше вид на брз и малку збунувачки.
За жал нашето време е горе.
Јас ќе стојат надвор за оние од вас тука кои имаат прашања во врска со
проблем во собата, вклучувајќи опорави.
>> Па ајде да го одложи за сега.
И повторно, ако имате било какви прашања, ние може да разговарате надвор.