[Powered by Google Translate] [Валктхроугх - Проблем Сет 2]
[Замила Цхан - Универзитет Харвард]
[Ово је ЦС50. ЦС50.ТВ]
У реду. Поздрав свима, и добродошли у Валктхроугх 2.
Прво, желим да вам честитам за завршну псет 1.
Знам да би то могло да буде мало тешко за неке од вас,
могао бити ваш први компјутерски програм који сте написали,
али само запамтите да на крају ове године, када се осврнете на крају семестра,
ћете погледати псет 1 и ви ћете рећи: "Хеј, ја сам могао да уради за 5 минута."
Дакле, знам и верујем да ће на крају ове дефинитивно ћете наћи псет 1 прилично једноставна.
Али за сада је то огроман успех, и честитке за добијање уради.
Сада, такође брзо напомена пре него што уђу у месо од објашњења.
Ја само желим да се брзо напомену да понекад не имати довољно времена
током Валктхроугхс да прође кроз сваки начин раде проблема сет
и прилично само можда фокусирати на 1 или 2 врсте имплементацијама,
начина да то урадите.
Али то не значи да сте забрањено то раде други начин.
Често постоје, као и код компјутерских наука, бројни начини да се то уради ствари,
и тако дефинитивно слободно да користе другачији тип решења него што сам представио.
[Псет 2: Црипто - Замила Цхан - замила@цс50.нет]
[Псет2 - 0. Секција питања - 1. Цезар - 2. Вигенере]
У реду. Дакле, проблем сет 2: Црипто је забавно један.
Опет, са сваким псет ћете почети са једном делу питања
која ће бити спроведена у вашим одељцима са својим додељеним асистент.
Нећемо ићи преко њих преко објашњења,
али они ће сигурно помоћи да завршите псет.
Дакле, први део проблема скупа је Цезар.
И тако у Цезара неко ће вам донети тастер са цео број,
и ви ћете шифровање ниску текста да вам обезбеди
и да их врати шифровану ствар.
Ако ико гледао А Цхристмас Стори, постоји пример да постоји.
Затим је други део проблема сета Вигенере,
што је више Адванцед Енцриптион техника.
И тако ћемо енципхер део текста,
осим уместо са само једним цео број, ми заправо идемо да га кодирање
са кључним речима које ће корисник нам доставите.
Ок, тако да је први алат у кутији са алатом данас заправо ће бити ажурирање апарат.
На дискусионој табли ћемо видети нешто попут: "Зашто не овај посао?"
"Зашто не поднесе 50 рад?"
и често решење је заправо само да ажурирате свој уређај.
И тако ако само раде у прозору терминала у вашем апарата судо иум-и -
То је застава каже да, ажурирати све - ажурирање,
онда се ваш апарат ће се ажурирати ако буде потребно.
И то не боли, ако сте већ у најновијој верзији апарата.
Онда ће само рећи нема нових ажурирања доступна и можете наставити рад заједно.
Али ово је добро да извршава чак сваки пут када отворите апарат
јер смо још увек јако много -
Понекад, ако дођемо у Буг - поправљао га у апарат.
Дакле, проверите да ли имате најновију верзију апарата
и покрените да ажурирате тамо.
У реду. Дакле, пошто се бавимо слова и променом, кифарска ствари,
ћемо заиста желе да постану најбољи пријатељи са нашим АСЦИИ табели.
Постоје бројни они на мрежи, ако вам. Можда чак и да ваш сопствени.
У суштини, са сваким словом и сваком броју и сваки карактер
је број повезан са њима,
па то је добро видети своје АСЦИИ вредности поред самог писма.
То ће дефинитивно помоћи у проблем сету.
Једна ствар која ме је заиста помогла у овом проблематиком сету је била заправо да га одштампате,
и док сам ишао путем, ја заправо бих да скренем на њему,
пише: "Ако ово треба да иде тамо, а онда ..."
Некако се ослањају на њега и обележити га, постали најбољи пријатељи са својим АСЦИИ табели.
Онда имамо неколико других алата на располагању.
Овај пут уместо заправо навело корисника за све своје улаза
ћемо направити комбинацију.
Ми ћемо их упитати за неке улаз,
али такође ћемо само да користите аргументе командне линије.
Дакле, када су покренути свој програм, обично кажете / здраво., На пример,
ако је ваш програм био хелло.ц.
Али овај пут, уместо да само кажем да они могу накнадно ставити речи, аргумената.
И тако ћемо користити све што прође нама као њихов допринос као и,
па креће даље само изазвало за цео али и преко командне линије аргументе.
А онда ћемо ићи у низовима и гудаче, које ћемо користити много као добро.
Ево само пример 1 мини АСЦИИ табели.
Као што сам рекао, свако слово одговара броју,
и тако се упознате са тим. Она ће доћи у руци.
А касније, када почнемо радиш неке АСЦИИМатх бави бројевима -
додавање, одузимање их - онда дефинитивно добро да се односи на ову карту.
Дакле, ево пример Цезар шифре - нешто што можда сте играли са.
То је само точак. У суштини, постоји спољни писмо и онда је унутрашња писмо.
Дакле, овде је пример Цезара шифри али са кључем од 0.
У суштини, је усклађен са, Б поравнат са Б, па све до Ж
Али онда кажу да смо желели кључ од 3, на пример.
Онда бисмо ротирати унутрашњи точак, тако да се сада усаглашава са Д, итд
И тако је то у суштини шта ћемо да радимо.
Ми немамо точак, али шта ћемо да урадимо је да наш програм
врста пребаци писмо заједно са нама извесном броју.
Дакле, као што сам већ рекао, ми ћемо се бавити са аргументима командне линије
као и добијање природан број.
Дакле, начин на који ће корисник покренути ваш програм је Цезар рекавши. / Цаесар
а затим унети број после тога.
И тај број представља кључ, схифт,
колико пута сте ишли да се ротира унутрашњи точак вашег Цезара шифри.
И тако ти видиш овде пример.
Ако смо ушли слова од А до Л у нашој Цезар шифри,
онда би унос Д кроз О зато што је свако слово помера преко 3 пута,
баш као пример точак који сам вам показао.
Дакле, ако сте унели, на пример, ово је ЦС50!
онда би такође померити све слова.
И то је важна ствар у оба Цезара и Вигенере
јесте да ћемо прескочити неке не-слова.
Дакле, било места, карактери, итд, бројеви, идемо да их исто.
Ми само идемо да пребаце слова у овом случају.
Дакле, као што видите на точку, имамо само слова на располагању за нас,
тако да ми само желимо да пребаце слова и шифровање писма.
Дакле, прва ствар коју треба урадити, ви сте видели да је употреба за Цезара у проблему сет 2
је да се покрене Цезара, а затим унесите број када га покренете у терминалу.
Дакле, оно што треба да урадимо је да некако тај кључ и приступе.
И зато желимо да некако видим да ће то бити друга командна линија аргумент.
Први ће бити / Цезар., А следећи ће бити кључ број.
Дакле, пре него што смо имали инт маин () за почетак наше програме Ц.
Идемо одлепите слој мало
и заправо видимо да уместо пролази у празнину на нашем главном функцијом
ми заправо бавимо 2 параметрима.
Имамо инт аргц имену, а затим низ стрингова назива аргв.
Дакле аргц је цео број,
и представља број аргумената донетих у вашем програму.
А онда аргв је заправо списак аргумената прошли.
Сви аргументи су низови, па аргв представља низ, листе, од жице.
Хајде да причамо о низовима мало.
Низови су у суштини нова структура података.
Имамо Интс смо дубл, имамо конце, а сада имамо низове.
Низови су структуре података који могу да држе више вредности истог типа,
па у суштини, листа било ког типа желите.
У суштини, ако сте желели листу целих бројева свих у 1 променљиве,
онда би створило нову променљиву која је од низа типа инт.
Дакле, низови нула-индексиране, што значи да је први елемент низа је на индекс 0.
Ако се низ од дужине 4, као у овом примеру, онда се ваш последњи елемент ће бити у индексу 3,
што је 4 - 1.
Тако да створи низ, што би урадио овако нешто.
Рецимо да сте хтели двоструку низ.
Ово важи за све врсте типа података, ипак.
Тако да желите двоструку низ. Рецимо да желите да га зову поштанско сандуче.
Баш као што би било који други покрене двојника,
ви би рекли двоструко, а затим име, али овај пут смо ставили угластим заградама,
и онда тај број ће бити дужина низа.
Имајте на уму да у низовима не можемо икада променити дужину,
тако да увек имате да дефинишете и изаберете колико кутије,
колико вредности ваш низа ће се држати.
Тако да подесите различите вредности у свом низу, ти ћеш да користите овај следећу синтаксу,
Као што видите на слајду.
Имате сандуче индекс 0 ће бити постављен на 1,2,
сандуче индекс 1 сет на 2,4, итд
Дакле, сада када смо прегледали низова мало, хајде да се вратимо на аргц и аргв.
Ми знамо да је сада аргв низ стрингова.
Дакле, када корисник пролази - кажу они покренули програм -
они кажу / здраво Дејвид Малан.,
шта ће програм урадити за вас већ је заправо дошао до онога што аргц и аргв су.
Дакле, не морате да бринете о томе.
Аргц у овом случају би била 3 ​​зато што види 3 различите речи раздвојене размацима.
И тако онда је низ у овом случају, први индекс би био / здраво.,
следећи Давид следећи Малан.
Да ли неко види одмах шта однос између аргв,
низ, а аргц је?
Да. Ми ћемо се у то на примеру у аргс.ц.
Хајде да видимо да ли можемо искористити односа између 2.
Овде можете наћи у апарату подразумевана апликација
да отвори ц фајлове. понекад Емацс.
Али ми желимо да се баве гедит, па шта можете да урадите је да десним кликом на Ц фајлу,
идите на Пропертиес, Опен Витх, а затим изабрати гедит, Постави као подразумевано,
и сада ваш програм би требало да отвори у гедит уместо Емацс.
Савршено.
Дакле, овде имате програм који желим да одштампате сваки аргумент командне линије.
Дакле, шта год корисник улази, хоћу да га врати суштини назад њима на новој линији.
Дакле, шта је структура која се може користити за прелазили преко нешто -
нешто што сте вероватно користи у вашем псет 1?
Ако желите да идете кроз одређени број ствари? >> [Ученик] За петљу.
За петљу. Управо тако. Дакле, хајде да почнемо са за петљу.
Имамо за инт и = 0. Хајде да почнемо са стандардним иницијализацију променљиве.
Ја ћу да одем услов за скуп, а онда кажу и + +, урадити ствари тамо.
У реду.
Тако размишља назад аргв, ако аргв је листа аргумената донетих на програму
а аргц је број аргумената у програму,
онда то значи да је у суштини аргц дужина аргв, десно,
јер ће бити много аргумената као вредности аргц.
Дакле, ако желимо да прелазили преко сваког елемента у аргв,
ћемо желети да сваки пут приступите променљиву у аргв у датом индексу.
То може бити представљен са тим, зар не?
Ова променљива овде представља посебну ниску у овом случају
зато што је жица низ - посебно ниска у датом индексу.
Оно што ми желимо да урадимо у овом случају желимо да га одштампате, па рецимо принтф.
А сада аргв је ниска, па желимо да се тамо стави тај чувар места.
Желимо нову линију само да би изгледало добро.
Дакле, овде имамо за петљу. Ми још увек немамо услова.
Тако сам почиње од 0, и онда сваки пут то ће штампати дати ниску
у том индексу у низу.
Дакле, када желимо да заустави штампање елемената у низу?
Када смо завршили, зар не? Када смо стигли на крај низа.
Дакле, ми не желимо да прелази поред дужине низа,
а ми већ знамо да не треба да се заиста активно сазнали шта је дужина аргв је
зато што је дао нама, и шта је то? Аргц. Управо тако.
Зато желимо да урадимо овај број процес аргц пута.
Ја нисам у правој директоријуму.
У реду.
Сада хајде да аргс. Нема грешке, што је сјајно.
Па хајде да се покрене аргс.
Шта ће ово да се врати на нас? То ће га одштампате назад.
"Ти уноси аргс у програм, ја ћу да га врати вама."
Па рецимо да желимо да кажемо аргс онда фоо бар.
Дакле, онда га исписује назад до нас. Све у реду?
Дакле, ту је пример како можете користити аргц и аргв
знајући да аргц представља дужину аргв.
Уверите се да не икада са низовима приступом једним изван дужине низа
јер Ц ће дефинитивно виче на вас.
Добићете нешто што се зове сегментација грешка,
која никада није забавно, у основи кажете да покушавате да приступите нешто
који не постоји, не припада теби.
Зато се потрудите, а посебно са нултом индексирања, ми не желимо да -
Као на пример, ако имамо низ дужине 4,
да низ индекс 4 не постоји, јер смо започели на 0, на нултом индексу.
То ће постати друга природа баш као за петље када почнемо на 0.
Дакле, само имајте то на уму.
Не желим да икада приступили индекс низа који је изван вашег домашаја.
Тако сада можемо да видимо како можемо врста приступа
командне линије аргументи који су положили за
Али, као што сте видели низ, аргв заправо стринг низ.
Дакле, то је заправо није цео још, али у Цезара желимо да се баве целе бројеве.
Срећом, ту је функција створена за нас који заиста могу конвертовати стринг у цео број.
Такође овде се не бавимо корисничког уноса где смо их навело
за унос овде за кључ, тако да не могу заправо репромпт и рећи,
"Ох, дај ми још цео број, кажем, ако то није валидан."
Али ми још увек треба да проверите да ли правилно коришћење.
У Цезара су само дозвољено да прође у 1 броју,
и тако они морају да воде / Цезара., а онда да ти дам број.
Тако аргц мора да буде одређен број.
Који број би то било ако имају да вам донесе / Цезар и. Онда је кључ?
Шта је аргц? >> [Ученик] 2. >> Два. Управо тако.
Дакле, желите да се уверите да је аргц 2.
У супротном, у основи одбијају да покренете програм.
У главни је функција која каже маин,
па онда смо увек у добром 0 пракси повратка на крају успешног програма.
Дакле, ако, рецимо, они вам дају 3 аргументе командне линије уместо 2
или вам дати 1, на пример, онда шта ћете урадити је да ћете желети да проверите да
а затим се вратите 1 говорећи, не, не може да настави са овим програмом.
[Ученик] Ту не може бити простор у вашем тексту. >> Опростите?
[Ученик] Ту не може бити простор у тексту који покушавате да шифровање.
Ах!
У погледу текста који покушавамо да шифровање, који заправо долази касније
када дајемо тај текст.
Дакле, сада смо само ми прихватамо као командних аргумената стварни број,
стварни помак за Цезара шифровање.
[Ученик] Зашто ти треба 2 насупрот само 1 аргц? Дефинитивно је 1 број.
Тачно. Разлог зашто нам је потребно 2 за аргц уместо 1
је зато што када покренете програм и рећи. / Цезар или / здраво.,
да заправо рачуна као аргумент командне линије.
Дакле, онда је то већ заузима 1 па онда смо уметањем 1 екстра.
Дакле, ви заправо унесе стринг у аргументу командне линије.
Шта желите да урадите, за Цезара желимо да се бави цео број,
тако да можете да користите ову функцију атои.
А у суштини, ти пренесу га у низу, а онда ће вас вратити цео број
ако је могуће да је стринг у цео број.
Запамтите, када имамо посла са принтф или ГетСтринг, такве ствари,
смо укључују библиотеке које су специфичне за нас.
Дакле, у почетку смо започели са хеш таг стандардне И / О, х,. Тако нешто.
Па, атои није у једном од тих библиотека,
па шта морамо да урадимо је да ми треба да садржи праву библиотеку за то.
Дакле, сећате назад валктхроугх 1, где сам разговарао упутство функцију.
Куцате човека у терминалу, а затим следи име функције.
И тако ће донети читав списак њеног коришћења,
али и то ће довести до којих библиотека која припада.
Зато ћу да препустим вама да користе упутство функцију са атои
и схватити библиотеку која треба да садржи да би могли да користите функцију атои.
Дакле, имамо кључ и сада је у питању добијање обичан текст,
и тако да заправо ће бити корисник улаз где питати.
Бавили смо се и ГетИнт ГетФлоат, па у истом тону
ћемо се бавити ГетСтринг.
Али у овом случају не треба да урадимо било радити док или док петље да проверите.
ГетСтринг ће дефинитивно нам дати ниску,
и ми ћемо шифровање год корисник нам даје.
Дакле, можете да претпоставите да су све ове корисничких уноси жицама тачни.
Сјајно.
Па онда кад имаш кључ и једном имаш текст,
Сада оно што је остало је да треба да енципхер отворени текст.
Само да брзо покривају преко Линго је отворени текст је оно што вам корисник даје,
и шифрат је оно што се врате у њих.
Тако ниски, да би могли да прођу кроз заправо писма писма
јер морамо да смени свако слово,
разумемо да конце, ако смо некако одлепите слоја,
видимо да су они стварно само списак ликова.
Један долази после друге.
И тако можемо третирати као низове конце јер су низови знакова.
Дакле, рецимо да имате ниску имену текст,
и унутар тог текста променљиве се чувају Ово је ЦС50.
Затим текст на индексу 0 бити престоница Т индекс 1 би х, итд
А онда са низовима, у аргц пример у аргс.ц,
Видели смо да смо морали да прелазили преко низа
па смо морали да прелазили из и = 0 до и је мање од дужине.
Зато нам треба неки начин схватите шта је дужина нашег стринга је
ако ћемо да прелазили преко њега.
Срећом опет, постоји функција ту за нас, иако је касније у ЦС50
дефинитивно ћете бити у стању да спроведе и направите сопствену функцију
који може да израчуна дужину стринга.
Али, за сада ћемо користити дужину ниске, тако стрлен.
Ти проћи у низу, а онда ће вам вратити инт који представља дужину стринга.
Погледајмо један пример како можемо бити у могућности да вршите итерацију кроз сваки карактер у стрингу
и урадити нешто са тим.
Оно што ми желимо да урадимо јесте прелазили преко сваког карактер стринга,
и шта желимо да урадимо је да смо одштампали вратио сваки знак 1 од 1
осим додамо нешто поред њега.
Дакле, хајде да почнемо са за петљу. Инт и = 0.
Ми ћемо оставити простор за стање.
Желимо да прелазили док не дођете до краја стринга, зар не?
Па шта је онда функција нам даје дужину стринга?
[Нечујан ученик одговор]
То је дужина од аргумената командне линије.
Али, за ниску желимо да користите функцију која нам даје дужину стринга.
Дакле, то је ниска дужине.
И тако онда морате проћи у низу на њега.
Потребно је да знате шта стринг је потребно да се израчуна дужину.
Дакле, у овом случају имамо посла са стринг с.
Сјајно.
Па онда оно што ми желимо да урадимо, хајде да принтф.
Сада желимо да се бави са ликовима. Желимо да одштампате сваки индивидуални карактер.
Када желите да одштампате пловак, требало би да користите чувар места попут% ф.
Са инт можете да користите д%.
И тако слично, са карактером користите% Ц рећи ћу да се штампа карактер
који је ускладиштен у променљивој.
Дакле, имамо ово, па да додате период и простор за њега.
Који лик је користимо?
Ми ћемо користити год лик смо на низа.
Онда ћемо користити нешто са линије,
али желимо да се тамо приступа одређени карактер.
Дакле, ако стринг је само низ, како онда можемо приступити елементе низова?
Имамо оне угласте заграде, а затим смо ставили индекс тамо.
Дакле, имамо угласте заграде. Наш индекс у овом случају ми смо само могу да користим. Управо тако.
Дакле, овде говоримо да ћемо се штампа карактер праћен тачком и простора,
а тај лик ће бити ИТХ писмо у нашој Стринг с.
Ја ћу само да спасе. Ок.
Сада ћу трчати дужине.
Дакле, имали смо низ зове ОМГ, а сада је још више нагласио.
Слично томе, рецимо заправо желе да добију низ од корисника.
Како бисмо то урадили?
Пре тога, како смо добили инт?
Рекли смо ГетИнт, зар не? Али то није инт, па хајде ГетСтринг.
Хајде да направимо дужину ниске. Овде нисмо унели специфичну промпт.
Дакле, ја не знам.
Идем да ставим моје име овде па онда могу да урадим једну од тих ствари
где сам доделити реч за свако писмо или нешто слично томе. Кул.
Дакле, то је ниска дужине.
Тако смо се вратили на Цезара.
Ми имамо неколико алатки како смо прелазили преко ниске,
како приступити сваки појединачни елемент.
Тако сада можемо да се вратимо у програму.
Као што сам поменуо раније, у АСЦИИ табели, ваш најбољи пријатељ,
идете да видите бројеве који су повезани са сваким словом.
Дакле, овде кажу да је наш отворени текст је сам вртоглавицу!
Затим сваки од ових ликова ће имати број и АСЦИИ вредност у вези са њом,
чак апостроф, чак простор, чак и знак узвика,
па ћете желети да имајте то на уму.
Тако кажу наше кључ који корисник укључен у њихов аргумент командне линије је 6.
То значи да за прво слово, који сам је, коју представља 73,
желите да се вратите на њих шта год писмо представља АСЦИИ вредност 73 + 6.
У овом случају то би било 79.
Сада желимо да идемо на следећи карактер.
Дакле, следећи у индексу 1 од отвореног текста бити апостроф.
Али запамтите ми само желимо да енципхер писма.
Дакле, желимо да се уверите да је апостроф заправо остаје исти,
да не мења од 39 до 45 вхатевер је.
Ми желимо да га задржи као апострофом.
Зато желимо да се сетите само енципхер слова
јер желимо све остале симболе да остане непромењена у нашем програму.
Још једна ствар коју желимо је да сачува слова.
Па кад имате велико слово, она треба да остане као велика слова.
Ловерцасес треба да остане малим.
Дакле, неке корисне функције да би могли да се баве само кифарска словима
и задржати очување капитализацију ствари
то су исалпха, исуппер, исловер функције.
И тако су функције које вам врати Булову вредност.
У основи, тачно или нетачно. Да ли је ово велика? Да ли је ово алфанумерички?
Да ли је ово писмо, у суштини.
Дакле, овде су 3 примера како можете да користите ту функцију.
У суштини, можете тестирати да ли је вредност вратио до вас ту функцију је тачно или нетачно
на основу тог уноса.
Или не енципхер нешто или шифри га или се уверите да је то велика, итд
[Ученик] Да ли можете да објасните онима мало више и како можете да их користите? >> Да, сигурно.
Дакле, ако се осврнемо уназад, овде имамо И капитал, зар не?
Дакле, ми знамо да иде до О, јер сам + 6 је О.
Али ми желимо да будете сигурни да је о ће бити престоница О.
Дакле, у основи, то је врста ће променити наш допринос.
Дакле, да ли је велика или неће врста променити начин на који смо се баве са њом.
Дакле, ако ми користимо исуппер функцију том индексу,
па исуппер ("ја"), који враћа за нас праве, тако да знамо да је горња.
Па онда на основу тога касније ћемо отићи у формули
које ћете користити да пребаце ствари у Цезара,
па онда у суштини, постоје ће бити мало другачија конфигурација ако је велика
насупрот мала. Смисла?
Да. Без бриге.
Причао сам мало о додавању 6 писму, које не баш смисла
осим када смо некако схвате да ови ликови
су врста заменљиви са целих бројева.
Оно што чинимо је врста коришћења имплицитног ливења.
Ми ћемо ићи у ливења касније мало о томе где сте узети вредност и ти то претвори у други тип
него што је то првобитно било.
Али са овим псет ћемо моћи да користе као синоними врста знакова
и њихове одговарајуће целобројне вредности.
Дакле, ако сте једноставно обложити знак са само апострофа,
онда ћете бити у могућности да раде са њим код целих бројева, који се баве тим као цео број.
Дакле капитал Ц односи на 67 година. Слово ђ се односи на 102.
Опет, ако желите да знате ове вредности, поглед на свој АСЦИИ табели.
Зато идемо у неке примере како можда ћете моћи да одузима и да додају
како ствари заиста могу радити са овим ликовима, да их користе као синоними.
Ја кажем да АСЦИИМатх ће израчунати додавање карактера на цео број
а затим приказује резултанта карактер као резултанта АСЦИИ вредност.
И ево ја кажем - касније ве'лл баве овом делу -
али у суштини, ја кажем да корисник каже покретање АСЦИИМатх заједно са кључем,
а ја кажем да је то кључ ће бити број
са којима ћемо додати ову карактер.
Дакле, овде приметити да пошто сам тражећи кључ,
пошто сам захтевајући да им дајеш ми 1 ствар,
Ја само желим да прихватим / асцииматх. И један тастер.
Дакле, ја ћу захтевати да аргц је једнака 2.
Ако није то, онда ћу да се врати 1 и програм ће излаз.
Зато ја кажем кључ неће бити први аргумент командне линије,
то ће бити други, и као што видите овде,
Ја ћу претворити у цео број.
Онда ћу поставити знак да се р.
Приметимо да је тип променљиве Цхр је заправо цео број.
Начин на који ја могу да користе р као цео број је тако да енцасинг са овим апострофа.
Вратимо се нашој принтф изјаве где имамо чувар места за карактер
и онда чувар места за цео број,
лик је заступа Цхр, а цео је кључ.
И тако онда ћемо у резултат додате 2 заједно.
Дакле, ми ћемо додати р + год кључ,
а онда ћемо да одштампате резултат тога.
Па хајде да направимо асцииматх. То је до сада, па хајде да покренете асцииматх.
Ох, али видите, то не уради ништа, јер нисмо заправо му дати кључ.
Дакле, када је управо вратио 1, Наша основна функција, то је само вратио назад у нас.
Па хајде онда да прође у кључу. Неко ми дати број. >> [Ученик] 4.
4. Ок.
Дакле, р повећан за 4 ће нам дати В, што одговара АСЦИИ вредности 118.
Дакле некако има смисла да је -
Заправо, могу ли да вас питам, шта мислите АСЦИИ вредност р је ако Р + 4 је 118?
Затим, да, р 114.
Дакле, ако се осврнемо на АСЦИИ табели онда, заиста, видећете да р представља 114.
Дакле, сада знамо да можемо додати бројеве ликовима, ово изгледа прилично једноставно.
Само ћемо да прелазили преко стринг као што смо видели на примеру пре.
Ми ћемо проверити да ли је то писмо.
Ако јесте, онда ћемо га пребацити на било који кључ.
Прилично једноставно, осим када дођете до овако,
Ви видите да з представљена 122, онда би вам дати другачији карактер.
Ми смо заправо желе да остану у оквиру нашег писма, зар не?
Зато морамо да смислимо неки начин врсте обмотају око.
Када стигнете зед и желите да повећате до одређеног броја,
не желе да иду у даље АСЦИИ алфабета делу;
желите да замотате назад све до А.
Али имајте на уму да још увек чува случај.
Дакле, знајући да слова не могу да постану симболи
као симбола се неће мењати као добро.
У последњем псет дефинитивно није потребно,
али опција је била да спроведе свој похлепног псет помоћу Модул функцију.
Али сада ми заправо идете да је потребно да користите модул,
па хајде да идемо преко ове мало.
У суштини, када имате к по модулу И, који вам даје остатак к подељен и.
Ево неких примера овде. Имамо 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 Мод 3 је 2.
Желим да видим колико група 3 су напустили готово, онда којим редоследом ја сам
И тако онда, ако смо наставили дуж целе собе,
онда ћемо видети да смо увек у ствари применом мод функцију на себе
да врста одбројавати.
То је више нека врста опипљивог пример како можете да користите по модулу
јер сам сигуран већина нас вероватно прошли кроз тај процес
где смо морали да рачунају искључен.
Сва питања о модулу?
То ће бити веома важно да разумеју концепте ово,
тако да желим да се уверите да сте разумели.
[Ученик] Ако постоји остатак, то вам даје прави број?
Ако један од првих 3 од њих су то урадили, што би им дали оно што су заиста били,
или би то им даје [нечујан] >> То је добро питање.
Када не постоји ремаиндер за модулу - тако да имате 6 мод 3 -
који заправо вас враћа 0.
Причаћемо о томе мало касније.
Ох да, на пример, 3. особа - 3 мод 3 је заправо 0, али је рекла 3.
Дакле, то је нешто као унутрашњи улова, на пример,
као ок, ако је мод је тада 0 ћу бити 3. особа.
Али ми ћемо ући у врсту како бисмо могли да се позабавимо оним 0 је касније.
Дакле, сада смо некако имају начин да се разврстају зед на десну писмо.
Дакле, сада смо прошли кроз ове примере,
ми смо некако видимо како Цезар можда неће функционисати.
Видећете 2 писма, а онда видети их мења.
Дакле, хајде да покушамо да изразимо да у погледу формули.
Ова формула је заправо дат вама у спец,
али хајде да мало погледа кроз шта свака променљива значи.
Наш крајњи резултат ће бити шифрат.
Дакле, ово каже да је ИТХ карактер шифрата
ће да одговара-тог карактера отвореног текста.
То има смисла, јер желимо да увек буде постројавање ове ствари.
Дакле, то ће бити ИТХ карактер шифрата плус к, који је наш кључ -
то има смисла - и онда имамо ово мод 26.
Сећаш се кад смо имали зед
нисмо хтели да уђу у лик, па смо хтели да га модифитсиране
и врста замотајте око алфабета.
Након зед би прелазак на, б, ц, д, док имаш на правом броју.
Дакле, ми знамо да је Зед, уколико + 6, би нам ф јер после зед долази, б, ц, д, е, ф.
Дакле, хајде да се сећате да смо сигурни да је зед + 6 ће нам дати ф.
У АСЦИИ вредностима, з 122 и ф 102.
Дакле, морамо да нађемо неки начин да наше Цезар формулу нам 102
после узимања у 122.
Дакле, ако ми само применити ову формулу, ('з' + 6)% 26, који заправо даје 24
јер 122 + 6 је 128; 128% 26 вам даје 24 остатак.
Али то не значи баш ф. То дефинитивно није 102.
То такође није 6. слово азбуке.
Очигледно, ми треба да имамо неки начин прилагођавања ово мало.
У погледу редовног писма, ми знамо да је з 26. писмо и ф је 6..
Али ми смо у компјутерске науке, па ћемо да индекс на 0.
Дакле, уместо да буде з број 26, ми ћемо рећи да је број 25
јер је 0.
Дакле, хајде да примењују ову формулу.
Имамо з представљена 25 + 6, што вам даје 31.
И 31 мод 26 вам даје 5 као остатка.
То је савршено, јер знамо да је ф 5. слово азбуке.
Али то још увек није ф, зар не? Још увек није 102.
Па онда за ову псет, изазов ће покушати да сазна однос
између конвертовање између ових АСЦИИ вредности и азбучном индекс.
У суштини, оно што ћете желети да урадите, желите да почне са АСЦИИ вредностима,
али онда желите да се некако преведе у абецедну индекса
затим израчунати шта писмо треба да буде - у суштини, оно што њен индекс по абецедном је
у шифри карактера - онда преведе Бацк то АСЦИИ вредности.
Дакле, ако сте прикупити свој АСЦИИ табелу, а затим покушајте да пронађете и односе између, рецимо, 102 и 5
или 122 и 25.
Ми смо стекли наш кључ од аргумената командне линије, ми смо стекли отворени текст,
Успели смо енципхеред.
Сада све што је остало да урадите је да одштампате га.
Могли урадили неколико различитих начина.
Оно што смо могли да урадимо је заправо штампање као што смо успут.
Као што смо прелазили преко знакове у низу,
једноставно смо могли само одштампате управо онда када смо је израчунати.
Алтернативно, можете да га сачувате у низу и имају низ знакова
и на крају прелазили преко тог целог низа и одштампате га.
Дакле, имате неколико опција за то.
И запамтите да је% ц ће бити чувар места за штампање карактер.
Значи имамо Цезара, а сада идемо на Вигенере,
који је веома сличан Цезара, али само мало сложенија.
Дакле, у суштини, са Вигенере се да ћеш бити пролазу у кључну реч.
Дакле, уместо броја, ти ћеш имати ниску,
и тако што ће да делује као кључну реч.
Затим, као и обично, да ћеш добити брзу за низ од корисника
и онда је енципхер и онда дати им шифрата леђа.
Дакле, као што сам рекао, то је веома сличан Цезара, осим уместо померања до одређеног броја,
број заправо ће променити све време од карактера до карактера.
Да представљају онај стварни број да се мењају, то је представљена на тастатури слова.
Дакле, ако сте унели у смени, на пример, онда би одговарало померања 0.
Дакле, поново се вратио у азбучном индекс.
Оно може бити корисно ако сте видели да смо заправо баве АСЦИИ вредностима
као и писма, као и азбучном индекса,
можда пронаћи или направити сопствену АСЦИИ табелу која показује алфабетски индекс 0 до 25,
до З, и АСЦИИ вредности, тако да можете видети врста односа
и скицирам и покушати пронаћи неке обрасце.
Слично томе, ако сте пребацивање у одређеном степену, ф -
и то је било мала или велика слова ђ - онда би одговарало 5.
Јесмо ли добри до сада?
Формула за Вигенере је мало другачија.
У суштини, ви видите да је то исто као Цезара,
осим уместо само к имамо к индекса ј.
Приметићете да нисмо ја користи јер у суштини, дужину кључне речи
није нужно дужину нашег шифрата.
Ово ће бити мало јасније кад видимо пример да имам мало касније.
У суштини, ако покренете програм са кључном речи на Охаи,
онда то значи да сваки пут Охаи ће бити ваша смена.
Дакле, у зависности од тога шта сте Ви у свом кључну реч,
ћеш да пребаце свој одређени карактер шифрата за тај износ.
Опет, баш као Цезара, желимо да се уверите да чувамо капитализацију ствари
а ми смо само енципхер слова, а не ликови или просторе.
Тако осврнути цару на функције које сте можда користили,
начин на који сте се одлучили како да пребаце ствари, и примените то вашем програму овде.
Дакле, хајде да мапирају ово.
Имамо отворени текст који смо стечен од корисника из ГетСтринг
рекавши Ово ... је ЦС50!
Онда имамо кључну реч за Охаи.
Прве 4 карактера су прилично једноставне.
Знамо да је Т ће бити померене за о,
онда х ће бити померене за Х, И ће бити померене за.
Овде можете видети да представља 0,
па онда на крају вредност је заправо само исто слово као и пре.
Онда с је померен до ја.
Али онда имате овде те периоде.
Ми не желимо да енципхер то, тако онда не промените ништа
и само одштампате период непромењени.
[Ученик] Ја не разумем како ви знате да је то пребацује тако - где сте - >> Ох, извини.
На врху Овде можете видети да је командна линија аргумент Охаи овде,
то ће бити кључна реч.
И тако у суштини, ви сте бициклом преко ликова у кључну реч.
[Ученик] Дакле о ће бити померања исти -
Дакле, о одговара одређеном броју у писму.
[Ученик] Тачно. Али, где сте добили ЦС50 део из?
О. То је у ГетСтринг где си као, "Дај ми низ за кодирање."
[Ученик] Они ће вам дати тај аргумент да се пребаци до
и онда ћете питати за први стринг. >> Да.
Дакле, када покренете програм, они ће укључити кључну реч
у својим аргументима командне линије када га покренете.
Онда када сте проверили да су они у ствари сам вам дао 1 и не више, а не мање
онда ћеш их упитати за ниске, кажу, "Дај стринг".
Дакле, то је где је у овом случају они су дали сте ово ... је ЦС50!
Онда ћеш то користити и користе Охаи и прелазили преко.
Приметимо да овде прескочио криптовање периоде,
али у смислу наше позиције за Охаи, следећи смо користили О.
У овом случају то је мало теже да се види, јер је то 4,
па хајде да наставимо мало. Само се држи са мном овде.
Онда имамо ја и С, што се потом превео О и х, респективно.
Онда имамо простор, па онда знамо да нећемо да енципхер просторе.
Али приметите да уместо одласка у на овом месту овде,
смо криптовање тако - не знам да ли можете да видите да је - овде.
Дакле, није као ви заправо предодређени, рецимо, о иде овде, х иде овде,
иде овде, и овде иде, о, х,, И, О, ​​Х,, ја. Ви то не радите.
Можете само мењате положај у кључну реч
када знате да сте заправо ће бити криптовање стварни писмо.
Да ли таква смисла?
Ок.
Дакле, само су неки подсетника.
Ви желите да се уверите да сте само прешли на следећи писмо у вашем кључну реч
ако лик у плаинтект је писмо.
Зато кажемо да смо у О.
Ми смо приметили да следећи знак, и индекс плаинтекту је број, на пример.
Онда ми не напредују Ј, индексни за нашу кључну реч, све док не стигнемо друго писмо.
Опет, такође желите да се уверите да сте обвојно на почетку кључне речи
када сте на крају од њега.
Ако видите овде смо на и, следећи мора да буде о.
Дакле, желите да пронађете неки начин да буде у стању да обвојно на почетку кључне речи
сваки пут када дођете до краја.
И тако опет, каква оператера је корисна у том случају за обмотају око?
Као у бројању офф пример.
[Ученик] знак за проценат. >> Да, знак за проценат, који је по модулу.
Тако модулу ће доћи овде када желите да замотате преко индекса у Охаи.
И само брзо наговештај: Покушајте да замислите обмотају око кључне речи помало као бројање искључен,
где ако има 3 групе, 4. лице,
њихов број који су они рекли била је 4 мод 3, који је био 1.
Зато покушајте и мислим о томе на тај начин.
Као што сте видели у формули, где год имате ЦИ, затим Пи али онда КЈ,
Ви желите да се уверите да ли пратите од њих.
Не морате да га позовете ја, ви не морате да га зову ј
али ви желите да будете сигурни да сте пратите позицију да сте на отвореном тексту у вашем
као и ставом да сте се у свом кључном речи
јер они нису нужно бити исти.
Не само кључну реч - то може бити потпуно другачији од вашег снимка плаинтект.
Такође, ваш отворени текст, постоје бројеви и карактери,
тако да не иде да савршено одговарају заједно. Да.
[Ученик] Да ли постоји функција за промену случај?
Можете да промените на капитал А? >> Да, постоји дефинитивно јесте.
Можете да проверите - Мислим да је то тоуппер, све 1 реч.
Али када покушавате да шифри ствари и сачува тај текст,
најбоље је у основи имају одвојене случајеве.
Ако је велика, онда желите да пребаце овим
јер у свом формули, када погледате уназад како смо се некако покрету
наизменично између АСЦИИ начин представљања бројева
и стварни абецедно индекс, желимо да будете сигурни
тамо ће бити нека врста образац који ћете користити.
Друга напомена о обрасцу, заправо.
Ти ћеш дефинитивно да се бави са бројевима.
Покушајте да не користите магичне бројеве, што је пример стила.
Тако да желите да сваки пут нешто сменама од свиђа -
Ок, наговештај, један спојлер када ћеш да се мења нешто
до одређеног износа, покушајте да не представљају да је стварни број
већ пробати и видети да ли можете да користите АСЦИИ вредност, која ће врста учинити више смисла.
Друга напомена: Зато што ми имамо посла са формулама,
иако ваша подгрупа ће врста знам шта образац можда користите,
Најбоље је да у вашем коментаре врсте објасни логику, као,
"Ја користим овај образац, јер ..." и врста објасни образац језгровито у вашим коментарима.
[То је проход 2] Уколико не постоје друга питања, онда ћу остати овде још мало.
Срећно са псет 2: Црипто и хвала за долазак.
[Ученик] Хвала. >> Хвала.
[Медији Ван интро]