[Powered by Google Translate] [Праходжанне - Праблема Set 2] [Zamyla Chan - Гарвардскі універсітэт] [Гэта CS50. CS50.TV] Добра. Прывітанне ўсім, і дабро запрашаем у Пакрокавае кіраўніцтва 2. Па-першае, я хачу павіншаваць вас з аздабленнем PSET 1. Я ведаю, што гэта магло б быць трохі жорсткім для некаторых з вас, магла б быць ваша першая кампутарная праграма, што вы напісалі, але памятайце, што ў канцы гэтага, калі вы азірацца назад у канцы семестра, Вы будзеце выглядаць на PSET 1, і вы скажаце: "Гэй, я мог бы зрабіць, што праз 5 хвілін". Так ведаць і верыць, што ў канцы гэтага вы абавязкова знойдзеце PSET 1 даволі простая. Але цяпер гэта велізарнае дасягненне, і віншаванні для атрымання зрабіў. Цяпер, таксама хутка запіску, перш чым мы пяройдзем да мяса кіраўніцтва. Я проста хачу зрабіць невялікае заўвагу, што я часам не хапае часу у пакрокавых кіраўніцтваў, каб прайсці праз кожны спосаб зрабіць пастаўленай задачы і даволі проста, можа быць сканцэнтраваны на 1 або 2 віды рэалізацыі, спосабаў, якімі вы маглі б зрабіць гэта. Але гэта не азначае, што вы забаранілі рабіць гэта іншым спосабам. Ёсць часта, як і камп'ютэрныя навукі, шматлікія спосабы вядзення спраў, і так дакладна не саромейцеся выкарыстоўваць розныя тыпы рашэнняў, чым я, магчыма, прадставіла. [PSET 2: Crypto - Zamyla Chan - zamyla@cs50.net] [Pset2 - 0. Секцыя пытанні - 1. Цэзар - 2. Vigenere] Добра. Такім чынам, праблема ўсталяваць 2: Crypto гэта весела адзін. Зноў жа, з кожным PSET вы пачнеце з падзелам пытанні якая будзе праводзіцца ў секцыі з вашым прызначаным навучання чалавек. Мы не збіраемся прайсці праз гэта за праходжанне гульні, але яны вызначана дапамогуць вам завершить PSET. Такім чынам, першая частка праблемы набору Цэзара. І так у Caesar хтосьці пройдзе міма вас ключ з цэлым, і вы будзеце шыфраваць радкі тэксту, якія яны падаюць вам і вярнуць іх назад зашифрованные рэчы. Калі хто глядзеў Калядная гісторыя, ёсць прыклад таго, што ёсць. Тады другая частка праблемы набору Vigenere, , Які з'яўляецца больш прасунутай тэхніцы шыфравання. І такім чынам мы збіраемся, каб зашифровать кавалак тэксту, выключэннем, а не толькі з адным цэлым, мы на самай справе збіраемся кадаваць з ключавым словам, якое карыстач будзе прадастаўляць нам. Такім чынам, першы інструмент у панэлі інструментаў сёння фактычна будзе абнаўленне абсталявання. На дошцы абмеркаванняў мы ўбачым нешта накшталт: "Чаму гэта не працуе?" "Чаму не Даслаць 50 рабочых?" і часта рашэнне на самым справе проста абнавіць ваша прылада. І так, калі вы проста запусціць у акне тэрмінала ў ваш прыбор Суда ням-у - гэта сцяг saying так, усё абнаўлення - абнаўлення, , То ваш прыбор будзе абнаўляцца, калі гэта будзе неабходна. І гэта не пашкодзіць, калі вы ўжо знаходзіцеся на апошняй версіі прыбора. Тады гэта будзе проста сказаць няма новых абнаўленняў, і вы можаце працягваць працаваць разам. Але гэта добра, каб выконваць нават кожны раз, калі вы адкрываеце прыбор таму што мы яшчэ вельмі шмат чаго - Часам, калі мы прыйдзем на памылку - фіксацыя яе ў прыбор. Таму пераканайцеся, што ў вас самая апошняя версія прыбора і запусціць абнаўленне, што там. Добра. Такім чынам, паколькі мы маем справу з лістамі і змены, шыфраванне рэчы, мы збіраемся сапраўды хочам стаць лепшымі сябрамі з нашымі ASCII графіцы. Ёсць мноства ones онлайн, калі вы знойдзеце. Можа быць, нават стварыць свой уласны. У прынцыпе, з кожнай літарай і кожным лікам і кожны персанаж існуе шэраг звязаных з імі, і так прыемна бачыць іх ASCII значэння разам з фактычнымі ліст. Гэта, безумоўна, дапаможа вам у задачы мноства. Адна рэч, якая сапраўды дапамагла мне ў гэтай праблеме набор быў на самай справе раздрукаваць яго, і, як я перажывала, я б маляваць на ім, напісаць: «Калі гэты павінен ісці туды, то ...» Выгляд маляваць на ім і пазначыць яго, становяцца лепшымі сябрамі з вашым ASCII табліцы. Тады ў нас ёсць некалькі іншых інструментаў у нашым распараджэнні. На гэты раз замест рэальнай запыту карыстальніка для ўсіх сваіх входных Мы збіраемся зрабіць камбінацыю. Мы збіраемся, каб падштурхнуць іх для некаторых ўводу, але мы таксама збіраемся проста выкарыстоўваць аргументы каманднага радка. Таму, калі яны працуюць свае праграмы, як правіла, скажаце вы. / Прывітанне, напрыклад, калі ваша праграма была hello.c. Але на гэты раз замест таго, каб проста кажу, што яны могуць паставіць слова, аргументы пасля. І таму мы збіраемся выкарыстаць тое, што яны праходзяць у да нас, як іх уклад, а таксама, так што перамяшчэнне за рамкі простага запыту на цэлы лік, а таксама з дапамогай аргументаў каманднага радка. А потым мы пойдзем у масівы і радкі, якія мы будзем выкарыстоўваць шмат, як добра. Вось толькі адзін прыклад з 1 міні-ASCII графіцы. Як я ўжо сказаў, кожная літара адпавядае ліку, і такім чынам азнаёміцца ​​з гэтым. Гэта спатрэбіцца. А потым, калі мы пачынаем рабіць некаторыя ASCIIMath справу з лікамі - складанне, адніманне іх - тое вызначана добра, каб звярнуцца да гэтай табліцы. Такім чынам, вось прыклад шыфр Цэзара - тое, што вы, магчыма, гуляў з. Гэта ўсяго толькі колы. Па сутнасці, ёсць знешні алфавіт, а затым ёсць ўнутраны алфавіт. Так што проста вось прыклад шыфра Цэзара, але з ключом 0. Па сутнасці, сумешчаны з A, B сумешчана з B, аж да Z. Але тое, што мы хочам ключ 3, напрыклад. Тады мы б павярнуць ўнутранае кола, так што зараз супадзе з D, і г.д. І гэта, па сутнасці, што мы збіраемся рабіць. Мы не маем кола, але тое, што мы збіраемся зрабіць, гэта наша праграма выгляд зрушыць алфавіт разам з намі пэўнай колькасці нумароў. Такім чынам, як я ўжо казаў, мы будзем мець справу з аргументамі каманднага радка а таксама атрымаць цэлае лік. Такім чынам, што карыстач будзе працаваць ваша праграма Цэзара, кажучы. / Цэзар , А затым увесці нумар пасля гэтага. І гэта лік ўяўляе сабой ключ, зрух, колькі раз вы будзеце кручэння ўнутранага колы вашага шыфр Цэзара. І вось вы бачыце тут прыклад. Калі мы ўвайшлі ў літары ад А да L ў нашай шыфр Цэзара, то гэта будзе ўваход D праз O таму што кожная літара перайшла ў 3 разы, гэтак жа, як на прыкладзе колы, якое я паказаў вам. Такім чынам, калі вы ўвялі, напрыклад, гэта CS50! Затым ён таксама перамясціць ўсе лісты. І гэта галоўнае ў абодвух Цэзара і Виженера з'яўляецца тое, што мы збіраемся прапусціць любы не-літар. Такім чынам, любыя прабелы, сімвалы і г.д., лічбы, мы збіраемся, каб трымаць іх тое ж самае. Мы толькі збіраемся перанесці літары ў гэтым выпадку. Такім чынам, як вы бачыце на коле, у нас ёсць толькі літары даступныя для нас, такім чынам, мы толькі хочам, каб зрушыць літары і шыфраваць лісты. Таму першае, што трэба зрабіць, вы ўбачылі, што выкарыстанне для Цэзара у задачу ўсталяваць 2 з'яўляецца запуск Цэзара, а затым увядзіце нумар, калі вы запусціце яе ў тэрмінале. Такім чынам, што мы павінны зрабіць, каб хоць неяк атрымаць гэты ключ і доступ да яго. І таму мы хочам, каб хоць неяк бачыць, што гэта будзе другі аргумент каманднага радка. Першы будзе. / Цэзар, а наступны будзе нумар ключа. Таму, перш чым мы мелі Int асноўных (несапраўднымі), каб пачаць нашы праграмы C. Мы збіраемся адхіліце пласт трохі а на самой справе бачым, што замест перадачы ў пустэчу нашай асноўнай функцыяй Мы сапраўды маем справу з 2 параметрамі. У нас ёсць цэлы лік імя агдс, а затым масіў радкоў, званы argv. Так агдс является цэлым лікам, і ўяўляе сабой колькасць аргументаў на сваю праграму. А потым ARGV на самай справе спіс аргументаў. Усе аргументы радкі, і так ARGV ўяўляе сабой масіў, спіс радкоў. Давайце пагаворым пра масівах няшмат. Масівы з'яўляюцца прынцыпова новая структура дадзеных. У нас ёсць цэлых лікаў, мы ў два разы, у нас ёсць радкі, і зараз мы маем масівы. Масівы структур дадзеных, якія могуць утрымліваць некалькі значэнняў аднаго і таго ж тыпу, Так па сутнасці, спіс любога тыпу вы хочаце. Па сутнасці, калі вы хацелі спісу цэлых лікаў ўсё ў 1 зменную, Затым вы павінны стварыць новую зменную, якая была тыпу масіў Int. Так масівы нулявога індэксуюцца, гэта азначае, што першы элемент масіва мае індэкс 0. Калі масіў мае даўжыню 4, як у гэтым прыкладзе, то ваш апошні элемент будзе з індэксам 3, , Што на 4 - 1. Такім чынам, каб стварыць масіў, вы маглі б зрабіць нешта накшталт гэтага. Скажы, што ты хацеў двайнога масіва. Гэта ставіцца да любога тыпу тып дадзеных, аднак. Так што вы хочаце двайнога масіва. Скажам, вы хочаце назваць гэта паштовую скрыню. Гэтак жа, як вы б ініцыялізаваць любыя іншыя двайныя, Вы сказалі б двайную, а затым імя, але на гэты раз мы ставім квадратныя дужкі, і тое колькасць будзе даўжыня масіва. Адзначым, што ў масівах мы ніколі не можам змяніць даўжыню, так што вы заўсёды павінны вызначыць і выбраць, колькі скрынь, колькі значэнняў вашага масіва збіраецца правесці. Такім чынам, каб усталяваць розныя значэнні ў вашым масіве, вы збіраецеся выкарыстаць гэты сінтаксіс, як вы бачыце на слайдзе. У вас ёсць паштовую скрыню індэкс 0 будзе ўсталяваны ў 1,2, Індэкс паведамленні 1 камплект да 2,4, і г.д. Так што цяпер мы разгледзелі масіваў трохі, давайце вернемся да ARGC і ARGV. Мы ведаем, што цяпер ARGV масіў радкоў. Такім чынам, калі карыстач пераходзіць у - кажуць, што яны працуюць праграмы - яны кажуць. / Hello David Malan, што праграма будзе рабіць для вас ужо фактычна прыдумаў, што ARGC і ARGV ёсць. Так што вам не трэба турбавацца аб гэтым. ARGC ў гэтым выпадку будзе 3, паколькі ён бачыць 3 асобных слоў, падзеленых прабеламі. І так, то масіў у дадзеным выпадку, першы індэкс будзе. / Прывітанне, Наступны Давіда, наступнага малая. Хто-небудзь бачыць адразу, што адносіны паміж ARGV,  масіве, і ARGC ёсць? Так. Мы ўвойдзем у тым, што ў якасці прыкладу ў args.c. Давайце паглядзім, калі мы можам скарыстацца адносін паміж 2. Тут вы можаце выявіць, што ў прыладу дадатак па змаўчанні адкрыць. з файламі часам Emacs. Але мы хочам мець справу з Gedit, так што вы можаце зрабіць, вы можаце пстрыкнуць правай кнопкай на файле C, абярыце Уласцівасці, Адкрыць з дапамогай, а затым выберыце Gedit, усталяваць па змаўчанні, і цяпер ваша праграма павінна адкрыць у Gedit замест Emacs. Perfect. Дык вось у мяне ёсць праграма, што я хачу, каб раздрукаваць кожны аргумент каманднага радка. Таму, што б карыстач уводзіць, я хачу сутнасці вярнуць яго назад да іх на новай радку. Так што структуры, якія мы можам выкарыстоўваць для перабору что-то - тое, што вы, верагодна, выкарыстоўвалі ў сваёй PSET 1? Калі вы хочаце, каб прайсці праз пэўную колькасць рэчаў? >> [Студэнт] Для цыклу. Для цыклу. Менавіта так. Такім чынам, давайце пачнем з цыклу. У нас ёсць для Int = 0. Давайце пачнем са стандартнай ініцыялізацыі зменнай. Я збіраюся пакінуць умовай для набору, а затым сказаць, што я + +, збіраюся рабіць рэчы. Добра. Такім чынам, успамінаючы ARGV, калі ARGV гэта спіс аргументаў, што перадаюцца ў праграму і ARGC лік аргументаў на праграму, то гэта азначае, што агдс, па сутнасці, даўжыня ARGV, права, таму што там будзе столькі аргументаў, як значэнне ARGC. Таму калі мы хочам, каб перабору кожнага элемента ў ARGV, мы збіраемся хочаце кожны раз звяртацца да зменнай у ARGV ў дадзены індэкс. Гэта можа быць прадстаўлена з гэтым, праўда? Гэтая пераменная тут ўяўляе сабой пэўную радок у дадзеным выпадку таму што гэта масіў радкоў - радок у прыватнасці, што гэты індэкс. Тое, што мы хочам зрабіць, у гэтым выпадку мы хочам, каб раздрукаваць яго, так скажам Printf. А цяпер ARGV з'яўляецца радком, таму мы хочам пакласці, што запаўняльнік там. Мы хочам, каб новая радок проста каб зрабіць яго добра выглядаць. Такім чынам, тут мы маем цыкл. У нас няма ўмоў пакуль няма. Так што я пачынаецца з 0, а затым кожны раз, калі ён збіраецца друкаваць дадзеную радок у дадзены індэкс ў масіве. Таму, калі мы хочам, каб спыніць друк з элементаў у масіве? Калі мы скончылі, дакладна? Калі мы дайшлі да канца масіва. Такім чынам, мы не хочам перавышаць прайшлі доўгі масіва, і мы ўжо ведаем, нам не трэба на самой справе актыўна высветліць, што даўжыня ARGV з'яўляецца таму што яно нам дадзена, і што гэта такое? ARGC. Менавіта так. Такім чынам, мы хочам зрабіць гэты працэс ARGC колькасць разоў. Я не ў праве каталога. Добра. Зараз давайце зробім аргументы. Няма памылак, і гэта выдатна. Так што давайце проста запусціць аргументы. Што гэта збіраецца вярнуцца да нас? Гэта проста будзе друкаваць яго назад. "Вы ўводзяцца аргументы ў праграму, я збіраюся даць яго назад да вас". Так скажам, мы хочам сказаць, аргументы, то Foo Bar. Так то яно выводзіць яе назад да нас. Усё ў парадку? Так што ёсць прыклад таго, як можна выкарыстоўваць ARGC і ARGV ведаючы, што агдс ўяўляе даўжыню ARGV. Пераканайцеся, што вы ніколі не з масівамі доступ да аднаго за межы даўжыні масіва таму што C, безумоўна, крычаць на цябе. Вы атрымаеце тое, што называецца збоем сегментацыі, які ніколі не весела, у асноўным кажуць, што вы спрабуеце атрымаць доступ нешта што не існуе, не належаць вам. Таму пераканайцеся, асабліва з нулявой індэксацыі, мы не жадаем - Як, напрыклад, калі ў нас ёсць масіў даўжыні 4, , Што індэкс масіва 4 не існуе, таму што мы пачынаюцца з 0, пры нулявой індэкс. Яна стане другой натурай, як і для завес, калі мы пачынаем з 0. Так што майце гэта на ўвазе. Вы ж не хочаце, каб калі-небудзь атрымаць доступ да індэксу масіву, што гэта за межамі вашай дасяжнасці. Такім чынам, мы можам бачыць цяпер, як мы можам выгляд доступу аргументы каманднага радка, якія перадаюцца цалі Але, як вы бачылі радок, ARGV на самай справе масіў радкоў. Так што гэта на самай справе не з'яўляецца цэлым лікам кліентаў, але ў Caesar мы хочам мець справу з цэлымі лікамі. На шчасце, ёсць функцыі створаны для нас, якія сапраўды могуць пераўтварыць радок у цэлае лік. Акрамя таго, тут мы маем справу не з карыстацкага ўводу, дзе мы падахвочваючы іх для ўваходу тут ключ, таму мы не можам на самай справе reprompt і сказаць, "О, дайце мне іншае цэлы лік, скажам, калі гэта не дзейнічае". Але мы па-ранейшаму неабходна праверыць правільнасць выкарыстання. У Цэзара яны толькі дазволілі прайсці ў 1 нумар, і таму яны павінны выконвацца. / Цэзар, а затым яны павінны даць вам нумар. Так агдс павінна быць пэўнае колькасць. Што лік гэта будзе, калі яны павінны перадаць вам. / Цэзар, а затым ключ? Што такое агдс? >> [Студэнт] 2. Два >>. Менавіта так. Такім чынам, вы хочаце, каб пераканацца, што агдс роўная 2. У адваротным выпадку вы ў прынцыпе адмовіцца ад запуску праграмы. У асноўным гэта функцыя, якая кажа Int асноўны, Такім чынам, мы заўсёды добра 0 вяртанні практыкі ў канцы паспяховай праграмы. Такім чынам, калі, скажам, яны даюць вам 3 аргументаў каманднага радка, а не 2 ці даць вам 1, напрыклад, тое, што вы будзеце рабіць гэта вы будзеце жадаць, каб праверыць, што , А затым вяртаюць 1 кажу, не, я не магу працягнуць гэтую праграму. [Студэнт] Там не можа быць месца ў вашым тэксце. >> Прабачце? [Студэнт] Там не можа быць месца ў тэксце вы спрабуеце зашыфраваць. Ах! З пункту гледжання тэксту, які мы спрабуем шыфравання, што на самой справе адбываецца пазней калі мы даем гэтага тэксту. Так што цяпер мы проста прымаючы ў якасці аргументаў каманды фактычнага колькасці, фактычны зрух для шыфравання Цэзара. [Студэнт] Чаму трэба 2, у адрозненне ад усяго толькі 1 агдс? Там пэўна 1 лік. Права. Прычына, чаму мы павінны 2 для агдс замест 1 Таму што, калі вы запускаеце праграму і казаць. / Цэзар або. / Прывітанне, што на самой справе лічыцца як аргумент каманднага радка. Такім чынам, што ўжо займае 1 і так, то мы ўводзе 1 дадатковая. Такім чынам, вы на самой справе ўводзе радкі ў аргумент каманднага радка. Тое, што вы хочаце зрабіць, для Цэзара мы хочам мець справу з цэлым, так што вы можаце выкарыстоўваць гэтую функцыю atoi. А ў прынцыпе, вы перадаеце яго ў радок, а затым ён верне вас назад цэлым калі гэта магчыма, каб зрабіць гэтую радок у цэлае лік. Цяпер памятаеце, калі мы маем справу з Printf або GetString, і да таго падобнае, мы ўключаем бібліятэк, якія з'яўляюцца спецыфічнымі для нас. Такім чынам, у пачатку мы пачынаем з хэш-тэгам стандартнага ўводу / высновы. Ч, нешта накшталт гэтага. Ну, atoi не ў адной з гэтых бібліятэк, Такім чынам, што мы павінны зрабіць, мы павінны ўключаць у сябе права бібліятэку для гэтага. Так Нагадаем назад Праходжанне 1, дзе я абмяркоўваў кіраўніцтве функцыя. Вы ўводзіце чалавека ў тэрмінале, а затым варта імя функцыі. І так, што з'явіцца цэлы спіс яго выкарыстання, але таксама яна будзе выхоўваць якога бібліятэка, якая належыць. Так што я пакіну гэта вам выкарыстоўваць функцыю ручной з atoi і высветліць, якія бібліятэкі трэба ўключыць, каб мець магчымасць выкарыстоўваць atoi функцыі. Такім чынам, мы атрымалі ключ, і цяпер справа даходзіць да атрымання простага тэксту, і так, што на самой справе будзе карыстацкага ўводу, дзе вы падкажаце. Мы мелі справу з GetInt і GetFloat, і таму ў тым жа духу мы будзем мець справу з GetString. Але ў дадзеным выпадку мы не павінны рабіць якіх-небудзь рабіць падчас або падчас завесы для праверкі. GetString, безумоўна, дае нам радкі, і мы збіраемся, каб зашыфраваць любы карыстальнік дае нам. Такім чынам, можна меркаваць, што ўсе гэтыя уведзенай карыстальнікам радкі з'яўляюцца правільнымі. Вялікі. Такім чынам, як толькі вы атрымалі ключ, і як толькі вы атрымалі тэкст, Цяпер тое, што засталося, гэта ў вас ёсць, каб зашыфраваць тэкст. Проста, каб хутка ахапіць больш за жаргон, тэкст з'яўляецца тое, што карыстач дае вам, і зашыфраванага тэксту з'яўляецца тое, што вы вернецеся да іх. Так радкоў, каб быць у стане прайсці на самай справе літара за літарай таму што мы павінны перайсці кожную літару, Мы разумеем, што радкі, калі мы неяк адхіліце пласта, мы бачым, што яны проста сапраўды спіс знакаў. Адзін ідзе за іншым. І таму мы можам разглядаць радкі як масівы, таму што яны з'яўляюцца масівамі знакаў. Так што ў вас ёсць радок з імем тэксту, і ў рамках гэтай зменнай тэкст захоўваецца Гэта CS50. Затым тэкст з індэксам 0 будзе вялікай літары, індэкс 1 будзе ч, і г.д. А потым з масівамі, у ARGC напрыклад, у args.c, мы ўбачылі, што ў нас было перабраць масіў і таму нам давялося паўтараць ад = 0 да I менш, чым даўжыня. Так што нам трэба нейкім чынам высветліць, што даўжыня нашых радок калі мы збіраемся перабраць яго. На шчасце, зноў жа, ёсць функцыя існуе для нас, хоць пазней у CS50 Вы вызначана зможаце рэалізаваць і зрабіць свае ўласныя функцыі што можна вылічыць даўжыню радка. Але цяпер мы збіраемся выкарыстаць даўжыню радка, так StrLen. Вы праходзіце у радок, а затым ён верне вас Int, якая ўяўляе даўжыню вашай радка. Давайце паглядзім на прыклад таго, як мы маглі б для перабору кожнага знака ў радку і нешта зрабіць з гэтым. Тое, што мы хочам зрабіць, гэта перабор кожнага знака радкі, і тое, што мы хочам зрабіць, гэта мы выводзім назад кожны знак 1 на 1 акрамя нас нешта дадаць побач з ім. Такім чынам, давайце пачнем з цыклу. Int = 0. Мы збіраемся пакінуць прастору для стану. Мы хочам, каб паўтараць, пакуль не дасягнем канца радка, дакладна? Такім чынам, якія функцыі дае нам даўжыню радка? [Неразборліва адказ студэнта] Вось даўжыню аргументаў каманднага радка. Але для струннага мы хочам выкарыстоўваць функцыю, якая дае нам даўжыню радка. Дык вось даўжыня радка. І так, то вы павінны перадаць у радок да яго. Ён павінен ведаць, што радок для гэтага трэба вылічыць даўжыню. Такім чынам, то ў гэтым выпадку мы маем справу з радком с. Вялікі. Такім чынам, тое, што мы хочам зрабіць, давайце Printf. Цяпер мы хочам мець справу з знакамі. Мы хочам, каб раздрукаваць кожны індывідуальны характар. Калі вы хочаце, каб раздрукаваць паплавок, можна выкарыстоўваць як запаўняльнік% ф. З Int вы павінны выкарыстоўваць% г. І аналагічна, з характарам, вы выкарыстоўваеце% з сказаць, што я збіраюся быць пячатку з знакавай , Якая захоўваецца ў зменнай. Так што ў нас гэта, і давайце дадамо перыяд і месца для гэтага. Які характар ​​мы выкарыстоўваем? Мы будзем выкарыстоўваць усе, што характар ​​мы на струны. Такім чынам, мы збіраемся выкарыстаць нешта са радком, але мы хочам, каб атрымліваць доступ да вызначаных характарам там. Такім чынам, калі радок проста масіў, то як мы атрымліваем доступ да элементаў масіва? У нас ёсць гэтыя квадратныя дужкі, а затым пакласці індэкс там. Таму ў нас ёсць квадратныя дужкі. Наш індэкс ў гэтым выпадку мы можам проста выкарыстоўваць я. Менавіта так. Такім чынам, мы кажам, што мы збіраемся друку, за якім варта кропка і прастору, і што характар ​​будзе й літарай у нашу радок з. Я проста хачу, каб выратаваць. Добра. Цяпер я збіраюся працаваць даўжыні радка. Таму мы вымушаны былі радкі называецца OMG, і зараз яна падкрэсліла, нават больш. Сапраўды гэтак жа, скажам, мы на самай справе хочам атрымаць радок ад карыстальніка. Як мы можам гэта зрабіць? Да гэтага, як мы атрымаем цэлы лік? Мы сказалі GetInt, дакладна? Але гэта не з'яўляецца цэлым лікам, так што давайце GetString. Давайце зробім даўжыні радка. Тут мы не ўвесці спецыяльную радок. Такім чынам, я не ведаю. Я збіраюся паставіць свой подпіс тут і так, то што я магу зрабіць адна з тых рэчаў дзе я прызначыць словы для кожнай літары ці нешта накшталт гэтага. Cool. Дык вось даўжыня радка. Такім чынам, мы вярнуліся да Цэзару. У нас ёсць некалькі інструментаў, як мы перабору радкі, як мы атрымліваем доступ да кожнага элементу. Так што цяпер мы можам вярнуцца да праграме. Як я згадваў раней, у ASCII табліцы, ваш лепшы сябар, Вы збіраецеся бачыць, што лікі, якія звязаны з кожнай літарай. Дык вось сказаць, што наш тэкст з'яўляецца Я галавакружэнне! Тады кожны з гэтых знакаў будзе мець нумар і ASCII значэнне, звязанае з ім, нават апостраф, нават прастору, нават клічнік, так што вы хочаце мець гэта на ўвазе. Так што сказаць, што наш ключ, які карыстальнік уваходзіць у іх аргументаў каманднага радка роўная 6. Гэта азначае, што ў першым лісце, якое я, якая прадстаўлена на 73, Вы хочаце вярнуць ім усё, што ліст ўяўляе ASCII значэнне 73 + 6. У дадзеным выпадку гэта было б 79. Цяпер мы хочам, каб перайсці да наступнага знака. Так што ў наступны ў індэксе 1 з тэксту было б апостраф. Але памятайце, мы толькі хочам, каб зашыфраваць літары. Такім чынам, мы хочам пераканацца, што апостраф на самай справе застаецца той жа, што мы не зменіцца ад 39 да 45 гэта ўсё. Мы хочам захаваць яго як апостраф. Такім чынам, мы хочам памятаць толькі зашыфраваць літары таму што мы хочам, каб усе астатнія сімвалы застаюцца нязменнымі ў нашай праграме. Іншая справа, што мы хочам захаваць капіталізацыю. Таму, калі ў вас ёсць загалоўнай літары, яна павінна заставацца, як у верхнім рэгістры. Ніжні рэгістр павінен застацца ў ніжнім рэгістры. Такім чынам, некаторыя карысныя функцыі, каб быць у стане мець справу толькі з шыфраваннем літары і трымаць захаванні капіталізацыі рэчы гэта функцыі ISALPHA, ISUPPER, IsLower. І таму гэтыя функцыі, якія вяртаюць вас лагічнае значэнне. У прынцыпе, сапраўдным або ілжывым. Гэта вялікія? Ці з'яўляецца гэта алфавітна-лічбавы? Гэты ліст, па сутнасці. Дык вось 3 прыкладу таго, як можна выкарыстоўваць гэтую функцыю. У прынцыпе, вы можаце праверыць, ці з'яўляецца значэнне, вернутае вам, што функцыя з'яўляецца сапраўдным або ілжывых на аснове гэтага ўваходу. Альбо не зашыфроўваў нешта ці зашыфраваць яго ці пераканацца, што гэта вялікія і г.д. [Студэнт] Ці можаце вы растлумачыць толькі тым, яшчэ трохі і як вы іх выкарыстоўваеце? >> Так, вядома. Такім чынам, калі мы азірнемся назад, то тут мы маем капіталу I, ці не так? Такім чынам, мы ведаем, што я ідзе да О, таму што я + 6 з'яўляецца O. Але мы хочам, каб пераканацца, што выснова будзе сталіцай O. Так у асноўным, што гэта свайго роду збіраемся мяняць нашы ўваходу. Ці так гэта вялікія ці не будзе выгляд зменіцца такім чынам, што мы маем справу з ім. Такім чынам, калі мы выкарыстоўваем ISUPPER функцыі на дадзеным індэксе, так ISUPPER ("Я"), які вяртае нас так, каб мы ведалі, што гэта верхняя. Дык вось грунтуючыся на гэтым, потым мы паедзем у формулу што вы будзеце выкарыстоўваць, каб перакласці рэчы ў Цэзара, так, то ў прынцыпе, там будзе некалькі іншай формуле, калі гэта вялікія у адрозненне ад ніжняга рэгістра. Сэнс? Так. Не турбуйцеся. Я казаў трохі аб даданні 6 да ліста, якое не зусім сэнсу выключэннем выпадкаў, калі мы як-то разумеем, што гэтыя сімвалы з'яўляюцца свайго роду ўзаемазаменныя з цэлымі лікамі. Што мы робім гэта, мы выгляд выкарыстання няяўных ліцця. Мы пойдзем у ліццё крыху пазней, дзе вы бераце значэнне, і вы ператворыце яго ў іншы тып чым гэта першапачаткова было. Але з гэтым PSET мы зможам выгляду ўзаемазаменныя выкарыстаць знакі і адпаведныя ім цэлыя значэння. Так што, калі вы проста накрыць характар ​​толькі з адзінарнымі двукоссямі, Затым вы зможаце працаваць з ім з цэлымі лікамі, справіцца з ім як цэлае. Такім чынам, сталіца C ставіцца да 67. Малыя F ставіцца да 102. Зноў жа, калі вы хочаце ведаць гэтыя значэння, паглядзіце на свой ASCII табліцы. Так што давайце ўвойдзем у некаторыя прыклады таго, як вы маглі б адняць і дадаць, як вы можаце сапраўды працаваць з гэтымі сімваламі, выкарыстоўваць іх як узаемазаменныя. Я кажу, што ASCIIMath будзе вылічыць даданнем знака ў цэлае , А затым адлюстроўвае выніковы характар, а таксама выніковае значэнне ASCII. І вось я кажу - МЫ справіцца з гэтай часткай пазней - але ў асноўным, я кажу, што карыстач павінен запусціць сказаць ASCIIMath разам з ключом, і я кажу, што гэты ключ будзе лік , З якой мы збіраемся дадаць гэты персанаж. Дык вось заўважыў, што, так як я патрабуе ключа, так як я патрабуючы, каб яны далі мне 1 рэч, Я толькі хачу, каб іх прыняць. / Asciimath і ключ. Так што я буду патрабаваць, каб агдс роўная 2. Калі гэта не так, то я збіраюся вярнуць 1, і праграма завершыцца. Таму я кажу, што ключ не будзе першага аргументу каманднага радка, гэта будзе другі, і, як вы бачыце тут, Я збіраюся ператварыць яго ў цэлае лік. Тады я збіраюся ўсталяваць знак, які будзе р. Звярніце ўвагу, што тып зменнай ХР на самай справе цэлае. Такім чынам, што я магу выкарыстоўваць Г як цэлае з'яўляецца ўпакоўваючы яго з гэтым адзінарныя двукоссі. Такім чынам, вернемся да нашых Printf заяву, у якім у нас ёсць запаўняльнік для характару , А затым прататыпам для цэлага, сімвал ўяўляецца КПЧ, і цэлае з'яўляецца ключавым. І такім чынам мы збіраемся ў выніку дадаць 2 разам. Такім чынам, мы збіраемся дадаць усё, што г + ключ, а потым мы збіраемся надрукаваць вынік гэтага. Так давайце зробім asciimath. Гэта да даты, так што давайце проста запусціць asciimath. Так, але бачыце, гэта не рабіць нічога, таму што мы на самай справе не даць яму ключ. Таму, калі ён толькі што вярнуўся 1, наша асноўная функцыя, яна толькі што вярнулася назад да нас. Такім чынам пяройдзем у ключ. Хтосьці даў мне нумар. >> [Студэнт] 4. 4. Добра. Такім чынам, г павялічыўся на 4 збіраецца даць нам V, што адпавядае ASCII значэнне 118. І тады яна як бы мае сэнс, што - На самай справе, ці магу я спытаць вас, што вы думаеце ASCII значэння г, калі г + 4 складае 118? Тады так, г 114. Так што, калі вы паглядзіце на табліцу ASCII, то, вядома ж, вы ўбачыце, што г прадстаўлена 114. Так што цяпер мы ведаем, што мы можам дадаць цэлых лікаў, сімвалаў, гэта здаецца даволі простым. Мы проста збіраемся для перабору радкоў, як мы бачылі ў прыкладзе раней. Мы праверым, калі гэты ліст. Калі гэта так, тады мы будзем перакладаць яе на любой ключ. Даволі проста, акрамя выпадкаў, калі вы атрымаеце гэта падабаецца, Вы бачыце, што г, прадстаўлены на 122, то дасць вам іншага характару. Мы на самай справе хочам заставацца ў рамках нашага алфавіту, правільна? Такім чынам, мы павінны высветліць, нейкім чынам выгляд чысціцца. Калі вы дасягне Zed, і вы хочаце павялічыць на вызначаны лік, Вы не хочаце ісці ў межы ASCII раздзеле алфавіту; Вы хочаце, каб абгарнуць ўвесь шлях назад да А. Але майце на ўвазе, вы ўсё яшчэ захоўваючы той выпадак. Такім чынам, ведаючы, што лісты не могуць стаць знакамі як знакі не будуць таксама мяняецца. У апошнія PSET вы дакладна не трэба, але варыянт павінен быў рэалізаваць свае прагныя PSET з дапамогай модуля функцыі. Але цяпер мы на самай справе збіраемся трэба выкарыстоўваць модуль, так што давайце проста ісці па гэтым няшмат. Па сутнасці, калі ў вас ёсць х па модулю у, які дае вам астатнюю частку х дзеліцца на ў. Вось некалькі прыкладаў. У нас ёсць 27% 15. У асноўным, калі трэба адняць 15 з 27 столькі разоў, колькі магчыма, не атрымаўшы адмоўны , То вы атрымаеце 12 засталося. Так што накшталт як у матэматыцы кантэксце, але як мы можам выкарыстоўваць гэта? Гэта будзе карысна для нашых п `ах. Для гэтага, давайце проста скажам, я спытаў вас ўсіх падзяліць на 3 групы. Часам вы робіце гэта ў групах і нешта накшталт гэтага. Скажам, я сказаў: "Добра, я хачу, каб вы быць падзеленыя на 3". Як вы маглі б гэта зрабіць? [Неразборліва адказ студэнта] Так, менавіта так. Адлічэце. Добра. Давайце на самай справе зрабіць гэта. Вы хочаце, каб пачаць? [Студэнтам адлічваючы] 1, 2, 3, 4. Але памятайце ... >> [Студэнт] Ой, прабачце. Гэта сапраўды добры пытанне. Вы сказалі, што 4, але мы на самай справе хочам, каб вы кажаце 1, таму што мы хочам толькі 3 групы. Такім чынам, якім - Не, гэта сапраўды добры прыклад, таму што тое, як вы маглі б сказаць 1? Якія адносіны паміж 4 і 1? Ну, 4 мод 3, 1. Так што, калі вы будзеце працягваць, то будзе 2. Таму ў нас ёсць 1, 2, 3, 1, 2. Зноў жа, вы на самой справе 5-га чалавека. Як вы ведаеце, казаць 2, а не 5? Вы кажаце, што 5 Mod 3, 2. Я хачу бачыць, як шмат гуртоў з 3 засталося больш, то ў якім парадку я! І такім чынам, калі б мы працягвалі па ўсёй пакоі, то мы ўбачылі б, што мы заўсёды на самай справе прымянення мода функцыя сабе ў выглядзе адлічваць. Гэта больш выгляду наглядны прыклад таго, як можна выкарыстоўваць па модулю таму што я ўпэўнены, што большасць з нас, верагодна, прайшлі праз гэты працэс дзе мы павінны былі адлічваць. Любыя пытанні па модулю? Гэта будзе вельмі важна разабрацца ў паняццях гэтага, таму я хачу, каб пераканацца, што вы, хлопцы, разумееце. [Студэнт] Калі ёсць без астатку, гэта дае вам рэальны лік? Калі адна з першых 3 з іх зрабілі гэта, ці будзе гэта далі ім тое, што яны былі на самай справе, ці ж ён даў ім [неразборліва] >> Гэта добры пытанне. Пры адсутнасці астатку па модулю - так што ў вас ёсць 6 Mod 3 - што на самай справе дае вам 0. Мы пагаворым пра гэта крыху пазней. Ах ды, напрыклад, 3-й асобы - 3 мода 3 на самай справе 0, але яна сказала 3. Так што накшталт як унутранай здабычы, напрыклад, як добра, калі мода роўны 0, то я буду 3-й асобы. Але мы ўвойдзем у родзе таго, як мы маглі б мець справу з тым, што 0 не пазней. Так што цяпер мы неяк павінны спосаб адлюстравання Zed справа лісце. Такім чынам, зараз мы прайшлі праз гэтыя прыклады, мы як бы бачым, як Цэзар можа працаваць. Вы бачыце, 2 алфавіту, а затым вы бачыце іх перамяшчэнне. Так давайце паспрабуем выказаць гэта ў тэрмінах формулы. Гэтая формула сапраўды даецца вам у спецыфікацыі, Але давайце выгляд погляду праз тое, што кожная пераменная сродкі. Наш канчатковы вынік будзе зашыфраванага тэксту. Такім чынам, гэта кажа пра тое, што га характару зашыфраваны тэкст будзе адпавядаць га характару тэксту. Гэта мае сэнс, таму што мы хочам, каб заўсёды быць падшэўка гэтыя рэчы. Так што гэта будзе га характару зашыфраванага тэксту плюс да, які з'яўляецца нашым ключом - , Якая мае сэнс - а то ў нас гэтая мода 26. Памятаеце, калі мы былі Zed мы не хочам, каб патрапіць у характар, таму мы хацелі, каб гэта мода і выгляд абгарнуць вакол алфавіту. Пасля Zed вы пойдзеце да A, B, C, D, пакуль вы не дабраліся да патрэбнага колькасці. Такім чынам, мы ведаем, што Zed, калі + 6, дасць нам е, таму што пасля Zed прыходзіць A, B, C, D, E, F. Такім чынам, давайце памятаць, што мы ведаем напэўна, што Zed + 6 збіраецца даць нам ф. У ASCII значэння, г складае 122 і Р 102. Таму мы павінны знайсці спосаб зрабіць наш Цэзар формула дасць нам 102 пасля прыняцця ў 122. Так што, калі мы проста ўжыць гэтую формулу, ('Z' + 6) 26%, што на самай справе дае вам 24 таму што 122 + 6 128; 128% 26 дае вам 24 астатку. Але гэта на самай справе не азначае, ф. Гэта вызначана не 102. Гэта таксама не 6-й літарай у алфавіце. Такім чынам, відавочна, што мы павінны мець некаторы спосаб налады гэтага няшмат. У тэрмінах рэгулярных алфавіту, мы ведаем, што г 26 літары і F з'яўляецца 6-м. Але мы ў інфарматыцы, так што мы збіраемся індэкса 0. І тады замест г-лік 26, мы будзем казаць, што гэта нумар 25 таму што гэта 0. Такім чынам, цяпер давайце выкарыстоўваецца і ў дачыненні гэтую формулу. Мы маем г прадстаўлены 25 + 6, якая дае вам 31. І 31 мод 26 дае вам 5 у якасці рэшты. Гэта выдатна, таму што мы ведаем, што F з'яўляецца 5-й літарай у алфавіце. Але гэта яшчэ не е, праўда? Ён па-ранейшаму не 102. Такім чынам, то для гэтага PSET, выклік будзе спрабаваць высветліць адносіны паміж канвертаванне паміж гэтымі значэннямі ASCII і алфавітны паказальнік. Па сутнасці, тое, што вы хочаце рабіць, вы хочаце, каб пачаць з ASCII значэння, а то вы хочаце, каб хоць неяк перавесці гэта ў алфавітным паказальніку Затым разлічыць, якія ліста ён павінен быць - у асноўным, тое, што яго Алфавітны паказальнік шыфра характар ​​- тое, што перавесці назад у ASCII значэння. Так што калі вы выхапіць вашу ASCII табліцы, а затым паспрабаваць знайсці ўзаемасувязь паміж, скажам, 102 і 5 або 122 і 25. Мы атрымалі наш ключ ад аргументаў каманднага радка, мы атрымалі тэкст, Мы зашыфравана яго. Цяпер усё, што нам засталося зрабіць, гэта раздрукаваць яго. Мы маглі б зрабіць гэта некалькімі рознымі спосабамі. Што мы можам зрабіць, гэта на самай справе друкаваць як мы ідзем разам. Як мы перабору знакаў у радку, мы маглі б проста проста раздрукаваць прама тады, калі мы яе разліку. Акрамя таго, можна таксама захоўваць яго ў масіў, а масіў сімвалаў і ў канцы ітэрацыі, што ўвесь масіў і раздрукаваць яго. Такім чынам, у вас ёсць некалькі варыянтаў для гэтага. І памятайце, што з% будзе запаўняльнік для друку характару. Так што ў нас ёсць Цэзар, і цяпер мы пераходзім да Vigenere, які вельмі падобны на Цэзара, але ледзь складаней. Так па сутнасці з Vigenere гэта вы будзеце праходзіць у ключавое слова. Такім чынам, замест нумара, вы будзеце мець радкі, і так, што збіраецца выступаць у якасці ключавога слова. Затым, як звычайна, вы збіраецеся атрымаць падказку для радка ад карыстальніка , А затым зашыфраваць яго, а затым даць ім назад зашыфраванага тэксту. Такім чынам, як я ўжо сказаў, гэта вельмі падобны на Цэзара, толькі замест пераходу на вызначаны лік, колькасць фактычна збіраецца змяняць кожны раз ад персанажа да персанажа. Каб прадставіць, што фактычная колькасць перакласці, ён прадстаўлены на клавіятуры літары. Так што, калі вы ўваходзіце ў зрушэнні, напрыклад, тое, што будзе адпавядаць зрушэнню 0. Так што гэта яшчэ раз вярнуцца да алфавітным паказальніку. Што можа быць карысна, калі вы бачыце, што мы сапраўды маем справу з ASCII значэння а таксама лісты, а таксама алфавітны паказальнік, магчыма, знайсці або стварыць свой уласны ASCII табліца, якая паказвае алфавітны паказальнік ад 0 да 25, праз г, а ASCII значэння, так што вы можаце бачыць выгляд адносін і намеціць і паспрабаваць знайсці некаторыя заканамернасці. Сапраўды гэтак жа, калі б вы былі зрушэння ў пэўнай інстанцыі F - і гэта альбо малымі ці вялікімі F - тое, што адпавядала б 5. Хіба мы добра да гэтага часу? Формула для Vigenere трохі адрозніваецца. У прынцыпе, вы ўбачыце, што гэта так жа, як Цэзар, выключэннем, а не толькі да маем да індэксам J. Звярніце ўвагу, што мы не выкарыстоўваем, таму што я па сутнасці, даўжыня ключавога слова не абавязкова даўжыні нашага зашыфраванага тэксту. Гэта будзе трохі ясней, калі мы бачым, напрыклад, што ў мяне ёсць трохі пазней. У прынцыпе, калі вы запусціце праграму з ключавым словам Ohai, то гэта азначае, што кожны раз, Ohai будзе вашай змены. Таму ў залежнасці ад таго, што пазіцыі вы знаходзіцеся ў ваша ключавое слова, Вы збіраецеся перанесці ваш пэўны характар ​​зашыфраванага тэксту на гэтую суму. Зноў жа, як Цэзар, мы хочам пераканацца, што мы захаваем капіталізацыі рэчы і мы толькі зашыфраваць літары, а не сімвалы або прабелы. Так азірнуцца назад, каб Цэзар на функцыі, якія вы можаце выкарыстоўваць, так, што вы вырашылі, як перакласці рэчы, і прымяніць гэта да вашай праграме. Так што давайце карта гэтым. У нас ёсць тэкст, які мы атрымалі ад карыстальнікаў з GetString Сказаўшы гэта ... з'яўляецца CS50! Тады ў нас ёсць ключавое слова Ohai. Першыя 4 сімвала, даволі простыя. Мы ведаем, што T збіраецца быць ссунутыя на о, Тады Н будзе ссунуты на гадзіну, я маю намер быць ссунутыя. Тут вы бачыце, што ўяўляе сабой 0, так, то канчатковае значэнне на самай справе проста жа літары, што і раней. Затым з зрушваецца на мяне. Але тады ў вас ёсць гэтыя перыяды тут. Мы не хочам, каб зашыфраваць, што, такім чынам, то мы не змяніць, нічога і проста раздрукаваць перыяд нязменным. [Студэнт] Я не разумею, як вы ведаеце, што гэта ссунутая на - Дзе ты - >> Ой, прабачце. У верхняй Тут вы бачыце, што аргумент каманднага радка Ohai тут, што гэта будзе ключавым словам. А так у асноўным, вы веласіпеднага больш знакаў у ключавых слоў. [Студэнт] Такім чынам, выснова будзе зрушваючы ж - Так O адпавядае пэўны нумар у алфавіце. [Студэнт] Дакладна. Але з чаго ты ўзяў CS50 частка з? Ох. Гэта ў GetString, дзе вы, як: "Дайце мне радка для кадавання". [Студэнт] Яны збіраюцца даць вам, што аргумент перайсці на і тады вы будзеце прасіць вашай першай радка. >> Так. Таму, калі яны запусціце праграму, яны будуць уключаць ключавыя словы У іх аргументы каманднага радка, калі яны запусціце яго. Затым, калі вы праверылі, што яны на самой справе даў вам 1 і не больш, не менш, Затым вы ідзяце, каб падштурхнуць іх да радка, скажам, "Дайце мне радка". Дык вось дзе ў гэтым выпадку яны далі вам гэта ... з'яўляецца CS50! Такім чынам, вы збіраецеся выкарыстоўваць, што і выкарыстанні Ohai і перабіраць. Звярніце ўвагу, што тут мы прапусцілі шыфравання перыяды, але з пункту гледжання нашай пазіцыі па Ohai, наступны мы выкарыстоўвалі а. У дадзеным выпадку гэта крыху больш складана ўбачыць, таму што гэта 4, так давайце працягнем няшмат. Проста прытрымвайцеся са мной тут. Тады я і S, якія затым перакладаюцца на в і ч адпаведна. Тады ў нас ёсць прастора, і так, то мы ведаем, што мы не збіраемся, каб зашыфраваць прасторы. Але заўважце, што замест таго, каб у гэтым месцы прама тут, Мы шыфраванне па - Я не ведаю, калі вы бачыце, што - прама тут. Так што гэта не падобна на цябе фактычна наканаваная, скажам, ідзе тут пра, ч тут ідзе, ідзе тут, я тут ідзе, O, H, A, I, O, H, A, I. Вы не робіце гэтага. Вы толькі змяніць сваю пазіцыю ў ключавых слоў калі вы ведаеце, што вы на самай справе будзеце шыфравання фактычнай лісце. Ці ёсць такі сэнс? Добра. Так што некаторыя напамінку. Вы хочаце, каб пераканацца, што вы толькі перайсці да наступнага ліста ў ваша ключавое слова калі персанаж у адкрыты тэкст ліста. Так што сказаць, што мы знаходзімся на в. Адзначым, што наступны знак, індэкс Я з тэксту, з'яўляецца лікам, напрыклад. Тады мы не вылучаюць J, індэкс для нашага ключавога слова, пакуль мы не дасягнем яшчэ адзін ліст. Зноў жа, вы таксама хочаце, каб пераканацца, што вы пахам да пачатку ключавога слова калі вы знаходзіцеся ў канцы яго. Калі вы бачыце, тут мы знаходзімся я, наступны павінен быць кс. Такім чынам, вы хочаце знайсці нейкі спосаб, каб быць здольным пахам ў пачатку вашых ключавых слоў кожны раз, калі вы дойдзеце да канца. І так зноў, які аператар карысны ў гэтым выпадку для абкручванні вакол? Як і ў адлічваючы прыклад. [Студэнт] знак адсотка. >> Так, знак адсотка, што з'яўляецца па модулю. Такім чынам, па модулю спатрэбіцца, калі хочаце, каб абгарнуць па індэксе ў Ohai. І так жа хутка падказка: паспрабуйце думаць пра абкручванні па ключавым слове трохі падобны на адлік, дзе, калі ёсць 3 групы, 4 чалавекі, іх колькасць, што яны сказалі, было 4 мод 3, якая была 1. Так што паспрабуйце і думаць па-іншаму. Як вы бачылі ў формуле, дзе ў вас ёсць CI а потым пі, але затым кДж, Вы хочаце, каб пераканацца, што вы сачыць за тым. Вам не трэба называць гэта я, вам не трэба называць гэта J, але вы хочаце, каб пераканацца, што вы адсочваць пазіцыі, што вы ў ў тэкст а таксама з таго, што вы на ваша ключавое слова ў таму што тыя, якія не абавязкова будзе тое ж самае. Не толькі ключавое слова - яно можа быць цалкам рознай даўжыні, чым ваш тэкст. Акрамя таго, ваш тэкст, ёсць лічбы і сімвалы, так што гэта не будзе ідэальна адпавядаць разам. Так. [Студэнт] Ёсць функцыя змяніць справа? Ці можаце вы змяніць у сталіцу? >> Так, там вызначана ёсць. Вы можаце праверыць - Я лічу, што гэта ToUpper, усё 1 слова. Але калі вы спрабуеце зашыфраваць рэчы і захаваць тэкст, лепш у асноўным мець асобныя выпадкі. Калі гэта вялікія літары, то вы хочаце перайсці па гэтай таму што ў формуле, калі вы азірацца назад, як мы павінны выгляду ходу ўзаемазаменныя паміж ASCII спосаб прадстаўлення лікаў і фактычнага алфавітны паказальнік, мы хочам пераканацца, што там будзе нейкі шаблон, які вы збіраецеся выкарыстоўваць. Яшчэ адна заўвага па шаблоне, на самай справе. Вы будзеце вызначана мець справу з лічбамі. Імкніцеся не выкарыстоўваць магію лікаў, якое з'яўляецца прыкладам стылю. Так што вы хочаце, каб кожны раз, калі нешта зрух падабаецца - Такім чынам, намёк, іншы спойлер, калі вы збіраецеся нешта ч. на пэўную велічыню, стараюся не прадстаўляць, што, фактычная колькасць а паспрабаваць і паглядзець, калі вы можаце выкарыстоўваць ASCII значэнне, якое быццам бы больш сэнсу. Яшчэ адна заўвага: Таму што мы маем справу з формуламі, нават калі ваш TF будзе выгляд ведаем, што карціна вы маглі б выкарыстоўваць, Лепш за ўсё ў вашым каментары выгляду растлумачыць логіку, як, "Я выкарыстоўваю гэтую мадэль, таму што ..." і збольшага растлумачыць карціну коратка ў сваім каментары. [Гэта было праходжанне 2] Калі няма ніякіх іншых пытанняў, то я застануся тут няшмат. Поспехаў вам у вашых PSET 2: Crypto і дзякуй за ўвагу. [Студэнт] Дзякуй. >> Дзякуй. [Media Offline Intro]