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