РОБ БОВДЕН: Здраво, ја сам Роб Боуден, и хајде да разговарамо о куиз0. Дакле, прво питање. Ово је питање у којој ти треба да кодира број 127 у бинарних сијалица. Ако желиш, можеш урадите редовну конверзију из би-- или, из децималног у бинарни. Али то је вероватно иде потребно доста времена. Мислим, могао схватити да је, Ок, 1 је унутра, 2 је ту, 4 је тамо, 8 је унутра. Лакши начин, 127 је 128 минус један. Да скроз лево Сијалица је 128-битни. Дакле, 127 је у ствари само све осталих сијалица, пошто је то скроз лево сијалица минус 1. То је за то питање. Прво питање. Дакле, са 3 бита можете представља 8 различитих вредности. Зашто, онда, је 7 највећа не-негативан децимални цео можете представљати? Па, ако можемо само да представљају различите вредности 8, онда шта ћемо да будемо представља ис 0 до 7. 0 заузима једну од вредности. Питање два. Са Н бита, колико јасан вредности можете да представљају? Дакле, са н бита, имате 2 могуће вредности за сваки бит. Дакле, имамо 2 могућих вредности за први бит, 2 могуће вриједности за другу, 2 могуће да трећину. И то је 2 пута 2 пута 2, и крају је одговор 2 на н. Питање три. Шта је у бинарном 0к50? Дакле, запамтите да хексадецимална има веома једноставан конверзије у бинарни. Дакле, овде, само треба да погледамо 5 и 0 независно. Дакле, шта је 5 у бинарном? 0101, то је мало 1 и 4 бита. Шта је 0 у бинарном? Не Трицки. 0000. Дакле, само их заједно, и То је цео број у бинарном. 01010000. А ако желиш можеш скини ту леве нула. То је небитно. Па онда алтернативно, оно што је у 0к50 децималног? Ако желиш, ти ако си могао-- удобније са бинарном, можете узети тај бинарни одговор и претворити то у децимале. Или можемо само да се сетим то хексадецимална. Тако да је 0 је у 0-ог места, и 5 је у 16 ​​на првом месту. Дакле, овде имамо 5 пута од 16 до прво, плус 0 пута 16 на нулу, је 80. А ако сте погледали Наслов на питање, је био ЦС 80, што је врста наговештавају одговор на овај проблем. Питање пет. Ми имамо тај Сцратцх скрипту, која је понављајући 4 пута Пеанут Буттер Јелли. Дакле, како то радимо сада код које у Ц? Па, ми имамо овде-- улогу у Болд је једини део који мора да спроведе. Дакле, имамо 4 петљу која је петљи 4 а, иф-инг Пеанут Буттер Јелли, са новом линијом као проблем тражи. Питање шест, још један проблем Сцратцх. Видимо да смо у заувек петљи. Говоримо о променљива и А онда сам се увецава за 1. Сада желимо да урадимо да у Ц. Тхере аре више начина смо могли да уради. Овде ћемо се десило шифру заувек петље као вхиле (труе). Тако да прогласи променљива и, само као што смо имали у променљива и нуле. Прогласи променљива и, и заувек док је (истина), кажемо променљиву и. Дакле, иф% ја-- или сте могли сте користили% д. Ми кажемо да променљиву, и онда га увећати, и ++. Питање седам. Сада желимо да урадимо нешто веома слично Марио дот ц од проблема је поставили. Ми желимо да одштампате ове ознаке хеша, желимо да одштампате пет по три квадрата тих хешева. Па како ћемо то урадити? Па, ми вам цео гомила кода, а ти си само морају да попуне у функцији за штампање мреже. Дакле, шта ПринтГрид личи? Па ти си прошлост ширина и висина. Дакле, имамо спољашњег 4 петља, то је петље над свим редова овога Грид које желимо да одштампате. Онда имамо међу-угњеждену 4 петље, То је штампање преко сваке колоне. Дакле, за сваки ред, штампамо за Свака колона, један хасх. Онда на крају реда штампамо Сингле нова линија да бисте прешли на следећи ред. И то је за целу мрежу. Питање осам. Функција као што је рекао да ПринтГрид имају споредне ефекте, али не и повратак вредност. Објасните разлику. Дакле, ово се ослања на вас запамтити какав нуспојава је. Па, повратак валуе-- знамо ПринтГрид не имају повратну вредност, пошто овде пише неважећим. Тако нешто да враћа празан стварно не врати ништа. Дакле, шта је нуспојава? Па, споредни ефекат је све што врста опстаје након престанка функције крајевима то није био само вратила, а то није било само из улаза. Тако, на пример, могли бисмо променити глобалну променљиву. То би било нуспојава. У овом конкретном случају, веома важно сиде еффецт штампа на екран. Тако да је нуспојава то ПринтГрид има. Ми принт ове ствари на екрану. И можете мислити о да као споредни ефекат, јер то је нешто што постоји и након ова функција заврши. То је нешто што је изван оквира ове функције које су на крају се мијења, Садржај екрана. Питање девет. Размотрити програм доле, којој лине нумберс су додате ради дискусије. Дакле, у овом програму смо само позивање ГетСтринг, складиштења у овој варијабли с, а затим штампање ту променљиву с. У реду. Дакле, објасните зашто линија једна је присутан. #инцлуде ЦС50 дот Х. Зашто морамо да #инцлуде ЦС50 дот х? Па Зовемо ГетСтринг функцију, анд ГетСтринг дефинисано у ЦС50 библиотеци. Дакле, ако нисмо имали #инцлуде ЦС50 дот Х, добили би имплицитна декларација на ГетСтринг Функција грешке од компилатор. Тако да је потребно да се укључи либрари-- морамо укључити тај фајл, иначе преводилац неће признају да постоји ГетСтринг. Објасните зашто линија два присутна. Дакле, стандардна ио тачка х. То је исто као и претходни проблем, осим уместо да се бавимо ГетСтринг, говоримо о принтф. Дакле, ако нисмо рекли да је потребно укључити стандардни ио дот х, онда не би могли користити принтф функцију, јер компајлер Не бих знао о томе. Зашто-- шта је значај празнине у реду четири? Дакле, овде имамо маин (). То је само кажем да смо не добијају никакву командну линију аргументи за главни. Запамтите да кажемо инт Главни инт аргц низ аргв заградама. Овде ћемо само рећи да ми кажемо празнина игноришу аргументе командне линије. Објасните, у односу на меморију, тачно шта ГетСтринг у складу шест враћа. ГетСтринг се враћа блок Меморија, низ знакова. Стварно враћа показивач на први карактер. Запамтите да је низ цхар звезда. Дакле, ова је показивач на прву лик у било ком стринг да корисник ушао на тастатури. И то се дешава да се меморија маллоцед, тако да је меморија је у гомили. Питање 13. Размотрити програм испод. Дакле, све ово програм ради је иф-инг 1 подељено са 10. Дакле, када саставио и погубљен, овај програм излаза 0.0, иако 1 подељено са 10 је 0,1. Дакле, зашто је 0.0? Па, то је зато што целобројног поделе. Дакле, 1 је цео број, 10 је цео број. Дакле, 1 подељено са 10, све се третира као целих бројева, и Ц, када радимо интегер поделу, ми скратити сваку децимални зарез. Дакле, 1 подељено са 10 је 0, а онда ми покушавамо за штампање који као флоат, тако нула штампати као флоат је 0.0. И зато имамо 0.0. Размотрити програм испод. Сада смо штампу 0.1. Дакле, не цео подела, Ми само штампате 0.1, али смо штампања до 28 децимале. И ми ово 0.1000, гомила нула, 5 5 5, бла бла бла. Дакле, питање је зашто то ради принт то, уместо да управо 0,1? Дакле, овде је разлог сада флоатинг поинт непрецизност. Запамтите да је само 32 пловак бита. Тако да можемо само да представља коначан број од покретном зарезу са тих 32 бита. Па ту је коначно бесконачно многи покретном зарезу, и ту је бескрајно много флоатинг Поинт вредности у између 0 и 1, а ми очигледно смо у могућности да представља још више вредности него то. Тако да морамо да се жртвујемо за моћи да представља већину вредности. Дакле, вредност попут 0.1, очигледно не можемо да представљају тачно. Дакле, уместо да представља 0,1 радимо Најбоље што може да представља овај 0.100000 5 5 5. И то је прилично близу, али за многе апликације морате да бринете о флоатинг поинт непрецизност, јер једноставно не може да заступа Алл Флоатинг Поинтс тачно. Питање 15. Размотрити код испод. Ми само штампате 1 плус 1. Тако да нема трик овде. 1 плус 1 има вредност 2, и онда смо то штампу. Ово је управо штампа 2. Питање 16. Сада смо штампу карактер 1 плус 1 знак. Дакле, зашто то није принт исту ствар? Па лик 1 плус знак 1, карактер 1 има АСЦИИ вредност 49. Дакле, ово је заиста говоре 49 плус 49, и На крају, то ће за штампање 98. Дакле, ово не одштампа 2. Питање 17. Завршите имплементацију издатака испод одд на такав начин да функција враћа труе ако н је чудно и лажно ако је н и. Ово је велики циљ за мод оператера. Дакле, узмемо Наш аргумент Н, ако је н мод 2 = 1, и то значи да је н подељен од 2 имао остатак. Ако је н подељен 2 имао остатак, који значи да је н непаран, па смо се вратили истина. Друго ми ретурн. Такође можете да уради Н мод 2 једнако нула, ретурн, ретурн истина. Размотрити Рекурзив функцију испод. Дакле, ако је н мање од или једнак 1, повратак 1, ретурн н пута Ф од Н минус 1. Дакле, шта је ова функција? Па, ово је само факторијел функција. Ово је лепо представља као н факторијелском. Дакле, питање 19 сада, желимо да Користим ову функцију рекурзивни. Ми желимо да га понавља. Па како то да урадимо? Добро за особље рјешење, а опет има више начина сте могли да урадите да, почнемо са овим производом инт једнак 1. И кроз овај за петљу, идемо се множењем производ на крају завршити са пуним факторијелском. Дакле, за инт једнако 2, и није мање или једнако до Н, и ++. Можда се питате зашто сам једнако 2. Па, сетите се да овде морамо да уверите се наш основни случај је тачно. Дакле, ако н мања од или једнака на 1, само смо враћа 1. Дакле овде, почињемо у сам једнако 2. Па ако сам била 1, онда до-- или ако н су 1, онда за петљу не би извршити уопште. И тако ми бисмо повратак производ, који је 1. Слично томе, ако је н била ништа мање него 1-- ако је било 0, негативни 1, вхатевер-- ми би и даље враћа 1, што је управо оно што је рекурзиван верзија ради. Сада, ако је н веће од 1, онда идемо да уради најмање једну итерација ове петље. Рецимо н је 5, онда смо урадити пута производа износи 2. Дакле, сада је 2 производ. Сада ћемо да радимо Посетилаца производ једнако 3. Сада је 6. Посетилаца Продуцт једнако 4, сада је 24. Посетилаца Продуцт једнако 5, сада је 120. Па онда на крају, ми враћа 120, што је коректно 5 факторијелском. Питање 20. Ово је једна у којој морате да попуните у овој табели са датом алгоритма, све што смо видели, то одговара ове алгоритамску Рун Посетилаца те Асимптотиц рун пута. Дакле, шта је алгоритам који је омега 1, али Биг О од н? Тако да би могао да буде бескрајно многе одговоре овде. Онај који смо видели вероватно већина често је само линеарна претрагу. Дакле, у најбољем случају сценарио, ставка смо траже је у почетак листе и тако у омега 1 корака, Прва ствар коју проверите, Управо смо одмах вратити да смо нашли ставку. У најгорем сценарију, ставка на крају, или ставка није на листи уопште. Дакле, морамо тражити цео списак, све н елементи, и зато је о н. Дакле, сада је нешто што је обоје омега н лог н, и Биг О од н лог н. Па најрелевантније ствар смо овде видели је спајање врсту. Дакле спајање врста, запамти, је на крају Тхета од н лог н, где је дефинисана тхета ако оба Омега и Биг О су исти. Оба н лог н. Шта је нешто што је омега од н, и О од н квадрат? Па, опет ту више могућих одговора. Овде ћемо се десити да кажемо буббле врсту. Сортирање уметањем би такође радим овде. Запамтите да буббле врсту има ту оптимизацију где, Ако сте у могућности да се кроз целе листе без потребе да урадите Било који Свапс, онда, па, одмах могу вратити да Листа је сортирана за почетак. Дакле, у најбољем случају, то је само омега Н. Ако то није само лепо сортирана листа за почетак, онда имамо о о Н квадрат своп. И, на крају, ми имамо избор врсту за н на квадрат, и омега и велики О. Питање 21. Шта је цео прелив? Па опет, слично раније, имамо само конацно много бита да представља цео број, па можда 32 бита. Рецимо да имамо целобројна. Онда на крају највише позитиван број можемо представљати је 2 до 31 минус 1. Дакле, шта се дешава ако покушамо да онда инкрементирање тај цео? Па, ми ћемо отићи од 2 до 31 минус 1, па све до негативног 2 на 31. Дакле, ово цео прекорачење кад стално увецава, и на крају не можете моће бити већи и то само обавија скроз около да негативну вредност. Шта о тампон преливом? Дакле, тампон оверфлов-- сећате шта је тампон. То је само комад меморије. Нешто попут низа је тампон. Дакле, буффер оверфлов када покушате да приступите меморији након истека тог низа. Дакле, ако имате низ величине 5 и теби покушате да приступите арраи брацкет 5 или 6 или конзола конзола 7, или нешто изнад Енд, или чак нешто белов-- Арраи брацкет негативна 1-- сви они су буффер оверфлов. Дирате меморију у лошим начине. Питање 23. Дакле, у овом једном вам је потребно да спроведе стрлен. А ми вам кажемо да можете Претпостављам а неће бити нула, тако да не морате да било какву проверу за нулл. А постоји више начина си могао да уради ово. Овде ћемо само узети једноставан. Почињемо са контра, н. н је рачунајући колико знакова има. Тако да се крећу од 0, а онда поновити читаву листу. Да ли ова носач 0 једнак нулл терминатор лик? Запамтите тражимо нулл терминатор знак одредити колико је наш стринг. То ће да раскине Било који релевантни стринг. Тако је ова конзола 0 једнаки на нулл терминатор? Ако није, онда ћемо погледај с конзола 1, а 2 држача. Наставимо Унтил Ве пронађу нулл терминатор. Када смо га нашли, а затим н садржи Укупна дужина низа, а ми само да се врати то. Питање 24. Дакле, ово је онај у коме сте морати да се компромис. Дакле, једна ствар је добра у једном начин, али на који начин је то лоше? Па ево, спајање Сорт тежи бити бржи од буббле врсте. Рекавши да-- добро, тамо су вишеструки одговори овде. Али главни је да балон врста је омега н за сортирани списак. Сећаш се оног сто само смо видели раније. Дакле мехур шортс омега н, најбољи сценарио је да је у стању да само идите преко списак једном, одредити Хеј ово је већ сортирано, и повратак. Мерге Сорт, без обзира на све ти, је омега н лог н. Дакле, за сортирани списак, буббле Сортирај ће бити бржи. А шта је повезано листе? Дакле, повезана листа може порасти и скупља да стане онолико елемената колико је потребно. Рекавши то то-- обично директно поређење ће бити повезан Листа са низом. Дакле, иако је матрицама лако расте и психијатар да стане што више елемената по потреби, списак повезан упореди са арраи-- Ан Арраи има случајан приступ. Ми можемо у било који индекс Посебно елемент низа. Дакле, за повезане листе, не можемо Само идите на Тхе Фифтх Елемент, морамо прећи из почетка док не дођете до Тхе Фифтх Елемент. Као и да ће нас спречити радим нешто овако бинарно претраживање. Говорећи о бинарном претрагом, бинарно претраживање тежи да буде бржи од линеарне претраге. Рекавши то-- Дакле, једна могућа ствар је да не може да уради бинари потражи на повезаним листама, то можете да урадите само на низове. Али вероватно је још важније, Ви не можете учинити бинарни претрагу на низ која није сортирана. Унапред можда ћете морати да сортирате низ, па тек онда може ти бинарни претрагу. Дакле, ако ваш није ствар Сортед за почетак, онда линеарно претраживање може бити бржи. Питање 27. Дакле, разматра програм доле, који ће бити у следећем слајду. И то је она у којој смо хтети да изричито вредности за различите варијабли. Па хајде да погледамо то. Тако линији. Имамо инт једнако 1. То је једина ствар која се десила. Дакле, у првој линији, видимо у нашој табле, да је и, а, б, а тмп су све онесвестио. Дакле, шта је к? Па управо смо га поставили једнак 1. И онда линији, добро, видимо да и је подешена на 2, а сто је вец попуњен за нас. Дакле, к је 1 и и је 2. Сада, линија три, сада смо унутар свап функцију. Оно што смо проћи да мењате? Прошли смо амперсанд Кс за , а Амперсанд г. за Б. Где је проблем и раније изјавио је да адреса Кс је 0к10, а адреса је и 0к14. Тако и б једнаки 0к10 и 0к14, респективно. Сада на линији три, које су Кс и И? Па, ништа није променило О кии у овом тренутку. Иако су унутар Маин Стацк оквир, они и даље имају исти Вредности су раније. Нисмо модификовани никакву меморију. Дакле, к је 1, и је 2. У реду. Дакле, сада смо рекли инт тмп једнако стар. Дакле, у реду, све четири је исти осим за тмп. Нисмо променили никакве вриједности ништа осим тмп. Ми постављамо тмп једнаку стар. Шта је звезда? Па, пре указује на Кс, Тако стар ће на једнаку Кс, што је 1. Дакле, све је копиран доле, а елите је 1. Сада следећи ред. Стар једнака стар Б. Дакле линије фиве-- опет добро, све је исти осим год звезда је. Шта је звезда? Па, ми смо рекли звезда је к. Дакле Мењамо к на равноправан стар б. Шта је са Б? год. Б указује на И. Дакле, звезда б је год. Дакле, ми смо постављање к једнако и, а све остало је исто. Дакле, видимо у следећем реду је к сада 2, а остали су само копирају доље. Сада у следећем реду, са Б једнак тмп. Па, ми смо рекли звезда б је И, па ми смо постављање година једнака тмп. Све остало је исто, тако да је све буде копиран доле. Ми смо постављање и једнак тмп, што је један, а све остало је исто. Сада коначно, линија седам. Вратили смо се у главном функцији. Ми смо након Свап је завршен. Изгубили смо, б, и тмп, али на крају смо не мењају никакве вредности ништа у овом тренутку, Ми само цопи Кс и И доле. А видимо да су Кс и И нов 2 и 1 уместо 1 и 2. Свап је успешно извршен. Питање 28. Претпоставимо да сте наишли поруке о грешкама испод током радног времена следеће године, као и ЦА ТФ. Саветују како да решите сваки од ових грешака. Дакле, ундефинед референце то ГетСтринг. Зашто би ти видиш ово? Па, ако ученик користи ГетСтринг у свом коду, они су правилно хасх укључени ЦС50 дот х до укључи ЦС50 библиотеку. Па, шта раде треба да исправите ову грешку? Они треба да урадите цртицом лцс50 у командне линије када су састављања. Дакле, ако не пролазе цланг Дасх лцс50, они су неће имати стварни Код који имплементира ГетСтринг. Питање 29. Имплицитно изјављујући библиотека функција стрлен. Па сад ово, они немају урађено одговарајући хасх укључују. У овом конкретном случају, заглавље датотеке они треба да укључи је ниска тачка Х, укључујући и гудачки дот х, сада студент-- сада преводилац има приступ декларације стрлен, а зна да кода користи стрлен правилно. Питање 30. Више процената конверзија од аргумената података. Дакле, шта је ово? Добро се сећам да су одсто сигнс-- Колико су релевантни за принтф. Дакле, у принтф можемо перцент-- можемо нешто принт као проценат сам Бацксласх н. Или можемо штампати као одсто и, простор, посто сам, простор, посто сам. Дакле, за сваки са посто знаци, треба да прође променљиву крајем принтф. Дакле, ако кажемо принтф заграда одсто И Бацксласх н блиске парови, Па, ми кажемо да смо łтампања цео број, али онда не пролазе иф цео број да стварно штампање. Дакле, овде више процената конверзије од аргумената података? То говори да имамо гомила одсто, а ми немамо довољно варијабле да заиста попуните тим процентима. И онда дефинитивно, на питање 31, Дефинитивно је изгубио 40 бајтова у једном блоковима. Дакле, ово је грешка Валгринд. Ово је рекао да негде у коду, имате расподелу која је 40 бајтова велике, тако да маллоцед 40 бајтова, и никад га ослободио. Највероватније је потребно само наћи неки цурење меморије, и наћи где треба да ослободити овај блок меморије. И питање 32, Инвалид писања величине 4. Опет ово је Валгринд грешка. Ово не треба да урадите са меморијским цурења сада. То је, највише ликели-- мислим, то је нека неважећих права меморије. И највероватније да је ово нека врста тампон преливања. Где имате низ, можда цео низ, и идемо кажу да је то од величине 5, а ви покушати да додирнете низа држач 5. Дакле, ако покушате да пишете да вредности, то није комад меморије да заправо имају приступ, и па ћеш добити ову грешку, рекавши инвалид пише о величине 4. Валгринд ће препознати да сте Покушавам да тоуцх меморију непримерено. И то је то за куиз0. Ја сам Роб Боуден, а ово је ЦС50.