[Powered by Google Translate] Давид Ј. Малан: У реду. Ово је ЦС50, и то је крај недеље два. Ако очекујете да буде гладан у ово време сутра, знам да ћемо да се сазове као мала група сутра, четвртак, 1:15 ПМ. Ту је овај УРЛ овде ако желите да РСВП. Простор је ограничен, тако да молим те опрости ако форма није испуњена у време када попуните ово. Други УРЛ иако то може бити од интереса је ово. Дакле, у само месец дана, курс ће бити доступна све шире путем ЕДКС, преко којих људи на Интернету ће бити моћи да пратите, ангажовати у току веома активно, у ствари. Они ће бити користећи ЦС50 Апплианце и ЦС50 разговарати и највише од разни софтверски алати који смо већ користе овај семестар. И једна од иницијатива бисмо желели да преузму као експеримент ове године је да се види колико садржај можемо превести на друге говори и писаних језика. Дакле, ако сте можда има интерес да учествује у овом пројекту, при чему ми ћемо обезбедити енглеског транскрипте и титлове за курс је предавања и шорц и семинаре и секције и слично - Ако течно говорите или напиши течно неки други језик, што би Волим да те укључе у овај пројекат, при чему се узме на једној или више од видео, преводећи их на језик познајете добро. Да вам дати осећај интерфејса, ту је ово веб-басед кориснички интерфејс да ћемо користити да ће у суштини креирање УИ овако. Ово је моје предавање пре неких Ноћ вештица. А на десној страни у црној боји, поред тих временских печата, видећете различите ствари које су дошли из уста тог дана. А онда испод њега ћете моћи да преведе на неком другом језику. Управо оно што је мапирање између, у овом случају, енглеском и, рецимо, шпански. Дакле, то је заправо врло разумљив алат. Можете уназад и брзо премотавање врло лако са пречице на тастатури. Дакле, ако желите да учествујете у овом експерименту и имају своје речи види и чита потенцијално хиљада људи тамо, молимо Вас да слободно да учествују. Сада једну реч о мачету од понедељка, да не бисмо послали претерано застрашујуће поруке. Да схвати да је радно време указују и као секције сугеришу је дизајн курса је веома много да су студенти сарађују и говори да раде кроз проблем поставе и проблеме заједно. И заиста је линија само своди на, опет, посао који на крају треба да поднесе би требало да буде ваша. И тако је, сасвим искрено - у радног времена, то је сасвим нормално - је потпуно да се очекује, чак и - да се дописује са неким пријатељи поред вас. Ако он или она се бори са неким темама, а ти си као, ох, па нека да ти дам увид у неке линије кода који сам написао. То је у реду. То се дешава. И то је веома повољна, мислим, са процесом учења. Где је линија, опет, добија прешао је када је глава нагнута над врста Овде сувише много секунди или минута за које заиста само да имају била деблокада прилика за свог пријатеља. И свакако, када се ствари размењују путем е-поште и Дропбок и слично, тамо је линија. Дакле, свим средствима, осећају удобно и осећају охрабрио да ћаскају са пријатељима и другови око псетс и још много тога. И само схватити да је оно што сте на крају достави заиста треба да буде производ вашег стварања а не неко други. Дакле, у истом стилу и умиљати створења, можда ћете Знам овог момка овде. Дакле, ово је хоррифицалли сираст филм из пре много година. Свако овде видели Спацебаллс? У реду. Дакле овде добар број. Дакле, ово је наш предивно академски начин увођења данас коначно појам криптографије. И тако је један од домена специфичних проблема за псет 2, који ће доћи Повратак касно сутра увече, да зарони у свет криптографије, која је уметност за криптовање или кодирања информације. А ово на крају односи на свет безбедности. Сада безбедности за већину нас долази у облику прилично световних механизама. Свако од нас има корисничка имена и лозинке. И сви ми имамо веома лоше корисничких имена и лозинки, највероватније. Ако је ваша лозинка је иста на више веб сајтова, то вероватно не најбоља идеја, јер ћемо разговарати на крају семестар. Ако је ваша лозинка је написана на лепљиве белешке - није шала - на вашој монитора, и то није нужно најбољи дизајн, али сасвим уобичајена феномен. А ако не користите криптографију за шифровање лозинке, они су посебно рањива. Дакле, ако мислите да сте паметни сте супер тако што скривене Реч документују негде на вашем хард диску који има све ваше лозинке, али то је у директоријуму који нико неће да погледа у, и то није баш сигуран механизам. И шта псет 2 ће увести ово уметност криптографије и кодирање информација, тако да ствари као што су лозинке све сигурније. Дакле, као да мотивише овај веома реалном свету проблем са веома не-стварном свету сценарију, дозволите ми да вам представим један од наших омиљених спотова овде из овог филм, Спацебаллс. [ВИДЕО РЕПРОДУКЦИЈА] -Шлем, ти ђаво, шта се дешава? Шта радиш са мојом ћерком? -Дозволите ми да представим сјајне младе хирурга пластичне, др Филип Сцхлоткин, највећи нос посао човек у читавом универзум и Беверли Хилс. -Ваша висости. -Нос посао? Не разумем. Она је већ имала операцију носа. То је слатко 16 присутни. -Не, то није оно што мислите. Много је, много горе. Ако ми не дају комбинацију ваздушне штита, др Сцхлоткин ће дајте ћерку назад свој стари нос. -Не! Одакле ти то? -У реду. Ја ћу рећи. Ја ћу рећи. -Не, тата, не. Ви не смете. -У праву си, моја драга. Ја ћу пропустити свој нови нос. Али нећу им рећи комбинацију без обзира на све. -Веома добро. Др Сцхлоткин, урадите ваш најгоре. -Драго ми је. -Не! Чекај, чекај. Ја ћу рећи. Ја ћу рећи. -Знао сам да ће радити. У реду, дај ми. -Комбинација је један. -Један. -Један. -Два. -Два. -Два. -Три -Три. -Три. -Четири. -Четири. -Четири. -Пет -Пет. -Пет. -Дакле комбинација је један, два, три, четири, пет. То је најглупља комбинација коју сам икада чуо у животу. То је врста ствари идиот би имати на свом пртљагу. -Хвала, ваша висости. -Шта си урадио? -Ја искључен зид. -Не, ниси. Ти искључен цео филм. -Мора да сам притиснуо погрешно дугме. -Па, стави назад. Ставите филм назад. -Да, господине. Да, господине. -Идемо, Ерна. Хајде, Гретцхен. Наравно да знам да увек ћу морати да вас наплатимо за то. -Па, да ли је то посао? Где је капија? -То је функционисало, господине. Имамо комбинацију. -Сјајно. Сада можемо узети сваки последњи дах свежег ваздуха са планете Друидиа. Шта је комбинација? -Један, два, три, четири, пет. -Један, два, три, четири, пет? -Да. -То је невероватно. Имам исту комбинацију на мом пртљагу. Припремите Спацебалл 1 за непосредну одлазак. -Да, господине. -И промените комбинацију на мом пртљагу. -Ау! [ЕНД ВИДЕО РЕПРОДУКЦИЈА] Давид Ј. Малан: невероватна филм који сте сад сви треба да виде. Дакле, овде је контекст да са несигурним подацима долази прилику да шифровање га и да га верати. И тако то, на пример, је пример шифроване поруке. То заправо каже нешто на енглеском језику. Али јасно је не сасвим очигледно. И ми ћемо доћи пун круг је данас измамио осим шта је то тајна Порука је. Али у стварном свету рачунара, ствари уопште не изгледају као да би могао Енглески бити фразе. На пример, ово је оно што сте могли наћи на стандардном Линук или Мац или Уникс рачунар у фајлу који је некада давно зове лозинку датотеку. Данас, то је била премештена на друга места. Али, ако се осврнемо на правом месту на систем, видећете не само вашу корисничко име или других људи на систем, али ћете видети кодиран верзија њиховог лозинком. Заиста, реч крипта тамо сугерише да је следећи ствар је шифрована. И ова серија наизглед случајних слова и знакова и бројева и тако даље може бити дешифрована само генерално знајући неку тајну - тајна реч, тајна број. И тако заиста, уметност криптографије коначно своди на поверење неких сортирање и знајући нешто што неко други не. Ми ћемо истражити ово мало подробније данас иу псет доћи. А сада реч о прошао / пао. Дакле, посебно, као што неки од вас су заронио у псет 1, апарата и веома нови свет за себе, схватио да фрустрације и конфузија и само техничке потешкоће треба очекивати. Посебно са првом псет, где постоји само толико ново, само добијање упознат са ЛС и ЦД и свих ових тајанствених команде у новом окружењу. И то је одвојен од стварног материјала и програмирање себе. Тако схватају, такође, да сигурно постоје радно време које постоје као структура подршке. Секције почети ове долази у недељу. Али што је најважније, ако осећате само да ово није свет за вас, схватите да је то заиста само треба времена. И то није било за ову прилику пре неколико година за мене узимања класу пасс / фаил, искрено, ја никада не бих ни крочио у учионици. И ви можете да промените до, рецимо, пети понедељак курса. Дакле, ако сте на ивици сада схватају да уместо главе у неки други воде заједно, да свакако размислите само промена да прође / пропаст. Опет, не постоји стварно ова култура овде на Харварду узимања ствари пасс / фаил јер свако заиста жели да постигне или оверацхиеве. Али искрено, ово је диван начин да покушава нешто да можда не бити упознат са вама. А ти ћеш завршити раде у већини случајева сасвим фино, можда много вашег изненађење. И у Конкретно, оно што ја мислим прошао / пао генерално ради, поготово што сте можда искусан са псет 0, ако сте ставили у 10 часова, 15 сати, 25 сати у неком псет - А ти си само лупа главу о зид, и то је све супер касно ноћу, али ви сте узели псет као 90% начин, знаш да не могу да схватим једну ствар - пасс / фаил заиста узима оштрицу класе као што је ово, где можете да сортирате од срећно кажу ок, знам да није савршен. Али ја сам радила дупе на ово. Прилично сам задовољан, где је завршио. И да ће испунити очекивања за прошао / није прошао. Дакле, имајте то на уму. У реду. Дакле, они од вас који су се борили да користе Универзитета Харвард Ви-Фи зна да постоји ЦС50 ССИД, Ви-Фи веза плутају да можда има боље среће за. То је мало иронично да лозинка за ово - ако желите да пробате повезивање на ово боље брзине и јавите нам ако није боље - један, два, три, четири, пет, сви пут до осам, јер је осам сигурније од пет. Дакле, ако вам треба Ви-Фи лозинке, повезивање ЦС50 бежично овде. Један, два, три, четири, пет, шест, седам, осам. И пост на ЦС50 Разговарајте ако и даље имате повремено повезивање питања, а ми ћемо пустити моћи да се знају за овај простор. У реду. Тако брзо задиркивање, нарочито за оне од вас који су навијачке дечаци или девојчице од свих ствари Аппле. Оно што сам ископао од неколико година уназад био тај фајл овде, илоцк.ц, само да врста чине више бетона и сложеније неки од више основних Ц Програми које смо написали. Зато сам отворио овај фајл, илоцк.ц. То је доступан на страници предавања за данас. На левој страни можете видети дугачку листу функција. Дакле, човек који је написао ово написали много функција, више него само главни. Он се овде користи гомилу библиотека. А ако почнемо кретање кроз, шта је ово заправо је веома Прво, ја верујем, прасак за оригиналну иПхоне. Када је желео да јаилбреак оригинални иПхоне, што значи унтетхер је од АТ & Т и заправо инсталирати посебан софтвер на њему и раде ствари да Аппле није желео да људи раде - добро, неко узео времена да схватим како тачно они би могли да искористе софтвер мане, грешке, бубе, у софтверу Аппле. И тако је рођен илоцк.ц. То ако је сачињен на рачунару и инсталирати га на иПхоне том био повезан са рачунаром преко, рецимо, УСБ кабла, то ће вам дати административне или корена привилегије на вашем иПхоне и пустите ви прилично шта год желите. И тако је дошло до ове фасцинантно мачке и миша игра између Аппле и остатак света а посебно као и они, као и многе компаније, покушајте да закључате њихова ствар доле, тако да можете само да урадите са тим шта они намеравају. Али захваљујући људима као што је ово и њихов разумевање ниског нивоа детаљи и, у овом случају, Ц програмирање и много од познатих конструкција које смо почели играти са, ви сте у стању да заиста искористе хардвер на начин како вама одговара, а не нужно неки корпоративни ентитет. Тако, на пример, немам појма шта се све ово ради. Али ГетВерсион звучи прилично једноставно. И изгледа да је ово функција која та особа написала. Узми неку цео као аргумент, не врати ништа, али Изгледа да петљи код петље за овде и ако је стању, ако стање, сломити, и некако се односи на верзију бројева. Ако смо доле помицати - иако многи од ових кључних речи ће бити нови, и ту је много функција у ту никада нисмо видели и не би никада видети преко Ток семестра - на крају крајева, она следи иста правила и логику да смо били играње са до сада. Дакле, ово је сувише стар да пуца своје иПхоне 4С 3с или 5с или ускоро, ових дана, али знам да је то све врло много потиче из овог света да ми смо дивед у. Па хајде да погледамо мало више једноставан пример. Ово је један, само да се загрејао са неким синтакси и неки други подаци тип који смо говорили о али нису стварно видели у Ц. Дакле, ово је фајл под поситиве1.ц. И по коментарима на врху, ово само захтева да корисник обезбеди позитиван број. Дакле, то је пример до-вхиле петље, што је лепо за корисника интерактивни програми где треба да каже кориснику да уради нешто. А ако они не сарађују, можете викати на њих, или одбије њихов допринос. Случај у тачки, ја ћу да радим линес 19 до 24 докле год корисник има Није ми дао позитиван број. Сада овај детаљ овде на линији 18, зашто сам изјављујем н изнад цела ова петље конструкт насупрот одмах на линију 22 где сам стварно стало да се н? Да? [ИНАУДИБЛЕ] Давид Ј. Малан: Да, тако да ово питање обима. А у року лаик, шта обим односи? Да? [ИНАУДИБЛЕ] Давид Ј. Малан: Да ли говорите мало гласније? ПРЕДСЕДНИК 1: Где можете приступити одређену променљиву. Давид Ј. Малан: Савршено. Где можете да приступите одређену променљиву. А генерално, правило до сада је била да обим неких променљива је дефинисана последњих заграда које сте видели. И тако у овом случају, ако сам направио грешку декларисања н на линији 22, та линија ће функционисати. Ја бих добити инт, а ја бих га ставио у ту променљиву н у складу 22. Али која линија кода би сада немају појма шта ја говорим о? Дакле 25 и испада 24, као и, јер у овом случају, то не потпада од заграда. Дакле, само мало сметња, али врло лако решити једноставним изјављујући променљива изван саме функције. Сада ћемо видети касније данас, можете отићи корак даље. А ти ни могао добити мало лењ - и то се не може препоручити, у целини - али чак и да се лењи и ставио глобално променљиву, да тако кажем, не унутар функције, а не унутар петље, али у самом фајлу, изван од свих функција које сте написали, као што сам овде на линији 15. Али ово је генерално неодобравањем. Али схвати да је ово решење понекад другим проблемима, као што ћемо коначно видети. Дакле, за сада, ми ћемо га оставити овако. Али, хајде да видимо да ли можемо да преправи ово само за почетак изражавања себе мало другачије. Дакле овај програм, само да буде јасно, је поситиве1. Дозволите ми да иде напред и овде у мом прозору терминала да поситиве1, Ентер. Саставља, ок. Идем да покренете поситиве1, притисните Ентер. Ја захтевам да ми дају позитиван цео број. Ја ћу рећи -1. То није посао. 0, 99, изгледа да ради. Можда не најригорознији тест. Али бар је лепо разум провера да смо на правом путу. Дакле, сада пусти ме напред и отворити верзију две о томе. А шта је другачије већ? Она спроводи исту ствар. Али, шта је скакао је као јасно другачије овај пут? Да, тако то воид у зеленом. Гедит је истакнуто у зеленој ову кључну реч познат као Боол, који је тип података. То не долази уграђен у свим верзијама Ц. Морате да укључите специфична библиотека. У нашем случају, укључују ЦС50 библиотеку, тако да смо имају приступ Боол. Али, у реду 18, изгледа да имамо Булову вредност која се овде зове захвалан. Тако да сам могао да се зове ово ништа. Али сам га захвалан само да некако пренесем неке семантичко значење. Дакле, првобитно на линији 18, ја очигледно нисам захвална, јер Булова вредност захвалан је иницијализован на лаж у линији 18. А онда се чини оно што сам овде урадио у редовима 21 до 23 је управо сам врста прерадила моју логику. Тако да нема функционално другачије. Али, у реду 22 сада, проверите да ли кам корисник је пружио је већи од 0, онда једноставно промените вредност захвалан на истина. И зашто сам то урадио? Јер у складу 25, очигледно, идем да проверим стање. До ове петље док захвалан је лажна. Дакле, ја предлажем ово као алтернативу верзији једном, јер је то најмање мало више интуитивно, можда. То је мало више утемељена на енглеском језику. Дакле, урадите следеће док нисте захвални или док захвалан је лажна. И овај пут, такође, ја очигледно не занима да се сети шта корисник откуцао у обавештењу, јер нема променљиве н. Па стварно, ја - мало бела лаж тамо. Функционално, програм је мало другачија када стигнемо до дна то зато што ја не сећајући се шта је н. Али ја сам хтео да покаже превише да, иако смо видели и ГетИнт ГетСтринг користи на десној страни знаком једнакости до сада, тако да памтимо вредност, технички, то није неопходно. Уколико из било ког разлога једноставно не занима да сачувате вредност, само желите да провери вредност, приметићете да можемо једноставно написати ово као отворен ГетИнт заграда, близу заграда. Та функција ће вратити вредност, као што смо говорили. То ће вам вратити инт. И тако, ако ментално мислите о овом догађају, када куцам у 99, ГетИнт враћа број 99. И тако концептуално, то је као да мој код је заправо то. Дакле, ако 99 је заиста већи од 0, онда захвални постаје истина. Затим ред 25 схвата оох, ми смо урадили, јер сада сам захвалан. А у складу 26, једноставно смо рекли, хвала за позитиван цео број, без обзира што десило се. Сада идемо овде радимо мало синтаксна шећер, да тако кажем. Хајде да видимо да ли можемо да очисти ову линију 25 са овим трећи и последњи варијације у поситиве3. Дакле, приметио је једина разлика сада је оно линија кода? Да, па 25. И ми смо заиста није видела овај трик још увек. Али смо видели знак узвика у понедељак, који означава шта? Дакле, не, или негација. Дакле, потребно Булову вредност и флип њену вредност. Истина постаје лажна. Нетачно постаје истина. Дакле, ја бих предлажем, чак мало више интуитивно од начина писања кода, јер сам још увек иницијализује захвалан на фалсе. И даље урадите следеће. Поставио сам захвалан тачно када дође време. Али сада заиста можете једноставно превести овај код вербално лево-десно, док не захвалан. Јер прасак, или знак узвика, означава појам не, тако да док Не захвалан. Дакле, опет, нисмо увели никакве нове концепте по себи. Разговарали смо о томе боолеанс назад када смо играли са нуле. Али схвати сада можемо само да почнете да пишете наш код у много различитих начина. Дакле, посебно у псет1, ако си некако боре да схватим пут напише неки програм, шансе су ти среће јер ће то бити број решења које се може десити на. На пример, ово је само три за чак најједноставније програма. У реду. А сада сећам у понедељак, оставили смо на овој белешци са повратком вредностима. Дакле, за први пут, написао је програм који не само да има главни, такође има своју сопствену функцију да сам овде написао. Дакле, у складу 31 кроз 34, ја сам реализовао коцке функцију. То није сложен. То је само пута пута, у овом случају. Али оно што је важно је да о томе водим улаз у форми и Ја враћам излаз у облику једног пута пута. Тако да сада имам могућност, слично сам се са инт сама, да позове ова функција позивом коцке функцију. А коцка функција узима неки улаз. А коцка функција даје неки излаз. И тако Насупрот томе, иф управо урадили нешто. То нису вратили ништа да ми је стало - иако је, како на страну, то ради врати вредност. Ти генерално га игнорисати. Принтф управо урадио нешто. Имао је споредни ефекат штампања на екрану. Насупрот томе овде, имамо коцке функцију, која заправо враћа нешто. Дакле, ово је генерално - за оне упознати са овим, то је прилично једноставан идеја. Али за оне који мање познају са том идејом доношења у улаза и добијање назад излази, хајде да пробамо нешто што супер једноставан. Да ли је неко пријатно долази на бину на кратко? Морате бити задовољни камером на тебе, као добро. Да. Ок, шта је ваше име? КЕН: Кен. Давид Ј. Малан: Кен. У реду, Кен. Хајде горе. Дакле, Кен ће бити овде функција врста. И идемо напред и урадите то. Хајдемо мало машту. Драго ми је што смо се упознали. Добродошли у центру пажње. У реду. Хајдемо овамо ово дугме. У реду. Дакле, овде имате модерну цхалкбоард. А шта сам ја јесте основна функција, на пример. А ја немам иПад у руци. Ја стварно не сећам како - па, заправо, не могу рећи. Ја стварно не имати добар рукопис. И тако дакле, желим да одштампате нешто на екрану за мене. Тако сам био главни програм. И ја ћу да вам кажем да ово је писао у мојој пилетином нуле и онда вам полагања улаз. Дакле, као блесав иако ова вежба је појам функције и позивање Функција и враћања функција стварно своди на ово. Ја сам главни. Управо сам написао принтф ("нешто") на екрану. Ја водим овај програм. И чим иф буде зове, она траје један аргумент - или један параметар, понекад - између двоструких наводника. Овде је тај аргумент. Ја то пролази на Кена. Сада је црна кутија написан известан број година да изгледа само зна како да одштампате нешто на екрану. Дакле, извршити. То није лоше. Дакле, врло добро. Дакле, сада Кен врши извршење. Да ли он треба да ми преда нешто назад? Дакле, не да смо видели до сада. Опет, не принтф заправо враћа број. Али ми ћемо игнорисати, јер за сада нисмо користили. Дакле, то је то за Кена. И тако сада главни враћа да изврши - Главни преузима контролу програма поново, јер те линије кода, принтф, врши извршење. И ми идемо о нашем путу извршава све друге линије су тамо. У реду. Дакле, хајде да пробамо нешто другачије пример. И овај пут овде, хајде да прво обришете овде екран. И овај пут, ми ћемо урадити цубинг функцију. Али овај пут, ја очекујем излазни вредност. Зато идемо напред и урадите то. Тако да сада имам линију кода која каже к = коцке (к). Тако заправо хајде - линија кода, сећам се, изгледа овако. к = коцке (к). Дакле, како ће ово да ради? Зато идемо напред и да вам поново бели екран. А ја ћу сада да напише вредности к, које су у овом тренутку у Време се дешава да се, рецимо, 2, да га једноставно. Тако сам записао на парчету папира вредности од 2, који је мој к вредност. Ја дам га Кен. КЕН: И само написати одговор? Давид Ј. Малан: Да, хајде да напише одговор. Ок. И сада он мора да ми врати нешто. Дакле - савршен. Лепо Сегуе. Дакле, сада ми је предао врати вредност од 8, у овом случају. А шта да радим са њим? Па, у ствари, да видимо. Набавите ово право. Шта ћу да радим са њом? Сада ћу да искористим ову вредност и заправо га чувати у оним Исти бита у меморији. Али, погледајте, ја сам некако боре овде. Ја сам мало збуњена јер где сам у ствари пишем вредност к? Јер оно што сам урадио је физички рука Кен комад папира који је имао вредност 2, која је била к. И заиста, то је управо оно што се дешава. Тако испада да, када позовете функцију, и проћи у аргумент свиђа "Хелло Ворлд", или да прође као аргумент као 2, генерално, ти си пролази у копију тог аргумента. И тако као што сам записао број 2 овде и предао га Кен, да мора Мислим да сам још увек негде копију вредности 2. Јер заиста, сад кад сам добио назад вредност 8, морам да се вратим у РАМ и заправо напишу 8 где сам некада имао број 2. Дакле, визуелно запамтите овај појам проласка у буквално копија вредности. Кен ради своју ствар, предао ме назад нешто - у овом случају, вредност као 8. И онда морам да урадим нешто са те вредности ако Желим да га задржим около. Дакле, све ово ће бити све превише упознат пре дуго. Хвала вам пуно за ову демонстрацију овде, Кен. У реду. Врло добро урађено. Дакле, хајде да видимо како ће на крају односи на неке функције називајући да смо овде. Зато ме пусти да иде напред и да нас врати у цубинг пример. И приметите да ако желимо да заиста почну да ово даље, идемо морати да буду свесни чињенице да број к који је већ био прошао у Овде је другачије од онога што је заправо буде усвојен у функцији. Дакле, опет, ово је прошло од копије ће постати сасвим германе у само једном тренутку. Дакле, хајде да погледамо нешто што баш не ради праву још. Идем да иде напред и отвори трећи пример бугги, који је погрешан по природи. И то се зове бугги3, а спроводи замене функције. Дакле, овде имамо главну функцију која је к и и произвољно иницијализован да 1 и 2, респективно. Могли би искористити ГетИнт, али ми само треба једноставну вежбу. Тако да је тешко-кодиране као 1 и 2. У линијама 21 и 22, ми смо изгледа одштампате Кс и И, једну по линији. Затим, на линији 23, тврдим ја замене ове вредности, тачка, тачка, тачка. Ја очигледно позвати функцију у складу 24 називом своп који узима два аргумента. То је потпуно легитиман за функције да се два аргумента. Видели смо то већ инт. Дакле, очигледно узима своп Кс и И. И као што јој име сугерише, надам се да ће то свап ове две вредности. Дакле, ја тврдим на линији 25, заменили. И репринт Кс и И под претпоставком да смо заиста они су заменили. Али, ако сам заиста покренути овај програм - дозволите ми да отворим прозор терминала. Дозволите ми да бугги3. Као што име сугерише, ово неће добро завршити. Јер, када сам ударио Ентер, приметити да је к 1. и 2. А ипак, на крају програма, још су, у ствари, исто. Дакле, на основу демонстрације управо сада са Кен, шта се заправо дешава? Па, хајде да зароните у ову свап функцију. То је супер кратак. То је само неколико линија кода дуго. Али шта је основни проблем заснован на једноставном прича испричана овде са Кен? Зашто је свап сломљено? [ИНАУДИБЛЕ] Управо тако. Тако смо складиштење на копији, не променљива себе. Другим речима, своп очигледно узима два аргумента, инт. И то је произвољно зове и б. А овде, ја сам прошао у Кс и И, који су редом 1 и 2. Али нисам буквално пролази у к. Нисам буквално пролази уи. Ја пролазу копију Кс и И копију. То је као скоро као да сте копирали и налепили у заменили вредности које желите заправо да манипулише. Дакле, ако је то случај, када сам програм почне извршавање линија 35, а затим 36 - кад дођем на ред 37, у овом тренутку у причи, шта је вредност? У овом тренутку у причи, линија 37, која је вредност у овом тренутку? Тако да само треба да буде 1. Зар не? Зато к донет као први аргумент. И ова функција само произвољно зове свој први аргумент,. Слично је и, други аргумент. И то је само произвољно зове други аргумент б. Сада овај дихотомија је заправо прилично једноставно објаснити. Размислите о томе. Нико од нас није срео особу која написао принтф. Па сигурно, он или она нема појма шта су наши варијабле 30 година касније се дешава да се зове. Дакле, мора да постоји разлика између онога што ви називате променљиве Функције пишете и шта ви зовете променљиве у функцијама које ћете позивања или коришћења. Другим речима, ја сам написао моје променљиве као кии. Али, ако је неко други написао свап функцију, он или она свакако Не знам шта би моји променљиве ће бити позван. Дакле, схватите да је то зато што имају ову дуалност имена. Технички, нисам могао да урадим ово случајност. Али они би и даље бити усвојен у што примерака. То би било чиста случајност естетски, ако тој особи која је писала своп је користио иста имена. У реду. Дакле, у овом тренутку у причи, ред 37, је 1. б је 2. А сада да наставим да их замене. Па пре свега, дозволите ми заправо урадили много више једноставно. Ја не знам шта су те три линије кода ради. Дозволите ми да урадим ово. б добија. добија б. Готово. Зашто је ово сломљено, логично? То је нека врста интуитивног ствар, зар не? Тако постаје б. И б постаје. Али проблем је у томе што чим линија 37 извршава, шта је вредност и б? Исто, 1. Зато што сте разбили, да тако кажем, ви сте променили б да буде једнак. Дакле, када линија 37 је извршена, то је сјајно. Ви сада имате две копије број 1 унутрашњости ове функције. Дакле, када сте рекли у реду 38, добија б, добро, ти си некако сјебана. Јер ти само додељивање 1 до 1. Ти си некако изгубио вредност коју стало. Дакле, у оригиналној верзији овога, погледајмо шта сам урадио. Ја уместо имао трећу линију кода који изгледа овако. Изјављујем привремену променљиву - тмп је веома чест назив за привремене променљиве. То је инт јер мора да одговара оно што ја желим да направим копију. Чувам копију унутар тмп. Дакле, када линија 37 је извршио, вредност је - брз разум цхецк - 1. Вредност је 2 б. А вредност тмп је 1. Дакле, сада сам извршава линију 38. Дакле, када линија 38 извршава, узима вредности б. И б је 2. Тако је сада 2. Дакле, у овом тренутку у причи, је 2, Б је 2, и тмп је 1. Дакле, сада логично, ми можемо само плоп ТМП је вредност у б. И ми смо урадили. Зато смо решили тај проблем. Нажалост, када сам покренути овај програм у овом облику, он заправо не мењате било вредности. Али, да буде јасно, зашто? Поправио сам логичан проблем од пре само тренутак. Али опет, ако сам покренути овај програм, Кс и И остају непромењене до краја овог програма извршење. [ИНАУДИБЛЕ] Давид Ј. Малан: Дакле, ми нисмо вратили ништа. Дакле, то је истина. Али испоставило се да је то мало проблем овде, јер до сада, Једино што смо били у могућности да се врате је једна ствар. И то је ограничење Ц. Можете да стварно врати једну вредност, у ком случају, ја сам некако заглављена овде јер сам могао да се врати нову вредност к или сам могао да врати нова вредност и. Али желим оба назад. Дакле, повратак није овде једноставно решење. Али проблем је у основи зашто? Шта смо заправо заменили? и б. Али и б су копије кии, што значи да смо управо урадили све ово ради - управо смо провели као три минута разговора о замени функција и сва три од ових променљивих. И то је одлично, савршено тачно у изолацији. Али и Б је обим само у овим линијама овде. Дакле, баш као за петљу, ако прогласе цео сам унутра за петља - слично, ако декларисања и б унутар функције које Ви сте написали, они су једина валидна унутар те функције. Што значи да чим своп врши извршење и ми идемо са линије 24 до линија 25, Кс и И нису променили уопште. Управо си изгубила много времена замене копије променљивих. Тако испада да је решење за ово је заправо не-очигледна. Није сасвим довољно да се врате вредности, јер можемо само да врати једну вредност. И стварно не желим да замене оба Кс и И у исто време. Дакле, ми ћемо се вратити на ово. Али за сада, схватају да питање суштински произилази из чињенице да и б су копије. И они су у свом обиму. Па, хајде да покушамо да реши ово на неки начин. Дозволите ми заправо помицати овде и отвори се, рецимо, четврта варијанта ово, бугги4. А шта је ово? То је слично, али једноставнији проблем да погледате пре него што узме нож у реси. Овај програм се зове прираштај. И очигледно је иницијализује на 1 к цео број у линији 18. И онда тврдим к 1. Ја сам тада тврде увецава, тачка, тачка, тачка. Онда позовите прираста. Али онда у редовима 22 и 23, ја тврдим да је то било увећава. Тврдим к је сада шта год да је, 2 вероватно. Али овај програм је луд. У чему је проблем? Да? [ИНАУДИБЛЕ] Давид Ј. Малан: Тачно. Дакле, к је очигледно проглашен на линији 18. То је унутар заграда ГЛАВНИ а. Дакле, једноставан одговор је у томе, па, к постоји овде. То не постоји у линији 32. Дакле, овај програм заправо неће ни саставити. Компајлер, када покушам састављања овог кода, ће викати на мене о неком необјављеном идентификатора или нешто у том смислу. У ствари, хајде да пробамо. То је направити бугги4. Ту је. Коришћење непријављеног идентификатора к у линији 32. И заправо, будимо експлицитнији овде данас, тако да је то корисно у Радно време и код куће. Приметимо да је мало загонетно написано. Али чињеница да кланг има викао на нас, говорећи бугги4.ц: 32:5, је заправо корисно. То значи да је грешка на линији 32 на позицији карактера пет. Тако један, два, три, четири, пет. То је, у ствари, где је проблем. А такође треба имати на уму при радног времена и код куће, ја сам срећан овде. Имам једну грешку. То ће да буде релативно лако поправити. Али, ако добијете цео екран пун неодољив грешци, опет, Схватамо да Најнижи човек да буде само симптом Највиши они. Дакле, увек јури доле своје грешке од врха на доле. Јер постоји само можда Тратинчица ланац ефекат који вас сугерише имају много више проблема него што стварно раде. Па како смо могли ово поправити ако је мој циљ је да повећате к? Шта је то? Ок. Дакле, можемо направити к глобална. Узмимо пречицу који сам упозоравао и раније. Али врага, ми само треба брзо поправити. Па рецимо инт овде. То чини к глобална. Дакле, сада главни има приступ до ње. И прираст има приступ до ње. И тако пусти ме напред и да састави ово сада. Направите бугги4, Ентер. Изгледа да сада саставити. Хајде да покренемо бугги4, а изгледа да се заиста ради. Сада је то једна од тих ствари - како ја кажем, не како ја радим, као што сам управо овде урадили. Јер у принципу, наши програми ће добити много занимљивији и много дуже од тога. А ако ваше решење проблема зивотних је само ах, стави све променљиве на врху датотеке, врло брзо не добију програми хоррифицалли тешко управљати. Постаје све теже да смислим нове имена променљивих. Постаје све теже да схвате шта променљива ради шта. И тако у принципу, то није добро решење. Дакле, хајде да урадимо то боље. Ми не желимо да овде користе глобалну променљиву. Ја не желим да повећате к. Тако да сам очигледно могао - на крају крајева, то је нека врста смешне приче, јер смо управо урадили. Али ако ја не знам о том оператеру, или није дозвољено да промените га у главни себи, како би други могао да применим Кена овде, ово Време не коцка, али да повећате? Како да променим овде ову ствар? Да. [ИНАУДИБЛЕ] Давид Ј. Малан: Добро, добро. Па зашто не бих прошао у к? И онда, уместо да га врати, зашто не бих се врате к + 1? Сада, још пар ствари да се овде променити. Ја сам на правом путу. Шта још треба да подеси? Неко други. Да? [ИНАУДИБЛЕ] Давид Ј. Малан: Морам да променим тип повратка прираста јер није то поништава. Празнина значи ништа не враћа. Али јасно је, сада је то. Дакле, то треба да се промени на инт да буде у складу са оним Ја стварно враћам. Сада је нешто друго и даље луд овде. Да? [ИНАУДИБЛЕ] Давид Ј. Малан: Па морам да повећате к? [ИНАУДИБЛЕ] Давид Ј. Малан: Ах, тако ми треба да прође к. Зато морам да урадим ово. Дакле прототипа, морам да променим ово овде. Дакле, ово мора да постане инт. Ово мора да постане - хмм. Ја стварно имам бубу овде доле. Хајде да поправимо ово прво. Шта би то заправо било? Дакле, то мора да буде инт нешто. То би могао да буде к. Али искрено, ако почну да позивају све своје к променљивих, то ће добити све мање и мање јасно шта је шта. Па хајде да произвољно бирају другу конвенцију именовања за моје помоћне функције, функције пишем. Ми ћемо га зову. Или бисмо могли да га зовемо - назовимо га евен_нумбер бити још јасније. Па онда морам да се врати све што је број 1 плус. А сада морам да промените једну другу ствар овде, а један друга ствар овде. Шта ја имам да се промени на линији 21 прво? Морам да га доделите к. Тако да не могу тек тако звати к прираста. Морам да се сетим одговор променом вредности к на левој страни. И мада је к сада лево и десно, то је потпуно у реду, јер десна страна добија прво извршити онда бива плоппед у лево рука ствар, к у овом случају. И онда на крају, ово је сада лако поправити. То само треба да одговара оно што је доле. Инт број. У реду. Дакле, цела гомила промена за стварно глупо функцију. Али представник ствари које смо све ћемо желе да раде. Тако да бугги4. Сам зезнуо сам негде. Ох, мој Боже. Пет грешака у, рецимо, шест линија програм. Дакле, шта је било на линији 18, карактер 5? У реду. Зато морам да прогласи овај Инт. У реду. Дакле, хајде да видимо, гомилу других грешака. О мој Боже. 19, 18, 21. Али опет, хајде да обришете екран - Контрола Л овде - и поново покренути кланг. Дакле, пет проблеми заправо само то једно. Дакле, сада хајде да бугги4, Ентер. Уф. к је правилно повећава. У реду. Сва питања о томе како да повећате број? Да? ПРЕДСЕДНИК 2: Зашто је то можете само да промените к на броју у променљива име и то ћемо знати на шта мислите? Давид Ј. Малан: Добро питање. Како то да ја могу променити к на броју, а програм ће знати одмах? Дакле, опет, мисле о томе као ове апстракције. Дакле, ако сам ја главни и Кен је постепен, искрено, не занима шта Кен зове његов иПад. Не занима ме оно што он назива све што има везе са његовом спровођењу ове функционалности. Дакле, ово је имплементација детаљ који сам, главни, не морамо да бринемо о томе. И тако једноставно мењање доследно унутар функције, број овде и број овде, то је све што је потребно тако дуго док сам компајлирате. То је нешто као, ако мислите о - многи од нас, они са вама возача лиценце који су вођени, или ако чак сам возио у аутомобилу - већина нас нема појма како ауто ради испод хаубе. И буквално, ако отвори хаубу, највише од нас - укључујући и мене - неће да знам шта тражимо. Некако као да сте можда осећате са стварима као што је овај сада. Али ми заиста не морају да брину како ауто ради. Ми не морамо да бринемо шта све шипке и клипова и кабловима унутар ауто се заправо ради. Дакле, нешто као оно што ви зовете клип није битно овде у овом случају. Иста идеја. Да? [ИНАУДИБЛЕ] Давид Ј. Малан: Ако пре било више користи од променљивом ка тренутку, ви, програмер, морати да их мењају свуда. Или можете да урадите буквално Филе, Мени, а затим Финд / Реплаце, тако нешто. Али ћете морати да се те промене. Морате бити доследни. [ИНАУДИБЛЕ] Давид Ј. Малан: Посебно наређење као и овде? Ако је ово био други инт број? Да. Дакле, да би битно када позивате функцију. Дакле, ако сам се зове пораст овде са нечим нешто запета, постоји директна мапирање. Прва променљива, шта год да се зове, је направио копију првог Аргумент овамо. Нажалост, ово не би требало да буде заграда. Други аргумент линије са другом. Тако да би, да је важно. У реду. Жао ми је дуг пут до тамо. Остала питања? У реду. Дакле, хајде да видимо, ако не могу да сликам слику о томе шта се заправо дешава Овде испод хаубе, да тако кажем. Дакле, ово је правоугаоник који могу да представљају меморију рачунара. Дакле, чак и ако немате појма колико меморије ради или колико РАМ радови, најмање Претпостављам да имате гомиле ових дана. Имаш мегабајта њега. Имаш гигабајта њега. И ми знамо из недеље нуле да бајт је само шта? 8 бита. Добро, па 8 нуле и јединице. Дакле, ако ваш рачунар има свирку РАМ, две свирке РАМ ових дана, имате милијарди или 2 милијарде бајтова меморије, или око 8 милијарди динара, или 16 милијарде бита, унутар рачунара. Сада за разлику од малог вунаста Вилија пример, није магнетне честице обично више. Све у лаптоп бар је солид стате дискова, ССД, да Управо нема покретних делова. То је све електронски. То је све струја заснива. Па мислим, међутим, овог правоугаоника као само представља једну или две гигабајта меморије коју имате. Дакле, то је комад меморије. Сада свет информатике има неку врсту подељена искључен комада меморије да раде различите ствари. Тако на пример, ако је ово рачунара РАМ-а - како је предложио правоугаоник тамо - Испада да по обичају, на врху меморије, тако да да говоре, генерално оно што се зове текст сегмент. То су нуле и јединице које сте сачинили. Дакле, када смо гледали испод хаубе шта а.оут је, све су нуле и јединице - када покренете програм, те нуле и јединице се учитавају са хард Погон у нешто што се зове РАМ-а. И у РАМ, они ставили на врху. Сада међувремену, имате и друге ствари. Иницијализују подаци, неиницијализоване податке. Та два ирок круг меморије односе на глобалне променљиве, које не користи често. Али понекад, ако то урадите, они завршавају тамо као добро. Затим, ту је нека друга ствар. Енвиронмент променљиве, које нећемо провести много времена на. Али онда две важне ствари које ће вратити током ове семестар, стек и гомила. Дакле, већина меморији рачунара је резервисан када је покренут програм за нешто што се зове штос и нешто што се зове гомиле. А ми нећемо да разговарамо о гомили данас, али ћемо разговарају о стека. И стек је требало да дочара визуелни попут трпезарији оброк касете у Матхер кући, или где год да се налазите, где трпезарија особље очистите их сваки дан. Они стек их од пода на горе. А слично у меморији, постоји ова идеја стављања нешто на стек, стављајући нешто на стек, стављајући нешто на стеку. А шта ми подразумевамо под овим? Па, хајде да зумирате на само доњој половини слике, ваш компјутер РАМ-а, да предложи следеће. Испада да када покренете програм као а.оут или здраво, шта год Програм је да сте написали, опет, ти нуле и јединице су учитан са вашег хард диска - што је дугорочно складиштење, остаје тамо чак и када извадите утикач - учита у РАМ. РАМ је бржи од хард дискова. То је мање од хард дискова. Али то је место где живи програми док сте их приказују. Дакле, два пута кликнете на програм на Мац или ПЦ - то је учитан из хард диск у РАМ. Чим се то учита у РАМ, и нуле и јединице иду у правцу врха, тзв текст сегмент. Али онда, чим је ваш програм заправо почиње са радом, главна Функција се позива. И главно, као што смо видели, често има локалне променљиве. И она има Интс и гудаче и слова и као. Дакле, ако ваш програм који сте написали или програм који сте двапут кликнуо користи неке променљиве унутар главни, они завршавају на дну гомиле сећања, да тако кажем. Сада конкретније, шта то заправо значи? То само значи да ако ћемо пребројати ствари - ако смо ишли на број бајтова РАМ меморије на вашем рачунару, приметићете да ово може бити бајт број нула. Ово може бити бајт број један, два, три, четири, пет, шест, сви начин до свиђа - 2 милијарде ће бити све тако горе на врху. Другим речима, када говоримо о РАМ меморије или у смислу бајтова, она само значи да је неко одлучио шта да нумерисати сваки од ти комади меморије. Дакле, када вам је потребно 32 бита за инт, или вам је потребно 8 битова за знак, где они завршити у меморији? Па концептуално, они само завршити на дну ове ствар се зове штос. Али оно што је интересантно је сада када је главни зове функција. Претпоставимо функцију зове трла, само произвољно име. Шта се дешава је главни налази на дну ове гомиле меморије. Бијело сада је стављен на врху главни у меморији. Дакле, све локалне променљиве које трла је завршити врсту концептуално горе оне у главни. Ако трла позива другу функцију која се зове бар оне променљиве завршити овде. Ако трака зове нешто друго, овде, овде, овде. Дакле, оно што је занимљиво у вези покретања програма је у томе што ви називате функције, и као те функције позива функције, а као те функције позива функције, правите ову гомилу функција у меморији. И само једном у функцији повратка да почнете да се вратим ту меморију. Зато је један од најлакших начина да останете без меморије у рачунарском програму је написати функције које никада не врате. Тако, на пример, да покажу колико са намерно бугги програма. Дозволите ми да иде напред и да # инцлуде инт маин (воид). И ја ћу да урадим, док (2> 1), што се вероватно неће никада промените на нас. И дозволите ми да иде напред и да се сада принтф. Заправо, то ће бити мање визуелно занимљива. Хајде да то урадимо. За инт (и = 0 и> 0). Хајде да направимо ову грешку, и + +. И немојмо принтф овде. Хајде да вежбају оно што сам проповедао. Хајде да овде имамо метод. Празнина хор, а ми ћемо рећи инт. А онда ћу да кажем, иф - ох, хајде да то више занимљиво. Хајде да ствари не штампа ништа. Хајде само то. Цхорус (и). У реду. Дакле, ово је луд, јер зашто? Правим ово што ја идем, јер програм не заправо ништа интереса. Али то није циљ. Циљ је да се напише програм чија је главна функција шта ради, очигледно? Позив себе. И заправо, не треба петљу. Хајде да поједностави ово само како да не изгуби из вида стварно фундаментална грешка. Главни позиви хор да пева неку хор. Онда сам урадио нешто глупо, и ја сам имао рефрен позива хору, јер сам претпоставио неко хтео да га спроведе можда. И сада то неће још да састави. Морам да урадим шта? Треба ми прототип, сећам се. Дакле, потребно је да се овде рефрен воид (инт);. Дакле, сада, ако ја одем доле - заправо, хајде да користите већи прозор. Идемо напред и да хор. Идемо напред и да хор. Коришћење неидентификованог и давалац изјаве. Ох, то је било глупо. Не треба аргумент. Хајде само то. Жеља ми је започео овај начин. Било би много лакше програм за писање. Тако тамо. Сада идемо до мене терминалу, поново покренути кланг. И идемо. То је било заиста брзо. Шта се заправо десило, иако? Па, сада ћу додати линију за штампање, тако да можемо да видимо. Дакле, дозволите ми да кажем иф, хајде да кажем, ја сам овде. Ок, нема променљиве, ми ћемо то оставити тако. Дозволите ми да поново покрене направити. Дозволите ми да поново покренути хор. И хајде. Настави. Као на страну, зашто је не срушио још? Сегментација грешка се десило пре супер брзо. [ИНАУДИБЛЕ] Давид Ј. Малан: Тачно. Дакле, потребно је време да се одштампа. То је само потребно више рада на делу рачунара. И то је то. Сегментација грешка. Па приметио колико брзо програми покренути. Ако не штампате ништа, супер брзо. Али ми увек имамо ову грешку јер сегментирања шта се дешава? Па, ако ви мислите о томе рачунара меморија је постављен, овај дешава да се главни. Али овде - хајде да зовемо хору, и назовимо то хор. А сада, ако ја у праву моје естетику, ово је само рећи рефрен, хор, хор, хор, хор, хор, хор, ад наусеум. И на крају, шта ће се десити? Ако велика слика буквално је ово, шта се дешава само концептуално? Штос прекорачења гомиле. Или још горе, само преплавили све, укључујући текст сегменту, што је су нуле и јединице које представљају Ваш програм. Укратко, ово је само супер, супер лоше. Зар не? Ваш програм је у спирали ван контроле. Ви користите начин више меморије него што сте сви намењен због глупа грешка, у овом случају. Или у овом случају, врло намерно учињено функција се зове. Сада то није све лоше. Функције зову себе заправо има велику моћ када га користите правилно. Нисам га користио правилно овде. Дакле, ово није све тако лоше. Али чињеница да сам заправо никада не престају називајући себе је фундаментална слабост овде овог програма. Дакле, где идемо са свим овим? Па, шта се заиста дешава? Када зовем прираст функцију, као што смо радили у тим примерима, Имам вредност као 1 да прођем унутра Прођем у копији број један. Дакле, дешава се следеће. Зато идемо у прирасту пример. И овај момак овамо. Дакле, ево шта се заправо дешава. Када сам позвао прираста, и ја прошао у к, сликовито шта је дешава овде је ово - ако имам вредност од 1 сачуване овде, а ја заправо зовем прираштај, који се сада зове рефрен - Да, то ме одбацивање овде. Дакле, назовимо то прираста. А ми не знамо шта је то следећа функција ће бити. Дакле, шта се заправо дешава је овде негде у главни имам комад меморија која је чување број 1. Када зовем прираста, ја користим други комад сећања, али сада сам имају примерак 1. Када сам инкрементирање ту вредност, ово постаје 2 - страшно написан Екран овде. Али онда, шта се дешава чим прираст повратка? Ова меморија само добија враћен на оперативни систем, што значи да сви Урадио си ништа корисно. Онај који је првобитно садржана у главном је још ствари тамо. Дакле, где идемо са овим? Па, испада да у меморији имате ово бацк то бацк редослед бајтова које можете ставити ствари унутра И испада да смо већ видели нешто што подразумева стављање ствари бацк то бацк враћа се назад. Шта је ниска, на основу једне недеље и сада недеље два? Дакле, то је само збирка карактера. Тако испада, баш као што можете ставити бројеве у меморији, слично можете стави знакова у меморији. А када почнемо стављајући знакова у меморији бацк то бацк враћа се назад, испада да користи најједноставније ствари као за петљу или вхиле петље, можемо прелазили - слева на десно преко ликова у низу - и почети масирањем их у различите ликове заједно. Могла да постане Б. Б може постати Ц. Тако да на крају, можемо узети Енглеском реченица која заправо има смисла и конвертује сваки од оних писма један по један од ходања кроз сећање нашег рачунара остављено Право да се заиста шифровање. Па хајде да узмемо овде пет минута паузе, а кад се вратимо, ми ћемо почети овај процес кодирања информација. У реду. Дакле, пре него што зароните у неком крипто и ове ствари називају низови, дозволите ми да пауза за сва питања јер се осећам као да сам стварно некако смушено неких те теме. Дакле, хајде да поправим сад ако можемо. Дакле, ми смо само причали о повратку вредностима. Разговарали смо о аргументима. И разговарали смо о овом појму, који ћемо вратити у недељама које дошао, посматрања меморију као гомилу ових наслагане тацне, да тако кажем. Од дна горе, тако да сваки носач које добија стави на стек представља функција која се тренутно зове. Има ли питања? Па како о - дозволите ми да покушам постављам питање. Стално кварење, али сада то је - Био си све видео лице дечака. Тако ћемо се вратити на то. Зато ме пусти да поставим питање овде. Дозволите ми да поједностави назад на оно што је било пре неких наших ранијих К & А. А чињеница да прираст има отворену заграду, инт број, затворен заграда. Шта инт број представља? [ИНАУДИБЛЕ] Давид Ј. Малан: аргумент. Добро, али шта је аргумент? [ИНАУДИБЛЕ] Давид Ј. Малан: Извините, шта је то? ПРЕДСЕДНИК 3: Нешто што ин проћи Давид Ј. Малан: У реду. Дакле, нешто што прође унутра И уопште, то је само улаз. Ако пишете функцију и ту функцију је сврху у животу је да урадите нешто мало другачије сваки пут када га користите, онда једини начин за то заиста десити да изгледа да га обезбеди улаз тако да се може да уради нешто другачије са тим улазом сваки пут. Дакле, морате да наведете две ствари када функција узима улаза. Морате да наведете име које желите да дате том улазу, чисто за ваша удобност, тако да се може односити на њега у функцији коју сами пишу, као што сам овде у реду 32. Али такође треба навести његов тип, јер је Ц програмски језик то само захтева да ако желите променљиву, морате да кажете шта рачунар Тип података је, у великој мери, тако да се не зна колико бита издвајају за ту променљиву. Јер би то могло да буде шест - Жао ми је, то неће бити шест. То може да буде 16. То може бити 8. То може бити 32, чак 64. Али рачунар мора да зна. Сада инт на левој страни представља шта, напротив? [ИНАУДИБЛЕ] Давид Ј. Малан: Шта је то? [ИНАУДИБЛЕ] Давид Ј. Малан: Тип функције и, још конкретније, тип свог производа. Тачно. Дакле, док је ствар у загради представља његов улаз, уколико их има, ствар са леве стране представља своју производњу. И у овом случају, повећање очигледно враћа инт. И тако инт је повратак тип ове функције. Шта то значи да се врате? Буквално, користите кључне речи повратак. А онда, ако оно што се враћају са десне кључне речи је цео број, онда је то заиста у складу са оним што смо обећали. Ниси могао да уради овако нешто - здраво, свет - јер је ниска. Очигледно то није цео број. Дакле, у најкраћем, терет је заиста на нама, програмер, да буде специфичан, као на шта смо повратак и онда заправо иде о његовом повратку. А онда би нијансу јаснији контекст - ево га опет. Контекст - Велико изненађење долази у само једном тренутку. Контекст сада овде је да ваш рачунар меморија је, опет, гигабајт, два гигабајта, шта год. Можда је више. Можда је мање. Али компјутер га види као да има различите секције. Нешто иде доле. Нешто друго иде тамо. Различите ствари иде у средини. И данас, ми смо само почели говорим ову причу. Али ми ћемо се вратити на ово током времена. За сада, једини комад сећања ми заиста стало је текст сегмент јер то само представља нула и јединица који је цланг излазног. Дакле, када покренете команду на тастатури као а.оут, или двоструко кликните на икону на Мац ОС или Виндовс, програм се учитава из чврстог возити у РАМ. И то плоппед на врху меморије вашег рачунара, тако да кажем. Сада је у међувремену, како ваш програм почне са радом, а главни добија позвао програм који је написао или програма Мицрософт или Аппле писао, било од њених локалне променљиве завршити доле на дну меморије рачунара. Али, ако главни позива другу функцију која и сама има променљиве или аргументи су завршити изнад њега. И ако та функција позива нешто, они завршавају изнад њега, изнад њега, изнад њега. И само једном функција врши извршење ради гомилу касета, тако да говори, почети да се све ниже и ниже. И то је оно што тада, у суштини, објашњава зашто, када зовете коцка - или позовите прираштај - ти пролази у копију вредности. А шта то значи сликовито је да буквално пишете број 1 у другом делу меморије, мењајући да је 1 до 2, у случају прираст - или на 8, у случају коцке - а затим бацали ту успомену гостима чим прираста или коцке функција враћа. Питање. [ИНАУДИБЛЕ] Давид Ј. Малан: Где - су глобалне променљиве чувају у оно што је Тренутно називају иницијализован подаци или неиницијализоване податке. Разлика је у томе, ако имате глобалну променљиву, а ви га доделите Одмах вредност са једнакима потпише, она завршава на врху тамо. А ако само кажете инт зарез без вредности, завршава незнатно нижи у РАМ једноставно конвенцијом. Остала питања. У реду. Дакле, ова слика ће се вратити као што смо добили више моћан са оним што можемо да урадимо са рачунаром. Али за сада, хајде да кратак увод у криптографију, специфичан тип криптографија то не реши све проблеме на свету, али не решава неке од њих. У том случају овде, имамо нешто што се зове тајни кључ криптографије. А тајни кључ криптографије, као што име сугерише, потиче њену безбедност из тајну. Тако на пример, ако се вратите у основној школи, а ви пролазите мала тајна љубав писмо дечака или девојчице коју постројење на - ако желео да прође да се кроз публику, вероватно не бих написао таква напомена на енглеском или било шта ваш матерњи језик, него ти Можда шифровање га. Или сте можда им пошаљете текстуалну поруку ових дана. Али ви у ствари можда им донесе поруку целој учионици. И да сигурно то на такав начин да ваши пријатељи и наставника Не знам шта пишете, можда доћи до прилично једноставна алгоритам - млада иако ћете можда - само да верати речи. Дакле, уместо писања, можда написати Б. Уместо Б, можда написати Ц. Уместо Ц, можда пишете Д, и тако даље. Или сте могли доћи до више софистицираним превод слова различитим словима. Али цака је дечак или девојчица коме шаљете ову поруку треба да Знам нешто. Што је оно што, очигледно? Као, шта је твоја тајна је. Као, шта је то мапирање између АС и БС и ЦС и ДС? Да ли је то само додаје један, да тако кажем, да сваки од слова да иду од До тачке Б, Б и Ц? Да ли је то много комплекснија од тога? Дакле, ви и ваш симпатија треба да имају ову тајну информацију. Али постоји нека врста Цатцх-22 овде. Ако је ово први пут да шаљете ово љубавно писмо кроз класа, како је тај дечак или девојчица ће знати шта тајна, чак је? Дакле тајни кључ крипто не реши све светске проблеме. И заправо ту је однос који ћемо вратити ка семестар, крај. Слично томе, имамо нико од нас вероватно никада послао - Слично томе, не већина нас не зна некога ко ради, на пример, у Амазон.цом. А ипак, многи од нас су вероватно купили ствари на Амазон.цом. И ми смо научени да се претпостави да су ови е-цоммерце трансакције су безбедне. Зар не? УРЛ адреса вероватно каже хттпс. Можда постоји негде глупо мало катанац икона. Постоји нека врста криптографије обезбеђивању информација о кредитној картици између вас и Амазон.цом. А ипак, ако криптографија укључује знајући неку тајну, а ипак не знам никога на Амазону, а ја свакако нисам није уговорио никакву тајна са неким на Амазону, како је мој рачунар или мој прегледач ово радиш? Па, испада да је друге врсте криптографије укупно да решавају тај проблем. Али данас, ми ћемо се фокусирати на једноставан, где можете организовати у унапред да знају неке тајне, као што је плус 1 или неког мапирање између АС и БС. А процес криптографије генерално подразумева ово. Имаш неки обичан текст, приказан овде у лево. Ви га пролазе кроз неку врсту алгоритма или поступак за енкрипцију га. Можда је то само постаје Б, Б постаје Ц. И онда можете завршити са Ципхер текст. У међувремену, када ваша симпатија прима тајну поруку, он или она мора да тада дешифровање се по принципу уназад тај алгоритам како би добили подржати обичан текст. Сада постоје физичке инкарнације ово. На пример, ово је мала тајна декодер прстен. А ово је прстен у смислу да овде постоје два бира. На периферији изван ове ствари, има слова од А до З, иако су у случајним редоследом. А унутра, у ствари има неке бројеве, тако да са овим прстен, можете некако окренути споља, али не и изнутра како би се построје бројеви са словима. А у клипу се спремате да виде - од којих неки можда сте видели 24/7 око Божића из филма под називом Цхристмас Стори. Видећете да је мало Ралпхие био толико жељан да схватим оно мало сироче Анние тајна порука је била да му се да је комуницирао, ја мислим, у формирају нумеричких порука на серијском кутији. А морали сте да акумулирају све мале картице који су дошли У кутији са цереалијама. Морао си да их послати унутра Морао си да се врати тајни прстен декодер, тако да коначно могу да схватим шта мапирање између слова и бројева, или слова и писма. Зато сам ти дам ову кратку снимак из А Цхристмас Стори мотивисати псет 2 и наша дискусија, у тренутку, од низова. Дакле, овде имамо Ралпхие. [ВИДЕО РЕПРОДУКЦИЈА] -Будите познато да све и сушен на сунцу да се Ралф Паркер именује члан сироче Ени Сецрет Цирцле и има право на све почасти и користи се јавља њу. -Потписан, сироче Ени. Потписаног, Пјер Андре! У боју! Почасти и користи, већ на узрасту од девет. Хајде, идемо даље са њим. Не треба све то јазз о кријумчарима и гусарима. -Слушај сутра увече на завршном авантуру Црна Пирате Схип. Сада је време за тајне поруке Анние за вас чланови Тајне круга. Запамтите, децо, само чланови Сецрет Цирцле Ени може да декодира Анние тајна порука. Запамтите, Ени је у зависности од вас. Поставите своје пинове Б2. Овде је порука. 12, 11 - -Ја сам у свом првом тајном састанку. -14, 11, 18, 16 - Пјер је био у великој гласа вечерас. Ја могу да кажем да је вечерашња порука је била веома важна. -3, 25. То је порука од Ени лично. Запамтите, не причај никоме. Касније -90 секунди, ја сам у јединој просторији у кући у којој дечак од девет могао да седим у приватности и декодирање. Аха, Б. отишао сам следећи. Е. Прва реч је бити. С. Он је дошао лакше сада. У. -Ма, хајде, Ралпхие. Морам да идем. -Бићу доле, мама. -Гее зујање. -Т, О. Будите сигурни да. Будите сигурни на шта? Шта је био сироче Ени покушаваш да кажеш? Будите сигурни на шта? -Ралпхие! Ренди мора да иде. Хоћеш ли молим те изаћи? -У реду, мама. Ја ћу бити одмах. -Био сам ближи сада. Тензија је била страшна. Шта је било? Судбина планете може држати у равнотежи. -Ралпхие! Ренди мора да иде. -Ја ћу бити у праву се, за Бога милога. -Боже, скоро тамо. Моји прсти летели. Мој ум је био челика замка. Свака пора вибрира. Било је скоро јасно. Да, да, да, да. -Будите сигурни да пију своју Овалтине. Овалтине? Бедан рекламу? Курвин сине. [ЕНД ВИДЕО РЕПРОДУКЦИЈА] Давид Ј. Малан: Значи имамо криптографију. Па како се у рачунару можемо ићи око примене или представља овакве ствари? Па, потребан нам је нацин да се изрази нешто флексибилније него наши променљиве су до сада дозвољено. Ми смо имали Интс. Ми смо имали знакова. Добили смо Флоатс и дуплира и неколико других. Али то су појединачни комади меморије која заправо не дозвољавају да изражавају ствари као речи и реченице и фразе. Заиста, ми смо се зове такве ствари конце. Али ми обећали да је ово заиста само поједностављење у ЦС50 библиотека која смо намеравали да одлепите. И тако почнимо да урадим овде. Дозволите ми да иде напред и отворити датотеке - сви ови фајлови су доступни као уобичајеног Онлине - позвао арраи.ц да реши проблем неповезане са жицама, али да наслика слика овде, како бисмо могли да користимо нешто зове низ. Низ је тип података. То је врста променљиве, врста, која има више мањих типова података унутар ње бацк то бацк враћа се назад. Тако на пример, ако желимо да напише мало програм који вам даје ваш квиз просеку за курс као 50 који има два квизове, можеш врло лако Пишем овај програм - на чак на неким од материјала прошлонедељном - помоћу ГетИнт и неколико променљивих. Инт куиз1, инт куиз2, и то је прилично једноставно. Можда је 10, 20 линија кода, мак, да спроведе програм који тражи корисника за две квиз резултате, а затим израчунава њихова просечна их додавањем заједно, делећи по два, а затим штампање резултата. Ми смо вероватно могао да урадим прилично лако сада после одређени број минута. Али проблем је у томе претпостављам да је 50 имао три или четири тестови. Претпоставимо да сте желели да користите исти програм за класу која је имала недељни тестови. Размислите о класи која је недељни квизове. Ако је као 16 или тако недеља у семестру, а сада имате 16 променљивих - инт куиз1, инт куиз2 инт куиз3, инт куиз4. Чим почнете видите ову редундантност, ова копирања и лепљења кода, то би требало да почне да желите било бољи начин. И срећом, због низова, ту је. Дакле, хајде да урадимо то. Прво, дозволите ми да представим веома једноставну ствар која ми не смо користили до сада, али ћете видети повремено у коду. То је оно што се обично назива константа. Дакле, то је константа у смислу да је ова вредност никада мења. Конвенцијом о људским приликом креирања константа је да користи све капитал слова, само да би она заиста стоји у вашем коду. А посебна кључна реч која се користи у Ц # је дефинисати. Дакле, ако кажете # дефине, затим размак, онда реч коју желите да користите за Тхе Цонстант име, а затим вредност константе. Дакле најаве, ово је другачије од додељивања нешто променљивој. Нема знака једнакости. Нема зарез. То је оно што је опште позната као Препроцессор директива, већ више на да је други пут. За сада, ово ствара непроменљиво вредност која се зове КВИЗОВИ чије стварне нумеричка вредност је 2. Дакле, где год видиш КВИЗОВИ, квизове, квизове током овог фајла, то је Само број 2. Сада, ако погледате главни сада, хајде да видимо како ово функционише. У почетку, то изгледа мало криптичан. Али то је све ствари из недеље један. Питајте корисника за разреде. Како да радимо ово? Па, у реду 22 - ово је стварно сочна део - Ја прогласи пловак, али не само један пловак. Ја декларисање, односно низ покретном зарезу. Та променљива ће да се зове разреда, као подразумевао овде. Али једини комад нову синтаксу онда су ови угластим заградама, чињеница да сам рекао пловак разреда, а затим отворите заграду, а затим број. Запазите, ако је ово константа, то је баш као што смо то урадили. То значи хеј рачунар, дај два плута, и идемо колективно зову их разреда. Ово је у супротности са много досадан процес овако. Флоат Граде1, плутају граде2, и тако даље. Дакле, низ омогућава нам да спроведе ову идеју, али много мање мессили, у такав начин да можемо написати једну линију кода уместо, рецимо, 16 за 16 недеље семестра. Дакле, нисам желео да се тешко код 2 јер ако мислите о томе сада логично - Претпостављам идуће године ЦС50 промене до 3 тестови уместо. И ја сам имао овде број 2. Имао сам број 2. Имао сам број 2. Имао сам број 2. Она постаје веома напоран и врло лако се зезнуо и да случајно промените једна вредност на 3 и пропустите неку другу вредност 2. Зато ћу уместо апстрактне ово даље и користе то стално да, као свог име сугерише, никада промене. А сада, без обзира на то да ли смо другачији тестови ове године или следеће, ја Само треба да га промени на једном месту, овде на врху. Тако да је све константа. У међувремену, нови концептуални карактеристика је да од низа. Дакле квадратних заграде ми оволико Флоатс и омогућава ми колективно зову их разреда овде. Дакле, хајде да видимо шта ћу да урадим. Овде у складу 24 је почетак за петљу. Ово је стварно ништа фенси. То је само помоћу тестови уместо тешко кодираном броју. Али нема ништа интелектуално разликује се од прошле недеље. Ово је само принтф. Дакле принтф ("квиз број% д од% д") јер желим да одштампате дајте ми квиз број један од два, а затим два два. Дакле, ово је чисто естетска ствар. Али занимљив део је сада у линији 27. Да би се попунила у једном од два чувара места са покретном зарезу вредност, можете поново да користите угласте заграде. У овом случају, ја сам помоћу јер ово за петљу је почео са и изједначавање шта вредност, очигледно? 0. Дакле, на првој итерацији ове петље, то је као да сам написао ово у коду. Али, на другој итерацији ове петље, то је као да сам ово написао у мом коду. Али чињеница да сам помоћу променљиве је савршен, јер као име сугерише, то је променљив своју вредност на свакој итерацији. Дакле, ја сам за пуњење Овај низ једну тачку у једном тренутку. Шта ово низ изгледа? Па, разлог што сам нацртао ово овде супер једноставан правоугаоник на екрану раније из тог разлога. Низ је само комад меморије следи други комад меморије, затим још комад сећања, и тако даље. Дакле, ако је мој низ од величине 2, у овом слуцају овде, све бих да радим по куцање у мојим квиз бодова, као овде. Имам 100 на овој. А онда сам добио 99 на овој. Онда је ово сећање не може да се користи, јер сам само питао Рачунар за низ величине 2. Ти квадрати су још увек тамо. Зар не? Још увек имате два гигабајта РАМ меморије, чак и ако сте само тражећи два сплавова. Тако да је идеја иза низова је да рачунар траје само комад меморије и онда расподељује мањих комада бацк то бацк враћа се назад. И то је све низ је. То је суседни комад сећања, унутар којег можете ставити ствари. Сада се то деси онда само мало досадно аритметике. Ако сам дођите овде, ово је место где сам тада прелазили преко низа. Дошао сам до сума свих вредности у низу. И онда ја користим округлу функцију овде заправо сумирамо подељен квизове. Али дозволите ми да машу ми руку на то као нека врста довољно аритметику за сада. Али све то ради за мене на крају се обрачуна просек. Дакле, прво квиз, плус други квиз, подељен са 2, а затим штампа она се као инт. Али хајде да сада прелазак на другачији пример зове стринг1, који осликава сличну слику, али помоћу жице. Дозволите ми да иде напред и поједностави то само за тренутак. И опрости увлачење за сада. Обавештење у складу 19 овог пример, ја добијем стринг од корисника. Али погледајмо шта ја радим поред у редовима 22 напред. Ја стварно итератинг од И до - и ово је нови трик - стрлен, ниска дужине. То је функција која долази са Ц који, ако му прође низ, што говори ти колико карактера су у том низу. То је све. Чињеница да је стрлен уместо жица дужине је само зато што је више језгровит. Пре 30 година, људи воле да пишу ствари као језгровито могуће. Зато смо овде стално ту конвенцију. и + + значи само повећавати ја у свакој итерацији. И сада приметити, што је заиста интересантно. Дакле, у складу 24, кажем рачунар, дај ми знак, осам бита, а зову га ц. Али шта је то на десна страна говори? У енглеском језику, шта то представља? [ИНАУДИБЛЕ] Давид Ј. Малан: Тачно. Дај ми први карактер у низу. Или генерално, дај ми и-ти карактер у низу. И схвати да је сада важно да што компјутерских научника, ми заправо рачунајући од 0. Не морате дискреционо сада да почнемо да радимо ово. Сада морате да се понашате у складу са очекивањима рачунара и Одбројавање од нуле јер [0] ће бити први лик у низу. [1] ће бити други. [2] ће бити трећи, и тако даље. Дакле, овај програм, ако га састави - то је, опет, стринг1. Тако да стринг1. И сада сам покренути стринг1 у мом прозору терминала. Чека за унос, па ћу да куцате у, рецимо, Давид. Ентер. И сада се штампа Дејвиду све на различитим линијама, јер Обратите пажњу шта радим. Ја штампање једног знака на време. Сада нећемо ићи у детаље данас на овоме. Али сам избрисао тренутак пре ове провере овде. Испада да ако корисник има проблема у раду, контрадикторно, или само збуњени, можете заправо не дају низ неке дужине. Ако притиснете погрешан тастер на тастатури, можда ћете дати нема стринг уопште. Или ако си злонамеран, можда ћете покушати да налепите у вредности гигабајт је од есеј да попуните овај редослед. А ако рачунар понестане меморије, испада да ћемо да се вратим ову посебну вредност зове нулл. Дакле, за сада, само знам да постоји та посебна вредност нула зове да ће нам омогућити да проверите када смо ван меморије, између осталог. Али ако ја отворим сада стринг2, приметите овде једну разлику. Приметите једну разлику овде са стринг2. Са стринг2, ово петљи је мало другачија. Дозволите ми да избришете нуллс, тако да можемо говорити о онима други пут. Али шта је то другачије за петљу овај пут? И ја могу да се вратим на претходни пример. Дакле, то је верзија два. Ово је верзија један. Један, два, један два. Дакле, стрлен позив је где? То је у првом делу за петљу. Било која мисли о томе зашто ово радим? Да. [ИНАУДИБЛЕ] Давид Ј. Малан: Дакле, ми не зову функција сваки пут. Управо тако. Подсетимо из за петље да су они супер једноставно када сте некако Разумем да је ово иницијализација је стање, и ажурирање. Проблем је у томе што услов дешава на сваком итерација петље. И тако се у овом примеру овде, шта је лоше у вези са чињеницом да је ово моје стање? Зовеш стрлен опет и опет и опет. Али када сам откуцао у Давиду, дужина тог стринга је пет. И то неће променити на свакој итерацији петље, јер стринг је увек Д-В-И-Д. Дакле, ово је наговештај шта ће постати све важније идеја познат као дизајн решења, где - само не чине рачунар уради непотребан посао. Сада само као увид у псет 2, псет 2 у стандардном издању је ће вам изазов да заиста спроведе одређени број шифре, неке број алгоритама за шифровање, тако да можете и шифровање и дешифровање тајне поруке, баш као једне Ралпхие се декодира. У хакерске издању псет 2, ми ћемо ићи мало даље. Ми ћемо вам дам датотеку из стварног компјутерског система који садржи гомила корисничких имена и лозинки стварних шифрованих и изазов за хакер издање ће бити да пуца те лозинке и фигуру шта криптографске или шта тајна је коришћена да се заиста генерисати те лозинке. А ми ћемо да урадимо ово користећи нову функцију овде, Ц који ћу дати само демо, познат као аргумената у командној линији. Тако испада, као што неки од вас можда видели у делу или у уџбеницима, Главни не мора увек да буде празнина у загради. Испада да је главни може бити написана овако, са два аргумената, аргц и аргв, где аргц је број речи које сте укуцали после овог програма је име на командној линији. А аргв је стварни речи. И као Тргу заграде тамо сугеришем, аргв је очигледно низ. То ће бити ниска, после низа после низа у меморији. Па шта ћемо моћи да урадимо, почевши псет 2, се овако нешто. Ако направим аргв1, што је пример ћемо вратити у понедељак, и покрените то, приметићете да то не изгледа да ништа још. То је само исписује своје име. Али ако кажем збогом класе, обавештење да је овај програм очигледно понавља преко сваке речи које су откуцали у промпту. А начин на који ћемо добити приступ речи које корисник има откуцан на линији је променом главни, од овог викенда, од инт маин () на маин (аргц, аргв). И тако ће се родити командне линије аргументе. А када се заиста софистицирана у овоме, ви ћете бити у стању да напише Заиста триппи програми, као што је овај овде, што иде изнад и изван неке од функционалности које смо урадили до сада, али све веома моћан. Тако ћемо оставити ово са ово на екрану. А ми ћемо вас видети у понедељак.