1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Set Problema 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Universitatea Harvard] 3 00:00:05,170 --> 00:00:07,490 [Acest lucru este CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Bine. Bună ziua, tuturor, si bun venit la Walkthrough 2. 5 00:00:10,750 --> 00:00:14,330 În primul rând, vreau să vă felicit pentru finisare PSET 1. 6 00:00:14,330 --> 00:00:18,140 Știu că ar fi putut fi un pic greu pentru unii dintre voi, 7 00:00:18,140 --> 00:00:20,460 ar fi putut fi primul program de computer care ai scris, 8 00:00:20,460 --> 00:00:24,500 dar amintiți-vă doar că, la sfârșitul acestui, atunci când te uiți înapoi la sfârșitul semestrului, 9 00:00:24,500 --> 00:00:29,820 te vei uita la PSET 1 și vei spune, "Hei, am fi putut face asta în 5 minute." 10 00:00:29,820 --> 00:00:35,700 Deci, știu și au încredere că, la sfârșitul acestui veți găsi cu siguranță un PSET destul de simplu. 11 00:00:35,700 --> 00:00:40,640 Dar pentru moment este o mare realizare, si felicitari pentru obtinerea făcut. 12 00:00:40,640 --> 00:00:44,010 Acum, de asemenea, o notă de rapid înainte de a intra în carne de walkthrough. 13 00:00:44,010 --> 00:00:48,340 Vreau doar să fac o scurtă notă pe care am, uneori, nu va avea timp suficient 14 00:00:48,340 --> 00:00:52,500 în timpul walkthroughs pentru a merge prin fiecare singur mod de a face set de probleme 15 00:00:52,500 --> 00:00:56,140 și să se concentreze mai degrabă doar poate pe 1 sau 2 fel de implementări, 16 00:00:56,140 --> 00:00:57,750 moduri în care ai putea face acest lucru. 17 00:00:57,750 --> 00:01:01,970 Dar asta nu este de a spune că este interzis de a face în alt fel. 18 00:01:01,970 --> 00:01:05,980 Există de multe ori, ca și în informatică, numeroase moduri de a face lucrurile, 19 00:01:05,980 --> 00:01:12,190 și astfel se simt cu siguranta liber să utilizați un alt tip de soluție decât poate am prezentat. 20 00:01:12,190 --> 00:01:14,520 [PSET 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. O Secțiunea de întrebări - 1. Cezar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Bine. Deci, problema set 2: Crypto este o distracție unul. 23 00:01:20,650 --> 00:01:24,500 Din nou, cu fiecare PSET veți începe cu o secțiune de întrebări 24 00:01:24,500 --> 00:01:29,600 care va fi realizată în secțiunile cu colegul tău de predare alocate. 25 00:01:29,600 --> 00:01:31,670 Noi nu suntem de gând să treacă prin acestea pe walkthrough, 26 00:01:31,670 --> 00:01:35,100 dar ele cu siguranta vor ajuta să completați PSET. 27 00:01:35,100 --> 00:01:38,100 Deci, prima parte a setului problema este Cezar. 28 00:01:38,100 --> 00:01:43,470 Și astfel, în Cezar cineva va trece o cheie cu un număr întreg, 29 00:01:43,470 --> 00:01:48,420 și vă va cripta un șir de text pe care le va oferi 30 00:01:48,420 --> 00:01:50,670 și să le dea înapoi un lucru criptat. 31 00:01:50,670 --> 00:01:56,050 Dacă cineva urmărit o poveste de Crăciun, există un exemplu de faptul că există. 32 00:01:56,050 --> 00:01:59,090 Apoi, a doua parte a setului problema este Vigenere, 33 00:01:59,090 --> 00:02:01,790 care este o tehnica de criptare mai avansat. 34 00:02:01,790 --> 00:02:05,640 Și așa vom codifica o bucată de text, 35 00:02:05,640 --> 00:02:09,600 cu excepția cazului în schimb, cu doar un singur număr întreg, de fapt, suntem de gând să-l codifica 36 00:02:09,600 --> 00:02:13,340 cu un cuvânt cheie care utilizatorul ne va oferi. 37 00:02:16,270 --> 00:02:22,090 Ok, deci primul instrument din caseta de instrumente de astăzi este, de fapt va fi actualizarea aparatului. 38 00:02:22,090 --> 00:02:26,430 Pe forumul de discuții ne-ar vedea lucruri de genul, "De ce nu acest lucru?" 39 00:02:26,430 --> 00:02:28,110 "De ce nu se supune 50 de lucru?" 40 00:02:28,110 --> 00:02:31,830 și, adesea, soluția este de fapt doar pentru a actualiza aparatul. 41 00:02:31,830 --> 00:02:36,730 Și așa, dacă aveți doar într-o fereastră terminal sudo în aparatul dumneavoastră yum-y - 42 00:02:36,730 --> 00:02:40,040 asta e un steag spune da, actualizat totul - de actualizare, 43 00:02:40,040 --> 00:02:42,280 apoi aparatul va actualiza dacă e nevoie. 44 00:02:42,280 --> 00:02:46,960 Și nu strica daca deja sunt la cea mai recentă versiune a aparatului. 45 00:02:46,960 --> 00:02:51,280 Apoi va spune doar nu noi actualizări disponibile și puteți continua să lucreze de-a lungul. 46 00:02:51,280 --> 00:02:55,800 Dar acest lucru este bun pentru a executa chiar și de fiecare dată când deschideți aparatul 47 00:02:55,800 --> 00:02:57,140 pentru ca suntem inca foarte mult - 48 00:02:57,140 --> 00:03:00,320 uneori, daca ajungem intr-un bug - fixându-l în aparat. 49 00:03:00,320 --> 00:03:03,180 Deci, asigurați-vă că aveți cea mai recentă versiune a aparatului 50 00:03:03,180 --> 00:03:07,710 și executați actualizarea acolo. 51 00:03:07,710 --> 00:03:14,360 Bine. Deci, din moment avem de a face cu litere se schimba, enciphering lucruri, 52 00:03:14,360 --> 00:03:20,410 am de gând să doriți cu adevărat să devină cei mai buni prieteni cu graficul nostru ASCII. 53 00:03:20,410 --> 00:03:24,350 Există numeroase sunt cele on-line, în cazul în care veți găsi. Poate chiar să faceți propriile dvs.. 54 00:03:24,350 --> 00:03:29,950 Practic, cu fiecare literă și fiecare număr și fiecare caracter 55 00:03:29,950 --> 00:03:32,210 există un număr asociate cu acestea, 56 00:03:32,210 --> 00:03:38,670 si asa ca e bine sa vezi valorile lor ASCII alături de scrisoarea real. 57 00:03:38,670 --> 00:03:42,310 Acest lucru va ajuta cu siguranta in setul problema. 58 00:03:42,310 --> 00:03:45,750 Un lucru care ma ajutat în acest set problemă a fost pentru a imprima de fapt l, 59 00:03:45,750 --> 00:03:48,380 si cum am fost trece prin, aș trage pe ea, de fapt, 60 00:03:48,380 --> 00:03:51,150 scrie, "Daca acest lucru trebuie să meargă până acolo, atunci ..." 61 00:03:51,150 --> 00:03:55,270 Un fel de desena pe ea și marcați-l în sus, devin cei mai buni prieteni cu tabelul ASCII. 62 00:03:57,240 --> 00:04:00,750 Apoi, avem câteva instrumente la dispoziție de alte noastră. 63 00:04:00,750 --> 00:04:03,750 De data aceasta în loc să se efectiv de utilizare pentru toate de intrare a acestora 64 00:04:03,750 --> 00:04:05,230 vom face o combinație. 65 00:04:05,230 --> 00:04:06,880 Mergem să-i solicite unele de intrare, 66 00:04:06,880 --> 00:04:11,350 dar, de asemenea, ne vom folosi doar argumente în linia de comandă. 67 00:04:11,350 --> 00:04:15,600 Așa că atunci când se execută programul lor, de obicei, spui / salut., De exemplu, 68 00:04:15,600 --> 00:04:17,310 în cazul în care programul a fost hello.c. 69 00:04:17,310 --> 00:04:22,500 Dar de data aceasta în loc de a spune doar că, acestea pot pune cuvinte, argumente după aceea. 70 00:04:22,500 --> 00:04:27,210 Și așa am de gând să folosească tot ce le trece în la noi ca input-ul lor, precum și, 71 00:04:27,210 --> 00:04:31,720 astfel încât se deplasează dincolo de determinat pentru întreg, dar, de asemenea, folosind argumente în linia de comandă. 72 00:04:31,720 --> 00:04:36,590 Și apoi vom merge in tablouri si snur, pe care vom fi folosind o mulțime la fel de bine. 73 00:04:41,460 --> 00:04:44,810 Iată doar un exemplu de 1 tabela ASCII mini. 74 00:04:44,810 --> 00:04:48,460 Așa cum am spus, fiecare literă corespunde unui număr, 75 00:04:48,460 --> 00:04:52,510 și familiarizați-vă astfel cu asta. Acesta va veni la îndemână. 76 00:04:52,510 --> 00:04:55,610 Și mai târziu, când vom începe să faci ceva de-a face cu ASCIIMath numere - 77 00:04:55,610 --> 00:05:00,110 adunarea, scăderea ei - atunci cu siguranta bun pentru a se referi la acest tabel. 78 00:05:02,860 --> 00:05:06,920 Deci, aici e un exemplu de cifru Cezar - ceva care le-ați jucat cu. 79 00:05:06,920 --> 00:05:11,190 Acesta este doar o roată. În esență, există un alfabet exterior și apoi există un alfabet interior. 80 00:05:11,190 --> 00:05:15,290 Deci, aici este un exemplu de cifru Cezar, dar cu o cheie de la 0. 81 00:05:15,290 --> 00:05:21,540 În esență, A este aliniat cu A, B, este aliniat cu B, tot drumul până la Z. 82 00:05:21,540 --> 00:05:26,590 Dar apoi spun am vrut o cheie de 3, de exemplu. 83 00:05:26,590 --> 00:05:33,280 Apoi, ne-ar roti roata interioară, astfel încât acum se aliniază cu un D, ​​etc 84 00:05:33,280 --> 00:05:35,250 Și astfel încât acesta este în esență, ceea ce am de gând să fac. 85 00:05:35,250 --> 00:05:38,340 Noi nu avem o roată, dar ceea ce am de gând să faceți este să facă programul nostru 86 00:05:38,340 --> 00:05:44,490 fel de schimbare alfabetul, împreună cu noi o anumită sumă de numere. 87 00:05:44,490 --> 00:05:48,650 Deci, după cum am spus mai înainte, vom fi de-a face cu argumente de linie de comandă 88 00:05:48,650 --> 00:05:50,390 precum si obtinerea un întreg. 89 00:05:50,390 --> 00:05:55,050 Deci, modul în care un utilizator va rula programul Caesar este prin a spune. / Cezar 90 00:05:55,050 --> 00:05:58,090 și apoi introducând un număr de după aceea. 91 00:05:58,090 --> 00:06:01,130 Și că numărul reprezintă cheia, shift, 92 00:06:01,130 --> 00:06:06,740 de câte ori ai de gând să se rotească roata interioară a cifrul lui Cezar dumneavoastră. 93 00:06:06,740 --> 00:06:08,390 Și așa te văd aici un exemplu. 94 00:06:08,390 --> 00:06:14,550 Dacă am intrat în litere de la A la L cifru Cezar noastră, 95 00:06:14,550 --> 00:06:19,520 atunci ar intrare D prin O, pentru că e în fiecare scrisoare deplasat de peste 3 ori, 96 00:06:19,520 --> 00:06:22,080 la fel ca exemplu de roata care ți-am arătat. 97 00:06:22,080 --> 00:06:25,300 Deci, dacă ați introdus, de exemplu, Acest lucru este CS50! 98 00:06:25,300 --> 00:06:27,960 atunci s-ar muta, de asemenea, toate scrisorile. 99 00:06:27,960 --> 00:06:31,040 Si asta e un lucru important atât în ​​Cezar și Vigenere 100 00:06:31,040 --> 00:06:34,890 este că vom sări peste orice litere non-. 101 00:06:34,890 --> 00:06:39,160 Deci, orice spatii, caractere, etc, numere, vom pentru a le menține aceeași. 102 00:06:39,160 --> 00:06:42,920 Suntem doar de gând să schimbe literele în acest caz. 103 00:06:42,920 --> 00:06:45,870 Deci, după cum vedeți în roata, avem doar litere disponibile pentru noi, 104 00:06:45,870 --> 00:06:50,150 așa că doresc doar pentru a schimba literele și cripta scrisorile. 105 00:06:51,370 --> 00:06:56,720 Deci, primul lucru de făcut, ați văzut că utilizarea de Cezar în problema set 2 106 00:06:56,720 --> 00:07:05,280 este de a rula Cezar și apoi introduceți un număr, atunci când îl rulați în terminal. 107 00:07:05,280 --> 00:07:10,940 Deci, ceea ce trebuie să facem este de a obtine cumva acea cheie și de acces. 108 00:07:10,940 --> 00:07:14,730 Și așa vrem să vedem într-un fel o să fie de-a doua linie de comandă argumentul. 109 00:07:14,730 --> 00:07:20,950 Primul va fi / Cezar., Iar următoarea va fi numărul de tasta. 110 00:07:22,190 --> 00:07:29,200 Deci, înainte de am avut int main (void) pentru a porni programele noastre C. 111 00:07:29,200 --> 00:07:31,790 Vom coaja de spate un strat de un pic 112 00:07:31,790 --> 00:07:34,720 și vedea de fapt că în loc de a trece în vid să funcționeze nostru principal 113 00:07:34,720 --> 00:07:37,920 avem de-a face de fapt cu 2 parametri. 114 00:07:37,920 --> 00:07:44,070 Avem un int argc și numit apoi o serie de siruri de caractere numit argv. 115 00:07:44,070 --> 00:07:46,030 Deci, argc este un număr întreg, 116 00:07:46,030 --> 00:07:49,640 și reprezintă numărul de argumente trecute în programul tău pentru a. 117 00:07:49,640 --> 00:07:53,590 Și apoi argv este de fapt lista de argumente trecute. 118 00:07:53,590 --> 00:08:00,820 Toate argumentele sunt siruri de caractere, și așa mai argv reprezintă o matrice, o listă, de siruri de caractere. 119 00:08:01,830 --> 00:08:03,990 Hai sa vorbim despre matrici un pic. 120 00:08:03,990 --> 00:08:05,940 Matrice sunt în esență, o structură de date nouă. 121 00:08:05,940 --> 00:08:09,660 Avem Ints, am dublu, avem siruri de caractere, iar acum avem tablouri. 122 00:08:09,660 --> 00:08:13,820 Matricile sunt structuri de date care poate conține mai multe valori de același tip, 123 00:08:13,820 --> 00:08:18,320 astfel, în esență, o listă de orice tip dorit. 124 00:08:18,320 --> 00:08:24,400 În esență, în cazul în care ai vrut-o listă de numere întregi All in 1 este variabilă, 125 00:08:24,400 --> 00:08:29,090 atunci ar crea o nouă variabilă, care a fost de tip int matrice. 126 00:08:29,090 --> 00:08:34,450 Deci, matrice sunt zero indexate, ceea ce înseamnă că primul element al array este la indicele 0. 127 00:08:34,450 --> 00:08:41,799 Dacă matricea este de lungime 4, ca în acest exemplu, atunci elementul ultima ta ar fi la indexul 3, 128 00:08:41,799 --> 00:08:44,810 care este de 4 - 1. 129 00:08:45,940 --> 00:08:48,420 Deci, pentru a crea matrice, v-ar face ceva de genul asta. 130 00:08:48,420 --> 00:08:51,440 Spuneți că ați vrut-o matrice dublu. 131 00:08:51,440 --> 00:08:56,520 Acest lucru este valabil pentru orice tip de tip de date, totuși. 132 00:08:56,520 --> 00:09:00,210 Deci spui ca vrei o matrice dublu. Să presupunem că doriți să-l numesc căsuța poștală. 133 00:09:00,210 --> 00:09:04,760 La fel ca tine ar initializa orice altă dublă, 134 00:09:04,760 --> 00:09:09,760 v-ar spune dublu și apoi numele, dar de data aceasta am pus între paranteze drepte, 135 00:09:09,760 --> 00:09:13,570 și apoi numărul nu va fi lungimea de matrice. 136 00:09:13,570 --> 00:09:16,840 Rețineți că, în matrice nu putem schimba niciodată lungime, 137 00:09:16,840 --> 00:09:21,230 astfel încât să aibă întotdeauna să definească și să aleagă câte cutii, 138 00:09:21,230 --> 00:09:25,440 câte valori matrice dvs. este de gând să dețină. 139 00:09:25,440 --> 00:09:31,820 Deci, pentru a stabili valori diferite în matrice ta, ai de gând să utilizați această sintaxă text, 140 00:09:31,820 --> 00:09:33,200 după cum puteți vedea pe diapozitiv. 141 00:09:33,200 --> 00:09:37,620 Ai index 0 căsuța poștală va fi setat la 1,2, 142 00:09:37,620 --> 00:09:42,180 Indicele căsuța poștală 1 set cu 2,4, etc 143 00:09:42,180 --> 00:09:47,910 Deci, acum că ne-am revizuit un pic tablouri, hai să ne întoarcem la argc și argv. 144 00:09:47,910 --> 00:09:52,220 Stim ca argv este acum un tablou de siruri de caractere. 145 00:09:52,220 --> 00:09:55,080 Deci, atunci când un utilizator trece în - spun ei execută un program - 146 00:09:55,080 --> 00:09:58,740 spun ei. / Bună ziua David Malan, 147 00:09:58,740 --> 00:10:05,160 ce programul va face pentru tine deja este de fapt veni cu ceea ce argc și argv sunt. 148 00:10:05,160 --> 00:10:07,620 Deci, nu aveți nevoie să vă faceți griji despre asta. 149 00:10:07,620 --> 00:10:14,370 Argc, în acest caz, ar fi de 3, pentru că vede 3 cuvinte distincte separate prin spații. 150 00:10:14,370 --> 00:10:18,850 Și așa, atunci matrice în acest caz, primul indice ar trebui să fie / Bună ziua., 151 00:10:18,850 --> 00:10:21,770 următoarea David, următoarea Malan. 152 00:10:21,770 --> 00:10:25,640 Are cineva vedea imediat ce relația dintre argv, 153 00:10:25,640 --> 00:10:28,990  matrice, și argc este? 154 00:10:32,820 --> 00:10:38,090 Da. Vom ajunge în faptul că într-un exemplu în args.c. 155 00:10:38,090 --> 00:10:42,880 Să vedem dacă putem profita de relația dintre 2. 156 00:10:42,880 --> 00:10:46,550 Aici s-ar putea găsi că, în aparatul implicit cererea 157 00:10:46,550 --> 00:10:49,450 pentru a deschide fișiere. c este uneori Emacs. 158 00:10:49,450 --> 00:10:54,660 Dar am dori să se ocupe cu gedit, astfel încât ceea ce poți face este puteți să faceți clic dreapta pe fișierul dumneavoastră C, 159 00:10:54,660 --> 00:11:04,580 du-te la Properties, Open With, și alege apoi gedit, Setați ca implicit, 160 00:11:04,580 --> 00:11:13,020 iar acum programul ar trebui să deschidă în gedit loc de Emacs. 161 00:11:14,710 --> 00:11:16,290 Eveniment. 162 00:11:17,120 --> 00:11:25,520 Deci, aici am un program care doresc să imprime fiecare argument de linie de comandă. 163 00:11:25,520 --> 00:11:32,050 Deci orice utilizator intrări, vreau să se întoarcă în esență, o înapoi pentru a le pe o linie nouă. 164 00:11:32,050 --> 00:11:36,710 Deci, ce este o structură care să le putem folosi pentru a itera peste ceva - 165 00:11:36,710 --> 00:11:40,380 ceva ce, probabil, folosit și în 1 PSET ta? 166 00:11:40,380 --> 00:11:45,840 Dacă vrei să mergi printr-un număr stabilit de lucruri? >> [Elev] Pentru bucla. 167 00:11:45,840 --> 00:11:48,910 Pentru bucla. Exact. Așa că să începem cu bucla for. 168 00:11:48,910 --> 00:11:56,900 Avem pentru int i = 0. Să începem doar cu o variabilă initializare standard. 169 00:11:56,900 --> 00:12:02,370 Am de gând să plece condiție pentru un set și apoi spune i + +, de gând să faci lucrurile acolo. 170 00:12:02,370 --> 00:12:04,090 Bine. 171 00:12:04,090 --> 00:12:11,590 Deci, gândire înapoi la argv, dacă argv este lista de argumente trecute în programul de la 172 00:12:11,590 --> 00:12:15,380 și argc este numarul de argumente în program, 173 00:12:15,380 --> 00:12:21,280 atunci înseamnă că argc este în esență o lungime de argv, drept, 174 00:12:21,280 --> 00:12:28,970 pentru că nu vor să fie cât mai multe argumente ca valoarea argc. 175 00:12:28,970 --> 00:12:35,910 Deci, dacă vrem să itera peste fiecare element din argv, 176 00:12:35,910 --> 00:12:43,290 am de gând să doriți să acceseze de fiecare dată variabilă în argv, la indicele dat. 177 00:12:43,290 --> 00:12:49,060 Care pot fi reprezentate cu asta, nu? 178 00:12:49,060 --> 00:12:53,430 Această variabilă reprezintă aici șirul special în acest caz 179 00:12:53,430 --> 00:12:57,030 pentru că este o matrice șir - șir special, de la acel index dat. 180 00:12:57,030 --> 00:13:00,690 Ceea ce vrem să facem, în acest caz, vrem să-l imprimați, așa că hai să spunem printf. 181 00:13:00,690 --> 00:13:04,680 Și acum argv este un șir, așa vrem să afișezi că substituent acolo. 182 00:13:04,680 --> 00:13:08,430 Ne dorim o nouă linie doar pentru a face să arate bine. 183 00:13:08,430 --> 00:13:12,530 Deci, aici avem o buclă pentru. Noi nu avem încă condiție. 184 00:13:12,530 --> 00:13:20,020 Asa ca am incepe de la 0, apoi de fiecare dată când va imprima șir dat 185 00:13:20,020 --> 00:13:22,980 la faptul că indicele special în matrice. 186 00:13:22,980 --> 00:13:28,410 Așa că atunci când vrem să oprim imprimând elemente din matrice? 187 00:13:28,410 --> 00:13:35,720 Când am terminat, nu? Când am ajuns la sfârșitul matrice. 188 00:13:35,720 --> 00:13:38,870 Deci, nu vrem să depășească trecutul lungimea de matrice, 189 00:13:38,870 --> 00:13:43,700 si noi deja știm că nu trebuie să efectiv găsi activ ce lungimea de argv este 190 00:13:43,700 --> 00:13:47,520 , deoarece este dat pentru noi, și ce-i asta? Argc. Exact. 191 00:13:47,520 --> 00:13:56,640 Așa că vrem să facem acest număr argc proces de ori. 192 00:13:56,640 --> 00:13:59,550 Eu nu sunt în directorul corect. 193 00:14:02,100 --> 00:14:03,490 Bine. 194 00:14:03,490 --> 00:14:08,990 Acum, hai să facem args. Nu există erori, ceea ce este minunat. 195 00:14:08,990 --> 00:14:11,430 Deci, hai sa ruleze doar args. 196 00:14:11,430 --> 00:14:15,130 Ce este acest gând să se întoarcă la noi? Este doar o să-l imprimați din nou. 197 00:14:15,130 --> 00:14:18,320 "Ai introduse args în program; am de gând să-l dea înapoi la tine." 198 00:14:18,320 --> 00:14:23,170 Deci, haideți să spunem că vreau să spun args, apoi foo bar. 199 00:14:23,170 --> 00:14:26,570 Deci, atunci îl tipărește înapoi la noi. În regulă? 200 00:14:26,570 --> 00:14:30,790 Deci nu este un exemplu de modul în care puteți utiliza argc și argv 201 00:14:30,790 --> 00:14:33,460 știind că argc reprezintă lungimea de argv. 202 00:14:33,460 --> 00:14:42,750 Asigurați-vă că nu face vreodată cu acces matrice cea de dincolo de lungimea matrice 203 00:14:42,750 --> 00:14:45,140 deoarece C cu siguranta vor striga la tine. 204 00:14:45,140 --> 00:14:47,560 Veți obține ceva numit o eroare de segmentare, 205 00:14:47,560 --> 00:14:52,470 care nu este distractiv, de fapt spui că încercați să îl accesați ceva 206 00:14:52,470 --> 00:14:55,000 că nu există, nu vă aparține. 207 00:14:55,000 --> 00:14:59,430 Deci, asigurați-vă că, și în special cu zero indexare, nu vrem să - 208 00:14:59,430 --> 00:15:02,390 Ca de exemplu, în cazul în care avem o serie de lungime 4, 209 00:15:02,390 --> 00:15:07,240 că indicele matrice 4 nu există pentru că vom începe de la 0, de la zero index. 210 00:15:07,240 --> 00:15:11,730 Acesta va deveni oa doua natura la fel ca pentru bucle când vom începe de la 0. 211 00:15:11,730 --> 00:15:13,610 Așa că ține doar că în minte. 212 00:15:13,610 --> 00:15:22,590 Tu nu vrei să acceseze vreodată indicele de o matrice care este dincolo de puterea ta. 213 00:15:26,710 --> 00:15:32,560 Deci, putem vedea acum cum putem fel de acces 214 00:15:32,560 --> 00:15:35,930 argumentele liniei de comandă, care sunt transmise inch 215 00:15:35,930 --> 00:15:41,330 Dar, după cum ați văzut șir, argv este de fapt o matrice șir. 216 00:15:41,330 --> 00:15:45,740 Deci, nu e de fapt un întreg încă, dar în Cezar vrem să se ocupe de numere întregi. 217 00:15:45,740 --> 00:15:54,430 Din fericire, există o funcție creată pentru noi, care poate converti de fapt, un șir de la un număr întreg. 218 00:15:54,430 --> 00:15:58,710 De asemenea, aici nu avem de-a face cu datele introduse de utilizator în cazul în care ne le-a determinat 219 00:15:58,710 --> 00:16:03,740 pentru intrare aici pentru cheie, astfel încât nu putem reprompt de fapt, și spune, 220 00:16:03,740 --> 00:16:07,840 "Oh, da-mi un alt număr întreg, spun, dacă nu e valid." 221 00:16:07,840 --> 00:16:10,540 Dar avem nevoie de încă pentru a verifica utilizarea corectă. 222 00:16:10,540 --> 00:16:13,520 În Cezar sunt permise doar pentru a trece în 1 numar, 223 00:16:13,520 --> 00:16:18,030 și astfel ei trebuie să ruleze / Cezar. și apoi ei trebuie să vă dau un număr. 224 00:16:18,030 --> 00:16:23,660 Deci, argc trebuie să fie un anumit număr. 225 00:16:23,660 --> 00:16:29,060 Ce număr ar fi că în cazul în care trebuie să treacă tine / Cezar. Și apoi o cheie? 226 00:16:29,060 --> 00:16:32,920 Ce este argc? >> [Elev] 2. Doi >>. Exact. 227 00:16:32,920 --> 00:16:35,490 Deci, doriți să vă asigurați că argc este 2. 228 00:16:35,490 --> 00:16:39,620 În caz contrar, refuză practic pentru a rula programul. 229 00:16:39,620 --> 00:16:43,040 În principal este o funcție care spune int principal, 230 00:16:43,040 --> 00:16:47,360 Și apoi am mereu la 0 bună practică retur, la sfârșitul unui program de succes. 231 00:16:47,360 --> 00:16:50,840 Deci, dacă, să zicem, ei vă dau 3 argumente în linia de comandă în loc de 2 232 00:16:50,840 --> 00:16:54,350 sau dau 1, de exemplu, atunci ce vei face e veți dori să verificați că 233 00:16:54,350 --> 00:16:59,900 și a reveni apoi o spun, nu, eu nu pot continua cu acest program. 234 00:16:59,900 --> 00:17:03,190 [Elev] Nu poate fi un spațiu în text. Scuză-mă >>? 235 00:17:03,190 --> 00:17:06,780 [Elev] Nu poate fi un spațiu în textul pe care încercați să criptați. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 În ceea ce privește textul pe care noi încercăm să cripta, care de fapt vine mai târziu 238 00:17:11,280 --> 00:17:13,970 când ne dau acel text. 239 00:17:13,970 --> 00:17:18,260 Deci, acum suntem doar accepta ca argumente de comandă numărul real, 240 00:17:18,260 --> 00:17:21,579 schimbare reală pentru criptare Cezar. 241 00:17:21,579 --> 00:17:27,569 [Elev] De ce ai nevoie de 2, spre deosebire de doar 1 argc? Există cu siguranță un număr. 242 00:17:27,569 --> 00:17:32,200 Corect. Motivul pentru care am nevoie de 2 pentru argc în loc de 1 243 00:17:32,200 --> 00:17:36,260 se datorează faptului că atunci când executați un program și să spună. / Cezar sau / Bună ziua., 244 00:17:36,260 --> 00:17:38,280 că de fapt contează ca un argument de linie de comandă. 245 00:17:38,280 --> 00:17:43,020 Deci, care deja ocupă 1 și așa, apoi vom introducerea 1 suplimentar. 246 00:17:45,030 --> 00:17:49,440 Deci, te introducerea de fapt, un șir în argumentul linia de comanda. 247 00:17:49,440 --> 00:17:52,730 Ce vrei să faci, pentru Cezar dorim a face cu un număr întreg, 248 00:17:52,730 --> 00:17:57,180 astfel încât să puteți folosi această funcție atoi. 249 00:17:57,180 --> 00:18:02,850 Și, practic, tu treci într-un șir și apoi se va întoarce înapoi un număr întreg 250 00:18:02,850 --> 00:18:06,070 în cazul în care este posibil să se facă că într-un întreg șir. 251 00:18:06,070 --> 00:18:10,960 Acum imi amintesc cand avem de a face cu lucruri printf sau getString, cum ar fi faptul că, 252 00:18:10,960 --> 00:18:13,390 includem bibliotecile care sunt specifice pentru noi. 253 00:18:13,390 --> 00:18:19,450 Deci, la început am începe cu un hash tag standard de I / O, H,. Ceva de genul asta. 254 00:18:19,450 --> 00:18:22,430 Ei bine, nu este atoi în una dintre aceste biblioteci, 255 00:18:22,430 --> 00:18:26,600 Deci, ceea ce trebuie să facem este să avem includă dreptul de bibliotecă pentru asta. 256 00:18:26,600 --> 00:18:32,720 Deci, amintesc înapoi la Walkthrough 1 unde am discutat despre funcția manuală. 257 00:18:32,720 --> 00:18:37,110 Tastați om în terminalul dumneavoastră și apoi urmat de numele unei funcții. 258 00:18:37,110 --> 00:18:39,720 Și așa, care va aduce o listă întreagă de utilizare a acestuia, 259 00:18:39,720 --> 00:18:42,890 dar la fel de bine se va aduce la care biblioteca care aparține. 260 00:18:42,890 --> 00:18:47,000 Asa ca las asta la tine pentru a utiliza funcția manuală cu atoi 261 00:18:47,000 --> 00:18:53,360 și dau seama care biblioteca trebuie să includă pentru a putea utiliza funcția atoi. 262 00:18:54,450 --> 00:18:57,670 Deci, ne-am luat cheia și acum este vorba de text simplu, 263 00:18:57,670 --> 00:19:01,820 și astfel că de fapt va fi introduse de utilizator în cazul în care vă cere. 264 00:19:01,820 --> 00:19:05,540 Ne-am ocupat cu GetInt și GetFloat, și astfel, în aceeași ordine de idei 265 00:19:05,540 --> 00:19:07,670 vom face cu getString. 266 00:19:07,670 --> 00:19:12,440 Dar în acest caz nu avem nevoie de a face orice do în timpul sau în timp ce bucle pentru a verifica. 267 00:19:12,440 --> 00:19:14,480 GetString va da cu siguranta ne un șir de caractere, 268 00:19:14,480 --> 00:19:17,630 și am de gând să cripta orice utilizator ne-o dă. 269 00:19:17,630 --> 00:19:23,770 Deci, se poate presupune că toate aceste siruri de caractere introduse de utilizator sunt corecte. 270 00:19:23,770 --> 00:19:24,670 Mare. 271 00:19:24,670 --> 00:19:27,270 Deci, odată ce ați luat cheia și după ce ați luat textul, 272 00:19:27,270 --> 00:19:31,660 Acum, ceea ce a mai rămas este ca trebuie sa cifrare plaintext. 273 00:19:31,660 --> 00:19:36,530 Doar pentru a acoperi rapid peste jargonul, plaintext este ceea ce utilizatorul ți-o dă, 274 00:19:36,530 --> 00:19:41,030 și textul cifrat este ceea ce vă întoarceți la ele. 275 00:19:42,450 --> 00:19:45,850 Deci, siruri de caractere, pentru a putea trece prin efectiv literă cu literă 276 00:19:45,850 --> 00:19:48,550 pentru că trebuie să schimbe în fiecare scrisoare, 277 00:19:48,550 --> 00:19:51,390 Noi înțelegem că siruri de caractere, dacă ne un fel de coaja înapoi strat, 278 00:19:51,390 --> 00:19:54,130 vom vedea că acestea sunt într-adevăr doar o listă de caractere. 279 00:19:54,130 --> 00:19:55,930 Una vine după alta. 280 00:19:55,930 --> 00:20:01,690 Și astfel putem trata siruri de caractere ca matrice, deoarece acestea sunt matrice de caractere. 281 00:20:01,690 --> 00:20:05,640 Deci, să spunem că aveți un șir de nume de text, 282 00:20:05,640 --> 00:20:09,400 și în care textul este variabilă este stocat Aceasta este CS50. 283 00:20:09,400 --> 00:20:15,680 Apoi, textul de la indicele 0 ar fi un T de capital, indice 1 ar fi h, etc 284 00:20:17,530 --> 00:20:23,970 Și apoi cu matrice, în exemplul argc în args.c, 285 00:20:23,970 --> 00:20:27,090 am văzut că am avut pentru a itera peste o matrice 286 00:20:27,090 --> 00:20:32,440 și astfel am avut de a repeta de la i = 0 până i este mai mică decât lungimea. 287 00:20:32,440 --> 00:20:35,560 Deci, avem nevoie de un mod de a imaginind ce lungimea șirului nostru este 288 00:20:35,560 --> 00:20:37,090 dacă am de gând să itera peste el. 289 00:20:37,090 --> 00:20:42,300 Din fericire, din nou, există o funcție acolo pentru noi, deși mai târziu în CS50 290 00:20:42,300 --> 00:20:45,860 vei fi cu siguranta capabil să pună în aplicare și să facă funcția ta 291 00:20:45,860 --> 00:20:48,260 care poate calcula lungimea unui șir. 292 00:20:48,260 --> 00:20:52,120 Dar de acum vom folosi lungimea șirului, așa strlen. 293 00:20:52,120 --> 00:21:00,440 Ai treci într-un șir, și apoi se va întoarce vă un int care reprezintă lungimea șirului tău. 294 00:21:00,440 --> 00:21:05,840 Să ne uităm la un exemplu de modul în care am putea fi capabili de a repeta peste fiecare caracter într-un șir 295 00:21:05,840 --> 00:21:08,470 și de a face ceva cu asta. 296 00:21:08,470 --> 00:21:13,250 Ceea ce vrem să facem este itera peste fiecare caracter din șir, 297 00:21:13,250 --> 00:21:19,150 și ceea ce vrem să facem este ne imprima inapoi fiecare personaj 1 până la 1 298 00:21:19,150 --> 00:21:22,060 cu excepția vom adăuga ceva de lângă ea. 299 00:21:22,060 --> 00:21:27,020 Așa că să începem cu bucla for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Vom lăsa spațiu pentru starea. 301 00:21:32,700 --> 00:21:36,840 Dorim să itera până când vom ajunge la sfârșitul șirului, nu? 302 00:21:36,840 --> 00:21:41,340 Deci, atunci ceea ce ne dă funcția de lungimea șirului? 303 00:21:41,340 --> 00:21:43,160 [Răspuns studentul neauzit] 304 00:21:43,160 --> 00:21:46,420 Asta e lungimea argumentele de linie de comandă. 305 00:21:46,420 --> 00:21:50,650 Dar pentru un șir dorim să utilizați o funcție care ne dă lungimea șirului. 306 00:21:50,650 --> 00:21:53,090 Deci, asta e lungimea șirului. 307 00:21:53,090 --> 00:21:57,130 Și da, atunci va trebui să treci într-un șir să-l. 308 00:21:57,130 --> 00:21:59,760 Este nevoie să știe ce șir are nevoie pentru a calcula lungimea. 309 00:21:59,760 --> 00:22:03,160 Deci, în acest caz, avem de-a face cu sfoară uri. 310 00:22:04,790 --> 00:22:05,860 Mare. 311 00:22:05,860 --> 00:22:10,770 Deci, atunci ceea ce vrem sa facem, hai să printf. 312 00:22:10,770 --> 00:22:14,850 Acum, vrem să se ocupe de caractere. Dorim să imprime fiecărui caracter individual. 313 00:22:14,850 --> 00:22:22,150 Când doriți să imprimați un float, ar trebui să utilizați substituentul ca f%. 314 00:22:22,150 --> 00:22:24,580 Cu o int v-ați putea folosi d%. 315 00:22:24,580 --> 00:22:30,890 Și astfel în mod similar, cu un caracter utilizați c% să spun că voi fi imprimarea unui caracter 316 00:22:30,890 --> 00:22:34,570 care este stocat în interiorul unei variabile. 317 00:22:34,570 --> 00:22:40,840 Deci avem acest lucru, și să adăugați o perioadă de un spațiu și de la ea. 318 00:22:40,840 --> 00:22:45,430 Care sunt caractere folosim? 319 00:22:45,430 --> 00:22:49,780 Vom folosi orice caracter suntem la a șir. 320 00:22:49,780 --> 00:22:52,890 Deci, atunci vom folosi ceva cu sfoară, 321 00:22:52,890 --> 00:22:56,420 dar vrem să fie accesarea anumit caracter acolo. 322 00:22:56,420 --> 00:23:02,740 Deci, dacă un string este doar o matrice, atunci cum putem accesa elementele de matrice? 323 00:23:02,740 --> 00:23:06,480 Avem aceste paranteze pătrate, iar apoi am pus indicele acolo. 324 00:23:06,480 --> 00:23:11,820 Deci avem paranteze pătrate. Indexul nostru, în acest caz, putem folosi doar i. Exact. 325 00:23:15,290 --> 00:23:22,370 Deci, aici ne spunem că vom fi imprimarea unui caracter, urmat de un punct și un spațiu, 326 00:23:22,370 --> 00:23:30,870 și acest caracter va fi scrisoarea i-lea din s. șir nostru. 327 00:23:32,920 --> 00:23:39,330 Mă duc pentru a salva asta. Bine. 328 00:23:42,510 --> 00:23:46,840 Acum am de gând să ruleze lungimea șirului. 329 00:23:46,840 --> 00:23:53,440 Deci, am avut un șir numit OMG, iar acum este accentuat și mai mult. 330 00:23:53,440 --> 00:23:57,870 În mod similar, să spunem că, de fapt doriți să obțineți un șir de utilizator. 331 00:23:57,870 --> 00:23:59,580 Cum am putea face acest lucru? 332 00:23:59,580 --> 00:24:01,610 Înainte de a, cum am ajuns o int? 333 00:24:01,610 --> 00:24:08,040 Am spus GetInt, nu? Dar acest lucru nu este int, deci hai să getString. 334 00:24:11,780 --> 00:24:17,770 Să facem lungimea șirului. Aici nu am introduce un prompt de specific. 335 00:24:17,770 --> 00:24:19,940 Deci, eu nu știu. 336 00:24:19,940 --> 00:24:23,820 Am de gând să pun numele meu aici și așa, atunci eu pot face unul din acele lucruri 337 00:24:23,820 --> 00:24:29,600 în cazul în care am atribui un cuvânt pentru fiecare scrisoare sau ceva de genul asta. Mișto. 338 00:24:29,600 --> 00:24:31,900 Deci, asta e lungimea șirului. 339 00:24:33,000 --> 00:24:34,640 Deci, ne-am întors la Cezar. 340 00:24:34,640 --> 00:24:38,620 Avem câteva instrumente pe modul în care ne repeta peste un string, 341 00:24:38,620 --> 00:24:41,250 cum ne accesa fiecare element în parte. 342 00:24:41,250 --> 00:24:44,720 Deci, acum putem să ne întoarcem la programul. 343 00:24:44,720 --> 00:24:48,650 Așa cum am menționat mai înainte, în tabelul ASCII, cel mai bun prieten, 344 00:24:48,650 --> 00:24:52,300 te duci pentru a vedea numerele care sunt asociate cu fiecare literă. 345 00:24:52,300 --> 00:24:55,900 Deci, spune aici plaintext noastră este că sunt amețit! 346 00:24:55,900 --> 00:25:01,090 Apoi, fiecare dintre aceste caractere este de gând să aibă un număr și valoare ASCII asociate cu acesta, 347 00:25:01,090 --> 00:25:04,710 chiar apostrof, chiar și spațiul, chiar semn de exclamare, 348 00:25:04,710 --> 00:25:06,600 astfel încât veți dori să păstrați în minte. 349 00:25:06,600 --> 00:25:12,360 Deci, spune cheia noastră că utilizatorul incluse în argumentul lor linia de comanda este de 6. 350 00:25:12,360 --> 00:25:17,770 Asta înseamnă că pentru prima scrisoare, care este I, care este reprezentat de 73, 351 00:25:17,770 --> 00:25:25,610 doriți să se întoarcă la ei orice scrisoare este reprezentat de valoarea ASCII de 73 + 6. 352 00:25:25,610 --> 00:25:29,020 În acest caz, care ar fi 79. 353 00:25:30,840 --> 00:25:35,040 Acum vrem să mergem la următorul caracter. 354 00:25:35,040 --> 00:25:40,960 Deci, următoarea în indicele 1 din plaintext ar fi apostrof. 355 00:25:40,960 --> 00:25:46,780 Dar amintiți-vă vrem doar să codifica litere. 356 00:25:46,780 --> 00:25:50,040 Așa că vrem să vă asigurați că apostrof rămâne de fapt același, 357 00:25:50,040 --> 00:25:54,310 că noi nu se schimba de la 39 la 45 este tot. 358 00:25:54,310 --> 00:25:57,150 Ne dorim să-l păstrați ca un apostrof. 359 00:25:57,150 --> 00:26:00,780 Așa că vrem să ne amintim să Numai cifrare literele 360 00:26:00,780 --> 00:26:04,560 pentru ca ne dorim toate celelalte simboluri pentru a rămâne neschimbate în programul nostru. 361 00:26:04,560 --> 00:26:07,130 Un alt lucru pe care ne-o dorim este de a păstra capitalizare. 362 00:26:07,130 --> 00:26:10,250 Deci, atunci când aveți o majusculă, acesta ar trebui să rămână ca o majusculă. 363 00:26:10,250 --> 00:26:12,830 Minusculelor ar trebui să rămână la fel de mici. 364 00:26:13,620 --> 00:26:19,480 Deci, unele funcții utile pentru a fi în măsură să se ocupe numai cu litere enciphering 365 00:26:19,480 --> 00:26:22,380 și să păstreze conservarea capitalizarea de lucruri 366 00:26:22,380 --> 00:26:25,130 Este funcțiile isalpha, isupper, islower. 367 00:26:25,130 --> 00:26:29,270 Și astfel încât acestea sunt funcții care returnează o valoare booleană. 368 00:26:29,270 --> 00:26:34,180 Practic, adevărat sau fals. Este aceasta o majusculă? Este aceasta alfanumeric? 369 00:26:34,180 --> 00:26:37,180 Este aceasta o scrisoare, în esență. 370 00:26:37,180 --> 00:26:41,070 Deci, aici sunt 3 exemple de modul în care v-ați putea folosi această funcție. 371 00:26:41,070 --> 00:26:47,060 Practic, ai putea testa dacă valoarea returnată la tine de faptul că funcția este adevărată sau falsă 372 00:26:47,060 --> 00:26:49,400 bazează pe faptul că de intrare. 373 00:26:49,400 --> 00:26:54,880 Ori faci ceva care nu codifica sau cifrate l sau asigurați-vă că este scris cu majuscule, etc 374 00:26:54,880 --> 00:27:01,080 [Elev] Poți explica doar pe cei un pic mai mult și cum le folosesc? Da >>, pentru sigur. 375 00:27:01,080 --> 00:27:08,470 Deci, dacă ne uităm înapoi, aici avem un capital eu, nu? 376 00:27:08,470 --> 00:27:14,550 Deci știm că am merge la O pentru că am + 6 este O. 377 00:27:14,550 --> 00:27:18,740 Dar vrem să ne asigurăm că O este mergi la a fi un O. de capital 378 00:27:18,740 --> 00:27:22,940 Deci, practic, că este un fel de a merge pentru a schimba intrarea noastră. 379 00:27:22,940 --> 00:27:26,870 Deci, dacă este majusculă sau nu va fi un fel de a schimba modul în care avem de a face cu ea. 380 00:27:26,870 --> 00:27:32,360 Deci, dacă vom folosi funcția isupper pe acel index special, 381 00:27:32,360 --> 00:27:36,480 astfel isupper ("I"), care se întoarce pentru noi adevărat, așa că știm că e superioară. 382 00:27:36,480 --> 00:27:40,360 Deci, atunci bazat pe faptul că, mai târziu, vom merge într-o formulă 383 00:27:40,360 --> 00:27:42,750 că veți fi utilizați pentru a comuta lucrurile în Cezar, 384 00:27:42,750 --> 00:27:46,560 Deci, practic, acolo va fi o formulă ușor diferită dacă e scris cu majuscule 385 00:27:46,560 --> 00:27:50,670 spre deosebire de litere mici. Asigurați-simț? 386 00:27:51,020 --> 00:27:52,760 Da. Nu vă faceți griji. 387 00:27:54,900 --> 00:27:58,990 Am vorbit un pic despre adăugarea 6 la o scrisoare, care nu face destul de sens 388 00:27:58,990 --> 00:28:05,500 cu excepția cazului când un fel de înțeles că aceste caractere 389 00:28:05,500 --> 00:28:08,920 sunt un fel de interschimbabile cu numere întregi. 390 00:28:08,920 --> 00:28:11,250 Ce facem noi este că un fel de turnare utilizare implicite. 391 00:28:11,250 --> 00:28:18,100 Vom merge în turnarea un pic mai târziu, în cazul în care luați o valoare și îl transforma într-un alt tip 392 00:28:18,100 --> 00:28:20,440 decât a fost inițial. 393 00:28:20,440 --> 00:28:25,910 Dar cu această PSET vom fi capabili de a utiliza alternativ un fel de caractere 394 00:28:25,910 --> 00:28:30,880 și corespunzătoare acestora valori întregi. 395 00:28:30,880 --> 00:28:35,140 Deci, dacă vă înveli pur și simplu un personaj cu doar ghilimele simple, 396 00:28:35,140 --> 00:28:40,390 atunci vei fi capabil de a lucra cu ea cu numere întregi, care se ocupă cu ea ca un întreg. 397 00:28:40,390 --> 00:28:48,040 Deci, C de capital se referă la 67. F litere mici se referă la 102. 398 00:28:48,040 --> 00:28:51,480 Din nou, dacă vrei să știi aceste valori, uita-te la masa ta ASCII. 399 00:28:51,480 --> 00:28:56,160 Așa că hai să mergem în câteva exemple de modul în care s-ar putea fi capabil de a scădea și se adaugă, 400 00:28:56,160 --> 00:29:03,130 cum poți lucra de fapt, într-adevăr cu aceste personaje, le folosesc alternativ. 401 00:29:03,870 --> 00:29:11,350 Eu spun că ASCIIMath va calcula adăugarea unui caracter la un întreg 402 00:29:11,350 --> 00:29:17,590 și apoi afișează caracterul rezultant, precum și valoarea rezultantă ASCII. 403 00:29:17,590 --> 00:29:22,290 Și așa că aici vreau să spun - se ocupă cu această parte Vom mai târziu - 404 00:29:22,290 --> 00:29:29,100 dar în esență, spun că utilizatorul ar trebui să spun ASCIIMath ruleze, împreună cu o cheie, 405 00:29:29,100 --> 00:29:30,880 și eu spun că această cheie va fi numărul de 406 00:29:30,880 --> 00:29:34,600 cu care vom adăuga acest personaj. 407 00:29:34,600 --> 00:29:38,560 Deci, observați că, de aici, eu cer o cheie, 408 00:29:38,560 --> 00:29:40,590 de vreme ce eu cer ca ei să-mi dea un lucru, 409 00:29:40,590 --> 00:29:45,600 Vreau doar să accepte / asciimath. Și o cheie. 410 00:29:45,600 --> 00:29:49,330 Așa că am de gând să ceară ca argc este egal cu 2. 411 00:29:49,330 --> 00:29:54,360 Dacă nu e, atunci am de gând să se întoarcă 1 și programul va ieși. 412 00:29:55,070 --> 00:29:58,540 Deci, eu spun cheie nu va fi prima linie de comandă argumentul, 413 00:29:58,540 --> 00:30:05,080 o să fie al doilea, și așa cum vedeți aici, 414 00:30:05,080 --> 00:30:11,790 Am de gând să rândul său, că într-un număr întreg. 415 00:30:15,740 --> 00:30:19,230 Apoi, am de gând să se stabilească un caracter pentru a fi r.. 416 00:30:19,230 --> 00:30:23,970 Observați că tipul de variabila Chr este de fapt un întreg. 417 00:30:23,970 --> 00:30:30,480 Modul în care am putea folosi r ca un întreg este, prin încadrarea cu aceste ghilimele simple. 418 00:30:33,850 --> 00:30:40,560 Deci, înapoi la declarația noastră printf în cazul în care avem un substituent pentru un caracter 419 00:30:40,560 --> 00:30:43,590 și apoi un substituent pentru un număr întreg, 420 00:30:43,590 --> 00:30:49,450 caracter este reprezentat de Chr, iar întreg este cheia. 421 00:30:49,450 --> 00:30:54,320 Și așa, atunci vom adăuga în rezultatul 2, împreună. 422 00:30:54,320 --> 00:30:58,420 Deci, vom adăuga r + orice tasta este, 423 00:30:58,420 --> 00:31:03,520 și apoi vom imprima rezultatul asta. 424 00:31:06,210 --> 00:31:14,220 Deci, hai sa facem asciimath. Este până la data de, așa că hai să ruleze doar asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, dar vezi, nu face nimic pentru că nu a dat de fapt o cheie. 426 00:31:18,290 --> 00:31:23,850 Deci, atunci când sa întors la doar 1, functia principala noastră, aceasta tocmai sa întors înapoi la noi. 427 00:31:23,850 --> 00:31:29,250 Deci, atunci să treacă într-o cheie. Cineva mi dea un număr. >> [Elev] 4. 428 00:31:29,250 --> 00:31:30,920 4. Bine. 429 00:31:30,920 --> 00:31:39,280 Deci, r crescut cu 4 este de gând să ne dea v, care corespunde valorii de 118 ASCII. 430 00:31:39,280 --> 00:31:43,880 Deci, atunci un fel de logic ca - 431 00:31:43,880 --> 00:31:51,250 De fapt, pot să vă întreb, ce crezi că valoarea ASCII a r este dacă r + 4 este 118? 432 00:31:53,070 --> 00:31:55,470 Atunci da, r este 114. 433 00:31:55,470 --> 00:32:03,010 Deci, daca te uiti pe tabel ASCII, apoi, destul de sigur, veți vedea că r este reprezentat de 114. 434 00:32:03,010 --> 00:32:08,610 Deci, acum că știm că putem adăuga numere întregi la caractere, acest lucru pare destul de simplu. 435 00:32:08,610 --> 00:32:12,740 Suntem doar de gând să itera peste un șir ca și cum am vazut intr-un exemplu înainte. 436 00:32:12,740 --> 00:32:17,170 Vom verifica dacă e o scrisoare. 437 00:32:17,170 --> 00:32:20,420 Dacă este, atunci vom schimba prin orice cheie este. 438 00:32:20,420 --> 00:32:23,650 Destul de simplu, cu excepția cazului când ajungi să-i placă acest lucru, 439 00:32:23,650 --> 00:32:32,140 veți vedea că Z, reprezentată de 122, atunci s-ar da un caracter diferit. 440 00:32:32,140 --> 00:32:37,770 Noi de fapt, doresc să rămână în alfabetul nostru, nu? 441 00:32:37,770 --> 00:32:43,180 Deci, avem nevoie să aflăm un fel de fel de ambalaj în jurul valorii de. 442 00:32:43,180 --> 00:32:47,190 Când ajungeți Zed și doriți să crească cu un anumit număr, 443 00:32:47,190 --> 00:32:51,230 nu vrei să mergi în secțiunea dincolo de alfabetul ASCII; 444 00:32:51,230 --> 00:32:54,140 doriți să-și încheie înapoi tot drumul spre A. 445 00:32:54,140 --> 00:32:58,550 Dar tineti minte ce te păstrând caz. 446 00:32:58,550 --> 00:33:00,980 Deci, știind că scrisorile nu poate deveni simboluri 447 00:33:00,980 --> 00:33:05,290 la fel ca simbolurile nu sunt de gând să se schimbe, de asemenea. 448 00:33:05,290 --> 00:33:08,170 În ultimul PSET cu siguranta ai nevoie pentru a nu, 449 00:33:08,170 --> 00:33:14,310 ci o opțiune a fost de a pune în aplicare PSET dvs. lacomi cu ajutorul funcției modulul. 450 00:33:14,310 --> 00:33:17,230 Dar acum suntem de fapt de gând să nevoie de a utiliza modulul, 451 00:33:17,230 --> 00:33:19,900 așa că hai să mergem pe acest bit un pic. 452 00:33:19,900 --> 00:33:26,920 În esență, atunci când aveți x modulo y, care vă oferă restul de x împărțit la y. 453 00:33:26,920 --> 00:33:30,930 Iată câteva exemple aici. Avem 27% 15. 454 00:33:30,930 --> 00:33:36,200 Practic, atunci când scade 15 din 27 de câte ori este posibil, fără negativ 455 00:33:36,200 --> 00:33:39,060 , atunci veți primi 12 stânga peste. 456 00:33:39,060 --> 00:33:44,650 Deci, asta e un fel de, în contextul matematica, dar cum putem folosi de fapt acest lucru? 457 00:33:44,650 --> 00:33:47,100 Acesta va fi util pentru wrapover nostru. 458 00:33:47,100 --> 00:33:55,420 Pentru aceasta, să spunem că am rugat pe toți să împartă în 3 grupuri. 459 00:33:55,420 --> 00:33:58,010 Uneori, ai face acest lucru în grupuri și ceva de genul asta. 460 00:33:58,010 --> 00:34:01,320 Spune-am spus, "Bine, vreau ca toți să fie împărțită în 3." 461 00:34:01,320 --> 00:34:04,240 Cum ai putea face asta? 462 00:34:04,240 --> 00:34:06,810 [Răspuns studentul nu se aude] Da, exact. Numără off. Bine. 463 00:34:06,810 --> 00:34:10,260 Să facem asta, de fapt. Nu doriți să începeți? 464 00:34:10,260 --> 00:34:13,810 [Elevii de numărare off] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Dar amintiți-vă ... >> [Elev] Oh, îmi pare rău. 466 00:34:16,620 --> 00:34:18,730 Asta e un punct foarte bun. 467 00:34:18,730 --> 00:34:24,130 Ai spus 4, dar noi, de fapt vreau să spun 1, deoarece vrem doar 3 grupuri. 468 00:34:24,130 --> 00:34:30,159 Deci, cum - Nu, asta e un exemplu foarte bun, deoarece atunci cum ar putea să vă spun o? 469 00:34:30,159 --> 00:34:33,370 Care este relația dintre 4 si 1? 470 00:34:33,370 --> 00:34:36,760 Ei bine, 4 Mod 3 este 1. 471 00:34:36,760 --> 00:34:41,460 Deci, dacă veți continua, v-ar fi 2. 472 00:34:41,460 --> 00:34:44,540 Deci avem 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Din nou, tu ești de fapt, persoana cincea. Cum știi să spui 2 în loc de 5? 474 00:34:49,420 --> 00:34:53,760 Tu spui 5 Mod 3 este 2. 475 00:34:53,760 --> 00:34:59,100 Vreau să văd cât de multe grupuri de 3 sunt lăsate peste, atunci ce ordine am I. 476 00:34:59,100 --> 00:35:02,860 Și astfel, atunci, dacă am continuat de-a lungul intreaga camera, 477 00:35:02,860 --> 00:35:07,760 atunci vom vedea că suntem mereu aplicarea de fapt, funcția de mod de a ne 478 00:35:07,760 --> 00:35:09,990 la fel de conta off. 479 00:35:09,990 --> 00:35:14,490 Asta e un fel mai mult de exemplu concret despre cum ați putea folosi modulo 480 00:35:14,490 --> 00:35:17,960 Sunt sigur că majoritatea dintre noi, probabil, au trecut prin acest proces 481 00:35:17,960 --> 00:35:19,630 în cazul în care am avut de a conta pe. 482 00:35:19,630 --> 00:35:21,840 Orice întrebări cu privire la modulo? 483 00:35:21,840 --> 00:35:25,360 Acesta va fi destul de importantă pentru a înțelege conceptele de acest lucru, 484 00:35:25,360 --> 00:35:28,640 așa că am dori să asigurați-vă că înțelegeți voi. 485 00:35:28,640 --> 00:35:34,660 [Elev] În cazul în care nu există nici un rest, nu-l dau numărul real? 486 00:35:34,660 --> 00:35:40,430 Dacă unul dintre cele 3 primul dintre ele l-au făcut, ar fi dat ceea ce ei le-au fost de fapt, 487 00:35:40,430 --> 00:35:43,310 sau ar fi dat [neauzit] >> E o întrebare bună. 488 00:35:43,310 --> 00:35:48,750 Atunci când nu există nici restul pentru modulo - astfel încât să spunem că aveți 6 Mod 3 - 489 00:35:48,750 --> 00:35:52,340 că de fapt te dă înapoi 0. 490 00:35:53,670 --> 00:35:57,290 Vom vorbi despre asta un pic mai târziu. 491 00:35:58,810 --> 00:36:07,720 Oh, da, de exemplu, 3rd person - 3 mod 3 este de fapt 0, dar ea a spus 3. 492 00:36:07,720 --> 00:36:14,900 Deci, asta e un fel de o captură interior, de exemplu, 493 00:36:14,900 --> 00:36:17,620 cum ar fi în regulă, dacă este 0, atunci mod am de gând să fie 3rd person. 494 00:36:17,620 --> 00:36:22,740 Dar o vom face intr-un fel de modul în care am putea dori să se ocupe cu ceea ce 0 este mai târziu. 495 00:36:22,740 --> 00:36:32,750 Deci, acum avem cumva o modalitate de cartografiere Zed la scrisoarea dreapta. 496 00:36:32,750 --> 00:36:34,920 Deci, acum am trecut prin aceste exemple, 497 00:36:34,920 --> 00:36:37,880 am un fel de a vedea cum ar putea funcționa Cezar. 498 00:36:37,880 --> 00:36:42,640 Veți vedea cele 2 alfabete și apoi le vezi schimbare. 499 00:36:42,640 --> 00:36:44,430 Așa că hai să încercăm și să exprime faptul că, în ceea ce privește formula de. 500 00:36:44,430 --> 00:36:46,940 Această formulă este, de fapt dat la tine în spec., 501 00:36:46,940 --> 00:36:52,070 dar hai sa un fel de privire prin ceea ce înseamnă fiecare variabilă. 502 00:36:52,070 --> 00:36:55,000 Rezultatul final este nostru va fi cifrat. 503 00:36:55,000 --> 00:36:58,300 Deci asta spune că personajul lea a cifrat 504 00:36:58,300 --> 00:37:02,500 este de gând să corespundă caracterului lea al plaintext. 505 00:37:02,500 --> 00:37:08,130 Asta are sens, deoarece vrem să fie garnitură întotdeauna aceste lucruri. 506 00:37:08,130 --> 00:37:13,480 Așa că va fi caracterul lea al cifrat plus k, care este cheia noastră - 507 00:37:13,480 --> 00:37:17,230 care face sens - iar apoi vom avea acest mod 26. 508 00:37:17,230 --> 00:37:19,860 Amintiți-vă înapoi, atunci când am avut zed 509 00:37:19,860 --> 00:37:24,190 nu am vrut să intru în personaj, asa ca am vrut sa-l modez 510 00:37:24,190 --> 00:37:26,540 și tipul de folie in jurul alfabetul. 511 00:37:26,540 --> 00:37:33,430 După ce v-ar Zed mergi la a, b, c, d, până când a ajuns la numărul corect. 512 00:37:33,430 --> 00:37:44,690 Deci știm că Zed, în cazul în care + 6, ne-ar da f pentru că, după Zed vine a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Așa că haideți să ne amintim știm sigur că Zed + 6 este de gând să ne dea f. 514 00:37:52,530 --> 00:38:03,530 În valori ASCII, z este 122 și f este 102. 515 00:38:03,530 --> 00:38:10,570 Așa că trebuie să găsim o cale de a face formula noastră Cezar să ne dea 102 516 00:38:10,570 --> 00:38:13,590 după luarea în 122. 517 00:38:13,590 --> 00:38:19,550 Deci, dacă vom aplica această formulă doar,% ('z' + 6) 26, care de fapt îți dă 24 518 00:38:19,550 --> 00:38:25,980 deoarece 122 + 6 este 128; 128% 26 vă oferă 24 restul. 519 00:38:25,980 --> 00:38:29,140 Dar asta nu înseamnă că într-adevăr f. Asta nu e sigur 102. 520 00:38:29,140 --> 00:38:33,590 Asta nu e, de asemenea, scrisoarea 6 în alfabetul. 521 00:38:33,590 --> 00:38:41,550 Deci, evident, trebuie să avem un fel de tweaking acest bit un pic. 522 00:38:42,970 --> 00:38:51,340 În ceea ce privește alfabet regulat, știm că z este litera 26 și f este al 6-lea. 523 00:38:51,340 --> 00:38:55,460 Dar suntem în informatică, așa că o să indice la 0. 524 00:38:55,460 --> 00:39:00,690 Deci, atunci în loc de z reprezintă numărul 26, vom spune că e numărul 25 525 00:39:00,690 --> 00:39:02,630 deoarece o este 0. 526 00:39:02,630 --> 00:39:04,770 Deci, acum să se aplice această formulă. 527 00:39:04,770 --> 00:39:11,710 Avem Z reprezentat de 25 + 6, care vă oferă 31. 528 00:39:11,710 --> 00:39:15,790 26 și 31 mod vă oferă 5 ca un rest. 529 00:39:15,790 --> 00:39:20,500 Asta e perfect pentru că știm că f este litera 5 în alfabetul. 530 00:39:20,500 --> 00:39:26,400 Dar aceasta încă nu este f, corect? Încă nu este de 102. 531 00:39:26,400 --> 00:39:32,730 Deci, atunci pentru acest PSET, o provocare va fi încercarea de a afla relația 532 00:39:32,730 --> 00:39:36,910 între conversia între aceste valori ASCII și index alfabetic. 533 00:39:36,910 --> 00:39:40,280 În esență, ceea ce veți dori să faceți, vreți să începeți cu valorile ASCII, 534 00:39:40,280 --> 00:39:45,390 dar apoi doriți să traduceți cumva că într-un index alfabetic 535 00:39:45,390 --> 00:39:52,610 apoi calcula ce scrisoarea ar trebui să fie - în esență, ceea ce indicele alfabetic este 536 00:39:52,610 --> 00:39:57,660 a caracterului cifru - să traducem atunci că înapoi la valorile ASCII. 537 00:39:57,660 --> 00:40:04,870 Așa că, dacă scoți tabel ASCII, apoi încercați și de a găsi relațiile dintre, să zicem, 102 și 5 538 00:40:04,870 --> 00:40:10,440 sau 122 și 25. 539 00:40:12,140 --> 00:40:15,690 Am primit cheia noastră de argumentele de linie de comandă, am ajuns plaintext, 540 00:40:15,690 --> 00:40:17,520 l-am cifrate. 541 00:40:17,520 --> 00:40:19,820 Acum, tot ce ne-am lăsat să faceți este să-l imprimați. 542 00:40:19,820 --> 00:40:22,040 Am putea face acest lucru un cuplu de moduri diferite. 543 00:40:22,040 --> 00:40:24,570 Ce am putea face este de fapt imprima ca vom merge de-a lungul. 544 00:40:24,570 --> 00:40:28,250 Așa cum am repeta de-a lungul șir de caractere în, 545 00:40:28,250 --> 00:40:31,660 am putea pur și simplu imprima doar dreptul, atunci când l-am calcula. 546 00:40:31,660 --> 00:40:36,030 Alternativ, ai putea stoca, de asemenea, într-o matrice si au o serie de caractere 547 00:40:36,030 --> 00:40:39,280 iar la sfârșitul itera peste care întreaga gamă și imprima-l. 548 00:40:39,280 --> 00:40:40,980 Deci, aveți câteva opțiuni pentru asta. 549 00:40:40,980 --> 00:40:47,280 Și amintiți-vă că% c va fi substituent pentru imprimarea unui caracter. 550 00:40:47,280 --> 00:40:50,420 Deci nu avem Cezar, iar acum trecem la Vigenere, 551 00:40:50,420 --> 00:40:57,580 care este foarte similar cu Cezar, dar doar puțin mai complexă. 552 00:40:57,580 --> 00:41:03,310 Deci, în esență, cu Vigenere este ai de gând să fie într-un cuvânt cheie care trece. 553 00:41:03,310 --> 00:41:06,510 Deci, în loc de un număr, ai de gând să aibă un șir, 554 00:41:06,510 --> 00:41:09,200 și astfel încât va acționa în calitate de cuvinte cheie. 555 00:41:09,200 --> 00:41:14,440 Apoi, ca de obicei, ai de gând să obțineți un prompt pentru un șir de utilizator 556 00:41:14,440 --> 00:41:19,050 și cifrare, apoi ea și apoi să le dea înapoi cifrat. 557 00:41:19,050 --> 00:41:24,650 Deci, după cum am spus, e foarte asemănător cu Cezar, cu excepția în loc de a trece printr-un anumit număr, 558 00:41:24,650 --> 00:41:30,620 numărul este de fapt va schimba de fiecare dată la un personaj la. 559 00:41:30,620 --> 00:41:34,890 Pentru a reprezenta numarul real de a schimba, este reprezentată de literele de pe tastatură. 560 00:41:34,890 --> 00:41:43,150 Deci, dacă introduceți într-o schimbare de o, de exemplu, atunci care ar corespunde la o schimbare de la 0. 561 00:41:43,150 --> 00:41:45,900 Deci, este din nou înapoi la index alfabetic. 562 00:41:45,900 --> 00:41:49,100 Care ar putea fi util dacă te vezi cu care suntem de fapt, de-a face cu valorile ASCII 563 00:41:49,100 --> 00:41:51,790 precum și scrisorile, precum și indicele alfabetic, 564 00:41:51,790 --> 00:41:58,020 poate găsi sau a vă face propriul tabel ASCII care prezinta index alfabetic de la 0 până la 25, 565 00:41:58,020 --> 00:42:03,750 la A la Z, iar valorile ASCII, astfel încât să puteți vedea un fel de relație 566 00:42:03,750 --> 00:42:07,020 și schița și să încercați și de a găsi unele modele. 567 00:42:07,020 --> 00:42:11,010 În mod similar, în cazul în care ați fost trecerea de la instanță anumite prin f - 568 00:42:11,010 --> 00:42:21,110 și acest lucru este fie f litere mici sau majuscule -, atunci care ar corespunde la 5. 569 00:42:21,110 --> 00:42:24,180 Suntem bine pana acum? 570 00:42:25,770 --> 00:42:30,050 Formula pentru Vigenere este un pic diferit. 571 00:42:30,050 --> 00:42:32,960 Practic, veți vedea că e la fel ca Caesar, 572 00:42:32,960 --> 00:42:37,390 cu excepția în loc de doar k avem k indicele j. 573 00:42:37,390 --> 00:42:44,810 Observați că nu suntem i folosind, deoarece, în esență, lungimea cuvântului cheie 574 00:42:44,810 --> 00:42:49,850 nu este neapărat lungimea cifrat noastre. 575 00:42:49,850 --> 00:42:56,130 Acest lucru va fi un pic mai clar atunci când vom vedea un exemplu că am un pic mai târziu. 576 00:42:56,130 --> 00:43:03,160 Practic, dacă aveți o programul dvs. cu un cuvânt cheie de ohai, 577 00:43:03,160 --> 00:43:08,560 atunci înseamnă că de fiecare dată, ohai va fi tura. 578 00:43:08,560 --> 00:43:11,060 Deci, în funcție de ceea ce vă aflați în poziția de cuvinte cheie, 579 00:43:11,060 --> 00:43:15,800 ai de gând să transfere dvs. anumite caractere text cifrat de această sumă. 580 00:43:15,800 --> 00:43:19,630 Din nou, la fel ca și Caesar, vrem să ne asigurăm că vom păstra capitalizarea de lucruri 581 00:43:19,630 --> 00:43:22,900 și am codifica numai litere, nu caractere sau spații. 582 00:43:22,900 --> 00:43:26,330 Deci, uite înapoi la Cezar de funcțiile pe care le-ați folosit, 583 00:43:26,330 --> 00:43:32,570 modul în care te-ai decis cum să schimbe lucrurile, și să aplice acest program de la dvs. aici. 584 00:43:32,570 --> 00:43:35,260 Deci, hai sa harta asta. 585 00:43:35,260 --> 00:43:39,680 Avem un text clar pe care l-am primit de la utilizator la getString 586 00:43:39,680 --> 00:43:44,090 spun acest lucru ... este CS50! 587 00:43:44,090 --> 00:43:47,090 Atunci avem un cuvânt cheie de ohai. 588 00:43:47,090 --> 00:43:50,930 Primele 4 caractere sunt destul de simple. 589 00:43:50,930 --> 00:43:55,580 Stim ca T va fi mutat cu o, 590 00:43:55,580 --> 00:44:01,990 atunci h se va fi mutat de h, i se va fi mutat de către o. 591 00:44:01,990 --> 00:44:04,610 Aici vei vedea că o reprezintă 0, 592 00:44:04,610 --> 00:44:11,940 astfel încât, atunci valoarea finală este de fapt doar aceeași scrisoare ca înainte. 593 00:44:11,940 --> 00:44:15,250 Atunci s este deplasată cu i. 594 00:44:15,250 --> 00:44:19,370 Dar atunci aveți aceste perioade aici. 595 00:44:19,370 --> 00:44:25,960 Noi nu vrem să codifica că, așa atunci nu ne schimba cu nimic 596 00:44:25,960 --> 00:44:31,280 și imprima doar din perioada de neschimbat. 597 00:44:31,280 --> 00:44:38,020 [Elev] Eu nu înțeleg cum știi că acest lucru este deplasată de - Unde ai - >> Oh, imi pare rau. 598 00:44:38,020 --> 00:44:41,620 În partea de sus aici veți vedea că linia de comandă argumentul ohai aici, 599 00:44:41,620 --> 00:44:43,740 care va fi cuvântul cheie. 600 00:44:43,740 --> 00:44:49,550 Și așa, practic, te cu bicicleta de-a lungul caracterele din cuvântul cheie. 601 00:44:49,550 --> 00:44:52,020 [Elev] Deci, o are de gând să se deplaseze aceeași - 602 00:44:52,020 --> 00:44:56,260 Deci, o corespunde un anumit număr din alfabet. 603 00:44:56,260 --> 00:44:58,400 [Elev] Corect. Dar de unde ai luat partea de la CS50? 604 00:44:58,400 --> 00:45:02,540 Oh. Asta e în getString unde esti ca, "Dă-mi un șir pentru a codifica." 605 00:45:02,540 --> 00:45:07,510 [Elev] Au de gând să vă dau acest argument pentru a schimba prin 606 00:45:07,510 --> 00:45:09,380 și apoi veți cere șir prima ta. Da >>. 607 00:45:09,380 --> 00:45:12,440 Așa că atunci când executați programul, au de gând să includă cuvinte cheie 608 00:45:12,440 --> 00:45:14,740 în argumentele lor în linia de comandă atunci când îl rulați. 609 00:45:14,740 --> 00:45:19,740 Apoi, odată ce ați verificat că le-am dat de fapt 1 și nu mai mult, nu mai puțin, 610 00:45:19,740 --> 00:45:23,750 atunci ai de gând să le solicite un șir, să zicem, "Dă-mi un șir." 611 00:45:23,750 --> 00:45:27,630 Deci, asta e în cazul în care, în acest caz, le-am dat acest ... este CS50! 612 00:45:27,630 --> 00:45:32,090 Deci ai de gând să utilizați și de a folosi ca ohai si repeta peste. 613 00:45:32,090 --> 00:45:38,200 Observați că aici am sarit peste criptarea perioade, 614 00:45:38,200 --> 00:45:51,660 dar în ceea ce privește poziția noastră pentru ohai, următorul am folosit o. 615 00:45:51,660 --> 00:45:54,990 În acest caz, e un pic mai greu pentru a vedea pentru că e 4, 616 00:45:54,990 --> 00:45:57,710 Așa că să continuăm un pic. Doar stai cu mine aici. 617 00:45:57,710 --> 00:46:02,960 Apoi, avem i și lui, care sunt apoi tradusă de către o si h, respectiv. 618 00:46:02,960 --> 00:46:09,370 Atunci avem un spațiu, și așa mai apoi știm că nu sunt de gând să cifrare spațiile. 619 00:46:09,370 --> 00:46:18,930 Dar observați că în loc de a merge la o în acest loc chiar aici, 620 00:46:18,930 --> 00:46:28,330 suntem criptarea de o - nu știu dacă poți vedea că - chiar aici. 621 00:46:28,330 --> 00:46:33,710 Deci nu e ca tine de fapt predeterminat, sa zicem, o merge aici, h merge aici, 622 00:46:33,710 --> 00:46:39,200 A merge aici, am merge aici, o, h, a, i, o, h, a, i. Tu nu faci asta. 623 00:46:39,200 --> 00:46:43,760 Ai schimba doar poziția dumneavoastră în cuvinte cheie 624 00:46:43,760 --> 00:46:51,020 când știi că ai de gând să fie de fapt o scrisoare de criptare real. 625 00:46:51,020 --> 00:46:53,920 Oare acest tip de sens? 626 00:46:53,920 --> 00:46:55,800 Bine. 627 00:46:56,490 --> 00:46:58,500 Deci, doar unele memento-uri. 628 00:46:58,500 --> 00:47:03,760 Doriți să vă asigurați că ați avansa doar la scrisoarea următoare, în cuvântul dvs. cheie 629 00:47:03,760 --> 00:47:06,390 în cazul în care personajul tău este în text clar o scrisoare. 630 00:47:06,390 --> 00:47:09,120 Deci spune că suntem la o. 631 00:47:09,120 --> 00:47:19,310 Am observat că următorul caracter, indicele i de plaintext, este un număr, de exemplu. 632 00:47:19,310 --> 00:47:31,630 Atunci nu ne avansa j, indicele pentru a cuvintelor cheie, până când vom ajunge la o altă scrisoare. 633 00:47:31,630 --> 00:47:36,230 Din nou, tu, de asemenea, doriți să vă asigurați că ați curbat la începutul cuvântului cheie 634 00:47:36,230 --> 00:47:37,770 când ești la sfârșitul anului acesta. 635 00:47:37,770 --> 00:47:42,030 Dacă vedeți aici, suntem la I, următorul trebuie să fie o. 636 00:47:42,030 --> 00:47:47,690 Deci, doriți să găsiți o cale de a fi în măsură să curbat la începutul cuvântului cheie 637 00:47:47,690 --> 00:47:49,470 de fiecare dată când ajunge la final. 638 00:47:49,470 --> 00:47:55,040 Și astfel, din nou, ce fel de operator este utilă în acest caz, pentru ambalaj în jurul valorii de? 639 00:47:56,630 --> 00:47:59,840 Ca și în numărarea oprit exemplu. 640 00:47:59,840 --> 00:48:03,710 [Elev] sut semn. Da >>, semnul procent, care este modulo. 641 00:48:03,710 --> 00:48:11,250 Deci, modulo va veni la îndemână aici, atunci când doriți să treacă peste indicele din ohai ta. 642 00:48:11,250 --> 00:48:17,700 Și doar un indiciu rapid: Incearca sa te gandesti la ambalaj pe cuvinte cheie un pic ca pe numărare, 643 00:48:17,700 --> 00:48:23,590 în cazul în care în cazul în care există 3 grupuri, 4-a persoană, 644 00:48:23,590 --> 00:48:30,610 numărul lor, că ei au spus a fost de 4 Mod 3, care a fost de 1. 645 00:48:30,610 --> 00:48:32,880 Deci, încercați și cred că de felul acesta. 646 00:48:34,770 --> 00:48:42,740 După cum ați văzut în formulă, ori de câte ori aveți CI și apoi pi dar apoi kj, 647 00:48:42,740 --> 00:48:44,700 doriți să vă asigurați că vă păstrați evidența acestora. 648 00:48:44,700 --> 00:48:47,580 Nu aveți nevoie pentru a apela l-am, nu aveți nevoie pentru a apela-l j, 649 00:48:47,580 --> 00:48:53,270 dar doriți să vă asigurați că vă păstrați evidența poziția pe care ești puțin în text clar ta 650 00:48:53,270 --> 00:48:55,790 precum și poziția pe care ești puțin în cuvântul dvs. cheie 651 00:48:55,790 --> 00:48:59,840 deoarece acestea nu sunt în mod necesar va fi aceeași. 652 00:48:59,840 --> 00:49:06,400 Nu numai cuvinte cheie - ar putea fi o lungime complet diferit decât plaintext ta. 653 00:49:06,400 --> 00:49:09,140 De asemenea, plaintext dumneavoastră, există numere și caractere, 654 00:49:09,140 --> 00:49:14,450 așa că nu se va potrivi perfect împreună. Da. 655 00:49:14,450 --> 00:49:19,280 [Elev] Există o funcție pentru a schimba? 656 00:49:19,280 --> 00:49:24,530 Poți schimba o la capital A? Da >>, există cu siguranță este. 657 00:49:24,530 --> 00:49:27,890 Puteți verifica afară - Cred că e toupper, totul cuvânt 1. 658 00:49:30,650 --> 00:49:36,310 Dar atunci când sunteți încercarea de a cifru lucruri și să păstreze textul, 659 00:49:36,310 --> 00:49:39,350 e cel mai bine pentru a avea practic cazuri separate. 660 00:49:39,350 --> 00:49:42,040 Dacă e un majuscule, apoi doriți să schimbe prin prezenta 661 00:49:42,040 --> 00:49:46,460 deoarece în formula ta, atunci cand te uiti inapoi cum trebuie să ne fel de du-te 662 00:49:46,460 --> 00:49:50,900 alternativ între modul de reprezentare ASCII a numerelor 663 00:49:50,900 --> 00:49:55,020 și efectivă indicele alfabetic, vrem să ne asigurăm 664 00:49:55,020 --> 00:50:01,850 acolo va fi un fel de tipar pe care ai de gând să utilizați. 665 00:50:01,850 --> 00:50:04,580 O altă notă privind modelul, de fapt. 666 00:50:04,580 --> 00:50:07,250 Ai de gând să fi cu siguranta de-a face cu numere. 667 00:50:07,250 --> 00:50:11,280 Încercați să nu folosiți numere magice, care este un exemplu de stil. 668 00:50:11,280 --> 00:50:18,470 Deci, presupunem că doriți să ceva de fiecare schimbare de timp de către dori - 669 00:50:18,470 --> 00:50:22,400 Ok, deci aluzie, un alt spoiler este atunci când ai de gând să fie ceva schimbarea 670 00:50:22,400 --> 00:50:26,310 de către o anumită sumă, încercați să nu pentru a reprezenta cu un număr real 671 00:50:26,310 --> 00:50:32,810 ci mai degrabă încercați și a vedea dacă puteți utiliza valoarea ASCII, care va face un fel de mai mult sens. 672 00:50:32,810 --> 00:50:35,470 O altă notă: Pentru ca avem de-a face cu formule, 673 00:50:35,470 --> 00:50:41,200 chiar dacă TF dvs. va ști ce fel de model s-ar putea folosi, 674 00:50:41,200 --> 00:50:44,430 cel mai bine la tipul tau de comentarii explice logica, cum ar fi, 675 00:50:44,430 --> 00:50:51,880 "Sunt folosind acest model, deoarece ..." și un fel de a explica succint modelul în comentariile tale. 676 00:50:54,090 --> 00:50:58,990 [Aceasta a fost pas cu pas 2] În cazul în care nu există nici alte întrebări, atunci voi sta aici pentru un pic. 677 00:50:58,990 --> 00:51:04,370 Noroc cu PSET dvs. 2: Crypto si multumesc ca ai venit. 678 00:51:06,070 --> 00:51:08,620 [Elev] Multumesc. Multumesc >>. 679 00:51:09,220 --> 00:51:10,800 [Media intro Offline]