[Powered by Google Translate] [Одељак 4] [мање комфорни]
[Нејт Хардисон] [Универзитет Харвард]
[Ово је ЦС50.] [ЦС50.ТВ]
>> У реду, добродошли назад на делу.
У одељку овонедељном ћемо урадити неколико ствари.
Идемо у првом сету проанализирамо Проблем 2,
што је Цезар и Вигенере проблема скуп.
А онда ћемо да зароне у квизу 0 рецензије
и проводе мало времена рецаппинг шта смо говорили о
у свакој од предавања до сада, а такође ћемо урадити неколико проблема
из квизова претходне године.
Тако ви имате добар начин да се припреме за то.
>> За почетак, ја сам подигне неколико добрих решења
за претходни проблем сету, проблем Сет 2, у овај простор.
Ако ви сви погодио ову везу,
а ако кликнете моје име и кликните на мојој првој ревизији
видећете цаесар.ц, што је управо оно што ја гледам.
Хајде да разговарамо о овоме заиста брзо.
Ово је само пример решење.
Ово не мора савршено решење.
Постоји много различитих начина да пишем,
али постоји неколико ствари које сам желео да истакне
које сам видео док сам био класирање, најчешће грешке које мислим
ово решење ради веома добар посао руковање.
>> Први има неку врсту заглавља коментару на врху.
На линијама 1 до 7 да видите детаље,
Шта је тачно овај програм ради.
Добар стандардна пракса када пишете Ц кода
без обзира да ли ваш програм садржан је у једној датотеци или
да ли је то подељени око више датотека је да имају неку врсту
оријентише коментар на врху.
Ово је и за људе који иду напоље и писање кода у стварном свету.
Ово је место где ће ставити информације о ауторским правима.
Испод су # укључује.
На линији 16 има овај # дефине које ћемо вратити у само мало.
И онда када функција почне, некада главни стартове,
јер овај програм је све садржано у једној функцији
Прва ствар која се дешава и то је веома идиоматски и типично за Ц програм
који узима у командној линији аргументи да ли је то она одмах проверава
>> за аргумента бројања, аргц.
Управо овде видимо да је овај програм управо очекује 2 аргументе.
Запамтите да је то први аргумент да је посебна једна
То је увек назив програма који је покреће,
име извршне датотеке.
И шта то ради је она спречава корисника да покренете програм
са више или мање аргумената.
Разлог желимо да провери овог права далеко је зато
не можемо заиста да приступите овом аргв низ овде поуздано
док смо проверили да видимо колики је.
>> Једна од најчешћих грешака које сам видео био би људи одмах иду у
и зграби аргв [1].
Они би зграби кључни аргумент из низа и урадите да сам провери на њему,
а онда бих урадио тест за аргц, као и следећег теста,
без обзира да ли је или не први аргумент је заиста био цео у исто време,
а да не ради јер у случају да не постоје аргументи које испоручује
бићете зграбио аргумент да није било или да покушава да зграби онај који је нема.
>> Друга велика ствар коју треба приметити је да
увек желите да одштампате неки користан грешци
кориснику да усмери их.
Сигуран сам да сте сви одрадили програме где се сви изненада срушио,
и добићете ову смешну малу дијалог који ће се појавити и каже
нешто страшно криптичан и можда вам даје код грешке или нешто слично
То нема смисла.
Ово је место где можете заиста да пружи нешто корисним
и циљано кориснику, тако да када га покренете иду "Ох", лице длан.
"Знам тачно шта да радим ја знам како да поправим ово.".
>> Ако не одштампате неку поруку, онда можете завршити у ствари
остављајући кориснику да иде испитају свој изворни код
да схватим шта је кренуло наопако.
Ту су и неки пута да ћете користити различите кодове грешака.
Овде смо само користили један рећи да је грешка,
дошло је до грешке, дошло је до грешке.
Већи програми, програми који се често називају другим програмима,
ће вратити неку врсту специјалних кодова грешака у различитим сценаријима
да програмски комуницира оно што иначе би
користите само леп енглеског поруку.
Кул.
Док радимо на доле, можете видети да повуку кључну аут.
Ми тестирамо да ли кључ одговара.
Ми смо добили поруку од стране корисника.
Разлог што то у овом радите док петље и то је нешто што ћемо покрити
у мало-али се испоставља да, ако откуцате контролни Д
кад ти то ГетСтринг промпт на терминалу
шта је то заправо ради је да шаље специјални карактер
у програм.
То се зове ЕЛФ или крај датотеке карактера.
И у том случају, наша ниска порука ће бити нулл,
тако да ово није нешто што смо проверили у проблему поставили себе.
>> Али, као што идемо даље, сада када смо почели да разговарамо о показивачи
и динамичка алокација меморије на гомили,
провере нула кад год имају функцију која би могла
врати НУЛЛ вредност је нешто што ћете желети да уђе у навику ради.
То је овде првенствено за илустрацију.
Али када ти видиш ГетСтринг у будућности,
тако да од проблема Сет 4, ви ћете желети да то на уму.
Опет, то није питање за Проблем Сет 3 или јер ми нисмо обрадили још.
Коначно, долазимо до овог дела где смо добили на главну петљу шифровање,
и постоји пар ствари дешава овде.
Прво, ми смо прелазили преко целе поруке ниске сама.
Овде смо држали стрлен позив у стању,
који број од вас су истакли није одличан начин да иде.
Испоставило се, у овом случају то је такође није велика,
делимично зато што смо измену садржаја саме поруке
унутар фор петљи, тако да ако имате неку поруку која је 10 карактера,
Први пут смо започели да за петљу стрлен вратиће шта?
10.
>> Али, ако смо тада модификује поруку, кажемо модификује свој 5. карактер,
и ми бацити у \ 0 карактера у 5. позицији,
на следећој итерацији стрлен (порука) неће вратити оно што је урадио
Први пут смо поновио,
али уместо тога ће се вратити 5 јер смо бацили у том нулл Терминатора,
и стринг је дужина дефинисана
положајем те \ 0.
У овом случају, то је одличан начин да се иде, јер смо га мењајући у месту.
Али приметите да је ово заправо изненађујуће једноставна за шифровање
ако можете добити математика исправна.
Све што је потребно је да се провери да ли је писмо које гледаш
је велика или мала.
>> Разлог ми је само да провери да и немамо за проверу
алфа је случај зато што
Ако је карактер слово, или ако је мала
онда је дефинитивно алфабетски знак,
јер немамо велика и мала цифре.
Друга ствар коју радимо, а то је мало компликовано,
је да смо изменили стандардну Цезарова шифра формулу
које смо дали у спецификацији проблема сет.
Шта је то другачије овде је да смо одузети
У случају великих слова капитала, а онда додао капитал А
Назад у на крају.
>> Знам да мало вас су то урадили у вашем коду.
Да ли је ико од вас то урадили у вашим аргументима?
Ти си ово урадио. Да ли можете да објасните шта то ради, Сахб?
Одузимањем га, јер сте урадили праву мод после тога,
морате да га извади, тако да на тај начин можете добити [кашаљ] позицију.
А онда је додао да се касније пребацио преко оног који сте желели.
Да, баш тако.
Оно Сахб рекао је да када желимо да додате
наша порука и наша кључна заједно
и онда мод да мод да је НУМ_ЛЕТТЕРС,
ако не прилагођавајући своју поруку у одговарајућем 0 до 25 опсега прво,
онда бисмо могли завршити добијање заиста чудан број
јер су вредности које смо гледа када гледамо поруку [И],
када погледамо-тог карактера нашег обичан текстуалне поруке,
је вредност негде у овом 65 до 122 опсега
заснован на АСЦИИ вредности за велико А кроз малих слова з.
И тако, када смо га модифитсиране за 26 или НУМ_ЛЕТТЕРС,
јер је то био наш # дефине у горњем десном углу овде,
која ће нам дати вредност која је у распону 0 до 25,
и ми морамо начин онда скали која назад
и да је у одговарајућој АСЦИИ опсегу.
Најлакши начин да то урадите је да само смањи све доле
у распону 0 до 25 за почетак,
и онда пребаци све назад на крају.
>> Још једна честа грешка коју сам видела људе налетео је да
ако не заправо урадили скалирање одмах
а ви додајте поруку и кључ заједно и да их додате, рецимо,
у променљивој цхар, проблем са тим
је од порука [и] је релативно велики број да почне са-
запамтите да је најмање 65, ако је велика карактера
ако имате велики кључ, рецимо, нешто као 100,
и додате та 2 заједно у сигнед цхар идете да добијете преливање.
Ти ћеш добити вредност која је већа од 127,
што је највећа вредност која може знак променљиве држати.
Опет, то је зато што би желео да уради такве ствари да почне са.
Неки људи су око тог случаја тиме ако другде и тестирање
да видим да ли би преливање раније радили,
али на тај начин добија око тога.
А онда у овом решењу смо одштампан цео стринг на самом крају.
Други људи одштампан знак истовремено. Обе су супер.
У овом тренутку, да ли ви момци имате питања, било какав коментар о томе?
Ствари желите, ствари се не свиђа?
>> Имао сам питање.
Можда сам то пропустио током објашњење, али како се тај програм
прескочите размаке за повезивање кључ дужине текста?
Ово је само Цезар шифра. >> Ох, извини, да.
Да, ми ћемо видети.
У Цезара шифре имамо око тога, јер
само окренуо знакове.
Ми их само ротирају ако су велика или мала.
Ви осећате прилично добро о овоме?
Слободно копирајте овај дом, узми га,
упоредите га са оним што ви написали.
Дефинитивно слободно превише послати питања о томе.
И опет, схвати да циљ овде са својим проблемом поставља
није да се ви да напишете савршену шифру за ваш проблем сетовима.
То је искуство учења. Да.
>> Назад на то док петља, ако је једнако нула,
па нулл само значи ништа, они само притисните ентер?
Нула је посебан показивач вредност,
и ми користимо нулл када желимо да кажемо
имамо показивач променљиву која упућује ништа.
И тако обично, то значи да је ова променљива, ова порука променљива
је празан, и овде, јер смо помоћу ЦС50 посебан тип стринг,
шта је ЦС50 стринг тип?
Јесте ли видели шта је када је Давид повукао назад хаубу у виду предавања?
То је фанки-то је показивач, зар не?
Ок, да >> је. Цхар *.
И тако заиста можемо да замени ово
овде са цхар * поруком,
и тако је ГетСтринг функција, уколико не успе добити низ од корисника,
она не може да анализирамо низ, а један случај у коме не може да рашчланимо ниску
је уколико корисник укуцава краја датотеке карактера, контрола Д,
што није нешто што обично радите, али ако се то деси
онда функција ће вратити ову нулту вредност као начин говорећи
"Хеј, нисам добио ниску".
Шта ће се десити ако се не стави поруку = нулл,
што је нешто што нисмо још увек ради?
Зашто би то било овде проблем?
Јер знам да смо разговарали мало на предавању о меморијским цурења.
Да, хајде да урадимо то, и хајде да видимо шта се дешава.
>> Василија питање је шта ће се десити ако не заправо имају
ова порука = нулл тест?
Идемо помицати до врха.
Ви момци могу коментарисати ово.
Заправо, ја ћу га сачувати у ревизији.
Ово ће бити Ревизија 3.
Шта ћете морати да урадите да покренете овај програм је да ћете морати да кликнете на икону зупчаника овде,
а ви ћете морати да додате аргументе за то.
Мораћете да га дају кључни аргумент, јер желимо да прође у аргументу командне линије.
Ево ја ћу да га дам број 3. Волим 3.
Сада зумирање назад, покретање програма.
То је трчање, прикупљање, гради.
Идемо. Она чека да буде затражено.
Ако сам у нечему као што откуцате здраво-где је то иде?
О, мој програм је сувише дуго да бежи. Ја сам јавинг предуго.
Ево га иде.
Сада сам укуцате здраво.
Ми видимо да се на одговарајући начин шифрује.
Сада шта се дешава ако радимо брзо ГетСтринг вратити нулл?
Запамтите, ја сам рекао да смо то урадили притиском контролне Д у исто време.
Ја ћу помицати овде. Ми ћемо га поново покренете.
Зграда. Ту иде.
Сада када сам ударио контроле Д
Имам ову линију која каже опт/сандбок50/бин/рун.сх, сегментација грешке.
Јесте ли видели раније?
>> [Студентски] Зашто је не-Извини? >>
[Студентски] Зашто нема језгро депонија у овом случају?
Језгро депонија-питање је зашто нема језгро депоније овде?
Питање је да може да постоји, али је језгро депонија је датотека
које добија чувају на хард диску.
У овом случају смо онемогућени основне сметлишта
на серверу трчања тако да немате људе сег Фаултинг
и изградњу тона основних депонија.
Али можете добити један.
Основни депоније су врста ствари које често можете онемогућити,
и понекад радите.
Сегментација грешка, да одговорим на ваше питање, Василије,
каже да смо покушали да приступите показивач
који није постављен да укаже на било шта.
Запамтите Бинки у споту када Бинки покушава да
иди приступили показивач који није упућивао на нешто?
У овом случају мислим технички показивач указује на нешто.
То указује на нула, што је технички 0,
али да се дефинише у сегменту који није доступан
ваш програм, тако да ћете добити грешку сегментирања
зато што не приступате меморију која је у валидном сегменту
као хеап сегменту или стек сегмент или сегмент података.
Кул.
Има ли још питања о Цезара?
>> Идемо даље. Погледајмо Ревизија 2 заиста брзо.
То је Вигенере.
Овде у Вигенере
ћемо проћи кроз овај прилично брзо, јер, опет,
Вигенере и Цезар су веома слични.
Заглавље коментар је пре,
# Дефине је раније да избегавате ове магичне цифре.
Лепо је ствар је да смо хтели да се преселе у
другачије писмо или нешто слично томе.
Уместо да ручно промените иде све 26 година у коду
можемо променити то 27 или спустите га
ако су користили различите азбуке, различитих језика.
Опет, имамо ту проверу аргумената бројања,
и заиста скоро да узме ово као предложак.
Прилично сваки програм треба да пишете,
ако је потребно аргументе командне линије-неки низ линија
која гласи овако на самом почетку.
То је један од првих тестова разума желите да урадите.
>> Ево шта смо урадили је да смо сигурни
кључна реч је била валидна, и то је била друга провера које смо урадили.
Приметите поново да смо одвојени од ова аргц и 2.
Имајте на уму да у овом случају једна ствар коју смо морали да урадимо је уместо
употребе да и ми смо желели да се потврди цео стринг,
и како да урадим да заправо морам да идем карактер по карактер
преко низа.
Нема добар начин да се позове на њега нешто
јер чак, на пример, да се ја вратити 0
ако не може да анализирамо цео број, тако да чак ни не ради.
Опет, лепо порука говори управо корисника шта се догодило.
Онда, опет, ми такође руковати случај где
корисник укуцава у контролном Д случајних карактера.
>> А онда Шарлот је питање раније о томе како смо успели да прескочите размаке
у нашем низу овде.
То је врста слична ономе што смо урадили са програмом МиСпаце
да смо урадили у одељку, а начин на који то ради
је да смо пратили број писама које смо ми видели.
Као што смо шетали преко порука низу, као што смо ишли преко карактера карактера,
пратили смо индекса као део нашег за петље, а онда смо такође прати
број слова, тако да не специјалних карактера, не-цифре, не-бели простор
да смо се видели у посебној променљивој.
И онда ово решење мења кључ
да се стварни кључ цео број, и то чини да је на лету,
непосредно пред онда иде за шифровање стварни карактер поруке.
Постоје нека решења која су била савршено сјајно превише
који би изменили нагоре приликом тестирања за пуноважност кључног је.
Поред уверивши се да је карактер и кључна реч
је алфабетски знак је такође показало да је у цео број
у 0 до 25 опсегу онда прескочите потребе да се то касније у овоме петљи.
Опет, ви овде видите ово је заиста потпуно исти код
који смо користили у Цезара у овом тренутку.
Радиш исту ствар, тако да је прави трик је фигуринг
како да укључите кључне речи у цео број.
>> Једна ствар која ми овде урадили да је мало густа
је да ми понавља ову фразу, претпостављам да би то назвали,
3 одвојена пута на линијама 58, 59 и 61.
Може ли неко да објасни шта се тачно ова фраза не?
То је приступ карактер, као што си рекао.
Да, то је [нечујан] лик у речи,
па то је број писама видели, јер ви само креће
је кључна реч када сте видели писмо,
тако да ће се ефикасно прескочите размаке и слично.
Да, баш тако.
И онда кад сте видели кључне речи празно само мод тако да се врати около.
Управо тако. То је савршено објашњење.
Оно Кевин рекао је да хоћемо да индексирамо у кључну реч.
Желимо да добијете нум_леттерс_сеен карактер, ако хоћете,
али ако нум_леттерс_сеен премашује дужину кључне речи,
начин на који смо се вратим у одговарајућем опсегу је користимо оператор мод
ефикасно обмотана.
На пример, као у кратком, наша кључна реч је сланина,
и то је 5 слова дуго.
Али видели смо 6 слова у нашем обичном тексту у овом тренутку
и шифроване 6.
Ми ћемо завршити приступа нум_леттерс_сеен,
што је 6, мод дужина речи, 5,
па ћемо добити 1, па шта ћемо урадити је да ћемо
приступите први унутрашњост карактера наше кључне речи у том тренутку.
>> Добро, било каква питања о Вигенере
пре него што наставимо?
Ви осећате прилично добро о овоме?
Цоол, супер.
Желим да се уверите да ви добијате прилику да виде код
да мислимо изгледа добро и имају прилику да уче од њега.
Ово ће бити последња ћемо користити простор за сада,
и ми идемо у транзицији, а ја ћу да идем у цс50.нет/лецтурес
тако да можемо да урадимо мало квиза преглед.
Најбољи начин мислим да почнемо да радимо квиз преглед
је да дође на ову страницу предавања, цс50.нет/лецтурес,
и испод сваког наслова недеље, па ако овде погледате на Недељи 0,
Видим да имамо списак тема које смо покрили у Недељи 0.
>> Уколико било који од ових тема изгледа непознато вама
дефинитивно ћете желети да се вратите и рибати белешке са предавања и евентуално
чак обрано кроз предавања, да их гледам поново ако желите
да добију осећај за оно што се дешава са сваким од тих тема.
Ја ћу додатно рећи ове године један од кул средстава које смо добили
Управо ове гаћице које смо створили, а ако погледате на Недељи 0,
немамо сви од тема, али имамо доста неке од њих,
неке компликованије оне тако гледају поново ове гаће
је добар начин да се те убрзати.
Конкретно, ја ћу да ставим у утикач за 3 на дну, јер сам их.
Али, ако сте се бори са двојности, бита, хек, та врста ствари,
бинарни је одлично место за почетак.
АСЦИИ је још једна која је добро да се превише видели.
Можете чак и да ме гледају на 1.5к брзином, ако идем превише спор за вас.
Пошто је коментар, слободно то уради.
>> Само да почне веома брзо, ми ћемо да прођемо кроз неколико ових проблема квиз
само да брзо стап кроз њих.
На пример, хајде да погледамо проблем 16 који сам добио управо овде на табли.
Имамо ову следеће обрачун у бинарном,
и желимо да покажемо никакав посао.
Ок, ја ћу да дам ово пуцањ.
Ви треба да пратите заједно са папиром,
а ми ћемо урадити ово стварно брзо.
Желимо да изврши следећи прорачун у бинарни.
Имам 00110010.
И ја ћу да додам на то 00110010.
За математику генија после заједно код куће,
ово је ефикасно множиш 2.
Почнимо.
Ми ћемо следити исти алгоритам додатак да радимо
када додамо заједно децималне бројеве.
Заиста једина разлика је у томе што смо петља назад около
када имамо 1 + 1 уместо када смо стигли до 10 година.
>> Ако пођемо од десне, веома брзо, што је прва цифра?
[Студентски] 0 >> [Нејт Х.]. 0.
Сјајно, друга цифра?
[Студентски] 1.
[Нејт Х.] Да ли је 1? 1 + 1 је?
[Студентски] 10.
[Нејт Х.] Тачно, па шта је цифра коју сам у праву пишем испод 2 оних додатих заједно?
[Студентски] 1, 0 или 0, а затим носи 1.
[Нејт Х.] 0 и носи 1, тачно.
Следећи горе, Василије, ти си на реду.
Шта је трећи >> [Василије] 1.
[Нејт Х.] 1, савршено. Кевин?
[Кевин] 0 >> [Нејт Х.]. 0, Шарлот?
[Шарлот] 0 >> [Нејт Х.]. Да, и шта да радим?
[Студентски] Тхе 1.
[Нејт Х.] А шта да радим? А онда сам носити 1.
Савршено, Сахб >> [Сахб] Сада имате 1.
[Нејт Х.] И да радим нешто овде?
[Сахб] Онда за следећи имате 1 зато што обавља преко 1.
[Нејт Х.] Одлично, тако да овде можемо завршити.
Кул.
[Студентски] Да ли 0 + 0 = 0?
0 + 0 = 0.
1 + 1, као што сте рекли, је 10, или 1, 0, радије.
10 је погрешно, јер за мене 10 означава број 10,
и то је ћеф од како смо га заступа када смо га пишем.
Ми представљамо број 2 за 1, 0, а број 10 је мало другачија.
>> Која је врста лепо о бинарном је да постоји заиста нису толико много
случајеви које треба да научите.
Има 0 + 0 = 0, 0 + 1 = 1,
1 + 1 је 0, а затим носи 1,
и онда можете видети овде на трећој колони с десна
имали смо 1, 1 и 1.
И 1 + 1 + 1 1,
и ви носите још 1.
Када радите бинарну додатак, прилично једноставно.
Ја бих то више пар њих да разум сами проверите
пре него што одете у, јер је то
Вероватно нешто што ћемо видети на квизу.
Сада ћемо да урадимо ово следећи као добро.
Хајде да урадимо проблем 17.
Идемо да конвертујете следећи број бинарног у декадни.
Имам 10100111001.
Запамтите у бинарном видео који сам урадио
Ходао сам кроз неколико примера, а ја сам показао како
све ради када то радиш у децималама.
Када радите у декадном Мислим да смо
у овом тренутку у нашим животима, тако течно томе да
то је прилично лако да занемаре механику како то заправо функционише.
>> Али да урадите брзу рекапитулацију, ако имам број 137
то заправо значи и поново, то је у декадном-
број 137 у децималне значи да имам 1 к 100 + 3 к 10 + 7 к 1.
То је све остане на екрану.
А онда, ако се осврнемо на ових бројева управо овде,
100, 10 и 1, видећете да су они заправо сва овлашћења 10.
Имам 10 м², 10 ¹, и 10 на нулу.
Имамо сличну врсту ствари у бинарном,
осим да је наша база, како га ми зовемо, је 2 уместо 10.
Ови 10с које сам записао овде на дну,
Овај 10 ², 10 ¹, 10 до нуле, 10 је наша база,
и експонент, 0, 1 или 2,
подразумева положајем цифре у броју који пишемо.
1, ако гледамо на то, овај 1 је у 2. позицији.
Тхе 3 је у 1. позицију, а 7 је у 0. позицији.
Тако смо добили различите носиоце испод за наше базе.
>> Након свега овога ве'лл-заправо, знате шта?
Урадићемо-где је моја ундо дугме идемо?
Ту иде.
Волим ово поништити ствар.
Након тога мислим бар за мене
Најлакши начин да започнете конвертовање бинарни број
или хексадецимална броја, где је база 16
а не 10 или 2 је да иде напред и написати
основе и носиоци за све бројеве у мом бинарном броју на врху.
Ако пођемо од лева на десно опет,
која је врста нелогично,
Вратићу се променити у црно овде, имамо 2 до 0. положај,
и онда имамо 2 ¹, 2 ²,
и онда 2 на 3, 2 до 4, 2 до 5, 6,
7, 8, 9 и 10.
Ове бројке сам писани од су сви експонати.
Ја сам само написао базе овде у првом 3 само за простор.
>> У овом тренутку ја ћу да наставим и ја заправо идем да избрише
ствари које смо урадили у децимални број, ако је то у реду.
Сви сте добили то.
Они од вас гледао на мрежи сам сигуран да ће моћи да ме уназад, ако желите.
Прелазак назад у затвор.
Сада, шта можемо учинити, ако ви нисте потпуно до брзине на својим овлашћењима 2,
то је тотално кул.
Дешава се. Ја разумем.
Једном сам имао интервју за посао, где ми је речено да треба да знају сва овлашћења од 2
кроз 2 до 30..
То није био посао који сам добио.
У сваком случају, ви можете ићи напред и радити овде математику,
али са бинарном не стварно смисла,
нити има смисла са децималном или хексадецималном било,
да уради математику где сте нуле.
Можете да видите да овде имам 0, 0 овде, 0 овде, 0 овде, 0 овде, 0 овде.
Зашто се то није имало смисла да урадим стварно математику
да израчуна одговарајућу снагу 2 за ту позицију?
Тачно, као Шарлот рекао, то ће бити 0.
Можда, као и себи уштедети време ако израчунавања овлашћења 2 није твоја јача страна.
У том случају потребно је само да га израчунате за 2 до 0, која је?
[Студентски] 1.
[Нејт Х.] 1, 2 до 3 који је-?
[Студентски] 8 >> [Нејт Х.] 8..
2 до 4?
[Студентски] 2. Жао ми је, 1.
[Нејт Х.] 2 до 4 је 16 година, тачно.
2 до 5, Кевин >> 32?.
[Нејт Х.] 32, 2 до 8?
[Студентски] 32 к 8, 256.
[Нејт Х.] Савршено.
И 2 до 10?
[Студентски] 1024.
[Нејт Х.] Да, 1024.
>> Када имамо ове бројеве можемо их све сумирамо горе.
И ово је место где је заиста важно да урадите неколико ствари.
Једна је успорити и проверите свој рад.
Можете рећи да постоји 1 на крају овог броја,
тако да дефинитивно треба да добије непаран број као мој резултат,
јер су сви они други ће бити чак и бројеве
с обзиром да је бинарни број.
Друга ствар коју треба да урадите је да дођете до ове тачке на тесту
а ти си то написао из довде
а ти понестаје времена
погледати на број бодова које је овај проблем вреди.
Овај проблем, као што можете да видите, ако скочите уназад мом лаптопу веома брзо,
овај проблем вреди 2 поена, тако да ово није врста тога
требало би да пролази кроз ако сте стварно у временском шкрипцу.
Али ми ћемо се вратите на иПад, и ми ћемо проћи кроз то веома брзо.
>> Волим радим прво мале бројеве
јер сматрају да лакше.
Волим 32 и 8, јер су заједно иду прилично лако, а ми смо добили 50.
16 и 1 добија 17.
Ту смо добили 57,
и онда можемо да урадимо остатак ово, па можемо да урадимо 57, 156.
Хајде.
Човече, па, хајде да видимо.
Имали смо 57, 256, и 1024.
У овом тренутку, радије бих само проћи.
Немам појма. Ја сам јасно треба да прочитате горе на ово.
7, 6 и 4, добићете 17.
1, 5, 5, 2, 13.
Онда смо добили 3, а онда смо добили 1.
1337.
Ускршње јаје, било ко?
Свако препознају овај број?
Крис препознаје број. Шта то значи, Цхрис?
[Крис] Леет.
Леет, па ако се осврнемо на ово, изгледа Леет.
Хакер ствари. Пази за ту врсту ствари на испиту или квиз, а не.
Ако видите такве ствари, а ви се питате "Ха"
то би заправо значило нешто.
Не знам. Дејвид воли га стави унутра
То је добар начин да се разум да провери.
Као ок, ја могу да видим шта се дешава.
>> То је недеља 0/Веек 1 ствари.
Ако се вратите на нашу лаптоп сада,
умањите, и пар других ствари.
Ту је АСЦИИ, што смо радили доста проблема са сетовима.
Овај појам престонице А. Шта је то стварно?
Знајући то је децимална цео број.
65 је оно што је мапиран у АСЦИИ табели,
и то је тхерефоре како рачунар га пише,
и тако смо све даље од ствари писањем
Карактер капитала и карактер мала
у неким од ових решења и проблема сетова које сте радили.
Неколико других ствари.
Имамо изјаве, боолеан изразе услове, петље, променљиве и конци.
>> Они Изгледа да сви имају смисла за највећи део?
Неки од ових термина је мало фанки времена на време.
Волим да мислим да изјаве као и за већину део нечега што се завршава са зарезом.
Изјаве попут к = 7, која поставља променљиву,
ваљда се зове к = 7.
Претпоставља к је такође тип који може да складишти број 7,
тако да је инт или евентуално пловак или кратка или знак,
тако нешто.
Боолеан израз користи ове двојника једнак
и прасак једнака или није једнако, мање него, већи него,
мање или једнако, све те врсте ствари.
Услови су онда, ако елсе изјаве.
Ја бих запамтите да не можете имати друго, без одговарајуће ако.
Исто тако, не можете имати друго ако без одговарајуће ако.
Петље, подсетимо 3 врсте петљи смо чекића у тебе
за последњих неколико секција и проблематичним сетова.
Користећи се а када сте све кориснички улаз,
користећи вхиле петље до одређеног стања је истина,
и онда оне за коришћење петље ако треба
знате који итерација петље се тренутно на је како ја мислим о томе.
Или ако радите за сваки карактер у низу желим да урадим нешто,
за сваки елемент у низу желим да урадим нешто у том елементу.
>> Теме и догађаја.
Ово нисмо покривени тако експлицитно Ц,
али запамти ово од нуле.
То је појам има различита сценарија.
То је и овај појам емитовање догађај.
Неки људи нису користили емитовање у својим пројектима у почетку,
који је тотално кул,
али то су 2 различита начина руковања ово питање већу конкурентност зову,
која је како ти програми за извршавање
или наизглед извршава у исто време?
Различити задаци приказују док остали задаци се такође приказују.
То је како је ваш оперативни систем изгледа да ради.
То је разлог зашто, иако, на пример,
Ја сам добио мој прегледач ради, ја могу да укључим Спотифи и пустите песму.
То је више од концептуалне ствари да разуме.
Ја бих да погледам на нитима кратких
Ако желите да сазнате нешто више о томе.
>> Хајде да видимо, ја верујем да постоји можда било
проблем на ово један од њих.
Опет, мислим да теме и догађаји нису нешто што ћемо покрити у Ц
само зато што је знатно теже него у нуле.
Ви не треба да бринете о томе постоји, али дефинитивно разумеју концепте,
разуме шта се дешава.
Пре него што кренемо даље, било каква питања о Недељи 0 материјал?
Свако осећа прилично добро?
Разумевање променљиве и шта променљива?
>> Идемо даље. Седмица 1.
Пар ствари овде које нису посебно покривене
У квизу преглед нужно и више концептуалне ствари о којима треба мислити.
Први је тај појам онога Соурце Цоде, компајлери и објекат код јесу.
Зна ли неко? Базил.
Да ли је објекат код-Мислим изворни код је оно што сте ставили у кланг,
и објекат код је оно зазвечати гаси, тако да рачунар може да прочита програм.
Управо тако.
Изворни код је Ц код који сте заправо откуцам.
Објекат код је оно што ћете добити из кланг.
То је 0с и 1с у том бинарном формату.
Онда шта се дешава када имате гомилу објекат фајлова,
кажу да сте израду пројекта или програма који користи више соурце цоде фајлова,
који по конвенцији су дати ц екстензију..
Зато имамо цаесар.ц, вигенере.ц.
Ако пишете Јава програме које им екстензију јава..
Питхон програми имају наставак често пи..
>> Када имате више. Ц фајлове, да их компајлирати.
Цланг избацује све ово бинарну ђубре.
Онда зато што само желите 1 програм
имате Линкер везу свих тих предмета фајлове заједно
у 1 извршну датотеку.
То је исто оно што се дешава када користите ЦС50 библиотеку, на пример.
ЦС50 библиотека је и да је х хеадер филе.
да сте прочитали, да # инцлудецс50.х.
А онда је такође посебна библиотека бинарни фајл
који је урађен да је 0с и 1с,
и да-сам заставу, тако да ако се вратимо нашим просторима, а ми изгледа заиста брзо
на шта се овде дешава када гледамо нашу кланг команду,
шта смо добили је да је ово наш изворни код датотеке овде.
Ово су гомила компајлера застава.
А онда, на самом крају, ови-ја заставе карика у
стварни бинарни фајлови за ове 2 библиотеке, ЦС50 библиотека и онда математика библиотека.
>> Разумевање сваку врсту намене фајлове '
у компилацији процес је нешто што ћете желети да буду у стању да
макар висок ниво преглед.
Изворни код Улази објекта код изађе.
Објецт кода фајлови повежу, и добићете дивну, извршну датотеку.
Кул.
Ово је место где можете добити грешке у више тачака
у компилацију процесу.
Ово је место где, на пример, ако узмете овај повезује заставу,
ЦС50 застава, а ви га изоставите у просторима или када сте покренули свој код,
ово је место где ћете добити грешку у повезује фази,
и линкер ће рећи: "Хеј, ти се зове функција ГетСтринг
која је у ЦС50 библиотеци. "
"Рекао си ми да је то било у ЦС50 библиотеци, а ја не могу да нађем код за то."
То је место где морате да га повежете у, и то је посебан
од компајлера грешке, јер компајлер гледа синтаксе и такве ствари.
Добро је да знате шта се дешава када.
>> Друге ствари да знају о томе.
Ја бих рекао да дефинитивно желим да погледамо на кратко типецастинг урадио Јордану
да разумемо шта ИНТС су испод хаубе,
оно слова су под хаубом.
Када говоримо о АСЦИИ и заправо погледате АСЦИИ табели,
ста да се ради нам даје под хаубом изглед
како је рачунар заправо представља капитал и цифра 7
и зарез и знак питања.
Рачунар такође има посебне начине да представљају
број 7 као цео број.
Она има посебан начин представља број 7 као плутајуће тачке број,
и они су веома различити.
Типецастинг је како кажете компјутер "Хеј, желим да конвертујете
из једне у другу репрезентације репрезентације. "
Зашто не можемо да погледамо то.
>> Такође бих да погледам кратко о библиотекама и на кратко компајлера.
Они говоре о процесу компилације,
оно библиотека је, и иди преко неке од ових питања која можда се питао.
Питања о недеља 1 материјала?
Да ли постоје неке теме за које се овде изгледају застрашујуће желите да покрије?
Покушавам да дува кроз већину ових ранијих тема, тако да можемо доћи до
показивачи и уради мало рекурзије.
Мисли?
Било да покрије?
Време је за неке можда чоколаду?
Ви момци раде кроз њега.
Идем да пијуцка кафу на мој.
Недеља 2.
Добро позив, добро позив.
У Недељи 2 Разговарали смо мало више о функцијама.
>> У првих неколико проблематичних сетовима нисмо баш пишем неке функције на свим
осим што функција?
[Студентски] Главни >> Главни. Тачно.
И тако смо видели различите костиме да је главни носи.
Тамо је онај у коме се нема аргумената,
а ми само реци празнину између заградама,
а онда је други где ми желимо да аргументе командне линије,
и као што смо видели, то је место где имате инт аргц и аргв стринг се низ
или сада да смо заиста смо изложени ниску да буде цхар да је
ћемо почети писање је као цхар * аргв и онда заградама.
У Проблем Сет 3, ви видели гомилу функција,
и спроводи гомилу функција, цртају, погледај горе, јагму.
Године прототипови су све написано за тебе.
>> Оно што сам хтео да причам о томе овде са функцијама веома брзо
је да постоје 3 дела за њих кад год пишете функцију.
Морате навести врсту повратка функције.
Морате да наведете име функције, а онда морате да одредите
аргумент листа или параметар листе.
На пример, ако би требало да напишем функцију да сумирам гомилу бројева
а затим се вратите на мени суму шта ће бити мој тип враћања
ако сам желео да сумирамо бројеве, а затим вратити суму?
Тада име функције.
Ако сам напред и пишем у зеленом, овај део је повратни тип.
Овај део је име.
А онда у загради измедју
Овде дајем аргументе,
често скраћено као аргс, понекад називају параметре за параметре.
А ако имате једну, само навести један.
Ако имате више да раздвојите један са зарезом.
А за сваки аргумент да се дају 2 ствари које су-Кевин?
[Кевин] Морате дати тип и онда име.
А онда је име, и име је име које ћете користити
да се односи на тај аргумент у суму функције,
у оквиру функције коју тренутно пишете.
>> Не морате да се, на пример, да ли ћу да сумирам,
рецимо, низ целих бројева-ве'лл уради инт низ,
а ја ћу себи дати неке витичасте заграде тамо-
онда када прођем низ на функцију СУМ
Ја га усвоји у првој позицији листе аргумената.
Али низ које сам прошао у не мора имати арр име.
Арр ће бити како ја мислим да тај аргумент у телу функције.
Друга ствар коју морамо да узмемо у обзир,
а ово је мало другачији од функција, али мислим да је то важна ствар,
је да се у Ц када пишем функцију овако
како да знам колико су елементи у овом низу?
То је донекле трик питање.
Разговарали смо о томе мало у одељку прошле недеље.
Како да знам да је број елемената унутар низа у Ц?
Да ли постоји начин?
>> Испоставило се да не постоји начин да се зна.
Мораш да га усвоји у одвојено.
Постоји трик који можете да урадите
ако сте у истој функцији у којој је низ проглашен,
и радите са стек низа.
Али, то ради само ако сте у истој функцији.
Када прође низ неку другу функцију или ако сте проглашен низ
а ти стави тај низ на гомили, ви сте користили маллоц
и такве ствари, онда све пада у воду.
Онда ти стварно треба да прође око
посебан аргумент или други параметар
Кажем ти колики је низ.
У том случају, ја бих желео да користите зарез-Жао ми је, то иде ван екрана овде-
и ја бих проћи у другом аргументу
и позвати га инт за дужину.
>> Једна ствар која би могла изаћи на квизу
вас тражи да напише и спроведе одређену функцију зове нешто.
Ако ми ти не дају прототип, па цела ова ствар овде,
цела ова збрка се зове функцију изјаву или функцијски прототипа,
ово је једна од првих ствари које ћете желети да заковати ако није дата
вама одмах на квизу.
Други трик сам научио је да
кажу ми да вам прототип за функцију, и кажемо: "Хеј, мораш да га напишем."
Унутар заграда које имате на квизу
ако приметите да је повратни тип и приметите да је повратни тип
је нешто друго осим празнину, што значи да функција не врати ништа,
онда једна ствар коју дефинитивно желим да урадите је да упишете
нека врста повратка изјаве на самом крају функције.
Повратак, а у овом случају, ми ћемо ставити празно, јер желимо да попуни празнину.
Али ово добија ли размишљате на прави начин о томе како ћу да се приближи овај проблем?
И то вас подсећа да ћеш морати да врати вредност
позиваоцу функције.
>> Да >> [Студентски]. Да ли стил примењује када пишемо код на квизу?
Такви као увлачењу и такве ствари >> [Студентски] Да.
Не, не толико.
Мислим да доста-ово је нешто што ћемо појаснити на квизу на дан,
али обично бриге о # укључује и такве ствари, то је некако споља.
[Студентски] Да ли треба да коментарише свој руком код?
Да ли је потребно да коментаришем руком писаног кода?
Коментаришући је увек добро ако сте забринути због делимичног кредита
или желите да комуницирате своју намеру да грејдер.
Али ја опет, ће се разјаснити на самом квизу и на квизу дана,
али ја не верујем да ће бити потребно да пишем коментаре, не.
Обично не, али је свакако једна од ствари где
можете да комуницирате своју намеру, као "Хеј, ово је место где ја идем са њим."
А понекад то може да помогне са делимичним кредита.
Кул.
>> Базил.
[Василије] Која је разлика између декларисање, рецимо, инт Ланг
у аргументима или параметара у односу проглашења променљиву унутар функције?
Вау, кафа је низ душник.
[Василије] Као што се ствари желимо да се стави у аргументима.
Да, то је велико питање.
Како бирате које ствари желите да ставите у аргументима
против које ствари треба да урадите унутар функције?
У овом случају ми смо укључени оба ова као аргументе
јер си нешто да онај ко ће је користити функцију збир
Потребно је навести те ствари.
>> Збир функција, као што смо говорили, нема начина да сазна
колики је низ је он добија од свог саговорника или ко користи функцију СУМ.
Она нема начина да сазна колико је велик тај низ је.
Разлог прођемо у овој дужини овде као аргумент
зато што је то нешто што ми у суштини говори позиваоца функције,
ко ће да користи функцију збир, "Хеј, не само да морате да нам дају низ
од Интс, имате да нам кажете колика је низ који сте нам дали је. "
[Василије] То ће обојица бити аргументе командне линије?
Не, то су стварни аргументи који би вам проћи у функцији.
>> Пусти ме да радим овде нову страницу.
[Василије] Као именом ће проћи,
[Нејт Х.] Ако имам маин (воид)
и ја ћу да ставим у повратном 0 доле на дну,
и рећи Желим да позовем функцију збир.
Хоћу да кажем инт к = збир ();
Да бисте користили функцију збир морам проћи иу низу које желим да сумирам
и дужина низа, тако да је ово, где
претпостављајући сам имао низ Интс,
кажем да сам имао инт нумбаз [] = 1, 2, 3,
врста употребе који хакован горе синтаксу тамо,
онда шта бих урадио је у збиру бих желео да прође
како нумбаз и број 3
да кажем функцију збир "Ок, ево низ желим да саберете."
"Овде је његова величина."
Да ли то смисла? Да ли то одговор на ваше питање?
>> На много начина је паралелно ради оно што радимо са главним
када имамо аргументе командне линије.
Програм попут Цезара шифри, на пример, да је потребно
аргументе командне линије неће бити у стању да уради било шта.
То не би знао како да се шифровање ако нисте рекли да је оно кључно за коришћење
или ако нисте рекли шта сте хтели да стринг шифровање.
Навело за улаз, ово је место где имамо 2 различите механизме
за узимање улаз у од корисника, за узимање података у од стране корисника.
За Проблем Сет 1 смо видели ГетИнт, ГетСтринг, ГетФлоат начин
од навело за улаз, и то се зове користи стандардни улаз поток.
То је мало другачија.
То је нешто што можете да урадите у једном тренутку насупрот
када покренете програм, када почнете да се програм извршава.
Аргументи командне линије су сви наведени када покренете програм који ради.
Ми смо се мешањем две од оних.
Када смо користили аргументе у функцији, то је слично као аргументе командне линије у главни.
То је када позовете функцију морате да кажете
шта је потребно да би се обавља своје задатке.
Још једна добра ствар да погледате и ја ћу ти гледаш у слободно време,
и био је покривен у квизу, је био тај појам обима
и локалне променљиве наспрам глобалних променљивих.
Да обратите пажњу на то.
>> Сада када смо ми на овом другом ствари,
У недељу 3. почели смо да причамо о тражењу и сортирање.
Претраживање и сортирање, барем у ЦС50,
је веома увод неке од теоријских делова рачунарске науке.
Проблем трагања, проблем сортирања
су велике, канонски проблеми.
Како вам одређени број у низу милијарди целих бројева?
Како вам се посебно име унутар именика
која је ускладиштена на вашем лаптоп?
И тако смо уведе овај појам асимптотско рун пута
да заиста израчуна колико дуго, колико то проблем су,
колико они узимају да реши.
У, верујем, 2011 је квизу постоји проблем који ја мислим заслужује
покривају веома брзо, што је овај, проблем 12.
О не, то је Омега.
>> Овде говоримо о најбрже могуће време извршавања
за одређеног алгоритма, а затим најспорије могуће покренути време.
Овај Омега и О су заиста само пречице.
Они су нотације пречице за казивање
колико брзо у најбољем могућем случају ће наш алгоритам рун,
и како споро у најгорем могућем случају ће наш алгоритам покренути?
Урадимо неколико њих, а они су такође били обухваћени
у кратко асимптотска запису, који сам високо препоручити.
Џексон је заиста добар посао.
Са бинарном претрагом, говоримо о бинарном претраге као што алгоритам,
а ми обично говоримо о томе у смислу његовог великог О.
Шта је велики О?
Шта је најспорији могуће покренути време бинарне претраге?
[Студентски] Н ²?
Затвори, ваљда слично томе.
То је много брже од тога.
[Студентски] Бинарни >> Да,? Бинарни претрагу.
[Студентски] То је лог н.
Лог н, па шта се пријавите н значи?
Она га половине сваке итерације.
Тачно, тако да у најспорији могућем случају,
рећи ако имате сортирани низ
од милион бројева и број тражиш
је или први елемент у низу или веома последњи елемент у низу.
Запамтите, бинарна претрага алгоритам ради гледајући средњем елемент,
видети да ли је то утакмица коју тражите.
Ако јесте, онда супер, ти га нашао.
>> У најбољем могућем случају, колико се брзо не бинарну претрагу трку?
[Студенти] 1.
1, то је константно време, велики Ø 1. Да.
[Студентски] Имам једно питање. Када кажете пријавите н, мислиш у вези са основом 2, зар не?
Да, па то је друга ствар.
Ми кажемо лог н, а претпостављам када сам био у средњој школи
Увек сам претпоставио да је дневник био база 10.
Да, па да, пријавите се база 2 обично је оно што ми користимо.
Опет, да се вратимо на бинарном претрагом, ако сте у потрази за било
елемент на самом крају или елемент на самом почетку,
јер почиње у средини и онда одбаците
год пола не испуњава критеријуме које сте тражили,
а ви идите на следећи половине и наредних пола и наредног дана.
Ако сам у потрази за највећим елемент у низу милиона целобројну
Ја ћу да преполови највише дневнику 1 милион пута
пре него што сам коначно тестирати и видети да је елемент тражим
је највећи или у највишем индекса низа,
и да ће се пријавити н, пријавите се за 1 милион пута.
>> Буббле сорт.
Да ли ви сећате алгоритам сортирања балон?
Кевин, можете ли ми дати брзу рекапитулацију онога што се десило у алгоритму сортирања балон?
[Кевин] У основи то иде кроз све на листи.
Она гледа у прве две.
Ако је први већи од другог То их свопови.
Онда пореди други и трећи, исту ствар, свопови,
Трећи и четврти, скроз доле.
Биггер бројеви ће пратити до краја.
И после колико много петље готови сте.
Тачно, па шта Кевин рекао је да ћемо гледати биггер бројеве
мехур до краја низа.
На пример, да ли ти смета ходање нас кроз овај пример, ако је ово наша низ?
[Кевин] Ви ћете узети 2 и 3.
3 је већи од 2, тако да их замене.
[Нејт Х.] Тачно, тако да смо заменили њих, и тако смо добили 2, 3, 6, 4 и 9.
[Кевин] Онда упоредите 3 и 6.
3 је мањи од 6, па их оставити,
и 6 и 4, ти би их замене јер 4 је мањи од 6 година.
[Нејт Х.] Добро, па сам се 2, 3, 4, 6, 9.
[Кевин] И 9 је већи од 6, па га оставити.
А ти ћеш отићи назад кроз њега поново.
>> [Нате Х.] Јел сам урадио у овом тренутку >> [Кевин] Но?
А зашто ја не уради у овом тренутку?
Јер изгледа као да ми је низ је сортиран. Гледам у њега.
[Кевин] Идите кроз њега поново и уверите се да нема више свопови
пре него што у потпуности могу да престанем.
Тачно, тако да морате да наставите кроз и уверите се да нема свопови
које можете направити у овом тренутку.
То је заиста било среће, као што сте рекли, да смо завршили
само да би 1 пролази кроз и ми сортирају.
Али, да би то урадили у општем случају заправо ћете морати да урадите изнова и изнова.
А у ствари, то је био пример на најбољи могући случај,
као што смо видели у проблему.
Видели смо да је најбољи могући случај н.
Ми смо ишли преко низа 1 сат.
Шта је најгора могућа случај овог алгоритма?
[Кевин] Н ².
А шта то личи? Шта би низ изгледа као да ће узети н ² време?
[Кевин] [нечујни] сортирају.
Тачно, тако да ако сам имао низ 9, 7, 6, 5, 2,
прво би 9 балон скроз горе.
После 1 итерацији ћемо имати 7, 6, 5, 2, 9.
Тада 7 би испливати, 6, 5, 2, 7, 9, и тако даље, и тако даље.
>> Морамо да прођемо кроз цео низ н пута,
а ви у ствари можете добити нешто прецизнији од тога
јер када смо преселили на 9 скроз горе у свом последњем могућем положају
знамо да никада нећете морати да упоредите против тог елемента поново.
Када почнемо да набубри и 7 горе
знамо да можемо зауставити када 7 је непосредно пре 9
јер смо већ у односу на 9 до њега.
Ако то урадите на паметан начин да то није искрено, мислим да много времена.
Нећеш да упореде све могуће комбинације [нечујан]
сваки пут када прођете кроз сваку итерацију.
Али ипак, када говоримо о томе горња граница кажемо да
гледаш н ² поређења све до краја.
>> Идемо назад, а пошто смо почели да се мало на кратко време
Ја бих рекао да дефинитивно треба да прође кроз остатак ове табеле,
попуните све напоље.
Размислите о примерима. Размислите о конкретним примерима.
То је заиста згодан и помоћи да урадите.
Нацртајте га.
То је врста стола да као идете кроз у рачунарству
стварно би требало да почне да знају ове напамет.
Ово су врсте питања која сте добили у интервјуима.
То су разне ствари које су добре да знате,
и мислим да о тим случајевима ивице, заиста схватите како да размишљају о
знајући да је за мехура сортирате најгори могући низ
сортирање са тим је онај који је у обрнутом редоследу.
>> Показивачи. Хајде да причамо мало о показивача.
У последњих неколико минута имамо овде
Знам да је то нешто са датотеком И / О том је прилично ново.
Када говоримо о показивачима разлога желимо да разговарамо о показивачи
Јер, један, када радимо у Ц
стварно су на прилично ниском нивоу у односу на већину савремених програмских језика.
Ми смо у ствари у стању да манипулишу променљиве у меморији,
схватим где они тренутно налазе у оквиру нашег РАМ меморије.
Када сте отишли ​​на узимати часове оперативних система ћете видети
да је то, опет, нека врста апстракције.
То заправо није случај.
Имамо виртуелну меморију која се крије те податке од нас.
>> Али за сада може претпоставити да, када имате програм,
На пример, када почнете да користите свој Цезарова шифра програм-
Ја ћу се вратите на мој иПад заиста брзо,
да је на самом почетку свог програма, ако имате, рецимо,
4 гигабајта РАМ меморије на вашем лаптопу,
добили сте поставили поред овог комад, а ми ћемо назвати РАМ-а.
И то почиње на месту ћемо да позове 0,
и завршава се на месту које ћемо звати 4 гигабајта.
Ја стварно не могу да пишем. Човече, то је хакован.
Када је ваш програм извршава
оперативни систем царвес до РАМ меморије,
и наводи различите сегменте за различите делове вашег програма за живимо
Овде доле је ово подручје врста ничијој земљи.
Када одете горе мало даље овде
сте заправо добили место где
код за ваш програм живота.
Тај стварни бинарни код, да извршна датотека заправо добија учитан у меморију
када покренете програм, а живи у код сегменту.
И као што је ваш програм извршава процесор изгледа у овом сегменту кода
да схвати шта је следећа инструкција?
Шта је следећа линија кода треба да изврши?
>> Ту је такође и сегмент података, а то је где су они стринг константе
складиште које сте користили.
А онда даље тамо је ово место зове крнтија.
Ми приступамо меморију тамо помоћу маллоц,
а затим према самом врху вашег програма
ту је стек,
и ту смо играли за већину почетка.
Ово није скали или било чега.
Много тога је веома зависна машина,
оперативни систем зависи, али ово је релативно како се ствари цхункед горе.
Када покренете програм и прогласи променљива зове к-
Ја ћу да скренем другу кутију доле, и то ће бити РАМ меморије, као добро.
И ја ћу да погледам.
Ми ћемо привући зупцасте линије да укаже да је ово само мали део меморије
а не све то као скрећемо на врху.
>> Ако сам изјављујем целобројну променљиву зове к,
онда шта сам заправо добити је мапирање
који се чувају у табели симбола мог програма
који повезује име к овом региону меморије које сам нацртана
Овде између вертикалних шипки.
Ако имам линију кода у мом програму који каже к = 7
процесор зна "Ох, добро, знам да к живи на овој локацији у меморији."
"Ја ћу да наставим и пише тамо 7".
Како она зна шта је ово место у меморији?
Па, то је све урађено у компајлирања.
Компајлер брине о расподели где свака од променљивих ће ићи
и стварање посебног мапирање односно повезивање тачака
између симбола и где се то дешава, променљива име
и где ће живети у сећању.
Али испоставило се да заиста можемо приступити у нашим програмима, као добро.
Ово постаје важно када почнемо да говоримо о неким структурама података,
што је концепт који ћемо увести касније.
>> Али за сада, шта можете да знате је да могу да направим показивач на овој локацији, к.
На пример, може да креира променљиву показивача.
Када смо креирали показивача променљиву користимо звезда нотацију.
У том случају, овај казе ја ћу створити показивач на инт.
То је тип баш као и свака друга.
Ми смо му дати променљиву као и,
и онда смо поставили је једнака адреси, на адресу.
У том случају, можемо да поставимо и да укаже на к
узимајући адресу Кс, који радимо са овим амперсанд,
и онда смо кренули и указати на то.
Шта ово у суштини не је ако гледамо нашу РАМ
ово ствара посебан променљиву.
То ће га зову и
и када ова линија кода извршава
заправо ће створити мали показивач који смо обично извуче као стрела,
и поставља И да укаже на к.
Да.
[Студентски] Ако је к већ показивач, да ли би само уради
инт * и = к уместо на амперсанд?
Да.
Ако је к већ показивач, онда можете подесити 2 показиваче једнаких једни друге,
у ком случају не би год укаже на к,
али би укаже на све што је к указује на.
Нажалост, ми смо ван времена.
>> Оно што бих у овом тренутку, можемо говорити о овом оффлине,
али ја бих рекао да почну да раде кроз овај проблем, # 14.
Можете видети већ постоји овде мало напуњена за вас.
Можете видети да кад изјављујемо 2 тројке, инт * к и и *,
и имајте на уму да указује на * поред променљиве је нешто што је урађено прошле године.
Испоставило се да је то слично ономе што радимо ове године.
Није битно где сте написали * Када сте проглашења показивач.
Али, ми смо написали * поред типа
зато што га чини веома јасно да сте проглашења показивача променљиву.
Можете видети да проглашења 2 тројке нам даје 2 кутије.
Овде када смо поставили к једнак маллоц
шта овај говори издваја меморију у гомили.
Ова кутијица овде, овај круг, налази се на гомиле.
Кс указујући на њега.
Имајте на уму да је и још није указује на било шта.
Да бисте добили меморије-да меморишете број 42 у к
користили би шта нотацију?
[Студентски] * к = 42.
Тачно, * к = 42.
То значи да пратите стрелицу и баци 42 унутра.
Овде где смо поставили и и к смо год смо указује на к.
Опет, ово је баш као што је рекао Кевин где смо поставили год једнак к.
И не указује на к.
Уместо тога, то је указујући на оно што је к указује као добро.
>> И на крају у овом последњем пољу постоје 2 могућих ствари које смо могли урадити.
Једна је да смо могли рећи * к = 13.
Друга ствар је да смо могли рећи: Алекс, знаш ли шта можемо да урадимо?
Могло би се рећи * к = 13 или-
[Студентски] Могло би се рећи инт Вхатевер.
[Нејт Х.] Ако се ово назива инт променљиву можемо урадити.
Такође смо могли рећи * и = 13, јер су обоје указујући на истом месту,
тако да смо могли да користе или променљива да стигнем тамо.
Да >> [Студентски]. Шта би то изгледало као да смо управо рекли инт к 13?
То би се проглашава нову променљиву зове к, који не би радио.
Ми би имали судар јер смо прогласили к да буде показивач овде.
[Студентски] Ако смо само имали ту изјаву по себи шта би то изгледало у смислу круга?
Ако смо имали к = 13 онда ћемо имати кутију, и уместо да стрелу
излази из оквира ћемо га извући само као 13 година.
[Студентски] У кутији. Ок.
>> Хвала за гледање, и срећно на квизу 0.
[ЦС50.ТВ]